Subido por Eloisa LG

Computacion metodologia logica computacional

Anuncio
COMPUTACIÓN
METODOLOGÍA, LÓGICA
COMPUTACIONAL Y PROGRAMACIÓN
COMPUTACIÓN
METODOLOGÍA, LÓGICA
COMPUTACIONAL
Y PROGRAMACIÓN
Ma. del Rosario Bores Rangel
Ingeniera en Sistemas Computacionales
Profesora de planta de Computación en
el Departamento de Ciencias Básicas de
la División de Enseñanza Media en el
Instituto Tecnológico y de Estudios
Superiores de Monterrey
Campus Toluca
Gerente de producto: Alejandra Martínez Ávila
Supervisor de edición: Javier López Campoy
Supervisor de producción: Zeferino García García
COMPUTACIÓN
Metodología, lógica computacional y programación
Prohibida la reproducción total o parcial de esta obra, por
cualquier medio, sin autorización escrita del editor.
DERECHOS RESERVADOS © 1993, respecto a la primera edición por
McGRAW-HILL INTERAMERICANA DE MÉXICO, S. A. de C. V.
Atlacomulco 499-501, Fracc. Ind. San Andrés Atoto,
53500 Naucalpan de Juárez, Edo. de México
Miembro de la Cámara Nacional de la Industria Editorial, Reg. Núm. 1890
ISBN 970-10-0225-3
1234567890
9087654213
Impreso en México
Printed in México
Esta obra se terminó de imprimir en
febrero de 1993 en
Programas Educativos, S.A. de C.V.
Calz. Chabacano Núm. 65-A
Col. Asturias
Deleg. Cuauhtemoc
06850 México, D.F.
Se tiraron 4000 ejemplares
CONTENIDO
Prólogo ...............................................................................................................................
XI
PARTE I: Metodología para la solución de problemas .........................................................
1
Capítulo 1: Introducción ..................................................................................................
3
Objetivos ............................................................................................................................
1) Definición de computadora ........................................................................................
2) Definición de sistema computacional............................................................................
3) Clasificación de los componentes de un sistema computacional .....................................
4) Clasificación del hardware ...........................................................................................
A) Dispositivos de entrada .........................................................................................
B) Dispositivos de salida ...........................................................................................
C) Dispositivos de procesamiento ..............................................................................
D) Dispositivos de almacenamiento permanente .........................................................
5) Clasificación del software ............................................................................................
A) Software de aplicación ..........................................................................................
B) Software del sistema ..........................................................................................
Resumen .............................................................................................................................
3
4
4
4
5
5
6
6
6
7
7
7
8
Capítulo 2: Metodología para la solución de problemas .......................................................
9
Objetivos ............................................................................................................................
1) Definición del problema ...............................................................................................
2) Planeación de la solución .............................................................................................
3) Algoritmo.....................................................................................................................
4) Diagrama de flujo .........................................................................................................
5) Codificación y edición del programa ............................................................................
6) Pruebas y depuración ....................................................................................................
7) Documentación y mantenimiento ..................................................................................
Resumen .............................................................................................................................
9
11
12
13
15
17
18
18
19
PARTE II: Lógica computacional........................................................................................
21
Capítulo 3: Conceptos básicos ............................................................................................
23
Objetivos ............................................................................................................................
1) Tipos de datos
A) Numéricos .............................................................................................................
23
24
24
Vi
CONTENIDO
B) Alfanuméricos ....................................................................................................................
2) Zonas de memoria ......................................................................................................................
A) Constantes ...........................................................................................................................
B) Variables .............................................................................................................................
3) Expresiones .................................................................................................................................
A) Definición ...........................................................................................................................
B) Elementos de una expresión .............................................................................................
4) Tipos de operadores ...................................................................................................................
A) Asociativos ......................................................................................................................
B) Aritméticos .........................................................................................................................
C) Relaciónales........................................................................................................................
D) Lógicos ................................................................................................................................
Problema resuelto de operadores aritméticos .................................................................................
Problemas propuestos de operadores aritméticos ...........................................................................
Problema resuelto de operadores relaciónales y lógicos ...............................................................
Problemas propuestos de operadores relaciónales y lógicos.........................................................
Resumen .............................................................................................................................................
25
25
26
26
26
26
26
26
27
27
28
28
29
30
30
31
32
Capítulo 4: Tipos de problemas .......................................................................................................
33
Objetivos ............................................................................................................................................
1) Problemas secuenciales .............................................................................................................
Problemas resueltos ......................................................................................................
Problemas propuestos ......................................................................................................
2) Problemas selectivos ..................................................................................................................
2a) Problemas selectivos simples ..........................................................................................
Problemas resueltos ......................................................................................................
Problemas propuestos ......................................................................................................
2b) Problemas selectivos compuestos ...................................................................................
Problemas resueltos ......................................................................................................
Problemas propuestos ......................................................................................................
3) Problemas repetitivos.................................................................................................................
Introducción .......................................................................................................................................
1) Ciclos con un número determinado de iteraciones .................................................................
2) Ciclos con un número indeterminado de iteraciones ..............................................................
Tipos de problemas repetitivos .................................................................................................
3a) Problemas repetitivos simples .........................................................................................
Problemas resueltos ......................................................................................................
Problemas propuestos ......................................................................................................
3a.2) Número indeterminado de iteraciones .........................................................................
Problemas resueltos ...........................................................................................................................
Problemas propuestos ........................................................................................................................
Problemas repetitivos compuestos ...................................................................................................
Problemas resueltos ...........................................................................................................................
Problemas propuestos .......................................................................................................................
Resumen .............................................................................................................................................
33
34
34
51
53
54
54
69
72
72
96
98
98
99
102
103
103
104
154
155
155
175
176
176
204
205
CONTENIDO
Vii
PARTE III: Programación...................................................................................................
207
Capítulo 5: Elementos del lenguaje ..................................................................................
209
Objetivos ............................................................................................................................
Introducción .......................................................................................................................
1) Tipos de datos ..............................................................................................................
2) Zonas de memoria ........................................................................................................
3) Expresiones ............................................................. . . ................................................
4) Tipos de operadores .....................................................................................................
5) Palabras reservadas ......................................................................................................
Resumen.............................................................................................................................
209
210
210
211
212
212
214
215
Capítulo 6: Manejo de archivos...........................................................................................
216
Objetivos ............................................................................................................................
Procedimiento de entrada a Quick Basic .............................................................................
Instrucciones de manejo de archivos ...................................................................................
a) Creando un programa ...................................................................................................
b) Recuperando un programa de disco ...............................................................................
c) Guardando un programa en disco ..................................................................................
d) Imprimiendo un programa ............................................................................................
e) Ejecutando un programa ...............................................................................................
Resumen .............................................................................................................................
216
217
217
217
219
219
220
220
221
Capítulo 7: Interacción usuario-programa............................................................................
222
Objetivos ............................................................................................................................
a) Asignación ...................................................................................................................
Instrucción LET ...........................................................................................................
b) Entrada de datos ...........................................................................................................
Instrucción INPUT .......................................................................................................
c) Salida de datos ...........................................................................................................
Instrucción PRINT .......................................................................................................
Comentarios........................................................................................................................
Instrucción REM.................................................................................................................
Problemas resueltos ............................................................................................................
Problemas propuestos..........................................................................................................
Resumen .............................................................................................................................
222
223
223
225
225
226
226
227
227
228
235
236
Capítulo 8: Control de ejecución .........................................................................................
237
Objetivos ............................................................................................................................
8a) Control de ejecución condicional
Instrucción IF ... THEN ... ELSE .............................................................................
Problemas resueltos....................................................................................................
237
238
238
241
V iii
CONTENIDO
Problemas propuestos .............................................................................................................
8b) Control de ejecución incondicional ....................................................................................
Instrucción GOTO ...................................................................................................................
8c) Estructuras repetitivas: combinación de las instrucciones IF ... THEN ... ELSE
y GOTO .................................................................................... ■ ...........................................
Problemas resueltos ................................................................................................................
Problemas propuestos .............................................................................................................
8d) Estructuras repetitivas: Instrucción FOR ... NEXT ..............................................................
Problemas resueltos ................................................................................................................
Problemas propuestos .............................................................................................................
Resumen ............................................................................................................................................
261
261
261
262
262
274
274
282
309
310
Capítulo 9: Funciones ......................................................................................................................
311
Objetivos ............................................................................................................................................
9a) Funciones predefinidas ............................................................................................................
1) Funciones numéricas .......................................................................................................
Funciones trigonométricas ..............................................................................................
Función SIN......................................................................................................................
Función COS ....................................................................................................................
Función TAN ....................................................................................................................
Función ARCTAN ...........................................................................................................
Funciones aritméticas .............................................................................................................
Función SQR ....................................................................................................................
Función ABS ....................................................................................................................
Función FIX......................................................................................................................
Función INT ..................................................................................................................
Problemas resueltos ..........................................................................................................................
Problemas propuestos .......................................................................................................................
2) Funciones alfanuméricas .................................................................................................
Función LEFT$ ................................................................................................................
Función RIGHT$ .............................................................................................................
Función MID$ ...............................................................................................................
Función LEN ....................................................................................................................
Función SPACE$ .............................................................................................................
Concatenación de expresiones alfanuméricas...............................................................
Problemas resueltos ..........................................................................................................................
Problemas propuestos .......................................................................................................................
9b) Funciones definidas por el usuario ........................................................................................
1) Funciones de una sola línea ............................................................................................
2) Funciones multilínea .......................................................................................................
Problemas resueltos ..........................................................................................................................
Problemas propuestos.......................................................................................................................
Resumen ............................................................................................................................................
311
313
313
313
313
313
314
314
314
314
315
315
316
317
322
323
323
323
324
324
325
325
326
339
339
340
340
341
343
345
CONTENIDO
iX
Capítulo 10: Procesos modulares .........................................................................................
346
Objetivos .............................................................................................................................
1) Función ......................................................................................................................
2) Subrutina.......................................................................................................................
3) Procedimiento ...............................................................................................................
4) Subprogramas ...............................................................................................................
5) Programas .....................................................................................................................
Problemas resueltos .............................................................................................................
Problemas propuestos ..........................................................................................................
Resumen..............................................................................................................................
346
349
349
350
350
351
351
365
366
Capítulo 11: Estructuras de datos .........................................................................................
367
Objetivos .............................................................................................................................
1) Arreglos ........................................................................................................................
Instrucción DIM .........................................................................................................
Instrucción OPTION BASE ..........................................................................................
Problemas resueltos ...................................................................................................
Problemas propuestos .................................................................................................
2) Matrices ........................................................................................................................
Problemas resueltos .............................................................................................................
Problemas propuestos ..........................................................................................................
3) Archivos de datos..........................................................................................................
Organización de los archivos de datos ...........................................................................
1) Secuenciales...........................................................................................................
2) Aleatorios o directos ..............................................................................................
Archivos de datos aleatorios..........................................................................................
Proceso para accesar un archivo de datos aleatorio ........................................................
Concepción del archivo de datos ...................................................................................
Operaciones con los archivos aleatorios ........................................................................
1) Altas .............................................................................................................................
2) Bajas .............................................................................................................................
3) Consultas ...................................................................................................................
4) Cambios ........................................................................................................................
5) Reporte general .............................................................................................................
6) Reportes específicos......................................................................................................
Instrucciones y funciones para el manejo de archivos de datos aleatorios ........................
Instrucción OPEN ......................................................................................................
Instrucción FIELD# ...................................................................................................
Instrucción LSET ..........................................................................................................
Instrucción RSET..........................................................................................................
Instrucción PUT# ..........................................................................................................
Instrucción GET# .........................................................................................................
Instrucción CLOSE#.....................................................................................................
Función LOF ................................................................................................................
367
368
369
370
371
381
381
382
391
392
395
395
395
395
395
396
397
398
398
398
399
399
399
400
400
401
401
402
403
403
404
404
X
CONTENIDO
Función MKS$ .............................................................................................................
Función MKD$ .............................................................................................................
Función MKI$ ...........................................................................................................
Función MKL$ .............................................................................................................
Función CVS ................................................................................................................
Función CVD ...............................................................................................................
Función CVI ..............................................................................................................
Función CVL ................................................................................................................
Instrucciones para dar presentación a un programa ........................................................
Instrucción CLS ............................................................................................................
Instrucción LÓCATE ....................................................................................................
Problemas resueltos .............................................................................................................
Problemas propuestos ..........................................................................................................
Resumen..............................................................................................................................
405
405
405
406
406
406
406
406
407
407
407
407
450
457
índice analítico ....................................................................................................................
459
PRÓLOGO
El presente libro está destinado a todos aquellos interesados en iniciarse en la programación de
computadoras.
Nuestra motivación para hacerlo fue que no pudimos encontrar en el mercado un libro que
enseñara al alumno a programar con una metodología gradual y sencilla. Muchos de los libros que
revisamos enseñan a programar directamente sobre un lenguaje de computadora, lo cual hace que la
programación dependa de un lenguaje determinado; otros emplean metodologías que confunden al
estudiante por la forma poco gradual en que tratan los temas; otros más incluyen pocos ejercicios,
con lo que la práctica del alumno, base del aprendizaje en la programación de computadoras, se ve
minimizada.
Con este libro buscamos resolver estas deficiencias, pues empleamos una metodología que
presenta los temas de una manera gradual y organizada; además, incluimos dos tipos de problemas
para que el estudiante se ejercite:
— Los problemas resueltos, en los cuales se muestra, paso a paso, la forma de resolver un
problema dado.
— Los problemas propuestos, que tienen como propósito que el estudiante aplique la teoría
aprendida para que, por sí mismo, resuelva un problema dado.
La obra está dividida en tres grandes partes. En la primera describimos tanto las partes de la
computadora —con un enfoque dirigido hacia la programación— como los pasos de la metodología
que usamos a lo largo del libro para la solución de los problemas. En la segunda parte enseñamos los
conceptos de lógica computacional necesarios para poder programar en cualquier lenguaje computacional. Nos hemos basado en técnicas tales como los algoritmos y los diagramas de flujo, incluidos
como pasos de la metodología. En la última parte, la fase de elaboración de programas, enseñamos
la versión Quick Basic del lenguaje Basic para lograr el objetivo de hacer programas funcionales y
estructurados.
Los capítulos que integran cada parte están organizados de la siguiente manera: primero se
presentan los objetivos del capítulo; a continuación se expone la teoría, se resuelven problemas, se
dejan problemas propuestos para el estudiante y, finalmente, el capítulo concluye con un resumen de
conceptos.
Dada la estructuración de los capítulos y la exposición de los conceptos, pensamos que este libro
puede usarse de manera autodidacta o como libro de texto para materias de introducción a la
programación de computadoras. De hecho este libro cubre el temario del curso de la materia
Computación de la enseñanza media del Instituto Tecnológico y de Estudios Superiores de Monterrey.
Por último hemos elaborado, para el maestro, un manual de soluciones de, aproximadamente, la
mitad de los problemas propuestos. Dicho manual, que puede adquirirse por separado, creemos que
será de gran utilidad. También recomendamos al maestro que utilice los problemas propuestos del
último capítulo de este libro como proyectos finales para el alumno.
Agradecemos infinitamente el apoyo moral brindado por nuestros padres, hermanos, esposos e
hijos para que la elaboración de este libro fuera posible.
Los autores
PARTE
I
METODOLOGÍA PARA
LA SOLUCIÓN
DE PROBLEMAS
CAPÍTULO
1
INTRODUCCIÓN
OBJETIVOS
Al final de este capítulo el alumno:
1.1 Será capaz de definir los siguientes conceptos:
a) Computadora
b) Procesamiento de información
c) Sistema computacional
1.2 Explicará y clasificará los componentes de un sistema computacional:
1.2.1 Hardware
á) Dispositivos de entrada
b) Dispositivos de salida
c) Dispositivos de procesamiento
d) Dispositivos de almacenamiento permanente
1.2.2 Software
a) De aplicación
b) Del sistema
1.3 Identificará los componentes más importantes de la computadora por la función que realizan en
ella.
3
CAPÍTULO
1
INTRODUCCIÓN
1) DEFINICIÓN DE COMPUTADORA
Una computadora es una máquina electrónica que resuelve tareas relacionadas con el procesamiento
de información, con una gran velocidad y precisión.
Se entiende por procesamiento de información el tratamiento que reciben los datos para producir
nueva información. Por ejemplo, si se tienen los datos (horas trabajadas, horas extras y pago por hora)
de cada uno de los empleados de una empresa, se puede obtener la cantidad total de dinero que recibe
cada uno en una semana determinada.
La finalidad de la computadora es ayudar al hombre a realizar las tareas repetitivas en menor
tiempo y con mayor exactitud. Esto permite que el hombre dedique su tiempo a tareas más creativas.
Es importante notar que la computadora no razona de manera autónoma; simplemente ejecuta una
serie de instrucciones que le proporciona un humano.
2)
DEFINICIÓN DE SISTEMA COMPUTACIONAL
Se le llama sistema computacional al conjunto de componentes computacionales que, de manera
integral, ayudan a resolver un problema que requiere de procesamiento de información.
3)
CLASIFICACIÓN DE LOS COMPONENTES DE UN SISTEMA
COMPUTACIONAL
Un sistema computacional consta de componentes físicos y lógicos.
Los componentes físicos, o tangibles, conocidos como hardware, son los que realizan las tareas
y entre ellos se encuentran los componentes eléctricos y electromagnéticos, así como sus interconexiones.
Los componentes lógicos o intangibles, conocidos como software, son los que indican al hardware
qué hacer y cómo hacerlo.
4
CAPÍTULO 1. INTRODUCCIÓN
5
En un humano también podemos encontrar componentes físicos y lógicos; por ejemplo, cuando se
lanza una pelota, el brazo (componente físico) realiza la acción de tomar y lanzar la pelota, pero es el
conjunto de órdenes (componente lógico) emitidas por el cerebro las que le indicarán al brazo que
lleve a cabo este par de acciones, y cómo hacerlo.
4)
CLASIFICACIÓN DEL HARDWARE
La clasificación de los componentes considerados como hardware está apegada a los recursos que
utiliza el hombre cuando resuelve alguna tarea de procesamiento de información. Los componentes
se clasifican en:
A)
B)
C)
D)
DISPOSITIVOS DE ENTRADA
DISPOSITIVOS DE SALIDA
DISPOSITIVOS DE PROCESAMIENTO
DISPOSITIVOS DE ALMACENAMIENTO PERMANENTE
Por ejemplo, si se pretende que una computadora realice la tarea de obtener el promedio de tres
números cualesquiera, ésta debe tener medios para preguntar cuáles son esos tres números. También
debe tener manera de efectuar la suma de éstos y la división entre 3. Asimismo, debe tener un medio
de comunicación para mostrar el promedio que obtuvo.
Si este problema lo tratara de resolver un humano en vez de la computadora, tendría que hacer lo
siguiente:
1)
2)
3)
4)
5)
6)
Pedir el primer número y anotarlo en algún lugar, para evitar olvidarlo.
Pedir el segundo número y anotarlo.
Pedir el tercer número y anotarlo.
Efectuar la suma aritmética de estos tres números y anotar el resultado en algún lugar.
Dividir el resultado anterior entre 3 y anotarlo en algún lugar.
Mostrar el resultado anterior.
Quien hizo el proceso debió tener oídos para escuchar los tres números que se le dieron, papel y
lápiz para retenerlos y ayudarse a obtener los resultados de la suma y de la división; tener cerebro
para realizar estas operaciones, y boca para leer el resultado.
Así pues, esta persona tuvo canales de comunicación para preguntar datos y emitir resultados, y
medios de procesamiento para realizar sus operaciones. De un modo análogo, la computadora también
tiene canales de comunicación para recibir y emitir datos, así como medios de procesamiento.
Vamos ahora a estudiar las partes de una computadora analizándola desde el punto de vista de la
información que emite, recibe y procesa.
A) Dispositivos de entrada
Éstos son los componentes que permiten a la computadora recibir información.
El dispositivo más común que permite recibir información del exterior es el teclado, el cual permite
que se introduzca información cuando se oprimen sus teclas.
6
PARTE I. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS
Otro dispositivo común es el ratón o mouse el cual permite que se seleccione información para
así darle órdenes a la computadora, deslizándose a través de la pantalla.
Alternativamente existen más dispositivos para que la recepción o entrada de datos se lleve a cabo;
algunos de ellos son: el lápiz óptico, el scanner, etcétera.
B) Dispositivos de salida
Son los componentes que le permiten a la computadora mostrar al exterior la información.
El dispositivo más usado para exteriorizar la información procesada es el monitor o pantalla, el
cual permite visualizar letras, números, símbolos especiales e imágenes.
Otro dispositivo especialmente útil, pues permite obtener la información impresa, es la impresora.
C) Dispositivos de procesamiento
Son los componentes que permiten procesar información.
Éstos son en sí el "cerebro" de la computadora. Hasta ahora, tanto los dispositivos de entrada
como los de salida, no resultan ser más que dispositivos periféricos a la computadora, porque sólo le
sirven para transmitir información de o hacia el exterior. Se compone de dos partes:
a) CPU (Central Procesing Unit: Unidad Central de Procesamiento). Es un circuito electrónico
de la computadora capaz de realizar operaciones aritméticas y lógicas, así como coordinar
todas las acciones de la computadora.
b) Memoria principal. Es un conjunto de circuitos electrónicos que permiten almacenar y
recuperar datos en forma de señales eléctricas. Las acciones de almacenar y recuperar los datos
son ejecutadas por el CPU; la memoria sólo es un lugar de almacén de datos; es temporal,
porque los almacena sólo mientras esté presente la corriente eléctrica, pero es de muy rápido
acceso pues la información viaja a manera de señales eléctricas.
D) Dispositivos de almacenamiento permanente
Estos componentes son conocidos como memoria secundaria, y permiten almacenar la información
en forma permanente.
Debido a que la memoria principal es temporal, la información es trasladada a la memoria
secundaria cuando se desea que ésta quede almacenada y que su permanencia no dependa de la
presencia de la corriente eléctrica.
La memoria secundaria es permanente debido a que la información es almacenada por medios
electromagnéticos, pero se reduce significativamente su velocidad de acceso, en contraste con la
velocidad de la memoria principal.
Los dispositivos de almacenamiento permanente o secundario son considerados como dispositivos
de entrada, pues el CPU, al recuperar la información que había sido almacenada previamente en
memoria secundaria, está recibiendo información. Éstos mismos también son considerados como
dispositivos de salida cuando el CPU manda la información de memoria principal a la memoria
secundaria. Por lo tanto son considerados como dispositivos de entrada/salida.
CAPÍTULO I. INTRODUCCIÓN
7
Como ejemplos podemos citar el disco duro, el disco flexible (diskette), la cinta y el disco óptico.
5) CLASIFICACIÓN DEL SOFTWARE
Se clasifica en:
A) Software de aplicación
B) Software del sistema
A) Software de aplicación
Es un software que tiene un propósito específico. Por ejemplo:
•
•
•
•
Software de contabilidad
Software de nómina
Software de facturación
Software de procesamiento de textos, etcétera.
B) Software del sistema
Es un software que auxilia en la creación, modificación y ejecución del software de aplicación.
Ejemplos;
Sistema operativo: es un software que establece la comunicación entre los componentes del
hardware y el resto del software. Su función principal es administrar el funcionamiento del hardware
según las órdenes dadas por algún software. Por ejemplo, si usando un software de procesamiento de
textos, se desea imprimir un trabajo, el sistema operativo verifica que la impresora esté encendida,
si lo está, permite que se realice la impresión, y durante ésta, continúa verificando su estado; si la
impresora no está encendida envía un mensaje indicándolo. Si el sistema operativo no estuviera
presente la comunicación entre el software de procesamiento de textos y la impresora no podría
realizarse. Lo mismo ocurriría con cualquiera otra interacción entre hardware y software.
Lenguajes: es un software que proporciona un conjunto de vocablos y reglas, que se utilizarán para
crear el software de aplicación.
A su vez, los lenguajes se clasifican en:
a)
Bajo nivel: Utilizan vocablos directamente entendibles por el CPU de la computadora.
Por ejemplo: Lenguaje máquina, ensamblador.
b) Alto nivel: Utilizan vocablos parecidos al lenguaje humano pero ininteligibles para el CPU,
por lo cual deben ser traducidos a un lenguaje computacional de bajo nivel.
Por ejemplo: Basic, Pascal, Cobol, DBase, etcétera.
8
PARTE I. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS
RESUMEN
Computadora: Máquina electrónica que resuelve tareas relacionadas con el procesamiento de
información con una gran velocidad y precisión.
Sistema computacional: Es el conjunto de componentes computacionales que de manera integral
ayudan a resolver un problema que requiera de procesamiento de información. Se clasifica en:
Hardware: Componentes físicos o tangibles. Están incluidos los componentes eléctricos, electromagnéticos e interconexiones, y son los que llevan a cabo las tareas. Se clasifica en:
Dispositivos de entrada: Son componentes que permiten recibir información. El más común es
el teclado, pero también existen el mouse, lápiz óptico, scanner, etcétera. Dispositivos de
salida: Son componentes que permiten mostrar información al exterior. Los más comunes
son la pantalla y la impresora.
Dispositivos de procesamiento: Son componentes que permiten procesar información; conforman el "cerebro" de la computadora. Éstos son:
CPU: Circuito electrónico que lleva a cabo las operaciones aritméticas y lógicas y además
coordina todas las acciones de la computadora.
Memoria principal: Conjunto de circuitos electrónicos que permiten almacenar datos en
forma de señales eléctricas, por lo cual es de rápido acceso, pero temporal. Dispositivos de
almacenamiento permanente: Llamados también memoria secundaria; permiten almacenar y
recuperar información por medios electromagnéticos, por lo que es de acceso lento pero
permanente. Ejemplos; disco duro, disco flexible.
Software: Componentes lógicos o intangibles. Indican al hardware qué hacer y cómo hacerlo. Se
clasifica en:
Software de aplicación: Software con un propósito específico. Ejemplo: software de contabilidad, software de nómina, etcétera.
Software del sistema: Software que ayuda a la creación, modificación y ejecución del software
de aplicación. Ejemplos: sistema operativo y lenguajes.
CAPÍTULO
2
METODOLOGÍA PARA LA
SOLUCIÓN DE PROBLEMAS
OBJETIVOS
El alumno será capaz de enunciar cada uno de los pasos de la metodología para la solución de
problemas, así como las características de cada paso.
2.1 El alumno definirá la metodología para la solución de problemas.
2.2 El alumno describirá cada uno de los siguientes pasos:
2.2.1 Definición del problema
2.2.2 Planeación de la solución
2.2.3 Forma de seleccionar o formular un algoritmo
— El alumno definirá qué es un algoritmo,
— El alumno describirá las características generales de los algoritmos
— El alumno enumerará las acciones que se pueden llevar a cabo con los algoritmos
2.2.4 Diagrama de flujo
— El alumno definirá qué es un diagrama de flujo
— El alumno explicará la siguiente notación: a) Bloques terminales, b) Bloques de
entrada y salida, c) Bloques de proceso, d) Bloques de decisión o condicionales, é)
Bloques de conexión
2.2.5 Codificación y edición del programa
— El alumno definirá qué es codificación
— El alumno definirá qué es edición del programa
2.2.6 Pruebas y depuración
— El alumno explicará la importancia de las pruebas y la depuración de un programa
para la validación de resultados
2.2.7 Documentación y mantenimiento
— El alumno explicará la importancia de la documentación de un programa computacional
— El alumno explicará la importancia del mantenimiento de un programa computacional
para su actualización
2.3 El alumno explicará la interrelación de los siguientes términos: Programador, Programa, Computadora, Sujeto de acción
2.4 El alumno enumerará las características esenciales de un programador.
CAPÍTULO
2
METODOLOGÍA
PARA LA SOLUCIÓN
DE PROBLEMAS
Ya sabemos que una computadora es un aparato electrónico que ejecuta tareas de una manera veloz
y precisa, pero no es capaz de razonar autónomamente.
Por eso la persona que instruirá a la computadora es la que debe razonar el problema. Si la persona
la instruye correcta o incorrectamente ésta hará de igual manera las tareas que se le encomienden.
La persona capaz de instruir a la computadora usando algún lenguaje computacional, es llamado
programador; se le llama programa al conjunto de instrucciones escritas en un lenguaje computacional.
Cuando algún problema que requiera procesamiento de información es resuelto sin ayuda de una
computadora, a la persona que lo resuelve de ahora en adelante le llamaremos sujeto de acción.
Como ahora el problema va a ser solucionado con la ayuda de una computadora, es indispensable
que el programador se ponga en lugar del sujeto de acción, identifique todas las acciones que éste
llevaría a cabo y que posteriormente instruya a la computadora para que sea ésta quien haga el trabajo
del sujeto de acción.
Ahora bien, por una parte, está el sujeto de acción en una situación a resolver; por otra, está el
programador que debe pensar como el sujeto de acción y también programar la computadora; y por
otra, la misma computadora que, ejecutando un programa, resolverá el problema en lugar del sujeto
de acción.
Es conveniente definir ahora la interrelación de estos elementos.
En primer lugar, la computadora es la que realizará una serie de instrucciones programadas por
el programador para la correcta y rápida resolución del problema.
En segundo lugar, el sujeto de acción sabe lo que requiere, y el programador debe entender eso
perfectamente para que obtenga su objetivo.
Por último, el programador va a instruir a la computadora. Pero para ello debe hacerlo con un
10
CAPÍTULO 2. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS
11
lenguaje que ella entienda, y, principalmente, con un orden de acciones adecuado para una correcta
funcionalidad.
Resumiendo, podría decirse que el programador es un traductor de las necesidades del sujeto de
acción a acciones ejecutables por la computadora.
Es posible que el sujeto de acción y el programador sean el mismo, cuando el programador
requiera resolver una situación personal por medio de la computadora.
Por el contrario, puede ser que el sujeto de acción, sea un conocido suyo, dueño de un negocio,
y desee llevar un control sobre lo que vende diariamente, y usted, el programador, se permita
ayudarle con un programa. Para esto tendría que ponerse de acuerdo con él en qué quiere, exactamente,
y de qué información dispone para lograrlo. Entre mejor se logre esta comprensión de la situación, más
rápido se llega a la solución de la misma.
Un programador debe entonces tener tres características esenciales:
1) Ser capaz de analizar un problema hasta entenderlo a la perfección.
2) Saber enumerar una serie de pasos por medio de los cuales se va a llegar a la solución del
problema, tomando en consideración las capacidades de la computadora.
3) Conocer un lenguaje de computación adecuado a la solución del problema.
En este capítulo hablaremos de la metodología para la solución de problemas por medio de una
computadora; antes comentaremos algunas de sus ventajas y desventajas. Como ventajas podemos
citar que una computadora hace las cosas considerablemente rápido. Asimismo, tiene lenguajes con
vocabularios que, aunque parcos, pueden ser increíblemente poderosos. Además, si se le instruyó
correctamente, hace las cosas de manera perfecta. El inconveniente es que no está preparada para
eventualidades. Por ejemplo si en la calle un perro ve que se le va a atravesar una bicicleta, éste puede
detenerse aunque no se haya entrenado para ello; pero a una computadora se le debe programar contra
todas las posibles condiciones del problema. Afortunadamente la computadora no tiene que cruzar la
calle para ejecutar sus programas.
El programador debe tener todas las características enumeradas anteriormente. No hay que
olvidar que la práctica es fundamental para adquirir y/o afinar estas características.
La práctica debe hacerse mediante una serie de pasos, llamados metodología para la solución de
problemas por medio de la computadora, los cuales se enumeran a continuación:
1)
2)
3)
4)
5)
6)
7)
1)
Definición del problema
Planeación de la solución
Algoritmo
Diagrama de flujo
Codificación y edición del programa
Pruebas y depuración
Documentación y mantenimiento
DEFINICIÓN DEL PROBLEMA
La definición del problema se centra en la elaboración de un texto que nos permitirá saber qué es lo
que se pretende solucionar, y nos proporcionará información útil para el planteamiento de la solución.
12
PARTE I. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS
En este libro el texto que compone la definición del problema se encontrará ya elaborado. Cabe
mencionar que no siempre será útil la información que se proporcione para poder solucionar el
problema.
Para ejemplificar, analice la siguiente definición de un problema:
Se pretende determinar cuánto mide el lado oeste de un terreno de 600 m2, que tiene forma
rectangular y que el dueño conoce lo que mide el lado norte. Cabe mencionar que dentro de la
superficie del terreno, en la parte central, existe un gran agujero que impide el paso, principalmente
de norte a sur.
Por lo anterior, nos damos cuenta que, puesto que no tenemos la necesidad de ir a medir el terreno,
la información de la segunda oración es totalmente inútil. De hecho, para efectos de la solución, no
nos afecta que algún despistado caiga en el agujero mencionado.
2) PLANEACIÓN DE LA SOLUCIÓN
En este paso se debe entender por completo el problema, y dejar en claro cuál es la información útil
que se nos da, qué otra nos hace falta y, con base en esto, determinar la mejor solución.
Si nos hiciera falta información, en esta fase del problema se podría determinar que el problema
no tiene solución.
En esta fase también definimos formalmente lo que debemos entregar como resultado. Dado que
esta información, una vez resuelto el problema, saldrá de la computadora, podemos decir que es una
salida de información. De igual manera, la información adicional que necesitemos pedir, constituye
una entrada de información hacia la computadora.
Volviendo al ejemplo del terreno, definamos entonces cuáles son las entradas, salidas, datos
adicionales, y solución al problema.
SALIDA: Medida del lado oeste del terreno.
ENTRADA: Necesitamos preguntarle al dueño cuánto mide el lado norte del terreno, pues no se
da en la redacción de! problema.
DATOS ADICIONALES DE QUE SE DISPONEN: La superficie total del terreno, que es de 600
m2.
SOLUCIÓN: Dado que la superficie de un rectángulo está dada por la fórmula:
superficie = lado A x lado B,
tenemos como dato la medida de la superficie, 600 m2; también podemos decir, que el lado A es el
lado oeste de nuestro terreno, mientras que el lado B vendría siendo el lado norte, por lo que la fórmula
podría quedar de la siguiente manera:
600 = lado oeste
x
lado norte
Puesto que el lado norte es una información que, una vez obtenida, podremos disponer de ella,
podemos decir que:
600
lado oeste =
lado norte
CAPÍTULO 2.
METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS
13
Aplicando esta fórmula, podremos llegar a la solución.
Observe que las unidades de la superficie del terreno han sido omitidas, pues la computadora puede
realizar la operación aritmética, pero no el trabajo con unidades. Así que desde esta etapa se omitirá
el uso de unidades.
3) ALGORITMO
Algoritmo es una serie de pasos ordenados, encaminados a resolver un problema. Para establecer esta
serie de pasos se requiere de una reflexión previa del problema dada por el .paso anterior (planeación
de la solución). Además, se podrá observar que aunque en el paso anterior ya supimos qué fórmula
aplicar para obtener la solución al problema del terreno, nada nos dice qué hacer antes y después de
aplicar la fórmula.
Las acciones que se pueden llevar a cabo en un algoritmo son las siguientes: Pedir datos, desplegar
datos, evaluar condiciones y ejecutar operaciones. A continuación explicamos el uso de cada una de
ellas.
1) Pedir datos
Lo que una computadora puede pedir son números o palabras, que automáticamente son asignados a
una zona de la memoria de la computadora, llamada como el programador quiere nombrarle. Puede
ser una pequeña zona llamada número y que contenga al número 5, o puede ser una zona menos
pequeña llamada oración que contenga la frase "Estoy aprendiendo computación". A estas zonas de
memoria en donde se guardan datos se les denomina variables.
Formato de petición de datos:
PEDIR variable Ejemplos:
PEDIR costo
PEDIR edad
PEDIR nombre
2) Desplegar datos
Una computadora puede mostrarnos, por pantalla o impresora, números o palabras que, en su
conjunto, nos den el resultado esperado. Probablemente estos números o palabras estén almacenados
en variables creadas durante la ejecución del programa.
Formato del despliegue de datos:
Ejemplo:
DESPLEGAR mensaje
14
PARTE I. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS
DESPLEGAR variable
DESPLEGAR mensaje / variable
Ejemplo:
DESPLEGAR "el valor excede a 200 000 pesos"
DESPLEGAR edad DESPLEGAR "el nombre de la
persona es": nombre
3) Evaluar condiciones
La computadora es capaz de comparar números para saber si alguno es mayor, menor o igual que
otro; también es capaz de comparar palabras para saber si alguna es más extensa o tiene precedencia
alfabética sobre la otra, etcétera. El propósito de evaluar condiciones es decidir qué acción es la que
va a seguir a continuación en caso de que nuestra condición se cumpla o no.
Formatos para evaluar condiciones:
SI condición ENTONCES
conjunto de acciones
DE OTRA FORMA
conjunto de acciones
SI condición ENTONCES
conjunto de acciones
Ejemplo: SI precio < 200 000 ENTONCES
DESPLEGAR "El precio es accesible"
DE OTRA FORMA
DESPLEGAR "El precio es inaccesible"
PEDIR precio-nuevo
4) Ejecutar operaciones
La máquina puede realizar operaciones aritméticas guardando el resultado en alguna variable.
También puede determinar un valor inicial para alguna variable.
Formato para realizar operaciones:
variable ←expresión numérica
variable ← expresión alfanumérica
Ejemplos:
nueva-edad ← edad + 10
Lo cual significa que el valor de la variable edad, incrementado en 10, es almacenado
CAPÍTULO 2.
METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS
15
en otra zona de la memoria llamada nueva-edad, con lo cual estamos creando una nueva
variable.
gastos-actuales ←56 000
Lo cual significa que la variable gastos-actuales simplemente toma el valor de 56 000.
Volviendo al ejemplo del terreno, el algoritmo para resolver el problema es:
1) PEDIR lado-norte
2) lado-oeste ← 600/ lado-norte
3) DESPLEGAR "la longitud del lado oeste es", lado-oeste
Al llevar a cabo este algoritmo se puede observar una vez más que:
El paso 1 es una entrada de información; el paso 2 es una operación que ejecuta la computadora,
y el paso 3 es una salida de información.
4) DIAGRAMA DE FLUJO
Un diagrama de flujo está definido como la representación gráfica de un algoritmo. Un diagrama de
flujo debe de hacerse porque resulta más fácil entender dibujos que entender un texto, sobre todo
cuando el algoritmo tiende a hacerse grande.
En un diagrama de flujo existen figuras con información dentro de cada una de ellas, con flechas
que indican su secuencia. A las figuras les vamos a llamar de ahora en adelante bloques; existen
bloques de varios tipos:
A) Bloques terminales
Se emplean para indicar el principio y el fin del diagrama de flujo. Su forma es:
Si se escribe la palabra INICIO dentro del símbolo, sirve como el bloque indicador del inicio
del diagrama de flujo. Si se escribe la palabra FIN, será el que indique que se ha terminado. Debe
haber sólo un bloque de inicio y uno de fin en todo el diagrama de flujo.
B) Bloques de entrada/salida
Se emplean para introducir datos a la computadora o exteriorizarlos. El
bloque de entrada de datos tiene la siguiente forma:
16
PARTE I. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS
El bloque de salida de datos tiene la siguiente forma:
Dentro de las figuras se anotan los datos que están entrando o saliendo, según el caso.
C) Bloques de proceso
En ellos se indica una acción imperativa o una operación aritmética. Su forma es:
D) Bloques de decisión o condicionales
Son preguntas del tipo SI o NO, que pueden alterar la secuencia en la ejecución de los bloques del
diagrama de flujo, dependiendo si la respuesta es afirmativa o negativa. Su forma es:
Dentro de la figura, se anota la pregunta. A la derecha se indica la acción o acciones que deben
hacerse en el caso de que la respuesta a la pregunta sea afirmativa, mientras que por el lado izquierdo
las acciones que deben hacerse en el caso de respuesta negativa. Un bloque condicional siempre debe
terminar con un pequeño círculo que une al último bloque de la parte afirmativa con el último de la
parte negativa.
E) Bloques de conexión
Son figuras que determinan que la secuencia de acciones en un diagrama continúa en alguna otra
parte. Su forma es:
CAPÍTULO 2.
METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS
17
Dentro de la figura se anota una letra o número para identificar un conector de otro.
La función de los conectores depende de su forma. Si la forma es de este tipo:
significa que la secuencia de los bloques continúa en donde se encuentre otro conector igual. Cuando
se tienen problemas de espacio al escribir los diagramas estos conectores son muy útiles. Y cuando
se tiene esta otra forma:
implica que se seguirá con los bloques en donde se encuentre otro conector igual y al terminar la
secuencia regresará al bloque que sigue al conector original.
Una vez que se ha pasado el algoritmo a diagrama de flujo se debe probar su funcionalidad. Para
esto, se anotan a un lado del diagrama las variables del problema y los valores que van tomando al ir
siguiendo la secuencia del diagrama para checar que estén correctos. Si el programa tiene bloques
condicionales se deben hacer tantas pruebas como combinaciones de condiciones haya.
Volviendo al ejemplo del terreno el diagrama de flujo quedaría como se muestra en la figura 2.1.
5) CODIFICACIÓN Y EDICIÓN DEL PROGRAMA
La codificación consiste en traducir el diagrama de flujo a instrucciones de un lenguaje de computadora, en nuestro caso BASIC.
Al conjunto de instrucciones escritas en un lenguaje de computadora se le llama programa.
La edición consiste en introducir el programa a la computadora por medio de un editor de textos.
Debe cuidarse el aspecto de la sintaxis en la codificación de un programa, ya que las instrucciones
deben tener un orden en la secuencia de las palabras y símbolos que las componen. Por ejemplo, en
español no es lo mismo decir:
El caballo blanco de Napoleón, que: Napoleón blanco de el caballo.
Después de haber traducido a un programa en BASIC, se debe introducir a la computadora por
medio de un editor de textos generalmente incluido con el lenguaje.
18
PARTE 1. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS
Figura 2.1
6) PRUEBAS Y DEPURACIÓN
Una vez que se tiene el programa introducido en la computadora, debe probarse exhaustivamente,
ejecutando el programa hasta concluir que los resultados son los deseados y que no tiene errores. Para
esto se deben preparar datos de prueba en papel, así como su solución para cotejarlo con la solución
que obtenga la computadora.
Si el programa tiene errores sintácticos éstos pueden corregirse simplemente consultando un libro
de instrucciones del lenguaje. No así si el problema es de lógica, en cuyo caso debe revisarse y
corregirse desde el algoritmo.
7) DOCUMENTACIÓN Y MANTENIMIENTO
Una vez que el paso anterior ha sido completado, todos los pasos anteriores de la metodología de
solución de problemas por medio de la computadora, deben pasarse en limpio y quedar archivados
dentro de un folder llamado documentación.
Para el paso 5 (codificación) debe obtenerse un listado del programa impreso por computadora, al
igual que las pruebas que se hicieron en el paso 6.
Si por algún motivo se llega a modificar el programa —generalmente porque cambian los
requerimientos del problema— toda la documentación debe modificarse. Al proceso de mantener los
programas y su documentación actualizados se le llama mantenimiento.
Dado que tiempo después de haber hecho el programa ni el mismo programador puede recordar
con exactitud cómo se resolvió determinado problema, la importancia de tener la documentación
actualizada radica en su utilidad.
CAPÍTULO 2.
METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS
19
RESUMEN
Programador: Persona capaz de instruir a la computadora usando algún lenguaje computacional.
Sujeto de acción: Persona que resuelve tareas que requieran procesamiento de información sin ayuda
de una computadora.
El programador es la persona que traduce las necesidades del sujeto de acción a acciones
ejecutables por la computadora y, por lo tanto, debe tener tres características esenciales:
1) Ser capaz de analizar un problema hasta entenderlo a la perfección.
2) Saber enumerar una serie de pasos por medio de los cuales se va a llegar a la solución del
problema, tomando en consideración las capacidades de la computadora.
3) Conocer un lenguaje de computación adecuado a la solución del problema.
La solución de problemas con ayuda de una computadora debe llevarse a cabo por medio de una
metodología, cuyos pasos se enumeran a continuación:
1)
2)
3)
4)
5)
6)
7)
Definición del problema
Planeación de la solución
Algoritmo
Diagrama de flujo
Codificación y edición del programa
Pruebas y depuración
Documentación y mantenimiento
PARTE
II
LÓGICA
COMPUTACIONAL
CAPÍTULO
3
CONCEPTOS BÁSICOS
OBJETIVOS
3.1 El alumno describirá los siguientes elementos necesarios para la solución de un problema:
3.1.1 Datos numéricos
3.1.2 Datos alfanuméricos
3.2 El alumno describirá y utilizará los siguientes elementos:
3.2.1 Constantes
3.2.2 Variables
3.3 El alumno describirá lo que es una expresión
3.3.1 El alumno explicará los elementos de una expresión
— Operadores
— Operandos
3.3.2 El alumno mencionará y usará los tipos de expresiones.
— Aritméticas
— Lógicas
3.3.3 El alumno explicará y aplicará los operadores:
— Asociativos
— Aritméticos
— Relaciónales
— Lógicos
23
CAPÍTULO
3
CONCEPTOS BÁSICOS
Se ha visto ya que el objeto de la metodología para la solución de problemas es resolver problemas
que requieran de procesamiento de información y que se pretende resolverlos con la ayuda de la
computadora.
Ahora bien, la manera de instruir a la computadora es por medio de un lenguaje computacional.
Los lenguajes computacionales tienen sus reglas y es necesario saber algunos conceptos para
entenderlas y así poder aplicarlas. Estos conceptos serán explicados a continuación tomando como
referencia el lenguaje BASIC:
1. TIPOS DE DATOS
Cuando se requiere de procesamiento de información, se pueden encontrar distintos tipos de datos
que requieren ser procesados. Por ejemplo, para realizar operaciones aritméticas se requiere de datos
de diferente tipo que los que se necesitarían para ordenar palabras alfabéticamente. Por lo tanto,
podemos decir que los datos se clasifican en:
A) Numéricos
B) Alfanuméricos
A) Numéricos
Son datos cuyo contenido es una serie de dígitos (0 - 9) que en conjunto nos proporcionan un valor
numérico, ya sea entero o real, y que pueden ser precedidos por un signo de + (positivo) o (negativo). Cuando se omite el uso del signo el dato se asume como positivo.
Con ellos se puede realizar operaciones aritméticas o de conteo. Ejemplos;
1519.17
-32.5
1
0
24
CAPÍTULO 3.
CONCEPTOS BÁSICOS
25
B) Alfanuméricos
Son datos cuyo contenido son letras del abecedario, números o caracteres especiales, o bien una
combinación de ellos. Aunque los datos alfanuméricos pueden contener números, no pueden ser
usados para realizar operaciones aritméticas.
Entre los caracteres especiales podemos encontrar: #, $, &, %, /, ", !, ?, ¡, =, -, +, x, [, ], {, },
etcétera.
Cuando se hace referencia a este tipo de datos se deben encerrar entre comillas. Ejemplos;
"Morelos Ote. # 23 - 7"
"Benito Juárez"
"16-45-19"
"02/05/92"
"Carlos Salinas de Gortari"
2. ZONAS DE MEMORIA
Como se había visto, la memoria principal permite almacenar datos. Éstos, ya sean numéricos o
alfanuméricos, se alojan en zonas de memoria para utilizarlos posteriormente.
Estas zonas de memoria están formadas por un nombre para su identificación, y un contenido, el
cual será el dato que se guarda en ellas. Por ejemplo, si el contenido es 15 y el nombre de la variable
es edad, significa que hay una zona de memoria que se llama edad cuyo valor es 15.
Los nombres de estas zonas de memoria se forman respetando las siguientes reglas:
1) El primer carácter debe ser una letra.
2) Los demás caracteres podrán ser letras, números o guiones; las letras no deben estar acentua
das.
3) Si el tipo de dato que guarda (contenido) es alfanumérico, el nombre deberá llevar al final el
signo $.
Ejemplos:
NOMBRE
CONTENIDO
salario
nombre$
direccion$
inscripción
4000
"William Shakespeare"
"Cuauhtémoc # 115,'Col. Narvarte"
500
NOTA: Obsérvese que en las zonas de memoria, nombre$ y direccion$, se incluye el signo $ en el
nombre de la zona y el contenido se encierra entre comillas; esto se debe a que el contenido es un
dato alfanumérico. También obsérvese que las variables direccion$ e inscripción no llevan acento.
Las zonas de memoria se pueden clasificar en:
A) Constantes
B) Variables
26
PARTE II. LÓGICA C0MPUTAC10NAL
A) Constantes
Son zonas de memoria que guardan datos, los cuales no cambian durante la fase de procesamiento de
información. Por ejemplo, si se desea obtener un reporte para cada uno de los empleados de una
empresa, que incluya el nombre del empleado, la fecha y la cantidad de dinero que recibieron en la
última semana, el dato fecha es importante para identificar la semana en que se recibió ese dinero y
es constante, ya que es el mismo para todos ellos.
B) Variables
Son zonas de memoria cuyo contenido cambia durante la fase de procesamiento de información. Por
ejemplo; si se desea obtener el número de trabajadores cuyo sueldo es mayor que 400, se necesitará
una variable que lleve a cabo el conteo, cuyo valor inicial será de cero y éste se irá incrementando
(variando) conforme vaya encontrando trabajadores que cumplan con la condición dada.
3. EXPRESIONES
a) Definición
Conjunto de operadores y operandos que producen un valor.
b) Elementos de una expresión
Una expresión está compuesta por operadores y operandos.
Un operador es un símbolo o palabra que significa que se ha de realizar cierta acción entre uno o
dos valores, llamados operandos.
De modo general una expresión se escribe en cualquiera de las formas siguientes:
operando 1
OPERADOR operando2
OPERADOR operando 1
4. TIPOS DE OPERADORES
Existen cuatro tipos de operadores:
A)
B)
C)
D)
Asociativos
Aritméticos
Relaciónales
Lógicos
Dependiendo del tipo de operadores que se usen en una expresión, ésta se convertirá en aritmética,
lógica o relacional.
CAPÍTULO 3.
CONCEPTOS BÁSICOS
27
A) Asociativos
El único operador asociativo es el paréntesis (), el cual permite indicar en qué orden deben realizarse
las operaciones.
Cuando una expresión se encuentra entre paréntesis, indica que las operaciones que están dentro
de ellos deben realizarse primero. Si en una expresión se utilizan más de un paréntesis se deberá
proceder primero con los que se encuentren más hacia el centro de la expresión.
B) Aritméticos
Son operadores que permiten realizar operaciones aritméticas entre operandos. El resultado que se
obtiene al evaluar una expresión aritmética es un número.
Al evaluar expresiones que contienen operadores aritméticos, se respeta una jerarquía en el orden
en el que se aplican. Es decir, si se tiene una expresión aritmética con al menos dos operadores de
distinta jerarquía, se deberá realizar primero una operación y luego la otra. La siguiente tabla muestra
los operadores aritméticos ordenados de mayor a menor jerarquía:
OPERADOR OPERACIÓN
^
Potenciación
*, /
Multiplicación, división
+, Suma, resta
Para resolver una expresión aritmética se deben seguir las siguientes reglas:
1) Primero se resuelven las expresiones que se encuentran entre paréntesis siguiendo estas
mismas reglas.
2) Se procede aplicando la jerarquía de operadores. En caso de que haya dos operadores con la
misma jerarquía se procede de izquierda a derecha.
Por ejemplo, si se tiene la expresión
(4+ 1)* 3 - 5 / 2 + 1
Primero se resuelve el paréntesis, por lo tanto el resultado parcial es:
5*3-5/2 + 1
Después de haber terminado con todos los paréntesis, se procede con lo demás, respetando la
jerarquía de operadores, por lo cual, en este caso, se sigue con la multiplicación y división, pues
la potenciación no se encuentra en esta expresión. Pero como la multiplicación y la división tienen
la misma jerarquía, se realizará primero la multiplicación, que es la que está más a la izquierda; así
quedaría:
15-5/2+ 1
28
PARTE II. LÓGICA COMPUTACIONAL
Después se realiza la división:
15-2.5 + 1
A continuación se procede con la resta y queda:
12.5 + 1
Finalmente el resultado es:
13.5
Es muy importante señalar que si las expresiones aritméticas no se resuelven aplicando las reglas
anteriores, se obtendrán resultados diferentes, como si cada persona decidiera hacerlo a su gusto; por
eso, para asegurarse de expresar lo mismo, es importante respetar las reglas mencionadas.
C) Relaciónales
Son operadores que permiten comparar dos valores, sean numéricos o alfanuméricos. El resultado
obtenido es un valor de verdad, que puede ser V (verdadero) o F (falso). La comparación entre un
dato numérico y uno alfanumérico no puede llevarse a cabo. Los operadores relaciónales son los
siguientes:
OPERADOR OPERACIÓN
=
Igual que
< >o><
Diferente que
<
Menor que
>
Mayor que
<=
Menor o igual que
>=
Mayor o igual que
D) Lógicos
Son operadores que permiten realizar las operaciones lógicas de conjunción, disyunción y negación.
El resultado obtenido es un valor de verdad que puede ser V (verdadero) o F (falso). Los operadores
lógicos se muestran a continuación, indicando la jerarquía de mayor a menor:
OPERADOR
OPERACIÓN
NOT
AND
OR
Negación
Conjunción
Disyunción
Recordemos que la negación cambia el valor verdadero por el falso, y viceversa.
CAPÍTULO 3.
CONCEPTOS BÁSICOS
29
En la conjunción se necesitan dos valores verdaderos para producir otro verdadero; en cualquier
otro caso se produce un valor de falso.
En la disyunción, con cualquiera de los dos valores de los operadores, que sea verdadero, se obtiene
un resultado de verdadero; en caso contrario el valor será falso.
Las reglas para resolver las expresiones lógicas son las siguientes:
1) Se resuelven primero los paréntesis.
2) Se encuentran los valores de verdad de las expresiones relaciónales.
3) Se aplica la jerarquía de operadores lógicos. En caso de haber dos operadores iguales se
procede la operación de izquierda a derecha.
Por ejemplo, si se tiene la expresión
NOT (2 > = 3) AND ( 5 > 3 OR 3 < 2)
Primero se resuelven las expresiones relaciónales que estén dentro del paréntesis:
NOT (F) AND (V OR F)
Después se resuelven los paréntesis:
NOT (F) AND (V)
Después se resuelve la operación NOT, que tiene precedencia sobre la operación AND:
V AND V
Y el resultado final es:
V
lo que significa que el valor de verdad de la expresión es verdadero.
A continuación se presentan problemas resueltos y propuestos para los distintos tipos de operadores.
PROBLEMA RESUELTO DE OPERADORES ARITMÉTICOS
Aplicando la jerarquía de operadores, encontrar el valor de la siguiente expresión.
( 4 * 1 / 2) ^ 2 * 3 – 2 ^ 2 + 1
Primero se resuelve el paréntesis, para lo cual es necesario respetar la jerarquía de operadores
aritméticos; como la multiplicación y división tienen la misma prioridad, se procede de derecha a
izquierda y queda:
30
PARTE II. LÓGICA COMPUTACIONAL
(4 / 2) ^2 * 3 - 2 ^2 + 1
^
^
2 *3 - 2 2 + 1
Después de terminar con todos los paréntesis, se procede, respetando la jerarquía de operadores,
que con la potenciación:
4x3-4+1
Después se realiza la multiplicación:
12-4 + 1
A continuación se procede con la resta y queda:
8+1Y
finalmente el resultado es:
9
PROBLEMAS PROPUESTOS DE OPERADORES ARITMÉTICOS
Aplicando la jerarquía de operadores, encontrar el valor de cada una de las siguientes expresiones:
1.
2.
3.
4.
5.
4+l*5^2-l
9/3 + 4^2-5*l+9/-2 + 3
5/2 + 3-4*5/2
(4 + 1) * 5^ 2- 1
1 7 / 2 + 3 ^ 2 ^ 2-2 * 2 / 2
PROBLEMA RESUELTO DE OPERADORES
RELACIÓNALES Y LÓGICOS
Aplicando la jerarquía de operadores, encontrar el valor de verdad de la siguiente expresión,
suponiendo que el valor de S es 5 y el valor de T es 70.
NOT (S > 3 AND S <= 10) OR (T >= 100 AND T < 200)
Primero se resuelven las expresiones relaciónales que estén dentro de los paréntesis; para esto es
necesario primero sustituir el valor de las variables S y T:
NOT (5 > 3 AND 5 <= 10) OR (70 >= 100 AND 70 < 200)
NOT (V AND V ) OR (F AND V)
CAPÍTULO 3.
CONCEPTOS BÁSICOS
31
Después se resuelven los paréntesis:
NOT (V) OR (F)
Después se resuelve la operación NOT, que tiene precedencia sobre la operación OR:
F OR F
Y el resultado final es:
F
PROBLEMAS PROPUESTOS DE OPERADORES
RELACIÓNALES Y LÓGICOS
Aplicando la jerarquía de operadores, encontrar el valor de verdad de cada una de las siguientes
expresiones:
Para el problema 1 los valores para las variables son: M = 8, N = 9, R = 5, S = 5,T = 4
1.
2.
3.
4.
5.
NOT ((M > N AND R > S ) OR (NOT (T < V AND S > M )))
(3x2^2-4/2 * l)>(3*2^-4/2 * 1 ) AND (5 > 9/3)
(3>=3OR5<>5)ANDNOT(15/5+ 2O5)
NOT (NOT ((3 - (-3)) * 2 > (3 - (-3) * 2 ) OR 1^3 * 2 > 6))
(3 > = 4 AND 5 > 3 AND 3 > 3) OR NOT (4 <= 4 OR 5 > 4 OR 6 >= 7)
32
PARTE II. LÓGICA COMPUTACIONAL
RESUMEN
Tipos de datos:
A) Numéricos: son datos cuyo contenido es una serie de dígitos (0-9) que en conjunto nos proporcionan un valor numérico y que pueden ser precedidos por un signo de + (positivo) o - (negativo).
Con ellos se puede realizar operaciones aritméticas o de conteo.
B) Alfanuméricos: son datos cuyo contenido son letras del abecedario, números o caracteres
especiales, o bien una combinación de ellos. Estos datos no pueden usarse para realizar operaciones
aritméticas.
Zonas de memoria: los datos, ya sean numéricos o alfanuméricos, se alojan en zonas de memoria
principal con el objeto de utilizarlos posteriormente. Estas zonas de memoria están formadas por un
nombre para su identificación y un contenido el cual será el dato que se guarda en ellas. Se pueden
clasificar en:
A) Constantes: son zonas de memoria que guardan datos, los cuales no cambian durante toda la
fase de procesamiento de información.
B) Variables: son zonas de memoria cuyo contenido cambia durante la fase de procesamiento de
información.
Expresiones: son un conjunto de operadores y operandos que producen un valor. Un operador es
un símbolo o palabra que significa que se ha de realizar cierta acción entre uno o dos valores que son
llamados operandos. Existen cuatro tipos de operadores: asociativos, aritméticos, relaciónales y
lógicos.
CAPÍTULO
4
TIPOS DE PROBLEMAS
OBJETIVOS
4.1 El alumno describirá los siguientes tipos de problemas, de acuerdo a su estructura y mencionará
sus características.
4.1.1 Secuenciales
4.1.2 Selectivos
a) Simples
b) Compuestos
4.1.3. Repetitivos
a) Simples
— Con un número determinado de iteraciones
— Con un número indeterminado de iteraciones
b) Compuestos
4.2 El alumno aplicará los primeros cuatro pasos de la metodología para la solución de problemas
por medio de la computadora para resolver:
4.2.1 Problemas secuenciales
4.2.2 Problemas selectivos
4.2.3. Problemas repetitivos
33
CAPÍTULO
4
TIPOS DE PROBLEMAS
Los tipos de problemas que podemos encontrar se clasifican según su estructura de la siguiente
manera:
1) Secuenciales
2) Selectivos
a) simples
b) compuestos
3) Repetitivos
a) simples
b) compuestos
c) múltiples
A continuación definiremos cada uno de estos tipos de problemas y aplicaremos los primeros
cuatro pasos de la metodología para la solución de problemas en cada uno de ellos.
1) PROBLEMAS SECUENCIALES
Son problemas en los que, para su solución, se emplea una serie de acciones ejecutadas invariablemente en un orden secuencial.
Problemas resueltos
PROBLEMA 1
Aplicar los primeros cuatro pasos de la metodología de la solución de problemas por medio de la
computadora para encontrar el área de un círculo de radio 5.
Paso 1. Definición del problema:
34
CAPÍTULO 4.
TIPOS DE PROBLEMAS
35
Encontrar el área de un círculo de radio 5.
Paso 2. Planeación de la solución:
El área de un círculo está dada por la fórmula
área = pi
x
radio ^ 2
Si, por un lado, sabemos que la constante pi es igual a 3.1416, y por otro, que el radio del círculo
es de 5, al sustituir estos valores en la fórmula obtendríamos:
área = 3.1416 x 5^2
Al aplicar esta fórmula obtendremos la solución. Nos podemos percatar de que tenemos todos los
datos para poder solucionar nuestro problema, por lo tanto no requeriremos de datos de entrada.
SALIDA: Área del círculo
ENTRADA: Ninguna
DATOS ADICIONALES: Ninguno
SOLUCIÓN: Aplicar la fórmula Área = 3.1416 x 5^2
Paso 3. Algoritmo:
1. area←3.1416 * 5^2
2. DESPLEGAR área
El paso 1 implica:
a) Una evaluación aritmética 3.1416 * 5^2, la cual produce un valor, y
b) La asignación de este valor a la variable área.
El paso 2 implica que el valor de la variable área sea desplegado por algún dispositivo de salida
de la computadora, por el cual podremos ver la solución.
Paso 4. Diagrama de flujo:
El paso 1 del algoritmo es una operación aritmética por lo que le corresponde el bloque de proceso:
y se lee "a la variable área se le asigna el valor del resultado de la operación 3.1416 * 5^2"
El paso 2 implica una salida de datos, por lo que le corresponde el bloque de salida:
y se lee "desplegar el valor de la variable área".
El diagrama de flujo completo quedaría como se muestra en la figura 4.1.
36
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.1
Y lo probamos de la siguiente manera:
1)
Escribir a un lado del diagrama los nombres de las variables utilizadas. En este caso sólo existe
la variable área.
2) A la derecha de cada variable se escribe el símbolo de asignación "←".
3) A la derecha del símbolo de asignación se van escribiendo los valores que van tomando las
variables a lo largo de la prueba del diagrama, separados por comas (,).
Entonces, la prueba quedaría como en la figura 4.2.
Como el único valor que toma la variable área está dado por la operación 3.1416 * 5^2, y esto es
igual a 78.54; lo anotamos a la derecha de la variable y del símbolo de asignación, por lo que podemos
decir que el diagrama de flujo está asignando el valor 78.54 a la variable área.
A continuación, en el siguiente bloque este único valor que tomó la variable área es desplegado
como la solución del problema que da el diagrama de flujo.
El último bloque indica el fin del diagrama de flujo.
NOTA: LOS pasos siguientes de la metodología (5 a 7) podrán ser concluidos en el capítulo siguiente.
PROBLEMA 2
Modificar el problema anterior para que sea capaz de calcular el área de un círculo de cualquier radio
requerido.
Paso 1. Definición del problema:
Encontrar el área de un círculo con un radio cualquiera.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
37
área ←78.54
Figura 4.2
Paso 2. Planeación de la solución:
Se resuelve con la misma fórmula del problema anterior:
Área = pi x radio^2
Sólo que en esta ocasión desconocemos el valor del radio, por lo que tendremos que pedirlo como
dato de entrada en el problema.
SALIDA: área
ENTRADA: radio
DATOS ADICIONALES: Ninguno
SOLUCIÓN: Aplicar la fórmula Área = pi x radio^2
NOTA: Si bien el término "cualquier radio" nos lleva a pensar en que podemos definir, en nuestro
diagrama de flujo, el radio que queramos y sobre éste, calcular la fórmula, tenemos que pensar en
"cualquier radio" como un término genérico, no particular. Así, nuestro diagrama de flujo puede ser
utilizado cuantas veces se quiera utilizando cada vez un "radio cualquiera", con valores distintos
dados como datos de entrada.
Paso 3. Algoritmo:
1. PEDIR radio
^
2. área ←3.1416 * radio 2
38
PARTE II. LÓGICA COMPUTACIONAL
3. DESPLEGAR área
Nótese que si elimináramos el paso 1, al tratar de aplicar la fórmula nos percataríamos de que nos
falta que radio tenga algún valor, por lo que estaría mal hecho el algoritmo. Así pues, en el paso 1
la computadora pedirá, una vez elaborado el programa, un valor para la variable radio, que será
introducido por algún dispositivo de entrada, y con esto en la fórmula siguiente no habrá problemas
para calcular el área.
NOTA: En una fórmula no se pueden ocupar variables a las que no se les haya asignado previamente
un valor.
Paso 4, Diagrama de flujo (Fig. 4.3).
Prueba 1
radio ←5
área ←78.54
Prueba 2
radio ← 8
CAPÍTULO 4.
TIPOS DE PROBLEMAS
39
área←201.0624
PROBLEMA 3
Determinar el área y perímetro de un rectángulo cualquiera.
Paso 1. Definición del problema:
Encontrar el área y perímetro de un rectángulo cualquiera.
Paso 2. Planeación de la solución:
La fórmula para encontrar el perímetro de un rectángulo es:
perímetro = lado1 x 2 + lado2 x 2,
y la fórmula para calcular el área es:
área = lado1x Iado2;
de lo cual nos damos cuenta que nos hacen falta los datos lado1y Iado2, que tendremos que pedir
como entrada.
SALIDAS: perímetro, área
ENTRADAS: lado1, lado2
DATOS ADICIONALES: Ninguno
SOLUCIÓN: Aplicar las fórmulas:
perímetro = lado1 x 2 + lado2 x 2
área = lado1x lado2
Paso 3. Algoritmo:
1.
2.
3.
4.
5.
6.
PEDIR lado1
PEDIR lado2
perímetro ← lado1 * 2 + lado2 * 2
área ←lado1 * lado2
DESPLEGAR perímetro
DESPLEGAR área
Como los pasos 1 y 2 implican la misma acción y están secuenciales, pueden reducirse a un solo
paso. Lo mismo ocurre con los pasos 5 y 6.
1.
2.
3.
4.
PEDIR lado1, lado2
perímetro ←lado1* 2 +lado2 * 2
área ← lado1*lado2
DESPLEGAR perímetro, área
40
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.4
Paso 4. Diagrama de flujo (Fig. 4.4).
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.4) para verificar su
funcionalidad.
PROBLEMA 4
Obtener el promedio de edades de 3 personas.
Paso 1. Definición del problema:
Obtener el promedio de edades de 3 personas.
Paso 2. Planeación de la solución:
Para obtener un promedio se requiere sumar las cantidades implicadas y dividir la suma entre el
número de estas cantidades.
En este caso, por ser tres cantidades, la fórmula es la siguiente:
I '
CAPÍTULO 4.
TIPOS DE PROBLEMAS
41
promedio = (edad1 + edad2 + edad3) / 3
Nótese que la suma se encuentra agrupada con un paréntesis para indicar que ésta se debe hacer
primero que la división. Si el paréntesis no existiera únicamente dividiría a edad3 y este resultado lo
sumaría a las otras dos edades.
En esta fórmula son desconocidas edad1, edad2 y edad3, por lo cual deberán ser pedidas como
datos de entrada.
SALIDAS: promedio
ENTRADAS: edad1, edad2, edad3
DATOS ADICIONALES: Ninguno
SOLUCIÓN: Aplicar la fórmula:
promedio = (edad1 + edad2 + edad3) / 3
Paso 3. Algoritmo:
1. PEDIR edad1, edad2, edad3
2. promedio ← (edad1 + edad2 + edad3 ) / 3
3. DESPLEGAR promedio
Paso 4. Diagrama de flujo (Fig. 4.5).
Figura 4.5
42
PARTE II. LÓGICA COMPUTACIONAL
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.5) para verificar su
funcionalidad.
PROBLEMA 5
Suponga que un individuo decide invertir su capital en un banco y desea saber cuánto dinero ganará
después de un mes si el banco paga a razón de 2% mensual.
Paso 1. Definición del problema:
Obtener cuánto dinero ganará un individuo después de un mes si el banco paga a razón de 2% mensual.
Paso 2. Planeación de la solución:
Para obtener la cantidad de dinero que el individuo ganará es necesario obtener el 2% de la cantidad
invertida.
Un 2% significa 2/100 lo cual es equivalente a 0.02; por lo tanto, para obtener la ganancia sólo
hay que multiplicar la cantidad invertida por 0.02.
Debido a que la cantidad invertida es un dato desconocido, éste se debe pedir como entrada.
SALIDAS: ganancia
ENTRADA: cantidad invertida
DATOS ADICIONALES: 2% de interés mensual
SOLUCIÓN: Aplicar la siguiente fórmula:
ganancia = cantidad invertida
x
0.02
Paso 3. Algoritmo:
Para simplificar, en este problema llamaremos:
g al dato ganancia
ci al dato cantidad invertida
1. PEDIR ci
2. g← ci * 0.02
3. DESPLEGAR g
Paso 4. Diagrama de flujo (Fig. 4.6):
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.6) para verificar su
funcionalidad.
PROBLEMA 6
Un vendedor recibe un sueldo base, más un 10% extra por comisiones de sus ventas. El vendedor
desea saber cuánto dinero obtendrá por concepto de comisiones por las tres ventas que realizó en el
mes, y el total que recibirá en el mes tomando en cuenta su sueldo base y sus comisiones.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
43
Figura 4.6
Paso1. Definición del problema:
Obtener la cantidad de dinero que obtendrá un vendedor por concepto de comisiones por tres ventas
realizadas en el mes, y el total de dinero que recibirá en el mes por sueldo y comisiones. Se sabe que
el vendedor recibe un sueldo base y un 10% extra por comisiones de sus ventas.
Paso 2. Planeación de la solución:
Para obtener la cantidad de dinero por concepto de comisiones es necesario saber la cantidad de cada
una de las tres ventas, para poder sumarlas y obtener el total de sus ventas en ese mes. Posteriormente
sobre el total de ventas podremos aplicar el 10% para obtener las comisiones correspondientes.
Para obtener la cantidad total de dinero que recibirá es necesario sumar las comisiones obtenidas
al sueldo base.
Debido a que los datos de las tres ventas y el sueldo base son desconocidos, éstos serán las entradas.
SALIDAS: cantidad a recibir por comisiones, cantidad total a recibir.
ENTRADAS: cantidad de venial, cantidad de venta2, cantidad de venta3, sueldo base.
DATOS ADICIONALES: la comisión es 10% sobre las ventas del mes.
SOLUCIÓN: Aplicar las siguientes fórmulas:
total de ventas = venta1 + venta2 + venta3
comisión = total de ventas
x
0.10 total
a recibir = sueldo base + comisión
44
PARTE II. LÓGICA COMPUTACIONAL
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
tv
c
tr
sb
v1
v2
v3
1.
2.
3.
4.
5.
a
a
a
a
a
a
a
total de ventas
comisión
total a recibir
sueldo base
venta 1
venta 2
venta 3
PEDIR v1, v2, v2
tv ←v1 + v2 + v3
c←tv *0.10
tr ←sb + c
DESPLEGAR c, tr
Paso 4. Diagrama de flujo (Fig. 4.7).
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.7) para verificar su
funcionalidad.
PROBLEMA 7
Una tienda ofrece un descuento del 15% sobre el total de la compra y un cliente desea saber cuánto
deberá pagar finalmente por su compra.
Paso 1. Definición del problema:
Obtener la cantidad de dinero que tendrá que pagar un cliente, si la tienda ofrece un 15% de descuento
sobre el total de la compra.
Paso 2. Planeación de la solución:
Para obtener el descuento es necesario conocer la cantidad total de la compra, y sobre ésta aplicar el
15%. Posteriormente este descuento deberá ser sustraído de la cantidad total de compra para así
obtener la cantidad con descuento, que es la que el cliente pagará. El único dato desconocido es la
cantidad total de la compra.
SALIDAS: cantidad a pagar
ENTRADAS: total de la compra
DATOS ADICIONALES: El descuento equivale al 15% del total de la compra
SOLUCIÓN: Aplicar las siguientes fórmulas:
descuento = total de la compra
x
0.15
total a pagar = total de la compra - descuento
CAPÍTULO 4. TIPOS DE PROBLEMAS
Figura 4.7
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
tc a total de la compra
d a descuento
tp a total a pagar
1.
2.
3.
4.
PEDIR tc
d←tc * 0.15
tp←tc-d
DESPLEGAR tp
Paso 4. Diagrama de flujo (Fig. 4.8).
45
46
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.8
Este problema también se podría solucionar de la siguiente manera:
Paso 2. Planeación de la solución:
Dado que el descuento es del 15% sobre el total de la compra podemos visualizar al 85% restante
como la cantidad total a pagar.
SALIDAS: cantidad a pagar
ENTRADAS: total de la compra
DATOS ADICIONALES: El descuento equivale al 15% del total de la compra.
SOLUCIÓN: Aplicar la siguiente fórmula:
total a pagar = total de la compra x 0.85
Paso 3. Algoritmo: De ahora en adelante llamaremos:
tc a total de la compra
tp a total a pagar
CAPÍTULO 4.
TIPOS DE PROBLEMAS
47
Figura 4.9
1. PEDIR tc
2. tp ← tc * 0.85
3. DESPLEGAR tp
Paso 4. Diagrama de flujo (Fig. 4.9):
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.9) para verificar su
funcionalidad.
PROBLEMA 8
Un alumno desea saber cuál será su calificación final en la materia de computación. Dicha calificación
se compone de los siguientes porcentajes:
55% del promedio de sus tres calificaciones parciales
30% de la calificación del examen final
15% de la calificación de un trabajo final
Paso 1. Definición del problema:
Obtener la calificación final en una materia si ésta se compone de los siguientes porcentajes:
55% del promedio de sus tres calificaciones parciales
30% de la calificación del examen final
48
PARTE II. LÓGICA COMPUTACIONAL
15% de la calificación de un trabajo final
Paso 2. Planeación de la solución:
Para obtener el porcentaje correspondiente a sus calificaciones parciales, es necesario conocer las
calificaciones obtenidas, promediarlas y posteriormente aplicar el 55%.
Para obtener el porcentaje correspondiente al examen final es necesario aplicar el 30% sobre la
calificación obtenida en el examen final, y para obtener el porcentaje correspondiente al trabajo final
será necesario aplicar el 15% sobre la calificación obtenida en éste.
Finalmente para obtener la calificación final del curso será necesario sumar las cantidades
obtenidas con los porcentajes.
Los datos que se desconocen son: calificación parcial1, calificación parcial2, calificación parcial3,
calificación del examen final y calificación del trabajo final.
SALIDAS: calificación final del curso
ENTRADAS: calificación parcial1, calificación parcial2, calificación parcial3, calificación de
examen final, calificación del trabajo final
DATOS ADICIONALES:
El promedio de calificaciones parciales equivale al 55% de la calificación final.
El examen final equivale al 30% de la calificación final.
El trabajo final equivale al 15% de la calificación final.
SOLUCIÓN: Aplicar las fórmulas:
promedio de parciales = (parcial1 + parcial2 + parcial3) / 3
porcentaje de parciales = promedio de parciales x 0.55
porcentaje de examen final = examen final
x
0.30
porcentaje de trabajo final = trabajo final x 0.15
calificación final = porcentaje de parciales + porcentaje de
examen final + porcentaje de trabajo final
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
p1
p2
p3
p
ppa
ef
pef
tf
ptf
cf
a
a
a
a
a
a
a
a
a
a
calificación del parcial 1
calificación del parcial2
calificación del parcial3
promedio de parciales
porcentaje de parciales
calificación del examen
porcentaje de examen
calificación del trabajo
porcentaje del trabajo
calificación final del curso
CAPITULO 4.
1.
2.
3.
4.
5.
6.
7.
TIPOS DE PROBLEMAS
49
PEDIR p1,p2,p3,ef,tf
p ← (pl + p2 + p3) / 3
ppar ← p * 0.55
pef ←ef * 0.30
p tf ← tf *0.1 5
cf ←ppar + pef + ptf
DESPLEGAR cf
NOTA: Obsérvese que el paso 2 de este algoritmo requiere del proceso aplicado en el problema 4.
Paso 4. Diagrama de flujo (Fig. 4.10):
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.10) para verificar su
funcionalidad.
PROBLEMA 9
Un maestro desea saber qué porcentaje de hombres y qué porcentaje de mujeres hay en un grupo de
estudiantes.
Paso 1. Definición del problema:
Obtener el porcentaje de hombres y de mujeres que hay en un grupo de estudiantes.
Paso 2. Planeación de la solución:
En primer lugar es necesario obtener el número de estudiantes que hay en el grupo, lo cual representará
el 100%. Para obtener el número de estudiantes del grupo es necesario saber cuántos hombres y
cuántas mujeres hay en el grupo.
Debido a que el número total de alumnos del grupo representa el 100% podemos establecer una
regla de 3 que nos llevaría a obtener el porcentaje de hombres que hay en el grupo. La regla de 3
quedaría de la siguiente manera:
100% — total de alumnos del grupo
x — número de hombres que hay en el grupo
Por lo tanto para obtener el porcentaje de hombres que hay en el grupo la fórmula a aplicar sería
la siguiente:
porcentaje de hombres = (número de hombres que hay en
el grupo x 100) / total de alumnos del grupo
De la misma manera se procede para obtener el porcentaje de mujeres, y la fórmula quedaría así:
porcentaje de mujeres = (número de mujeres que hay en
el grupo x 100) / total de alumnos del grupo
50
PARTE II. LÓGICA COMPUTAC1ONAL
Figura 4.10
SALIDAS: porcentaje de hombres, porcentaje de mujeres
ENTRADAS: número de hombres, número de mujeres
DATOS ADICIONALES: Ninguno
SOLUCIÓN: Aplicar las fórmulas:
CAPÍTULO 4.
TIPOS DE PROBLEMAS
51
porcentaje de hombres = (número de hombres que hay en
el grupo x 100) / total de alumnos del grupo
porcentaje de mujeres = (número de mujeres que hay en
el grupo x100) / total de alumnos del grupo
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
nh a
nm a
ph a
pm a
ta a
1.
2.
3.
4.
5.
número de hombres que hay en el grupo
número de mujeres que hay en el grupo
porcentaje de hombres
porcentaje de mujeres
total de alumnos
PEDIR nh, nm
ta ← nh + nm
ph ←nh * 100 / ta
pm ← nm * 100 / ta
DESPLEGAR ph, pm
NOTA: Obsérvese que en este problema no es necesario el uso de paréntesis para indicar el orden de
las operaciones, debido a la jerarquía de operadores aritméticos.
Paso 4. Diagrama de flujo (Fig. 4.11):
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.11) para verificar su
funcionalidad.
Ejercicio: Buscar otra opción de solución a este problema y aplicar los primeros cuatro pasos
de la metodología de la solución de problemas.
Problemas propuestos
Usando los primeros cuatro pasos de la metodología de la solución de problemas por medio de la
computadora, resuelva los siguientes problemas:
1. Dada una cantidad en pesos, obtener la equivalencia en dólares, asumiendo que la unidad
cambiaría es un dato desconocido.
2. La presión, el volumen y la temperatura de una masa de aire se relacionan por la fórmula:
masa = (presión
x
volumen) / (0.37
x
(temperatura + 460))
52
PARTE I I. LÓGICA COMPUTAC1ONAL
Figura 4.11
Obtener la masa de aire de un neumático de automóvil que tiene un volumen de 2 pies
cúbicos y una presión y temperatura indeterminadas.
3. Calcular el número de pulsaciones que una persona debe tener por cada 10 segundos de
ejercicio, si la fórmula es:
número de pulsaciones = (220 - edad) / 10
4.
5.
Calcular el nuevo salario de un obrero si obtuvo un incremento del 25% sobre su salario
anterior.
En un hospital existen tres áreas: Ginecobstetricia, Pediatría y Traumatología. El presupuesto
anual del hospital se reparte conforme a la siguiente tabla:
CAPÍTULO 4.
Área
7.
8.
9.
53
Porcentaje del presupuesto
Ginecobstetricia
Traumatología
Pediatría
6.
TIPOS DE PROBLEMAS
40%
30%
30%
Obtener la cantidad de dinero que recibirá cada área, para cualquier monto presupuestal.
El dueño de una tienda compra un artículo a un precio determinado. Obtener el precio en que
lo debe vender para obtener una ganancia del 30%.
Todos los lunes, miércoles y viernes, una persona corre la misma ruta y cronometra los tiempos
obtenidos. Determinar el tiempo promedio que la persona tarda en recorrer la ruta en una
semana cualquiera.
Tres personas deciden invertir su dinero para fundar una empresa. Cada una de ellas invierte
una cantidad distinta. Obtener el porcentaje que cada quien invierte con respecto a la cantidad
total invertida.
Un alumno desea saber cuál será su promedio general en las tres materias más difíciles que
cursa, y cuál será el promedio que obtendrá en cada una de ellas. Estas materias se evalúan
como se muestra a continuación:
La calificación de Matemáticas se obtiene de la siguiente manera:
Examen 90%
Promedio de tareas 10%.
En esta materia se pidió un total de tres tareas.
La calificación de Física se obtiene de la siguiente manera:
Examen 80%
Promedio de tareas 20%
En esta materia se pidió un total de dos tareas.
La calificación de Química se obtiene de la siguiente manera:
Examen 85%
Promedio de tareas 15%
En esta materia se pidió un total de tres tareas.
2) PROBLEMAS SELECTIVOS
Las soluciones de este tipo de problemas son una serie de acciones en las que la ejecución de alguna
dependerá de que se cumplan una o varias condiciones.
Se identifican porque en la fase de solución del problema existe algún punto en el cual es necesario
establecer una pregunta, para decidir si ciertas acciones deben realizarse o no.
Para solucionar este tipo de problemas será necesario evaluar una o más condiciones. Por eso, los
problemas selectivos se clasifican en:
a) Simples
b) Compuestos
54
PARTE I I. LÓGICA COMPUTACIONAL
2a) Problemas selectivos simples
Se identifican porque están compuestos únicamente de una condición.
Problemas resueltos:
PROBLEMA 1
Determinar si un alumno aprueba o reprueba un curso, sabiendo que aprobará si su promedio de tres
calificaciones es mayor o igual a 7; reprueba en caso contrario.
Paso 1. Definición del problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
Lo primero que debe obtenerse es el promedio del alumno; se calcula con base en la siguiente fórmula:
promedio = (calificación1 + calificación2 + calificación3) / 3
Puesto que los datos calificación1, calificación2 y calificación3 son desconocidos, éstos representarán las entradas del problema.
El problema plantea dos opciones: que el alumno apruebe o que el alumno repruebe, lo cual se
determina con base en el promedio obtenido. En este caso la salida será un mensaje que indique si el
alumno está aprobado o reprobado.
Por ello tendremos que usar el bloque condicional que, como se había mencionado, son preguntas
que pueden alterar la secuencia de ejecución de las instrucciones dependiendo de que la condición
planteada por la pregunta se cumpla o no.
En este caso usaremos un bloque condicional pues si el promedio SI es mayor o igual a 7, sucederá
una serie de acciones; y en caso de que el promedio NO sea mayor o igual que 7 sucederá otra serie
de acciones. Para plantear esta condición utilizaremos el formato condicional ya visto:
SI condición ENTONCES
conjunto de acciones DE
OTRA FORMA
conjunto de acciones
El cual para este ejemplo quedaría:
SI promedio > = 7 ENTONCES
DESPLEGAR "el alumno está aprobado"
DE OTRA FORMA
DESPLEGAR "el alumno está reprobado"
SALIDAS: "el alumno está reprobado" o "el alumno está aprobado"
ENTRADAS: calificación1, calificación2, calificación3
CAPÍTULO 4.
TIPOS DE PROBLEMAS
55
DATOS ADICIONALES: Un alumno aprueba si su promedio es mayor o igual que 7; y en caso
contrario reprueba.
SOLUCIÓN:
Aplicar la fórmula:
promedio = (calificación1 + calificación2 + calificación3) / 3
Aplicar la condicional:
SI promedio > = 7 ENTONCES
DESPLEGAR "el alumno está aprobado" DE
OTRA FORMA
DESPLEGAR "el alumno está reprobado"
Paso 3. Algoritmo:
De. ahora en adelante llamaremos:
c1
c2
c3
p
a
a
a
a
calificación 1
calificación2
calificación3
promedio
1. PEDIR c1,c2,c3
2. p ← (c1 + c2 + c3) / 3
3. SI p > = 7 ENTONCES
DESPLEGAR "el alumno está aprobado"
DE OTRA FORMA
DESPLEGAR "el alumno está reprobado"
Paso 4. Diagrama de flujo:
Como se había visto, el símbolo que representa la condicional es:
Dentro de la figura, se anota la pregunta. A la derecha se indica la acción o acciones que deben
hacerse en el caso de que la respuesta a la pregunta sea afirmativa, mientras que por el lado izquierdo
las acciones que deben hacerse en caso de respuesta negativa.
Por lo tanto el diagrama de flujo quedaría como se indica en la figura 4.12.
En el diagrama se puede observar claramente cómo el orden en el que se ejecutan las instrucciones
es secuencial, hasta antes de llegar a la condicional, pero en la condicional el orden varía dependiendo
de si la condición es verdadera o falsa, es decir, si el promedio SI es mayor o igual a 7 o el promedio
NO es mayor o igual a 7.
Note que el final de las partes verdadera y falsa de la condición convergen en un pequeño círculo
que nos indica el término del bloque condicional.
56
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.12
Prueba 1
c1 ←8
c2 ←9
c3 ←9
p ← 8.66
salida: " el alumno está aprobado"
Prueba 2
c1 ←7
c2 ←6
c3 ←6
p ←6.33
salida: " el alumno está reprobado"
CAPÍTULO 4.
TIPOS DE PROBLEMAS
57
Obsérvese que en la prueba 1, la secuencia que el diagrama sigue es por el lado derecho del bloque
condicional, lo que indica que la condición sí se cumplió, pues el promedio obtenido sí es mayor o
igual que 7. En la prueba 2 la secuencia seguida es por el lado izquierdo del bloque condicional pues
el promedio obtenido no es mayor o igual que 7.
Al realizar estas pruebas se puede observar que el diagrama de flujo sí resuelve todas las opciones
que puedan presentarse, pues se han realizado pruebas para cada una de las posibilidades.
PROBLEMA 2
En un almacén se hace un 20% de descuento a los clientes cuya compra supere los $1000. ¿Cuál será
la cantidad de dinero que pagará una persona por su compra? Paso 1. Definición del problema:
Igual a la redacción del problema. Paso 2. Planeación de la solución:
Para determinar si el cliente alcanza descuento o no, necesitamos saber cuánto gastó en total. Como
el dato no es proporcionado en la definición del problema se convertirá en dato de entrada.
SALIDAS: Total a pagar
ENTRADAS: Total de la compra
DATOS ADICIONALES: Se otorgará un 20% de descuento si la compra supera los $1000.
SOLUCIÓN:
Aplicar la condicional:
SI Total de la compra > 1000 ENTONCES
descuento = 0.2
DE OTRA FORMA
descuento = 0.0
Aplicar la fórmula:
pago = compra - compra
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
compra a TOTAL DE LA COMPRA
desc
a DESCUENTO
pago
a TOTAL A PAGAR
1. PEDIR compra
2. SI compra > 1000 ENTONCES
desc ← 0.2
DE OTRA FORMA
desc ← 0.0
3. pago ← compra - compra*desc
4. DESPLEGAR pago
x
descuento
58
PARTE II. LÓGICA COMPUTACIONAL
Paso 4. Diagrama de flujo (Fig. 4.13).
Observe que el bloque condicional:
lleva a cabo la acción desc ← 0.2 si la condición se cumple, esto es, si el valor de compra excede a
1000. La acción desc ← 0.0 se lleva a cabo, si esta misma condición no se cumple, esto es, si el valor
de compra es menor o igual a 1000.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
59
Al final, se haya ejecutado un proceso o el otro, las acciones del condicional convergen en un
pequeño círculo que le da fin y continúa con el siguiente bloque de proceso.
Prueba 1
Compra ← 2500
desc ← 0.2
Pago ← 2000
Prueba 2
Compra ← 700
desc ← 0
Pago ← 700
Prueba 3
Compra ← 1000
desc ← 0
Pago ← 1000
Obsérvese que en la prueba 1 la secuencia que el diagrama sigue es por el lado derecho del bloque
condicional, lo que indica que la condición sí se cumplió pues el monto de la compra es mayor que
1000. En la prueba 2 la secuencia seguida es por el lado izquierdo del bloque condicional pues el
monto de la compra no es mayor que 1000. En la prueba 3 la secuencia también es por el lado izquierdo
ya que el monto de la compra tampoco es mayor que 1000.
Al realizar estas pruebas se puede observar que el diagrama de flujo sí resuelve todas las opciones
que puedan presentarse, ya que se han realizado pruebas para cada una de las posibilidades.
Otra manera de resolver este problema se muestra en la figura 4.14.
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.14) para verificar su
funcionalidad.
PROBLEMA 3
Un obrero necesita calcular su salario semanal, el cual se obtiene de la siguiente manera:
Si trabaja 40 horas o menos se le paga $4 por hora.
Si trabaja más de 40 horas se le paga $4 por cada una de las primeras 40 horas y $6 por cada hora
extra.
Paso 1. Definición del problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
Para poder determinar el salario del obrero es importante determinar si trabajó horas extras o no, lo
cual se determina de la siguiente manera: si las horas trabajadas exceden de 40 significa que SÍ trabajó
horas extras y en caso de que las horas trabajadas sean menores o iguales que 40 significa que NO
trabajó horas extras.
60
PARTE II. LÓGICA COMPUTAC1ONAL
Figura 4.14
Como se habrá observado, este problema plantea dos posibilidades: que el obrero SÍ haya trabajado
horas extras y que el obrero NO haya trabajado horas extras. Es importante establecerlo porque la
serie de acciones que se efectúan en uno o en otro caso son distintas.
El uso de una condicional nos ayuda a plantear estas dos posibilidades. En caso de que el obrero
SÍ haya trabajado horas extras, las acciones que tendrían que realizarse serían:
— Calcular horas extras trabajadas aplicando la fórmula:
horas extras = horas trabajadas - 40
Lo cual significa que las horas extras serán todas las que excedan de 40.
— Calcular salario de la siguiente manera:
salario = (horas extras
x
6) + (40
x
4)
CAPÍTULO 4.
TIPOS DE PROBLEMAS
61
Lo cual significa que lo que se paga por las horas extras que haya trabajado es de $6 y las
primeras 40 horas se le pagan a $4.
En caso de que el obrero NO haya trabajado horas extras las acciones que se llevarían a cabo son:
—Calcular salario aplicando la siguiente fórmula:
salario = horas trabajadas
x
4
El único dato que se desconoce y que no puede ser calculado a partir de otros es el de horas
trabajadas, por lo cual constituirá la única entrada del problema.
SALIDAS: salario
ENTRADAS: horas trabajadas
DATOS ADICIONALES: la hora extra se paga a $6 y la hora normal se paga a $4.
SOLUCIÓN: Aplicar la condicional:
SI horas trabajadas > 40 ENTONCES
horas extras = horas trabajadas - 40
salario = (horas extras x 6) + (40 x 4) DE
OTRA MANERA
salario = horas trabajadas x 4
O bien aplicar la condicional:
SI horas trabajadas < = 40 ENTONCES
salario = horas trabajadas x 4
DE OTRA MANERA
horas extras = horas trabajadas - 40
salario = (horas extras x 6) + (40 x 4)
Ahora se aplicarán los pasos 3 y 4 utilizando la primera condicional; que será ejercicio para el
lector resolverlo aplicando la segunda condicional.
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
ht a horas trabajadas
he a horas extras
s a salario
1. PEDIR ht
2. SI ht > 40 ENTONCES
he ← ht - 40
s ←he*6 + 40*4
DE OTRA MANERA
62
PARTE 11. LÓGICA COMPUTACIONAL
Figura 4.15
s ← ht * 4
3. DESPLEGAR s
Paso 4. Diagrama de flujo (Fig. 4.15).
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.15) para verificar su
funcionalidad.
PROBLEMA 4
Un hombre desea saber cuánto dinero se generará por concepto de intereses sobre la cantidad que
CAPÍTULO 4.
TIPOS DE PROBLEMAS
63
tiene en inversión en el banco. Él decidirá reinvertir los intereses siempre y cuando estos excedan a
$7000, y en ese caso desea saber cuánto dinero tendrá finalmente en su cuenta.
Paso 1. Definición del problema:
Igual a la redacción del problema
Paso 2. Planeación de la solución:
Lo primero que debe obtenerse son los intereses que se generaron a partir de la cantidad que el hombre
tiene en inversión; para esto se aplicaría la siguiente fórmula:
intereses = cantidad en inversión
x
porcentaje de interés
El problema plantea dos posibilidades: que el hombre reinvierta los intereses o que no los
reinvierta; lo que lo llevaría a tomar esta decisión es que los intereses excedan o no de $7000.
Si los intereses excedieran a $7000 la acción que sucedería es:
cantidad final en la cuenta = cantidad en inversión + intereses
Si los intereses no excedieran a $7000, no sucedería ninguna acción pues éstos no se reinvertirían.
Se puede observar que los datos que se desconocen son: cantidad en inversión y porcentaje de
interés que está dando el banco, por lo cual éstas serían las entradas del problema.
SALIDAS: cantidad final en la cuenta, intereses
ENTRADAS: cantidad en inversión, porcentaje de interés
DATOS ADICIONALES: Los intereses se reinvertirán en caso de que excedan a $7000 y no se
reinvertirán en caso contrario.
SOLUCIÓN:
— Aplicar la fórmula:
intereses = cantidad en inversión x porcentaje de interés
—Aplicar la condicional:
SI intereses > 7000 entonces
cantidad final en la cuenta = cantidad en inversión + intereses
Nótese que la condicional carece del texto "DE OTRA FORMA", pues no hay acciones que
efectuar si no se cumple la condición.
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
p
ci
i
cf
a
a
a
a
porcentaje de interés
cantidad en inversión
intereses
cantidad final en la cuenta
1. PEDIR p,ci
2. i ← ci * p
64
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.16
3. DESPLEGAR i
4. SI i > 7000 ENTONCES
cf ← ci + i
DESPLEGAR cf
Paso 4. Diagrama de flujo (Fig. 4.16).
CAPÍTULO 4.
TIPOS DE PROBLEMAS
65
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.16) para verificar su
funcionalidad.
PROBLEMA 5
Una persona enferma, que pesa 70 kg, se encuentra en reposo y desea saber cuántas calorías consume
su cuerpo durante todo el tiempo que realice una misma actividad. Las actividades que tiene permitido
realizar son únicamente dormir o estar sentado en reposo. Los datos que tiene son que estando dormido
consume 1.08 calorías por minuto y estando sentado en reposo consume 1.66 calorías por minuto.
Paso1. Definición del problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
Lo primero que es importante saber es cuánto tiempo permaneció realizando la misma actividad, lo
que constituirá una entrada para el problema.
También será importante saber qué actividad es la que estuvo realizando, pues esto determinará
cuál factor utilizar para hacer el cálculo, y así obtener el dato buscado; las calorías gastadas al realizar
la misma actividad.
El problema presenta dos opciones: que la actividad que haya realizado la persona haya sido estar
dormido o que haya sido no estar dormido, es decir, estar sentado en reposo.
Si el tipo de actividad que estuvo realizando fue dormir, la acción que se haría para calcular las
calorías gastadas es:
calorías gastadas = 1.08 x tiempo que duró la actividad
Si el tipo de actividad que realizó fue no estar dormido, o sea estar sentado en reposo, la acción
que se llevaría a cabo es:
calorías gastadas = 1.66 x tiempo que duró la actividad
Los datos que se desconocen son tiempo que duró la actividad y tipo de actividad, por lo que éstos
serán las entradas del problema.
SALIDAS: Calorías gastadas
ENTRADAS: tipo de actividad, tiempo de actividad
DATOS ADICIONALES: Las calorías gastadas por minuto al estar dormido son de 1.08 por minuto
y las que se gastan por estar sentado en reposo son de 1.66 por minuto.
SOLUCIÓN:
Aplicar la condicional:
SI tipo de actividad = "dormido" ENTONCES
calorías gastadas ←1.08 x tiempo que duró la actividad
DE OTRA FORMA
calorías gastadas ← 1.66 x tiempo que duró la actividad
66
PARTE II. LÓGICA COMPUTACIONAL
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
cg a calorías gastadas
a$ a tipo de actividad
t a tiempo que duró la actividad
1. PEDIR a$,t
2. SI a$ = "dormido" ENTONCES
cg ← 1.08 * t
DE OTRA FORMA
cg ← 1.66 * t
3. DESPLEGAR cg
NOTA: ES importante notar que a la variable que representa el dato tipo de actividad se le agregó el
signo $, así como a la palabra dormido se le encerró entre comillas pues el dato es de tipo
alfanumérico.
Paso 4. Diagrama de flujo (Fig. 4.17)
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.17) para verificar su
funcionalidad.
PROBLEMA 6
Una empresa quiere hacer una compra de varias piezas de la misma clase a un fabricante de
refacciones. La empresa, dependiendo del monto total de la compra, decidirá qué hacer para pagar al
fabricante.
Si el monto total de la compra excede de $500 000 la empresa tendrá la capacidad de invertir de
su propio dinero un 55% del monto de la compra pedir prestado al banco un 30%, y el resto lo pagará
solicitando un crédito al fabricante.
Si el monto total de la compra no excede de $500 000 la empresa tendrá capacidad de invertir de
su propio dinero un 70% y el restante 30% lo pagará solicitando crédito al fabricante.
El fabricante cobra por concepto de intereses un 20% sobre la cantidad que se le pague a crédito.
Paso 1. Definición del problema:
Igual a la redacción del problema.
La empresa necesita determinar: cuánto dinero deberá invertir, de sus propios fondos; si hay
necesidad, cuánto tendrá que pedir prestado al banco, cuánto tendrá que pagar a crédito y cuánto
pagará por concepto de los intereses que se generen en el crédito.
Paso 2. Planeación de la solución:
Lo primero que deberá determinarse es el monto total que se debe pagar por todas las piezas que se
compren; esto puede determinarse aplicando la siguiente fórmula:
CAPÍTULO 4.
TIPOS DE PROBLEMAS
67
Figura 4.17
monto total = núm. de piezas x costo de cada pieza
El problema plantea dos opciones, las cuales dependen de si el monto total excede o no a $500 000.
Si el monto total SÍ excede a $500 000 las acciones que se realizarían son las siguientes:
— Calcular la cantidad que la empresa invertiría de sus propios fondos, lo cual se puede obtener
aplicando la siguiente fórmula:
cantidad a invertir = monto total x 0.55
—Calcular la cantidad a pagar a crédito mediante la siguiente fórmula:
cantidad a pagar a crédito = monto total x 0.15
68
PARTE II. LÓGICA C0MPUTAC10NAL
— Calcular la cantidad que se tendrá que pedir prestada al banco mediante la siguiente fórmula:
cantidad a pedir al banco = monto total x 0.3
Si el monto total NO excede a $500 000, las acciones que se efectuarían son las siguientes:
—Calcular la cantidad que la empresa invertiría de sus propios fondos, lo cual se puede obtener
aplicando la siguiente fórmula:
cantidad a invertir = monto total x 0.7
— Calcular la cantidad a pagar a crédito mediante la siguiente fórmula:
cantidad a pagar a crédito = monto total x 0.30 Sea
cual sea el monto total, el interés se calcula de la siguiente manera:
interés = cantidad a pagar a crédito x 0.2
Los datos que se desconocen son núm. de piezas y costo de cada pieza; ésas son las entradas del
problema.
SALIDAS: cantidad a invertir, cantidad a pagar a crédito, cantidad a pedir al banco, intereses
ENTRADAS: núm. de piezas, costo por pieza
DATOS ADICIONALES:
Si el monto total excede a $500 000 los porcentajes se distribuyen de la siguiente manera:
— 55% del monto total es la cantidad a invertir de los fondos de la empresa
— 30% del monto total es la cantidad a pedir al banco
—15% del monto total es la cantidad a pagar a crédito
Si el monto total no excede a $500 000 los porcentajes se distribuyen de la siguiente manera:
— 70% del monto total es la cantidad a invertir de los fondos de la empresa
— 30% del monto total es la cantidad a pagar a crédito.
El interés que se paga por concepto de pagar a crédito es el 20% del monto total.
SOLUCIÓN:
— Aplicar la fórmula:
monto total = núm. de piezas x costo de cada pieza
— Aplicar la condicional:
SI monto total > $500 000 ENTONCES
cantidad a invertir ← monto total x 0.55
cantidad a pagar a crédito ← monto total x 0.15
CAPÍTULO 4.
TIPOS DE PROBLEMAS
69
cantidad a pedir al banco ← monto total x 0.3
DESPLEGAR cantidad a pedir al banco DE
OTRA FORMA
cantidad a invertir ← monto total x 0.7 cantidad a
pagar a crédito←monto total x 0.3
—Aplicar la fórmula:
interés = cantidad a pagar a crédito x 0.2
Paso 3. Algoritmo:
•
De ahora en adelante llamaremos:
np
cu
mt
ci
cpb
cc
i
a
a
a
a
a
a
a
número de piezas
costo de cada pieza
monto total
cantidad a invertir de los fondos de la empresa
cantidad a pedir al banco
cantidad a pagar a crédito
intereses
1. PEDIR np, cu
2. mt ← np * cu
3. SI mt > 500 000 ENTONCES
ci ← mt * 0.55
cpb ← mt * 0.3
cc ← mt * 0.15
DESPLEGAR cpb
DE OTRA FORMA
ci ← mt * 0.7
cc ← mt * 0.3
4. i ←cc
x
0.2
5. DESPLEGAR ci, ce, i
Paso 4. Diagrama de flujo (Fig. 4.18):
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.18) para verificar su
funcionalidad.
PROBLEMAS PROPUESTOS
1.
2.
Calcular el total que una persona debe pagar en una llantera, si el precio de cada llanta es de $300
si se compran menos de 5 llantas, y de $250 si se compran 5 o más.
En un supermercado se hace una promoción, mediante la cual el cliente obtiene un descuento
70
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.18
dependiendo de un número que escoge al azar. Si el número escogido es menor que 74, el
descuento es del 15% sobre el total de la compra, y si es mayor o igual a 74 el descuento es del
20%. Obtener cuánto dinero se le descuenta.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
71
3. Calcular el número de pulsaciones que debe tener una persona por cada 10 segundos de ejercicio
aeróbico; la fórmula que se aplica cuando el sexo es femenino es:
número de pulsaciones = (220 - edad) /10
y si el sexo es masculino es:
número de pulsaciones = (210 - edad) / 10
4. Una compañía de seguros está abriendo un departamento de fianzas y estableció un programa
para captar clientes, que consiste en lo siguiente: Si el monto por el que se efectúa la fianza es
menor que $50 000 la cuota a pagar será por el 3% del monto, y si el monto es mayor que $50 000
la cuota a pagar será el 2% del monto. La afianzadora desea determinar cuál será la cuota que
debe pagar un cliente.
5. En una escuela la colegiatura de los alumnos se determina según el número de materias que
cursan. El costo de todas las materias es el mismo.
Se ha establecido un programa para estimular a los alumnos, el cual consiste en lo siguiente:
si el promedio obtenido por un alumno en el último periodo es mayor o igual que 9, se le hará un
descuento del 30% sobre la colegiatura y no se le cobrará IVA; si el promedio obtenido es menor
que 9 deberá pagar la colegiatura completa, la cual incluye el 10% de IVA.
Obtener cuánto debe pagar un alumno.
6. Una empresa de bienes raíces ofrece casas de interés social, bajo las siguientes condiciones: Si
los ingresos del comprador son menores de $8000 el enganche será del 15% del costo de la casa
y el resto se distribuirá en pagos mensuales, a pagar en diez años. Si los ingresos del comprador
son de $8000 o más el enganche será del 30% del costo de la casa y el resto se distribuirá en
pagos mensuales a pagar en 7 años.
La empresa quiere obtener cuánto debe pagar un comprador por concepto de enganche y
cuánto por cada pago parcial.
7. El gobierno ha establecido el programa SAR (Sistema de Ahorro para el Retiro) que consiste en
que los dueños de las empresas deben obligatoriamente depositar en una cuenta bancada un
porcentaje del salario de los trabajadores; adicionalmente los trabajadores pueden solicitar a la
empresa que deposite directamente una cuota fija o un porcentaje de su salario en la cuenta del
SAR, la cual le será descontada de su pago.
Un trabajador que ha decidido aportar a su cuenta del SAR desea saber la cantidad total de
dinero que se estará depositando a esa cuenta cada mes, y el pago mensual que recibirá.
8. Una persona desea iniciar un negocio, para lo cual piensa verificar cuánto dinero le prestaría el
banco por hipotecar su casa. Tiene una cuenta bancaria, pero no quiere disponer de ella a menos
que el monto por hipotecar su casa sea muy pequeño. Si el monto de la hipoteca es menor que
$1 000 000 entonces invertirá el 50% de la inversión total, y un socio invertirá el otro 50%. Si
el monto de la hipoteca es de $1 000 000 o más, entonces invertirá el monto total de la hipoteca
y el resto del dinero que se necesite para cubrir la inversión total se repartirá a partes iguales
entre el socio y él.
9. El gobierno del Estado de México desea reforestar un bosque que mide determinado número de
hectáreas. Si la superficie del terreno excede a 1 millón de metros cuadrados, entonces decidirá
sembrar de la siguiente manera:
72
PARTE II. LÓGICA COMPUTACIONAL
Porcentaje de la superficie del bosque
70%
20%
10%
Tipo de árbol
pino
oyamel
cedro
Si la superficie del terreno es menor o igual a un millón de metros cuadrados, entonces decidirá
sembrar de la siguiente manera:
Porcentaje de la superficie del bosque
50%
30%
20%
Tipo de árbol
pino
oyamel
cedro
El gobierno desea saber el número de pinos, oyameles y cedros que tendrá que sembrar en el
bosque, si se sabe que en 10 metros cuadrados caben 8 pinos, en 15 metros cuadrados caben 15
oyameles y en 18 metros cuadrados caben 10 cedros. También se sabe que una hectárea equivale
a 10 mil metros cuadrados.
10. Una fábrica ha sido sometida a un programa de control de contaminación para lo cual se efectúa
una revisión de los puntos IMECA generados por la fábrica. El programa de control de contaminación consiste en medir los puntos IMECA que emite la fábrica en cinco días de una semana y
si el promedio es superior a los 170 puntos entonces tendrá la sanción de parar su producción por
una semana y una multa del 50% de las ganancias diarias cuando no se detiene la producción. Si
el promedio obtenido de puntos IMECA es de 170 o menor entonces no tendrá ni sanción ni
multa. El dueño de la fábrica desea saber cuánto dinero perderá después de ser sometido a la
revisión.
11. Una persona se encuentra en la disyuntiva de comprar un automóvil o un terreno, los cuales
cuestan exactamente la misma cantidad de dinero. Sabe que mientras el automóvil se devalúa,
con el terreno sucede lo contrario. Esta persona comprará el automóvil si al cabo de tres años la
devaluación de éste no es mayor que la mitad del incremento del valor del terreno. Ayúdele a
esta persona a determinar si debe o no comprar el automóvil.
2b) Problemas selectivos compuestos
Este tipo de problemas se identifican porque para solucionarlos se necesita establecer más de una
condición.
PROBLEMAS RESUELTOS
PROBLEMA 1
Paso 1. Definición del problema:
Determinar la cantidad de dinero que recibirá un trabajador por concepto de las horas extras trabajadas
en una empresa, sabiendo que cuando las horas de trabajo exceden de 40, el resto se consideran horas
extras y que éstas se pagan al doble de una hora normal cuando no exceden de 8; si las horas extras
CAPÍTULO 4.
TIPOS DE PROBLEMAS
73
exceden de 8 se pagan las primeras 8 al doble de lo que se paga por una hora normal y el resto al
triple.
Paso 2. Planeación de solución:
Primero hay que determinar si el trabajador trabajó horas extras o no, ya que el hecho de que esta
condición sea verdadera o falsa nos llevará a emprender acciones distintas. La condicional que
ayudaría a determinarlo es la siguiente:
SI horas trabajadas > 40 ENTONCES
acciones por llevar a cabo en caso de que sea verdad DE
OTRA FORMA
acciones por llevar a cabo en caso de que sea falsa
En caso de que el trabajador SÍ haya trabajado más de 40 horas, significa que trabajó horas extras
y las acciones que se llevarían a cabo son las siguientes:
• Primero sería necesario calcular las horas extras y la fórmula que nos ayudaría a calcularlas es
la siguiente:
horas extras = horas trabajadas — 40
• El problema plantea dos opciones en caso de que el trabajador SÍ haya trabajado horas extras;
dichas opciones son:
• SI trabajó 8 o menos horas extras, éstas se le pagarán al doble de lo que se le paga por una
hora normal.
• SI trabajó más de 8 horas extras, las primeras 8 se le pagarán al doble de lo que se paga por
una hora normal y el resto se le pagarán al triple.
Estas dos opciones se pueden establecer con la siguiente condicional:
SI horas extras > 8 ENTONCES
horas extras excedentes de ocho ← horas extras — 8
pago por horas extras = pago por hora normal x 2 x 8 + pago por hora normal x 3 x horas
extra excedentes de ocho
DE OTRA FORMA
pago por horas extras = pago por hora normal x 2 x horas extras
• Finalmente, para calcular lo que el trabajador recibiría por pago habría que sumar lo que ganaría
por las primeras 40 horas a lo que ganaría por las horas extras, puede usarse la siguiente fórmula:
pago = pago por una hora normal x 40 + pago por horas extras
Ahora determinemos que acciones se llevarían a cabo en caso de que el trabajador NO haya
trabajado más de 40 horas:
74
PARTE II. LÓGICA COMPUTACIONAL
• La única acción posible en este caso es calcular el pago por las horas trabajadas, lo cual se puede
hacer mediante la siguiente fórmula:
pago = pago por hora normal
x
horas trabajadas
Las entradas del problema estarán constituidas por los datos: horas trabajadas y pago por hora
normal.
SALIDAS: pago
ENTRADAS: pago por hora normal, horas trabajadas.
DATOS ADICIONALES: si el trabajador no labora horas extras sólo se le paga el salario normal por
hora, pero si trabaja horas extras, por cada una de ellas se le pagará el doble de lo que se le paga por
una hora normal si son 8 o menos horas extras y si trabaja más de 8 horas extras se le pagan al doble
las primeras 8 y el resto se la pagan al triple.
SOLUCIÓN
Aplicar la condicional:
SI horas trabajadas > 40 ENTONCES
horas extras ←horas trabajadas - 40
SI horas extras > 8 ENTONCES
horas extras excedentes de ocho ← horas extras - 8
pago por horas extras ←pago por hora normal x 2 x 8 + pago por hora normal x 3 x horas
extras excedentes de ocho
DE OTRA FORMA
pago por horas extras ← pago por hora normal x 2 x horas extras
pago ← horas trabajadas x 40 + pago por horas extras
DE OTRA FORMA
pago ← horas trabajadas x pago por hora normal
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
ht
ph
he
het
phe
pt
a
a
a
a
a
a
horas trabajadas
pago por hora normal
horas extras
horas extras que exceden de ocho
pago por horas extras
pago que recibe el trabajador
1. PEDIR ht.ph
2. SI ht > 40 ENTONCES
he ← ht - 40
SI he > 8 ENTONCES
het ← he - 8
pe ← ph * 2 * 8 + ph * 3 * het
DE OTRA FORMA
CAPÍTULO4.
TIPOS DE PROBLEMAS
pe ← ph • 2 « 8 + ph • 3 * het
Figura4.19
pe ← ph * 2 * he
pt ← ph * 40 + pe
DE OTRA FORMA
75
76
PARTE II. LÓGICA COMPUTACIONAL
pt ←ph * ht
3. DESPLEGAR pt
Paso 4. Diagrama de flujo (Fig. 4.19).
Prueba 1
ht←38
ph←2
Como la condición ht > 40 no se cumple, ejecuta la parte izquierda:
pt←76
Al terminar la condición imprime 76, el cual es el pago que recibió el trabajador en esta semana.
Prueba 2
ht←45
ph←2
Como la condición ht > 40 sí se cumple ejecuta el primer bloque de la parte derecha de la
condición:
he←5
A continuación, como la condición ht > 8 no se cumple, ejecuta:
pe←20
pt ←100
Y finalmente se imprime el valor de pt = 100, que es lo que gana el empleado en esa semana por
haber trabajado 5 horas extra.
Prueba 3
ht←50
ph←2
La condición ht > 40 se cumple y ejecuta:
he←10
<■■■
También la condición he > 8 se cumple y ejecuta:
het ←2
CAPÍTULO 4.
TIPOS DE PROBLEMAS
pe ←44
pt←124
E imprime 124, lo que ganó el empleado por haber trabajado 10 horas extras.
Otra forma de solucionar el problema es:
Paso 2. Planeación de la solución:
La fórmula general para calcular el pago del trabajador es:
pago = horas normales x pago por hora normal + horas extras dobles x pago por hora
normal x 2 + horas extras triples x pago por hora normal x 3
Por lo cual debemos obtener los datos horas normales, horas extras dobles y horas extras triples.
Si horas trabajadas > 40 ENTONCES
horas extras = horas trabajadas - 40
Si horas extras > 8 ENTONCES
horas normales = 40
horas extras dobles = 8
horas extras triples = horas extras - 8
DE OTRA FORMA
horas normales = 40
horas extras dobles = horas extras
horas extras triples = 0
DE OTRA FORMA
horas normales = horas trabajadas x pago por hora normal
horas extras dobles = 0
horas extras triples = 0
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
h
ph
a
a
n
a
e
d
a
a
t
a
P
a
1.
2.
horas
pago
horas
horas
horas
horas
pago
trabajadas
por hora
normales
extras
extras dobles
extras triples
PEDIR h, Ph
SI h > 40 > ENTONCES
e ← h - 40
S I e 8 ENTONCES
77
78
PARTE II. LÓGICA COMPUTACIONAL
nf ← 40
d←8
t ← e←8
DE OTRA FORMA
n←40
d ←e
t←0 DE
OTRA FORMA
n← h
d←0
t←0
3. p ← n * ph + d *ph * 2 + t *ph *3
4. DESPLEGAR p
Paso 4. Diagrama de flujo (Fig. 4.20).
En aquellos problemas en donde un bloque condicional incluye otro bloque condicional se dice
que un bloque está anidado dentro del otro.
Ahora se efectuarán las mismas pruebas que se emplearon para la primera solución:
Prueba 1
h←38
ph←2
Como la condición h > 40 no se cumple, ejecuta la parte izquierda:
n←38
d←0
t←0
Al terminar la condición:
p←76
e imprime este valor.
Prueba 2
h←45
ph←2
Como la condición ht > 40 se cumple, ejecuta el primer bloque de la parte derecha de la condición:
e←5
CAPÍTULO 4.
Figura 4.20
A continuación, como la condición e > 8 no se cumple ejecuta:
n ← 40
d←5
TIPOS DE PROBLEMAS
79
80
PARTE I I . LÓGICA COMPUTACIONAL
t←0
p← 100
Y se imprime 100, que es lo que gana el empleado en esa semana por haber trabajado cinco horas
extras.
Prueba 3
h←50
ph←2
La condición ht > 40 se cumple y ejecuta:
e← 10
También la condición e > 8 se cumple y ejecuta:
n←40
d←8
t←2
p← 124
Y se imprime 124, lo que ganó el empleado por haber trabajado 10 horas extras.
PROBLEMA 2
Paso 1. Definición del problema:
Calcular la utilidad que un trabajador recibe en el reparto anual de utilidades si éste se le asigna como
un porcentaje de su salario mensual que depende de su antigüedad en la empresa de acuerdo con la
siguiente tabla:
TIEMPO
menos de 1 año
1 año o más y menos de 2 años
2 años o más y menos de 5 años
5 años o más y menos de 10 años
10 años o más
UTILIDAD
5% del salario
7% del salario
10% del salario
15% del salario
20% del salario
Paso 2. Planeación de la solución:
Lo primero que es importante determinar es en qué rango se encuentra la antigüedad del trabajador
en la empresa. Para ello será necesario averiguar si está en el primer rango, es decir si tiene menos
de un año trabajando. Esto puede determinarse con la ayuda de la siguiente condicional:
CAPÍTULO 4.
TIPOS DE PROBLEMAS
81
SI tiempo < 1 ENTONCES
acciones por llevar a cabo en caso de que tenga menos de 1 año trabajando en la empresa DE
OTRA FORMA
acciones por llevar a cabo en caso de que tenga 1 año o más trabajando en la empresa
En caso de que el tiempo NO fuera menor que 1, significaría que el trabajador tiene 1 año o más
trabajando en la empresa, pero no se sabe exactamente en cuál de los demás rangos se ubica, es decir,
podría ser que estuviera en el rango de 1 a 2 años, o de 2 a 5 años, o de 5 a 10 años o de más de 10
años. El hecho de saber que NO tiene menos de 1 año trabajando no es útil para resolver el problema,
por lo cual es necesario establecer un grupo de condiciones para verificar en qué rango se encuentra
exactamente. Estas condiciones quedarían de la siguiente manera:
SI tiempo < 1 ENTONCES
acciones por llevar a cabo en caso de que tenga menos de 1 año DE
OTRA FORMA
SI tiempo < 2 ENTONCES
acciones por realizar en caso de que tenga más de 1 año y menos de 2
DE OTRA FORMA
SI tiempo < 5 ENTONCES
acciones por realizar en caso de que tenga más de 2 años y menos de 5
DE OTRA FORMA
SI tiempo < 10 ENTONCES
acciones por realizar en caso de que tenga más de 5 años y menos de 10
DE OTRA FORMA
acciones por realizar en caso de que tenga 10 años o más
La condicional tiempo < 2 es una acción que se llevaría a cabo sólo si la condicional tiempo < 1
NO fuera verdad, lo cual significa que si la condicional tiempo < 2 SÍ fuera verdad el tiempo estaría
necesariamente en el rango de entre 1 y 2 años, ya que ya se sabe que NO tiene menos de 1 año y que
SÍ tiene menos de 2.
Ocurre exactamente lo mismo con los demás rangos.
Los datos tiempo y salario constituyen las entradas del problema.
SALIDAS: utilidad
ENTRADAS: tiempo, salario
DATOS ADICIONALES: La utilidad que se otorga depende del tiempo que se tiene trabajando en la
empresa según la siguiente tabla:
TIEMPO
menos de 1 año
1 año o más y menos de 2 años
2 años o más y menos de 5 años
5 años o más y menos de 10 años
10 años o más
UTILIDAD
5% del salario
7% del salario
10% del salario
15% del salario
20% del salario
82
PARTE II. LÓGICA COMPUTACIONAL
SOLUCIÓN
Aplicar la condicional:
SI tiempo < 1 ENTONCES
utilidad ← salario x 0.05
DE OTRA FORMA
SI tiempo < 2 ENTONCES
utilidad ← salario x 0.07
DE OTRA FORMA
SI tiempo < 5 ENTONCES
utilidad ← salario x 0.1
DE OTRA FORMA
Si tiempo < 10 ENTONCES
utilidad ←salario x 0.15
DE OTRA FORMA
utilidad ← salario x 0.2
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
s
t
u
a salario
a tiempo que tiene trabajando
a utilidad
1. PEDIR s, t
2. SI t < 1 ENTONCES
u ← s * 0.05
DE OTRA FORMA
SI t < 2 ENTONCES
u ← s * 0.07
DE OTRA FORMA
SI t < 5 ENTONCES
u ← s * 0.1
DE OTRA FORMA
S i t < 10 ENTONCES
u ← s *0. 1 5
DE OTRA FORMA
u ← s * 0.2
3. DESPLEGAR u
Paso 4. Diagrama de flujo (Fig. 4.21).
Prueba 1
Supongamos que una persona tiene 1/2 año de antigüedad y gana $1000
mensuales.
CAPÍTULO 4.
Figura 4.21
t ←0.5
s ← 1000
La primera condición se cumple ya que 0.5 es menor que 1 y ejecuta:
TIPOS DE PROBLEMAS
83
84
PARTE II . LÓGICA COMPUTACIONAL
u←50
y este último valor es desplegado como la solución del problema.
Prueba 2
Ahora supongamos que una persona que tiene 15 años de antigüedad y gana $5000 mensuales.
t← 15
s ←5000
La primera condición no la cumple, ya que 15 no es menor que 1, así que ejecuta la segunda condición,
la cual tampoco se cumple ya que 15 no es menor que 2. Lo mismo pasa con la condición t < 5. Al
llegar al último bloque condicional evalúa la condición 15 < 10, lo cual no es verdad y ejecuta la
parte izquierda de la condición:
u ←1000
y despliega este valor que es el 20% de los $5000 que gana esta persona por mes.
Ejercicio: Efectuar por lo menos dos pruebas más a este diagrama de flujo para verificar su
funcionalidad.
PROBLEMA 3
Paso 1. Definición del problema:
En una tienda de descuento se efectúa una promoción en la cual se hace un descuento sobre el valor
de la compra total según el color de la bolita que el cliente saque al pagar en caja. Si la bolita es
blanca no se le hará descuento alguno, si es verde se le hará un 10% de descuento, si es amarilla un
25%, si es azul un 50% y si es roja un 100%. Determinar la cantidad final que un cliente deberá pagar
por su compra. Se sabe que sólo hay bolitas de los colores mencionados.
Paso 2. Planeación de la solución:
Lo primero que debe saberse es el color de la bolita que le correspondió al cliente. Con este dato se
podrá determinar qué descuento se le aplicará. Esto puede hacerse estableciendo un grupo de
condiciones que evalúen el color de la bolita. Las condiciones pueden ser las siguientes:
SI color de la bolita = "BLANCA" ENTONCES
El descuento será de 0%
DE OTRA FORMA
SI color de la bolita = "VERDE" ENTONCES
El descuento será de 10%
DE OTRA FORMA
SI color de la bolita = "AMARILLA" ENTONCES
El descuento será de 25%
CAPÍTULO 4.
TIPOS DE PROBLEMAS
85
DE OTRA FORMA
SI color de la bolita = "AZUL" ENTONCES
El descuento será de 50%
DE OTRA FORMA
El descuento será de 100%
Nótese que si la bolita NO es blanca será necesario verificar SI es verde para poder asegurar que
el descuento será del 10%. En caso de que la bolita NO sea blanca ni verde, entonces se tendrá que
verificar que SÍ sea amarilla para poder asegurar que el descuento sea del 25%. En caso de que la
bolita NO sea blanca ni verde ni amarilla ni azul, necesariamente tendrá que ser roja, ya que se sabe
que no hay más colores y el descuento se obtiene entonces por exclusión.
En caso de que la bolita sea blanca la fórmula para encontrar la cantidad por descontar podría ser
la siguiente:
cantidad por descontar = 0
Si la bolita es roja la fórmula para encontrar la cantidad por descontar debe ser la siguiente:
cantidad por descontar = monto de la compra
En cualquiera de los demás casos la cantidad por descontar podrá obtenerse mediante la siguiente
fórmula:
cantidad a descontar = monto de la compra x descuento Los datos que
constituyen las entradas del problema son: monto de la compra y color de la bolita.
SALIDAS: cantidad final a pagar
ENTRADAS: monto de la compra, color de la bolita
DATOS ADICIONALES: el descuento que se otorga depende del color de la bolita que se obtenga,
como lo muestra la siguiente tabla:
COLOR DE LA BOLITA
Blanca
Verde
Amarilla
Azul
Roja
SOLUCIÓN
Aplicar la condicional:
SI color de la bolita = "BLANCA" ENTONCES
cantidad a descontar ← 0
DE OTRA FORMA
DESCUENTO
0%
10%
25%
50%
100%
86
PARTE I I . LÓGICA COMPUTACIONAL
SI color de la bolita = "VERDE" ENTONCES
cantidad a descontar ← monto de la compra x 0.1
DE OTRA FORMA
SI color de la bolita = "AMARILLA" ENTONCES
cantidad a descontar ← monto de la compra x 0.25
DE OTRA FORMA
SI color de la bolita = "AZUL" ENTONCES
cantidad a descontar ← monto de la compra x 0.5
DE OTRA FORMA
cantidad a descontar ← monto de la compra
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
m
b$
d
cp
a
a
a
a
monto de la compra
color de la bolita
cantidad por descontar
cantidad por pagar
1. PEDIR m, b$
2. SI b$ = "BLANCA" ENTONCES
d←0
DE OTRA FORMA
SI b$ = "VERDE" ENTONCES
d←m*0.1
DE OTRA FORMA
SI b$ = "AMARILLA" ENTONCES
d←m * 0.25
DE OTRA FORMA
SI b$ = "AZUL" ENTONCES
d ← m * 0.5
OTRA FORMA
d←m
3. cp ← m ← d
4. DESPLEGAR cp
Nótese que el nombre de la variable que contiene el dato del color de la bolita tiene al final el signo
$ y que los nombres de los colores están entre comillas, esto se debe a que el dato color es de tipo
alfanumérico.
Paso 4. Diagrama de flujo (Fig. 4.22).
Prueba J
Realicemos una prueba para una persona que compró $500 y le correspondió una bolita de color
blanco:
CAPÍTULO 4.
Figura 4.22
m←500
b$ ← "BLANCA"
Al ser verdadera la primera condicional ejecuta:
TIPOS DE PROBLEMAS
87
88
PARTE II. LÓGICA COMPUTACIONAL
d←0
cp ← 500
e imprime 500, cantidad que se tendrá que pagar ya que la bola blanca no da derecho a obtener
descuento.
Prueba 2
Supongamos ahora que una persona ha comprado $200 y la bolita es amarilla.
m←200
b$ ← "AMARILLA"
La evaluación de la primera y la segunda condiciones resulta falsa, así que se evalúa la tercera, la
cual es verdadera y entonces se ejecuta:
d←50
cp ← 150
este último valor se despliega porque es un 25% de descuento sobre $200.
Prueba 3
En esta prueba la persona obtuvo bolita roja y compró $350.
m←350
b$ ← "ROJA"
Ninguna de las cuatro condiciones es verdadera, ya que la bolita no es ni blanca ni verde ni amarilla,
por lo cual se ejecuta la parte falsa de la última condición:
d←350
cp ← 0
y se imprime 0, ya que la bolita roja otorga un 100% de descuento sobre la compra.
PROBLEMA 4
Paso 1. Definición del problema:
Una empresa que comercializa cosméticos tiene organizados a sus vendedores en tres departamentos
y ha establecido un programa de incentivos para incrementar su productividad. El gerente, al final
del mes, pide el importe global de las ventas de los tres departamentos y aquellos que excedan el 33%
CAPÍTULO 4.
TIPOS DE PROBLEMAS
89
de las ventas totales se les paga una cantidad extra equivalente al 20% de su salario mensual. Si todos
los vendedores ganan lo mismo, determinar cuánto recibirán los vendedores de los tres departamentos
al finalizar el mes.
Paso 2. Planeación de la solución:
En primer lugar, será necesario obtener las ventas totales de la empresa, lo que puede calcularse
mediante la fórmula:
ventas totales = ventas departamento 1 + ventas
departamento 2 + ventas departamento 3
Una vez obtenidas las ventas totales se podrá calcular cuánto representa el 33% de éstas utilizando
la siguiente fórmula:
porcentaje de ventas = ventas totales x 0.33
El porcentaje de ventas servirá para determinar si los departamentos rebasan éste o no y así poder
calcular si los vendedores de cada departamento recibirán un 20% más sobre su salario o no. Por cada
departamento se tendrá una condicional como la siguiente:
SI ventas del departamento > porcentaje de ventas ENTONCES
cantidad por recibir ← salario + salario x 0.2
DE OTRA FORMA
cantidad por recibir ← salario
En este problema las condicionales tendrán que aplicarse en forma secuencial, ya que si un
departamento recibe aumento o no es independiente de lo que suceda con los otros dos departamentos.
Las entradas del problema estarán constituidas por los datos: ventas del departamento 1, ventas
del departamento 2, ventas del departamento 3 y salario de los vendedores.
SALIDAS: cantidad por recibir por los vendedores del departamento 1
cantidad por recibir por los vendedores del departamento 2
cantidad por recibir por los vendedores del departamento 3
ENTRADAS: ventas del departamento 1, ventas del departamento 2, ventas del departamento 3,
salario de los vendedores.
DATOS ADICIONALES: Los vendedores recibirán un 20% más sobre su salario si las ventas de su
departamento rebasan el 33% de las ventas totales de la empresa.
SOLUCIÓN
—Aplicar la fórmula:
ventas totales = ventas departamento 1 + ventas departamento 2 +
ventas departamento 3
— Aplicar la fórmula:
90
PARTE II. LÓGICA COMPUTACIONAL
porcentaje de ventas = ventas totales x 0.33
—Aplicar la condicional:
SI ventas del departamento 1 > porcentaje de ventas ENTONCES
cantidad por recibir por vendedores del departamento 1 ← salario + salario x 0.2
DE OTRA FORMA
cantidad por recibir por los vendedores del departamento 1 ← salario
—Aplicar la condicional:
SI ventas del departamento 2 > porcentaje de ventas ENTONCES
cantidad por recibir por vendedores del departamento 2 ← salario + salario x 0.2
DE OTRA FORMA
cantidad por recibir por los vendedores del departamento 2 ← salario
—Aplicar la condicional:
SI ventas del departamento 3 > porcentaje de ventas ENTONCES
cantidad por recibir por vendedores del departamento 3 ← salario 4- salario x 0.2
DE OTRA FORMA
cantidad por recibir por los vendedores del departamento 3 ← salario
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
v1
v2
v3
s
tv
p
cd1
cd2
cd3
1.
2.
3.
4.
a
a
a
a
a
a
a
a
a
ventas del departamento 1
ventas del departamento 2
ventas del departamento 3
salario que reciben los vendedores
total de ventas de la empresa
porcentaje de ventas
cantidad por recibir por los vendedores del departamento 1
cantidad por recibir por los vendedores del departamento 2
cantidad por recibir por los vendedores del departamento 3
PEDIR vi, v2, v3, s
tv ← vi + v2 + v3
p ← tv * 0.33
SI vi > p ENTONCES
Cd1←s + s *0 . 2
DE OTRA FORMA
cd1 ← s
5. SI v2 > p ENTONCES
CAPÍTULO 4.
TIPOS DE PROBLEMAS
91
cd2 ← S + S * 0.2
DE OTRA FORMA
cd2←s
6. SI v3 > p ENTONCES
cd3 ← s + s * 0.2
DE OTRA FORMA
cd3←s
7. DESPLEGAR cd1, cd2, cd3
Paso 4. Diagrama de flujo (Fig. 4.23).
Prueba
Supongamos que el primer departamento vendió $32 000, el segundo $38 000 y el tercero $30 000.
Cada vendedor gana $1500.
v1 ← 32 000
v2← 38 000
v3← 30 000
s← 1500
tv ← 100 000
p ← 33 000
Al evaluar la primera condición ésta resulta falsa, ya que 32 000 no es mayor que 33 000, así es que
ejecuta:
Cd1 ← 1500
Cuando se evalúa la segunda condición ésta es verdadera, ya que 38 000 es mayor que 33 000, así es
que ejecuta:
cd2← 1800
La tercera condición es falsa porque 30 000 no es mayor que 33 000:
cd3 ←1500
Y se imprimen los valores 1500, 1800 y 1500, lo que significa que el segundo departamento fue el
único que obtuvo incentivo.
Ejercicio: efectuar al menos una prueba más a este diagrama de flujo para verificar su
funcionalidad.
PROBLEMA 5
Paso 1. Definición del problema:
El Instituto Mexicano del Seguro Social (IMSS) requiere clasificar a las personas que se jubilarán en
92
PARTE II. LÓGICA C0MPUTAC10NAL
Figura 4.23
el año de 1992. Existen tres tipos de jubilaciones: por edad, por antigüedad joven y por antigüedad
adulta.
Las personas adscritas a la jubilación por edad deben tener 60 años o más y una antigüedad en su
empleo de menos de 25 años.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
93
Las personas adscritas a la jubilación por antigüedad joven deben tener menos de 60 años y una
antigüedad en su empleo de 25 años o más.
Las personas adscritas a la jubilación por antigüedad adulta deben tener 60 años o más y una
antigüedad en su empleo de 25 años o más.
Determinar en qué tipo de jubilación, quedará adscrita una persona.
Paso 2. Planeación de la solución:
Primero es importante determinar en qué rango se encuentran la edad y la antigüedad de la persona,
para ello emplearemos la condicional:
SI edad > = 60 ENTONCES
SI antigüedad < 25 ENTONCES
la jubilación es por edad
DE OTRA FORMA
la jubilación es por antigüedad adulta
DE OTRA FORMA
SI antigüedad < 25 ENTONCES
no tiene por qué jubilarse
DE OTRA FORMA
la jubilación es por antigüedad joven
Otra alternativa es emplear la siguiente condicional:
SI edad > = 60 Y antigüedad < 25 ENTONCES
la jubilación es por edad
DE OTRA FORMA
SI edad > = 60 Y antigüedad > 25 ENTONCES
la jubilación es por antigüedad adulta
DE OTRA FORMA
SI edad < 60 Y antigüedad > 25 ENTONCES
la jubilación es por antigüedad joven
DE OTRA FORMA
no tiene por qué jubilarse
Recuerde que para que la expresión edad > = 60 Y antigüedad < 25 sea verdadera, es preciso
que las dos condiciones se cumplan; si por lo menos una de ellas no se cumple toda la expresión será
falsa.
Esta segunda alternativa se empleará para solucionar el problema. El lector tendrá, como ejercicio,
que continuar con la metodología para la primera alternativa.
Las entradas del problema serán los datos: edad y antigüedad de la persona.
SALIDAS: tipo de jubilación
ENTRADAS: antigüedad, edad
DATOS ADICIONALES:
Si la edad > = 60 y la antigüedad < 25 entonces el tipo de jubilación es por edad.
Si la edad > = 60 y la antigüedad > 25 entonces el tipo de jubilación es por antigüedad adulta.
94
PARTE II. LÓGICA COMPUTACIONAL
Si la edad < 60 y la antigüedad > 25 entonces el tipo de jubilación es por antigüedad joven. Si
la edad < 60 y la antigüedad < 25 entonces no tiene por qué jubilarse.
SOLUCIÓN
— Aplicar la condicional:
SI edad > = 60 Y antigüedad < 25 ENTONCES
la jubilación es por edad
DE OTRA FORMA
SI edad > = 60 Y antigüedad > 25 ENTONCES
la jubilación es por antigüedad adulta
DE OTRA FORMA
SI edad < 60 Y antigüedad > 25 ENTONCES
la jubilación es por antigüedad joven
DE OTRA FORMA
no tiene por qué jubilarse
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
ed a edad
ant a antigüedad
1. PEDIR ed, ant
2. SI ed > = 60 AND ant < 25 ENTONCES
DESPLEGAR "la jubilación es por edad"
DE OTRA FORMA
SI ed > = 60 AND ant > 25 ENTONCES
DESPLEGAR "la jubilación es por antigüedad adulta"
DE OTRA FORMA
SI ed < 60 AND ant > 25 ENTONCES
DESPLEGAR "la jubilación es por antigüedad joven"
DE OTRA FORMA
DESPLEGAR "no tiene por qué jubilarse"
Recuerde que el conectivo lógico conjunción se representa con el operador AND, y que por esta
razón sustituyó el lugar del conectivo Y.
Paso 4.
Diagrama de flujo (Fig. 4.24).
Prueba 1
Hagamos una prueba con una persona de 65 años de edad y 30 años de antigüedad:
e d←6 5
CAPÍTULO 4.
TIPOS DE PROBLEMAS
95
Figura 4.24
ant ← 30
La primera condicional no se cumple, pues aunque ya la variable ed es mayor que 60, la variable ant
no es menor que 25 y como no se cumplen ambas condiciones se pasa al siguiente bloque condicional.
96
PARTE I I . LÓGICA COMPUTACIONAL
En el segundo bloque ambas condiciones se cumplen, así que se despliega el letrero "La jubilación
es por antigüedad adulta".
Prueba 2
Otro caso puede ser el de una persona que tenga 55 años de edad y 20 años de antigüedad:
ed ←55 t
← 20an
En la primera condicional sólo la condición ant < 25 se cumple, así es que la condición compuesta
es falsa y se evalúa la parte izquierda del bloque.
La segunda condicional también es falsa, ya que ninguna de las dos condiciones se cumple.
También la tercera condicional es falsa, ya que sólo la condición ed < 60 se cumple; por lo tanto,
se ejecuta la parte izquierda del bloque condicional, que consiste en desplegar el letrero "No tiene
por qué jubilarse".
Ejercicio: efectuar al menos una prueba más a este diagrama de flujo para verificar su
funcionalidad.
PROBLEMAS PROPUESTOS
1.
2.
3.
En una fábrica de computadoras se planea ofrecer a los clientes un descuento que dependerá del
número de computadoras que compren. Si las computadoras son menos de cinco se les da un 10%
de descuento sobre el total de la compra; si el número de computadoras es mayor o igual a cinco
pero menor que 10 se les otorga un 20% de descuento; y si son 10 o más se les da un 40% de
descuento. El precio de cada computadora es de $3500.
En una llantera se ha establecido una promoción de las llantas marca "Ponchadas", dicha
promoción consiste en lo siguiente:
Si se compran menos de cinco llantas el precio es de $45 cada una, de $40 si se compran de
cinco a 10 y de $35 si se compran más de 10.
Obtener la cantidad de dinero que una persona tiene que pagar por cada una de las llantas que
compra y la que tiene que pagar por el total de la compra.
En un juego de preguntas a lasque se responde "SÍ" o "NO" gana quien responda correctamente
las tres preguntas. Si se responde mal a cualquiera de ellas ya no se pregunta la siguiente y termina
el juego. Las preguntas son:
1. ¿Colón descubrió América?
2. ¿La independencia de México fue en el año 1810?
3. ¿The Doors fue un grupo de rock americano?
4.
Un proveedor de estéreos ofrece un descuento del 10% sobre el precio sin IVA, de algún aparato
si éste cuesta $2000 o más. Además, independientemente de esto, ofrece un 5% de descuento si
CAPÍTULO 4.
TIPOS DE PROBLEMAS
97
la marca es "NOSY". Determinar cuánto pagará, con IVA incluido, un cliente cualquiera por la
compra de su aparato.
5.
Una frutería ofrece las manzanas con descuento según la siguiente tabla:
NUM. DE KILOS COMPRADOS
0
-2 2.01 -5
5.01 - 10 10.01
en adelante
6.
% DESCUENTO
0%
10%
15%
20%
Determinar cuánto pagará una persona que compre manzanas en esa frutería.
El dueño de una empresa desea planificar las decisiones financieras que tomará en el siguiente
año. La manera de planificarlas depende de lo siguiente:
Si actualmente su capital se encuentra con saldo negativo, pedirá un préstamo bancario para
que su nuevo saldo sea de $10 000. Si su capital tiene actualmente un saldo positivo pedirá un
préstamo bancario para tener un nuevo saldo de $20 000, pero si su capital tiene actualmente un
saldo superior a los $20 000 no pedirá ningún préstamo.
Posteriormente repartirá su presupuesto de la siguiente manera:
$5000 para equipo de cómputo
$2000 para mobiliario
y del resto la mitad será para la compra de insumos y la otra para otorgar incentivos al personal.
7.
Desplegar qué cantidades se destinarán para la compra de insumos e incentivos al personal
y, en caso de que fuera necesario, a cuánto ascendería la cantidad que se pediría al banco.
Tomando como base los resultados obtenidos en un laboratorio de análisis clínicos, un médico
determina si una persona tiene anemia o no, lo cual depende de su nivel de hemoglobina en la
sangre, de su edad y de su sexo. Si el nivel de hemoglobina que tiene una persona es menor que
el rango que le corresponde, se determina su resultado como positivo y en caso contrario como
negativo. La tabla en la que el médico se basa para obtener el resultado es la siguiente:
EDAD
0 - 1 mes
mayor de 1 y menor o igual de 6 meses
mayor de 6 y menor o igual de 12 meses
mayor de 1 y menor o igual que 5 años
mayor de 5 y menor o igual que 10 años
mayor de 10 y menor o igual que 15 años
mujeres mayores de 15 años hombres
mayores de 15 años
NIVEL DE HEMOGLOBINA
13
10
11
11.5
12.6
13
12
14
.
-
26
18
15
15
15.5
15.5
16
18
g%
g%
g%
g%
g%
g%
g%
g%
98
8.
PARTE I I. LÓGICA COMPUTACIONAL
Una institución educativa estableció un programa para estimular a los alumnos con buen
rendimiento académico y que consiste en lo siguiente:
Si el promedio es de 9.5 o más y el alumno es de preparatoria, entonces éste podrá cursar 55
unidades y se le hará un 25% de descuento.
Si el promedio es mayor o igual a 9 pero menor que 9.5 y el alumno es de preparatoria,
entonces éste podrá cursar 50 unidades y se le hará un 10% de descuento.
Si el promedio es mayor que 7 y menor que 9 y el alumno es de preparatoria, éste podrá cursar
50 unidades y no tendrá ningún descuento.
Si el promedio es de 7 o menor, el número de materias reprobadas es de cero a tres y el alumno
es de preparatoria, entonces podrá cursar 45 unidades y no tendrá descuento.
Si el promedio es de 7 o menor, el número de materias reprobadas es de cuatro o más y el
alumno es de preparatoria, entonces podrá cursar 40 unidades y no tendrá ningún descuento.
Si el promedio es mayor o igual a 9.5 y el alumno es de profesional, entonces podrá cursar
55 unidades y se le hará un 20% de descuento.
Si el promedio es menor de 9.5 y el alumno es de profesional, entonces podrá cursar 55
unidades y no tendrá descuento.
Obtener el total que tendría que pagar un alumno si la colegiatura para alumnos de profesional
es de $300 por cada cinco unidades y para alumnos de preparatoria es de $180 por cada cinco
unidades.
3) PROBLEMAS REPETITIVOS
Introducción
Se les llama problemas repetitivos a aquellos en cuya solución es necesario utilizar un mismo conjunto
de acciones que puedan ejecutarse más de una vez.
Por ejemplo, un problema repetitivo sencillo podría ser pedir cinco cantidades de la misma unidad.
Para resolverlo se podría hacer este proceso en forma secuencial y el algoritmo y diagrama de flujo
quedarían como se muestra en la figura 4.25.
Este problema es repetitivo pues para solucionarlo se necesita realizar la misma acción, PEDIR
cant más de una vez.
Si bien escribir cinco veces la misma acción no costó mucho trabajo, imagine ahora si fueran 100
las cantidades que tuvieran que pedirse: la solución secuencial a este problema resultaría sumamente
larga y tediosa.
Para solucionar problemas repetitivos recurriremos al uso de ciclos, que nos evitarán escribir
muchas veces un conjunto de acciones.
Ahora definiremos lo que es un ciclo y algunos otros conceptos necesarios para la solución de
problemas repetitivos.
Ciclo: Es la ejecución de un mismo conjunto de acciones una o más veces. Se compone de: cuerpo
del ciclo y estructura cíclica.
Proceso: Conjunto de acciones a las que se les asigna un nombre. Para crearlo se deberán seguir
las mismas reglas usadas para nombrar las variables, con la diferencia de que deberán emplearse letras
mayúsculas. La última acción de un proceso deberá ser siempre FINP, para indicar el fin de éste.
CAPÍTULO 4.
1.
2.
3.
4.
5.
TIPOS DE PROBLEMAS
99
PEDIR cant
PEDIR cant
PEDIR cant
PEDIR cant
PEDIR cant
Figura 4.25
Cuerpo del ciclo: Proceso que se ejecutará una o más veces.
Estructura cíclica: Conjunto de acciones que permiten que el cuerpo del ciclo se ejecute una o
más veces.
Iteración: Es cada una de las ejecuciones del cuerpo del ciclo.
La forma básica de un ciclo en algoritmo y diagrama de flujo es la siguiente:
1.
2.
C
IR al paso 1
En donde C es el nombre del cuerpo del ciclo, y la estructura cíclica está representada por la flecha,
la cual ayuda a que el cuerpo del ciclo se ejecute varias veces.
Los ciclos que usaremos son aquellos en los que el cuerpo del ciclo es ejecutado por la estructura
cíclica hasta que cierta condición se satisface y que por lo tanto su número de iteraciones es finito.
A veces la definición del problema nos lleva a usar un ciclo en el que el número de iteraciones a
efectuarse se puede determinar previamente; sin embargo, otras veces, aunque sabemos que el ciclo
tiene un número finito de iteraciones, no podremos saber de antemano el número de ellas.
Es así que los ciclos se clasifican en:
1) Ciclos con un número determinado de iteraciones.
2) Ciclos con un número indeterminado de iteraciones.
1) Ciclos con un número determinado de iteraciones
Son aquellos en que el número de iteraciones es determinable antes de ejecutarse el ciclo. Este número
100
PARTE I I . LÓGICA COMPUTACIONAL
de iteraciones se puede obtener de la definición del problema, o bien mediante una entrada de datos
cuando el problema indique que un conjunto de acciones se debe efectuar para n ocurrencias.
Como ejemplo, resolvamos el problema planteado al principio del capítulo en donde debíamos
pedir cinco cantidades de la misma unidad. Es claro que el número de iteraciones es de 5, por lo que
entra en la categoría de ciclos con un número determinado de iteraciones.
Para poder pedir exactamente cinco veces la variable cant necesitaremos ir contando el número
de veces que la vayamos pidiendo. Cuando ya la hayamos pedido cinco veces tendremos que salir del
ciclo, auxiliándonos con un bloque condicional que evalúe si ya hemos ejecutado cinco iteraciones.
A la variable que nos ayuda a contar el número de iteraciones se le llama contador, y en adelante se
utilizarán las variables i,j y k como contadores. En este caso, tanto el contador como el bloque
condicional formarán parte de la estructura cíclica y la entrada de datos de la variable cant es el
cuerpo del ciclo.
Para pedir la variable cant cinco veces debemos hacer lo siguiente:
1.
i← 1
2.
SI i > 5 ENTONCES
IR al paso 3
DE OTRA FORMA
PEDIR cant
i ← i +1
IR al paso 2
FIN
3.
Y el diagrama de flujo correspondiente es el que se muestra en la figura 4.26.
La variable i es el contador del número de iteraciones. La expresión:
i ← i+1
significa que al valor de la variable i se le suma 1 y el resultado de la suma es reasignado a la
variable i, por lo que esta expresión implica que el valor de la variable i es incrementado en 1.
El diagrama de flujo hace lo siguiente:
1) El primer bloque ejecutable asigna el valor 1 a la variable i.
2) La secuencia del diagrama nos lleva a evaluar si i es mayor que 5, esto es, si 1 es mayor que 5;
como esto es falso la secuencia del diagrama nos lleva a pedir la variable cant por primera vez.
3) El valor de i se incrementa y ahora es de 2.
4) Se evalúa la condición 2 > 5, la cual es falsa y nos lleva a pedir la variable cant por segunda
vez.
5) El valor de i se incrementa y ahora es de 3.
6) Se evalúa la condición 3 > 5 y como es falso, se pide la variable cant por tercera vez.
7) i tiene ahora un valor de 4.
8) Se evalúa la condición 4 > 5; al ser falsa se pide la variable cant por cuarta vez.
9) i tiene ahora un valor de 5.
10) Se evalúa la condición 5 > 5, y al ser falsa se pide la variable cant por quinta vez.
11) i tiene ahora un valor de 6.
12) Se evalúa la condición 6 > 5; al ser verdadera se termina la ejecución del ciclo.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
101
Figura 4.26
Como regla general a los ciclos con un número determinado de iteraciones les corresponde un
algoritmo como el siguiente:
1.
i← 1
2.
SI i > n ENTONCES
IR al paso 3
DE OTRA FORMA
C
i ← i +1
IR al paso 2
X
3.
En donde la variable n es el número de iteraciones que se van a efectuar, y la variable i, como se
vio, es el contador de iteraciones. C es el cuerpo del ciclo que será ejecutado n veces, y X es el conjunto
de acciones que se ejecutarán cuando se termine con el ciclo.
A este algoritmo le corresponde un diagrama de flujo como el de la figura 4.27.
102
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.27 2)
Ciclos con un número indeterminado de iteraciones
Son aquellos en donde el número de iteraciones permanece indeterminado durante la ejecución del
ciclo, y el proceso repetitivo termina hasta que el usuario lo indique.
En este tipo de ciclos el usuario decide dentro del ciclo cuando terminar con el proceso repetitivo
sin importar cuántas iteraciones se hayan efectuado, a diferencia de los ciclos anteriores, en donde
el número de iteraciones está determinado desde el principio.
El algoritmo que le corresponde a este tipo de ciclos es el siguiente:
1. C
2. PEDIR mas$
3. SI mas$ = "NO" ENTONCES
IR al paso 4
DE OTRA FORMA
IR al paso 1
4. X
En donde C es el cuerpo del ciclo que será ejecutado un número indeterminado de veces, X es el
conjunto de acciones que suceden al ciclo, y a la variable mas$ el usuario le dará un valor de SÍ o de
NO, dependiendo de si se desea realizar otra iteración o terminar con la ejecución del ciclo.
El diagrama de flujo correspondiente es el que se muestra en la figura 4.28.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
103
Figura 4.28
En donde se podrá observar que el flujo del diagrama sale del ciclo hasta el momento en que la
variable mas$ tome un valor de "NO" y debido a que no se sabe cuándo ocurrirá esto, se le llama
ciclo con un número indeterminado de iteraciones.
Tipos de problemas repetitivos
Los Ciclos se emplean en los problemas repetitivos y, dependiendo de cómo sea necesario usar los
ciclos, se clasifican en:
a)
b)
Problemas repetitivos simples
Problemas repetitivos compuestos
Los problemas repetitivos simples son aquellos en los que se usa un solo ciclo, mientras que los
problemas repetitivos compuestos emplean varios de ellos.
3a) Problemas repetitivos simples
3a.l) Número determinado de iteraciones
Son problemas en que para su solución se requiere usar un solo ciclo, en el que su número de
iteraciones es un dato conocido, que se puede obtener de la definición del problema, o bien como
dato de entrada.
104
PARTE II. LÓGICA COMPUTAC1ONAL
Problemas resueltos
PROBLEMA 1
Calcular el promedio de calificaciones parciales de cada alumno de un grupo de cinco, sabiendo que
existen tres periodos parciales.
Paso 1: Definición del problema:
Igual a la redacción del problema.
Solución 1
Paso 2: Planeación de la solución:
Dado que para cada alumno se efectuarán las mismas acciones, se puede determinar que es necesario
utilizar un ciclo. Como en la definición del problema se plantea que son cinco alumnos se puede
concluir que el número de iteraciones está determinado y es de cinco. Por lo tanto, el ciclo que le
corresponde es el siguiente:
1. i ← 1
2. SI i > n ENTONCES
IR al paso 3
DE OTRA FORMA
C
i←i+1
IR al paso 2
X
3.
Sin embargo, como sabemos que el número de iteraciones es de cinco, podemos sustituir este valor
en lugar de la variable n. Asimismo, como en cada iteración se procesará la calificación de cada
alumno, sustituiremos ALUMNO como nombre del cuerpo del ciclo en lugar de C.
1. i ← 1
2. SI i > 5 ENTONCES
IR al paso 3
DE OTRA FORMA
ALUMNO
i←i+1
IR al paso 2
3. X
El proceso ALUMNO, estará compuesto de las siguientes acciones:
• Pedir los valores de las 3 calificaciones parciales.
• Aplicar la fórmula:
promedio = ( calificación 1 + calificación2 + calificación3) / 3
• Desplegar el resultado obtenido.
El proceso X corresponderá a la acción de terminar, ya que no hay acciones posteriores al ciclo.
Una vez terminada la serie de acciones necesarias para cada alumno es importante verificar que el
valor del contador no exceda al número de iteraciones, es decir, verificar si el contador todavía no
CAPÍTULO 4.
TIPOS DE PROBLEMAS
105
es mayor que 5. Si esto ocurriera significaría que no se ha terminado de procesar a todos los alumnos
y sería necesario incrementar el contador en uno y repetir el proceso ALUMNO para el alumno
siguiente. En caso contrario el proceso repetitivo se habrá terminado.
SALIDAS: promedio de cada alumno
ENTRADAS: calificación 1, calificación2 y calificación3 de cada alumno
DATOS ADICIONALES: Ninguno
SOLUCIÓN: Ver algoritmo
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
1
el
c2
c3
P
a
a
a
a
a
contador del numero de ciclos
calificación parcial 1
calificación parcial 2
calificación parcial 3
promedio
1. i← 1
2. SI i > 5 ENTONCES
IR al paso 3
DE OTRA FORMA
ALUMNO
i←i+1
IR al paso 2
3. FIN
1.
2.
3.
4.
El proceso ALUMNO constará de las siguientes acciones:
PEDIR cl,c2,c3
p ← (cl + c2 + c3 ) / 3
DESPLEGAR p
FINP
Nótese que las variables que se utilizan para obtener el promedio de todos los alumnos son las
mismas, y esto no ocasiona ningún problema, pues al calcular el promedio de un alumno, éste
inmediatamente se despliega, con lo que se cumple lo necesario para ese alumno. Cuando se procesa
el promedio del alumno siguiente los datos del alumno anterior ya no se necesitan: entonces no afecta
de ningún modo usar las mismas variables para resolver el problema.
Paso 4. Diagrama de flujo (véanse Figs. 4.29 y 4.30):
Hay que notar que este problema requirió del uso de un ciclo con un número determinado de
iteraciones, la que a su vez requirió de una estructura secuencial, en este caso los bloques que
componen al proceso ALUMNO.
106
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.29
Figura 4.30
CAPÍTULO 4.
TIPOS DE PROBLEMAS
107
Prueba 1
i← 1
Ejecuta ALUMNO, debido a que el valor de i no es mayor que 5
cl ←8
c2←9
c3←9
p ← 8.66
Termina ALUMNO e incrementa el valor de i en 1.
i← 2
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5
cl←7
c2←5
c3←6
p←6
Termina ALUMNO e incrementa el valor de i en 1.
i← 3
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5
cl←9
c2← 10
c3←6
p ← 8.33
Termina ALUMNO e incrementa el valor de i en 1.
i← 4
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5
cl← 10
c2←9
c3← 10
p ← 9.66
Termina ALUMNO e incrementa el valor de i en 1.
i← 5
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5
cl←8
c2←7
c3←8
p ←7.66
Termina ALUMNO e incrementa el valor de i en 1.
i←6
Debido a que el valor de i ya es mayor que 5, termina el ciclo y ejecuta FIN.
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad.
108
PARTE I I . LÓGICA COMPUTACIONAL
Solución 2
Paso 2. Planeación de la solución:
Resolveremos ahora el problema sin hacer uso de ciclos para justificar su gran utilidad.
Primero será necesario conocer las tres calificaciones parciales del alumno 1, qué serán las entradas
para encontrar el promedio de este alumno.
Posteriormente podremos aplicar la fórmula para calcular el promedio:
promedio = ( calificación 1 + calificación2 + calificación3 ) / 3
Para continuar con los demás alumnos, la secuencia sería exactamente la misma que para el alumno
1.
SALIDAS: promedio de cada alumno
ENTRADAS: calificación 1, calificación2, calificación3 de cada alumno
DATOS ADICIONALES: Ninguno
SOLUCIÓN: Por cada alumno aplicar la fórmula:
promedio = (calificación 1 + calificación2 + calificación3 ) / 3
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
c1
c2
c3
p
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
a
a
a
a
calificación 1
calificación 2
calificación 3
promedio
PEDIR cl,c2,c3
p ← (c1 + c2 + c3) / 3
DESPLEGAR p
PEDIR c1,c2,c3
p ← (c1 + c2 + c3) / 3
DESPLEGAR p
PEDIR cl,c2,c3
p ← (c1 + c2 + c3) / 3
DESPLEGAR p
PEDIR cl,c2,c3
p←(cl + c2 + c3)/3
DESPLEGAR p
PEDIR cl,c2,c3
p ← (c1 + c2 + c3) / 3
15. DESPLEGAR p
Al resolver así el problema, el trabajo del programador es más arduo que con la solución 1.
Paso 4. Diagrama de flujo (véanse Fig. 4.31):
Prueba I
c1←8
CAPÍTULO 4.
Figura 4.31
TIPOS DE PROBLEMAS
109
110
PARTE II. LÓGICA COMPUTACIONAL
c2←9
c3←9
p ← 8.66
cl←7
c2←5
c3←6
p←6
c1←9
c2← 10
c3←6
p←8.33
c1← 10
c2←9
c3← 10
p ← 9.66
cl←8
c2←7
c3←8
p ← 7.66
Ejercicio: Realizar al menos otra prueba a este diagrama de flujo para verificar su funcionalidad.
PROBLEMA 2
Una compañía de seguros tiene contratados a n vendedores. Cada uno hace tres ventas a la semana.
Su política de pagos es que un vendedor recibe un sueldo base, y 10% extra por comisiones de sus
ventas. El gerente de su compañía desea saber cuánto dinero obtendrá en la semana cada vendedor
por concepto de comisiones por las tres ventas realizadas, y cuánto tomando en cuenta su sueldo base
y sus comisiones.
Paso 1. Definición del problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
Dado que para cada uno de los n vendedores se efectuarán las mismas acciones, se puede determinar
que es necesario utilizar un ciclo. Como en la definición del problema se plantea que son n
vendedores, se puede concluir que el número de iteraciones está determinado ya que el número de
vendedores se puede pedir como dato de entrada. Por lo tanto, el ciclo que le corresponde es el
siguiente:
1.
2.
i ←1
SI i > n ENTONCES
IR al paso 3
DE OTRA FORMA
VENDEDOR
i←i+1
CAPÍTULO 4.
TIPOS DE PROBLEMAS
111
IR al paso 2
3.X
Por otra parte, para cada uno de los n vendedores se realizará el proceso VENDEDOR, que estará
compuesto de las siguientes acciones:
—Pedir el monto de las 3 ventas realizadas y el sueldo base.
—Aplicar la fórmula:
total de ventas = venta 1 + venta2 + venta3
—Aplicar la fórmula:
comisión = total de ventas x 0.1
—Aplicar la fórmula:
total a recibir = sueldo base + comisión
—Desplegar comisión y total a recibir
El proceso X corresponderá a la acción de terminar, pues no hay acciones posteriores.
Una vez terminada la serie de acciones necesarias para cada vendedor es importante verificar el
valor del contador, es decir, si el contador todavía no es mayor que n, significa que no se ha terminado
de procesar a los n vendedores y será necesario incrementar el contador en uno y repetir el proceso
VENDEDOR para el siguiente. En caso contrario el ciclo se habrá terminado. SALIDAS: comisión
y total a recibir por cada vendedor
ENTRADAS: número de vendedores, sueldo base, ventas 1, ventas2 y ventas3 de cada vendedor.
DATOS ADICIONALES: La comisión de cada vendedor equivale al 10% de las ventas semanales.
SOLUCIÓN: Ver algoritmo.
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
n a número de vendedores
i
sb
vi
v
v
tv
c
a variable contador de vendedores
a sueldo base
a ventas 1
a ventas 2
a ventas 3
a total de ventas
a comisión
tr a total a recibir
1. PEDIR n
2. i ← 1
3. SI i > n ENTONCES
IR al paso 4
112
PARTE II. LÓGICA COMPUTACIONAL
DE OTRA FORMA
VENDEDOR
i←i + 1
IR al paso 3
4. FIN
Proceso VENDEDOR:
1.
2.
3.
4.
5.
PEDIR sb, v1, v2,
tv ← v1 + v2 + v3
c ← tv * 0.1
tr ← sb + c
DESPLEGAR c, tr
6 FINP
Nótese que las variables que se utilizan para todos los vendedores son las mismas, y esto no
ocasiona ningún problema pues al calcular comisión y total a recibir dé un vendedor, inmediatamente
se despliega. Cuando se procesa lo del vendedor siguiente los datos del vendedor anterior ya no se
necesitan, por lo que usar las mismas variables no afectó de ninguna manera para resolver el problema.
Paso 4. Diagrama de flujo (véanse Figs. 4.32 y 4.33):
Al igual que la solución 1 del problema anterior, requerimos en este problema de un ciclo con un
número determinado de iteraciones, que necesitó a su vez de una estructura secuencial, dada por el
proceso VENDEDOR.
Prueba I
n←3
i← 1
Ejecuta VENDEDOR pues el valor de i no es mayor que el valor de n.
sb ← 3000
v1 ← 10 000
v2 ←20 000
v3 ←17 000
tv ← 47 000
c ← 4700
tr ←7700
Imprime 4700, que es la comisión que obtuvo el vendedor, y 7700, que es lo que éste va a recibir
como pago por su salario base y su comisión.
Termina VENDEDOR e incrementa el valor de i en 1.
i←2
Ejecuta VENDEDOR debido a que el valor de i no es mayor que el valor de n.
sb ← 4000
v1 ← 45 000
v2 ← 32 000
CAPÍTULO 4.
Figura 4.32
Figura 4.33
TIPOS DE PROBLEMAS
113
114
PARTE II. LÓGICA COMPUTACIONAL
v3 ← 33 000
tv← 110 000
c ← 11 000
tr ← 15 000
Imprime el valor de c y tr.
Termina VENDEDOR e incrementa el valor de i en 1.ñ
i← 3
Ejecuta VENDEDOR debido a que el valor de i no es mayor que el valor de n.
sb ← 2500
v1 ←15 000
v2 ← 20 000
v3 ← 10 000
tv ← 45 000
c ← 4500
tr ← 7000
Imprime el valor de c y tr.
Termina VENDEDOR e incrementa el valor de i en 1.
i←4
Ejecuta FIN debido a que el valor de i es mayor que el de n.
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad.
PROBLEMA 3
En una empresa se requiere calcular el salario semanal de cada uno de los n obreros que laboran en
ella. El salario se obtiene de la siguiente manera:
— Si el obrero trabaja 40 horas o menos se le paga $4 por hora.
—Si el obrero trabaja más de 40 horas se le paga $4 por cada una de las primeras 40 horas y $6
por cada hora extra. Paso 1.
Definición del problema: Igual a la
redacción del problema. Paso 2.
Planeación de la solución:
Debido a que en la definición del problema se plantea que son n obreros y para cada uno las acciones
que se efectuarán son las mismas, se puede concluir que es necesario un ciclo con un número de
iteraciones determinado, pues el número de obreros se puede pedir como dato de entrada. Por lo tanto,
el ciclo que le corresponde es el siguiente:
1. i ← 1
2. SI i > n ENTONCES
IR al paso 3
DE OTRA FORMA
OBRERO
CAPÍTULO 4.
TIPOS DE PROBLEMAS
115
i ← i+ 1
IR al paso 2
3. X
Por otra parte, para cada uno de los n obreros se efectuará el proceso OBRERO, el cual estará
compuesto de las siguientes acciones:
—Pedir el número de horas trabajadas
—Determinar el salario del obrero utilizando la siguiente condicional: SI
horas trabajadas > 40 ENTONCES
horas extras = horas trabajadas - 40
salario = 40 x 4 + horas extras x 6
DE OTRA FORMA
salario = horas trabajadas x 4
—Desplegar el salario
El proceso X corresponderá a la acción de terminar, pues no hay acciones posteriores.
SALIDAS: salario semanal
ENTRADAS: número de obreros, horas trabajadas de cada obrero
DATOS ADICIONALES:
— Si el obrero trabaja 40 horas o menos se le paga $4 por hora.
—Si el obrero trabaja más de 40 horas se le paga $4 por cada una de las primeras 40 horas y $6
por cada hora extra.
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
n a numero de obreros
i
ht
he
s
a
a
a
a
variable contador de obreros
horas trabajadas
horas extras
salario
1. PEDIR n
2. i← 1
3. SI i> n ENTONCES
IR al paso 4
DE OTRA FORMA
OBRERO
i←i+1
IR al paso 3
4. FIN
116
PARTE II. LÓGICA COMPUTACIONAL
Proceso OBRERO:
1. PEDIR ht
2. SI ht > 40 ENTONCES
h e← h t - 40
s←40*4 + he*6
DE OTRA FORMA
s ← ht * 4
3. DESPLEGAR s
4. FINP
Paso 4. Diagrama de flujo (Figs. 4.34 y 4.35).
Este problema requirió de una estructura selectiva simple, contenida dentro de un ciclo con un
número determinado de iteraciones.
Prueba 1
n←4
i←1
Ejecuta OBRERO debido a que el valor de i no es mayor que el valor de n.
ht←65
he←25
s←310
Imprime 310, que es el salario del primer obrero.
Termina OBRERO e incrementa el valor de i en 1.
i←2
Ejecuta OBRERO, debido a que el valor de i no es mayor que el valor de n.
ht←35
s← 140
Imprime 140, que es el salario del segundo obrero.
Termina OBRERO e incrementa el valor de i en 1.
i←3
Ejecuta OBRERO debido a que el valor de i no es mayor que el valor de n.
ht←40
s← 160
Imprime 160, que es el salario del tercer obrero.
Termina OBRERO e incrementa el valor de i en 1.
i←4
Ejecuta OBRERO debido a que el valor de i no es mayor que el valor de n.
ht←80
he←40
CAPÍTULO 4.
Figura 4.34
Figura 4.35
TIPOS DE PROBLEMAS
117
118
PARTE II. LÓGICA C0MPUTAC10NAL
S←400
Imprime 400, que es el salario del cuarto obrero.
Termina OBRERO e incrementa el valor de i en 1.
i← 5
Ejecuta FIN debido a que el valor de i es mayor que el de n.
Ejercicio: Realizar al menos dos pruebas más a este diagrama de flujo para verificar su
funcionalidad.
PROBLEMA 4
Determinar cuántos hombres y cuántas mujeres se encuentran en un grupo de n personas, suponiendo
que los datos son extraídos alumno por alumno.
Paso 1. Definición del problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
El proceso de preguntar el sexo de una persona y categorizarlo se repetirá para cada una de las n
personas, por lo que emplearemos un ciclo con un número determinado de iteraciones, pidiendo el
valor de n como dato de entrada. La estructura que se deberá emplear es:
1 i← 1
2 Sli > n ENTONCES
IR al paso 3
DE OTRA FORMA
PERSONA
i←i + 1
IR al paso 2
3 X
Por otra parte, será necesario utilizar dos variables una para hombres y otra para mujeres, que nos
ayuden a realizar el conteo de las personas. Estas variables tomarán un valor inicial de cero, pues al
iniciar el conteo se considera que hay cero hombres y cero mujeres. Conforme se vayan encontrando
hombres la variable para contar hombres se irá incrementando de 1 en 1, y de la misma manera,
conforme se vayan encontrando mujeres. Antes de iniciar el proceso PERSONA se deberá poner el
valor de las variables que contarán hombres y mujeres en cero, de la siguiente manera:
—hombres = 0
— mujeres = 0
Además, para cada una de las n personas se realizará el proceso PERSONA, el cual estará
compuesto por las siguientes acciones:
CAPÍTULO 4.
TIPOS DE PROBLEMAS
119
—Pedir el sexo de la persona
— Si el sexo es masculino se sabrá que hay un hombre más en el grupo y para llevar este conteo
haremos uso de una fórmula como la siguiente:
hombres = hombres + 1
—Si el sexo es femenino se sabrá que hay una mujer más en el grupo y para llevar este conteo haremos
uso de una fórmula como la siguiente:
mujeres = mujeres + 1
El proceso X se realizará cuando se termine el conteo de todas las personas, es decir, cuando
termine de ejecutarse el ciclo y estará compuesto de la acción:
—Desplegar el número de mujeres y de hombres
SALIDAS: número de hombres y mujeres
ENTRADAS: número de personas, sexo de cada persona
DATOS ADICIONALES: Ninguno
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
i
s$
h
m
n
a
a
a
a
a
contador del número de ciclos
sexo de la persona
variable contador de hombres
variable contador de mujeres
número de ciclos
1.
2.
3.
4.
5.
PEDIR n
h←0
m←0
i← 1
SI i > n ENTONCES
IR al paso 6
DE OTRA FORMA
PERSONA
i←i + 1
IR al paso 5
6. DESPLEGAR h, m
Proceso PERSONA:
1. PEDIR s$
2. SI s$ = "MASCULINO" ENTONCES
120
PARTE II. LÓGICA COMPUTACIONAL
h←h + 1
DE OTRA FORMA
m← m+1
3. FINP
Paso 4. Diagrama de flujo (véanse Figs. 4.36 y 4.37).
En este problema requerimos de un ciclo con un número determinado de iteraciones que a su vez
requirió de una estructura selectiva simple para llegar a su solución.
Prueba 1
n ←6
i← 1
h←0
m←0
Ejecuta PERSONA, debido a que el valor de i no es mayor que 6.
s$ ← "MASCULINO"
h← 1
Termina PERSONA e incrementa el valor de i en 1.
i← 2
Ejecuta PERSONA debido a que el valor de i no es mayor que 6.
s$ ←"MASCULINO"
h←2
Termina PERSONA e incrementa el valor de i en 1.
i← 3
Ejecuta PERSONA debido a que el valor de i no es mayor que 6.
s$ ← "FEMENINO"
m←1
Termina PERSONA e incrementa el valor de i en 1.
i←4
Ejecuta PERSONA debido a que el valor de i no es mayor que 6.
s$ ← "FEMENINO"
m←2
Termina PERSONA e incrementa el valor de i en 1.
i← 5
Ejecuta PERSONA debido a que el valor de i no es mayor que 6.
s$ ← "MASCULINO"
h←3
Termina PERSONA e incrementa el valor de i en 1.
i← 6
CAPÍTULO 4.
Figura 4.36
Figura 4.37
TIPOS DE PROBLEMAS
121
122
PARTE II. LÓGICA COMPUTACIONAL
Ejecuta PERSONA debido a que el valor de i no es mayor que 6.
s$ ← "MASCULINO"
h←4
Termina PERSONA e incrementa el valor de i en 1.
i←7
Ejecuta DESPLEGAR h,m debido a que i es mayor que 6, con lo cual se desplegará 4 y 2, los
cuales son el número de hombres y mujeres del grupo, respectivamente.
Ejercicio: Realizar al menos dos pruebas más a este diagrama de flujo para verificar su
funcionalidad.
PROBLEMA 5
El Departamento de Seguridad Pública y Tránsito del D.F., desea saber, de los n autos que entran a
la ciudad de México, cuántos entran con calcomanía de cada color. Conociendo el último dígito de
la placa de cada automóvil se puede determinar el color de la calcomanía utilizando la siguiente
relación:
DÍGITO
1 o2
3o4
5o6
7o8
9oO
COLOR
amarilla
rosa
roja
verde
azul
Paso 1. Definición del problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
Cada auto que entre a la ciudad se clasificará según su dígito, por lo que se deberá utilizar un ciclo.
Asimismo el número de iteraciones está determinado ya que se puede pedir como dato de entrada,
por lo cual se utilizará un ciclo como el siguiente:
1 i← 1
2 SI i > n ENTONCES
IR al paso 3
DE OTRA FORMA
AUTO
i←i + 1
IR al paso 2
3 X
Por otra parte será necesario utilizar cinco variables, una para cada color de calcomanía, que nos
ayuden al conteo de los autos de cada color. Estas variables tomarán un valor inicial de cero, pues al
iniciar el conteo se considera que hay cero autos con calcomanía de cada color. Conforme se vayan
CAPÍTULO 4.
TIPOS DE PROBLEMAS
123
encontrando autos con calcomanía de cada color la variable para contar las calcomanías del color
encontrado se irá incrementando de 1 en 1. Así pues, antes de comenzar con el proceso AUTO se
deberá inicializar el valor de las variables que contarán autos de la siguiente manera:
—amarillas = 0
—rosas = 0
—rojas= 0
—verdes = 0
—azules = 0
Por otra parte, para cada uno de los n autos se realizará el proceso AUTO, que estará compuesto
de las siguientes acciones:
—Pedir el último dígito de la placa.
— Si el dígito es 1 o 2, se sabrá que hay un auto más con calcomanía amarilla y para llevar este conteo
haremos uso de una fórmula como la siguiente:
amarillas = amarillas + 1
— Si el dígito es 3 o 4 se sabrá que hay un auto más con calcomanía rosa y para llevar este conteo
usaremos una fórmula como la siguiente:
rosas = rosas + 1
— Si el dígito es 5 o 6 se sabrá que hay un auto más con calcomanía roja y para llevar este conteo
haremos uso de una fórmula como la siguiente:
rojas = rojas + 1
— Si el dígito es 7 o 8 se sabrá que hay un auto más con calcomanía verde y para llevar este conteo
haremos uso de una fórmula como la siguiente:
verdes = verdes + 1
— Si el dígito es 9 o 0 se sabrá que hay un auto más con calcomanía azul y para llevar este conteo
haremos uso de una fórmula como la siguiente:
azules = azules + 1
El proceso X se realizará cuando se termine el conteo de todos los autos, es decir, cuando termine
de ejecutarse el ciclo y estará compuesto de la acción:
— Desplegar el número de autos con calcolmanía de cada color.
SALIDAS: número de autos con calcomanía amarilla, número de autos con calcomanía rosa, número
de autos con calcomanía roja, número de autos con calcomanía verde, número de autos con calcomanía azul.
ENTRADAS: número de autos, último dígito de la placa de cada auto.
DATOS ADICIONALES: Ninguno
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
124
n a
i a
am a
rs a
rj a
ve a
az a
ud a
1
2
3
4
5
6
7
8
PARTE II. LÓGICA COMPUTACIONAL
número de autos
contador del número de iteraciones
variable contador de autos con calcomanía amarilla
variable contador de autos con calcomanía rosa
variable contador de autos con calcomanía roja
variable contador de autos con calcomanía verde
variable contador de autos con calcomanía azul
último dígito de la placa
PEDIR n
am ← 0
r s ←0
rj ←0
ve ← 0
az←0
i←1
SI i > n ENTONCES
IR al paso 9
DE OTRA FORMA
AUTO
i=i+1
IR al paso 8
9 DESPLEGAR am, rs, rrj,
. ve,
, az
Proceso AUTO:
1 PEDIR ud
2 SI ud = 1 OR ud = 2
ENTONCES
am ← am + 1
DE OTRA FORMA
SI ud = 3 OR ud = 4 ENTONCES
rs ← rs + 1
DE OTRA FORMA
SI ud = 5 OR ud = 6 ENTONCES
rj ← rj + 1
DE OTRA FORMA
SI ud = 7 OR ud = 8 ENTONCES
ve ← ve + 1
DE OTRA FORMA
SI ud = 9 OR ud = 0 ENTONCES
az ← az + 1
DE OTRA FORMA
DESPLEGAR "Dígito erróneo"
i ←i -1
3. FINP
Paso 4. Diagrama de flujo (vánse Figs. 4.38 y 4.39).
CAPÍTULO 4.
TIPOS DE PROBLEMAS
125
126
PARTE I I . LÓGICA COMPUTACIONAL
Nos habremos percatado de que en este problema se usó una estructura selectiva compuesta
contenida en un ciclo con un número determinado de iteraciones.
Prueba 1
n← 10
i←1
am ← 0
rs ← 0
rj ← 0
ve ← 0
az← 0
Ejecuta AUTO debido a que el valor de i no es mayor que 10.
u d ←3
rs ← 1
Termina AUTO e incrementa el valor de i en 1.
i ←2
Ejecuta AUTO debido a que el valor de i no es mayor que 10.
ud← 1
am ← 1
Termina AUTO e incrementa el valor de i en 1.
i ←3
Ejecuta AUTO debido a que el valor de i no es mayor que 10.
ud ← 4
rs ← 2
Termina AUTO e incrementa el valor de i en 1.
i ←4
Ejecuta AUTO debido a que el valor de i no es mayor que 10.
ud←9
az ← 1
Termina AUTO e incrementa el valor de i en 1.
i ←5
Ejecuta AUTO debido a que el valor de i no es mayor que 10.
ud←8
ve ← 1
Termina AUTO e incrementa el valor de i en 1.
i ←6
jecuta AUTO debido a que el valor de i no es mayor que 10.
ud ← 4
rs ← 3
Termina AUTO e incrementa el valor de i en 1.
i ←7
CAPÍTULO 4.
TIPOS DE PROBLEMAS
127
Ejecuta AUTO debido a que el valor de i no es mayor que 10.
ud←0
az ← 2
Termina AUTO e incrementa el valor de i en 1.
i ←8
Ejecuta AUTO debido a que el valor de i no es mayor que 10.
ud←23
Despliega "dígito erróneo" y ejecuta AUTO con el mismo valor de i, ya que éste se decrementa y
luego se incrementa:
i ←7
i ←8
d←2
am ← 2
Termina AUTO e incrementa el valor de i en 1.
i ←9
Ejecuta AUTO debido a que el valor de i no es mayor que 10.
ud←3
rs ← 4
Termina AUTO e incrementa el valor de i en 1.
i← 10
Ejecuta AUTO debido a que el valor de i no es mayor que 10.
ud ←9
az←3
Termina AUTO e incrementa el valor de i en 1.
i← 11
Ejecuta DESPLEGAR am,rs,rj,ve,az cuyos valores son 2,4,0,1,3 debido a que i es mayor que 10.
Ejercicio: Realizar al menos dos pruebas más a este diagrama de flujo para verificar su
funcionalidad.
PROBLEMA 6
Obtener el promedio de calificaciones de un grupo de n alumnos.
Paso 1. Definición del problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
En un grupo es fácilmente determinable el número de alumnos que lo componen, así que podemos
128
PARTE II. LÓGICA COMPUTACIONAL
asumir que el número de iteraciones que requeriremos para nuestro ciclo es determinable y puede ser
pedido como dato de entrada.
Para poder obtener este promedio necesitamos saber la calificación de cada alumno, sumarlas y
dividir esta suma entre el valor n.
Para obtener la suma de las calificaciones tendremos que usar la siguiente expresión:
suma ← suma + calificación
Lo cual significa que el valor de la variable calificación se sumará al valor de la variable suma y
el resultado quedará nuevamente en la variable suma. Al paso de las iteraciones, esta expresión irá
acumulando las calificaciones en la variable suma, por lo que a la variable suma se le llamará
acumulador.
DEFINICIÓN. Un acumulador es una variable que suma sobre sí misma un conjunto de valores
para de esta manera tener la suma de todos ellos en una sola variable.
El formato general de un acumulador es:
acumulador ← acumulador + variable
Los acumuladores son frecuentemente usados en los ciclos cuando el problema requiera ir
acumulando valores obtenidos en las iteraciones.
Nótese que las expresiones:
suma ← suma + calificación
y
i←i+i
tienen similitud en que un valor es sumado a una variable cuyo resultado quedará en la misma variable.
Sabemos que la variable i es un contador porque así lo hemos manejado para contar las
iteraciones en un ciclo.
La diferencia entre un contador y un acumulador es que mientras el primero va aumentando
de uno en uno, el acumulador va aumentando en una cantidad variable.
Como antes de sumar la primera calificación no se ha sumado nada, el valor inicial del acumulador
suma debe ser de 0.
Volviendo al problema, una vez que obtengamos la suma de las calificaciones al terminar el ciclo
aplicaremos la fórmula:
promedio = suma / n
Definamos ahora nuestros datos:
SALIDAS: promedio del grupo
CAPÍTULO 4.
TIPOS DE PROBLEMAS
129
ENTRADAS: número de alumnos, calificación de cada alumno
DATOS ADICIONALES: ninguno
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
c a calificación s
a suma
p a promedio
1.
2.
3.
4.
5.
6.
PEDIR n
s←0
i← 1
SI i > n ENTONCES
IR al paso 5
DE OTRA FORMA
ALUMNO i← i + 1
IR al paso 4
p←s/n
DESPLEGAR p
Proceso ALUMNO:
1.
2.
3.
Pediré
s←s+c
FINP
Paso 4. Diagrama de flujo (véanse Figs. 4.40 y 4.41).
En este problema ocupamos un ciclo con un número determinado de iteraciones que contiene una
estructura de tipo secuencial.
Efectuemos ahora una prueba a nuestro diagrama suponiendo que existe un grupo de cinco alumnos
cuyas calificaciones son: 7, 5, 8, 10 y 10.
Prueba:
n←5
s←0
i← 1
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5.
c ←7
s ←7
Termina ALUMNO e incrementa el valor de i en 1.
i←2
130
PARTE 11. LÓGICA COMPUTACIONAL
Figura 4.41
Figura 4.40
I
CAPÍTULO 4.
TIPOS DE PROBLEMAS
131
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5.
c←5
s← 12
Termina ALUMNO e incrementa el valor de i en 1.
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5.
c←8
s←20
Termina ALUMNO e incrementa el valor de i en 1.
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5.
c← 10
s←30
Termina ALUMNO e incrementa el valor de i en 1.
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5.
c← 10
s←40
Termina ALUMNO e incrementa el valor de i en 1.
Como i > 6 ejecuta:
p← 8
y finalmente ejecuta DESPLEGAR p, por lo cual despliega el valor 8, el cual es el promedio de 7, 5,
8, 10 y 10.
En esta prueba se puede notar cómo antes del ciclo, el acumulador s tuvo que inicializarse con el
valor cero, para que en cada una de las iteraciones se fueran acumulando correctamente los valores de la
variable c.
Ejercicio: Realizar al menos otra prueba a este diagrama de flujo para verificar su funcionalidad.
PROBLEMA 7
Una persona desea invertir su dinero en un banco, el cual le otorga un 2% de interés. ¿Cuál será la
cantidad de dinero que esta persona tendrá al cabo de un año si la ganancia de cada mes es reinvertida?
Paso 1. Definición del problema:
Igual a la redacción del problema.
Solución 1
Paso 2. Planeación de la solución:
Este problema puede requerir del uso de un ciclo con un número determinado de iteraciones, pues el
proceso de invertir, obtener una ganancia y reinvertir los intereses, se repite mes con mes durante los
12 que conforman un año.
132
PARTE II. LÓGICA COMPUTACIONAL
La cantidad invertida en el primer mes, más la ganancia obtenida por el interés de ese mismo mes
se sumarán y constituirán la nueva cantidad invertida para el segundo mes, y así sucesivamente con
los meses posteriores. Esto se expresa de la siguiente manera:
ganancia = cantidad a invertir x 0.02
y
cantidad a invertir = cantidad a invertir + ganancia
Podemos observar que la función de la variable cantidad a invertir es la de acumular la inversión
con las ganancias de los 12 meses, por lo que esta variable es un acumulador. Evidentemente el valor
inicial de esta variable será la cantidad a invertir en el primer mes, por lo que tendrá que ser pedido
como un valor de entrada al principio.
Al final, el valor acumulado de cantidad a invertir será el resultado de invertir 12 meses una
cantidad a invertir inicial.
SALIDAS: cantidad a invertir final
ENTRADAS: cantidad a invertir inicial
DATOS ADICIONALES: Se otorga una ganancia mensual del 2% sobre el monto de la inversión.
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
i a contador de meses
g a ganancia
c a cantidad a invertir
1. PEDIR c
2. i← 1
3. SI i > 12 ENTONCES
IR al paso 4
DE OTRA FORMA
MES
i←i + 1
IR al paso 2
4. DESPLEGAR c
Proceso MES:
1. g ← c * 0.02
2. c ← c + g
3. FINP
Puso 4. Diagrama de flujo (véanse Figs. 4.42 y 4.43).
CAPÍTULO 4.
Figura 4.42
Figura 4.43
TIPOS DE PROBLEMAS
133
134
PARTE II. LÓGICA C0MPUTAC10NAL
Nótese que mientras transcurren las 12 iteraciones el valor de la variable c que se emplea en la
fórmula g ← c * 0.02 es el valor acumulado que obtuvo en la iteración anterior. Al final se imprime
la cantidad a invertir en el décimo tercer mes, la cual ya no fue reinvertida, pero constituye el valor
final de los 12 meses anteriores.
El problema requirió de una estructura secuencial contenida en un ciclo con un número determinado de iteraciones.
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo para verificar su
funcionalidad.
Solución 2
Paso 2. Planeación de la solución:
Las dos fórmulas:
ganancia = cantidad a invertir x 0.02
y
cantidad a invertir = cantidad a invertir + ganancia
Pueden ser sustituidas por la fórmula:
cantidad a invertir = cantidad a invertir x 1.02
por lo que el algoritmo y el diagrama de flujo de la solución anterior quedarían:
Paso 3. Algoritmo:
1. PEDIR c
2. i← 1
3. SI i > 12 ENTONCES
DESPLEGAR c
IR al paso 4
DE OTRA FORMA MES
i←i + 1
IR al paso 2
4. FIN
Proceso MES:
1. c←c*1.02
2. FINP
Paso 4. Diagrama de flujo (véase Fig. 4.44):
CAPÍTULO 4.
TIPOS DE PROBLEMAS
135
136
PARTE II. LÓGICA COMPUTACIONAL
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad.
Solución 3
Paso 2. Planeación de la solución:
Basándonos en la solución anterior, veamos que es lo que va ocurriendo con la variable c:
primera iteración
segunda iteración
c ← c x 1.02
c ← c x 1.02
decimasegunda iteración
c ← c x 1.02
Como se vio en la solución anterior, el valor que da como resultado la primera iteración es
empleado en la segunda iteración para efectuar la multiplicación, y así sucesivamente con las diez
iteraciones restantes. Esto lo podemos resumir de la siguiente manera:
c←c
x
1.02x1.02x...x1.02 12
12 veces
Multiplicar varias veces una cantidad por sí misma, equivale a la operación de potenciación, por
lo que:
1.02x1.02x...x1.02 = 1.0212
12 veces
por lo que otra solución para este problema sería:
Paso 3. Algoritmo:
1.
2.
3.
PEDIR c
c←c*1.02 ^ 12
DESPLEGAR c
Paso 4. Diagrama de flujo (véase Fig. 4.45).
Así, se habrá notado que una mejor planeación del problema lleva a una mejor solución. Se ha
simplificado el problema de repetitivo a simplemente secuencial.
Ejercicio: Realizar al menos una prueba a este diagrama de flujo para verificar su funcionalidad.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
137
Figura 4.45
PROBLEMA 8
Calcular el promedio de edades de hombres, mujeres y de todo un grupo de n alumnos.
Paso 1. Definición del problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
En primer lugar debemos pedir las n edades del grupo, por lo cual emplearemos un ciclo con «
iteraciones, en donde el valor de n será pedido como dato de entrada.
En cada ciclo deberemos pedir la edad y sexo de cada alumno. Para determinar los promedios
pedidos emplearemos las siguientes fórmulas:
promedio de hombres = suma de edades de hombres / número de hombres
promedio de mujeres = suma de edades de mujeres / número de mujeres
promedio de grupo = (suma de edades de hombres + suma de edades de mujeres) / n
Por lo cual el problema requerirá de un acumulador de las edades de los hombres, un acumulador
de las edades de las mujeres, un contador del número de hombres y un contador del número de mujeres
que tiene el grupo. Acumular edades y contar alumnos de un sexo en especial quedará determinado
por la condicional:
SI sexo = "MASCULINO" ENTONCES
Acumular edad de la persona en acumulador de hombres
Sumar uno al contador del número de hombres
DE OTRA FORMA
Acumular edad de la persona en acumulador de mujeres
Sumar uno al contador del número de mujeres
SALIDAS: promedio de edades de hombres,
138
PARTE II. LÓGICA COMPUTACIONAL
promedio de edades de mujeres,
promedio del grupo
ENTRADAS: número de alumnos,
edad y sexo de cada uno de los alumnos
DATOS ADICIONALES: ninguno
Este problema es una modificación al problema resuelto 4, pero con un mayor grado de complejidad pues incluye, además de los dos contadores, dos acumuladores.
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
n
i
e
s$
seh
sem
nh
nm
peh
pem
Pg
a
a
a
a
a
a
a
a
a
a
a
número de alumnos
contador del número de
edad del alumno
sexo del alumno
suma de edades de hombres
suma de edades de mujeres
número de hombres
número de mujeres
promedio de edades de hombres
promedio de edades de mujeres
promedio del grupo
1.
Pedir n
2.
3.
4.
5.
6.
7.
nh
nm
seh
sem
i←
SI i
8.
9.
10.
←0
←0
←0
←0
1
> n ENTONCES
IR al paso 8
DE OTRA FORMA
ALUMNO
i←i + 1
IR al paso 7
peh ← seh / nh
pem ← sem / nm
pg
← (seh + sem) / n
11. Desplegar peh, pem, pg
Proceso ALUMNO:
1.
2.
Pedir e, s$
Si s$ = "MASCULINO" ENTONCES
CAPÍTULO 4.
TIPOS DE PROBLEMAS
139
nh ← nh + 1
seh ←seh + e
DE OTRA FORMA
nm ← nm + 1
sem ← sem + e
3. FINP
Paso 4. Diagrama de flujo (véanse Figs. 4.46 y 4.47).
Véase que dentro del ciclo se encuentra una estructura selectiva simple, igual a la del problema
resuelto 4, sólo que esta vez se usaron acumuladores.
Efectuemos ahora una prueba a nuestro diagrama suponiendo que existe un grupo de cinco
alumnos.
Prueba:
n←5
nh ←0
nm ← 0
seh←0
sem ← 0
i← 1
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5.
e← 18
s$ ← "FEMENINO"
Como s$ no es igual a "MASCULINO" ejecuta:
nm ← 1
sem ← 18
i←2
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5.
e← 17
s$ ← "FEMENINO"
Como s$ no es igual a "MASCULINO" ejecuta:
nm ← 2
sem ← 35
i←3
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5.
e←20
s$ ← "MASCULINO"
140
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.46
CAPÍTULO 4.
Figura 4.47
Como s$ es igual a "MASCULINO" ejecuta:
nh←1
seh ← 20
i ←4
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5.
e← 19
s$ ← "FEMENINO"
Como s$ no es igual a "MASCULINO" ejecuta:
nm ← 3
sem ← 54
i ←5
TIPOS DE PROBLEMAS
141
142
PARTE II. LÓCICA C0MPUTAC10NAL
Ejecuta ALUMNO debido a que el valor de i no es mayor que 5.
e←24
s$ ← "MASCULINO"
Como s$ es igual a "MASCULINO" ejecuta:
nh←2
seh ← 44
i← 6
Como i > 6 ejecuta:
peh ← 22
pem ← 18
pg←20
Ejercicio: A continuación se proporciona otro diagrama de flujo para solucionar este mismo
problema (véanse Figs. 4.48 y 4.49). Encuentre la diferencia básica entre ambos diagramas e
indique: a) cuál es más entendible y b) cuál es el más eficiente en la ejecución.
PROBLEMA 9
Una persona debe realizar un muestreo con 100 personas para determinar el promedio de peso de los
niños, jóvenes, adultos y viejos que existen en su zona habitacional. Para ello, conforme encuentra a
las personas introduce los datos a su computadora, la cual mediante un programa las clasifica y
despliega los cuatro promedios que la .persona requiere.
Se determinan las categorías con base en la siguiente tabla:
categoría
Niños
Jóvenes
Adultos
Viejos
edad
0
13
30
60
- 12
-29
-59
- adelante
Paso 1. Definición del problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
Requeriremos en primer lugar un ciclo que ejecute exactamente 100 iteraciones, pues se procesarán
a 100 personas.
En cada iteración, para cada persona debemos preguntar su edad, para clasificar. Asimismo para cada
persona debemos pedir su peso y sumarlo al acumulador de pesos de su categoría. Al final del ciclo
aplicaremos las siguientes fórmulas:
promedio de peso de niños = suma de pesos de niños / número de niños
promedio de peso de jóvenes = suma de pesos de jóvenes/ número de jóvenes
CAPÍTULO 4.
Figura 4.48
TIPOS DE PROBLEMAS
143
144
PARTE II. LÓGICA COMPUTACIONAL
promedio de peso de adultos = suma de pesos de adultos / número de adultos
promedio de peso de viejos = suma de pesos de viejos / número de viejos
Por lo cual requeriremos de cuatro acumuladores para los pesos y de cuatro contadores para el
número de personas de cada categoría.
SALIDAS: promedio de peso de niños, promedio de peso de jóvenes, promedio de peso de adultos,
promedio de peso de viejos. ENTRADAS: edad y peso de cada persona DATOS ADICIONALES:
Categoría
Edad
Niños
Jóvenes
Adultos
Viejos
0-12
13-29
30-59
60 - adelante
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
i
e
P
nn
nj
na
nv
spn
spj
spa
spv
ppn
PPJ
ppa
ppv
a
a
a
a
a
a
a
a
a
a
a
a
a
a
contador del número de personas
edad de cada persona
peso de cada persona
número de niños
número de jóvenes
número de adultos
número de viejos
suma de pesos de niños
suma de pesos de jóvenes
suma de pesos de adultos
suma de pesos de viejos
promedio de pesos de niños
promedio de pesos de jóvenes
promedio de pesos de adultos
a
promedio de pesos de viejos
1.
nn ←0
2.
3.
4.
5.
6.
nj ← 0
na ← 0
nv ← 0
spn ← 0
Spj ← 0
CAPÍTULO 4.
7.
8.
9.
10.
11.
12.
13.
14.
15.
TIPOS DE PROBLEMAS
145
spa ← 0
spv ← 0
i← 1
SI i > 100 ENTONCES
IR al paso 11
DE OTRA FORMA
PERSONA
i←i + 1
IR al paso 10
ppn ← spn / nn
ppj←spj/nj
ppa ← spa / na
ppv ← spv / nv
DESPLEGAR ppn, ppj, ppa, ppv
Proceso PERSONA:
1.
2.
3.
PEDIR e, p
Si e < = 12 ENTONCES
nn ←nn + 1
spn ← spn + p
DE OTRA FORMA
Si e < = 29 ENTONCES
nj←nj+1
spj ←spj + p
DE OTRA FORMA
Si e < = 59 ENTONCES
na ← na + 1
spa ← spa + p
DE OTRA FORMA
nv ← nv + 1
spv ← spv + p
FINP
Paso 4. Diagrama de flujo (véanse Figs. 4.50 y 4.51):
Para resolver este problema se empleó un ciclo con un número determinado de iteraciones que
contiene, a su vez, una estructura de tipo selectivo compuesto.
A continuación se resolverá un par de problemas útiles para la solución de otros problemas más
complejos.
PROBLE MA 10
Encontrar el menor valor de un conjunto de n números dados.
Paso J. Definición de problema: Igual
a la redacción del problema.
146
PARTE I I . LÓGICA COMPUTACIONAL
Figura 4.50
CAPÍTULO 4.
Figura 4.51
TIPOS DE PROBLEMAS
147
148
PARTE I I . LÓGICA COMPUTACIONAL
Paso 2. Planeación de la solución:
Primero, el tener que pedir n números nos hace suponer que se deberá emplear un ciclo con n
iteraciones.
Para encontrar el menor valor se deberá partir de un número de referencia, el cual será el primero
de estos números. Éste deberá ser comparado con cada uno de los demás valores pedidos. Por cada
vez que alguno de estos números sea menor que el número de referencia, éste deberá ser ahora la
nueva referencia pues es el menor número hasta el momento. Cuando termine de ejecutarse el ciclo
el último valor de referencia será el número más pequeño.
SALIDAS: número más pequeño
ENTRADAS: n, número de referencia, números
DATOS ADICIONALES: ninguno
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
n
a
i
a
num a
r
a
1.
2.
3.
4.
número de ciclos
contador del número de ciclos
número
número de referencia
PEDIR n, r
i←2
SI i > n ENTONCES
IR al paso 4
DE OTRA FORMA
NUMERO i←i + 1
IR al paso 3
DESPLEGAR r
Proceso NUMERO:
1.
2.
3.
PEDIR num
SI num < r ENTONCES
r ← num
FINP
Paso 4. Diagrama de flujo (véanse Figs. 4.52 y 4.53).
Hay que hacer notar que el contador del ciclo empezó esta vez con el valor de 2. Esto se debe a
que antes del ciclo se pidió el primer número, que fue tomado como número de referencia; por lo
tanto el ciclo se ejecutará n - 1 iteraciones pidiendo y comparando el resto de los n - 1 números.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
Figura 4.52
Prueba:
Supongamos que queremos saber el menor de los siguientes números: 4, 17, -15, 8, 0
n← 5
r←4
i←2
Ejecuta NUMERO debido a que el valor de i no es mayor que 5.
num ← 17
Como num no es menor que r no ejecuta acción alguna.
149
150
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.53
i←3
Ejecuta NUMERO debido a que el valor de i no es mayor que 5.
num ←15
Como num es menor que r ejecuta:
r ← 15
i←4
Ejecuta NUMERO debido a que el valor de i no es mayor que 5.
num ← 8
Como num no es menor que r no ejecuta acción alguna.
i←5
Ejecuta NUMERO debido a que el valor de i no es mayor que 5.
num ←8
Como num no es menor que r no ejecuta acción alguna.
i←6
Como i > 6 imprime el valor de r que es -15, que es el menor de los números dados.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
151
Ejercicio: Realizar al menos una prueba más a este diagrama de flujo para verificar su
funcionalidad.
PROBLEMA 11
Encontrar el mayor valor de un conjunto de n números dados.
Paso 1. Definición de problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
Este problema se resolverá de una manera bastante similar al anterior, sólo que esta vez, para
encontrar el número mayor las comparaciones deben ser ahora buscando un número mayor que el
número de referencia.
SALIDAS: número más grande
ENTRADAS: n, número de referencia, números
DATOS ADICIONALES: ninguno
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
n
a
i
a
num a
r
a
número de ciclos
contador del número de ciclos
número
número de referencia
1. PEDIR n, r
2. i ← 2
3. SI i > n ENTONCES
IR al paso 4
DE OTRA FORMA
NUMERO
i←i + 1
IR al paso 3
4. Desplegar r
Proceso NUMERO:
1. PEDIR num
2. SI num > r ENTONCES
r ← num
3. FINP
Paso 4. Diagrama de flujo (véase Fig. 4.54).
152
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.54
CAPÍTULO 4.
TIPOS DE PROBLEMAS
153
Como en el problema anterior el contador del ciclo empezó con el valor de 2 ya el primer número,
que fue tomado como número de referencia, se compara con el resto de los n - 1 números.
Prueba:
Lo probaremos con los mismos valores del anterior problema: 4, 17, -15, 8, 0
n←5
r←4
i←2
Ejecuta NUMERO debido a que el valor de i no es mayor que 5.
num ← 17
Como num es mayor que r ejecuta:
r ← 17
i←3
Ejecuta NUMERO debido a que el valor de i no es mayor que 5.
num ← -15
Como num no es mayor que r no ejecuta acción alguna.
i←4
Ejecuta NUMERO debido a que el valor de i no es mayor que 5.
num ← 8
Como num no es mayor que r no ejecuta acción alguna.
i← 5
Ejecuta NUMERO debido a que el valor de i no es mayor que 5.
num ← 8
Como num no es mayor que r no ejecuta acción alguna.
i←6
Como i > 6 imprime el valor de r que es 17, que es el mayor de los números dados.
Ejercicio: Realizar al menos una prueba más a este diagrama de flujo para verificar su
funcionalidad.
154
PARTE II. LÓGICA C0MPUTAC10NAL
Problemas propuestos
1) La presión, volumen y temperatura de una masa de aire se relacionan por la fórmula:
masa =
2)
3)
4)
5)
presión x volumen
0.37 x (temperatura + 460)
Calcular el promedio de masas de aire de los neumáticos de n vehículos que están en compostura
en un servicio de alineación y balanceo. Los vehículos pueden ser motocicletas o automóviles.
Al cerrar un expendio de naranjas, 15 clientes que aún no han pagado recibirán un 15% de
descuento si compran más de 10 kilos. Determinar cuánto pagará cada cliente y cuánto percibirá
la tienda por esas compras.
Determinar la cantidad semanal de dinero que recibirá cada uno de los n obreros de una empresa.
Se sabe que cuando las horas que trabajó un obrero exceden de 40, el resto se convierte en horas
extras que se pagan al doble de una hora normal, cuando no exceden de 8; cuando las horas extras
exceden de 8 se pagan las primeras 8 al doble de lo que se paga por una hora normal y el resto
al triple.
Modificar el problema propuesto 3 para que se determine el total de dinero que la empresa tendrá
que pagar por concepto de pago de salarios a los n empleados que laboran en ella.
En una granja se requiere saber alguna información para determinar el precio de venta por cada
kilo de huevo. Es importante determinar el promedio de calidad de las n gallinas que hay en la
granja. La calidad de cada gallina se obtiene según la fórmula:
calidad =
peso de la gallina x altura de la gallina número
de huevos que pone
Finalmente para fijar el precio del kilo de huevo, se toma como base el siguiente cuadro:
Promedio total de calidad
Precio del kilo de huevo
mayor o igual que 15
mayor que 8 y menor que 15
menor o igual que 8
1.2 x promedio de calidad
1.00 x promedio de calidad
0.80 x promedio de calidad
6) En un centro de verificación de automóviles se desea saber el promedio de puntos contaminantes
de los primeros 25 automóviles que lleguen. Asimismo se desea saber los puntos contaminantes
del carro que menos contaminó y del que más contaminó.
7) En la Cámara de Diputados se levanta una encuesta con todos los integrantes con el fin de
determinar qué porcentaje de los n diputados está a favor del Tratado de Libre Comercio, qué
porcentaje está en contra y qué porcentaje se abstiene de opinar.
8) Un entrenador le ha propuesto a un atleta recorrer una ruta de cinco kilómetros durante 10 días,
para determinar si es apto para la prueba de 5 kilómetros o debe buscar otra especialidad. Para
considerarlo apto debe cumplir por lo menos una de las siguientes condiciones:
— Que en ninguna de las pruebas haga un tiempo mayor a 16 minutos.
— Que al menos en una de las pruebas realice un tiempo menor a 14 minutos y medio.
— Que su promedio de tiempos sea menor o igual a 15 minutos.
9) Para efectuar un muestreo que le indique porcentajes de marcas de automóviles, una persona se
CAPÍTULO 4.
TIPOS DE PROBLEMAS
155
sitúa a un lado de la carretera y clasifica los primeros 150 automóviles que pasen, según las
marcas "FOR", "CHE", "VOL", "CHR", "NIS" y "OTROS".
10) Un zoólogo pretende determinar el porcentaje de animales que hay en las siguientes tres
categorías de edades: de 0 a 1 año, de más de 1 año y menos de 3 y 3 o más años. El zoólogo
todavía no está seguro del animal que va a estudiar. Si se decide por elefantes sólo tomará una
muestra de 20 de ellos; si se decide por jirafas, tomará 15 muestras, y si son chimpancés tomará
40.
3a.2) Número indeterminado de iteraciones
Son problemas que para su solución se requiere usar un ciclo, en el que el número de iteraciones es
un dato desconocido y el proceso repetitivo termina hasta que el usuario lo indica.
Problemas resueltos
PROBLEMA 1
En una tienda de descuento las personas que van a pagar el importe de su compra llegan a la caja y
sacan una bolita de color, que les dirá qué descuento tendrán sobre el total de su compra. Determinar
la cantidad que pagará cada cliente desde que la tienda abre hasta que cierra. Se sabe que si el color
de la bolita es roja el cliente obtendrá un 40% de descuento; si es amarilla, un 25%, y si es blanca no
obtendrá descuento.
Paso 1. Definición del problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
En primer lugar podemos determinar que es necesario usar un ciclo, puesto que todos los clientes
hacen repetidamente lo mismo: escoger una bolita y obtener un descuento. También podemos deducir
que el número de clientes que se atenderán es indeterminado, pues no sabemos cuántos clientes van
a entrar a la tienda a lo largo del día; por lo tanto el número de iteraciones del ciclo es indeterminado;
entonces la estructura que le corresponde a este problema es:
1.
2.
3.
4.
CLIENTE
PEDIR mas$
SI mas$ = "NO" ENTONCES
IR al paso 4
DE OTRA FORMA
IR al paso 1
FIN
El proceso CLIENTE será el conjunto de acciones que resolverá la situación para cada cliente,
mientras que el ciclo repetirá el proceso CLIENTE hasta que ya no haya más clientes; por eso después
de cada ejecución se encuentra la entrada de una variable alfanumérica cuyo valor deberá ser "SÍ" o
"NO" y la condición que le precede llevará a ejecutar una vez más el ciclo o le dará término.
156
PARTE I I . LÓGICA COMPUTACIONAL
Por lo tanto, como el proceso CLIENTE resolverá la situación para uno solo de los clientes, éste
tendrá que evaluar la siguiente condicional:
SI color de la bolita = "ROJA"
total con descuento = total sin descuento x 0.6
DE OTRA FORMA
SI color de la bolita = "ROJA"
total con descuento = total sin descuento x 0.75
DE OTRA FORMA
total con descuento = total sin descuento
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
color$ a color de la bolita
tsd
a total sin descuento
tcd
a total con descuento
mas$ a variable que recibe un valor de "SÍ" o "NO"
dependiendo si hay más clientes o no
1.
2.
3.
CLIENTE
PEDIR mas$
SI mas$ = "NO" ENTONCES
IR al paso 4
DE OTRA FORMA
IR al paso 1
Proceso CLIENTE:
1.
2.
3.
Pedir color$, tsd
SI color$ = "ROJA" ENTONCES
tcd ← tsd * 0.6
DE OTRA FORMA
SI color$ = "AMARILLA" ENTONCES
tcd ← tsd * 0.75
DE OTRA FORMA
tcd ← tsd
FINP
Paso 4. Diagrama de flujo (véanse Figs. 4.55 y 4.56).
En este diagrama podemos observar una estructura selectiva compuesta dentro de un ciclo con un
número indeterminado de iteraciones.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
157
158
PARTE I I . LÓGICA COMPUTAC1ONAL
Prueba:
Al llegar la primera persona del día se ejecuta el proceso P:
color$ ← "AMARILLA"
tsd ← 300
Como la pelotita no fue roja, la primera condición es negativa y evalúa la segunda condición. Como
ésta es verdadera, se ejecuta:
tcd ←225
y se imprime el resultado, que es el 25% de descuento de 300
Termina el proceso P y pide la variable mas$ para saber si continúa la ejecución del ciclo para más
personas:
mas$ ← "SI"
Como sí hubo mas personas regresa a ejecutar el proceso P:
color$ ←"ROJA"
tsd ← 200
Por lo que ejecuta la parte verdadera de la primera condicional:
tcd ←120
e imprime este resultado.
mas$ ← "SI"
color$ ← "BLANCA"
tsd← 150
Ejecuta la parte falsa de la segunda condicional pues la pelota no es ni roja ni amarilla:
tcd ← 150
e imprime este resultado para este comprador que no obtuvo descuento.
Supongamos ahora que ya no hay más compradores y se vaya a cerrar la tienda.
mas$ ← "NO"
Al evaluar la condición de fin de ciclo, ésta resulta verdadera y termina de ejecutarse el ciclo y el
diagrama de flujo.
Ejercicio: Efectuar al menos una prueba más a este diagrama de flujo para verificar su
funcionalidad.
PROBLEMA 2
En un supermercado una ama de casa pone en su carrito los artículos que va tomando de los estantes.
La señora quiere asegurarse de que el cajero le cobre bien lo que ella ha comprado, por lo que cada
vez que toma un artículo distinto anota su precio junto con la cantidad de artículos iguales que ha
CAPÍTULO 4.
TIPOS DE PROBLEMAS
159
tomado y determina cuánto dinero gastará en ese artículo; a esto le suma lo que irá gastando en los
demás artículos, hasta que decide que ya tomó todo lo que necesitaba. Ayudarle a esta señora a obtener
el total de sus compras.
Paso 1. Definición del problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
El hecho de ir a un supermercado sin una idea fija de lo que se va a comprar nos hace suponer que al
entrar a él no sabemos el número exacto de artículos distintos que vayamos a comprar, por lo que
tendremos que usar un ciclo con un número indeterminado de iteraciones, como el siguiente:
1. ARTICULO
2. PEDIR mas$
3. SI mas$ = "NO" ENTONCES
IR al paso 4
DE OTRA FORMA
IR al paso 1
4. FIN
En cada ciclo debemos obtener un subtotal para el artículo que se acaba de comprar mediante la
siguiente fórmula:
subtotal = precio del artículo x número de artículos
Este subtotal lo debemos ir sumando a un total de manera que por cada artículo distinto que se compre,
se incremente este total, por lo que requeriremos del uso de un acumulador, que llamaremos total de
la compra, que antes de iniciar el ciclo debe empezar con el valor cero.
SALIDAS: total de la compra
ENTRADAS: precio, número de artículos para cada uno de los artículos distintos
DATOS ADICIONALES: ninguno
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
p
n
sb
t
a
a
a
a
precio de cada artículo diferente
número de artículos
subtotal por artículo distinto
total de la compra
1.
2.
3.
4.
t←0
ARTICULO
PEDIR mas$
SI mas$ = "NO" ENTONCES
IR al paso 5
160
PARTE 11. LÓGICA COMPUTAC1ONAL
DE OTRA FORMA
IR al paso 2
5. DESPLEGAR t
Proceso ARTICULO:
1 PEDIR p
2 sb ← p* n
3 t←t + sb
4 FINP
Paso 4. Diagrama de flujo (véanse Figs. 4.57 y 4. 58).
En este problema podremos notar que un ciclo con un número indeterminado de iteraciones, manda
ejecutar una estructura secuencial.
Prueba:
t←0
p← 10
n←4
sb←40
t ←40
mas$ ← “SI"
p←6
n←3
sb← 18
t ← 58
mas$ ← “SI"
p←22
n←5
sb← 110
t← 168
mas$ ← “SI"
p←6.5
n←2
sb← 13
t← 181
mas$ ← “NO”
El ciclo termina de ejecutarse e imprime 181, que es la cantidad total de dinero que la señora gastó
en la compra de sus artículos.
CAPÍTULO 4.
Figura 4.57
Figura 4.58
TIPOS DE PROBLEMAS
161
162
PARTE II. LÓGICA COMPUTACIONAL
Ejercicio: Efectuar al menos una prueba más a este diagrama de flujo para verificar su
funcionalidad.
PROBLEMA 3
Un teatro otorga descuentos según la edad del cliente. Determinar la cantidad de dinero que el teatro
deja de percibir por cada una de las categorías. Tomar en cuenta que los niños menores de 5 años no
pueden entrar al teatro y que existe un precio único en los asientos. Los descuentos se hacen tomando
en cuenta el siguiente cuadro:
categoría 1
categoría 2
categoría 3
categoría 4
categoría 5
Edad
5-14
15-19
20-45
46-65
66 - adelante
Descuento
35%
25%
10%
25%
35%
Paso 1. Definición del problema:
Igual a la redacción del problema
Paso 2. Planeación de la solución:
Emplearemos un ciclo con un número indeterminado de iteraciones ya que no tenemos manera de
saber cuántas personas entrarán en un teatro.
Asimismo requeriremos de 5 acumuladores para saber el total de dinero por concepto de descuentos
de cada categoría.
SALIDAS: total de dinero descontado en la categoría 1
total de dinero descontado en la categoría 2
total de dinero descontado en la categoría 3
total de dinero descontado en la categoría 4
total de dinero descontado en la categoría 5
ENTRADAS: precio del boleto
edad de cada uno de los clientes
DATOS ADICIONALES:
categoría 1
categoría 2
categoría 3
categoría 4
categoría 5
Edad
5-14
15-19
20-45
46-65
66 - adelante
Descuento
35%
25%
10%
25%
35%
Nótese que el descuento de las categorías 1 y 5 es el mismo, así como el de las categorías 2 y 4.
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
CAPÍTULO 4.
p
e
el
c2
c3
c4
c5
c
a
a
a
a
a
a
a
a
precio del boleto
edad
total de dinero descontado en la categoría 1
total de dinero descontado en la categoría 2
total de dinero descontado en la categoría 3
total de dinero descontado en la categoría 4
total de dinero descontado en la categoría 5
cantidad a descontar por cliente
1.
2.
3.
4.
5.
6.
7.
8.
9.
PEDIR p
c1← 0
c2 ← 0
c3 ← 0
c4 ← 0
c5 ← 0
CLIENTE
PEDIR mas$
SI mas$ = "NO" ENTONCES
IR al paso 10
DE OTRA FORMA
IR al paso 7
10. DESPLEGAR c1, c2, c3, c4, c5
Proceso CLIENTE:
1.
2.
3.
Pedir e
SI e >= 5 AND e <= 14 OR e >= 66 ENTONCES
c ← p * 0.65
SI e > = 5 AND e <= 14 ENTONCES
c1 ← c1 + c
DE OTRA FORMA
c5 ← c5 + c
DE OTRA FORMA
SI e >= 15 AND e <= 19 OR e >= 46 AND e <= 65 ENTONCES
c ← p * 0.75
SI e >= 15 AND e <= 19 ENTONCES
c2 ← c2 + c
DE OTRA FORMA
c4 ← c4 + c
DE OTRA FORMA
SI e > = 20 AND e < = 45 ENTONCES
c ← p * 0.9
c3 ← c3 + c
DE OTRA FORMA
DESPLEGAR "No pueden entrar niños menores de 5 años"
FINP
TIPOS DE PROBLEMAS
163
164
PARTE II. LÓGICA COMPUTAC1ONAL
Paso 4. Diagrama de flujo (véanse Figs. 4.59 y 4.60).
Obsérvese que un ciclo con un número indeterminado de iteraciones ejecuta una estructura
selectiva compuesta.
Ejercicio: Efectuar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad.
Otra forma de solucionarlo variando un poco la solución anterior es:
Paso 2. Planeación de la solución:
En la solución anterior se tuvieron que emplear condiciones que preguntaban por el rango inferior y
superior de las categorías, por ejemplo:
e >= 15 AND e <= 19
OR
e > = 46 AND e< = 65
Esto fue debido a que se tuvo que dejar por exclusión la parte falsa de la última condición para
validar la solución contra edades que fueran inferiores a 5 años.
Sin embargo, para validar que el dato de entrada edad sea inferior a 5 años podemos hacer lo
siguiente:
1.
2.
PEDIR e
SI e < 5 ENTONCES
DESPLEGAR "No pueden entrar niños menores de 5 años"
IR al paso 1
Podrá observarse que esta última es un ciclo con un número indeterminado de iteraciones, el cual
terminará de ejecutarse cuando la variable e tenga un valor mayor o igual a 5.
Esta variante del ciclo con un número indeterminado de iteraciones que conocíamos es muy usada
para validar que los datos de entrada sean correctos y no tener que usar exclusión con estructuras
selectivas.
El nuevo algoritmo quedaría de la siguiente manera:
Paso 3. Algoritmo:
1.
2.
3.
4.
5.
6.
7.
8.
PEDIR p
c1 ← 0
c2 ← 0
c3 ← 0
c4 ← 0
c5 ← 0
CLIENTE
PEDIR mas$
CAPÍTULO 4.
Figura 4.59
9.
SI mas$ = "NO" ENTONCES
IR al paso 10
DE OTRA FORMA
IR al paso 7
TIPOS DE PROBLEMAS
165
166
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.60
CAPÍTULO 4.
TIPOS DE PROBLEMAS
167
10. DESPLEGAR c1, c2, c3, c4, c5
Proceso CLIENTE:
1. Pediré
2. SI e < 5 ENTONCES
DESPLEGAR "No pueden entrar niños menores de 5 años"
IR al paso 3
DE OTRA FORMA
3. SI e <= 14 OR e >=66 ENTONCES
c ← p * 0.65
SI e<= 14 ENTONCES
c1 ← c1 + c
DE OTRA FORMA
c5 ← c5 + c
DE OTRA FORMA
SI e <= 19 OR e >= 46 ENTONCES
c ←p *0.75
SI e<= 19 ENTONCES
c2 ← c2 + c
DE OTRA FORMA
c4 ← c4 + c
DE OTRA FORMA
c ← p * 0.9
c3 ← c3 + c
4. FINP
Paso 4. Diagrama de flujo (véanse Figs. 4.61 y 4.62).
Ejercicio: Efectuar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad.
PROBLEMA 4
Una compañía de transportes terrestres de lujo tiene dos tipos de camiones. Todos los camiones están
divididos en tres secciones: de Lujo, fumar y No Fumar. Las reservaciones se hacen momentos antes
de que el camión vaya a salir. Un camión puede salir cuando tenga el cupo Heno o cuando se decida
que ya se esperó suficiente tiempo para llenarse. Lo que se necesita es que se haga un programa de
computadora que avise cuándo un camión debe salir.
Se proporciona una tabla con el número de asientos de lujo, fumar y no fumar de los dos tipos de
camiones:
tipo
Lujo
Fumar
No fumar
1
10
16
20
2
18
20
24
168
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.61
CAPÍTULO 4. TIPOS DE PROBLEMAS
Figura 4.62
169
170
PARTE II. LÓGICA COMPUTAC1ONAL
Paso 1. Definición del problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
Antes de verificar el cupo del camión en turno debemos saber a qué tipo pertenece para así saber de
cuantos asientos consta cada sección del camión. De esta manera podremos determinar posteriormente si ya se terminaron los asientos en alguna sección. Para esto empleamos la siguiente condicional:
SI tipo = 1 ENTONCES
asientos de lujo disponibles = 10
asientos de fumar disponibles = 1 6
asientos de no fumar disponibles = 20
DE OTRA FORMA
asientos de lujo disponibles = 1 8
asientos de fumar disponibles = 20
asientos de no fumar disponibles = 24
A continuación se tendrá que usar un ciclo con un número indeterminado de iteraciones.
Dentro del ciclo debe pedirse la categoría del asiento y verificar si ya se ha llenado el cupo de las
categorías de asientos. Para esto emplearemos una variable tipo alfanumérica para cada sección del
camión, que nos indique si la sección se ha llenado o no: si la variable toma un valor de "SI"
significará que está llena la sección y si es "NO" significará que todavía hay asientos disponibles en
esa sección. Esto se representa con la siguiente condicional:
SI categoría = "LUJO" ENTONCES
SI llenoseccionlujo$ = "NO" ENTONCES
número de asientos de lujo ocupados =
número de asientos de lujo ocupados + 1
SI número de asientos de lujo ocupados =
asientos de lujo disponibles
llenoseccionlujo$ = "SI"
DE OTRA FORMA
DESPLEGAR "Asientos de la sección de lujo agotados"
DE OTRA FORMA
SI categoría = "FUMAR" ENTONCES
SI llenoseccionfumar$ = "NO" ENTONCES
número de asientos de fumar ocupados =
número de asientos de fumar ocupados + 1
SI número de asientos de fumar ocupados =
asientos de fumar disponibles
llenoseccionfumarS = "SI"
DE OTRA FORMA
DESPLEGAR "Asientos de la sección de fumar agotados"
DE OTRA FORMA
SI llenoseccionnofumar$ = "NO" ENTONCES
número de asientos de no fumar ocupados =
número de asientos de no fumar ocupados + 1
CAPÍTULO 4.
TIPOS DE PROBLEMAS
171
SI número de asientos de no fumar ocupados =
asientos de no fumar disponibles
llenoseccionnofumar$ = "SI"
DE OTRA FORMA
DESPLEGAR "Asientos de la sección de no fumar agotados"
En donde el valor inicial que deben tener las variables llenoseccionlujo$, llenoseccionfumar$ y
llenoseccionnofumar$ debe ser de "NO".
SALIDAS: Mensaje: "Ya puede salir el camión"
ENTRADAS: tipo de camión
categoría por cada uno de los pasajeros
DATOS ADICIONALES:
Tipo
Lujo
1
2
10
18
Fumar
16
20
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
t
a
c$
a
ald
a
afd
a
anfd
a
nalo
a
nafo
a
nanfo a
llenol$ a
llenof$ a
llenonf$ a
1.
2.
tipo de camión
categoría-del asiento
asientos de lujo disponibles
asientos de fumar disponibles
asientos de no fumar disponibles
número de asientos de lujo ocupados
número de asientos de fumar ocupados
número de asientos de no fumar ocupados
llenoseccionlujo$
llenoseccionfumar$
llenoseccionnofumar$
PEDIR t
SI t = 1 ENTONCES
ald ←10
afd ← 16
anfd ← 20
DE OTRA FORMA
ald← 18
afd ← 20
anfd ←24
3.
4.
5.
nalo ←0
nafo ← 0
nanfo ← 0
No fumar
20
24
172
PARTE II. LÓGICA COMPUTACIONAL
llenol$ ←"NO"
llenof$ ←"NO"
llenonf$ ← "NO"
CLIENTE
SI llenol = "SI" AND llenof = "SI" AND llenonf = "SI" ENTONCES
mas$ ← "NO"
DE OTRA FORMA
PEDIR mas$
11. SI mas$ = "NO" ENTONCES
IR al paso 12
DE OTRA FORMA
IR al paso 9
12. DESPLEGAR "Ya puede salir el camión"
6.
7.
8.
9.
10.
Proceso CLIENTE:
1.
2.
PEDIR c$
SI c$ = "LUJO" ENTONCES
SI Uenol$ = "NO" ENTONCES
nalo ← nalo + 1
SI nalo = ald ENTONCES
Uenol$ ← "SI"
DE OTRA FORMA
DESPLEGAR "Asientos de la sección de lujo agotados"
DE OTRA FORMA
SI c$ = "FUMAR" ENTONCES
SI llenof$ = "NO" ENTONCES
nafo ← nafo + 1
3.
SI nafo = afd ENTONCES
llenof$ ← "SI"
DE OTRA FORMA
DESPLEGAR "Asientos de la sección de fumar agotados"
DE OTRA FORMA
SI llenonf$ = "NO" ENTONCES
nanfo ← nanfo + 1
SI nanfo = anfd ENTONCES
llenonf$ ← "SI"
DE OTRA FORMA
DESPLEGAR "Asientos de la sección de no fumar agotados"
FINP
Paso 4. Diagrama de flujo (véanse Figs. 4.63 y 4.64).
En este problema podemos observar algunas variantes: el proceso principal consta de una estructura selectiva simple seguida de un ciclo con un número indeterminado de iteraciones, el cual tiene
CAPÍTULO 4.
Figura 4.63
TIPOS DE PROBLEMAS
173
CAPÍTULO 4.
TIPOS DE PROBLEMAS
175
una manera inusual de terminar con el ciclo. A su vez este ciclo llama a una estructura selectiva
compuesta.
Ejercicio: Efectuar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad.
Las variables alfanuméricas que indican el estado de cada sección de asientos casi durante toda la
ejecución del diagrama valen "NO" y no es sino hasta el momento en que se alcanza la cifra de
asientos disponibles cuando vale "SI", valor usado para determinar que ya no se pueden vender más
boletos en esa sección en iteraciones posteriores. A este tipo de variables que sirven como indicadores
de que alguna condición se ha cumplido o no, se les llama banderas.
DEFINICIÓN: Una bandera es una variable que generalmente usa dos valores opuestos. Cuando
se cumple cierta condición el valor inicial de la bandera cambia hacia el valor opuesto y este valor
determinará acciones posteriores.
Problemas propuestos
1)
2)
3)
4)
5)
Una persona que va de compras a la tienda "Enano, S.A.", decide llevar un control sobre lo que
va comprando, para saber la cantidad de dinero que tendrá que pagar al llegar a la caja. La tienda
tiene una promoción del 20% de descuento sobre aquellos artículos cuya etiqueta sea roja.
Determinar la cantidad de dinero que esta persona deberá pagar.
Modificar el problema resuelto 4 para que imprima el total de dinero recaudado por el camión.
Un censador recopila ciertos datos aplicando encuestas para el último Censo Nacional de
Población y Vivienda. Desea obtener de todas las personas que alcance a encuestar en un día,
qué porcentaje tiene estudios de primaria, secundaria, carrera técnica, estudios profesionales y
estudios de posgrado.
Un inspector de la Secretaría de Desarrollo Social (SEDSO) que se dedica a verificar los puntos
IMECA (índice Metropolitano de la Calidad del Aire) emitidos por las fábricas, desea saber el
promedio de dichos puntos emitidos por todas las fábricas que pueda visitar en un día y el nombre
y puntos IMECA de la fábrica que más haya contaminado.
El médico de un laboratorio de análisis clínicos desea determinar cuántas personas que visitan
el laboratorio en un día determinado se encuentran con un resultado positivo para anemia.
Tomando como base los resultados obtenidos en el laboratorio, el médico determina si cada
persona tiene anemia o no, dependiendo de su nivel de hemoglobina en la sangre, de su edad y
su sexo. Si el nivel de hemoglobina que tiene cada persona es menor que el rango que le
corresponde se determina su resultado como positivo para anemia y en caso contrario como
negativo. El cuadro en el que el médico se basa para obtener el resultado es el siguiente:
Edad
0 - 1 mes
mayor de 1 y menor o igual de 6 meses mayor de 6
y menor o igual de 12 meses mayor de 1 y menor o
igual que 5 años mayor de 5 y menor o igual que 10
años
Nivel de hemoglobina
1
1
0
1
1
1
1
1
- 26
- 18
- 15
. 5 - 15
. 6 - 15.5
g%
g%
g
g
g%
176
PARTE II. LÓGICA COMPUTACIONAL
Edad
mayor de 10 y menor o igual que 15 años
mujeres mayores de 15 años
hombres mayores de 15 años
Nivel de hemoglobina
13 - 15.5 g%
12 - 16 g%
14 - 18 g%
6) Una escuela ha iniciado su periodo de inscripciones para el curso de computación. El sistema de
inscripciones consiste en que los alumnos seleccionen el grupo en que deseen quedar inscritos y
si hay lugar disponible se pueden inscribir en ese grupo. El cupo por grupo es de 15 alumnos y
se ofrecen cuatro grupos distintos.
El director necesita que cuando un alumno se inscriba, el número de alumnos inscritos se
incremente si hay cupo o bien que se indique si el cupo ya ha sido sobrepasado y que se dé al
alumno la oportunidad de volver a seleccionar. Además el director desea saber cuántos alumnos
quedaron inscritos en cada grupo al final del día.
7) Un jefe de casilla desea determinar cuántas personas de cada una de las secciones que componen
su zona asisten el día de las votaciones. Las secciones son: norte, sur y centro. También desea
determinar cuál es la sección con mayor número de votantes.
8) Un negocio de copias tiene un límite de producción diaria de 10 000 copias si el tipo de impresión
es offset y de 50 000 si el tipo es estándar. Si hay una solicitud de un trabajo el empleado tiene
que verificar que las copias pendientes hasta el momento y las copias solicitadas no excedan del
límite de producción. Si el límite de producción se excediera el trabajo solicitado no podría ser
aceptado. El empleado necesita llevar un buen control de las copias solicitadas hasta el momento
para decidir en forma rápida si los trabajos que se soliciten en el día se deben aceptar o no.
3b) PROBLEMAS REPETITIVOS COMPUESTOS
Recordemos que los problemas repetitivos compuestos son aquellos en los que se emplean varios
ciclos. Frecuentemente encontraremos problemas en donde el cuerpo de un ciclo es otro ciclo. En
estos casos estaremos hablando de un ciclo interno que está anidado dentro de un ciclo externo.
Podemos encontrar muchas combinaciones, dependiendo de si los ciclos tienen un número determinado o indeterminado de iteraciones o si existen más de dos ciclos anidados.
Problemas resueltos
PROBLEMA 1
En un supermercado un cajero captura los precios de los artículos que los clientes compran e
indica a cada cliente cuál es el monto de lo que deben pagar. Al final del día le indica a su supervisor
cuánto fue lo que cobró en total a todos los clientes que pasaron por su caja.
Paso 1. Definición del problema:
Igual a la redacción del problema.
Paso 2. Planeación de la solución:
Para empezar, podemos visualizar dos ciclos: uno para obtener el total de cada cliente y otro para
obtener el total de lo que el cajero cobró en todo el día.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
177
El ciclo para obtener el total por cliente debe obtener la cantidad de dinero por cada artículo distinto
que compró el cliente para ir acumulando su total y como al llegar a la caja el cliente no sabe cuántos
artículos distintos compró, emplearemos un ciclo con un número indeterminado de iteraciones que
llamaremos "ciclo del cliente".
Lo que llamaremos "ciclo del cajero" deberá ir acumulando los totales de los clientes para así
obtener el total del cajero. Como no podremos saber cuántos clientes pasarán por la caja se usará
también un ciclo con un número indeterminado de iteraciones. El algoritmo del ciclo del cajero debe
quedar de la siguiente forma:
1.
2.
3.
4.
5.
6.
total del cajero = 0
CLIENTE
total del cajero = total del cajero + total del cliente
PEDIR mas$
SI mas$ = "NO" ENTONCES
IR al paso 6
DE OTRA FORMA
IR al paso 2
DESPLEGAR total del cajero
El paso 2 es la llamada a ejecución del ciclo denominado CLIENTE.
Para poder saber el total del cajero necesitamos ir acumulando los totales de los clientes. Por ello
el ciclo del cajero llama a ejecución al ciclo del CLIENTE, cuyo algoritmo deberá quedar de la
siguiente forma:
1.
2.
total del cliente = 0
ARTICULO
3. total del cliente = total del cliente + total del artículo
4.
5.
6.
PEDIR masl$
SI masl$ = "NO" ENTONCES
IR al paso 6
DE OTRA FORMA
IR al paso 2
DESPLEGAR total del cliente
En donde el paso 2 es la llamada a ejecución del proceso denominado ARTICULO, el cual constará
de los siguientes pasos:
1.
2.
PEDIR precio, cantidad
total del artículo = precio x cantidad
Se definirán ahora los datos requeridos:
SALIDAS: total de cada cliente, total del cajero
ENTRADAS: precio, cantidad de cada artículo
DATOS ADICIONALES: ninguno
178
PARTE II. LÓGICA COMPUTACIONAL
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
p
c
tcaj
tcl
ta
mas$
masl$
C
A
a
a
a
a
a
a
a
a
a
precio de cada artículo
cantidad de cada artículo
total del cajero
total del cliente
total del artículo
Variable que determina el fin del ciclo del cajero.
Variable que determina el fin del ciclo del cliente.
El proceso CLIENTE
El proceso ARTICULO
1.
2.
3.
4.
5.
tcaj←0
C
tcaj ← tcaj + tcl
PEDIR mas$
SI mas$ = "NO" ENTONCES
IR al paso 6
DE OTRA FORMA
IR al paso 2
6. DESPLEGAR tcaj
Proceso C:
1.
2.
3.
4.
5.
tcl←0
A
tcl ← tcl + ta
PEDIR masl$
SI masl$ = "NO" ENTONCES
IR al paso 6
DE OTRA FORMA
IR al paso 2
6. DESPLEGAR tcl
7. FINP
Proceso A.
1. PEDIR p, c
2. ta ←p * c
3. FINP
Paso 4. Diagrama de flujo (véanse Figs. 4.65, 4.66 y 4.67).
Para resolver este problema se requirió de un ciclo con un número indeterminado de iteraciones,
el cual tiene anidado otro ciclo del mismo tipo, que a su vez contiene un pequeño proceso secuencial.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
Figura 4-65
Prueba:
tcaj ← 0
Llega el primer cliente, ejecuta el ciclo del CLIENTE:
tcl←0
El cajero captura el primer artículo de este cliente y ejecuta el proceso ARTICULO:
p←20
c←3
ta←60
tcl ← 60
masl$← "SI"
179
180
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.66
Figura 4-67
CAPÍTULO 4.
p← 15
c← 1
ta← 15
tcl ← 75
masl$ ← "SI"
p←8
c←6
ta←48
tcl ← 123
mas$ ← "NO"
E imprime 123, que es el total a pagar de este cliente
tcaj ← 123
Llega otro cliente con un solo artículo y se ejecuta el ciclo del CLIENTE:
tcl←0
p← 110
c←1
ta←110
tcl← 110
masl$ ← "NO"
Imprime 110, que es el total a pagar de este cliente.
tcaj ← 233
Supongamos que llega el último cliente:
tcl ← 0
p←20
c←6
ta← 120
tcl ← 120
masl$ ← "SI"
TIPOS DE PROBLEMAS
181
182
PARTE 11. LÓGICA COMPUTACIONAL
p←65
c←2
ta← 130
tcl ←250
masl$ ←"NO"
Imprime 250, que es el total del cliente.
tcaj ← 483
mas$ ← "NO"
Finalmente imprime 483, que es lo que el cajero cobró a los tres clientes que pasaron por su caja.
Ejercicio: Efectuar dos pruebas a este diagrama de flujo.
PROBLEMA 2
Cinco miembros de un club contra la obesidad desean saber cuánto han bajado o subido de peso desde
la última vez que se reunieron. Para esto se debe realizar un ritual de pesaje en donde cada uno se
pesa en diez básculas distintas para así tener el promedio más exacto de su peso. Si existe diferencia
positiva entre este promedio de peso y el peso de la última vez que se reunieron, significa que subieron
de peso. Pero si la diferencia es negativa, significa que bajaron. Lo que el problema requiere es que
por cada persona se imprima un letrero que diga "SUBIÓ" o "BAJO" y la cantidad de kilos que
subió o bajó de peso.
Paso 1. Definición del problema:
Igual a la redacción del problema
Paso 2. Planeación de la solución:
Para solucionar este problema será necesario utilizar dos ciclos. El primero estará compuesto por las
acciones que se deben efectuar por cada uno de los cinco miembros del club, por lo que será necesario
utilizar un ciclo con un número determinado de iteraciones. Este ciclo estará compuesto por las
siguientes acciones:
1.
2.
3.
contador = 1
SI contador >5 ENTONCES
IR al paso 3
DE OTRA FORMA
MIEMBRO
contador = contador + 1
IR al paso 2
FIN
El segundo ciclo será el proceso MIEMBRO, el cual contiene las acciones que se realizarán por
cada miembro del club. Dichas acciones estarán representadas por un ciclo con un número determi-
CAPÍTULO 4.
TIPOS DE PROBLEMAS
183
nado de iteraciones, pues será necesario hacer lo mismo por cada una de las diez básculas y por una
condicional para determinar si subió o bajó de peso. Las acciones que componen a este proceso son
las siguientes:
1.
2.
3.
4.
5.
6.
7.
PEDIR promedio de peso anterior
suma de pesos = 0
contador de básculas = 1
SI contador de básculas > 10 ENTONCES
IR al paso 5
DE OTRA FORMA
BASCULA
contador de básculas = contador de básculas + 1
IR al paso 4
promedio actual = suma de pesos/10
diferencia de pesos = promedio actual - promedio de peso anterior
SI diferencia de pesos < 0 ENTONCES
DESPLEGAR "bajó de peso"
DE OTRA FORMA
DESPLEGAR "subió de peso"
El proceso BASCULA está formado por las acciones que se llevan a cabo cuando un miembro
llega a una báscula, las acciones que lo componen son las siguientes:
1.
2.
PEDIR peso
suma de pesos = suma de pesos + peso
Se definirán ahora los datos requeridos:
SALIDAS: el mensaje "bajó de peso " o "subió de peso" por cada miembro. ENTRADAS:
promedio peso anterior de cada miembro, diez pesos distintos por cada miembro. DATOS
ADICIONALES: Un miembro bajó de peso si la diferencia entre el peso anterior y el promedio
de pesos en las diez básculas es negativo, en caso contrario subió de peso.
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
c
a
M a
pant a
sp a
cb a
pa a
dif a
B
a
pe a
contador de miembros
proceso MIEMBRO
promedio de peso anterior
suma de pesos
contador de básculas
promedio de peso actual
diferencia de pesos
proceso BASCULA
peso por báscula
184
PARTE II. LÓGICA COMPUTACIONAL
1. c← 1
2. SI c> 5 ENTONCES
IR al paso 3
DE OTRA FORMA
M
c←c+1
IR al paso 2
3. FIN
Proceso M:
1. PEDIR pant
2 sp ←0
3. cb← 1
4. SI cb> 10 ENTONCES
IR al paso 5
DE OTRA FORMA
B
cb ← cb + 1
IR al paso 4
5. pa ←sp/10
6. dif 4- pa - pant
7. SI dif < 0 ENTONCES
DESPLEGAR "bajó de peso"
DE OTRA FORMA
DESPLEGAR "subió de peso"
8. FINP
Proceso B:
1. PEDIR pe
2. sp ← sp + pe
3. FINP
Paso 4. Diagrama de flujo (véanse Figs. 4.68, 4.69 y 4.70).
En este problema se empleó un ciclo con un número determinado de iteraciones, el cual contiene
a su vez un ciclo del mismo tipo seguido de una estructura selectiva simple. El ciclo interno ejecuta
un proceso secuencial.
Prueba:
c← 1
Llega el primer miembro, ejecuta el ciclo M
pant← 120
sp←0
CAPÍTULO 4.
Figura 4-68
cb← 1
El primer miembro se pesa la primera vez; se ejecuta el proceso B.
pe← 115
sp← 115
cb←2
El primer miembro se pesa la segunda vez; se ejecuta el proceso B.
pe← 114
sp ← 229
cb←3
El primer miembro se pesa la tercera vez; se ejecuta el proceso B.
pe← 116 s
p ← 345
cb←4
El primer miembro se pesa la cuarta vez; se ejecuta el proceso B.
pe← 117
sp ← 462
cb←5
TIPOS DE PROBLEMAS
185
186
PARTE II. LÓGICA COMPUTACIONAL
Figura 4-69
El primer miembro se pesa la quinta vez; se ejecuta el proceso B.
pe ← 114
sp ← 576
cb ← 6
CAPÍTULO 4.
TIPOS DE PROBLEMAS
Figura 4.70
El primer miembro se pesa la sexta vez; se ejecuta el proceso B.
pe← 115
sp ← 691
cb←7
El primer miembro se pesa la séptima vez; se ejecuta el proceso B.
pe← 116
sp ←807
cb←8
El primer miembro se pesa la octava vez; se ejecuta el proceso B.
pe← 115
sp ← 922
cb←9
El primer miembro se pesa la novena vez; se ejecuta el proceso B.
pe ← 114
sp ← 1036
cb← 10
El primer miembro se pesa la décima vez; se ejecuta el proceso B.
pe← 116
sp← 1152
cb← 11
Debido a que la variable cb, contador de básculas, se excede de 10, el ciclo B termina.
pa← 115.2
dif←-4.8
187
188
PARTE II. LÓGICA COMPUTACIONAL
Como la diferencia de pesos es negativa se despliega: "bajó de peso"
c←2
Llega el segundo miembro; ejecuta el ciclo M
pant ← 100
sp ← 0
cb← 1
El segundo miembro se pesa la primera vez; se ejecuta el proceso B.
pe ←98
sp←98
cb←2
El segundo miembro se pesa la segunda vez; se ejecuta el proceso B.
pe ←97
sp ← 195
cb←3
El segundo miembro se pesa la tercera vez; se ejecuta el proceso B.
pe ←98
sp ← 293
cb ← 4
El segundo miembro se pesa la cuarta vez; se ejecuta el proceso B.
pe ←97.5
sp ← 390.5
cb←5
El segundo miembro se pesa la quinta vez; se ejecuta el proceso B.
pe ←98.1
sp ←488.6
c b ←6
El segundo miembro se pesa la sexta vez; se ejecuta el proceso B.
pe ←97.7
sp ← 586.3
cb←7
El segundo miembro se pesa la séptima vez; se ejecuta el proceso B.
pe ←98
sp ←684.3
cb←8
El segundo miembro se pesa la octava vez; se ejecuta el proceso B.
pe ←97
CAPÍTULO 4.
TIPOS DE PROBLEMAS
189
sp←781.3
c b←9
El segundo miembro se pesa la novena vez; se ejecuta el proceso B.
pe ← 97.6
sp ← 878.9
cb ← 10
El segundo miembro se pesa la décima vez; se ejecuta el proceso B.
pe ← 97.4
sp ← 976.3
cb← 11
Como la variable cb, contador de básculas, se excede de 10, el ciclo B termina.
pa ← 97.63
dif←-2.37
Como la diferencia de pesos es negativa se despliega: "bajó de peso" Ejercicio: Efectuar las
pruebas correspondientes a los miembros 3,4 y 5 del club de obesidad.
PROBLEMA 3
Simular el comportamiento de un reloj digital imprimiendo la hora, minuto y segundo en cada segundo
de un día desde las 0:00:00 horas hasta las 23:59:59 horas.
Paso 1: Definición del problema:
Igual a la redacción del problema.
Paso 2: Planeación de la solución:
En la solución de este problema deberán emplearse tres ciclos: uno para contar las horas, otro para
contar los minutos y otro más para los segundos.
El ciclo de horas va desde la hora 0 hasta la hora 23. Además, cada hora contiene minutos, por lo
que el ciclo de horas es el siguiente:
1.
2.
3.
4.
hora = 0
MINUTOS
hora = hora + 1
SI hora > 23 ENTONCES
IR al paso 5
DE OTRA FORMA
IR al paso 2
5. FIN.
190
PARTE 11. LÓGICA COMPUTACIONAL
De manera similar los minutos empiezan a correr a partir del minuto 0 y terminan en el 59 y cada
minuto tiene segundos:
1
2
3
4
minuto = 0
SEGUNDOS
minuto = minuto + 1
SI minuto > 59 ENTONCES
IR al paso 5
DE OTRA FORMA
IR al paso 1
5 FINP
Finalmente los segundos también van de 0 a 59 y en cada segundo debe desplegarse la hora, minuto
y segundo actual:
1.
2.
3.
4.
segundo = 0
DISPLAY
segundo = segundo + 1
SI segundo > 59 ENTONCES
IR al paso 5
DE OTRA FORMA
IR al paso 2
5. FIN
El proceso DISPLAY constará de la acción:
1. DESPLEGAR hora, minuto, segundo
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
h
m
s
M
S
D
a
a
a
a
a
a
contador de horas
contador de minutos
contador de
proceso MINUTOS
proceso SEGUNDOS
proceso DISPLAY
1.
h←0
2.
M
3.
4.
h← h +1
SI
h > 23 ENTONCES
IR al paso 5
DE OTRA FORMA
IR al paso 2
5.
FIN
CAPÍTULO 4.
TIPOS DE PROBLEMAS
191
Proceso M:
1. m ← 0
2. S
3. m←m + 1
4. SI m > 59 ENTONCES
IR al paso 5
DE OTRA FORMA
IR al paso 2
5. FINP
Proceso S:
1. s←0
2.
3.
4.
5.
D
s←s + 1
SI s > 59 ENTONCES
IR al paso 5
DE OTRA FORMA
IR al paso 2
FINP
Proceso D:
1.
2.
DESPLEGAR h, m, s
FINP
Paso 4: Diagrama de flujo (véanse Figs. 4.71, 4.72 y 4.73).
En este diagrama de flujo podemos observar claramente cómo un ciclo con un número determinado
de iteraciones manda a ejecutar otro ciclo con un número determinado de iteraciones, que a su vez
llama a ejecución otro ciclo del mismo tipo.
Prueba:
Debido a lo largo de la prueba ésta es abreviada.
h←0
m←0
s←0
Imprime 0, 0, 0, correspondiente a las 0:00:00 h.
h←0
m←0
Imprime 0, 0, 0, correspondiente a las 0:00:01 h.
192
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.71
Figura 4.72
CAPÍTULO 4.
Figura 4.73
h←0
m←0
s←59
Imprime 0, 0, 59, correspondiente a las 0:00:59 h.
h←0
m← 1
s←0
Imprime 0, 1,0, correspondiente a las 0:01:00 h.
.
.
.
h←0
m←59
s←59
Imprime 0, 59, 59, correspondiente a las 0:59:59 h.
h← 1
.
TIPOS DE PROBLEMAS
193
194
PARTE I I . LÓGICA COMPUTACIONAL
m← 0
s←0
Imprime 1, 0, 0, correspondiente a las 1:00:00 h.
.
.
.
h←23
m←59
s←59
Imprime 23, 59, 59, correspondiente a las 23:59:59 h.
h←23
m←59
s←59
Imprime 23, 59, 59, correspondiente a las 23:59:59 h.
h←23
m←59
s←60
y se cumple la condición de término del ciclo S, por lo que regresa al ciclo M:
h←23
m←60
s←60
con lo que también se cumple la condición de término del ciclo M, por lo que regresa al diagrama
principal:
h←24
m←60
s← 60
y también se cumple la condición de término del ciclo de las horas y se llega al fin del diagrama de
flujo.
PROBLEMA 4
Se desea obtener el promedio de g grupos que están en un mismo año escolar: siendo que cada grupo
puede tener n alumnos que cada alumno puede llevar m materias y que en todas las materias se
promedian tres calificaciones para obtener el promedio de la materia. Lo que se desea desplegar es
el promedio de los grupos, el promedio de cada grupo y el promedio de cada alumno.
Paso 1: Definición del problema:
Igual a la redacción del problema.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
195
Paso 2: Planeación de la solución:
La solución de este problema estará compuesta por 3 ciclos anidados.
El primer ciclo representará a las acciones que se han de realizar para cada uno de los g grupos,
por lo que será necesario utilizar un ciclo con un número determinado de iteraciones. Las acciones
que lo componen son las siguientes:
1.
2.
3.
4.
PEDIR número de grupos
suma de promedios de grupos = 0
contador de grupos = 1
SI contador de grupos > número de grupos ENTONCES
IR al paso 5
DE OTRA FORMA
GRUPO
contador de grupos = contador de grupos +1'
IR al paso 4
5. promedio de todos los grupos =
suma de promedios de grupos / número de grupos
6. DESPLEGAR promedio de todos los grupos
El segundo ciclo será el proceso GRUPO y estará compuesto por las acciones que se habrán de
realizar por cada grupo, lo que significa que será un ciclo que se repetirá tantas veces como alumnos
haya en cada grupo, por lo que será necesario utilizar un ciclo con determinado número de iteraciones
y las acciones que lo componen son las siguientes:
1.
2.
3.
4.
PEDIR número de alumnos
suma de grupo = 0
contador de alumnos = 1
Si contador de alumnos > número de alumnos ENTONCES
IR al paso 5
DE OTRA FORMA
ALUMNO
contador de alumnos = contador de alumnos + 1
IR al paso 4
5. promedio del grupo =
suma de grupo / número de alumnos
6. DESPLEGAR promedio del grupo
7. suma de promedios de grupos =
suma de promedios de grupos + promedio del grupo
El paso 7 implica el hecho de acumular el último promedio de grupo obtenido a los obtenidos
anteriormente. Es muy importante que esta acción se realice cada vez que se ha terminado con un
grupo: es por eso que el lugar correcto de ésta es después de que se ha terminado con el ciclo de un
grupo y no se ha comenzado con otro.
El tercer ciclo será el proceso ALUMNO y estará compuesto por las acciones que sea necesario
realizar por cada alumno de un grupo, por lo que el ciclo será con determinado número de iteraciones
196
PARTE II. LÓGICA COMPUTACIONAL
ya que el número de alumnos es determinable. Las acciones que componen a este ciclo son las
siguientes:
1.
2.
3.
4.
PEDIR número de materias
suma de calificaciones del alumno = 0
contador de materias = 1
SI contador de materias > número de materias ENTONCES
IR al paso 5
DE OTRA FORMA
MATERIA
contador de materias = contador de materias + 1
IR al paso 4
5. promedio del alumno =
suma de calificaciones del alumno / número de materias
6. DESPLEGAR promedio del alumno
7. suma de grupo = suma de grupo + promedio del alumno
El proceso MATERIA se realizará una vez por cada materia que curse el alumno, las acciones que
lo componen son las siguientes:
1. PEDIR calificación 1, calificación2, calificación3
2. promedio de materia = ( calificación 1 + calificación2 + calificación3) / 3
3. suma de calificaciones del alumno =
suma de calificaciones del alumno + promedio de materia
SALIDAS: promedio de grupos, promedio por grupo, promedio del alumno
ENTRADAS: número de todos los grupos, número de alumnos por cada grupo, número de materias
por cada alumno, calificación 1, calificación 2, calificación 3 de cada materia de cada alumno.
DATOS ADICIONALES: ninguno
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
g
stg
ptg
cg
G
na
sg
ca
A
pg
nm
a
a
a
a
a
a
a
a
a
a
a
número de grupos
suma de promedios de grupos
promedio de todos los grupos
contador de grupos
proceso por GRUPO
número de alumnos por grupo
suma de grupo
contador de alumnos
proceso por ALUMNO
promedio del grupo
número de materias
CAPÍTULO 4.
cm
sa
pa
el
c2
c3
pm
1.
a
a
a
a
a
a
a
contador de materias
suma de calificaciones del alumno
promedio del alumno
calificación 1 de alguna materia de algún alumno de algún grupo.
calificación 2 de alguna materia de algún alumno de algún grupo.
calificación 3 de alguna materia de algún alumno de algún grupo.
promedio de materia
PEDIR g
2.
stg ←0
3.
4.
cg ← 1
SI cg > g ENTONCES
IR al paso 5 DE
OTRA FORMA
G
cg ← cg + 1
IR al paso 4
ptg ← stg / g
DESPLEGAR ptg
5.
6.
Proceso G:
1. PEDIR na
2.
3.
sg ← 0
ca ← 1
4.
SI ca > na ENTONCES
IR al paso 5
DE OTRA FORMA A
ca ←ca + 1 IR al
paso 4
pg←sg/na
DESPLEGAR pg
stg ← stg + pg
FINP
5.
6.
7.
8.
Proceso A:
1. PEDIR nm
2.
3.
sa ← 0
cm ←1
4.
SI cm > nm ENTONCES
IR al paso 5
DE OTRA FORMA
M
cm ←cm 4- 1
IR al paso 4
pa ←sa / nm
5.
TIPOS DE PROBLEMAS
197
198
PARTE II. LÓGICA COMPUTACIONAL
6. DESPLEGAR pa
7. sg ← sg + pa
8. FINP
Proceso M:
1. PEDIR c1,c2,c3
2. pm ←( c1+ c2 + c3) / 3
3. sa ← sa + pm
4. FINP
Paso 4. Diagrama de flujo (véanse Figs. 4.74 a 4.77):
En este problema empleamos un ciclo con un número determinado de iteraciones triplemente
anidado en ciclos del mismo tipo. El ciclo más interno ejecuta un proceso secuencial.
Prueba:
g←1
stg←0
cg←1
Ejecuta el ciclo G para el primer grupo.
na←2
sg←0
ca←1
Ejecuta el ciclo A para el primer alumno del primer grupo.
nm ←2
sa ←0
cm ← 1
Ejecuta el ciclo M para la primera materia del primer alumno del primer grupo.
c1←9
c2←7
c3←8
pm ←8
sa←8
cm ←2
Ejecuta el ciclo M para la segunda materia del primer alumno del primer grupo.
cl←8
c2←9
c3←8
pm ← 8.33
sa ← 16.33
cm ← 3
Termina el ciclo M para el primer alumno del primer grupo.
pa←8.165
CAPÍTULO 4.
Figura 4.74
TIPOS DE PROBLEMAS
199
200
PARTE II. LÓGICA COMPUTACIONAL
Figura 4.75
Despliega el promedio del primer alumno del primer grupo 8.165
sg← 8.165
ca ← 2
Ejecuta el ciclo A para el segundo alumno del primer grupo.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
Figura 4.77
Figura 4.76
nm ←2
sa ←0
cm ← 1
Ejecuta el ciclo M para la primera materia del segundo alumno del primer grupo.
c1 ←7
201
202
PARTE II. LÓGICA COMPUTACIONAL
c2←6
c3←9
pm ← 7.33
sa ←7.33
cm←2
Ejecuta el ciclo M para la segunda materia del segundo alumno del primer grupo.
cl←8
c2←9
c3←7
pm ← 8
sa ← 15.33
cm ← 3
Termina el ciclo M para el segundo alumno del primer grupo.
pa ← 7.66
Despliega el promedio del segundo alumno del primer grupo 7.66
sg← 15.82
ca ←3
Termina el ciclo A para el primer grupo.
pg←7.91
Despliega el promedio del primer grupo 7.91
stg ← 7.91
cg←2
Ejecuta el ciclo G para el segundo grupo.
na ← 2
sg←0
ca←1
Ejecuta el ciclo A para el primer alumno del segundo grupo.
nm←2
sa←0
cm←1
Ejecuta el ciclo M para la primera materia del primer alumno del segundo grupo.
c1 ← 10
c2←9
c3← 10
pm ←9.66
sa ← 9.66
cm←2
CAPÍTULO 4.
TIPOS DE PROBLEMAS
Ejecuta el ciclo M para la segunda materia del primer alumno del segundo grupo.
cl←9
c2← 10
c3← 10
pm ← 9.66
sa ← 19.32
cm ←3
Termina el ciclo M para el primer alumno del segundo grupo.
pa ← 9.66
Despliega el promedio del primer alumno del segundo grupo 9.66
sg ←9.66
ca ← 2
Ejecuta el ciclo A para el segundo alumno del segundo grupo.
nm ← 2
sa ←0
cm ←1
Ejecuta el ciclo M para la primera materia del segundo alumno del segundo grupo.
cl ←7
c2←6
c3←5
pm ←6
sa ←6
cm ←2
Ejecuta el ciclo M para la segunda materia del segundo alumno del segundo grupo.
el←10
c2← 10
c3←10
pm ←10
sa ←16
cm ← 3
Termina el ciclo M para el segundo alumno del segundo grupo.
pa ←8
Despliega el promedio del segundo alumno del segundo grupo, 8.
sg← 17.66
ca ←3
Termina el ciclo A para el segundo grupo.
203
204
PARTE II. LÓGICA COMPUTACIONAL
pg ← 8.83
Despliega el promedio del primer grupo, 8.83
stg ← 16.74
cg←3
Termina el ciclo G.
ptg ← 8.37
Despliega el promedio de todos los grupos, 8.37
Ejercicio: Efectuar una prueba más a este diagrama de flujo.
Problemas propuestos
1. Simular el comportamiento de un calendario, desplegando día, mes y año de un año completo no
bisiesto.
2. Modificar el problema resuelto 3 de tal manera que antes de funcionar el reloj se le pueda dar
una hora exacta en la que se active una alarma que despliegue el siguiente letrero: "RING,
RING".
3. Modificar el problema resuelto 3 para que se pueda determinar la hora exacta en que debe
comenzar el reloj.
4. Un atleta se ha propuesto recorrer una misma ruta durante un año, corriendo 6 días a la semana,
para así saber su promedio por semana, por mes y por todo el año.
5. A lo largo del día un cajero procesa a las personas que llegan a efectuar movimientos bancarios.
Estos movimientos deben ser esencialmente cargos o abonos. Determinar la cantidad total de
dinero obtenida por concepto de cargos y abonos en todo el día, así como un balance que indique
si hubo más cargos que abonos o viceversa y la diferencia absoluta.
6. Llevar el control de un tablero que registra los puntos de set de un partido de tenis de 5 sets sin
muerte súbita, es decir, que gana el set aquel que llegue a 6 puntos o más con dos puntos de
ventaja sobre el adversario. Lo que debe imprimir es un mensaje con el nombre del jugador que
gana cada set y el nombre del ganador del partido.
CAPÍTULO 4.
TIPOS DE PROBLEMAS
205
RESUMEN
Los tipos de problemas que podemos encontrar se clasifican, según su estructura, de la siguiente
manera:
1) Secuenciales: son problemas en los que para su solución se emplean una serie de acciones, las
cuales se ejecutan invariablemente en un orden secuencial.
2) Selectivos: las soluciones de este tipo de problemas son una serie de acciones en las que la
ejecución de algunas de ellas dependerá de que se cumplan una o varias condiciones.
a) Simples: son aquellos que están compuestos únicamente de una condición.
b) Compuestos: son aquellos que para solucionarlos se necesita establecer más de una condición.
3) Repetitivos: se les llama problemas repetitivos a aquellos en cuya solución es necesario utilizar
un mismo conjunto de acciones que puedan ejecutarse más de una vez.
a) Simples: son aquellos en los que se usa un solo ciclo. Se clasifican a su vez en:
1) Con un número determinado de iteraciones: son problemas en que para su solución se
requiere usar un solo ciclo en el que su número de iteraciones es un dato conocido, el cual
se puede obtener, o bien de la definición del problema o bien como dato de entrada.
2) Con un número indeterminado de iteraciones: son problemas que para su solución se
requiere usar un ciclo, en el que el número de iteraciones es un dato desconocido y el
proceso repetitivo termina hasta que el usuario lo indica.
b) Compuestos: son aquellos en los que se usan varios ciclos
Conceptos relacionados con problemas repetitivos:
—Ciclo: es la ejecución de un mismo conjunto de acciones una o más veces. Se compone de cuerpo
del ciclo y estructura cíclica. —Proceso: conjunto de acciones a las cuales se les asigna un nombre.
— Cuerpo del ciclo: proceso que se ejecutará una o más veces.
—Estructura cíclica: conjunto de acciones que permiten que el cuerpo del ciclo se ejecute una o
más veces. —Iteración: es cada una de las ejecuciones del cuerpo del ciclo.
— Contador: es la variable que nos ayuda a contar el número de iteraciones en un ciclo.
—Acumulador: es una variable que suma sobre sí misma un conjunto de valores para de esta manera
tener la suma de todos ellos en una sola variable.
—Bandera: es una variable que generalmente usa dos valores opuestos. Cuando se cumple cierta
condición el valor inicial de la bandera cambia hacia el valor opuesto y este valor determinará
acciones posteriores.
PARTE
III
PROGRAMACIÓN
CAPÍTULO
5
ELEMENTOS
DEL LENGUAJE
OBJETIVOS
5.1 El alumno describirá los tipos de datos que usa el lenguaje Basic.
5.2 El alumno explicará el manejo de los datos que usa el lenguaje Basic.
— Constantes, variables y palabras reservadas
— Reglas de asignación
— Operadores y jerarquía
a) Asociativos
b) Aritméticos
c) Relaciónales
d) Lógicos
— Identificadores
a) El alumno definirá qué es un identificador
b) El alumno explicará las reglas para el uso de los identificadores
209
CAPÍTULO
5
ELEMENTOS
DEL LENGUAJE
INTRODUCCIÓN
Dentro del marco de la metodología para la solución de problemas por medio de la computadora
hemos trabajado hasta ahora con los cuatro primeros pasos. Con esto hemos aprendido la lógica
computacional necesaria para poder hacer programas de computadora. Hasta cierto punto hemos
aprendido lo más difícil; sin embargo, aún nos resta aprender las instrucciones del lenguaje Basic
para poder empezar a hacer nuestros primeros programas.
Para el paso 5 de la metodología que, como se recordará, es la codificación, tiene como requisito
aprender los conceptos básicos del lenguaje Basic. Así como aprendimos a traducir un algoritmo en
diagrama de flujo, ahora aprenderemos a traducir ambos en programa. De hecho, retomaremos los
problemas resueltos a lo largo del libro para trabajar con los últimos pasos de la metodología. Una
vez dominando esto podremos ver otras instrucciones más complejas, propias de Basic.
El Basic es un lenguaje computacional de alto nivel, fácil de aprender, que vio la luz en 1964,
creado por los estadunidenses G. Kemeny y Thomas E. Kurtz. A partir de entonces se han creado
muchas versiones tanto en compilador como en intérprete. Para este libro emplearemos la versión
denominada Quick Basic, que es un compilador, y viene proporcionado junto con el sistema operativo
MS-DOS/OS-DOS a partir de la versión 5.0
Aunque algunos de los elementos básicos del lenguaje Basic fueron ya vistos al principio de la
parte 2 del libro, los resumiremos a continuación.
1) TIPOS DE DATOS
A) Numéricos
Son datos cuyo contenido es una serie de dígitos (0-9) que en conjunto nos proporcionan un valor
numérico, ya sea entero o real, y que pueden ser precedidos por un signo de + (positivo) o 210
CAPÍTULO 5. ELEMENTOS DEL LENGUAJE
211
(negativo). Cuando se omite el uso del signo el dato se asume como positivo. Existen varios tipos
de datos numéricos. Para efectos de este libro emplearemos los números de simple precisión, con
los cuales hemos venido trabajando hasta el momento.
Con los datos numéricos se pueden realizar operaciones aritméticas o de conteo. Ejemplos:
1519.17
-32.5
1
0
B) Alfanuméricos
Son datos cuyo contenido son letras del abecedario, números o caracteres especiales, o bien una
combinación de ellos. Aunque los datos alfanuméricos pueden contener números, éstos no pueden
ser usados para realizar operaciones aritméticas.
Entre los caracteres especiales podemos encontrar: #,$,&,%,/, ", !, ?, ¡, =, -, +, X, (,), {, },
etcétera.
Cuando se hace referencia a este tipo de datos se deben encerrar entre dobles comillas.
Ejemplos:
"Morelos Ote, # 23-7"
"Benito Juárez"
"16-45-19"
"02/05/92"
"Carlos Salinas de Gortari"
2) ZONAS DE MEMORIA
Los datos, sean numéricos o alfanuméricos, se alojan en zonas de memoria para poder utilizarlos
posteriormente.
Estas zonas de memoria están formadas por un nombre o identifícador y un contenido, que será
el dato que se guarda en ellas. Por ejemplo, si el contenido es 15 y el nombre de la variable es EDAD,
significa que hay una zona de memoria que se llama EDAD cuyo valor es 15.
Los identificadores de estas zonas de memoria se forman respetando las siguientes reglas.
1) El primer carácter debe ser una letra.
2) Los demás caracteres podrán ser letras, números o guiones, siempre y cuando las letras no
estén acentuadas.
3) Si el tipo de dato que guarda (contenido) es alfanumérico, el nombre deberá llevar al final el
signo $.
Ejemplos:
NOMBRE
salario
nombre$
dirección$
inscripción
CONTENIDO
4000
"William Shakespeare"
"Cuauhtémoc # 115, Col. Narvarte"
500
212
PARTE III.
PROGRAMACIÓN
NOTA: Obsérvese que en las zonas de memoria nombre$ y dirección$ se incluye el signo $; en el
nombre de la zona y el contenido se encierra entre dobles comillas; esto es debido a que el contenido
es un dato alfanumérico.
Las zonas de memoria se pueden clasificar en:
A) Constantes
B) Variables
A) Constantes
Son zonas de memoria que guardan datos, los cuales no cambian durante toda la fase de
procesamiento de información.
B) Variables
Son zonas de memoria cuyo contenido cambia durante la fase de procesamiento de información.
3. EXPRESIONES
a) Definición
Conjunto de operadores y operandos que producen un valor.
b) Elementos de una expresión
Una expresión está compuesta por operadores y operandos.
Un operador es un símbolo o palabra que significa que se ha de realizar cierta acción entre uno o
dos valores llamados operandos.
De modo general, una expresión se escribe en cualquiera de las formas siguientes,
operando 1
OPERADOR
OPERADOR
operando2
operando 1
4. TIPOS DE OPERADORES
Existen cuatro tipos de operadores:
A) Asociativos
B) Aritméticos
C) Relaciónales
D) Lógicos
Dependiendo del tipo de operadores que se usen en una expresión, ésta se convertirá en aritmética,
lógica o relacional.
CAPÍTULO 5. ELEMENTOS DEL LENGUAJE
213
A) Asociativos
El único operador asociativo es el paréntesis (), el cual permite indicar en qué orden deben llevarse
a cabo las operaciones.
Cuando una expresión se encuentra entre paréntesis, indica que las operaciones que se encuentran dentro de ellos deben realizarse primero. Si en una expresión se utilizan más de un paréntesis
se deberá proceder primero con los que se encuentren más hacia el centro de la expresión.
B) Aritméticos
Son operadores que permiten realizar operaciones aritméticas entre operandos. El resultado que
se obtiene al evaluar una expresión aritmética es un número.
Al evaluar expresiones que contienen operadores aritméticos, se respeta una jerarquía en el
orden en el que se aplican. Es decir, si se tiene una expresión aritmética con al menos dos
operadores de distinta jerarquía, se deberá realizar primero una operación que la otra. La siguiente
tabla muestra los operadores aritméticos ordenados de mayor a menor jerarquía.
OPERADOR
OPERACIÓN
-
Negación
Potenciación
Multiplicación, División
Suma, Resta
^
x, /
+, -
Para resolver una expresión aritmética se deben seguir las siguientes reglas:
1) Primero se resuelven las expresiones que se encuentran entre paréntesis siguiendo estas
mismas reglas.
2) Se procede aplicando la jerarquía de operadores. En caso de que haya dos operadores con la
misma jerarquía se procede de izquierda a derecha.
C) Relaciónales
Son operadores que permiten comparar dos valores sean numéricos o alfanuméricos. El resultado
que se obtiene es un valor de verdad que puede ser V(verdadero) o F(falso). La comparación entre
un dato numérico y uno alfanumérico no puede llevarse a cabo. Los operadores relaciónales son
los siguientes:
OPERADOR
OPERACIÓN
= '
<> o ><
<
>
<=
>=
Igual que
Diferente que
Menor que
Mayor que
Menor o igual que
Mayor o igual que
D) Lógicos
Son operadores que permiten realizar las operaciones lógicas de conjunción, disyunción y negación. El resultado que se obtiene es un valor de verdad, que puede ser V(verdadero) o F(falso).
Los operadores lógicos se muestran a continuación, indicando la jerarquía de mayor a menor.
214
PARTE I I I .
PROGRAMACIÓN
OPERADOR
NOT
AND
OR
OPERACIÓN
Negación
Conjunción
Disyunción
Recordemos que la negación cambia el valor Verdadero por el Falso y viceversa.
En la conjunción se necesitan dos valores Verdaderos para producir otro Verdadero; en
cualquier otro caso se produce un valor de Falso.
En la disyunción, con cualquiera de los dos valores de los operadores que sea Verdadero se
obtiene un resultado de Verdadero, en caso contrario el valor será Falso.
Las reglas para resolver las expresiones lógicas son las siguientes:
1) Se resuelven primero los paréntesis.
2) Se encuentran los valores de verdad de las expresiones relaciónales.
3) Se aplica la jerarquía de operadores lógicos. En caso de haber dos operadores iguales se
procede la operación de izquierda a derecha.
5) PALABRAS RESERVADAS
Son aquellas palabras que son elementos del lenguaje Basic, tales como las que forman parte de las
instrucciones, los operadores, etc.. Estas palabras no pueden ser usadas como identificadores. Las
palabras reservadas serán escritas en este libro con letras mayúsculas.
CAPÍTULO 5. ELEMENTOS DEL LENGUAJE
215
RESUMEN
Basic: lenguaje computacional de alto nivel, fácil de aprender que fue creado en el año de 1964 por
los norteamericanos G. Kemeny y Thomas E. Kurtz.
Palabras reservadas: son aquellas palabras que son elementos del lenguaje Basic, tales como las
que forman parte de las instrucciones, los operadores, etc. Estas palabras no pueden usarse como
identificadores.
Tipos de datos:
A) Numéricos: son datos cuyo contenido es una serie de dígitos (0-9) que en conjunto nos
proporcionan un valor numérico y que pueden ser precedidos por un signo de + (positivo) o (negativo). Con ellos se puede realizar operaciones aritméticas o de conteo.
B) Alfanuméricos: son datos cuyo contenido son letras del abecedario, números o caracteres
especiales, o bien una combinación de ellos. Estos datos no pueden ser usados para realizar
operaciones aritméticas.
Zonas de memoria: los datos, ya sean numéricos o alfanuméricos, se alojan en zonas de memoria
principal con el objeto de utilizarlos posteriormente. Estas zonas de memoria están formadas por un
nombre para su identificación y un contenido el cual será el dato que se.guarda en ellas. Se pueden
clasificar en:
A) Constantes: son zonas de memoria que guardan datos, los cuales no cambian durante toda la
fase de procesamiento de información.
B) Variables: son zonas de memoria cuyo contenido cambia durante la fase de procesamiento de
información.
Expresiones: son un conjunto de operadores y operandos que producen un valor. Un operador es
un símbolo o palabra que significa que se ha de realizar cierta acción entre uno o dos valores que son
llamados operandos. Existen tres tipos de operadores: asociativos, aritméticos, relaciónales y lógicos.
CAPÍTULO
6
MANEJO DE ARCHIVOS
OBJETIVOS
6.1 El alumno explicará las siguientes operaciones del manejo de archivos:
—Crear un programa
—Recuperar un programa
—Guardar un programa
—Imprimir un programa
—Ejecutar un programa
216
CAPÍTULO
6
MANEJO DE ARCHIVOS
Un archivo es una colección de información. Según el tipo de información que contienen los archivos,
se clasifican en:
1) archivos texto
2) archivos tipo programa
3) archivos de datos
El tipo de archivos en el que enfocaremos nuestro interés en este capítulo serán los archivos tipo
programa, cuyo contenido será un conjunto de instrucciones escritas en el lenguaje computacional
Quick Basic.
En este capítulo aprenderemos las instrucciones necesarias para interaccionar con un programa,
esto es, para crearlo, modificarlo, guardarlo o recuperarlo de disco y ejecutarlo.
PROCEDIMIENTO DE ENTRADA A QUICK BASIC
Estando en el prompt del sistema operativo, se deberá teclear Qbasic e inmediatamente aparecerá en
la pantalla una ventana como se muestra en la figura 6.1, a la que se deberá responder con cualquiera
de las opciones Entrar o ESC como se indica en la ventana.
INSTRUCCIONES DE MANEJO DE ARCHIVOS
El manejo de archivos tipo programa se realiza con la utilización del menú Archivo de la barra de
menúes que aparecen al seleccionar ESC en la ventana de bienvenida. Al seleccionar este menú
aparecen las siguientes opciones, como se puede apreciar en la figura 6.2.
a) Creando un programa
Para crear un programa se deberá seleccionar la opción Nuevo del menú Archivo. Después de
217
218
PARTE III.
PROGRAMACIÓN
Archivo Edición Ver Búsqueda Ejecutar Depurar Opciones Ayuda
Figura 6.1
Archivo Edición Ver Búsqueda Ejecutar Depurar Opciones Ayuda
Figura 6.2
Abrir
Figura 6.3
CAPÍTULO 6. MANEJO DE ARCHIVOS
219
Figura 6.4
seleccionar esta opción aparecerá una pantalla en blanco en la cual se podrá insertar un programa
utilizando el editor de textos que se incluye con Quick Basic.
b) Recuperando un programa de disco
Para recuperar un programa de disco será necesario ejecutar la opción Abrir... del menú Archivo
(véase Fig. 6.3).
En esta ventana será necesario escribir el nombre del programa que se desea editar o bien
seleccionarlo de la lista de archivos que se muestra. También existe la posibilidad de seleccionar
la unidad de disco en donde se pudiera encontrar el programa.
c) Guardando un programa en disco
Las opciones Guardar. . . y Guardar como. .. nos ayudarán a almacenar un programa en disco.
Si se ejecuta la opción Guardar. . . y es la primera vez que se almacena un programa, aparecerá
una ventana como la de la figura 6.4.
En dicha ventana será necesario escribir el nombre del programa, e indicar la unidad de disco,
en la que se desea que se almacene éste.
Figura 6.5
220
PARTE III.
PROGRAMACIÓN
Figura 6.6
d)
e)
Si se ejecuta la opción guardar y ya se le había dado nombre al programa, Quick Basic sólo
almacenará el programa.
La opción Guardar como... se utiliza para almacenar un programa bajo un nombre diferente
del que se le hubiera dado con la opción de Guardar. . . es una forma de obtener una copia del
programa. Si se ejecuta esta opción aparecerá una ventana como la de la figura 6.5.
A la cual se le deberá responder con el nombre y unidad de disco deseados.
Imprimiendo un programa
La opción Imprimir. . . del menú Archivo nos permitirá desplegar por impresora un programa.
Al ejecutar esta opción aparecerá una ventana como la de la figura 6.6. En la cual se le deberá
seleccionar cualquiera de las opciones indicadas.
Ejecutando un programa
Para ejecutar un programa debe emplearse la opción Ejecutar del menú principal de Quick Basic,
la cual puede ser vista en las figuras 6.1 y 6.2.
CAPÍTULO 6.
MANEJO DE ARCHIVOS
221
RESUMEN
Archivo: es una colección de información. Dependiendo del tipo de información que contienen los
archivos, se clasifican en archivos de datos, programas y textos.
Instrucciones para el manejo de programas:
El manejo de archivos tipo programa se lleva a cabo con la utilización del menú Archivo de la barra
de menúes que aparece en la ventana de bienvenida de Quick Basic.
a) Crear un programa
Para crear un programa se deberá seleccionar la opción Nuevo... del menú Archivo. Después de
seleccionar esta opción aparecerá una pantalla en blanco en la cual se podrá insertar un programa
utilizando el editor de textos que se incluye con Quick Basic.
b) Recuperar un programa de disco
Para recuperar un programa de disco será necesario ejecutar la opción Abrir... del menú Archivo.
En esta ventana será necesario escribir el nombre del programa que se desea editar o bien
seleccionarlo de la lista de archivos que se muestra. También existe la posibilidad de seleccionar
la unidad de disco en donde se pudiera encontrar el programa.
c) Guardar un programa en disco
Las opciones Guardar. . . y Guardar como. . . del menú Archivo nos ayudarán a almacenar un
programa en disco.
Si se ejecuta la opción Guardar. .. y ya se le había dado previamente nombre al programa,
Quick Basic sólo almacenará el programa.
La opción Guardar como. . . se utiliza para almacenar un programa bajo un nombre diferente
del que se le hubiera dado con la opción de Guardar...
d) Imprimir un programa
La opción Imprimir... del menú Archivo nos permitirá desplegar por impresora un programa.
e) Ejecutar un programa
La opción Ejecutar del menú principal de Quick Basic nos permite ejecutar el programa que esté
cargado en memoria en ese momento.
CAPÍTULO
7
INTERACCIÓN
USUARIO-PROGRAMA
OBJETIVOS
7.1 El alumno explicará los siguientes procesos iteractivos del usuario con el programa:
—Asignación
—Entrada de datos
—Salida de datos
—Comentarios
7.2 El alumno explicará el diseño de programas que sean amigables al usuario.
7.3 El alumno utilizará las instrucciones de iteracción del lenguaje Basic en la solución de problemas
de tipo secuencial.
222
CAPÍTULO
7
INTERACCIÓN
USUARIO-PROGRAMA
Son instrucciones que permiten al usuario tener comunicación con el programa, sea para proporcionarle datos de entrada u obtener datos de salida.
Las instrucciones de interacción usuario-programa se clasifican en:
a) Asignación
b) Entrada de datos
c) Salida de datos
A continuación definiremos las instrucciones útiles para la interacción usuario-programa; para
especificarlas haremos uso de la siguiente simbología:
(expresión)
La expresión que se encuentre dentro de este par de símbolos será
considerada opcional.
{ expresiónl/expresión2 }
Se puede optar entre cualquiera de las dos expresiones, pero se debe
incluir alguna de las dos.
expresión
Se debe incluir obligatoriamente.
a) ASIGNACIÓN
Instrucción: LET
Función:
223
224
PARTE III. PROGRAMACIÓN
Asignar a una variable un valor, ya sea el resultado de una expresión, el valor de una variable o
bien el de una constante. Formato:
(LET) variable = expresión
donde:
variable
es el nombre de la variable, en donde se va a almacenar el valor de la
expresión, expresión es la expresión cuyo valor será
almacenado en la variable.
Instrucción equivalente en algoritmo:
variable ← expresión
Bloque equivalente en simbología de diagramas de flujo:
Ejemplos;
1) a = 500
Al ejecutar esta instrucción la variable a toma el valor de 500.
2) LET a = 500
Al ejecutar esta instrucción la variable a toma el valor de 500.
Nótese que el formato de esta instrucción permite la utilización opcional de LET, por eso es
que este ejemplo hace exactamente lo mismo que el anterior.
3) promedio = (c1 + c2 + c3 ) / 3
Al ejecutar esta instrucción la variable promedio adquiere como valor el resultado de la
expresión que se encuentra del lado derecho del signo =.
4) nom$ = "Federico"
Al ejecutar esta instrucción la variable nom$ adquiere como valor el dato Federico.
5) nom$ = 5
Al ejecutar esta instrucción Quick Basic marcará un error, pues el tipo de la variable es distinto
al tipo del dato que se le intenta asignar. Lo correcto sería asignar un dato alfanumérico a la
variable nom$ o bien asignar el valor 5 a una variable de tipo numérica.
6) nom$ = ed
Al igual que en el ejemplo anterior, al ejecutar esta instrucción Quick Basic marcará un error,
pues el tipo de la variable es distinto al tipo del dato que se le intenta asignar. Lo correcto
sería asignar un dato alfanumérico a la variable nom$ o bien asignar el valor de la variable
ed a una variable de tipo numérica.
CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA
225
b) ENTRADA DE DATOS
Instrucción: INPUT
Función:
Durante la ejecución de un programa, permite la introducción de datos por medio del
teclado.
Formato:
INPUT (;) ( "mensaje" {;/,}) variable (.variable ). ..
donde:
mensaje
variable
es un texto asociado a los datos que se van a introducir,
es el nombre de la variable en donde se almacenará el dato introducido.
Instrucción equivalente en algoritmo:
PEDIR variable
Bloque equivalente en simbología de diagramas de flujo:
Cuando Quick Basic ejecuta la instrucción INPUT, se produce una pausa en la ejecución del
programa para permitir al usuario introducir los datos. En la pantalla aparece un signo de
interrogación si el mensaje se omitió, y si éste se incluyó entonces aparece el mensaje seguido de
un signo de interrogación. Para indicar fin de datos se debe oprimir la tecla <ENTER> o ←.
Ejemplos; 1)
INPUT ed
Al ejecutar esta instrucción en la pantalla aparece lo siguiente:
?__
Quick Basic hace una pausa esperando a que el usuario teclee algún valor, seguido de la tecla
<ENTER> en el momento en que lo haga la variable ed adquirirá ese valor.
2)
INPUT "Introduce tu edad"; ed
Al ejecutar esta instrucción en la pantalla aparece:
Introduce tu edad ?__
Quick Basic hace una pausa esperando a que el usuario teclee algún valor; en el momento en
que lo haga la variable ed adquirirá ese valor.
Obsérvese que la diferencia entre este ejemplo y el anterior es sólo en cuanto a la
226
PARTE III. PROGRAMACIÓN
comunicación que se establece con la utilización del mensaje. Aunque los dos ejemplos hacen
lo mismo en cuanto a que la variable ed toma un valor, este ejemplo hace mucho más claro
para el usuario que lo que se espera es que introduzca como entrada una edad.
3) INPUT "Introduce tu nombre"; nom$
Al ejecutar esta instrucción en la pantalla aparece:
Introduce tu nombre ? _
En el momento en que el usuario introduzca algún dato, la variable nom$ adquirirá ese valor.
Obsérvese que es importante que el nombre de la variable utilizado en la instrucción incluya
el signo $, ya que el tipo del dato es alfanumérico.
c) SALIDA DE DATOS
Instrucción: PRINT
Función:
Permite desplegar datos en la pantalla.
Formato:
{ PRINT/ ? } (lista de expresiones ) ( { , / ; } )
donde:
lista de expresiones es un conjunto de expresiones numéricas o alfanuméricas
separadas por comas o puntos y comas.
Instrucción equivalente en algoritmo: DESPLEGAR lista de expresiones
Bloque equivalente en simbología de diagramas de flujo:
Cuando Quick Basic ejecuta la instrucción PRINT, se despliega en la pantalla la lista de expresiones especificada.
Ejemplos;
1)
PRINT ed
Al ejecutar esta instrucción en la pantalla aparece el valor de la variable ed.
2) ?ed
CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA
227
Al ejecutar esta instrucción en la pantalla aparece el valor de la variable ed.
Nótese que es equivalente utilizar la instrucción PRINT que utilizar el signo ?.
3) PRINT "Tu edad es"; ed
Al ejecutar esta instrucción en la pantalla aparece el mensaje Tu
edad es seguido del valor de la variable ed.
4) PRINT 100+ 100
Al ejecutar esta instrucción en la pantalla aparece el resultado de la expresión, que es 200.
5) PRINT "100 + 100 ="; 100+100
Al ejecutar esta instrucción en la pantalla aparece el mensaje 100 + 100 = seguido del
resultado de la expresión, que es 200.
6) PRINT "Mi nombre es"
PRINT "María"
Al ejecutar este conjunto de instrucciones en la pantalla aparece lo siguiente:
Mi nombre es
María
Después de que Quick Basic ejecuta la instrucción PRINT coloca el cursor en la línea
siguiente. Por eso es que el mensaje María aparece en la siguiente línea.
7) PRINT "Mi nombre es"
PRINT
PRINT "María"
Al ejecutar estas instrucciones en la pantalla aparece lo siguiente:
Mi nombre es
María
Cuando Quick Basic ejecuta la instrucción PRINT y la lista de expresiones se omite sólo
desplegará una línea en blanco y colocará el cursor en la línea siguiente. Por eso en este
ejemplo entre los dos mensajes aparece una línea en blanco.
8) PRINT "Mi nombre es ";
PRINT "María"
Al ejecutar estas instrucciones aparece lo siguiente en la pantalla:
Mi nombre es María
Cuando un PRINT termina con el símbolo ; no coloca el cursor en la línea siguiente, sino que
el cursor permanece en la posición siguiente al último carácter desplegado.
Comentarios
Instrucción: REM
228
PARTE III. PROGRAMACIÓN
Función:
Permite incluir mensajes no ejecutables dentro de un programa.
Formato:
{ REM / ' } (mensaje)
donde:
mensaje
es un texto que el programador incluye al programa como referencia.
Ejemplo:
REM Este programa obtiene el promedio de tres calificaciones
Aplicación de las instrucciones necesarias para la interacción usuario-programa
Problemas resueltos
PROBLEMA 1
Aplicar los primeros 5 pasos de la metodología de la solución de problemas por medio de la
computadora para encontrar el área de un círculo de radio 5.
Paso 1. Definición del problema:
Encontrar el área de un círculo de radio 5.
Paso 2. Planeación de la solución:
El área de un círculo está dada por la fórmula:
área = Pi * radio^2
Si, por un lado, sabemos que la constante Pi es igual a 3.1416, y por otro, que el radio del círculo
es de 5, al sustituir estos valores en la fórmula obtendríamos:
área = 3.1416 * 5^2
Al aplicar esta fórmula obtendremos la solución. Nos podemos percatar de que tenemos todos los
datos para poder solucionar nuestro problema, por lo que no requeriremos de datos de entrada.
SALIDA: Área del círculo
ENTRADA: Ninguna
DATOS ADICIONALES: Ninguno
SOLUCIÓN: Aplicar la fórmula área = 3.1416 X 5^2
Paso 3: Algoritmo
1.
2.
área ←3.1416 * 5 ^2
DESPLEGAR área
Paso 4. Diagrama de flujo (véase Fig. 7.1):
CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA
229
Figura 7.1
Paso 5. Codificación y edición del programa:
La codificación es la siguiente:
REM Programa que obtiene el área de un círculo de radio 5
área = 3.1416 * 5 ^ 2
PRINT "El área del círculo con radio 5 es ": área
END
NOTA: Un programa escrito en Quick Basic deberá incluir la instrucción END para indicar el FIN del
programa.
1)
2)
3)
4)
La edición de este programa consistiría en seguir los siguientes pasos:
Estando en el sistema operativo teclear Qbasic para entrar a Quick Basic.
Seleccionar la opción ESC de la pantalla de bienvenida para ir a la barra de menúes.
Seleccionar la opción Nuevo del menú Archivo.
Escribir el programa utilizando el editor de Quick Basic.
NOTA: Los pasos correspondientes a la edición del programa serán los mismos para todos los problemas.
Paso 6. Pruebas y depuración:
La fase de pruebas consiste en dos fases:
—La primera es haciendo una prueba de escritorio como se había hecho en el capítulo 4, que consiste
en seguir el algoritmo o diagrama de flujo y darle valores a las variables para verificar su
funcionalidad.
En este caso la primera fase de pruebas quedaría así:
área ← 78.54
Se despliega 78.54
230
PARTE III. PROGRAMACIÓN
—La segunda es ejecutando el programa para verificar si se logran los resultados buscados y si la
presentación en la ejecución del programa nos es agradable. Para realizar esta prueba basta con
ejecutar la opción Empieza del menú Ejecutar y en la pantalla se visualizaría lo siguiente:
El área del círculo con radio 5 es: 78.54
La depuración del programa consiste en corregir lo que sea necesario para lograr que el programa
logre el objetivo buscado.
En los siguientes problemas resueltos se realizará la fase de codificación de los problemas resueltos
2, 3, 4 y 5 incluidos en los problemas secuenciales del capítulo 4.
Se omitirán algunos pasos de la metodología debido a que ya fueron estudiados.
PROBLEMA 2
Modificar el problema anterior para que sea capaz de calcular el área de un círculo de cualquier radio
requerido.
Paso 1. Definición del problema:
Encontrar el área de un círculo con un radio cualquiera.
Paso 4. Diagrama de flujo (véase Fig. 7.2):
Paso 5. Codificación y edición del programa:
Figura 7.2
CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA
231
El programa correspondiente al diagrama de flujo anterior es el siguiente:
Programa 1
REM Programa que obtiene el área de un círculo de un radio cualquiera
INPUT radio
área = 3.1416 * radio^2
PRINT área
END
Este programa también podría ser escrito de la siguiente manera:
Programa 2
REM Programa que obtiene el área de un círculo de un radio cualquiera
INPUT "Introduce el radio del círculo"; radio
área = 3.1416 * radio ^ 2
PRINT "El área es"; área
END
La diferencia entre los dos programas mostrados consiste en la presentación, pues el segundo
programa, al utilizar mensajes en las entradas y salidas, logra que el usuario tenga una idea de qué
datos se espera introduzca como entradas y qué resultados son los que el programa arroja como
salidas. El segundo programa se considera un programa amigable para el usuario.
Paso 6. Pruebas y depuración:
Primera fase de pruebas:
Prueba 1 para el programa 1
radio ←5 área ← 78.54
Se despliega 78.54
Prueba 1 para el programa 2
radio ← 5
área ← 78.54
Se despliega 78.54
Prueba 2 para el programa 1
radio ← 8
área ←201.0624
Se despliega 201.0624
Prueba 2 para el programa2
radio ←8
área ←201.0624
Se despliega 201.0624
232
PARTE 111. PROGRAMACIÓN
Segunda fase de pruebas:
Prueba 1 para el programa 1
?5
78.54
Prueba 1 para el programa 2
Introduce el radio del círculo ? 5
El área es 78.54
Prueba 2 para el programa 1
?8
201.0624
Prueba 2 para el programa 2
Introduce el radio del círculo ? 8
El área es 201.0624
En esta fase de pruebas se puede observar claramente cómo el programa 2 es más amigable que
el programa 1 por la utilización de mensajes asociados a las instrucciones INPUT y PRINT.
PROBLEMA 3
Determinar el área y perímetro de un rectángulo cualquiera.
Paso 1. Definición del problema:
Encontrar el área y perímetro de un rectángulo cualquiera.
Paso 4. Diagrama de flujo (véase Fig. 7.3):
Paso 5. Codificación y edición del programa:
El programa correspondiente al diagrama de flujo anterior es el siguiente:
Programa 1
REM Programa que obtiene el perímetro y área de un rectángulo
INPUT "Da los lados del rectángulo"; lado1, Iado2
perímetro = lado1* 2 + Iado2*2
área = lado1 * Iado2
PRINT "El perímetro y área son"; perímetro, área
END
Programa 2
REM Programa que obtiene el perímetro y área de un rectángulo
INPUT "Da el primer lado del rectángulo"; lado1
INPUT "Da el segundo lado del rectángulo"; Iado2
CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA
233
Figura 7.3
perímetro = lado1 * 2 + Iado2 * 2
área = lado1 * Iado2
PRINT "El perímetro del rectángulo es"; perímetro
PRINT "El área del rectángulo es"; área
END
Obsérvese cómo las instrucciones INPUT y PRINT del programa 1 se fraccionaron en dos
instrucciones cada una; para lograr un programa más amigable al tener un mensaje por cada dato de
entrada, y un mensaje por cada salida. De cualquier modo el objetivo se logra con los dos programas.
Ejercicio: Realizar al menos una vez el paso de pruebas y depuración incluyendo las dos fases
de pruebas.
PROBLEMA 4
Obtener el promedio de edades de 3 personas.
Paso 1. Definición del problema:
Obtener el promedio de edades de 3 personas.
Paso 4. Diagrama de flujo (véase Fig. 7.4):
234
PARTE III. PROGRAMACIÓN
Paso 5. Codificación y edición del programa:
El programa correspondiente al diagrama de flujo anterior es el siguiente:
REM Programa que obtiene el promedio de 3 edades
INPUT "Da la primera edad"; edad1 INPUT "Da la
segunda edad"; edad2 INPUT "Da la tercera"; edad3
promedio = [ edad1 + edad2 + edad3 ] / 3
PRINT "El promedio de las tres edades es"; promedio
END
Ejercicio: Realizar al menos una vez el paso de pruebas y depuración, incluyendo las dos fases
de pruebas.
PROBLEMA 5
Paso 1. Definición del problema:
Suponga que un individuo decide invertir su capital en un banco y desea saber cuánto dinero ganará
después de un mes si el banco paga a razón de 2% mensual.
Paso 4. Diagrama de flujo (véase Fig. 7.5):
CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA
235
Figura 7.5
Paso 5. Codificación y edición del programa:
El programa correspondiente al diagrama de flujo anterior es el siguiente:
REM Reinversión mensual
INPLJT "Introduce el capital"; ci
g = ci X 0.02
PRINT "La ganancia después de un mes será de:" ;g
END
Ejercicio: Realizar al menos una vez el paso de pruebas y depuración incluyendo las dos fases
de pruebas.
Problemas propuestos
Aplicar los pasos 5) Codificación y edición del programa y 6) Pruebas y depuración, en los problemas
propuestos incluidos en los problemas secuenciales del capítulo 4.
236
PARTE III. PROGRAMACIÓN
RESUMEN
Las instrucciones de interacción usuario-programa son aquellas que permiten al usuario tener
comunicación con el programa ya sea para proporcionarle datos de entrada u obtener datos de salida.
Las instrucciones de interacción usuario-programa se clasifican en:
a) Asignación
Instrucción LET: asignar a una variable un valor, ya sea el resultado de una expresión, el valor
de una variable o bien el de una constante.
b) Entrada de datos
Instrucción INPUT: durante la ejecución de un programa, permite la introducción de datos por
medio del teclado.
c) Salida de datos
Instrucción PRINT: permite desplegar datos a través de la pantalla.
Comentarios
Instrucción REM: permite incluir mensajes no ejecutables dentro de un programa.
CAPÍTULO
8
CONTROL
DE EJECUCIÓN
OBJETIVOS
8.1
8.2
8.3
8.4
El alumno definirá las estructuras de ejecución condicional.
El alumno definirá las estructuras de ejecución incondicional.
El alumno definirá las estructuras repetitivas.
El alumno aplicará las instrucciones de control de ejecución del lenguaje Basic en la solución de
problemas
8.4.1 Selectivos
a) Simples
b) Compuestos
8.4.2 Repetitivos
—Simples
a) Con un número indeterminado de iteraciones
b) Con un número determinado de iteraciones
237
CAPÍTULO
8
CONTROL
DE EJECUCIÓN
Las instrucciones de control de ejecución se clasifican en:
1) Control de ejecución condicional
2) Control de ejecución incondicional
3) Estructuras repetitivas
8a) CONTROL DE EJECUCIÓN CONDICIONAL
Instrucción: IF. . . THEN. . . ELSE
Función: Permite la ejecución de un conjunto de instrucciones dependiendo del resultado de la
evaluación de una condición dada. Esta instrucción es necesaria para resolver problemas de tipo selectivo, tanto simples como compuestos.
Equivalencias:
En algoritmo:
SI condición ENTONCES
Conjunto de acciones 1
DE OTRA FORMA
Conjunto de acciones 2
En bloque de diagrama de flujo (véase Fig. 8.1):
Formatos:
238
CAPÍTULO 8. CONTROL DE EJECUCIÓN
239
Figura 8.1
Formato 1:
IF condición THEN
Conjunto de instrucciones 1
(ELSE
Conjunto de instrucciones 2)
ENDIF
Formato 2:
IF condición THEN Conjunto de instrucciones 1 (ELSE Conjunto de instrucciones 2)
En este libro emplearemos únicamente el formato 1, pues resulta ser el más claro y por ende el que
más ayuda en la fase de mantenimiento de los programas.
Cuando la evaluación de la condición resulta verdadera se evalúa el conjunto de instrucciones 1.
Si resulta falsa se ejecuta el conjunto de instrucciones 2. El conjunto de instrucciones 1 equivale a la
parte derecha o verdadera de un bloque condicional de diagrama de flujo, mientras que el conjunto
de instrucciones 2, a la parte izquierda o falsa, y como ésta no siempre existe, está marcada como
opcional en el formato de la instrucción.
Se recomienda ampliamente que tanto el conjunto de acciones 1 como el conjunto de acciones 2
se escriban indentados (con sangría) con respecto al IF, ELSE y END IF.
Observe que lo que delimita a la parte verdadera de la instrucción es el renglón en donde se
encuentra el IF. . . THEN y el renglón donde se encuentra el ELSE.
Lo que delimita la parte falsa es el ELSE y el END IF.
El END IF es equivalente al pequeño círculo delimitador del fin de un bloque selectivo en diagrama
de flujo.
Ejemplos:
1) Bloque (véase Fig. 8.2).
Instrucción:
IFedad> = 18THEN
PRINT "Es mayor de edad"
END IF
2) Bloque (véase Fig. 8.3).
240
PARTE III. PROGRAMACIÓN
Figura 8.2
Figura 8.3
Instrucción:
IF edad> = 18 THEN
PRINT "Es mayor de edad"
ELSE
PRINT "Es menor de edad"
END IF
3) Bloque (véase Fig. 8.4).
Instrucción:
IF nombre$="ARTURO" AND color$="ROJO"THEN
PRINT "El Sr. Arturo tiene 20% de descuento"
total=subtotal X 0.8
ELSE
total=subtotal
END IF
A continuación se presentarán los pasos finales de la metodología para la solución de problemas
de los problemas selectivos, tanto simples como compuestos.
CAPÍTULO 8. CONTROL DE EJECUCIÓN
241
nombre$ = "ARTURO
AND
"El Sr. Arturo tiene
20% de descuento'
Figura 8.4
Problemas resueltos
PROBLEMA 1
Determinar si un alumno aprueba o reprueba un curso, sabiendo que un alumno aprueba si su promedio
de tres calificaciones es mayor o igual a 7, y reprueba en caso contrario.
Paso 4. Diagrama de flujo (véase Fig. 8.5).
Paso 5. Codificación y edición del programa:
REM Obtener promedio de tres calificaciones y decir si es aprobatorio o no
INPUT "Primera calificación";c1
INPUT "Segunda calificación";c2
INPUT 'Tercera calificación";c3
p= [c1+c2+c3]/3
IF p>=7THEN
PRINT "El alumno está aprobado"
ELSE
PRINT "El alumno está reprobado"
ENDIF END
Paso 6. Pruebas y depuración:
Segunda fase:
242
PARTE III. PROGRAMACIÓN
Figura 8.5
Prueba 1
Primera calificación? 8
Segunda calificación? 9
Tercera calificación? 9
El alumno está aprobado
Prueba 2
Primera calificación? 7
Segunda calificación? 6
Tercera calificación? 6
El alumno está reprobado
PROBLEMA 2
En un almacén se hace un 20% de descuento a aquellos clientes cuya compra supere los $1000. ¿Cuál
será la cantidad de dinero que pagará una persona por su compra?
CAPÍTULO 8. CONTROL DE EJECUCIÓN
Figura 8.6
Paso 4. Diagrama de flujo (véase Fig. 8.6).
Paso 5. Codificación y edición del programa:
REM Descuento en un almacén para el que compre más de $1000
INPUT "Valor de la compra";compra
IF compra>1OOOTHEN
pago=compra*O.8
ELSE
pago=compra
ENDIF
PRINT "El pago es:";pago
END
243
244
PARTE III. PROGRAMACIÓN
Paso 6. Pruebas y depuración:
Segunda fase:
Prueba 1
Valor de la compra? 2500
El pago es: 2000
Prueba 2
Valor de la compra? 700
El pago es: 700
Prueba 3
Valor de la compra? 1000
El pago es: 1000
PROBLEMA 3
Un obrero necesita calcular su salario semanal, el cual se obtiene de la siguiente manera:
—Si trabaja 40 horas o menos se le paga $4 por hora.
—Si trabaja más de 40 horas se le paga $4 por cada una de las primeras 40 horas y $6 por cada
hora extra.
Paso 4. Diagrama de flujo (véase Fig. 8.7). Paso
5. Codificación y edición del programa:
REM Obtención del salario de un obrero con horas extras
INPUT "Número de horas trabajadas";ht
IF ht>40 THEN
he=ht-40
s=he * 6 + 40 * 4
ELSE
s= ht * 4
END IF
PRINT "El salario semanal es:";s
END
Paso 6. Pruebas y depuración:
Segunda fase:
Prueba 1
Número de horas trabajadas? 38
El salario semanal es: 152
CAPÍTULO 8. CONTROL DE EJECUCIÓN
245
Figura 8.7
Prueba 2
Número de horas trabajadas? 45
El salario semanal es: 190
PROBLEMA 4
Un hombre desea saber cuánto dinero se generará por concepto de intereses sobre la cantidad que
tiene en inversión en el banco. Él decidirá reinvertir los intereses siempre y cuando éstos excedan de
$7000, y en ese caso desea saber cuánto dinero tendrá finalmente en su cuenta.
246
PARTE 111.
PROGRAMACIÓN
Figura 8.8
Paso 4. Diagrama de flujo (véase Fig. 4.8).
Paso 5. Codificación y edición del programa:
REM Inversión en un banco
INPUT "Porcentaje de interés";p
INPUT "Cantidad en inversión";ci
¡=ci * p/1OO
CAPÍTULO 8. CONTROL DE EJECUCIÓN
247
PRINT "lntereses:";¡
IF i>7OOO
cf=ci+i
PRINT "Cantidad final en la cuenta:";cf
END IF
END
Paso 6. Pruebas y depuración:
Segunda fase:
Prueba 1
Porcentaje de interés? 5
Cantidad en inversión? 70 000
Intereses: 3500
Prueba 2
Porcentaje de interés? 7
Cantidad en inversión? 120 000
Intereses: 8400
Cantidad final en la cuenta: 128 400
PROBLEMA 5
Una persona enferma que pesa 70 kg se encuentra en reposo y desea saber cuántas calorías consume
su cuerpo durante todo el tiempo que realice una misma actividad. Las actividades que tiene permitido
realizar son únicamente dormir o estar sentado en reposo. Los datos que tiene son que estando dormido
consume 1.08 calorías por minuto y estando sentado en reposo consume 1.66 calorías por minuto.
Paso 4. Diagrama de flujo (véase Fig. 8.9).
Paso 5. Codificación y edición del programa:
REM Calorías que gasta un enfermo
INPUT “Tipo de actividad";a$
INPUT "Minutos que duró la actividad";t
IF a$="DORMIDO"THEN
cg=1.BBXt
ELSE
cg=1.OSX t
END IF
PRINT "Calorías gastadas";cg
END
Paso 6. Pruebas y depuración:
248
PARTE III. PROGRAMACIÓN
Figura 8.9
Segunda fase:
Prueba 1
Tipo de actividad? DORMIDO
Minutos que duró la actividad? 100
Calorías gastadas: 166
Prueba 2
Tipo de actividad? SENTADO
Minutos que duró la actividad? 100
Calorías gastadas: 108
PROBLEMA 6
CAPÍTULO 8. CONTROL DE EJECUCIÓN
249
Una empresa quiere hacer una compra de varias piezas de la misma clase a un fabricante de
refacciones. La empresa, dependiendo del monto total de la compra, decidirá qué hacer para pagar al
fabricante.
Si el monto total de la compra excede de $500 000 la empresa tendrá la capacidad de invertir de
su propio dinero un 55% del monto de la compra, deberá pedir prestado al banco un 30% y el resto
lo pagará solicitando un crédito al fabricante.
Si el monto total de la compra no excede de $500 000 la empresa tendrá capacidad de invertir de
su propio dinero un 70% y el restante 30% lo pagará solicitando crédito al fabricante.
El fabricante cobra por concepto de intereses un 20% sobre la cantidad que se le pague a crédito.
La empresa necesita determinar: cuánto dinero tendrá que invertir de sus propios fondos, si hay
necesidad, cuánto deberá pedir prestado al banco, cuánto tendrá que pagar a crédito y cuánto por
concepto de los intereses que se generen en el crédito.
Paso 4, Diagrama de flujo (véase Fig. 8.10). Paso
5. Codificación y edición del programa:
REM Presupuesto de compra de una empresa
INPUT "Número de piezas";np
NPUT "Costo de cada pieza";cu
mt=np * cu
IF mt>500000 THEN
ci=mt * 0.55
cc=mt* 0.15
cpb=mt * 0.3
PRINT "Cantidad a pedir al banco:"; cpb
ELSE
ci=mt* 0.7
cc=mt* 0.3
END IF
i=cc* 0.2
PRINT "Cantidad que invierte la empresa:";ci
PRINT "Cantidad a pagar a crédito";cc
PRINT "lntereses:";¡
END
Ejercicio: Realizar la segunda fase del paso de pruebas y depuración.
PROBLEMA 7
Determinar la cantidad de dinero que recibirá un trabajador por concepto de las horas trabajadas en
una empresa, sabiendo que cuando las horas que trabajó exceden de 40, el resto se convierte en horas
extras y que éstas se pagan al doble de una hora normal cuando no exceden de 8; cuando las horas
extras exceden de 8 se pagan las primeras 8 al doble de lo que se paga por una hora normal y el resto
al triple de lo de una normal.
250
PARTE III. PROGRAMACIÓN
Figura 8.10
Paso 4. Diagrama de flujo (véase Fig. 8.11).
Paso 5. Codificación y edición del programa:
CAPÍTULO 8. CONTROL DE EJECUCIÓN
251
pe ← ph * 2 * 8 + ph * 3 * het
Figura 8.11
REM Salario de un trabajador con horas normales, dobles y triples
INPUT "Horas trabajadas";ht
INPUT "Pago por hora normal";ph
252
PARTE III. PROGRAMACIÓN
IF ht>40 THEN
he=ht-40
IF he>8 THEN
het=he-8
pe=ph * 2 * 8+ph * 3 * het
ELSE
pe=ph*2*he
END IF
pt=ph*4O+pe
ELSE
pt=ph*ht
ENDIF
PRINT "Pago del trabajador:";pt
END
Paso 6. Pruebas y depuración:
Segunda fase:
Prueba 1:
Horas trabajadas? 38 Pago
por hora normal? 2 Pago
del trabajador: 76
Prueba 2:
Horas trabajadas? 45 Pago
por hora normal? 2 Pago
del trabajador: 100
Prueba 3:
Horas trabajadas? 50 Pago
por hora normal? 2 Pago
del trabajador: 124
PROBLEMA 8
Calcular la utilidad que un trabajador recibe en el reparto anual de utilidades si éste se le asigna como
un porcentaje de su salario mensual, dependiendo del tiempo que tenga trabajando en la empresa de
acuerdo con la siguiente tabla:
TIEMPO
menos de 1 año
1 año o más y menos de 2 años
2 años o más y menos de 5 años
UTILIDAD
5% del salario
7% del salario
10% del salario
CAPÍTULO 8. CONTROL DE EJECUCIÓN
TIEMPO
UTILIDAD
5 años o más y menos de 10 años
10 años o más
Figura 8.12
15% del salario
20% del salario
253
254
PARTE III.
PROGRAMACIÓN
Paso 4. Diagrama de flujo (véase Fig. 8.12):
Paso 5. Codificación y edición del programa:
REM Reparto de utilidades
INPUT "Tiempo que tiene trabajando";t
INPUT "Salario";s
IF t<1 THEN
u=s *0.05
ELSE
IF t<2 THEN
u=s *0.07
ELSE
IF t<5 THEN
u=s*0.1
ELSE
IF t<1OTHEN
u=s *0.15
ELSE
u=s *0,2
END IF
END IF
END IF
END IF
PRINT "Utilidad:";u
END
Paso 6. Pruebas y depuración:
Segunda fase:
Prueba 1:
Supongamos que una persona tiene 1/2 año trabajando y gana $1000 mensuales.
Tiempo que tiene trabajando? 0.5
Salario? 1000
Utilidad: 50
Prueba 2:
Tiempo que tiene trabajando? 15
Salario? 5000
Utilidad: 1000
PROBLEMA 9
En una tienda de descuento se tiene una promoción mediante la cual se hace un descuento sobre el
valor de la compra total, dependiendo del color de la bolita que el cliente saque al efectuar el pago
en caja. Si la bolita es blanca no se le hará descuento; si es verde se le hará un 10% de descuento; si
CAPÍTULOS. CONTROL DE EJECUCIÓN
255
es amarilla un 25%; si es azul un 50%, y si es roja un 100%. Determinar la cantidad final que un
cliente deberá pagar por su compra. Se sabe que sólo hay bolitas de los colores mencionados.
Paso 4. Diagrama de flujo (véase Fig. 8.13).
Figura 8.13
256
PARTE III.
PROGRAMACIÓN
Paso 5. Codificación y edición del programa:
REM Descuento según el color de la bolita
INPUT "Monto de la compra";m
INPUT "Color de la bolita";b$
IF b$ = "BLANCA" THEN
d=O
ELSE
IF b$=”VERDE"THEN
d=m*0.1
ELSE
IF b$= "AMARILLA" THEN
d=m*0.25
ELSE
IF b$= "AZUL" THEN
d=m*0.5
ELSE
d=m
END IF
END IF
END IF
END IF
cp=m-d
PRINT "Cantidad a pagar:";cp
END
Paso 6. Pruebas y depuración:
Segunda fase:
Prueba 1:
Monto de la compra? 500
Color de la bolita? BLANCA
Cantidad a pagar: 500
Prueba 2:
Monto de la compra? 200 Color de
la bolita? AMARILLA Cantidad a
pagar: 150
Prueba 3:
Monto de la compra? 350
Color de la bolita? ROJA
Cantidad a pagar: 0
CAPÍTULO 8. CONTROL DE EJECUCIÓN
257
PROBLEMA 10
Una empresa que comercializa cosméticos tiene organizados a sus vendedores en tres departamentos
y ha implementado un programa de incentivos para incrementar la productividad de éstos. El gerente,
al final del mes, pide el global de las ventas de los tres departamentos, y aquellos que excedan el 33%
de las ventas totales se les paga una cantidad extra equivalente al 20% de su salario mensual. Si todos
los vendedores ganan lo mismo, determinar cuánto recibirán los vendedores de los tres departamentos
al finalizar el mes.
Paso 4. Diagrama de flujo (véase Fig. 8.14):
Paso 5. Codificación y edición del programa:
REM Incentivos para los departamentos de una empresa
INPUT “Venta del departamento 1 ";v1
INPUT "Venta del departamento 2";v2
INPUT "Venta del departamento 3";v3
INPUT "Salario";s
tv=v1+v2+v3
P=tv * 0.33
IFv1>p THEN
cd1 =s+s * o.2
ELSE
cd1 =s
END IF
IF v2>p THEN
cd2=s+s * o.2
ELSE
cd2=s
END IF
IF v1 >p THEN
c d3=s+s * 02
ELSE
cd3=s
ENDIF
PRINT "Cantidad a recibir para el departamento 1:";cd1
PRINT "Cantidad a recibir para el departamento 2:";cd2
PRINT "Cantidad a recibir para el departamento 3:";cd3
END
Paso 6. Pruebas y depuración:
Segunda fase:
Prueba:
Venta del departamento 1? 32 000
258
PARTE III.
PROGRAMACIÓN
Figura 8.14
Venta del departamento 2? 38 000
Venta del departamento 3? 30 000
Salario? 1500
CAPÍTULO 8. CONTROL DE EJECUCIÓN
259
Cantidad a recibir para el departamento 1: 1500
Cantidad a recibir para el departamento 2: 1800
Cantidad a recibir para el departamento 3: 1500
PROBLEMA 11
El IMSS requiere hacer una clasificación de las personas que se jubilan en 1992. Existen tres tipos
de jubilaciones: por edad, por antigüedad joven y por antigüedad adulta.
Las personas que entran al tipo de jubilación por edad deben tener 60 años o más y una antigüedad
en su empleo de menos de 25 años.
Las personas que entran al tipo de jubilación por antigüedad joven deben tener menos de 60 años
y una antigüedad en su empleo de 25 años o más.
Las personas que entran al tipo de jubilación por antigüedad adulta deben tener 60 años o más y
una antigüedad en su empleo de 25 años o más.
Determinar en qué tipo de jubilación entraría una persona.
Paso 4. Diagrama de flujo (véase Fig. 8.15):
Paso 5. Codificación y edición del programa:
REM Jubilaciones
INPUT "Edad";ed
INPLJT "Antigüedad";ant
IF ed>=6O AND ant<25 THEN
PRINT "La jubilación es por edad"
ELSE
IF ed>=60 AND ant>25 THEN
PRINT "La jubilación es por antigüedad adulta"
ELSE
IF ed<6O AND ant>25 THEN
PRINT "La jubilación es por antigüedad joven"
ELSE
PRINT "No tiene por qué jubilarse"
END IF
END IF
END IF
END
Paso 6. Pruebas y depuración:
Segunda fase:
Prueba J:
Edad? 65
Antigüedad? 30
La jubilación es por antigüedad adulta
260
PARTE III.
PROGRAMACIÓN
"La jubilación es
por antigüedad
adulta"
Figura 8.15
Prueba
2:
Edad?
55
Antigüedad? 20
CAPÍTULO 8. CONTROL DE EJECUCIÓN
261
No tiene por qué jubilarse
Problemas propuestos
Terminar la metodología para la solución de problemas para la sección de problemas propuestos
selectivos simples y compuestos del capítulo 4.
8b) CONTROL DE EJECUCIÓN INCONDICIONAL
Instrucción: GOTO
Función: Brincar incondicionalmente a otra parte del programa marcada con una etiqueta.
Equivalencias:
En algoritmo:
IR al paso X
En bloque de diagrama de flujo:
Formato:
GOTO etiqueta
Esta instrucción sirve para continuar la secuencia de ejecución de un programa en otro punto del
mismo, marcado con una etiqueta.
Para crear una etiqueta se deben seguir las mismas reglas empleadas para dar nombre a variables.
En el punto de brinco la etiqueta debe tener el símbolo de dos puntos (:) al final.
Ejemplo:
1)
INPUT x$
A:
INPUT y$
GOTO A
En este punto se aprecia cómo la variable x$ es pedida una vez y la variable y$ es pedida más de
una vez; de hecho en un número infinito de veces, debido al uso de la instrucción GOTO.
El uso de la instrucción GOTO va en contra de las técnicas de programación estructurada que
hemos venido usando a lo largo del libro; por lo tanto no recomendamos usarla a menos que se use
en combinación con la instrucción IF. . . THEN. . . ELSE para la codificación de ciclos como un
número indeterminado de iteraciones, lo cual veremos a continuación.
262
PARTE III. PROGRAMACIÓN
8c) ESTRUCTURAS REPETITIVAS: COMBINACIÓN DE LAS
INSTRUCCIONES IF... THEN... ELSE Y GOTO
Esta combinación es usada para codificar ciclos con un número indeterminado de iteraciones.
Recordemos que estos ciclos tienen la siguiente estructura:
1.
2.
3.
C
PEDIR mas$
SI mas$="NO" ENTONCES
IR al paso 4
DE OTRA FORMA
IR al paso 1
4. X
En donde C es el cuerpo del ciclo.
El programa correspondiente puede quedar de la siguiente forma:
A:
C
INPUT "Más iteracciones (S/N)"; mas$
IF mas$="NO" THEN
GOTOB
ELSE
GOTO A
END IF B:
Puede observarse que en la parte falsa de la condición, que es cuando se quiere realizar otra
iteración, con el GOTO A se brinca al punto en donde comienza el cuerpo del ciclo. En caso de que
no se quieran más iteraciones se ejecuta el GOTO B y por lo tanto continúa con la instrucción siguiente
al IF, por lo cual se da término al ciclo.
A continuación se resolverán los problemas repetitivos simples con un número indeterminado de
iteraciones, para los cuales emplearemos la combinación IF... THEN... ELSE - GOTO.
Problemas resueltos
PROBLEMA 1
En una tienda de descuento las personas que van a pagar por el importe de su compra llegan a la caja
y sacan una bolita de color que les dirá qué descuento tendrán sobre el total de su compra.
Determinar la cantidad que pagarán cada uno de los clientes desde que la tienda abre hasta que
cierra.
Se sabe que si el color de la bolita es roja el cliente obtendrá un 40% de descuento. Si el color es
amarillo obtendrá un 25% y si es blanca no obtendrá descuento.
CAPÍTULO 8. CONTROL DE EJECUCIÓN
263
Paso 4. Diagrama de flujo (véanse Figs. 8.16 y 8.17).
Paso 5. Codificación y edición del programa:
Dado que aún no hemos visto algunas instrucciones necesarias para poder tener un programa dividido
en procesos, tendremos a continuación que integrar el proceso CLIENTE al programa principal.
Observe que se ha remarcado el principio y fin de este proceso entre comentarios.
REM Descuentos a clientes durante un día según bolita que saquen
A:
REM Comienza proceso del CLIENTE
INPUT "Color de la bolita";color$
INPUT "Total de la compra";tsd
IF color$="ROJA" THEN
tcd=tsd * 0.6
ELSE
IF color$="AMARILLA" THEN
tcd=tsd * 0.75
ELSE
tcd=tsd
END IF
ENDIF
PRINT 'Total con descuento:";tcd
REM Termina proceso del CLIENTE
INPUT "Otro cliente más (SI/NO)";mas$
IF mas$="NO" THEN
GOTO B
ELSE
GOTO A
END IF
B:
END
Paso 6. Pruebas y depuración:
Segunda fase:
Prueba:
Color de la bolita? AMARILLA
Total de la compra? 300
Total con descuento: 225
Otro cliente más (SI/NO)? SI
Color de la bolita? ROJA Total
de la compra? 200
Total con descuento: 120
264
PARTE III. PROGRAMACIÓN
Figura 8.16
Figura 8.17
CAPÍTULO 8. CONTROL DE EJECUCIÓN
265
Otro cliente más (SI/NO)? SI
Color de la bolita? BLANCA
Total de la compra? 150
Total con descuento: 150
Otro cliente más (SI/NO)? NO
PROBLEMA 2
En un supermercado un ama de casa que está de compras va metiendo en su carrito los artículos que
toma de los estantes. La mujer quiere asegurarse de que el cajero le cobre bien lo que ella ha comprado,
por lo que cada vez que compra un artículo distinto anota su precio, junto con la cantidad de artículos
iguales que ha comprado y determina cuánto dinero se ha gastado en ese artículo y a esto le suma
todo lo que se vaya gastando en los demás artículos hasta que decide que ya compró todo lo que
necesitaba. Ayudarle a esta mujer a obtener el total de sus compras.
Paso 4. Diagrama de flujo (véanse Figs. 8.18 y 8.19).
Paso 5. Codificación y edición del programa:
Al igual que en el problema anterior integraremos el proceso ARTICULO al programa principal, dado
que aún no hemos visto las instrucciones necesarias para tener un programa dividido en procesos.
REM Mujer de compras en un supermercado
t=O
A:
REM Comienza proceso ARTICULO
INPUT "Precio";p
INPUT "Número de artículos";n
sb=p*n
t=t+sb
REM Termina proceso ARTICULO
INPUT "Más artículos (S/N)";mas$
IF mas$ = "N" THEN
GOTO B
ELSE
GOTO A
END IF
B:
PRINT Total:";t
END
Paso 6. Pruebas y depuración:
Segunda fase:
266
PARTE III. PROGRAMACIÓN
Figura 8.19
Figura 8.18
Prueba:
Precio? 10
Número de artículos? 4
Más artículos (S/N)? S
Precio? 22
Número de artículos? 5
Más artículos (S/N)? S
Precio? 6.5
Número de artículos? 2
Más artículos (S/N)? N
Total: 181
CAPÍTULO 8. CONTROL DE EJECUCIÓN
267
PROBLEMA 3
Un teatro efectúa descuentos según la edad del cliente. Determinar la cantidad de dinero que el teatro
deja de percibir por cada una de las categorías. Tomar en cuenta que los niños menores de 5 años no
pueden entrar al teatro y que existe un precio único en los asientos. Los descuentos se hacen tomando
en cuenta la siguiente tabla:
edad
categoría 1
categoría 2
categoría 3
categoría 4
categoría 5
5-14
15-19
20-45
46-65
66 - adelante
descuento
35%
25%
10%
25%
35%
Paso 4. Diagrama de flujo (véanse Figs. 8.20 y 8.21).
Paso 5. Codificación y edición del programa:
REM Descuentos en un teatro
INPUT "Precio del boleto";p
c1= O
c2=O
c3=O
c4=O
c5=O
A:
REM Proceso del CLIENTE
ERROR:
INPUT "Edad";e
IF e<=THEN
PRINT "No pueden entrar niños menores de 5 años"
GOTO ERROR
END IF
IF e<=14 OR e >=66 THEN
c=p*O.65
IF e<=14 THEN
c1=c1+c
ELSE
c5=c5+c
END IF
ELSE
IF e<=19 OR e>=46 THEN
c=p * 0.75
IF e<=19THEN
c2=c2+c
268
PARTE III.
PROGRAMACIÓN
Figura 8.20
Figura 8.21
CAPÍTULO 8. CONTROL DE EJECUCIÓN
269
270
PARTE III.
PROGRAMACIÓN
ELSE
c4=c4+c
END IF
ELSE
c=p * 0.9
c3=c3+c
END IF
END IF
REM Fin del proceso CLIENTE
INPUT "Más clientes (S/N)";mas$ IF
mas$="N0" THEN
GOTOB
ELSE
GOTO A
END IF
B:
PRINT 'Total descontado en categoría 1 :";d
PRINT 'Total descontado en categoría 2:";c2
PRINT 'Total descontado en categoría 3:";c3
PRINT "Total descontado en categoría 4:";c4
PRINT 'Total descontado en categoría 5:";c5
END
Paso 6. Pruebas y depuración:
Ejercicio: Introduzca el programa a la computadora y efectúe al menos 2 pruebas.
PROBLEMA 4
Una compañía de transportes terrestres de lujo tiene 2 tipos de camiones. Todos los camiones están
divididos en 3 secciones: de Lujo, Fumar y No Fumar. Las reservaciones se hacen momentos antes
de que el camión vaya a salir. Un camión puede salir cuando tenga el cupo lleno o cuando se decida
que ya se esperó suficiente tiempo para llenarse. Lo que se necesita es que se haga un programa de
computadora que avise cuándo un camión debe de salir.
Se proporciona una tabla con el número de asientos de lujo, fumar y no fumar de los dos tipos de
camiones:
ipo
1
2
Lujo
10
18
Fumar
16
20
No fumar
20
24
Paso 4. Diagrama de flujo (véanse Figs. 8.22 y 8.23).
CAPÍTULO 8. CONTROL DE EJECUCIÓN
Figura 8.22
271
CAPÍTULO 8. CONTROL DE EJECUCIÓN
Paso 5. Codificación y edición del programa:
REM Control de una compañía de camiones
INPUT 'Tipo de camión";t
IF t=1 THEN
ald=1O
afd=16
anfd=2O
ELSE
ald=18
afd=20
anfd=24
END IF
nalo=O
nafo=O
nanfo=O
llenol$="NO"
llenof$="NO"
llenonf$="NO"
A:
REM Comienza proceso CLIENTE
INPUT "Categoría";c$
IF c$="LUJO" THEN
IF llenol$="NO" THEN
nalo=nalo+1
IF nalo=ald THEN
llenol$="SI"
END IF
ELSE
PRINT "Asientos de la sección de lujo agotados"
END IF
ELSE
IF c$="FUMAR" THEN
IF llenof$="NO" THEN
nafo=nafo+1
IF nafo=afd THEN
llenof$="SI"
END IF
ELSE
PRINT "Asientos de la sección de fumar agotados"
END IF
ELSE
IF llenonf$="NO" THEN
nanfo=nanfo+1 IF
nanfo=anfd THEN
llenonf$ = "SI"
273
274
PARTE III. PROGRAMACIÓN
END IF
ELSE
PRINT "Asientos de la sección de no fumar agotados"
END IF
END IF
END IF
REM Termina proceso CLIENTE
IF llenol$="Sr AND llenof$="SI" AND llenonf$="SI" THEN
mas$= "NO"
ELSE
INPUT "Espero más clientes (SI/NO)";mas$
ENDIF IF mas$="NO" THEN
GOTO B
ELSE
GOTO A
ENDIF B:
PRINT "Ya puede salir el camión"
END
Paso 6. Pruebas y depuración:
Ejercicio: Introduzca el programa a la computadora y efectúe al menos 2 pruebas.
Problemas propuestos
Terminar la metodología para la solución de problemas para la sección de problemas propuestos
repetitivos simples con un número indeterminado de iteraciones del capítulo 4.
8d) ESTRUCTURAS REPETITIVAS: INSTRUCCIÓN FOR...NEXT
Instrucción: FOR...NEXT.
Función: Repetir un conjunto de instrucciones un número determinado de veces. Esta instrucción
debe usarse para codificar ciclos que tengan un número determinado de iteraciones.
Equivalencias:
En algoritmo:
Hasta ahora hemos visto un ciclo con un número determinado de iteraciones con la siguiente
representación:
1. i ← l
2. SI i > n ENTONCES
CAPÍTULO 8. CONTROL DE EJECUCIÓN
275
IR al paso 3
DE OTRA FORMA
C
i←i + 1
IR al paso
2 3. X
En donde C es el cuerpo del ciclo y X la instrucción siguiente al ciclo. Se define que el valor
inicial del contador i es 1 y se incrementa de 1 en 1 hasta llegar al valor de n, por lo que el número
de iteraciones es n.
Sin embargo podemos emplear un formato más general en el cual el valor inicial del contador
pueda ser diferente de 1, al igual que el valor de incremento en el contador, hasta que se llegue a
un valor final. En la mayoría de los casos este formato se concretará al primer formato visto. Ésta
sería su representación:
1. i ← a
2. SI i > b ENTONCES
IR al paso 3
DE OTRA FORMA
C
i← i + s
IR al paso 2
3. X
En diagrama de flujo (véase Fig. 8.24).
Formato:
FOR i=a TO b (STEP s)
C
NEXT i
Cuando la cláusula STEP es omitida se asume como STEP 1
En donde:
i es una variable contador
a es el valor inicial del contador
b es el valor final del contador
s es el valor en el cual el contador se incrementa en cada ciclo. Si s es un valor negativo el
contador se decrementará y la comparación de la condición cambiará de > a <, por lo que b
deberá tener un valor menor a a.
C es el cuerpo del ciclo. Se recomienda ampliamente que el cuerpo del ciclo vaya indentado con
respecto al FOR y al NEXT.
El FOR...NEXT ejecuta en ciclo el conjunto de acciones C delimitadas por el renglón del FOR y
el renglón del NEXT siguiendo este algoritmo:
276
PARTE III.
PROGRAMACIÓN
Figura 8.24
1 i ←a
2. SI i>b ENTONCES
IR al paso 3 DE
OTRA FORMA
C
i←i + s
IR al paso 2
3. X
Cuando el valor del STEP sea negativo la condición del paso 2 cambiará a:
2.
SI i< b ENTONCES
Ejemplos:
1. Diagrama de flujo (véase Fig. 8.25).
Programa:
CAPÍTULO 8. CONTROL DE EJECUCIÓN
Figura 8.25
REM Programa que imprime cinco veces "HOLA" empleando la instrucción FOR...NEXT
PRINT "Comienza el ciclo"
FOR i=1 T0 5
PRINT "HOLA"
NEXT i
PRINT "Fin del ciclo"
END
Prueba:
Comienza el ciclo
HOLA
HOLA
HOLA
277
278
PARTE III.
PROGRAMACIÓN
HOLA
HOLA
Fin del ciclo
Para entender mejor este ejemplo se escribirá el algoritmo que le corresponde a este programa:
1.
2.
3.
4.
DESPLEGAR "Comienza el ciclo"
i← 1
SI i>5 ENTONCES
IR al paso 4
DE OTRA FORMA
DESPLEGAR "HOLA"
i←i + 1
IR al paso 3
DESPLEGAR "Fin del ciclo"
Como el FOR...NEXT no tiene STEP se asumió el valor de incremento en 1.
Los pasos 2 y 3 de este algoritmo son los que corresponden al FOR...NEXT. La gran ventaja
al codificar el FOR...NEXT es que ya no tenemos que preocuparmos por asignar valor inicial al
contador, ni por incrementarlo, ni por verificar la condición de fin del ciclo. Simplemente
indicamos el valor inicial del contador, el valor final, el valor de incremento, las instrucciones del
cuerpo del ciclo y el FOR...NEXT realizará las acciones necesarias para que el cuerpo del ciclo se
ejecute.
2. Algoritmo:
1.
2.
3.
i←l
SI i> 10 ENTONCES
IR al paso 3
DE OTRA FORMA
DESPLEGAR i
i←i+ 1
IR al paso 2
X
Diagrama de flujo (véase Fig. 8.26).
Programa:
REM Programa que imprime del 1 al 1O
F0R i=1 TO 10
PRINT i
NEXT i
END
Prueba: 1
CAPÍTULO 8. CONTROL DE EJECUCIÓN
Figura 8.26
2
3
4
5
6
7
8
9
10
3. Algoritmo:
1.
2.
i←3
SI i > 5 ENTONCES
IR al paso 3
DE OTRA FORMA
DESPLEGAR "Iteración”
i←i+s
279
280
PARTE III. PROGRAMACIÓN
IR al paso 2
3. FIN
Programa:
REM Programa que imprime tres veces la palabra "Iteración"
FOR i=3 TO 5
PRINT "Iteración"
NEXTi END
Prueba:
Iteración
Iteración
Iteración
Si el FOR...NEXT lo reemplazamos por el siguiente FOR...NEXT haría exactamente lo mismo:
FORi=1 T0 3
PRINT "Iteración"
NEXTi
4. Algoritmo:
1.
2.
i←1
SI i> 11 ENTONCES
IR al paso 3
DE OTRA FORMA
DESPLEGAR i
i←i + 2
IR al paso 2
3. FIN
Programa:
REM Programa que imprime los seis primeros números impares
FOR i = 1 TO 11 STEP 2
PRINT i
NEXT i END
Esta vez el incremento es de 2 por que así lo indica la cláusula STEP.
Prueba:
1
3
5
CAPÍTULO 8. CONTROL DE EJECUCIÓN
7
9
11
5. Algoritmo:
1. i← -5
2. SI i> 4 ENTONCES
IR al paso 3
DE OTRA FORMA
DESPLEGAR i
i←i + 1
IR al paso 2
3. FIN
Programa:
REM Programa que imprime el rango de números (-5...4)
FOR i= -5 TO 4
PRINT i
NEXT i
END
Prueba:
-5
-4
-3
-2
-1
0
1
2
3
4
6. Algoritmo:
1. i←6
2. SI i < -9 ENTONCES
IR al paso 3
DE OTRA FORMA
DESPLEGAR i
i ← i + (-3)
IR al paso 2
281
282
PARTE III.
PROGRAMACIÓN
3. X
Programa:
REM Programa que imprime el rango de números [B...-9] brincando de 3 en 3
FOR i=6 TO-9 STEP-3
PRINT i
NEXT i
END
Observe que como el contador va de un número mayor hacia un número menor, el STEP debe
ir decrementando pues de lo contrario el contador jamás alcanzaría el valor final. También es de
hacerse notar que cuando un FOR...NEXT contiene la cláusula STEP con un valor negativo la
condición de fin de ciclo checa que el contador sea menor que el valor final, como se aprecia en
el algoritmo.
Prueba:
6
3
0
-3
-6
-9
A continuación complementaremos la metodología para la solución de los problemas de tipos
repetitivos simples con un número determinado de ciclos, empleando la instrucción FOR...NEXT.
Problemas resueltos
PROBLEMA 1
Calcular el promedio de calificaciones parciales de cada uno de los alumnos de un grupo de 5,
sabiendo que existen tres periodos parciales.
Paso 4. Diagrama de flujo (véanse Figs. 8.27 y 8.28).
Paso 5. Codificación y edición del programa:
REM Obtener el promedio de 5 alumnos
FOR i=1 T0 5
INPUT "Calificación parcial 1";c1
INPUT "Calificación parcial 2";c2
INPUT "Calificación parcial 3";c3
p=[c1+c2+c3]/3
PRINT "El promedio es:";p
Figura 8.27
PRINT
NEXT i
END
Paso 6. Pruebas y depuración:
Segunda fase:
Prueba:
Calificación parcial 1 ? 8
Calificación parcial 2? 9
Calificación parcial 3? 9
El promedio es: 8.66
Calificación parcial 1 ? 7
Calificación parcial 2? 5
Calificación parcial 3? 6
El promedio es: 6
CAPÍTULO 8. CONTROL DE EJECUCIÓN
283
284
PARTE III.
PROGRAMACIÓN
Figura 8.28
Calificación parcial 1? 9
Calificación parcial 2? 10
Calificación parcial 3? 6
El promedio es: 8.33
Calificación parcial 1? 10
Calificación parcial 2? 9
Calificación parcial 3? 10
El promedio es: 9.66
Calificación parcial 1? 8
Calificación parcial 2? 7
Calificación parcial 3? 8
El promedio es: 7.66
PROBLEMA 2
Una compañía de seguros tiene contratados a n vendedores, cada uno de los cuales hace tres ventas
a la semana. Su política de pagos es que un vendedor recibe un sueldo base, más un 10% extra por
comisiones de sus ventas. El gerente de la compañía desea saber cuánto dinero obtendrá en la semana
cada vendedor por concepto de comisiones por las tres ventas realizadas, y cuánto tomando en cuenta
su sueldo base y sus comisiones.
Paso 4. Diagrama de flujo (véanse Figs. 8.29 y 8.30).
Figura 8.29
Paso 5. Codificación y edición del programa:
REM Pago a vendedores en una compañía de seguros
INPUT "Número de vendedores";n
PRINT FOR i=1 TO n
INPUT "Sueldo base";sb
INPUT 'Venta 1 ";v1
INPUT 'Venta 2";v2
INPUT 'Venta 3";v3
tv=v1+v2+v3
c=tv*0.1
tr=sb+c
CAPÍTULO 8. CONTROL DE EJECUCIÓN
285
286
PARTE III.
PROGRAMACIÓN
Figura 8.30
PRINT "Comisión:";c
PRINT 'Total a recibir:";tr
PRINT
NEXT i
END
Paso 6. Pruebas y depuración:
Segunda fase:
Prueba:
Número de vendedores? 3
Sueldo base? 3000
Venta 1? 10000
Venta 2? 20000
Venta 3? 17000
Comisión: 4700
CAPÍTULO 8. CONTROL DE EJECUCIÓN
287
Total a recibir: 7700
Sueldo base? 4000
Venta 17 45000
Venta 2? 32000
Venta 3? 33000
Comisión: 11000
Total a recibir: 15000
Sueldo base? 2500
Venta 1? 15000
Venta 2? 20000
Venta 3? 10000
Comisión: 4500
Total a recibir: 7000
PROBLEMA 3
En una empresa se requiere calcular el salario semanal de cada uno de los n obreros que laboran en
ella. El salario se obtiene de la siguiente manera:
—Si el obrero trabaja 40 horas o menos se le paga $4 por hora.
—Si el obrero trabaja más de 40 horas se le paga $4 por cada una de las primeras 40 horas y $6
por cada hora extra.
Paso 4. Diagrama de flujo (véanse Figs. 8.31 y 8.32).
Paso 5. Codificación y edición del programa:
REM Salario semanal de los obreros de una empresa
INPUT "Número de obreros";n
PRINT
FOR i=1 ton
INPUT "Horas trabajadas";ht
IF ht > 40 THEN
he=ht-40
s=40 * 4+he * 6
ELSE
s=ht * 4
END IF
PRINT "Salario:";s
PRINT
NEXT i
END
Paso 6. Pruebas y depuración:
Segunda fase:
288
PARTE III. PROGRAMACIÓN
Prueba:
Número de obreros? 4
Horas trabajadas? 65
Salario: 310
Horas trabajadas? 40
Salario: 160
Horas trabajadas? 35
Salario: 140
Horas trabajadas? 80
Salario: 400
Figura 8.31
CAPÍTULO 8. CONTROL DE EJECUCIÓN
289
Figura 8.32
PROBLEMA 4
Determinar cuántos hombres y cuántas mujeres se encuentran en un grupo de n personas, suponiendo
que los datos son extraídos alumno por alumno.
Paso 4. Diagrama de flujo (véanse Figs. 8.33 y 8.34).
Paso 5. Codificación y edición del programa:
REM Número de hombres y mujeres de un grupo
INPUT "Número de personas en el grupo";n
PRINT
h=0
m=0
290
PARTE III. PROGRAMACIÓN
Figura 8.33
F0R i=1 TO n
INPUT "Sexo";s$
IF s$ ="MASCULINO" THEN
h=h+1
ELSE
m=m+1
END IF
NEXT i
PRINT "Número de hombres:";h
PRINT "Número de mujeres:";m
END
Paso 6. Pruebas y depuración:
CAPÍTULO 8. CONTROL DE EJECUCIÓN
291
Figura 8.34
Segunda fase:
Prueba:
Número de personas en el grupo? 6
Sexo? MASCULINO
Sexo? MASCULINO
Sexo? FEMENINO
Sexo? FEMENINO
Sexo? MASCULINO
Sexo? MASCULINO
Número de hombres: 4
Número de mujeres: 2
PROBLEMA 5
El Departamento de Seguridad Pública y Tránsito del D.F., desea saber: de n autos que entran a la
292
PARTE III. PROGRAMACIÓN
ciudad de México cuántos entran con calcomanía de cada color. Conociendo el último dígito de la
placa de cada automóvil se puede determinar el color de la calcomanía utilizando la siguiente relación:
Dígito
Color
1o2
3o4
5o6
7o8
9oO
amarilla
rosa
roja
verde
azul
Paso 4. Diagrama de flujo (véanse Figs. 8.35 y 8.36).
Paso 5. Codificación y edición del programa:
REM Autos con colores de calcomanías distintas
INPUT "Número de autos del muestreo";n
PRINT
am=O
rs=O
rj=O
ve=O
az=O
FOR i=1 TO n
INPUT "Ultimo dígito de la placa";ud
IF ud=1 0R ud=2 THEN
am=am+1
ELSE
IF ud=3 0R ud=4 THEN
rs=rs+1
ELSE
IF ud=5 0R ud=6 THEN
rj=rj+1
ELSE
IF ud=7 0Rud = 8 THEN
ve=ve+1
ELSE
IF ud=9 0R ud=0 THEN
az=az+1
ELSE
PRINT "Dígito erróneo"
i←i-1
END IF
END IF
END IF
END IF
CAPÍTULO 8. CONTROL DE EJECUCIÓN
END IF
NEXT i
PRINT
PRINT "Autos con calcomanía amarilla:";am
PRINT "Autos con calcomanía rosa:";rs
PRINT "Autos con calcomanía roja:";rj
PRINT "Autos con calcomanía verde:";ve
PRINT "Autos con calcomanía azul:";az
END
Paso 6. Pruebas y depuración:
Figura 8.35
293
294
PARTE III. PROGRAMACIÓN
Figura 8.36
CAPÍTULO 8. CONTROL DE EJECUCIÓN
Segunda fase:
Prueba:
Número de autos del muestreo? 10
Último dígito de la placa? 3
Último dígito de la placa? 1
Último dígito de la placa? 4
Último dígito de la placa? 9
Último dígito de la placa? 8
Último dígito de la placa? 4
Último dígito de la placa? 0
Último dígito de la placa? 23
Último dígito erróneo
Último dígito de la placa? 2
Último dígito de la placa? 3
Último dígito de la placa? 9
Autos con calcomanía amarilla: 2
Autos con calcomanía rosa: 4
Autos con calcomanía roja: 0
Autos con calcomanía verde: 1
Autos con calcomanía azul: 3
PROBLEMA 6
Obtener el promedio de calificaciones de un grupo de n alumnos.
Paso 4. Diagrama de flujo (véanse Figs. 8.37 y 8.38).
Paso 5. Codificación y edición del programa:
REM Obtener el promedio de calificaciones de un grupo
INPUT "Número de alumnos";n
PRINT
s=O
FOR i=1 TO n
INPUT "Calificación";c
s=s +c
NEXT i
p= s/ n
PRINT
PRINT "Promedio del grupo:";p
END
295
296
PARTE I I I .
PROGRAMACIÓN
Figura 8.37
Paso 6. Pruebas y depuración:
Prueba:
CAPÍTULO 8. CONTROL DE EJECUCIÓN
297
Figura 8.38
Número de alumnos? 5
Calificación? 7
Calificación? 5
Calificación? 8
Calificación? 10
Calificación? 10
Promedio del grupo: 8
PROBLEMA 7
Una persona desea invertir su dinero en un banco, el cual le otorga un 2% de interés mensual sobre
la cantidad invertida. ¿Cuál será la cantidad de dinero que tendrá luego de un año si la ganancia de
cada mes es reinvertida?
Paso 4. Diagrama de flujo (véase Fig. 8.39).
Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad.
Paso 5. Codificación y edición del programa:
REM Ganancia anual en un banco con reinversión mensual
INPUT "Cantidad inicial";c
F0R i=1 T0 12
c=c*1.02
298
PARTE III. PROGRAMACIÓN
NEXT i
PRINT "Cantidad final";c
END
Figura 8.39
CAPÍTULO 8. CONTROL DE EJECUCIÓN
Paso 6. Pruebas y depuración:
Ejercicio: Introduzca el programa a la computadora y efectúe al menos dos pruebas.
PROBLEMA 8
Calcular el promedio de edades de hombres, mujeres y de todo un grupo de n alumnos.
Paso 4. Diagrama de flujo (véanse Figs. 8.40 y 8.41).
Paso 5. Codificación y edición del programa:
REM Promedio de edades de un grupo de hombres y mujeres
INPUT "Número de alumnos";n
PRINT
nh=O
nm= O
seh=O
sem= O
FOR i=1 TO n
INPUT "Edad";e
INPUT "Sexo";s$
IF s$="MASCULINO" THEN
nh=nh+1
seh=seh+e
ELSE
nm=nm + 1
sem=sem+e
END IF
NEXT i
peh=seh / nh
pem=sem / nm
pg= [seh+sem]/n
PRINT
PRINT "Promedio de edades de hombres:";peh
PRINT "Promedio de edades de mujeres:";pem
PRINT "Promedio de edades del grupo:";pg
END
Paso 6. Pruebas y depuración:
Segunda fase:
Prueba:
Número de alumnos? 5
299
300
PARTE III. PROGRAMACIÓN
Figura 8.40
CAPÍTULO 8. CONTROL DE EJECUCIÓN
Figura 8.41
Edad?
Sexo?
Edad?
Sexo?
Edad?
Sexo?
Edad?
Sexo?
Edad?
Sexo?
18
FEMENINO
17
FEMENINO
20
MASCULINO
19
FEMENINO
24
MASCULINO
Promedio de edades de hombres: 22
Promedio de edades de mujeres: 18
301
302
PARTE III. PROGRAMACIÓN
Promedio de edades del grupo: 19.6
PROBLEMA 9
Una persona debe realizar un muestreo de 100 personas para determinar el promedio de peso de los
niños, jóvenes, adultos y viejos que existen en su zona habitacional. Para ello, conforme va encontrando a las personas, introduce los datos a su computadora, la cual, mediante un programa, las
clasifica y despliega los cuatro promedios que la persona requiere. Se determinan las categorías
con base en el siguiente cuadro:
Categoría
Niños
Jóvenes
Adultos
Viejos
Edad
0-12
13-29
30-59
60 - adelante
Paso 4. Diagrama de flujo (véanse Figs. 8.42 y 8.43).
Paso 5. Codificación y edición del programa:
REM Promedio de niños, jóvenes, adultos y viejos
nn=O
nj=O
na=O
nv=O
spn=O
spj=O
spa=O
spv=O
FOR i=1 TO 1OO
INPUT "Edad";e
INPLJT "Peso";p
IF e< = 12 THEN
nn=nn+1
spn=spn+p
ELSE
IF e< = 29 THEN
nj=nj+1
spj=spj+p
ELSE
IFe<=59THEN
na=na+1
spa=spa+p
ELSE
nv=nv+1
CAPÍTULO 8. CONTROL DE EJECUCIÓN
Figura 8.42
303
304
PARTE III. PROGRAMACIÓN
Figura 8.43
CAPÍTULO 8. CONTROL DE EJECUCIÓN
spv=spv+p
END IF
END IF
END IF
NEXT i
ppn=spn/nn
ppj=spj/nj
ppa=spa/na
ppv=spv/nv
PRINT
PRINT "Promedio de pesos de niños:";ppn
PRINT "Promedio de pesos de jóvenes:";ppj
PRINT "Promedio de pesos de adultos:";ppa
PRINT "Promedio de pesos de viejos:";ppv
END
Paso 6. Pruebas y depuración:
Ejercicio: Introduzca el programa a la computadora y efectúe una prueba.
PROBLEMA 10
Encontrar el menor valor de un conjunto de n números dados.
Paso 4. Diagrama de flujo (véanse Figs. 8.44 y 8.45). Paso 5.
Codificación y edición del programa:
REM Encontrar el menor número de n dados
INPUT "Cuantos números";n
PRINT
INPUT "Número",r
F 0R i= 2T 0 n
INPUT "Número";num
IF num<r THEN
r=num
END IF
NEXT i
PRINT
PRINT "El menor es:";r
END
Paso 6. Pruebas y depuración:
Segunda fase:
305
306
PARTE III. PROGRAMACIÓN
Figura 8.44
Prueba:
Cuántos números? 5
Número? 4
Número? 17
CAPÍTULO 8. CONTROL DE EJECUCIÓN
Figura 8.45
Número? -15
Número? 8
Número? 8
El menor es: -15
PROBLEMA 11
Encontrar el mayor valor de un conjunto de n números dados.
Paso 4. Diagrama de flujo (véase Fig. 8.46).
Paso 5. Codificación y edición del programa:
REM Encontrar el mayor número de n dados
INPUT "Cuantos números";i;
PRINT
307
308
PARTE III. PROGRAMACIÓN
Figura 8.46
CAPÍTULO 8. CONTROL DE EJECUCIÓN
309
INPUT "Número";r
FOR i=2 T0 n
INPUT "Número";num
IF num>r THEN
r=num
END IF
NEXT i
PRINT
PRINT "El mayor es:";r
END
Paso 6. Pruebas y depuración:
Segunda fase:
Prueba:
Cuántos números? 5
Número? 4
Número? 17
Número? -15
Número? 8
Número? 8
El mayores: 17
Problemas propuestos
Terminar la metodología para la solución de problemas para la sección de problemas propuestos
repetitivos simples, con un número determinado de iteraciones del capítulo 4.
310
PARTE I I I .
PROGRAMACIÓN
RESUMEN
Las instrucciones de control de ejecución se clasifican en:
a) Control de ejecución condicional
Instrucción IF... THEN... ELSE: permite la ejecución de un conjunto de instrucciones dependiendo del resultado de la evaluación de una condición dada. Esta instrucción es necesaria para
resolver problemas de tipo selectivo, tanto simples como compuestos.
b) Control de ejecución incondicional
Instrucción GOTO: brincar incondicionalmente a otra parte del programa marcada con una
etiqueta. El uso de la instrucción GOTO no es recomendable a menos de que se use en combinación
con la instrucción IF... THEN... ELSE para la codificación de ciclos como un número indeterminado
de iteraciones.
c)
Estructuras repetitivas
1) Combinación de las instrucciones IF...THEN...ELSE y GOTO: esta combinación es
usada para codificar ciclos con un número indeterminado de iteraciones.
2) Instrucción FOR...NEXT: esta instrucción es usada para repetir un conjunto de instrucciones un número determinado de veces. Debe usarse para codificar ciclos que tengan un número
determinado de iteraciones.
CAPITULO
9
FUNCIONES
OBJETIVOS
9.1 El alumno definirá qué es una función.
9.2 El alumno definirá los diferentes tipos de funciones.
a) Predefinidas
— Numéricas
— Alfanuméricas
b) Definidas por el usuario
9.2 El alumno aplicará los pasos de la metodología para resolver problemas con funciones predefinidas y definidas por el usuario.
311
CAPITULO
9
FUNCIONES
La programación estructurada está basada, fundamentalmente, en la descomposición de un problema
general, en subproblemas más fáciles de resolver. Uno de los recursos que Quick Basic provee para
descomponer un problema en subproblemas son las funciones.
Una función es un proceso que puede ser utilizado en un programa como parte de una expresión.
Una característica muy importante de las funciones es que después de ser ejecutadas regresan un
valor. El formato general de las funciones es:
Función (parámetro)
donde:
Función,
Parámetro,
es el nombre asignado a la función
es el dato sobre el cual se va a aplicar la función.
Un ejemplo de función es la de obtener la raíz cuadrada de un número. Quick Basic cuenta con la
función SQR, que ayuda a obtenerla. Si escribiéramos un programa que estuviera conformado por las
líneas:
INPUT "Da un número"; a
PRINT SQR a
Quick Basic primero aceptaría por teclado un dato que pasaría a ser el valor de la variable a.
Después tendría que ejecutar la función SQR utilizando como parámetro la variable a y una vez hecho
esto podría desplegar en pantalla el valor obtenido.
A diferencia de los procesos que hemos utilizado en los capítulos anteriores, en este ejemplo se
puede visualizar cómo es que la función SQR es un proceso que regresa un valor después de ser
ejecutado.
Existen dos tipos de funciones:
a) Predefinidas
b) Definidas por el usuario
312
CAPÍTULO 9. FUNCIONES
313
Las primeras son funciones que Quick Basic incluye en su conjunto de instrucciones y las segundas
son creadas por el usuario mismo.
La forma de utilizarlas es la misma, aunque en el caso de las definidas por el usuario será necesario
aprender a crearlas.
9a) FUNCIONES PREDEFINIDAS
Las funciones predefinidas que incluye Quick Basic se clasifican en:
1) Numéricas
2) Alfanuméricas
1) Funciones numéricas
Son funciones que al ser ejecutadas trabajan con valores numéricos.
A continuación describiremos el formato y la función de las funciones numéricas más comunes:
Funciones trigonométricas
Función: SIN
Funcionamiento: obtiene el seno de un ángulo en radianes.
Formato:
SIN (x)
donde:
x Valor en radianes al cual se aplicará la función seno.
Ejemplo;
a = SIN ( 1 )
PRINT "El seno de 1 es "; a
despliega:
El seno de 1 es 0.017452406
Función: COS
Funcionamiento: obtiene el coseno de un ángulo en radianes.
Formato:
COS(x)
donde:
314
PARTE III.
PROGRAMACIÓN
x Valor en radianes al cual se aplicará la función coseno.
Ejemplo;
a = COS [1]
PRINT "El coseno de 1 es "; a
despliega:
El coseno de 1 es 0.999847695
Función: TAN
Funcionamiento: obtiene la tangente de un ángulo en radianes.
Formato:
TAN( x)
donde:
x
Valor en radianes al cual se aplicará la función tangente.
Ejemplo;
a = TAN [1 ]
PRINT "La tangente de 1 es "; a
despliega:
La tangente de 1 es 0.017455064
Función: ARCTAN
Funcionamiento: obtiene el arcotangente de un ángulo en radianes.
Formato:
ARCTAN(x)
donde:
x
Valor en radianes al cual se aplicará la función arcotangente.
Ejemplo;
a = ARCTAN ( 1 ]
PRINT "El arcotangente de 1 es "; a
despliega:
El arcotangente de 1 es 45
Funciones aritméticas
Función: SQR
CAPÍTULO 9. FUNCIONES
315
Funcionamiento: obtiene la raíz cuadrada de un número.
Formato:
SQR(x)
donde:
x
Expresión numérica sobre la cual se aplicará la función raíz cuadrada.
Ejemplo:
1) PRINT SOR [25 ]
despliega:
5
2) a = SQR[25 ]1 5
PRINT a
despliega:
10
Función: ABS
Funcionamiento: obtiene el valor absoluto de un número.
Formato:
ABS(x)
donde:
x Expresión numérica sobre la cual se aplicará la función de valor absoluto.
Ejemplo;
1) INPUT "Da un número"; a
INPUT "Da otro número"; b
dif = a - b
PRINT "La diferencia es "; ABS [ dif ]
Prueba:
Da un número? 10
Da otro número? 15
La diferencia es 5
Función: FIX
Funcionamiento: elimina los dígitos que se encuentran a la derecha del punto decimal de una
expresión numérica.
Formato:
316
PARTE III.
PROGRAMACIÓN
FIX ( X )
donde:
x Expresión numérica sobre la cual se aplicará la función.
Ejemplo;
1) a = FIX [ 99.99 ]
PRINT a
despliega:
99
2) a = FIX [ -99.99 ]
PRINT a
despliega:
-99
Función: INT
Funcionamiento: obtiene el valor entero más cercano. Si la parte decimal es de 0.5 o más aproxima
al valor entero inmediato superior y en caso contrario aproxima al valor entero inmediato inferior.
Formato:
INT (x)
donde:
x Expresión numérica sobre la cual se aplicará la función.
Ejemplo;
1) a = INT [ 99.99 ]
PRINT a
despliega:
100
2) a = INT[ -99.99 ]
• PRINT a
despliega:
-98
3) a = INT[ 99.49 ]
PRINT a
despliega:
99
CAPÍTULO 9. FUNCIONES
317
Problemas resueltos
PROBLEMA 1
La calificación de matemáticas de un alumno se obtiene sumando los porcentajes correspondientes a
tareas y examen, y aproximando este valor al entero inmediato superior si la parte decimal es de 0.5
o más, o al entero inmediato inferior en caso contrario. El promedio de las calificaciones de cuatro
tareas equivalen al 15% y el examen equivale al 85%. Obtener la calificación de un alumno.
Paso 1. Definición del problema:
Igual a la redacción del problema
Paso 2. Planeación de la solución:
Será necesario obtener el promedio de las cuatro tareas del alumno, aplicando la fórmula:
promedio de tareas = (t1 + t2 + t3 + t4 ) / 4
Los porcentajes correspondientes a tareas y examen se obtienen aplicando las fórmulas:
porcentaje de tareas = promedio de tareas x 0.15
porcentaje de examen = examen X 0.85
El total de puntos estaría expresado por:
total = porcentaje de tareas + porcentaje de examen
Finalmente se deberá aproximar la calificación al entero inmediato superior o inferior; para esto
utilizaremos la función INT, por lo que la fórmula quedaría:
calificación = INT (total)
SALIDAS: calificación
ENTRADAS: calificación de cada tarea y de examen
DATOS ADICIONALES: A partir de 0.5 la calificación sube al entero inmediato superior y en caso
contrario baja al entero inmediato inferior.
Paso 3. Algoritmo:
1.
2.
3.
4.
5.
6.
7.
PEDIR t1, t2, t3, t4, ex
promt ← (t1 + t2 + t3 + t4 ) / 4
pt ←promt * 0.15
pex ← ex * 0.85
tot ← pt + pex
cal ← INT (tot)
DESPLEGAR cal
318
PARTE III.
PROGRAMACIÓN
Figura 9.1
Paso 4. Diagrama de flujo (véase Fig. 9.1).
Paso 5. Codificación y edición del programa:
REM Promedio de matemáticas
INPUT "Calificación de la tarea 1"; t1
INPUT "Calificación de la tarea 2"; t2
INPUT "Calificación de la tarea 3"; t3
CAPÍTULO 9. FUNCIONES
319
INPUT "Calificación de la tarea 4"; t4
INPUT "Calificación del examen"; ex
promt = [ t1 + t2 + t3 + t4 ] / 4
pt = promt * 0.15
pex = ex * 0.85
tot = pt + pex
cal = INT (tot ]
PRINT "La calificación es:";cal
END
Paso 6. Pruebas y depuración:
Calificación de la tarea 1? 8
Calificación de la tarea 2? 9
Calificación de la tarea 3? 7
Calificación de la tarea 4? 9
Calificación del examen? 8.5
La calificación es: 8
PROBLEMA 2
Dado un número determinar si es primo o no.
Paso 1. Definición del problema:
Igual a la redacción del problema
Paso 2. Planeación de la solución:
Sabemos que un número n es primo si sólo es divisible entre sí mismo y la unidad, es decir, si la
división es exacta solamente cuando se divide entre uno y n. Por lo tanto un número no es primo
cuando es divisible entre cualquier número que esté entre 2 y el número anterior a n. Así, sólo basta
con averiguar esto último para decir que el número no es primo, y en caso contrario será un número
primo.
Por lo tanto se empleará un ciclo con un número determinado de iteraciones que empezará en la
iteración 2 y terminará en la n-1, empleando el valor del contador para determinar si el número es
divisible entre éste. En caso de que el número sea divisible entre cualquier valor de este rango ya no
tendrá caso seguir con el ciclo y se forzará a que el contador tome el último valor del rango para que
la condición de fin de ciclo sea verdadera.
Para saber si un número a es divisible entre otro b basta con saber si existe residuo en la división
entre ambos. Esto se logra de la siguiente manera con la función FIX:
residuo = a / b - FIX(a / b)
Si el residuo es cero entonces a es divisible entre b.
SALIDAS: Letrero que indique si el número es primo o no
320
PARTE III.
PROGRAMACIÓN
ENTRADAS: n
DATOS ADICIONALES: Un número es primo cuando únicamente es divisible entre sí mismo y 1.
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
n
a número a determinar si es primo o no
i
a contador de iteraciones
primo$ a bandera que indica si el número es primo o no
res
a residuo
1.
2.
3.
4.
PEDIR n
primo$ ← "SI"
i←2
SI i > n-1 ENTONCES
IR al paso 5
DE OTRA FORMA
DIVISIBLE
i←i + 1
IR al paso 4
5. SI primo$ = "SI" ENTONCES
DESPLEGAR "Sí es primo"
DE OTRA FORMA
DESPLEGAR "No es primo"
Proceso DIVISIBLE:
1.
2.
res ←n / i - FIX(n / i)
SI res = 0 ENTONCES
primo$ ← "NO"
i←n - 1
Paso 4. Diagrama de flujo (véanse Figs. 9.2 y 9.3).
Paso 5. Codificación y edición del programa:
REM Programa que determina si un número es primo o no
INPUT "Da un número mayor que cero"; n
primo$="SI"
F0R i = 2 T0 n-1
res = n / i - FIX(n / i)
IF res = O THEN
primo$ = "NO"
i = n -- 1
END IF
CAPÍTULO 9. FUNCIONES
Figura 9.2
NEXT i
IF primo$ = "SI" THEN
PRINT "Sí es primo"
321
322
PARTE 111.
PROGRAMACIÓN
Figura 9.3
ELSE
PRINT "No es primo"
END IF
END
NOTA: Observe que los números 1 y 2, que son primos, se imprime que lo son pues no entran al ciclo,
y el valor de la bandera indica que son primos.
Problemas propuestos
1)
2)
3)
4)
Pedir n números con decimales e imprimir cada uno de ellos eliminando la parte decimal.
Pedir n números, convertir cada uno a positivo e imprimir su raíz cuadrada,
Dados dos números, obtener el cociente y el residuo de dividir el primero entre el segundo.
Determinar si un número es múltiplo de otro. Se sabe que un número es múltiplo de otro cuando
la división del segundo entre el primero es exacta.
5) Dado un número, determinar todos sus múltiplos empezando por 2.
6) Dado un ángulo en radiantes, obtener su cosecante, si se sabe que la cosecante de un ángulo es
el inverso del seno, es decir:
cosecante(x) = 1/ seno(x)
CAPÍTULO 9. FUNCIONES
323
2) FUNCIONES ALFANUMÉRICAS
Son funciones que al ser ejecutadas trabajan con valores alfanuméricos.
A continuación describiremos las funciones alfanuméricas más comunes en términos de su formato
y funcionamiento.
Función: LEFT$
Funcionamiento: obtiene determinado número de caracteres empezando por el extremo izquierdo.
Formato:
LEFT$ ( expresión alfanumérica, cantidad )
donde:
expresión alfanumérica Es la expresión sobre la cual se aplicará la función.
cantidad
Es una expresión numérica que indica el número de caracteres que se
desean obtener del lado izquierdo de la expresión alfanumérica.
Ejemplos;
1) a$ = "María Morales"
PRINT LEFT$( a$.5 )
despliega:
María
2) a$ = "María Morales"
PRINT LEFT$[ a$,7 ]
despliega:
María M
Nótese que al contar los siete caracteres que se encuentran del lado izquierdo, el espacio queda
incluido entre ellos debido a que el espacio también es un carácter.
Función: RIGHT$
Funcionamiento: obtiene determinado número de caracteres empezando por el extremo derecho.
Formato:
RIGHT$ ( expresión alfanumérica, cantidad )
donde:
expresión alfanumérica Es la expresión sobre la cual se aplicará la función.
cantidad
Es una expresión numérica que indica el número de caracteres que se
desean obtener del lado derecho de la expresión alfanumérica.
324
PARTE III.
PROGRAMACIÓN
Ejemplos;
1) a$ = "María Morales"
PRINT RIGHT$(a$,5 )
despliega:
rales
2) a$ = "María Morales"
PRINT RIGHT$( a$,9 )
despliega: a
Morales
Nótese que esta función obtiene los caracteres a partir del extremo derecho, pero conserva el
orden original.
Función: MID$
Funcionamiento: obtiene determinado número de caracteres empezando en determinada posición.
Formato:
MID$ ( expresión alfanumérica, posición inicial, cantidad )
donde:
expresión alfanumérica: Es la expresión sobre la cual se aplicará la función.
posición inicial
Es la posición donde se encuentra el primer carácter a obtener.
cantidad
Es una expresión numérica que indica el número de caracteres a
obtener a partir de la posición inicial.
Ejemplos;
1) a$ = "María Morales"
PRINT MID$( a$,2,3 )
despliega:
arí
Nótese que a partir de la posición 2 del string, que es la letra a de María, se tomaron 3 caracteres
que son la propia a, la r y la í.
Función: LEN
Funcionamiento: obtiene el número de caracteres que posee un dato alfanumérico.
Formato:
CAPÍTULO 9. FUNCIONES
325
LEN ( expresión alfanumérica )
donde:
expresión alfanumérica
Es la expresión sobre la cual se aplicará la función.
Ejemplos:
1) a$ = "María Morales"
PRINT LEN( a$ )
despliega:
13
Función: SPACE$
Funcionamiento: obtiene una cantidad determinada de espacios.
Formato:
SPACE$ ( expresión numérica )
donde:
expresión numérica
Cantidad de espacios que se desean obtener.
Ejemplos;
1) PRINT "hola"; SPACE$(5); "Buenos"; SPACE$(5); "díasdespliega:
hola
buenos
días
Concatenación de expresiones alfanuméricas
La operación de concatenar dos o más expresiones alfanuméricas consiste en unirlas por medio del
operador +.
Cuando en una expresión el operador utilizado es el operador + y los operandos son de tipo
alfanumérico, la operación que Quick Basic realiza es la de concatenación, y si los operandos son de
tipo numérico, se lleva a cabo la operación suma.
Los espacios en blanco se representan poniendo entre comillas cuantos espacios en blanco se
deseen. Por ejemplo, la expresión " "'es un espacio en blanco. También se le conoce como carácter
nulo al hecho de abrir y cerrar comillas sin poner nada entre ellas, de la siguiente manera " ".
Ejemplos;
1) a$ = "Buenos días"
INPUT "Cuál es tu nombre?"; nom$
PRINT a$ + nom$
prueba:
Cuál es tu nombre? María
326
PARTE III.
PROGRAMACIÓN
Buenos díasMaría
Nótese cómo el operador + une los dos datos alfanuméricos y de hecho quedan juntos; si se
deseara que quedaran separados tendría que interponerse un espacio entre ellos.
2) a$ = "Buenos días"
b$ = ""
INPUT "Cuál es tu nombre? "; nom$
PRINT a$ + b$ + nom$
o bien
2) a$ = "Buenos días "
INPUT "Cuál es tu nombre?"; nom$
PRINT a$ + nom$
prueba:
Cuál es tu nombre? María
Buenos días María
Un programa equivalente al anterior sería hacer uso de la función SPACE$ y quedaría así:
3) a$ = "Buenos días"
b$ = SPACE$(1)
INPUT "Cuál es tu nombre?"; nom$
PRINT a$ + b$ + nom$
prueba:
Cuál es tu nombre? María
Buenos días María
Problemas resueltos
PROBLEMA 1
Dada una frase obtener el número de palabras que contiene.
Paso J. Definición del problema:
Igual a la redacción del problema
Paso 2. Planeación de la solución:
Sabemos que para encontrar el número de palabras que contiene una frase, podemos contar el número
de espacios que contiene y sumarle uno.
Para contar el número de espacios que contiene la frase necesitaremos utilizar un ciclo con
determinado número de iteraciones que contendrá un proceso que se repetirá una vez por cada carácter
que contenga la frase y dejará de repetirse cuando se llegue al último carácter.
CAPÍTULO 9. FUNCIONES
327
Para saber el límite del ciclo haremos uso de la función LEN, la que nos regresará el número de
caracteres que tiene la frase. Así el ciclo quedaría:
1.
2.
3.
4.
5.
PEDIR frase
contador de espacios = 0
contador de letras = 1
Obtener longitud de la frase
SI contador de letras > longitud ENTONCES
IR al paso 6 DE
OTRA FORMA
ANALIZA
contador de letras = contador de letras + 1
IR al paso 5
6. número de palabras = contador de espacios + 1
7. DESPLEGAR número de palabras
El proceso que está dentro del ciclo estará compuesto de las siguientes acciones:
ANALIZA:
1. Tomar un carácter
2. SI carácter tomado = espacio ENTONCES
incrementar contador de espacios en uno
Los datos del problema son:
SALIDAS: Número de palabras que tiene una frase
ENTRADAS: frase
DATOS ADICIONALES: Ninguno
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
f$
ce
cl
1
c$
np
A
a
a
a
a
frase
contador de espacios
contador de letras
longitud de la frase
a un carácter de la
a número de palabras
a proceso ANALIZA
1. PEDIR f$
2. c ←0
3. cl ← 1
4. I ←L E N ( f $ )
328
5.
6.
7.
PARTE III.
PROGRAMACIÓN
SI cl > 1 ENTONCES
IR al paso 6
DE OTRA FORMA
A
cl ← cl + 1
IR al paso 5
np ← ce + 1
DESPLEGAR "la frase tiene", np, " palabras"
A:
1. c$ ←MID$( f$, cl, 1)
2. SI c$ = SPACE$(1) ENTONCES
ce ← ce + 1
3.
FINP
Paso 4. Diagrama de flujo (véase Fig. 9.4).
Paso 5. Codificación y edición del programa:
REM Programa que obtiene el número de palabras de una frase
INPUT "Da la frase";f$
ce=O
I = LEN( f$ )
FOR cl=1 TO I
c$= MID$ (f$, cl, 1 )
IF c$=SPACE$[1] THEN
ce=ce + 1
END IF
NEXT cl
np= ce +1
PRINT "La frase tiene"; np; "palabras"
END
Paso 6. Pruebas y depuración del programa:
Se llevará a cabo la primera fase de pruebas:
f$ ←Buenos días México
ce ←0
1←18
cl← 1
Ejecuta proceso A por primera vez.
c$←B
cl←2
Ejecuta proceso A por segunda vez.
CAPÍTULO 9. FUNCIONES
Figura 9.4
329
330
PARTE III.
PROGRAMACIÓN
c$←u
cl←3
Ejecuta proceso A por tercera vez.
c$←e
cl←4
Ejecuta proceso A por cuarta vez.
c$←n
cl←5
Ejecuta proceso A por quinta vez.
C$ ←0
cl ←6
Ejecuta proceso A por sexta vez.
c$←s
cl ←7
Ejecuta proceso A por séptima vez.
c$←
ce ← 1
cl←8
Ejecuta proceso A por octava vez.
c$←d
cl←9
Ejecuta proceso A por novena vez.
c$←í
c$ ←10
Ejecuta proceso A por décima vez.
c$←a
cl← 11
Ejecuta proceso A por undécima vez.
c$ ←s
Cl←12
Ejecuta proceso A por duodécima vez.
c$←
ce ← 2
cl← 13
Ejecuta proceso A por decimotercera vez.
CAPÍTULO 9. FUNCIONES
331
c $← M
cl← 14
Ejecuta proceso A por decimocuarta yez.
c$←é
cl ←15
Ejecuta proceso A por decimoquinta vez.
c$←x
cl ←16
Ejecuta proceso A por decimosexta vez.
c$←i
cl← 17
Ejecuta proceso A por decimoséptima vez.
c$←c
cl ←18
Ejecuta proceso A por decimoctava vez.
c$ ← o
cl← 19
Debido a que el valor de el es mayor que el de 1, se sale del ciclo.
np ←3
Despliega: La frase tiene 3 palabras
En la segunda fase de pruebas se observará en la pantalla lo siguiente:
Da la frase? Buenos días México
La frase tiene 3 palabras
Ejercicio: Introducir el programa en la computadora y realizar la segunda fase de pruebas con
al menos tres frases.
PROBLEMA 2
Obtener el Registro Federal de Causantes (RFC) de una persona. Se sabe que éste se obtiene
incluyendo la inicial del primer apellido, la primera vocal a partir de la segunda letra del primer
apellido, la inicial del segundo apellido y la inicial del primer nombre. Además se le agrega la fecha
de nacimiento en el formato año-mes-día utilizando dos dígitos para cada uno.
Paso 1. Definición del problema:
Igual a la redacción del problema
332
PARTE III.
PROGRAMACIÓN
Paso 2. Planeación de la solución:
Una vez pedidos como entrada los datos de: nombre, primer apellido, segundo apellido y fecha de
nacimiento, procederemos a obtener el RFC.
Para obtener las iniciales de nombre y apellidos, se podrá utilizar cualquiera de las dos funciones
siguientes:
inicial$ = MID$ [expresión alfanumérica,1,1]
o
inicial$ = LEFT$ [expresión alfanumérica.1]
Donde la expresión alfanumérica podrá ser nombre, primero o segundo apellido.
Posteriormente se procederá a buscar la primera vocal del primer apellido, para lo que tendremos
que utilizar un ciclo con un número determinado de iteraciones, en donde un proceso se repetirá a
partir de la segunda letra tantas veces como letras tenga el apellido, o hasta que se encuentre alguna
vocal.
El proceso estará formado por las siguientes acciones:
1.
2.
Tomar una letra
SI letra tomada="a" o letra tomada = "A"
o letra tomada="e" o letra tomada = "E"
o letra tomada="i" o letra tomada = "I"
o letra tomada="o" o letra tomada = "O"
o letra tomada= "u" o letra tomada = "U" ENTONCES
primera vocal del primer apellido < - letra tomada
contador de letras < - número de letras
Finalmente para obtener el RFC se concatenarán los datos obtenidos.
SALIDAS: RFC
ENTRADAS: nombre, primer apellido, segundo apellido, fecha de nacimiento
DATOS ADICIONALES: El RFC se obtiene poniendo la inicial del primer apellido, seguido de la
primera vocal a partir de la segunda letra del primer apellido, seguido de la inicial del segundo
apellido, de la inicial del primer nombre y de la fecha de nacimiento en el formato año-mes-día.
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
nom$
pa$
sa$
fn$
inom$
ipa$
isa$
cl
a nombre de la persona
a primer apellido
a segundo apellido
a fecha de nacimiento
a inicial del nombre
a inicial del primer apellido
a inicial del segundo apellido
a contador de letras
CAPÍTULO 9. FUNCIONES
c$
1
vpa$
rfc$
P
333
a carácter tomado
a longitud del primer apellido
a primera vocal del primer apellido
a registro federal de causantes
a proceso de buscar la vocal
1.
2.
3.
4.
5.
6.
7.
PEDIR nom$,pa$,sa$,fn$
inom$←LEFT$(nom$,l)
¡pa$ ←LEFT$(pa$, 1)
isa$ ← LEFT$(sa$, 1)
1 ← LEN(pa$)
cl ← 2
SI cl>l ENTONCES
IR al paso 8
DE OTRA FORMA P
cl ←cl + 1
IR al paso 7
8. rfc$ ←ipa$ + vpa$ + isa$ + inom$ + fn$
9. DESPLEGAR rfc$
P:
1. c$←MID$(pa$,cl,l)
2. SI c$="a" OR c$="A" OR c$="e" OR c$="E" OR c$="i" OR c$="I" OR c$="o" OR
c$ = "O" OR c$ = "u" OR c$="U" ENTONCES
vpa$ ← c$
cl←l
3. FINP
Paso 4. Diagrama de flujo (véanse Figs. 9.5 y 9.6).
Paso 5. Codificación y edición del programa:
REM Registro Federal de Causantes
INPUT "Da tu nombre"; nom$
INPUT "Da tu primer apellido"; pa$
INPUT "Da tu segundo apellido"; sa$
INPUT "Da tu fecha de nacimiento en el formato [AAMMDD]"; fn$
inom$ = LEFT$[nom$.1]
ipa$ = LEFT$[pa$,1]
isa$ = LEFT$[sa$,1]
I = LEN[pa$]
F0Rcl=2 T0 l
c$ = MID$[pa$.cl,1]
IF c$="a" OR c$="A" OR c$="e" OR c$="E" OR c$="i" OR
334
PARTE III.
PROGRAMACIÓN
Figura 9.5
CAPÍTULO 9. FUNCIONES
Figura 9.6
c$="l" OR c$="o" OR c$="O" OR c$="u" OR c$="U" THEN
vpa$= c$
cl = I
END IF
NEXT cl
rfc$ =ipa$ + vpa$ + isa$ + inom$ + fn$
PRINT “Tu registro federal de causantes es"; rfc$
END
Ejercicio: Efectuar el paso de pruebas del programa incluyendo las dos fases.
335
336
PARTE III.
PROGRAMACIÓN
PROBLEMA 3
Pedir el nombre completo de una persona en una misma variable y obtener sus iniciales.
Paso 1. Definición del problema:
Igual a la redacción del problema
Paso 2. Planeación de la solución:
Obtener la inicial del nombre es sencillo, pues.es el primer carácter del nombre completo. Para obtener
las demás iniciales tendremos que emplear un ciclo con un número determinado de iteraciones desde
el segundo hasta el penúltimo carácter del nombre completo. Por cada espacio que encontremos
significará que el carácter siguiente es una inicial, por lo que lo concatenaremos a una variable que
irá acumulando las iniciales.
SALIDAS: iniciales ENTRADAS:
nombre completo
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
nc$
in$
1
c
1.
2.
3.
4.
5.
6.
P:
1.
2.
a
a
a
a
nombrecompleto
iniciales
longitud del nombre completo
contador
PEDIR nc$
1 ←LEN(nc$)
in$←LEFTS(nc$,l)
c←2
SI c> l-1 ENTONCES
IR al paso 6
DE OTRA FORMA
P
c←c+1
IR al paso 5
DESPLEGAR in$
c$ ←MID$(nc$,c, 1)
SI c$ = SPACE$( 1) ENTONCES
in$=in$ + MID$(nc$,c+l,l)
Paso 4. Diagrama de flujo [véanse Figs. 9.7 y 9.8).
Paso 5. Codificación y edición del programa: REM
Obtener las iniciales de un nombre completo
CAPÍTULO 9. FUNCIONES
Figura 9.7
337
338
PARTE III.
PROGRAMACIÓN
in$ ←in$ + MID$(nc$,c+ 1 , 1 )
Figura 9.8
INPUT "Nombre completo"; nc$
I = LEN[nc$]
in$ = LEFT$[nc$, 1]
FOR c=2 TO l-1
c$= MID$[nc$,c,1]
IFc$=SPACE$[1] THEN
in$=in$ + MID$[nc$,c+1,1]
END IF
NEXT c
PRINT "Las iniciales son:"; in$
END
Ejercicio: Efectuar el paso de pruebas del programa incluyendo las dos fases.
Podemos encontrar otra solución más a este problema, para lo cual únicamente desarrollaremos los
pasos 2 y 5 de la metodología.
Paso 2. Planeación de la solución:
Bajo la misma idea de que encontrando un espacio el siguiente carácter es una inicial, podemos
agregar antes del ciclo un espacio al nombre completo y de esta manera detectar la primera inicial
dentro del ciclo, para lo cual la variable que concatena las iniciales debe comenzar esta vez con el
carácter nulo.
CAPÍTULO 9. FUNCIONES
339
Paso 5. Codificación y edición del programa:
REM Obtener las iniciales de un nombre completo
INPUT "Nombre completo"; nc$
nc$ = SPACE$[1] + nc$
I = LEN[nc$]
in$ = " "
FOR c=1 TO l-1
c$=MID$[nc$,c,1]
IF c$=SPACE$[1] THEN
in$=in$ + MID$[nc$,c + 1,1]
END IF
NEXT c
PRINT "Las iniciales son:"; in$
END
Ejercicio: Efectuar el paso de prueba del programa incluyendo las dos fases.
Problemas propuestos
1.
2.
3.
4.
5.
6.
7.
8.
Dada una frase contar el número de veces que se repite algún carácter.
Dada una frase escribirla al revés.
Dada una frase obtener cuántas vocales y cuántas consonantes tiene.
Dado un texto escribirlo en escalera de la siguiente manera:
t
te
tex
text
texto
Dado un texto sustituir todas las letras a por *.
Dado el nombre completo de una persona, obtener su primer apellido. Por ejemplo, si el nombre
es Juan Rodríguez Gómez, deberá obtener la palabra Rodríguez.
Decir si una palabra dada es un palíndromo o no.
Dada una frase convertirla a tipo telegrama eliminando las siguientes palabras: y, de, el, la, lo,
los, las, un, una, unos, unas, te, le, que.
Por ejemplo, si la frase es: Te envío lo siguiente para que lo revises.
Debe imprimir: envío siguiente para revises
9b) FUNCIONES DEFINIDAS POR EL USUARIO
Este tipo de funciones se clasifican en:
1) Funciones de una sola línea
2) Funciones multilíneas
340
PARTE III.
PROGRAMACIÓN
1) Funciones de una sola línea
Son funciones que el usuario-programador-define y están conformadas por una línea de instrucciones.
El formato para crear este tipo de funciones es el siguiente:
DEF FNnombre [(lista de parámetros)] = expresión
donde:
nombre
Es el nombre que el programador asigna a la función. Para asignar este
nombre deberán seguirse las reglas usadas para dar nombres a las variables.
lista de parámetros
Es una lista de variables separadas por comas a las que se les asignará un
valor cuando se llame a la función.
expresión
Es el valor que regresará la función.
Una función se puede definir en cualquier parte del programa.
Ejemplo:
INPUT "Da tu nombre"; a$
INPUT "Da tu apellido paterno"; b$
INPUT "Da tu apellido materno"; c$
PRINT FNinicial$Ca$,b$,c$)
DEF FNinicial$(a$,b$,c$) = LEFT$(a$, 1) + SPACE$(1) + LEFT$(b$, 1] + SPACE$(1) +
LEFT$(c$, 1)
Prueba:
Da tu nombre? Roberto
Da tu apellido paterno? Pérez
Da tu apellido materno? Salazar
RPS
2) Funciones multilínca
Son funciones que el usuario define y están conformadas por más de una línea. El
formato para crearlas es el siguiente:
DEF FNnombre [(lista de parámetros)]
:
:instrucciones
:
[EXIT DEF]
[FNnombre = expresión]
END DEF
CAPÍTULO 9. FUNCIONES
donde:
nombre
lista de parámetros
341
Es el nombre que el usuario asigna a la función. Para asignar este nombre
deberán seguirse las reglas usadas para dar nombre a las variables.
Es una lista de variables separadas por comas, a las que se les asignará un
valor cuando se llame a la función.
EXIT DEF
Se utiliza cuando se necesita regresar a la línea que se encuentra después
de donde se hizo la llamada, antes de que la función termine.
END DEF
Es el fin de la función multilínea.
Problemas resueltos
PROBLEMA 1
Escribir una función que devuelva el factorial de un número. El factorial de un número se define como
el producto de todos los enteros menores que él, empezando por 1 e incluyéndolo a él mismo. Por
ejemplo, el factorial de 4 es:
4X3X2X1=24
Paso 1. Definición del problema:
Igual a la redacción del problema
Paso 2. Planeación de la solución:
La función FACT se definirá como un procedimiento con la diferencia de que la última instrucción
será FIN FACT.
Necesitaremos hacer uso de un ciclo con un número determinado de iteraciones en donde cada
iteración consistirá de multiplicar el contador de iteraciones por el último producto obtenido.
El proceso principal, que es donde se mandará llamar a la función FACT, quedará de la siguiente
manera:
1. PEDIR número
2. DESPLEGAR FACT (número)
3. FIN
La función FACT quedará de la siguiente manera:
FACT:
1. factorial ← 1
2. contador ← 1
3. SI contador > número ENTONCES
IR al paso 4
DE OTRA FORMA
M
342
PARTE III.
PROGRAMACIÓN
contador ← contador + 1
IR al paso 3
4. FIN FACT
M:
1. factorial ← factorial X contador
2. FINP
SALIDAS: Factorial de un número
ENTRADAS: Número
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
f
a factorial
a contador
c
n
M
FACT
a
número
a proceso que se repite como parte de
a
función que obtiene el factorial
1.
PEDIR n
2.
3.
DESPLEGAR FACT(n)
FIN
FACT:
1. f← 1
2. c←1
3. SIc> n ENTONCES
IR al paso 4
DE OTRA FORMA
M
c ←1 c + 1
IR al paso 3
4. FIN FACT
M:
1.
2.
f←f* c
FINP
Paso 4. Diagrama de flujo (véanse Figs. 9.9 y 9.10).
Paso 5. Codifícación y edición del programa:
REM Factorial de un número
INPUT "Da un número"; n
CAPÍTULO 9. FUNCIONES
343
Figura 9.9
PRINT "El factorial del número es"; FNfact[n]
END
DEF FNfact[n]
f=1
FOR c=1 TO n
f= f * c
NEXTc
FNfact = f
END DEF
Ejercicio: Efectuar el paso de pruebas del programa incluyendo las dos fases.
Problemas propuestos
1.
Escribir una función que obtenga el resultado de elevar un número a cualquier potencia, sin hacer
uso del operador A.
2. Escribir una función que obtenga la hipotenusa de un triángulo rectángulo para cualesquiera dimensiones.
3. Escribir una función que regrese el resultado de sumar los primeros n números naturales.
4. Escribir una función que obtenga el número de vocales que contiene una frase.
344
PARTE III.
PROGRAMACIÓN
Figura 9.10
CAPÍTULO 9. FUNCIONES
345
RESUMEN
Función: una función es un proceso que puede ser utilizado en un programa como parte de una
expresión. Una característica importante de las funciones es que después de ser ejecutadas regresan
un valor. Se clasifican en:
a) Funciones predefinidas: son funciones que Quick Basic incluye en su conjunto de instrucciones
y a su vez se clasifican en:
1) Funciones numéricas: son funciones que al ser ejecutadas trabajan con valores numéricos.
Funciones trigonométricas
Función SIN: obtiene el seno de un ángulo en radianes.
Función COS: obtiene el coseno de un ángulo en radianes.
Función TAN: obtiene la tangente de un ángulo en radianes.
Función ARCTAN: obtiene el arcotangente de un ángulo en radianes.
Funciones aritméticas
Función SQR: obtiene la raíz cuadrada de un número.
Función ABS: obtiene el valor absoluto de un número.
Función FIX: elimina los dígitos que se encuentran a la derecha del punto decimal de una
expresión numérica.
Función INT: obtiene el valor entero más cercano.
2) Funciones alfanuméricas: son funciones que al ser ejecutadas trabajan con valores alfanuméricos.
Función LEFT$: obtiene determinado número de caracteres empezando por el extremo
izquierdo.
Función RIGHT$: obtiene determinado número de caracteres empezando por el extremo
derecho.
Función MID$: obtiene determinado número de caracteres empezando en determinada
posición.
Función LEN: obtiene el número de caracteres que tiene un dato alfanumérico.
Función SPACE$: obtiene una cantidad determinada de espacios.
b) Funciones definidas por el usuario: son funciones creadas por el programador mismo mediante
la instrucción DEF FN y se clasifican en:
1) Funciones de una sola línea
2) Funciones multilíneas
CAPÍTULO
10
PROCESOS
MODULARES
OBJETIVOS
10.1 El alumno definirá qué es un proceso modular o módulo.
10.2 El alumno identificará los diferentes tipos de los procesos modulares, así como sus características particulares:
a) Funciones
b) Subrutinas
c) Procedimientos
d) Subprogramas
é) Programas
10.3 El alumno aplicará los procesos modulares para la solución de problemas repetitivos compuestos.
346
CAPÍTULO
10
PROCESOS
MODULARES
Se le llama módulo a una sección separada del cuerpo principal de un proceso pero que es ejecutada
desde algún punto de éste. Un módulo tiene un nombre y misión específica.
Por ejemplo, el siguiente algoritmo procesa un número indeterminado de clientes para producir un
total.
1
2.
3.
4.
t=0
CLIENTE
PEDIR mas$
SI mas$ = "NO" ENTONCES
IR al paso 5
DE OTRA FORMA
IR al paso 2
5. DESPLEGAR t
El proceso CLIENTE es un módulo, pues es mandado ejecutar por un proceso principal; tiene un
nombre y una misión específica, que es procesar a un solo cliente.
El concepto de módulo nace de la idea de que un problema sea separado en problemas más
pequeños para facilitar su solución. Por ejemplo, considere el siguiente problema:
Una persona desea vender un terreno rectangular de gran valor, para lo cual deberá revisar sus
escrituras y saber cuántos metros cuadrados va a vender; además piensa realizar un sondeo con cinco
vecinos suyos para obtener un promedio del precio del metro cuadrado en su zona. Finalmente
someterá a subasta su terreno con un precio inicial de $500 más sobre el 90% del valor del terreno
calculado por él y dando incrementos de $500 en cada nueva oferta hasta que sea vendido. Si nadie
acepta la oferta inicial se rematará en el 90% de su valor. Obtener el precio final por concepto de la
venta del terreno.
347
348
PARTE I I I . PROGRAMACIÓN
Paso 1. Definición del problema:
Dada en la redacción del problema.
Paso 2. Planeación de la solución:
El problema se divide en tres partes, a saber:
1) Investigar las medidas del terreno para conocer su superficie.
2) Tomar cinco muestras del precio del metro cuadrado para calcular promedio del precio del metro
cuadrado.
3) Realizar la subasta para desplegar el precio final
Podemos resumir estos pasos de la siguiente manera:
1) SUPERFICIE-TERRENO
2) PRECIO-METRO2
3) SUBASTA
Cada uno debe contener los siguientes pasos:
Proceso modular SUPERFICIE-TERRENO:
1) PEDIR largo
2) PEDIR ancho
3) superficie = largo * ancho
Proceso modular PRECIO-METRO2:
1)
2)
3)
4)
5)
6)
PEDIR precio 1
PEDIR precio2
PEDIR precio3
PEDIR precio4
PEDIR precio5
precio = (precio 1 + precio2 + precio3 + precio4 + precio5) / 5
Proceso modular SUBASTA:
1)
2)
3)
4)
5)
precio-total = superficie * precio
precio-final = precio-total * 0.9
precio-final = precio-final + 500
PEDIR mas$
SI mas$ = "NO" ENTONCES
IR al paso 6
DE OTRA FORMA
IR al paso 3
6) precio-final = precio-final - 500
7) DESPLEGAR precio-final
CAPÍTULO 10. PROCESOS MODULARES
349
Lo que se hizo en este paso 2 de la metodología fue partir el problema en sus tres partes principales
y se les dio un nombre a cada una. A continuación se atacó cada una de las partes llegando a una
solución para lo que de cada una de ellas se necesitaba, haciendo de esta manera más sencilla la
solución integral del problema.
A esta técnica de solucionar un problema dividiéndolo en sus partes principales se le llama
modularización, llamándosele a cada parte, proceso modular o módulo.
Ejercicio: Se deja al alumno terminar los pasos de la metodología para este ejemplo.
Existen varios conceptos relacionados con modularización:
1)
2)
3)
4)
5)
Función
Subrutina
Procedimiento
Subprograma
Programa
A continuación los definimos.
1) Función
Es una instrucción que recibe uno o varios valores llamados parámetros y dependiendo de éstos se
produce un resultado.
Una función puede estar en el vocabulario Quick Basic o puede ser definida por el programador
mediante la instrucción DEF FN.
Ejemplos:
Funciones numéricas: INT, SIN, COS.
Funciones alfanuméricas: LEN, LEFT$, RIGHT$
2) Subrutina
Es una parte del programa que no pertenece al cuerpo del programa principal pero que es mandado
ejecutar desde éste mediante la instrucción GOSUB.
La subrutina debe tener un nombre o etiqueta al principio de ella, seguida de dos puntos (:) y
terminar con la instrucción RETURN.
Cuando desde el programa principal se manda ejecutar la subrutina con GOSUB se transfiere el
control del programa a la instrucción siguiente a la etiqueta, hasta que se encuentre la instrucción
RETURN, con lo cual se devuelve el control al cuerpo principal del programa en la instrucción
siguiente al GOSUB.
Se recomienda indentar las instrucciones de la subrutina con respecto a la etiqueta y al RETURN.
Con respecto al algoritmo y diagrama de flujo, una subrutina equivale a un proceso en donde su
último bloque o instrucción, que es FINP, equivale en Quick Basic a la instrucción RETURN.
350
PARTE 111. PROGRAMACIÓN
Ejemplo:
REM Ejemplo de subrutina
CLS
PRINT "Todavía no se ejecuta la subrutina"
PRINT
GOSUB MODULO
PRINT
PRINT 'Ya terminó de ejecutarse la subrutina"
END
MODULO:
PRINT "Este mensaje es parte de la subrutina"
RETURN
Ejecución:
Todavía no se ejecuta la subrutina
Este mensaje es parte de la subrutina
Ya terminó de ejecutarse la subrutina
3) Procedimiento
Es una combinación de subrutina y función, pues es un conjunto de instrucciones fuera del cuerpo
del programa principal que es mandado ejecutar desde éste, como subrutina, pero también puede
recibir parámetros como las funciones.
Los procedimientos deben comenzar con la línea:
SUB nombre-del-procedimiento ( parámetros ) y
deben terminar con: END SUB
Desde el cuerpo principal del programa se manda ejecutar un procedimiento mediante la instrucción:
CALL nombre-del-procedimiento ( parámetros )
4) Subprogramas
Son programas que son mandados a ejecutar por otros programas mediante la instrucción CHAIN.
CAPÍTULO 10. PROCESOS MODULARES
351
5) Programas
Es un conjunto de instrucciones bajo un mismo nombre de archivo. Un programa complejo puede
estar modularizado y comprender funciones, subrutinas, procedimientos e inclusive subprogramas.
Los programas en Quick Basic terminan con la instrucción .BAS.
A continuación se terminará con la metodología para los problemas repetitivos compuestos del
capítulo 4, utilizando el concepto de subrutinas.
Problemas resueltos
PROBLEMA 1
En un supermercado un cajero captura los precios de los artículos que los clientes compran e indica
a cada cliente cuál es el monto de lo que deben pagar. Al final del día le indica a su supervisor cuánto
fue lo que cobró en total a todos los clientes que pasaron por su caja.
Paso 4. Diagrama de flujo (véanse Figs. 10.1 y 10.2).
Paso 5. Codificación y edición del programa:
REM Cajero en un supermercado
tcaj=O
X:
GOSUB C
tcaj=tcaj + tcl
INPUT "Más clientes (SI/N0)";mas$
IFmas$="NO"THEN
GOTO Y
ELSE
GOTO X
END IF
Y:
PRINT 'Total del cajero:"; tcaj
END
REM Subrutina del cliente
C:
tcl=O
A1:
GOSUB A
tcl=tcl + ta
INPUT "Más artículos (SI/N0)";mas1$
IFmas1$="N0"THEN
GOTO B
ELSE
352
PARTE III. PROGRAMACIÓN
Figura 10.1
GOTO A1
ENDIF B:
PRINT 'Total del cliente:"; tcl
PRINT RETURN
REM Subrutina del artículo
CAPÍTULO 10.
Figura 10.2
PROCESOS MODULARES
353
354
PARTE III. PROGRAMACIÓN
A:
INPUT "Precio";p
INPUT "Cantidad";c
ta=p * c
RETURN
Paso 6. Pruebas y depuración:
Ejercicio: Se deja al alumno la tarea de editar el programa y realizar esta fase de pruebas de
la metodología. Se sugiere que estas pruebas sean las mismas que las del diagrama de flujo del
ejercicio correspondiente en el capítulo 4.
PROBLEMA 2
Cinco miembros de un club de obesidad desean saber cuánto han bajado o subido de peso desde la
última vez que se reunieron. Para ello realizan un ritual de pesaje en donde cada uno se pesa en diez
básculas distintas para así tener un promedio más exacto de su peso. Si existe diferencia positiva entre
este promedio de peso y el peso de la última vez que se reunieron, significa que subieron de peso.
Pero si la diferencia es negativa, significa que bajaron. Lo que el problema requiere es que por cada
persona se imprima un letrero que diga "SUBIÓ" o "BAJO" y la cantidad de kilos que subió o bajó
de peso.
Paso 4. Diagrama de flujo (véanse Figs. 10.3, 10.4 y 10.5).
Paso 5. Codificación y edición del programa:
REM Control de peso en un club
F0Rc=1 T0 5
GOSUB M
NEXT c
END
REM Subrutina Miembro
M:
INPUT "Promedio de peso anterior";pant
sp=O
F0R cb=1 TO 10
GOSUB B
NEXT cb
pa=sp/1O
dif=pa-pant
IFdif <OTHEN
PRINT "Bajó de peso"
ELSE
PRINT "Subió de peso"
CAPÍTULO 10. PROCESOS MODULARES
355
Figura 10.3
END IF
PRINT
RETURN
REM Subrutina Báscula
B:
INPUT "Peso";pe
sp=sp+pe
RETURN
Paso 6. Pruebas y depuración:
Ejercicio: Se deja al alumno la tarea de editar el programa y realizar esta fase de pruebas de
la metodología. Se sugiere que estas pruebas sean las mismas que las del diagrama de flujo del
ejercicio correspondiente en el capítulo 4.
356
PARTE III. PROGRAMACIÓN
Figura 10.4
CAPÍTULO 10. PROCESOS MODULARES
357
Figura 10.5
PROBLEMA 3
Simular el comportamiento de un reloj digital imprimiendo la hora, minuto y segundo en cada segundo
de un día desde las 0:00:00 horas hasta las 23:59:59 horas.
Paso 4. Diagrama de flujo (véanse Figs. 10.6, 10.7 y 10.8).
Paso 5. Codificación y edición del programa.
REM Reloj
F0Rh=OT0 59
GOSUB M
NEXT h
END
REM Subrutina Minutos
M:
F0R m=0T0 59
GOSUB S
NEXT m
RETURN
REM Subrutina Segundos
S:
358
PARTE 111. PROGRAMACIÓN
Figura 10.6
FOR s=O TO 59
GOSUB D
NEXTs
RETURN
REM Subrutina DISPLAY D:
PRINT h;":"; m ;":"; s
RETURN
Paso 6. Pruebas y depuración:
Ejercicio: Se deja al alumno la tarea de editar el programa y realizar esta fase de pruebas de
la metodología. Se sugiere que estas pruebas sean las mismas que las del diagrama de flujo del
ejercicio correspondiente en el capítulo 4.
CAPÍTULO 10. PROCESOS MODULARES
Figura 10.7
Figura 10.8
359
360
PARTE III. PROGRAMACIÓN
PROBLEMA 4
Se desea obtener el promedio de g grupos que están en un mismo año escolar, considerando que cada
grupo puede tener n alumnos, que cada alumno puede llevar m materias y que en todas las materias
se promedian tres calificaciones para obtener el promedio de la materia. Lo que se desea desplegar
es el promedio de los grupos, el promedio de cada grupo y el promedio de cada alumno.
Paso 4. Diagrama de flujo (véanse Figs. 10.9, 10.10, 10.11 y 10.12). Paso
5. Codificación y edición del programa:
REM Promedios de grupos
INPUT "Número de grupos";g
stg=O
FORcg=1 TO g
GOSUB G
NEXT cg
ptg=stg / g
PRINT "Promedio de todos los grupos:";ptg
END
REM Subrutina Grupo
G:
INPUT "Número de alumnos del grupo";na
sg=O
FOR ca=1 TO na
GOSUB A
NEXT ca
pg=sg / na
PRINT "Promedio del grupo";pg
PRINT
stg=stg+pg
RETURN
REM Subrutina Alumno
A:
INPUT "Número de materias del alumno";nm
sa=O
FOR cm=1 TO nm
GOSUB M
NEXTcm
pa=sa / nm
PRINT "Promedio del alumno";pa
CAPÍTULO 10. PROCESOS MODULARES
Figura 10.9
361
362
PARTE III. PROGRAMACIÓN
Figura 10.10
CAPÍTULO 10. PROCESOS MODULARES
Figura 10.11
363
364
PARTE III. PROGRAMACIÓN
Figura 10.12
PRINT
sg=sg+pa
RETURN
REM Subrutina Materia
M:
INPUT "Calificación 1 ";c1
INPUT "Calificación 2";c2
INPUT "Calificación 3";c3
PRINT
pm= [c1+c2+c3]/3
sa=sa+pm
RETURN
Paso 6. Pruebas y depuración:
Ejercicio: Se deja al alumno la tarea de editar el programa y realizar esta fase de pruebas de
la metodología. Se sugiere que estas pruebas sean las mismas que las del diagrama de flujo del
ejercicio correspondiente en el capítulo 4.
CAPÍTULO 10. PROCESOS MODULARES
365
Problemas propuestos
Realizar los pasos restantes de la metodología para los problemas repetitivos compuestos propuestos
en el capítulo 4, empleando subrutinas.
366
PARTE II I . PROGRAMACIÓN
RESUMEN
Módulo: es una sección separada del cuerpo principal de un proceso pero que es ejecutada desde
algún punto de éste. Un módulo tiene un nombre y misión específica. El concepto de módulo nace
de la idea de que un problema debe dividirse en problemas más pequeños para facilitar su solución.
Modularización: técnica para solucionar un problema dividiéndolo en sus partes principales,
llamándosele a cada una de estas partes proceso modular o módulo.
Conceptos relacionados con modularización:
Función: es una instrucción que recibe uno o varios valores llamados parámetros y dependiendo
de éstos se produce un resultado. Una función puede estar en el vocabulario de Quick Basic o puede
ser definida por el programador mediante la instrucción DEF FN.
Subrutina: es una parte del programa que no pertenece al cuerpo del programa principal pero que
es mandado ejecutar desde éste mediante la instrucción GOSUB. La subrutina debe tener un nombre
o etiqueta al principio de ella seguida de dos puntos (:) y terminar con la instrucción RETURN.
Procedimiento: es una combinación de subrutina y función, ya que es un conjunto de instrucciones
fuera del cuerpo del programa principal que es mandado ejecutar desde éste, como subrutina, pero
también puede recibir parámetros como las funciones.
Subprogramas: son programas que son mandados a ejecutar por otros programas.
Programas: es un conjunto de instrucciones bajo un mismo nombre de archivo. Un programa
complejo puede estar modularizado y comprender funciones, subrutinas, procedimientos e inclusive
subprogramas.
CAPÍTULO
11
ESTRUCTURAS
DE DATOS
OBJETIVOS
11.1
11.2
11.3
11.4
11.5
El alumno definirá qué es una estructura de datos.
El alumno explicará los tipos de estructura de datos, sus características y su manejo:
a) Arreglos
b) Matrices
c) Archivos
—Secuenciales
—Aleatorios
El alumno utilizará la metodología para solucionar problemas empleando arreglos.
El alumno utilizará la metodología para solucionar problemas empleando matrices.
El alumno utilizará la metodología para solucionar problemas empleando archivos aleatorios.
11.5.1 El alumno explicará las operaciones que pueden realizarse con los archivos aleatorios:
a) Altas
b) Bajas
c) Consultas
d) Cambios
e) Reporte general
f) Reportes específicos
11.5.2 El alumno definirá las instrucciones que proporciona el lenguaje Quick Basic para el
tratamiento de archivos aleatorios
11.5.3 El alumno será capaz de resolver un problema empleando las operaciones vistas con
los archivos aleatorios.
367
CAPÍTULO
ESTRUCTURAS
DE DATOS
Frecuentemente en la vida diaria mencionamos conceptos relacionados con una colección de datos.
Por ejemplo, si vemos un conjunto de personas menores de 13 años de edad les llamamos "niños" y
no importa no mencionar el nombre de todos y cada uno para referirnos a ellos.
Hasta el momento hemos considerado los datos como valores individuales, por ejemplo, el valor
5 se asigna a la variable n o el dato 12 se multiplica por algún otro, etc. Sin embargo, los datos pueden
organizarse en estructuras, de tal manera que podemos tener un conjunto de datos numéricos llamados
edades o un conjunto de datos alfanuméricos llamados nombre$, etc. Se le llama estructura de datos
a la organización que reciben los datos para tratar a un conjunto de ellos como una unidad.
Existen varias estructuras de datos, dependiendo de la forma de organización de éstos, de las cuales
estudiaremos a tres:
1) Arreglos
2) Matrices
3) Archivos de datos
Las dos primeras están relacionadas con el tratamiento de datos en memoria principal, mientras
que los archivos de datos lo están con la memoria secundaria. A continuación estudiaremos cada una
de estas estructuras de datos.
1) Arreglos
La estructura de datos que organiza sus datos de manera lineal se denomina arreglos. Éstos emplean
un índice entre paréntesis para referenciar los elementos de que consta.
Por ejemplo, si deseáramos tener en el arreglo nombres$ los nombres de 5 personas tendríamos
que ejecutar las siguientes instrucciones:
368
CAPÍTULO 11. ESTRUCTURAS DE DATOS
369
nombres$(l) = "ALFREDO"
nombres$(2) = "RAÚL"
nombres$(3) = "JOSÉ"
nombres$(4) = "JUAN"
nombres$(5) = "CARLOS"
Lo cual significa que al elemento 1 del arreglo nombres$ se le asignó el dato "ALFREDO" y que
a los demás elementos del arreglo se les asignó el dato respectivo. Para recuperar un dato del arreglo,
por ejemplo para imprimirlo, sólo basta con el nombre del arreglo y el número de elemento-índice-en
que está guardado:
PRINT
nombres$(3)
desplegará en pantalla: JOSÉ
a$ = nombres$(4) + SPACE$(1) + nombres$(5)
PRINT a$
desplegará: JUAN CARLOS
Si en vez de asignar este arreglo lo tuviéramos que pedir como dato de entrada, tendríamos que
usar las siguientes instrucciones:
INPUT nombre$(l)
INPUT nombre$(2)
INPUT nombre$(3)
INPUT nombre$(4)
INPUT nombre$(5)
Como en este conjunto de instrucciones lo único que varía son los índices del arreglo, podemos
emplear la instrucción FOR...NEXT para hacerlo más sencillo.
FORi=l TO5
INPUT nombre$(i)
NEXT i
Antes de usarlo, un arreglo debe ser declarado con la instrucción DIM:
DIM nombre-del-arreglo ( expresión numérica) donde:
el nombre del arreglo puede ser un identificador numérico o alfanumérico
el resultado de la expresión numérica debe ser el índice máximo que esperamos alcanzar con
nuestro arreglo
370
PARTE III. PROGRAMACIÓN
un mismo DIM puede contener varias declaraciones, separando las variables con comas
Si la instrucción DIM no se emplea para declarar un arreglo se asume que su rango de índices es
de 0 a 10, por tanto, es un error efectuar un acceso con índices que no estén en este rango.
Para nuestro arreglo nombres$, dado que su índice máximo es 5, su declaración deberá quedar de
la siguiente manera:
DIM nombres$(5)
Con esta declaración Quick Basic reservará los índices 0,1, 2, 3, 4 y 5 para nuestro arreglo. Como
el índice 0 no lo ocupamos, puede emplearse la instrucción OPTION BASE para indicarle a Quick
Basic que el primer índice de nuestro arreglo comenzará en 1 y no en 0:
OPTION BASE 1
El formato general de la instrucción es:
OPTION BASE n
en donde n es el primer índice que emplearemos para los arreglos que declaremos después de la
instrucción. Si la instrucción no aparece en el programa se asume que n es igual a 0.
En un arreglo todos los elementos deben ser del mismo tipo, ya sea numéricos o alfanuméricos.
Así pues, el conjunto de instrucciones para pedir un arreglo de nombres y luego desplegarlo sería:
REM Pedir 5 nombres en un arreglo y desplegarlos
OPTION BASE 1
DIM nombres$(5)
PRINT "Teclea 5 nombres:"
FOR i=1 T0 5
INPUT nombres$[¡)
NEXT
PRINT "Los nombres tecleados son:"
FORi=1 T0 5
PRINT nombres$(i)
NEXT
END
Prueba;
Teclea 5 nombres:
? RAMIRO
? NORMA
? ENRIQUE
? ALEJANDRO
? JULIO
Los nombres tecleados son:
RAMIRO
CAPÍTULO I I . ESTRUCTURAS DE DATOS
371
NORMA
ENRIQUE
ALEJANDRO
JULIO
A continuación resolveremos algunos problemas con arreglos.
Problemas resueltos
PROBLEMA 1
Pedir un conjunto de n números e imprimir cuál es el menor de ellos.
Paso 1. Definición del problema:
Dado en la redacción del problema.
Paso 2. Planeación de la solución:
La solución de este problema se inicia pidiendo n números dentro de un arreglo, para lo cual
emplearemos un ciclo con un número determinado de n iteraciones.
Posteriormente, asumiremos que el primer elemento del arreglo es el número menor y lo compararemos con los demás elementos. Si alguno de los elementos es menor al número menor hasta el
momento, entonces será el nuevo número menor. Esto lo haremos usando un ciclo con un número
determinado de iteraciones, desde la iteración 2 hasta la n.
Finalmente se desplegará el número menor obtenido.
SALIDAS: número menor
ENTRADAS: arreglo de números
DATOS ADICIONALES: ninguno
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
i
n
a
menor
a
a
a
a
contador de iteraciones
número de datos
arreglo de números
número menor
1. PEDIR n
2. i← 1
3. SI i > n ENTONCES
IR al paso 4
DE OTRA FORMA
PEDIR
i←i + 1
IR al paso 3
4. menor ←a(l)
372
5.
PARTE III.
PROGRAMACIÓN
i←2
6. SI i > n ENTONCES
IR al paso 7
DE OTRA FORMA
ANALIZAR
i←i + 1
IR al paso 6
7. DESPLEGAR menor
PEDIR:
1. PEDIR a(i)
2. FINP
ANALIZAR:
1. SI a(¡) < menor ENTONCES
menor ←a(i)
2. FINP
Paso 4. Diagrama de flujo (véanse Figs. 11.1 y 11.2)
Paso 5. Codificación y edición del programa:
Para usar el arreglo primero deberemos dimensionarlo, para ello emplearemos una combinación de
las instrucciones OPTION BASE y DIM.
REM Programa que encuentra el menor número de n dados
INPUT "Cuántos números";n
OPTION BASE 1
DIM a[n]
FOR i = 1TOn
INPUT a[ i ]
NEXT i
menor = a[1]
FOR i = 2 TO n
IF a[¡]<menorTHEN
menor = a[¡]
END IF
NEXT i
PRINT "El menor es:"; menor
END
Paso 6. Pruebas y depuración:
Cuántos números? 6
?8
? 13
CAPÍTULO II. ESTRUCTURAS DE DATOS
Figura 11.1
373
374
PARTE III. PROGRAMACIÓN
Figura 11.2
?2
?5
?37
?20
El menor es: 2
PROBLEMA 2
Ordenar un arreglo de números en orden ascendente, esto es, que el primer elemento del arreglo quede
como el menor número de todos, y así sucesivamente hasta que el último sea el mayor de todos.
Paso 1. Definición del problema:
Dado en la redacción del problema.
Paso 2. Planeación de la solución:
Para resolver este problema emplearemos una popular técnica de ordenamiento de arreglos llamada
Sort Burbuja.
CAPÍTULO 11. ESTRUCTURAS DE DATOS
375
El Sort Burbuja toma el primero de los elementos del arreglo y lo compara con los demás y en caso
de que alguno de éstos sea menor, intercambia los valores, de manera tal que el primer elemento se
queda con el menor valor de todos. A continuación se toma el segundo elemento para compararlo con
los siguientes y se repite el proceso. Esto se repite para los primeros n-1 números del arreglo y al
final el elemento n-1 se compara con el elemento n para dejar el valor más grande de todos en el
último elemento.
A esta técnica se le llama Sort porque este término inglés indica ordenamiento; se le llama Burbuja
porque los primeros elementos que son ordenados conforme avanza el proceso parecen burbujas que
salen antes que las otras.
SALIDAS: arreglo ordenado ascendentemente
ENTRADAS: arreglo de números DATOS
ADICIONALES: ninguno
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
i
j
n
a
a
a
a
a
contador de iteraciones
contador de iteraciones de COMPARA
número de datos
arreglo de números
1. i←1
2. SI i > n ENTONCES
3.
4.
5.
6.
IR al paso 3
DE OTRA FORMA
PEDIR
i ←i + 1
IR al paso 2
i← 1
SI i > n-1 ENTONCES
IR al paso 5
DE OTRA FORMA
COMPARA
i ←i + 1
IR al paso 4
i← 1
SI i > n ENTONCES
IR al paso 7
DE OTRA FORMA
DESPLIEGA
i←i + 1
IR al paso 6
7. FIN
376
PARTE III. PROGRAMACIÓN
PEDIR:
1. PEDIR a(i)
2. FINP
COMPARA:
1. j←i + 1
2. SIj>nENTONCES
IR al paso 3
DE OTRA FORMA
INTERCAMBIA
j←j + 1
IR al paso 2
3. FINP
DESPLIEGA:
1. DESPLEGAR a(i)
2. FINP
INTERCAMBIA:
1. SI a(j) ← a(i) ENTONCES
aux ←a(i)
a(i) ← a(J)
a(j)← aux
2. FINP
Paso 4. Diagrama de flujo (véanse Figs. 11.3,11.4 y 11.5).
Paso 5. Codificación y edición del programa:
REM Ordenamiento de números en orden ascendente
INPUT "Cuántos números";n
OPTION BASE 1
DIM a[n]
REM Pedir arreglo
FOR i=1 TO n
INPUT a[¡]
NEXT i
REM Ordenar arreglo
FOR i=1 TO n-1
FORi=i+1 TOn
IF a[j] < a[¡]THEN
aux = a[i]
a[i] = a[j]
a[j] = aux
END IF
NEXT j
CAPÍTULO II. ESTRUCTURAS DE DATOS
Figura 11.3
377
378
PARTE III. PROGRAMACIÓN
Figura 11.4
CAPÍTULO I I . ESTRUCTURAS DE DATOS
Figura 11.5
NEXT i
REM Desplegar arreglo
PRINT "El arreglo ordenado ascendentemente es."
FOR i = 1 TO n
PRINT a [ i ]
NEXT i
END
Paso 6. Pruebas y depuración:
Cuántos números? 6
?8
? 13
?2
?5
?37
?20
El arreglo ordenado ascendentemente es:
2
5
8
13
20
379
380
PARTE III. PROGRAMACIÓN
37
PROBLEMA 3
Ordenar un arreglo de datos alfanuméricos en orden ascendente, es decir, que el primer elemento del
arreglo quede como el primero en orden alfabético de todos y así sucesivamente hasta que el último
sea el mayor en orden alfabético.
Paso 1. Definición del problema:
Dado en la redacción del problema.
Paso 2. Planeación de la solución:
La solución es igual a la del problema anterior, sólo que ocupando un arreglo alfanumérico, ya que
con una comparación de dos strings se sabe cuál de ellos es el menor en orden alfabético. Por lo tanto,
sólo se aplicarán los pasos 5 y 6 de la metodología.
Paso 5. Codificación y edición del programa:
REM Ordenamiento de strings pon orden alfabético
INPUT "Cuántos strings";n
OPTION BASE 1
DIM a$[n]
REM Pedir arreglo
FOR i=1 TO n
INPUT a$[ i ]
NEXT i
REM Ordenar arreglo
FORi=1 T0n-1
F0Rj=¡+1 TOn
IF a$[j] < a$[¡]THEN
aux$ = a$[¡]
a$[i] = a$[j]
a$[¡] = aux$
END IF
NEXT j
NEXT i
REM Desplegar arreglo
PRINT "El arreglo ordenado alfabéticamente es:"
FOR i = 1 TO n
PRINT a$[¡]
NEXT i
END
Paso 6. Pruebas y depuración:
Cuántos strings? 5
CAPÍTULO I I . ESTRUCTURAS DE DATOS
381
?MESA
? ÁRBOL
?MASA
? SILLA
? LIBRO
El arreglo ordenado alfabéticamente es:
ÁRBOL
LIBRO
MASA
MESA
SILLA
Problemas propuestos
1.
2.
3.
4.
Meter los n primeros pares a un arreglo e imprimirlo.
Pedir un conjunto de n números e imprimir el mayor de ellos.
Ordenar un arreglo de números en orden descendente, de mayor a menor, de tal manera que el
primer elemento del arreglo quede como el mayor y el último sea el menor.
Se le llama serie Fibbonacci a la que comienza con dos números iniciales que son 1 y 1 y va
obteniendo el siguiente elemento a partir de la suma de los dos últimos elementos. Para el primer
caso, al sumar 1 y 1 obtenemos 2, por lo tanto los dos últimos elementos de la serie serían el
segundo 1 y el 2, por lo que el siguiente elemento sería 1 +2=3, el siguiente elemento 2+3=5,
etc. Una serie Fibbonacci de 10 elementos sería: 1, 1, 2, 3, 5, 8, 13, 21, 34 y 55. Elaborar un
programa que meta los n primeros números de la serie Fibbonacci a un arreglo y lo imprima.
2) MATRICES
Las matrices son aquellas estructuras de datos que organizan sus datos en forma de tabla, para ello
emplean dos índices: uno para indicar el renglón y otro la columna, y así referenciar sus datos. A las
matrices también se les llama tablas o arreglos de dos dimensiones.
Por ejemplo, si desean registrarse las 3 calificaciones de 2 alumnos podríamos emplear una matriz
de 2 renglones por 3 columnas representarlo gráficamente como lo muestra la figura 11.6.
El primer renglón es para el primer alumno, quien obtuvo calificaciones de 7, 8 y 9. El segundo
alumno obtuvo calificaciones de 10, 7 y 8.
Para meter la primera calificación del primer alumno a la matriz, tendríamos que referirnos a la
primera columna y al primer renglón de la siguiente manera:
Calificación 1
Calificación 2
Calificación 3
Alumno 1 7
8
9
Alumno 2 10
7
8
Figura 11.6
382
PARTE III. PROGRAMACIÓN
calif(l,1) = 7
lo que significa que para el primer alumno su primera calificación es de 7.
calif(l,2) = 8
significa que para el primer alumno su segunda calificación es de 8.
la tercera calificación del primer alumno se asignaría:
califa ,3) = 9
Para el segundo alumno:
calif(2,l) = 10
calif(2,2) = 7
calif(2,3) = 8
Por tanto, el significado del renglón es el de un alumno y el de la columna es de una calificación.
En este caso estamos hablando de una matriz de 2 renglones por 3 columnas o, más abreviado, de una
matriz de 2 X 3.
Al igual que los arreglos, las matrices también se dimensionan, esto se hace indicando el número
de renglones y columnas de la siguiente manera:
DIM nombre-de-la-matriz (expresión numérica 1, expresión numérica 2)
donde:
la expresión numérica 1 es el número máximo de renglones de la matriz
la expresión numérica 2 es el número máximo de columnas que se usarán en la matriz
Para el ejemplo de la matriz de las calificaciones su DIM es:
DIM calif(2,3)
Si antes de un DIM aparece una instrucción OPTION BASE x, x afectará tanto a los renglones
como a las columnas.
Problemas resueltos
PROBLEMA 1
Pedir en una matriz las 4 calificaciones de 5 alumnos y de la misma matriz obtener el promedio de
los alumnos.
Paso 1. Definición del problema:
CAPÍTULO I I .
ESTRUCTURAS DE DATOS
383
Dado en la redacción del problema.
Paso 2. Planeación de la solución:
Este es un problema repetitivo compuesto, ya que vamos a emplear un ciclo de 5 iteraciones para
procesar a los 5 alumnos, y para cada uno emplearemos otro ciclo de 4 iteraciones para procesar sus
4 calificaciones. Recordemos que cuando un ciclo está dentro de otro se trata de un problema
repetitivo compuesto.
Si suponemos que los renglones son los alumnos y las columnas las calificaciones, entonces
emplearemos una matriz de 5 X 4 para solucionar el problema.
El problema se divide en dos partes: pedir la matriz y obtener de la matriz los promedios.
Para pedir la matriz, que llamaremos calif, usaremos las siguientes acciones:
1.
2.
3.
alumno ←1
SI alumno > 5 ENTONCES
IR al paso 3
DE OTRA FORMA
CALIFICACIONES
alumno ←alumno + 1
IR al paso 2
FIN
Proceso CALIFICACIONES:
1.
2.
3.
calificación ←1
SI calificación > 4 ENTONCES
IR al paso 3
DE OTRA FORMA
CALIFICACIÓN
calificación ←calificación + 1
IR al paso 2
FIN
Proceso CALIFICACIÓN:
1.
PEDIR calif(alumno, calificación)
Para obtener los promedios se ejecutarán las siguientes acciones:
1.
2.
3.
alumno ←1
SI alumno > 5 ENTONCES
IR al paso 3
DE OTRA FORMA
CALIFICACIONES2
alumno ←alumno + 1
IR al paso 2
FIN
384
PARTE III.
PROGRAMACIÓN
Proceso CALIFICACIONES2:
1.
2.
3.
suma <—0
calificación ←1
SI calificación > 4 ENTONCES
IR al paso 4
DE OTRA FORMA
CALIFICACION2
calificación ←calificación + 1
IR al paso 3
promedio = suma / 4
DESPLEGAR promedio
4.
5.
Proceso CALIFICACION2:
1.
suma = suma + calif(alumno, calificación)
La definición de los datos de entrada y salida queda:
SALIDAS: promedio de los 5 alumnos
ENTRADAS: calificaciones de los 5 alumnos
DATOS ADICIONALES: ninguno
Paso 3 Algoritmo:
De ahora en adelante llamaremos:
CS2
a
a
a
a
a
a
a
C2
a proceso CALIFICACION2
a
c
s
P
CS
c
alumno
calificación
suma
promedio
proceso
proceso CALIFICACIÓN
proceso CALIFICACIONES
1. a← 1
2. SI a > 5 ENTONCES
IR al paso 3
DE OTRA FORMA
CS
a ←a + 1
IR al paso 2
3. a← 1
4. SI a > 5 ENTONCES
IR al paso 5
CAPÍTULO II.
5.
DE OTRA FORMA
CS2
a ←a + 1
IR al paso 4
FIN
CS:
1 c← 1
2 SI c > 4 ENTONCES
IR al paso 3
DE OTRA FORMA
C
c←c+1
IR al paso 2
3. FINP
C:
1.
2.
PEDIR calif(a, c)
FINP
CS2:
1.
2.
3.
4.
5.
6.
s←0
c←1
SI c> 4 ENTONCES
IR al paso 4 DE
OTRA FORMA C2
c ←c + 1 IR al
paso 3
p ←s /4
DESPLEGAR p
FINP
C2:
1.
s←s + calif(a, c)
2.
FINP
Paso 4. Diagrama de flujo (véanse Figs. 11.7, 11.8 y 11.9).
Paso 5. Codificación y edición del programa:
REM Promedio de calificaciones empleando una matriz
ESTRUCTURAS DE DATOS
385
386
PARTE III.
PROGRAMACIÓN
Figura 11.7
OPTION BASE 1
DIM calif[5,4]
FOR a = 1 TO 5
FOR c = 1 T0 4
PRINT "Teclea la calificación ";c;" del alumno"; a
INPUT calif(a.c)
NEXT c
CAPÍTULO II. ESTRUCTURAS DE DATOS
Figura 11.8
NEXT a
FOR a = 1 T0 5
s=O
FOR c = 1 T0 4
s=s+calif(a,c)
NEXT c
p=s/4
PRINT "Promedio alumno "; a;" =";p
NEXT a
END
387
388
PARTE III.
PROGRAMACIÓN
Figura 11.9
Ejercicio: Efectuar el paso de pruebas del programa incluyendo las dos fases.
PROBLEMA 2
CAPÍTULO II. ESTRUCTURAS DE DATOS
389
Pedir 2 matrices de m renglones por n columnas y obtener una tercera matriz que sea la suma de
ambas. La suma de una matriz con otra consiste en sumar cada uno de los elementos de una matriz
con cada uno de los elementos de la otra:
c(l,1)=a(l,1)+b(l,1)
c(l,2)=a(l,2)+b(l,2)
:
:
c(m,n)=a(m,n)+b(m,n)
Paso 1. Definición del problema:
Dado en la redacción del problema.
Paso 2. Planeación de la solución:
Para solucionar este problema primero pediremos las dos matrices a y b. A continuación ejecutaremos
un ciclo para sumar todos los renglones y otro ciclo interno para sumar todos los elementos en las
columnas. Al final desplegaremos la matriz resultante. Nos saltaremos directamente al paso 5 de la
metodología:
Paso 5. Codificación y edición del programa:
REM Suma de matrices
OPTION BASE 1
DIM a[m,n], b[m,n], c[m,n]
PRINT "Teclea los elementos de la matriz a:"
FORi=1 10 5
FORj = 1 T0 4
INPUT a[,j]
NEXT j
NEXTi
PRINT "Teclea los elementos de la matriz b:"
FOR i = 1 T0 5
FOR j = 1 T0 4
INPUT b[i,j]
NEXT j
NEXT i
FOR i = 1 T0 5
FOR j=1 T0 4
c[¡,j]=a[¡,j] + b[i,j]
NEXT j
NEXT i
PRINT "La matriz resultante es:"
FOR i=1 T0 5
FOR j = 1 T0 4
PRINT c[i,j];" "
NEXT j
390
PARTE III.
PROGRAMACIÓN
PRINT
NEXT i
END
Observe que cuando se despliega la matriz resultante al final del ciclo interno la instrucción PRINT
está sin parámetros y que el PRINT interno termina en punto y coma. Esto es para imprimir en forma
gráfica nuestra matriz, es decir, que cada renglón de nuestra matriz se vea como un renglón en la
pantalla.
PROBLEMA 3
Un campo de golf consta de 18 hoyos; en ellos debe introducirse, sucesivamente, una pelota a base
de golpes con un bastón. En una tarjeta van anotándose el número de golpes requeridos para llegar a
cada uno de los hoyos. En una misma tarjeta pueden anotarse los golpes de varios jugadores, ya que
ésta tiene la forma de una tabla; en ésta los renglones corresponden a los jugadores y las columnas a
cada hoyo del campo. Por ejemplo, si en un juego participaran 4 jugadores la tarjeta tendría la forma
que se muestra en la figura 11.10.
Lo cual quiere decir que el jugador 1 necesitó 4 golpes para llegar al hoyo 1, 4 para avanzar del
hoyo 1 al 2, 6 para avanzar del hoyo 2 al 3, etcétera.
En resumen, gana el juego el jugador que llegue al hoyo 18 con el menor número de golpes.
Suponga que un partido de golf recién terminó y ya se tiene la tarjeta que registra todos los golpes:
a)
elabore un programa que pregunte cuántos jugadores participan y capture en una matriz los golpes
de los 18 hoyos para los n jugadores, como si la matriz fuera la tarjeta del partido
b) que el programa pida un arreglo con los nombres de los n jugadores
c) que el programa imprima el nombre de la persona que ocupó el primer lugar, el segundo, etc.,
hasta el enésimo lugar
Paso 1. Definición del problema:
Dado en la redacción del problema.
Paso 2. Planeación de la solución:
En primer lugar, se trata de pedir una matriz de dimensiones n X 18, a la que llamaremos g, y un
Hoyo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1/
18
Jugador 1
4
4
6
7
2
4
5
4
3
3
5
5
6
3
4
4
2
4
Jugador 2
5
4
5
7
3
5
4
3
2
2
5
5
6
4
3
3
2
3
Jugador 3
6
6
7
5
4
3
4
5
4
3
6
5
5
3
4
4
3
4
Jugador 4
7
5
7
7
4
5
5
6
4
4
4
5
5
4
5
5
3
5
Figura 11.10
CAPÍTULO II. ESTRUCTURAS DE DATOS
391
arreglo de nombres de dimensión n, al que llamaremos n$. Asimismo, tendremos que crear un arreglo
numérico con la suma de los golpes de los n jugadores para después hacer un sort ascendente con él
y saber en qué lugares quedaron los jugadores, a este arreglo le llamaremos s.
La creación de los dos arreglos y la matriz las efectuaremos en un mismo ciclo anidado, a
continuación realizaremos el sort y finalmente se desplegarán los resultados.
Nos saltaremos directamente al paso 5 de la metodología.
Paso 5. Codificación y edición del programa:
REM Programa de golf
INPUT "Número de jugadores"; n
OPTION BASE 1
DIM g[n,18], s[n], n$[n]
FOR i=1 TO n
PRINT "Nombre del jugador ";¡;
INPUT n$[¡]
PRINT "Favor de capturar los golpes del jugador";i
s[i]=0
FOR j = 1 TO 18
INPUT g[i,j]
s[i]= s[i]+ g[i,j]
NEXT j
NEXT i
REM Sort
FOR i=1 to n-1
FOR j=i+1 TO n
IF s[j] < s[¡] THEN
aux = s[¡]
s[¡] = s[j]
s[j] = aux
aux$=n$[¡]
n$[i]=n$[j]
n$[j]=aux$
END IF
NEXT j
NEXT i
REM Desplegar resultados
FOR i =1 TO n
PRINT "Lugar";i;":";n$(¡)
NEXT i
END
Problemas propuestos
1) Efectuar la resta de dos matrices de dimensión m X n, sabiendo que esta operación es la resta de
los elementos de una matriz con cada uno de los elementos de la otra.
392
PARTE III.
PROGRAMACIÓN
2) Pedir una matriz de dimensiones m X n y obtener su matriz traspuesta. Una matriz b es traspuesta de
otra a cuando, para todos los elementos de a:
b(j,i) = a(i.j)
3) Investigar cómo se obtiene el resultado de multiplicar una matriz por otra y hacer el programa
que lo realice.
4) En un pequeño torneo de fútbol participaron 5 equipos jugando todos contra todos. Se registraron
los resultados de los marcadores en una tabla, donde el contenido de cada celda corresponde al
número de goles que el equipo del renglón i le anotó al equipo de la columna j. Por ejemplo, si
la tabla fuera:
Elemento (1,2) = 1
Elemento (2,1) = 3
Significa que el equipo 2 le ganó al equipo 1
por marcador de 3-1
a)
elaborar un programa que permita pedir estos resultados en una matriz. También pedir en un
arreglo los nombres de los 5 equipos.
Sabiendo que con un empate ambos equipos ganan un punto y que si alguno gana obtiene dos
puntos y el otro cero:
b) agregue al programa las instrucciones necesarias para que se cree un arreglo con los puntos
que lograron cada uno de los equipos.
c) agregue al programa las instrucciones necesarias para que se imprima el nombre del equipo
que ganó el torneo (es decir, el que logró más puntos).
d) agregue al programa las instrucciones necesarias para que se cree un arreglo con los goles que
anotó cada equipo
e) ¿cuál fue el campeón goleador?
3) ARCHIVOS DE DATOS
Los archivos de datos son estructuras de datos que sirven para almacenar información en memoria
secundaria.
CAPÍTULO I I . ESTRUCTURAS DE DATOS
393
Como vimos en el capítulo 6, existen tres tipos de archivos:
1) archivos tipo programa
2) archivos de datos
3) archivos tipo texto
Los archivos con los que trataremos en este capítulo son los archivos de datos.
A diferencia de los datos manejados hasta el momento, que se almacenaban en zonas de la memoria
principal, estos datos se podrán guardar en memoria secundaria, lo cual nos permitirá almacenarlos
en forma permanente y luego volver a utilizarlos, ya sea para modificarlos, borrarlos o simplemente
para consultarlos.
El principal objetivo de esta sección es aprender a guardar datos nuevos en un archivo, así como
consultar, modificar y borrar datos previamente almacenados, pero primero debemos entender la
función y estructura de este tipo de archivos.
Para entender la función de los archivos de datos supongamos que tiene un negocio y desea obtener
un registro de sus clientes, para poder consultar cualquier información en el momento en que lo desee.
Los datos que necesita por cada cliente son: nombre, calle y número, colonia, ciudad, estado, código
postal, teléfono y fecha de ingreso.
Además usted no cuenta con una computadora.
Una forma de obtener esta información organizada podría ser abrir una tarjeta para cada cliente,
en donde se anotarán estos datos; y así en el momento de necesitar información de alguno de ellos,
lo que debe hacer es buscar la tarjeta correspondiente y ver la información. El conjunto de tarjetas
podría quedar como lo muestra la figura 11.11.
Si deseara modificar algún dato, lo que debe hacer es: buscar la tarjeta, cambiar el dato antiguo
por el nuevo, y volver a guardarla.
Las operaciones que se podrían hacer con la información de los clientes serían: agregar la tarjeta
de un cliente nuevo, eliminar la de algún cliente que se muda de ciudad, modificar, o simplemente
consultar los datos.
Figura 11.11
392
PARTE III.
PROGRAMACIÓN
Figura 11.12 Representación gráfica de un archivo de datos
Dichas operaciones no serían tan fáciles si el número de clientes fuera muy grande o si lo que
deseáramos saber fuera algo más complicado, como por ejemplo obtener una lista de clientes que
viven en determinada colonia, o una lista de los que ingresaron como clientes del negocio entre el
01/ENE/92 y 01/MAY/92.
Los archivos de datos surgieron para satisfacer necesidades como las mencionadas, pero con ayuda
de la computadora. Los datos contenidos en este tipo de archivos tendrán una organización similar a
la que se llevaría sin ayuda de la computadora, pero con otra terminología.
A lo que sería al equivalente de la tarjeta de un cliente lo llamaremos registro, y a cada uno de
los datos de cada cliente, campo.
Un archivo de datos para manejar a nuestros clientes se representa gráficamente como un cuadro
(véase Fig. 11.12), en donde cada renglón contiene un registro con los datos de un cliente y habrá
tantos registros como clientes haya. Cada columna incluye un dato del cliente.
En este caso los nombres de los campos son: nombre, calle y número, colonia, ciudad, estado,
código postal, teléfono y fecha ingreso, que son los mismos para todos los registros y el contenido
de los campos serán los datos específicos de cada cliente.
Definamos ahora formalmente los conceptos nuevos:
Archivo de datos: colección de datos organizada por registros y campos, que es almacenada en
dispositivos de memoria secundaria.
Registro: información referente a una entidad, formado por un conjunto de campos.
Campo: característica de una entidad.
Siempre que se desee trabajar con un archivo de datos será muy importante diseñar primero la
estructura de éste, es decir, determinar qué campos se necesitarán utilizar.
CAPÍTULO II. ESTRUCTURAS DE DATOS
395
Organización de los archivos de datos
Es el método en que se dispone el acceso a los registros. Existen básicamente dos métodos:
1) Secuencial
2) Aleatorio o directo
1)
Secuenciales
Son archivos en que para conseguir un registro en particular se deben recorrer todos los anteriores y
sus registros pueden ser de longitud variable.
2) Aleatorios o directos
Permiten tener acceso a cualquier registro sin tener que recorrer los que se encuentren almacenados
antes. En este tipo de archivos cada registro tiene un número que lo identifica, para así poder localizar
alguno en cualquier momento con sólo indicar su número. Todos sus registros tienen la misma
longitud.
Dada la versatilidad de los archivos aleatorios serán éstos los que estudiaremos en este libro.
Archivos de datos aleatorios
Son archivos organizados de tal manera que permiten el acceso a un registro específico, para leer o
modificar la información almacenada en él.
Cada registro se identifica por un número que indica su posición en el archivo.
Proceso para accesar un archivo de datos aleatorio
Como se había visto, un sistema computacional cuenta con dos tipos de memorias: la memoria
principal y la memoria secundaria.
Para el manejo de archivos en Quick Basic se utiliza una tercera memoria, que le llama memoria
intermedia o buffer, la cual se encuentra en alguna zona de la memoria principal y el objetivo es ser
intermediaria entre la memoria principal y la memoria secundaria durante el manejo de los archivos
de datos.
Como hemos mencionado, las operaciones que se pueden realizar sobre un archivo de datos son:
agregar registros
consultar registros
borrar registros
modificar registros
las cuales se reducen a operaciones de lectura o escritura sobre el archivo de datos.
La interacción entre los diferentes tipos de memoria y las operaciones de lectura y escritura se
pueden representar gráficamente como se muestra en la figura 11.13:
396
PARTE III. PROGRAMACIÓN
Figura 11.13
Lo que significa que cuando sea necesario escribir información en un archivo de datos se tendrán
que realizar dos pasos:
1)
pasar los datos de la memoria principal a la memoria intermedia
2) pasar los datos de la memoria intermedia a la memoria secundaria
Y cuando sea necesario leer información de un archivo de datos sólo será necesario:
1) pasar los datos de memoria secundaria a memoria intermedia
La memoria intermedia tiene como característica que sólo puede almacenar datos de tipo alfanumérico, por lo que para el manejo de datos de tipo numérico será necesario convertirlos a alfanuméricos cuando se escriba información o convertirlos a numéricos nuevamente cuando se lea
información que previamente haya sido convertida a alfanumérica. Esto se realizará mediante
funciones especiales que Quick Basic tiene para este fin.
Concepción del archivo de datos
En la planeación de la solución del problema se debe diseñar la estructura de los registros, que es
especificar el nombre y longitud —número de caracteres— de los campos. Esto depende de los
requerimientos encontrados en la definición del problema.
Por ejemplo, para almacenar los datos de un directorio telefónico en un archivo de datos, su
estructura podría ser:
Campo
Longitud
nombre
dirección
30
30
teléfono
10
CAPÍTULO II. ESTRUCTURAS DE DATOS
397
La longitud de cada campo se determina calculando la longitud que podría ocupar un dato común;
por ejemplo, la longitud del campo nombre es de 30, porque no son comunes nombres más largos.
La longitud del registro se obtiene sumando las longitudes calculadas para todos los campos; así
para la estructura del archivo que acabamos de definir, la longitud del registro es de 70.
Con frecuencia se puede encontrar un campo muy importante dado que el contenido en cada
registro lo diferencia de los demás. Por ejemplo, el campo nombre en este caso es importante pues
para localizar los datos de una persona necesitamos buscarla por el nombre. A este tipo de campos
se les llama campos clave.
También es conveniente dar nombre a las variables de memoria principal que se emplearán para
manejar los datos que se enviarán a la memoria intermedia y al disco duro en operaciones de escritura.
Estas variables pueden ser numéricas o alfanuméricas, dependiendo de lo que se necesite. Para el
caso del ejemplo serían:
nombre$
direc$
telef$
Asimismo debemos dar nombre a las variables de memoria intermedia que serán empleadas en las
operaciones de lectura y escritura de registros. Recomendamos emplear los mismos nombres que se
hayan manejado para la memoria principal, pero anteponiendo la letra i —de intermedia— para
diferenciarlas. No olvide que estas variables deben ser alfanuméricas. Para el caso del ejemplo serían:
inombre$
idirec$
itelef$
Si ponemos en una tabla estos datos que definimos quedarían:
Campo
Longitud
Nombre en
Men, principal
Nombre en Mem.
intermedia
nombre
dirección
teléfono
30
30
10
nombre$
direc$
telef$
inombre$
idirec$
itelef$
Operaciones con los archivos aleatorios
Aunque básicamente las operaciones con los archivos son de lectura y escritura de registros, en un
programa típico de manejo de archivos de datos, podemos encontrar las siguientes opciones:
1)
2)
3)
4)
5)
6)
Altas
Bajas
Consultas
Cambios
Reporte general
Reportes específicos
398
PARTE I I I .
PROGRAMACIÓN
1) ALTAS
Se refiere a la inclusión de los datos de un nuevo registro en el archivo de datos.
Los pasos generales a seguir son:
1) Abrir el archivo
2) Especificar la estructura asignando espacio para los campos en memoria intermedia
3) Buscar el primer número de registro que esté inactivo para hacer ahí la alta; de no haber se tiene
que crear un nuevo registro al final del archivo
4) Pedir los datos de la entidad en variables de memoria principal
5) Pasar los datos de memoria principal a memoria intermedia
6) Escribir los datos de memoria intermedia a memoria secundaria en el número de registro
encontrado en el paso 3
7) Cerrar el archivo
2) BAJAS
Se refiere a la exclusión de un registro como parte activa del archivo de datos. Para lograr esto lo que
haremos será escribir espacios en el campo clave del registro que se quiera dar de baja, y cuando se
haga una lectura a este registro se verificará que no tenga solamente espacios porque significará que
el registro está inactivo. A este tipo de baja se le llama baja lógica pues aunque algunos datos aun
permanecen, están inhabilitados. Otra forma de dar baja lógica es agregar un campo más a la estructura
del archivo que indique si está activo o inactivo. Nosotros emplearemos la primera forma mencionada.
Los pasos generales a seguir son: •
1)
2)
3)
4)
5)
6)
Abrir el archivo
Especificar la estructura asignando espacio para los campos en memoria intermedia
Leer el registro
Escribir espacios en el campo clave de memoria intermedia
Escribir el registro
Cerrar el archivo
3) CONSULTAS
Se refiere al acceso y despliegue de los datos de un registro activo por medio de su campo clave.
Los pasos generales a seguir son:
1)
2)
3)
4)
5)
Abrir el archivo
Especificar la estructura asignando espacio para los campos en memoria intermedia
Leer el registro
Desplegar los campos de memoria intermedia
Cerrar el archivo
CAPÍTULO I I . ESTRUCTURAS DE DATOS
399
4) CAMBIOS
Se refiere al cambio en algún dato de los campos de un registro activo. Los
pasos generales a seguir son:
1)
2)
3)
4)
5)
6)
7)
Abrir el archivo
Especificar la estructura asignando espacio para los campos en memoria intermedia
Leer registro
Pedir el nuevo dato en variable de memoria principal
Pasar el dato de la variable de memoria principal a la de memoria intermedia
Escribir el registro
Cerrar el archivo
5) REPORTE GENERAL
Es el despliegue de los campos de todos los registros activos de un archivo. Los
pasos generales a seguir son:
1)
2)
3)
4)
5)
Abrir el archivo
Especificar la estructura asignando espacio para los campos en memoria intermedia
Verificar el número de registros existentes
i ←1
SI i > número de registros existentes ENTONCES
IR al paso 6
DE OTRA FORMA
LEER REGISTRO i
SI el registro está activo ENTONCES
Desplegar variables de memoria intermedia
i←i + 1
IR al paso 5
6) Cerrar el archivo
6) REPORTES ESPECÍFICOS
Es el despliegue de los campos de todos los registros que cumplan con una condición específica y
estén activos en un archivo.
Los pasos generales a seguir son:
1)
2)
3)
4)
5)
Abrir el archivo
Especificar la estructura asignando espacio para los campos en memoria intermedia
Verificar el número de registros existentes
i← 1
SI i > número de registros existentes ENTONCES
IR al paso 6
40it
PARTE III. PROGRAMACIÓN
DE OTRA FORMA
LEER REGISTRO i
SI el registro está activo y cumple con la condición del reporte específico ENTONCES
Desplegar variables de memoria intermedia
i← i + 1
IR al paso 5
6) Cerrar el archivo
Pueden existir muchas otras opciones en un programa que maneje archivos de datos, dependiendo
de los requerimientos del problema.
Instrucciones y funciones para el manejo de archivos de datos aleatorios
INSTRUCCIÓN: OPEN
Funcionamiento: permite abrir un archivo de datos, ya sea para escribir o para leer datos en él.
Formato:
OPEN "R", número de archivo, "nombre", longitud
donde:
"R": es un parámetro que siempre usaremos para indicar que los archivos son aleatorios
(random en inglés)
número de archivo: es un número entre 1 y 15 que se asocia al archivo, para referirse a éste
mediante el número en vez de su nombre
nombre: nombre del archivo, el cual es asignado según las reglas del sistema operativo DOS;
recomendamos usar la extensión .DAT para indicar que se trata de un archivo de datos
longitud: es la longitud de cada registro, la cual es calculada en el momento de diseñar la
estructura de los registros.
Acción equivalente en algoritmo:
ABRIR ARCHIVO "nombre"
Bloque equivalente en diagrama de flujo:
ABRIR ARCHIVO nombre
se usa el símbolo de proceso para indicar que es una orden y la raya interna para indicar que es una
operación de archivos
Ejemplo:
OPEN "R", 1, "DIRTEL.DAT", 70
CAPÍTULO II.
ESTRUCTURAS DE DATOS
401
INSTRUCCIÓN: FIELD #
Funcionamiento: asigna espacio en la memoria intermedia para los campos que componen los
registros.
Formato:
FIELD # número de archivo, longitud 1 AS variable de memoria intermedia1... , longitudN AS
variable de memoria intermediaN
donde:
número de archivo: es un número entre 1 y 15 que se asocia al archivo, para referirse a éste
mediante el número en vez de su nombre
longitud i: especifica el número de caracteres que debe tener cada campo. El total de
caracteres de todos los campos debe ser igual a la indicada en la instrucción OPEN.
variable de memoria intermedia i: nombre asignado a la variable de memoria intermedia
No tiene acción en algoritmo ni bloque en diagrama de flujo equivalentes; sin embargo, en un
programa debe ir enseguida de la instrucción OPEN.
Ejemplo:
FIELD #1, 30 AS inombre$, 30 AS idirec$, 10 AS itelef$
INSTRUCCIÓN: LSET
Funcionamiento: mueve un dato de memoria principal a memoria intermedia acomodando el dato que
se mueve, justificado a la izquierda. Debe haber tantos LSETs como variables de memoria principal
se quieran pasar a memoria intermedia.
Formato:
LSET variable de memoria intermedia = expresión alfanumérica
Acción equivalente en algoritmo:
MOVER IZQUIERDA variable de memoria intermedia ← expresión alfanumérica
Bloque equivalente en diagrama de flujo:
variable de memoria intermedia ← expresión alfanumérica
se usa el símbolo de proceso para indicar que es una asignación y la raya interna para indicar que es
una operación de archivos
Ejemplos:
LSET inombre$ = nombre$
LSET idirec$ = direcS
LSET itelef$ = telef$
402
PARTE III.
PROGRAMACIÓN
INSTRUCCIÓN: RSET
Funcionamiento: mueve un dato de memoria principal a memoria intermedia acomodando el dato que
se mueve justificado a la derecha. Debe haber tantos RSETs como variables de memoria principal se
quieran pasar a memoria intermedia.
Formato:
RSET variable de memoria intermedia = expresión alfanumérica
Acción equivalente en algoritmo:
MOVER DERECHA variable de memoria intermedia ← expresión alfanumérica
Bloque equivalente en diagrama de flujo:
variable de memoria intermedia ← expresión alfanumérica
se usa el símbolo de proceso para indicar que es una asignación y la raya interna para indicar que es
una operación de archivos
Ejemplo:
RSET inombre$ = nombreS
RSET idirec$ = direcS
RSET itelef$ = telef$
Veamos un ejemplo para diferenciar las instrucciones LSET y RSET. Supongamos que deseamos
pasar la expresión alfanumérica "María" a la variable de memoria intermedia inombre$; la instrucción para hacerlo podría ser cualquiera de las siguientes: LSET inombre$ = "María" ó RSET
inombre$ = "María"
La diferencia se nota en la forma en que Quick Basic acomoda la expresión en el espacio reservado
por el FIELD para esa variable de memoria intermedia. Como el campo tiene una longitud de 30
caracteres, el LSET haría lo siguiente:
que es justificar a la izquierda la expresión; en cambio el RSET haría lo siguiente:
CAPÍTULO II. ESTRUCTURAS DE DATOS
403
que es justificar a la derecha la expresión
INSTRUCCIÓN: PUT #
Funcionamiento: graba en memoria secundaria un registro con el contenido de la memoria intermedia.
Formato:
PUT # número de archivo, número de registro
donde:
número de archivo: es un número entre 1 y 15 que se asocia al archivo, para referirse a éste
mediante el número en vez de por su nombre
número de registro: número de registro en donde se desea almacenar los datos
Acción equivalente en algoritmo:
ESCRIBIR REGISTRO número de registro
Bloque equivalente en diagrama de flujo:
se usa el símbolo de salida de datos para indicar que están saliendo datos hacia la memoria secundaria
y la raya interna para indicar que se trata de una operación de archivos.
Ejemplo:
PUT#1, 1
INSTRUCCIÓN: GET #
Funcionamiento: pasa el registro especificado de memoria secundaria o memoria intermedia.
Formato:
GET # número de archivo, número de registro
donde:
número de archivo: es un número entre 1 y 15 que se asocia al archivo, para referirse a éste
mediante el número en vez de su nombre
número de registro: número de registro de donde se desea extraer los datos
Acción equivalente en algoritmo:
LEER REGISTRO número de registro
404
PARTE III. PROGRAMACIÓN
Bloque equivalente en diagrama de flujo:
se usa el símbolo de entrada ya que están entrando datos provenientes de memoria secundaria, y la
raya interna para indicar que se trata de una operación de archivos
Ejemplo:
GET#1, 1
INSTRUCCIÓN: CLOSE #
Funcionamiento: cierra un archivo de datos.
Formato:
CLOSE # número de archivo
donde:
número de archivo: es un número entre 1 y 15 que se asocia al archivo, para referirse a éste
mediante el número en vez de su nombre
Acción equivalente en algoritmo:
CERRAR ARCHIVO nombre
Bloque equivalente en diagrama de flujo:
CERRAR ARCHIVO nombre
se usa el símbolo de proceso para indicar que es una orden y la raya interna para indicar que es una
operación de archivos
Ejemplo:
CLOSE #1
FUNCIÓN: LOF
Funcionamiento: regresa el número de caracteres que tiene un archivo
Formato:
CAPÍTULO II. ESTRUCTURAS DE DATOS
405
LOF(número de archivo)
Dado que en un archivo aleatorio todos los registros tienen la misma longitud, la instrucción LOF
nos puede ayudar a obtener el número de registros que tiene un archivo aplicándola como parte de la
siguiente fórmula:
número de registros = LOF (número de archivo) / longitud de cada registro
donde:
longitud de cada registro es la longitud especificada en la instrucción OPEN
Ejemplo:
n = LOF[1] / 70
FUNCIÓN: MKS$
Funcionamiento: convierte datos tipo numérico que sean reales a tipo alfanumérico, siempre y cuando
el número de dígitos que la compongan no sea más de 7.
Se usa en conjunto con LSET o RSET.
La longitud del campo de memoria intermedia especificado en la instrucción FIELD debe ser de
4.
Formato:
LSET variable de memoria intermedia = MKS$ (expresión numérica real con 7 o menos dígitos)
RSET variable de memoria intermedia = MKS$ (expresión numérica real con 7 o menos dígitos)
FUNCIÓN: MKD$
Funcionamiento: convierte datos tipo numérico que sean reales a tipo alfanumérico cuando el número
de dígitos que la compongan sea más de 7.
Se usa en conjunto con LSET o RSET.
La longitud del campo de memoria intermedia especificado en la instrucción FIELD debe ser de
8.
Formato:
LSET variable de memoria intermedia = MKD$ (expresión numérica real con más de 7 dígitos)
RSET variable de memoria intermedia = MKD$ (expresión numérica real con más de 7 dígitos)
FUNCIÓN: MKI$
Funcionamiento: convierte datos tipo numérico que sean enteros a tipo alfanumérico, siempre y
cuando estén entre -32768 y 32767.
Se usa en conjunto con LSET o RSET.
La longitud del campo de memoria intermedia especificado en la instrucción FIELD debe ser de
2.
Formato: LSET variable de memoria intermedia = MKI$ (expresión numérica
entera)
406
PARTE III.
PROGRAMACIÓN
RSET variable de memoria intermedia = MKI$ (expresión numérica entera)
FUNCIÓN: MKL$
Funcionamiento: convierte datos tipo numérico que sean enteros a tipo alfanumérico, siempre y
cuando estén entre -2147483648 y 2147483647.
Se usa en conjunto con LSET o RSET.
La longitud del campo de memoria intermedia especificado en la instrucción FIELD debe ser de
4.
Formato:
LSET variable de memoria intermedia = MKL$ (expresión numérica entera larga)
RSET variable de memoria intermedia = MKL$ (expresión numérica entera larga)
FUNCIÓN: CVS
Funcionamiento: convierte un dato que fue convertido previamente a alfanumérico con la instrucción
MKS$, a tipo numérico.
Formato:
variable numérica = CVS (variable de memoria intermedia)
FUNCIÓN: CVD
Funcionamiento: convierte un dato que fue convertido previamente a alfanumérico con la instrucción
MKD$, a tipo numérico.
Formato:
variable numérica = CVD (variable de memoria intermedia)
FUNCIÓN: CVI
Funcionamiento: convierte un dato que fue convertido previamente a alfanumérico con la instrucción
MKI$, a tipo numérico.
Formato:
variable numérica = CVI (variable de memoria intermedia)
FUNCIÓN: CVL
Funcionamiento: convierte un dato que fue convertido previamente a alfanumérico con la instrucción
MKL$, a tipo numérico.
Formato:
variable numérica = CVL (variable de memoria intermedia)
CAPÍTULO I I .
ESTRUCTURAS DE DATOS
407
Instrucciones para dar presentación a un programa
El par de instrucciones que veremos a continuación pueden ser usadas en cualquier programa para
darle presentación a los datos que pedimos y desplegamos en la pantalla.
INSTRUCCIÓN: CLS
Funcionamiento: limpia la pantalla y sitúa el cursor en la esquina superior izquierda.
Formato:
CLS
INSTRUCCIÓN: LÓCATE
Funcionamiento: sitúa el cursor en cualquier parte de la pantalla que se desee. La pantalla de texto
sobre la que trabajamos tiene 24 renglones por 80 columnas.
Formato:
LOCATE renglón, columna
Ejemplo:
LOCATE 5,35
sitúa el cursor en el renglón 5 y en la columna 35
Problemas resueltos
PROBLEMA 1
En una ferretería se desea tener un programa que les permita llevar un control sobre las existencias
de los productos que venden. Los datos que manejan son: nombre del artículo, costo unitario, precio
de venta y cantidad que tienen en almacén. Las operaciones que se desean realizar son:
1)
2)
3)
4)
5)
6)
7)
Agregar nuevos artículos al archivo
Borrar algún artículo que ya no se venderá más
Consultar los datos de determinado artículo
Modificar datos de algún artículo
Obtener un reporte de todos los artículos
Poder aumentar las existencias de un artículo cuando se compre al proveedor
Poder descontar de las existencias de un artículo cuando se venda al cliente
Paso 1. Definición del problema:
Dado en la redacción del problema.
Paso 2. Planeación de la solución:
Lo primero que debemos hacer es diseñar la estructura de los registros, que es especificar nombre y
408
PARTE III. PROGRAMACIÓN
longitud de los campos, así como dar nombre a las variables de memoria principal e intermedia, que
serán usadas para manejar los datos del archivo:
Campo
Longitud
nombre del artículo
costo
precio
cantidad
25 4
44
Nombre en
Mem. principal
Nombre en Mem.
intermedia
articul$
costo
precio
cant
iarticul$
icosto$
iprecio$
icant$
La longitud de los campos costo, precio y cantidad es de 4, pues los estamos considerando como
números reales de 7 o menos dígitos y éstos ocupan en el archivo sólo 4 caracteres después de haber
sido convertidos a alfanuméricos, con la instrucción MKS$.
La longitud de cada registro se calcula sumando las longitudes de los campos y en este caso será
de 37.
El campo clave que emplearemos para localizar los registros es el campo nombre del artículo.
Para presentar en pantalla las distintas operaciones al usuario utilizaremos un menú con las
siguientes opciones:
1)
2)
3)
4)
5)
6)
7)
8)
Altas
Bajas
Consultas
Cambios
Reporte general
Compras
Ventas
Salir
El menú estará desplegándose continuamente y ejecutando la opción deseada hasta que se mande
ejecutar la opción 8 del menú, con la cual se dará término al programa.
Dependiendo de la opción que se haya seleccionado, se ejecutarán las siguientes acciones:
1) ALTAS
1) Abrir el archivo
2) Especificar la estructura asignando espacio para los campos en memoria intermedia
3) Buscar el primer número de registro que esté inactivo para hacer ahí la alta; de no haber se
tiene que crear un nuevo registro al final del archivo
4) Pedir los datos de la entidad en variables de memoria principal
5) Pasar los datos de memoria principal a memoria intermedia
6) Escribir los datos de memoria intermedia a memoria secundaria en el número de registro
encontrado en el paso 3
7) Cerrar el archivo
2) BAJAS
1) Abrir el archivo
CAPÍTULO II. ESTRUCTURAS DE DATOS
2)
3)
4)
5)
6)
409
Especificar la estructura asignando espacio para los campos en memoria intermedia
Leer el registro
Escribir espacios en el campo clave de memoria intermedia
Escribir el registro
Cerrar el archivo
3) CONSULTAS
1) Abrir el archivo
2) Especificar la estructura asignando espacio para los campos en memoria intermedia
3) Leer el registro
4) Desplegar los campos de memoria intermedia
5) Cerrar el archivo
4) CAMBIOS
1) Abrir el archivo
2) Especificar la estructura asignando espacio para los campos en memoria intermedia
3) Leer registro
4) Pedir el nuevo dato en variable de memoria principal
5) Pasar el dato de la variable de memoria principal a la de memoria intermedia
6) Escribir el registro
7) Cerrar el archivo
5) REPORTE GENERAL
1) Abrir el archivo
2) Especificar la estructura asignando espacio para los campos en memoria intermedia
3) Verificar el número de registros existentes
4) i← 1
5) SI i > número de registros existentes ENTONCES
IR al paso 6
DE OTRA FORMA
LEER REGISTRO i
SI el registro está activo ENTONCES
Desplegar variables de memoria intermedia
i← i + 1 IR al paso 5
6) Cerrar el archivo
6) COMPRAS
1) Abrir el archivo
2) Especificar la estructura asignando espacio para los campos en memoria intermedia
3) Leer registro
4) Pedir la cantidad de artículos comprada
5) Sumar este dato con la cantidad de artículos que se tiene en la memoria intermedia y reasignar
la suma a esta misma variable
6) Escribir el registro
7) Cerrar archivo
410
PARTE I I I.
PROGRAMACIÓN
7) VENTAS
1) Abrir el archivo
2) Especificar la estructura asignando espacio para los campos en memoria intermedia
3) Leer registro
4) Pedir la cantidad de artículos vendida
5) Restar este dato a la cantidad de artículos que se tiene en la memoria intermedia y reasignar
la resta a esta misma variable
6) Escribir el registro
7) Cerrar archivo
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
articul$
costo
precio
cant
iarticul$
icosto$
iprecio$
icant$
op
sn$
a nombre del artículo (M. Principal)
a costo (M. Principal)
a precio (M. Principal)
a cantidad (M. Principal)
a nombre del artículo (M. Intermedia)
a' costo (M. Intermedia)
a precio (M. Intermedia)
a cantidad (M. Intermedia)
a opción seleccionada
a variable que toma un valor de 'S' o' N' para
confirmar la baja de un registro
c
a número de campo que se desea cambiar
cantcomp a cantidad de artículos comprados
cantvend a cantidad de artículos vendidos
total
a cantidad de artículos después de la compra o venta
n
a número de registros del archivo
i
a contador de registros del archivo
r
a número de registro encontrado
Dado que se necesita en varios de los procesos, se ha creado otro proceso más, llamado ENCUENTRA, que sirve para localizar un registro según el campo clave. Observe cómo en este proceso se
tienen que agregar espacios al valor que se pretende localizar, pues la longitud del campo nombre del
artículo es de 25 y en la alta el LSET se encargó de guardar el dato con un relleno de espacios a la
derecha del dato.
1.
2.
3.
4.
5.
6.
7.
8.
DESPLEGAR "MENÚ:"
DESPLEGAR "1) Altas"
DESPLEGAR "2) Bajas"
DESPLEGAR "3) Consultas"
DESPLEGAR "4) Cambios"
DESPLEGAR "5) Reporte general"
DESPLEGAR "6) Compras"
DESPLEGAR "7) Ventas"
CAPÍTULO II.
9. DESPLEGAR "8) Salir"
10. PEDIR op
11. SI op=l ENTONCES
ALTAS
DE OTRA FORMA
SI op=2 ENTONCES
BAJAS
DE OTRA FORMA
SI op = 3 ENTONCES
CONSULTAS
DE OTRA FORMA
SI op=4 ENTONCES
CAMBIOS
DE OTRA FORMA
SI op=5 ENTONCES
REPORTEG
DE OTRA FORMA
SI op=6 ENTONCES
COMPRAS
DE OTRA FORMA
SI op = 7 ENTONCES
VENTAS
12. SI op=8 ENTONCES
IR al paso 13
DE OTRA FORMA
IR al paso 1
13. FIN
ALTAS:
1.
2.
3.
4.
5.
6.
7.
8.
ABRIR ARCHIVO "FERRET"
n←LOF(l)/37
r←n+1
i←1
SI i > n ENTONCES
IR al paso 6
DE OTRA FORMA
LEER REGISTRO i
SI iarticul$=SPACE$(25) ENTONCES
r←i
i←n
i← i + 1
IR al paso 5
PEDIR articul$
PEDIR costo
PEDIR precio
ESTRUCTURAS DE DATOS
411
412
PARTE I I I . PROGRAMACIÓN
9.
10.
11.
12.
13.
14.
15.
16.
cant←0
MOVER IZQUIERDA iarticul$ ← iarticul$
MOVER IZQUIERDA icosto$ ← MKS$(costo)
MOVER IZQUIERDA iprecio$ ← MKS$(precio)
MOVER IZQUIERDA icant$ ←MKS$(cant)
ESCRIBIR REGISTRO r
CERRAR ARCHIVO "FERRET"
FINP
BAJAS:
1.
2.
3.
ABRIR ARCHIVO "FERRET"
ENCUENTRA
SI r=0 ENTONCES
DESPLEGAR "Ese artículo no se encuentra"
DE OTRA FORMA SI CVS(icant$) > 0 ENTONCES
DESPLEGAR "Ese artículo todavía tiene existencias"
DE OTRA FORMA
DESPLEGAR iarticul$, CVS(icosto$), CVS(iprecio$), CVS(icant$)
PEDIR sn$
SI sn$="S" ENTONCES
MOVER IZQUIERDA iarticul$ ← SPACE$(25)
ESCRIBIR REGISTRO r
4. CERRAR ARCHIVO "FERRET"
5. FINP
CONSULTAS:
1. ABRIR ARCHIVO "FERRET"
2. ENCUENTRA
3. SI r=0 ENTONCES
DESPLEGAR "Ese artículo no se encuentra" DE OTRA FORMA
DESPLEGAR iarticul$, CVS(icosto$), CVS(iprecio$), CVS(icant$)
4. CERRAR ARCHIVO "FERRET"
5. FINP
CAMBIOS:
1.
2.
3.
ABRIR ARCHIVO "FERRET"
ENCUENTRA
SI r=0 ENTONCES
DESPLEGAR "Ese artículo no se encuentra"
DE OTRA FORMA
CAPÍTULO II.
ESTRUCTURAS DE DATOS
DESPLEGAR "0) NINGUNO"
DESPLEGAR "1) Artículo"
DESPLEGAR "2) Costo"
DESPLEGAR "3) Precio"
DESPLEGAR "4) Cantidad"
PEDIR c
SI c > 0 ENTONCES
SI c= l ENTONCES
PEDIR articul$
MOVER IZQUIERDA iarticul$ ← articul$
DE OTRA FORMA
SI c = 2 ENTONCES
PEDIR costo
MOVER IZQUIERDA icosto$ ← MKS$(costo)
DE OTRA FORMA
SI c = 3 ENTONCES
PEDIR precio
MOVER IZQUIERDA iprecio$ ← MKS$(precio)
DE OTRA FORMA
PEDIR cant
MOVER IZQUIERDA icant$ ← MKS$(cant)
ESCRIBIR REGISTRO r
4. CERRAR ARCHIVO "FERRET"
5. FINP
REPORTEG:
1.
2.
3.
4.
ABRIR ARCHIVO "FERRET"
n← LOF(l)/37
i← 1
SI i > n ENTONCES
IR al paso 5 DE OTRA FORMA LEER
REGISTRO i
SI iarticul$ < > SPACE$(25) ENTONCES
DESPLEGAR iarticul$, CVS(icosto$), CVS(iprecio$), CVS(icant$)
i←i + 1
IR al paso 4
5. CIERRA ARCHIVO "FERRET"
6. FINP
COMPRAS:
1. ABRIR ARCHIVO "FERRET"
2. ENCUENTRA
3. SI r=0 ENTONCES
413
414
PARTE III. PROGRAMACIÓN
DESPLEGAR "Ese artículo no se encuentra"
DE OTRA FORMA
PEDIR cantcomp
total ←CVS(icant$) + cantcomp
MOVER IZQUIERDA icant$ ← MKS$(total)
ESCRIBIR REGISTRO r
4. CERRAR ARCHIVO "FERRET"
5. FINP
VENTAS:
1. ABRIR ARCHIVO "FERRET"
2. ENCUENTRA
3. SI r=0 ENTONCES
DESPLEGAR "Ese artículo no se encuentra"
DE OTRA FORMA
PEDIR cantvend
total ← CVS(icant$) - cantvend
MOVER IZQUIERDA icant$ ← MKS$(total)
ESCRIBIR REGISTRO r
4. CERRAR ARCHIVO "FERRET"
5. FINP
ENCUENTRA:
1.
2.
3.
4.
5.
6.
PEDIR articul$
articul$ ← articul$ + SPACE$(25-LEN(articul$))
n ← LOF(l)/37
r←0
i←l
SI i > n ENTONCES
IR al paso 7
DE OTRA FORMA
LEER REGISTRO i
SI articul$ = iarticul$ ENTONCES
r←i
i←n
i←i+ 1
IR al paso 6
7. FINP
Paso 4. Diagrama de flujo (véanse Figs. 11.14 a 11.22).
Paso 5. Codificación y edición del programa: REM
FERRET.BAS
CAPÍTULO II. ESTRUCTURAS DE DATOS
Figura 11.14
415
416
PARTE III. PROGRAMACIÓN
Figura 11.15
CAPÍTULO II. ESTRUCTURAS DE DATOS
ABRIR ARCHIVO "FERRET"
Figura 11.16
417
418
PARTE III.
PROGRAMACIÓN
Figura 11.17
REM Programa de control de existencias
MENÚ:
CLS
LOCATE 1,30: PRINT " F E R R E T E R Í A "
LOCATE 5,34: PRINT "M E N U"
LOCATE 6,34: PRINT "
"
….
CAPÍTULO II. ESTRUCTURAS DE DATOS
Figura 11.18
419
420
PARTE III. PROGRAMACIÓN
Figura 11 .19
CAPÍTULO I I .
Figura 11.20
ESTRUCTURAS DE DATOS
421
422
PARTE III. PROGRAMACIÓN
Figura 11.21
CAPÍTULO I I .
Figura 11.22
ESTRUCTURAS DE DATOS
423
424
PARTE III. PROGRAMACIÓN
LOCATE 10,31: PRINT "1) Altas"
LOCATE 11,31: PRINT "2] Bajas"
LOCATE 12,31: PRINT "3) Consultas"
LOCATE 13,31: PRINT "4) Cambios"
LOCATE 14,31: PRINT "5) Reporte general"
LOCATE 15,31: PRINT "6) Compras"
LOCATE 16,31: PRINT "7) Ventas"
LOCATE 17,31: PRINT "8) Salir"
LOCATE 21,34: INPUT "OPCIÓN -=>",op
IF op = 1 THEN
GOSUB ALTAS
ELSE
IF op = 2 THEN
GOSUB BAJAS
ELSE
IF o p= 3T HE N
GOSUB CONSULTAS
ELSE
IF op=4 THEN
GOSUB CAMBIOS
ELSE
IF op = 5THEN
GOSUB REPORTEG
ELSE
IF op = B THEN
GOSUB COMPRAS
ELSE
IF op=7THEN
GOSUB VENTAS
END IF
END IF
END IF
END IF
END IF
END IF
ENDIF
IF op = 8THEN
GOTO FIN
ELSE
GOTO MENÚ
END IF
FIN:
END
ALTAS:
OPEN "R", 1, "FERRET.DAT". 37
CAPÍTULO II. ESTRUCTURAS DE DATOS
FIELD #1, 25 AS iarticul$, 4 AS icostoS, 4 AS iprecio$, 4 AS icant$
REM Localizar el registro en el que se va a dar la alta REM
que es el primero dado de baja o el siguiente al último
n=L0F[1]/37
r=n + 1 FOR
i=1 TO n
GET#1,i
IF iarticul$=SPACE$(25) THEN
r=i
i=n
END IF
NEXT i
CLS
PRINT "ALTAS"
PRINT
PRINT "Favor de teclear los siguientes datos:"
PRINT
REM Pedir los datos en variables de memoria principal
INPUT "Articulo: ",articul$
INPUT "Costo: ",costo
INPUT "Precio: ",precio
cant = O
REM Pasar los datos a memoria intermedia
LSET iarticul$ = articuIS
LSET icosto$ = MKS$(costo)
LSET iprecio$ = MKS$(precio)
LSET icant$ = MKSS(cant)
REM Escribir los datos a disco
PUT#1,r
CLOSE #1
PRINT
INPUT "Alta realizada. Oprima <enter>...", enter$
RETURN
BAJAS:
OPEN "R". 1, "FERRET.DAT", 37
425
426
PARTE III.
PROGRAMACIÓN
FIELD #1, 25 AS iarticulS, 4 AS icostoS, 4 AS iprecioS, 4 AS icantS
CLS
PRINT "BAJAS"
PRINT
REM Localizar el registro
GOSUB ENCUENTRA
PRINT
IF r=O THEN
INPUT "Ese artículo no se encuentra. Oprima <ENTER>...",enter$
ELSE
IF CVS[icant$] >O THEN
INPUT "Ese artículo todavía tiene existencias. Oprima <ENTER> ...",enter$
ELSE
REM Desplegar registro para confirmar baja
PRINT "Artículo: ",iarticul$
PRINT "Costo: ",CVS[icosto$]
PRINT "Precio: ",CVS[iprecio$]
PRINT "Cantidad: ",CVS[icant$]
PRINT
INPUT "Es éste el artículo (S/N)";sn$
IF sn$="S"THEN
REM Borrar lógicamente el registro
LSET iarticul$=SPACE$(25)
PUT #1,r
PRINT
INPUT "Baja realizada. Oprima <ENTER> ...",enter$
END IF
END IF
END IF
CLOSE #1
RETURN
CONSULTAS:
OPEN "R". 1, "FERRET.DAT", 37
FIELD #1, 25 AS iarticul$. 4 AS icosto$, 4 AS iprecio$. 4 AS icant$
CLS
PRINT "CONSULTAS"
PRINT
CAPÍTULO II. ESTRUCTURAS DE DATOS
REM Localizar el registro
GOSUB ENCUENTRA
PRINT
IF r=OTHEN
INPUT "Ese artículo no se encuentra. Oprima <ENTER> ...",enter$
ELSE
REM Desplegar datos
PRINT "Artículo: ",iarticul$
PRINT "Costo: ",CVS(icosto$)
PRINT "Precio: ",CVS(iprecio$)
PRINT "Cantidad: ",CVS(icant$)
PRINT
INPUT "Oprima <ENTER> ...",enter$
END IF
CLOSE #1
RETURN
CAMBIOS:
OPEN "R", 1, "FERRET.DAT", 37
FIELD #1, 25 AS iarticul$, 4 AS icostoS, 4 AS iprecio$, 4 AS icant$
CLS
PRINT "CAMBIOS"
PRINT
REM Localizar el registro
GOSUB ENCUENTRA
PRINT
IF r=O THEN
INPUT "Ese artículo no se encuentra. Oprima <ENTER> ...",enter$
ELSE
REM Desplegar menú de campos
PRINT "O) NINGUNO"
PRINT "1] Articulo"
PRINT "2] Costo"
PRINT "3) Precio"
PRINT "4] Cantidad"
PRINT
PEDIRC:
INPUT "Número de campo que desea cambiar";c
427
428
PARTE III.
PROGRAMACIÓN
PRINT
IF c>0 THEN
REM Hacer cambio en variable de memoria intermedia
IF c=1 THEN
INPUT "Articulo: ",articul$
LSET iarticul$ = articul$
ELSE
IF c=2 THEN
INPUT "Costo: ",costo
LSET icosto$ = MKS$(costo)
ELSE
IF c = 3THEN
INPUT "Precio: ",precio
LSET iprecio$ = MKS$[precio]
ELSE
IFc=4THEN
INPUT "Cantidad: ",cant LSET
icantS = MKS$(cant]
ELSE
GOTO PEDIRC
END IF
END IF
END IF
END IF
REM Escribir cambio en el disco
PUT#1,r
PRINT
INPUT "Cambio realizado. Oprima <ENTER> ...",enter$
END IF
END IF
CLOSE #1
RETURN
REPORTEG:
OPEN "R". 1, "FERRET.DAT", 37
FIELD #1, 25 AS iarticul$, 4 AS icosto$, 4 AS iprecio$, 4 AS icant$
CLS
PRINT “REPORTE GENERAL"
PRINT
n = L0F[1]/37
FOR i=1 TO n
GET#1,i
CAPÍTULO II. ESTRUCTURAS DE DATOS
REM Desplegar sólo aquellos que no están dados de baja
IF iarticul$< >SPACE$(25) THEN
PRINT "Artículo: ",iarticul$
PRINT "Costo: ",CVS(icosto$)
PRINT "Precio: ",CVS(iprec¡o$)
PRINT "Cantidad: ",CVS(icant$)
PRINT
END IF
NEXT i
CLOSE #1
INPUT "Fin del archivo. Oprima <ENTER> ...",enter$
RETURN
COMPRAS:
OPEN "R", 1, "FERRET.DAT", 37
FIELD #1, 25 AS iarticul$, 4 AS icosto$, 4 AS ¡precio$, 4 AS icant$
CLS
PRINT "COMPRAS"
PRINT
REM Localizar el registro
GOSUB ENCUENTRA
PRINT
IF r=OTHEN
INPUT "Ese artículo no se encuentra. Oprima <ENTER> ...",enter$
ELSE
INPUT "Cuantos artículos se compraron";cantcomp
total = CVS[icant$] + cantcomp
REM Pasar nuevo total a memoria intermedia
LSET icant$ = MKS$[total]
REM Escribir actualización en disco
PUT#1,r
PRINT
INPUT "Actualización efectuada. Oprima <ENTER> ...",enter$
END IF
CLOSE #1
RETURN
VENTAS:
429
430
PARTE III.
PROGRAMACIÓN
OPEN "R", 1, "FERRET.DAT", 37
FIELD #1, 25 AS iarticul$, 4 AS icosto$, 4 AS iprecio$, 4 AS icant$
CLS
PRINT "VENTAS"
PRINT
REM Localizar el registro
GOSUB ENCUENTRA
PRINT
IF r=O THEN
INPUT "Ese artículo no se encuentra. Oprima <ENTER> ,..",enter$
ELSE
INPUT "Cuantos artículos se vendieron";cantvend
total = CVS(icant$) - cantvend
REM Pasar nuevo total a memoria intermedia
LSET icant$ = MKS$[total)
REM Escribir actualización en disco
PUT#1,r
PRINT
INPUT "Actualización efectuada. Oprima <ENTER> ...",enter$
END IF
CLOSE #1
RETURN
ENCUENTRA:
REM Pedir el nombre del artículo que se va a buscar en el archivo
INPUT "Teclea el nombre del artículo: ",articul$
articul$=articul$+SPACE$[25-LEN[articul$]]
n=L0F[1]/37
REM Regresar en r el número de registro o O si no existe
r=0
FOR i=1 TO n
GET#1,i
IF articul$=iarticul$ THEN
r=i
CAPÍTULO II.
ESTRUCTURAS DE DATOS
431
i=n
END IF
NEXT i
RETURN
Ejercicio: Efectuar el paso de pruebas del programa
PROBLEMA 2
Se pretende llevar un control de un grupo de alumnos por computadora, teniendo las siguientes
opciones:
1)
2)
3)
4)
5)
6)
Agregar alumnos nuevos
Dar de baja alumnos
Consultar los datos de algún alumno
Modificar los datos de algún alumno
Obtener un reporte de la información de todos los alumnos
Obtener un reporte de la información de los alumnos aprobados (con calificación mayor o igual
a 7)
Los datos que se quiere tener de todos y cada uno de los alumnos son: matrícula, nombre, teléfono,
dirección y calificación.
Paso 1. Definición del problema:
Dado en la redacción del problema.
Paso 2. Planeación de la solución:
La estructura de los registros y nombre de variables correspondientes de memoria principal e
intermedia son:
Campo
matrícula
nombre
teléfono
dirección
calificación
Longitud
7
30
10
50
4
Nombre en
Mcm. principal
Nombre en
Mem. intermedia
mat$
nom$
tel$
dir$
calif
imat$
inom$
itel$
idir$
icalif$
Longitud del registro: 101
Aunque también el campo matrícula puede ser usado como campo clave, emplearemos el campo
nombre como campo clave.
El menú del programa quedará configurado con las siguientes opciones:
1) ALTAS
432
2)
3)
4)
5)
PARTE III. PROGRAMACIÓN
BAJAS
CONSULTAS Y CAMBIOS
REPORTE GENERAL
REPORTE DE ALUMNOS APROBADOS
6) SALIR
Las novedades de este programa con respecto al anterior son:
1) Las opciones de consultas y cambios se manejarán conjuntamente en una opción del menú
2) Aparece un reporte específico que es el de aquellos alumnos que han aprobado la materia
Las acciones generales a seguir para cada una de las opciones del menú son:
1)
ALTAS
1) Abrir el archivo
2) Especificar la estructura asignando espacio para los campos en memoria intermedia
3) Buscar el primer número de registro que esté inactivo para hacer allí la alta y si no hay se
tiene que crear un nuevo registro al final del archivo
4) Pedir los datos de la entidad en variables de memoria principal
5) Pasar los datos de memoria principal a memoria intermedia
6) Escribir los datos de memoria intermedia a memoria secundaria en el número de registro
encontrado en el paso 3
7) Cerrar el archivo
2)
BAJAS
1) Abrir el archivo
2) Especificar la estructura asignando espacio para los campos en memoria intermedia
3) Leer el registro
4) Escribir espacios en el campo clave de memoria intermedia
5) Escribir el registro
6) Cerrar el archivo
3)
CONSULTAS Y CAMBIOS
1) Abrir el archivo
2) Especificar la estructura asignando espacio para los campos en memoria intermedia
3) Leer registro
4) Desplegar datos de memoria intermedia
5) SI se desea modificar datos ENTONCES
Pedir el nuevo dato en variable de memoria principal Pasar el dato de la variable de
memoria principal a la de memoria intermedia Escribir el registro 5) Cerrar el
archivo
4) REPORTE GENERAL
1) Abrir el archivo
2) Especificar la estructura asignando espacio para los campos en memoria intermedia
3) Verificar el número de registros existentes
CAPÍTULO I I . ESTRUCTURAS DE DATOS
4) Í ← 1
5) SI i > número de registros existentes ENTONCES
IR al paso 6
DE OTRA FORMA
LEER REGISTRO i
SI el registro está activo ENTONCES
Desplegar variables de memoria intermedia
i←i + 1
IR al paso 5
6) Cerrar el archivo
5) REPORTE DE ALUMNOS APROBADOS
1)
2)
3)
4)
5)
Abrir el archivo
Especificar la estructura asignando espacio para los campos en memoria intermedia
Verificar el número de registros existentes
i← 1
SI i > número de registros existentes ENTONCES
IR al paso 6
DE OTRA FORMA
LEER REGISTRO i
SI el registro está activo y la calificación es mayor o igual a 7 ENTONCES
Desplegar variables de memoria intermedia
i ←i + 1
IR al paso 5
6) Cerrar el archivo
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
mat$
nom$
tel$
dir$
calif
imat$
inom$
itel$
idir$
¡calif$
op
sn$
c
n
i
r
a
matrícula (M. Principal)
a nombre (M. Principal)
a
a
a
a
a
a
a
a
a
a
a
a
a
a
teléfono (M. Principal)
dirección (M. Principal)
calificación (M. Principal)
matrícula (M. Intermedia)
nombre (M. Intermedia)
teléfono (M. Intermedia)
dirección (M. Intermedia)
calificación (M. Intermedia)
opción seleccionada
variable que toma un valor de 'S' o 'N' para confirmar la baja de un registro
número de campo que se desea cambiar
número de registros del archivo
contador de registros del archivo
número de registro encontrado
433
434
PARTE III. PROGRAMACIÓN
1.
2.
3.
4.
5.
6.
7.
8.
9.
DESPLEGAR "MENÚ:"
DESPLEGAR "1) Altas"
DESPLEGAR "2) Bajas"
DESPLEGAR "3) Consultas y cambios"
DESPLEGAR "4) Reporte general"
DESPLEGAR "5) Reporte de alumnos aprobados"
DESPLEGAR "6) Salir"
PEDIR op
SI op=l ENTONCES
ALTAS
DE OTRA FORMA
SI op = 2 ENTONCES
BAJAS
DE OTRA FORMA
SI op = 3 ENTONCES
CONSCAMB
DE OTRA FORMA
SI op=4 ENTONCES
REPORTEG
DE OTRA FORMA
SI op=5 ENTONCES
REPORTEA
10. SI op = 6 ENTONCES
IR al paso 11
DE OTRA FORMA
IR al paso 1
11. FIN
ALTAS:
1
2
3
4
5
ABRIR ARCHIVO "ALUMNOS"
n←LOF(l)/101
r ←n+l
i← 1
SI i > n ENTONCES
IR al paso 6
DE OTRA FORMA
LEER REGISTRO i
SI inom$ = SPACE$(30) ENTONCES
r←i
i←n
¡←i + 1
IR al paso 5
6 PEDIR mat$
7 PEDIR nom$
8 PEDIR tel$
CAPÍTULO I I .
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
PEDIR dir$
PEDIR calif
MOVER IZQUIERDA imat$ ← mat$
MOVER IZQUIERDA inom$ ← nom$
MOVER IZQUIERDA itel$ ←tel$
MOVER IZQUIERDA idir$ ←dir$
MOVER IZQUIERDA icalif$ ←MKS$(calif)
ESCRIBIR REGISTRO r
CERRAR ARCHIVO "ALUMNOS"
FINP
BAJAS:
1.
2.
3.
ABRIR ARCHIVO "ALUMNOS"
ENCUENTRA
SI r=0 ENTONCES
DESPLEGAR "Ese alumno no se encuentra"
DE OTRA FORMA
DESPLEGAR imat$, inom$, itel$, idir$, CVS(icalif$)
PEDIR sn$ SI sn$="S" ENTONCES
MOVER IZQUIERDA inom$ ← SPACE$(30)
ESCRIBIR REGISTRO r
4. CERRAR ARCHIVO "ALUMNOS"
5. FINP
CONSCAMB:
1. ABRIR ARCHIVO "ALUMNOS"
2. ENCUENTRA
3. SI r=0 ENTONCES
DESPLEGAR "Ese alumno no se encuentra"
DE OTRA FORMA
DESPLEGAR "0) SALIR"
DESPLEGAR "1) Matrícula:", imat$
DESPLEGAR "2) Nombre:", inom$
DESPLEGAR "3) Teléfono:", itel$
DESPLEGAR "4) Dirección:", idir$
DESPLEGAR "5) Calificación:", CVS(icalif$)
PEDIR c
SI c > 0 ENTONCES
SI c=l ENTONCES
PEDIR mat$
MOVER IZQUIERDA imat$ ← mat$
DE OTRA FORMA
SI c=2 ENTONCES
ESTRUCTURAS DE DATOS
435
436
PARTE III. PROGRAMACIÓN
PEDIR nom$
MOVER IZQUIERDA inom$ ← nom$
DE OTRA FORMA
SI c=3 ENTONCES
PEDIR tel$
MOVER IZQUIERDA itel$ ← tel$
DE OTRA FORMA
SI c=4 ENTONCES
PEDIR dir$
MOVER IZQUIERDA idir$ ← dir$
DE OTRA FORMA
PEDIR calif
MOVER IZQUIERDA icalf$ ← MKS$(calif)
ESCRIBIR REGISTRO r
4. CERRAR ARCHIVO "ALUMNOS"
5. FINP
REPORTEG:
1.
2.
3.
4.
ABRIR ARCHIVO ' 'ALUMNOS''
n←LOF(l)/101
i← 1
SI i > n ENTONCES
IR al paso 5
DE OTRA FORMA
LEER REGISTRO i
SI inom$ O SPACE$(30) ENTONCES
DESPLEGAR imat$, inom$, itel$, idir$, CVS(icalif$)
i←i + 1
IR al paso 4
5. CIERRA ARCHIVO "ALUMNOS"
6. FINP
REPORTEA:
1.
2.
3.
4.
ABRIR ARCHIVO "ALUMNOS"
n ← LOF(1)/101
i← 1
SI i > n ENTONCES
IR al paso 5
DE OTRA FORMA
LEER REGISTRO i
SI c inom$ <> SPACE$(30) AND CVS(icalif$)> = 7 ENTONCES
DESPLEGAR imat$, inom$, itel$, idir$, CVS(icalif$)
i←i + 1
IR al paso 4
CAPÍTULO II. ESTRUCTURAS DE DATOS
5. CIERRA ARCHIVO "ALUMNOS"
6. FINP
ENCUENTRA:
1.
2.
3.
4.
5.
6.
PEDIR nom$
nom$ ← nom$ + SPACE$(30-LEN(nom$))
n←LOF(l)/101
r←0
i← 1
SI i > n ENTONCES
IR al paso 7
DE OTRA FORMA
LEER REGISTRO i
SI nom$ = inom$ ENTONCES
r←i
i←n
i ←i + 1
IR al paso 6
7. FINP
Paso 4. Diagrama de flujo (véanse Figs. 11.23 a 11.29):
Paso 5, Codificación y edición del programa:
REM ALUMNOS.BAS
REM Programa de control de alumnos
MENÚ:
CLS
LOCATE 1,31: PRINT "CONTROL DE ALUMNOS"
LOCATE 5,34: PRINT "M E N U"
LOCATE 6,34: PRINT " - - - -“
LOCATE 9,31: PRINT "1) Altas"
LOCATE 11,31: PRINT "2) Bajas"
LOCATE 13,31: PRINT "3) Consultas y cambios"
LOCATE 15,31: PRINT "4) Reporte general"
LOCATE 17,31: PRINT "5) Reporte de alumnos aprobados"
LOCATE 19,31: PRINT "6) Salir"
LOCATE 22,34: INPUT "OPCIÓN -=> ",op
IF op = 1 THEN
GOSUB ALTAS
ELSE
IF op = 2 THEN
GOSUB BAJAS
ELSE
437
438
PARTE 111. PROGRAMACIÓN
Figura 11.23
CAPÍTULO II. ESTRUCTURAS DE DATOS
Figura 11.24
439
440
PARTE III. PROGRAMACIÓN
ABRIR ARCHIVO "ALUMNOS
"Ese alumno no
imas$, inom$, itel,
idir$, CVS(icalif$)
CERRAR ARCHIVO "ALUMNOS
Figura 11.25
se encuentra"
CAPÍTULO I I . ESTRUCTURAS DE DATOS
Figura 11.26
441
442
PARTE III. PROGRAMACIÓN
Figura 11.27
CAPÍTULO II. ESTRUCTURAS DE DATOS
Figura 11.28
443
444
PARTE III.
PROGRAMACIÓN
Figura 11.29
CAPÍTULO 11. ESTRUCTURAS DE DATOS
IF op = 3 THEN
GOSUB CONSCAMB
ELSE
IF op = 4 THEN
GOSUB REPORTEG
ELSE
IF op = 5 THEN
GOSUB REPORTEA
END IF
END IF
END IF
END IF
END IF
IF op = 6 THEN
GOTO FIN
ELSE
GOTO MENU
END IF
FIN:
END
ALTAS:
OPEN "R", 1, "ALUMNOS.DAT", 101
FIELD #1, 7 AS imat$, 30 AS inom$, 10 AS itel$, 50 AS idir$, 4 AS icalif$
REM Localizar el registro en el que se va a dar la alta
REM que es el primero dado de baja o el siguiente al último
n = L0F[1]/1O1
r=n + 1
F0R i=1 TO n
GET#1,i
IF inom$=SPACE$(3O) THEN
r=i
i=n
END IF
NEXT i
CLS
PRINT "ALTAS"
PRINT
PRINT "Favor de teclear los siguientes datos:"
PRINT
REM Pedir los datos en variables de memoria principal INPUT
"Matrícula: ",mat$
445
446
PARTE III. PROGRAMACIÓN
INPUT "Nombre: ",nom$
INPUT 'Teléfono: ",tel$
INPLJT "Dirección: ",dir$
INPUT "Calificación: ",calif
REM Pasar los datos a memoria intermedia
LSET imat$ = mat$
LSET inom$ = nom$
LSET itel$ = tel$
LSET idir$ = dir$
LSET icalifS = MKS$(calif)
REM Escribir los datos a disco
PUT#1,r
CLOSE #1
PRINT
INPUT "Alta realizada. Oprima <ENTER> ,..",enter$
RETURN
BAJAS:
OPEN "R", 1, "ALUMNOS.DAT", 101
FIELD #1, 7 AS imat$, 30 AS inom$, 10 AS itel$, 50 AS idir$, 4 AS icalifS
CLS
PRINT "BAJAS"
PRINT
REM Localizar el registro
GOSUB ENCUENTRA
PRINT
IF r=O THEN
INPUT "Ese alumno no se encuentra. Oprima <ENTER> ...", enter$
ELSE
REM Desplegar registro para confirmar baja
PRINT "Matrícula: ",imat$
PRINT "Nombre: ",inom$
PRINT 'Teléfono: ",itel$
PRINT "Dirección: ",idir$
PRINT "Calificación: ",CVS(icalif$)
PRINT
INPUT "Es éste el alumno (S/N)";sn$
CAPÍTULO II.
ESTRUCTURAS DE DATOS
IFsn$="S"THEN
REM Borrar lógicamente el registro
LSET inom$=SPACE$[3O]
PUT#1,r
PRINT
INPUT "Baja realizada. Oprima <ENTER>...",enter$
END IF
END IF
CLOSE #1
RETURN
CONSCAMB:
OPEN "R", 1, "ALUMNOS.DAT", 101
FIELD #1, 7 AS imat$, 30 AS inom$. 10 AS itel$, 50 AS idir$, 4 AS icalif$
CLS
PRINT "CONSULTAS Y CAMBIOS"
PRINT
REM Localizar el registro
GOSUB ENCUENTRA
PRINT
IF r=0 THEN
INPUT "Ese alumno no se encuentra. Oprima <ENTER>...", enter$
ELSE
REM Desplegar menú de campos
PRINT "O] SALIR"
PRINT "1] Matrícula: ",imat$
PRINT "2]Nombre: ",inom$
PRINT "3] Teléfono: ",itel$
PRINT "4] Dirección: ",idir$
PRINT "5]Calificación: ",CVS(icalif$)
PRINT
PEDIRC:
INPUT "Número de campo que desea cambiar";c
PRINT
IF c>0 THEN
REM Hacer cambio en variable de memoria intermedia
IF c=1 THEN
INPUT "Matrícula: ",mat$
447
448
PARTE III. PROGRAMACIÓN
LSET imat$ = mat$
ELSE
IF c=2 THEN
INPUT "Nombre: ",nom$
LSET inom$ = nom$
ELSE
IFc=3THEN
INPUT 'Teléfono: ",tel$
LSET itel$ = tel$
ELSE
IF c=4 THEN
INPUT "Dirección: ",dir$
LSET idir$ = dir$
ELSE
IF c=5 THEN
INPUT "Calificación: ",calif
LSET icalif$ = MKS$(calif)
ELSE
GOTO PEDIRC
END IF
END IF
END IF
END IF
END IF
REM Escribir cambio en el disco
PUT#1,r
PRINT
INPUT "Cambio realizado. Oprima <ENTER>...",enter$
END IF
END IF
CLOSE #1
RETURN
REPORTEG:
OPEN "R", 1, "ALUMNOS.DAT", 101
FIELD #1, 7 AS imat$, 30 AS inom$, 10 AS itel$, 50 AS idir$, 4 AS icalif$
CLS
PRINT "REPORTE GENERAL"
PRINT
n = L0F[1]/101
F0R i=1 TO n
GET#1,i
REM Desplegar sólo aquellos que no estén dados de baja
CAPÍTULO 11. ESTRUCTURAS DE DATOS
IF inom$< >SPACE$[30] THEN
PRINT "Matrícula: ",imat$
PRINT "Nombre: ",inom$
PRINT 'Teléfono: ",itel$
PRINT "Dirección: ",idir$
PRINT "Calificación: ",CVS(icalif$]
PRINT
ENDIF
NEXT i
CLOSE #1
INPUT "Fin del archivo. Oprima <ENTER>...",enter$
RETURN
REPORTEA:
OPEN "R", 1, "ALUMNOS.DAT", 101
FIELD #1, 7 AS imat$, 30 AS inom$, 10 AS itel$, 50 AS idir$, 4 AS icalif$
CLS
PRINT "REPORTE DE ALUMNOS APROBADOS"
PRINT
n = L0F[1]/101
FOR i = 1 TO n
GET#1,i
REM Desplegar aquellos que no estén dados de baja
REM y que su calificación es aprobatoria
IF inom$<>SPACE$[3O] AND CVS(icalif$)>=7 THEN
PRINT "Matrícula: ",imat$
PRINT "Nombre: ",¡nom$
PRINT 'Teléfono: ",itel$
PRINT "Dirección: ",idir$
PRINT "Calificación: ",CVS(icalif$)
PRINT
END IF
NEXT i
CLOSE # i
INPUT "Fin del archivo. Oprima <ENTER>...",enter$
RETURN
ENCUENTRA:
REM Pedir el nombre que se va a buscar en el archivo
INPUT "Teclea el nombre: ",nom$
nom$=nom$+SPACE$(3O-LEN(nom$]]
n=L0F[1]/1O1
449
450
PARTE III. PROGRAMACIÓN
REM Regresar en r el número de registro o O si no existe
r=O
FOR i=1 TO n
GET#1,i
IFnom$=inom$ THEN
r=i
i=n
END IF
NEXT i
RETURN
Ejercicio: Efectuar el paso de pruebas del programa
Problemas propuestos
1. En un centro de video se requiere llevar un control de las películas que se rentan. Por cada película
se necesita almacenar los siguientes datos:
Clave de la película
Título
Clasificación
Precio de renta
Número de copias
1)
2)
3)
4)
El programa debe manejar las siguientes opciones:
Introducir los datos de una película.
Reporte de todos los títulos de películas con determinada clasificación.
Reporte de todos los títulos de las películas cuyo precio de renta esté entre 3000 y 5000.
Dar de baja los datos de una película, dada su clave.
2. En una biblioteca se necesita un programa para almacenamiento y consulta de información de
libros. La información que se maneja por libro es:
Folio
Título
Autor
Materia
Estatus
Lugar
El estatus puede ser:
R
P
D
Reserva
Prestado
Disponible
CAPÍTULO II. ESTRUCTURAS DE DATOS
451
El programa debe manejar las siguientes opciones:
1) Introducir los datos de un nuevo libro.
2) Generar un reporte de todos los libros que se encuentran en reserva.
3) Generar un reporte de todos los libros que se encuentran en determinado lugar y cuyo folio está
entre determinado rango.
4) Dar de baja los datos de un libro dado su folio.
3. El departamento de material de apoyo académico necesita un programa que le ayude a manejar la
información referente al control de los préstamos de equipo que se hace a profesores de una escuela.
Los datos que comúnmente manejan son:
Nombre del aparato Nombre del
profesor Fecha del préstamo
Fecha de regreso del equipo
El programa debe manejar las siguientes opciones:
1) Introducir los datos de un nuevo préstamo de equipo.
2) Borrar los datos de un préstamo cuando éste haya sido devuelto.
3) Generar un reporte de todos los préstamos existentes.
4) Generar un reporte de todos los profesores a los que se les prestó determinado tipo de aparato.
4. En el Centro de Cómputo de cierta escuela se desea llevar un control por computadora de los discos
de programas que se prestan a los alumnos.
Para esto, el encargado pide que se haga un programa con un archivo que contenga los siguientes
campos:
Número del paquete (consecutivo)
Nombre del programa o paquete
Área a la que pertenece (sistema operativo, hoja de cálculo, etc.)
Tipo de computadora en que corre
Total de discos que lo componen
Las claves para las áreas y para el tipo de computadora que se pueden usar son:
Clave
Área
SO
PP
HEC
BD
Sistema operativo
Procesador de palabras
Hoja electrónica de cálculo
Base de datos
Clave
Tipo de computadora
MAC
PS
Macintosh
IBM PS/2
452
PARTE III.
PROGRAMACIÓN
Además te pide que el programa muestre un menú con las opciones de:
1) Dar de alta un nuevo paquete.
2) Obtener un reporte general de todo el archivo.
3) Obtener reporte:
a) por área
b) por tipo de computadora
4) Dar de baja un paquete por su número.
5. El administrador de una empresa pide que se realice un programa que calcule el salario real de
todos y cada uno de sus empleados.
Para esto se necesita un archivo que contenga los siguientes datos:
Clave del empleado (secuencial)
Nombre del empleado
Dirección y teléfono
Salario nominal (máximo $15 000)
Rango
Antigüedad
Las claves del rango que se pueden utilizar son:
Clave
Rango
A
B
C
D
Gerente
Director
Supervisor
Otro
El programa debe realizar un reporte que muestre los siguientes datos:
Nombre del empleado
Rango
Salario real
Donde el salario real se calcula a partir del salario nominal considerando lo siguiente:
a) se descuentan los impuestos y la cuota del IMSS según los porcentajes de la siguiente tabla:
Clave de rango
A
B
C
D
Impuestos
15%
10%
5%
3%
IM
10%
8%
6%
2%
b) se aumenta un 15% a todos por concepto de la caja de ahorros.
Además el administrador pide un reporte de todos los empleados que ganan entre 0 y 3499 y que
tienen 3 años o menos de antigüedad, que contenga los siguientes datos:
CAPÍTULO II.
ESTRUCTURAS DE DATOS
453
Clave
Nombre del empleado
Antigüedad
Salario
1)
2)
3)
4)
Deberás incluir un menú con las siguientes opciones:
Dar de alta empleados.
Obtener reporte de salarios reales.
Obtener reporte de los que ganan menos de 3500 y tienen 3 o menos años de antigüedad.
Dar de baja un empleado dando su nombre.
6. El gerente de mercadotecnia de la empresa "Escaleras y Aluminios S.A. de C.V." requiere un
programa que le permita llevar un control de la venta de escaleras sencillas del modelo ES-001, y del
modelo ES-002, que son escaleras de tijera. Para lo anterior se propone que la estructura del archivo
tenga los siguientes datos:
Fecha
Nombre del vendedor
Número de escaleras ES-001 vendidas
Número de escaleras ES-002 vendidas
Precio de la ES-001
Precio de la ES-002
1)
2)
3)
4)
Las opciones que necesita el gerente deben ser las siguientes:
Introducir los datos antes descritos.
Reporte de las ventas y el total de las ventas de un vendedor en una fecha determinada.
Dar de baja todos los registros de una fecha específica.
Reporte de las ventas y el total de ventas en un mes determinado.
7. En una empresa de transportación de carga se requiere contar con un programa que permita tener
un control de los envíos que se realizan. Esta empresa cuenta con 50 camiones, los cuales se encargan
de entregar las mercancías en diferentes lugares de la república. El gerente necesita almacenar:
Número del camión (secuencial = número de registro)
Nombre del chofer
Fecha de salida
Fecha de regreso
Ciudad a donde se va a entregar la mercancía
Cantidad que se le cobra al cliente por el servicio
Cantidad de viáticos que se requieren para realizar el viaje
Los datos anteriores le permitirán tomar decisiones con respecto a los servicios que se solicitan,
así como la disponibilidad de sus unidades. El gerente requiere lo siguiente:
1) Introducir los datos mencionados cada vez que un camión salga.
2) Hacer consultas por número de camión.
3) Reporte de los camiones que han viajado a una ciudad en específico y el total de dinero neto
obtenido por los viajes a esa ciudad.
454
PARTE III. PROGRAMACIÓN
4) Dar de baja los datos en el momento en que el camión regrese por medio de la fecha de regreso.
8. Una fábrica produce diferentes tipos de computadoras; lo que implica que debe manejar mucha
información de su producción como la siguiente:
Número de serie
Modelo de máquina
Tipo de monitor
Procesador
Costo unitario
Precio unitario
Línea en la que se produce
Para manejar esta información se requiere realizar un programa que maneje las siguientes
opciones:
1)
2)
3)
4)
Introducir los datos.
Reporte de todos los modelos de máquinas con sus respectivos precios unitarios.
Consulta de alguna máquina por medio del número de serie.
Dar de baja los datos correspondientes a un número de serie de máquina.
9. En una relojería se venden básicamente tres tipos de joyas: relojes, anillos y aretes. Éstos se
manejan por un número consecutivo que el dueño de la relojería les asigna según vayan llegando las
joyas.
El dueño te ha contratado para que elabores un sistema que le permita hacer lo siguiente:
1) Emitir un reporte de cuántos relojes, anillos o pares de aretes tiene en existencia.
2) Cuánto dinero tiene invertido en joyas, por cada categoría (relojes, anillos y aretes).
3) Cuando llegue alguna joya nueva se pueda registrar y se le asigne automáticamente el número
que le corresponde.
4) En caso de vender alguna de las joyas, se dé de baja por la clave de la misma.
El archivo debe manejar los siguientes datos:
Clave de la joya (secuencial)
Tipo o categoría Descripción de
la joya Valor monetario
10. En un hospital hay tres tipos de internado: sala general, habitación normal y habitación de lujo.
El director del hospital te pide elabores un programa que le permita realizar lo siguiente:
1)
2)
3)
4)
Registro de nuevos pacientes.
Emitir un reporte de los pacientes que están en habitación de lujo.
Consulta por el número de cama de determinado paciente.
Dar de baja los datos de un paciente cuando salga del hospital por medio del número de cama.
CAPÍTULO II.
ESTRUCTURAS DE DATOS
455
Para lograr lo anterior se requiere que se tengan almacenados los siguientes datos:
Clave del paciente
Nombre
Número de cama
Tipo de habitación
Costo por día
11. Un ortodoncista, para manejar las actividades en su consultorio, maneja la siguiente información:
Nombre del paciente
Fecha de la cita Hora de
la cita
El doctor requiere controlar sus citas por medio de una computadora que le permita:
1) Registrar nuevas citas
2) Dado el nombre de un paciente poder ver los datos correspondientes a su cita.
3) Tener un reporte de todas las personas que debe atender en una fecha determinada con su horario
correspondiente.
4) Dar de baja los datos de los pacientes en una fecha determinada.
12. Se requiere llevar un control de los discos y cassettes que se tienen en una casa disquera. La
información que se requiere tener de cada disco o cassette es:
Nombre del intérprete
Nombre del disco
Tipo:
1) Compact
2)LP
3) Cassette
El programa debe ser capaz de realizar lo siguiente:
1)
2)
3)
4)
Introducir nuevos datos.
Reportar la información de los discos o cassettes de determinado intérprete.
Reportar la información de las existencias por tipo de disco.
Eliminar los datos dando el nombre del disco y tipo de disco.
13. A menudo las amas de casa llegan al supermercado a comprar su despensa y no saben lo que les
hace falta; para colmo, días antes lo recordaron y no es sino hasta al llegar a su casa después de la
compra, que se dan de topes contra la pared por no haberlo anotado.
Una ama de casa moderna a la que no le gustan los "chipotes", ha decidido encargarle a usted un
programa que:
1) Registre los productos que le hacen falta (con su cantidad correspondiente) conforme se le
ocurran.
2) Emita un reporte de estos productos pendientes, incluyendo su número de registro en el archivo.
456
PARTE I I I . PROGRAMACIÓN
3) Elimine los productos adquiridos para que ya no salgan en la lista de pendientes, por medio del
número de registro.
4) Despliegue el total de dinero aproximado que requerirá para comprar todos los productos
pendientes.
Se sugiere que el archivo tenga los siguientes campos:
Nombre del artículo
Cantidad
Precio aproximado
14. Una persona sumamente olvidadiza desea tener almacenadas en la computadora las fechas de
nacimiento de sus amigos y familiares, para felicitarlos oportunamente. Lo que desea es un programa
con las siguientes opciones:
1)
Una opción en donde al teclear la fecha, despliegue la(s) persona(s) que cumple(n) años en ese
día.
2) Otra opción en donde pueda agregar nombres nuevos con su fecha de cumpleaños y teléfono,
para saber a quién llamar y felicitarlos.
3) Otra opción en donde pueda eliminar a los conocidos con los que ya no trate y a los fallecidos.
4) Una opción en donde pueda consultar individualmente los datos de una persona, por su nombre.
Los datos que debe manejar el archivo son:
Nombre de la persona
Fecha de nacimiento
Teléfono
15. El centro de cómputo de una escuela requiere de un programa que le permita tener un control de
las personas que ocupan las computadoras. Para esto requiere almacenar la información de los
alumnos que llegan o ocupar máquinas. La información es:
Matrícula
Nombre del alumno
Carrera
Semestre
Tipo de computadora
Número de computadora
Fecha
Hora
El programa debe contener lo siguiente:
1) Registrar al alumno al momento en que entre.
2) Proporcionar los datos de todos los alumnos que ocuparon una computadora en fecha y computadora determinadas.
3) Proporcionar un reporte de todos los alumnos que trabajaron en una fecha específica.
4) Dar de baja a algún alumno que se arrepintió y decidió no hacer uso de la computadora.
CAPÍTULO I I . ESTRUCTURAS DE DATOS
457
RESUMEN
Estructura de datos: se le llama así a la organización que reciben los datos para poder tratar a un
conjunto de ellos como una unidad. Como ejemplo tenemos a los arreglos, matrices y archivos de
datos, de los cuales los dos primeros están relacionados con el tratamiento de datos en memoria
principal, mientras los archivos de datos están relacionados con la memoria secundaria.
Arreglo: se le llama así a la estructura de datos que organiza sus datos de manera lineal. Los
arreglos emplean un índice entre paréntesis para referenciar a los elementos de que consta.
Matriz: es aquella estructura de datos que organiza sus datos en forma de tabla, para lo cual emplea
dos índices: uno para indicar el renglón y otro la columna, para referenciar sus datos. A las matrices
se les llama también tablas o arreglos de dos dimensiones.
Instrucción DIM: es usada para declarar arreglos y matrices.
Instrucción OPTION BASE: define el rango inferior de los índices para los arreglos y matrices.
Archivo de datos: estructura de datos que sirve para almacenar información en memoria secundaria, organizada en registros y campos.
Registro: información referente a una entidad, formado por un conjunto de campos.
Campo: característica de una entidad.
Tipos de archivos de datos
1) Secuenciales: son archivos que para accesar un registro en particular se deben recorrer todos los
anteriores y sus registros pueden ser de longitud variable.
2) Aleatorios o directos: permiten tener acceso a cualquier registro sin tener que recorrer los que
se encuentren almacenados antes que él. En este tipo de archivos cada registro tiene un número que
lo identifica para así poder localizar cualquier registro en cualquier momento con sólo referenciar su
número. Todos sus registros tienen la misma longitud.
Archivos de datos aleatorios
Memoria intermedia o Buffer: parte de la memoria principal que emplea Quick Basic para ser
intermediaria entre la memoria principal y la memoria secundaria durante el manejo de los archivos
de datos. Campo clave: campo cuyo contenido en cada registro lo diferencia de los demás.
Operaciones con los archivos aleatorios
1) Altas: se refiere a la inclusión de los datos de un nuevo registro en el archivo de datos.
2) Bajas: se refiere a la exclusión de un registro como parte activa del archivo de datos.
3) Consultas: se refiere al acceso y despliegue de los datos de un registro activo por medio de su
campo clave.
4) Cambios: se refiere al cambio en algún dato de los campos de un registro activo.
5) Reporte general: es el despliegue de los campos de todos los registros activos de un archivo.
6) Reportes específicos: es el despliegue de los campos de todos los registros que cumplan con una
condición específica y estén activos en un archivo.
458
PARTE I II . PROGRAMACIÓN
Instrucciones y funciones para el manejo de archivos de datos aleatorios
Instrucción OPEN: permite abrir un archivo de datos, ya sea para escribir o leer datos en él.
Instrucción FIELD #: asigna espacio en la memoria intermedia para los campos que componen
los registros.
Instrucción LSET: mueve un dato de memoria principal a memoria intermedia acomodando el
dato que se mueve justificado a la izquierda.
Instrucción RSET: mueve un dato de memoria principal a memoria intermedia acomodando el
dato que se mueve justificado a la derecha.
Instrucción PUT #: graba en memoria secundaria un registro con el contenido de la memoria
intermedia.
Instrucción GET #: pasa el registro especificado de memoria secundaria o memoria intermedia.
Instrucción CLOSE #: cierra un archivo de datos.
Función LOF: regresa el número de caracteres que tiene un archivo.
Funciones MKS$, MKD$, MKI$, MKL$: sirven para convertir datos de tipo numérico a
alfanumérico, ya sean reales de simple precisión, reales de doble precisión, enteros o enteros largos.
Funciones CVS, CVD, CVI, CVL: se usan para convertir datos alfanuméricos en numéricos, ya
sean reales de simple precisión, reales de doble precisión, enteros o enteros largos.
Instrucciones para dar presentación a un programa
Instrucción CLS: limpia la pantalla y sitúa el cursor en la esquina superior izquierda.
Instrucción LOCATE: sitúa el cursor en cualquier parte de la pantalla que se desee.
ÍNDICE ANALÍTICO
A
acumulador, 128, 205
algoritmo, 11, 13, 17-19
archivo, 217, 221, 393
de datos, 392, 394
secuencial, 395, 457
aleatorio, 395, 457
operaciones, 398, 457
alta, 398, 457
baja, 398, 457
cambio, 398, 457
consulta, 398, 457
reporte específico, 398, 457
reporte general, 398, 457
arreglo, 368, 457
B
bandera, 175, 205
BASIC, 17, 24, 210, 215
bloques, 15
terminales, 15
de entrada/salida, 15
de entrada, 15, 16
de salida, 16
de proceso, 16
de decisión, 16
condicionales, 16, 17, 54, 55
de conexión, 16, 17
anidados, 78
buffer, 395, 457
C
campo, 394, 457
ciclo, 98, 99, 205
con número determinado de iteraciones,
99,101,275
con número indeterminado de iteraciones,
102, 262
cinta, 7
codificación, 11, 17-19
componentes físicos, 4, 8
componentes lógicos, 4, 8
computadora, 4, 5, 6, 8, 10, 11, 13, 14, 19, 24
concatenación, 325
condición, 14, 17, 53, 54
condicional, 55
constante, 25, 26, 32, 212, 215
contador, 100, 128, 205
contenido de la variable, 25, 211
CPV, 6, 8
crear un programa, 217, 221
cuerpo del ciclo, 98, 99, 205
D
datos 4, 6, 18, 24, 32
definición del problema, 11, 12, 19
depuración, 11, 18, 19
desplegar datos, 13
diagrama de flujo, 11, 15, 17, 19, 55
disco duro, 7, 8
disco flexible, 7, 8
disco óptico, 7
diskette, 7
dispositivos
de almacenamiento permanente, 5, 6, 8
de entrada, 5, 6, 8
de entrada/salida, 5, 6, 8
de procesamiento, 5, 8
de salida, 5, 6, 8
periféricos, 6
documentación, 11, 18, 19
E
edición, 11, 17, 19
editor de textos, 17
ejecutar operaciones, 13, 14
460
ÍNDICE ANALÍTICO
entrada, 12, 15, 225
estructura cíclica, 98, 99, 205
estructura de datos, 368, 457
evaluar condiciones, 13, 14
expresión, 26, 27, 32, 212, 215
alfanumérica, 14
aritmética, 26-28
elementos de, 26, 212
lógica, 26, 28
numérica, 14
relacional, 26
F
fórmula, 3, 8
función, 312, 345, 349, 365
función predefinida, 314, 345
numéricas, 313, 345
ABS, 315, 345
ARCTAN, 314, 345
COS, 313, 345
FIX, 315, 345
INT, 316, 345
SIN, 313, 345
SQR, 315, 345
TAN, 314, 345
alfanuméricas, 323, 345
LEFT$, 323, 345
LEN, 324, 345
MID$, 324, 345
RIGHT$, 323, 345
SPACE$, 325, 345
función definida por el usuario, 339, 345
de una línea, 340
multilíneas, 340
funciones
CLS, 407, 458
CVD, 405, 458
CVI, 405, 458
CVL, 405, 458
CVS, 405, 458
I
identificador, 211
impresora, 6, 7, 8, 13
imprimir un programa, 220, 221
información, 4, 5, 6, 8, 11, 12
instrucción, 4, 17
cali, 350
chain, 350
CLOSE#, 404, 458
de interacción usuario-programa, 223, 236
de control de ejecución, 238
condicional, 238, 310
incondicional, 261, 310
DIM, 369, 457 END, 229
FIELD#, 401, 458
FOR...NEXT, 275-282, 310
GET#, 403, 458
GOSUB...RETURN, 349
GOTO, 261,310
IF...ELSE...ENDIF, 239, 240, 310
INPUT 225, 226, 236
LET 223, 224, 236
LOCATE, 407, 458
LOF función, 404, 458
LSET, 401, 458
MKD$ función, 405, 458
MKI$ función, 405, 458
MKL$ función, 405, 458
MK$ función, 405, 458
OPEN, 400, 458
OPTION BASE, 370, 457
PRINT, 226, 227, 236
PUT#, 403, 458
REM, 227, 228, 236
RSET, 402, 458
SUB...ENDSUB, 350
G
guardar un programa, 219, 221
L
lápiz óptico, 5, 8
lenguaje, 7, 8, 11, 17
bajo nivel, 7
alto nivel, 7
H
hardware, 4, 5, 7, 8
M
mantenimiento, 11, 18, 19
ÍNDICE ANALÍTICO
matriz, 381,457
memoria intermedia, 395, 457
memoria principal, 6, 8, 25
memoria secundaria, 6, 8
metodología, 11, 18, 24
modularización, 349, 365
módulo, 347, 365
monitor, 6
mouse, 5, 8
N
nombre de la variable, 25, 211
números, 13, 14
O
operación, 15
operaciones
aritméticas, 6, 14, 24, 27
lógicas, 6
operador, 26, 28, 32
aritmético, 26, 27, 32, 213
asociativo, 26, 27, 32, 213
lógico, 26, 28, 32, 213
relacional, 26, 28, 32, 213
P
palabras, 13, 14
palabras reservadas, 214, 215
pantalla, 6, 8, 13
problemas
repetitivos, 34, 98, 205
simples, 34, 103
compuestos, 34, 176, 205
múltiples, 34
secuenciales, 34, 205
selectivos, 34, 205
simples, 34, 53, 54, 205
compuestos, 34, 53, 72, 205
461
procedimiento, 350, 365
procesamiento de información, 4,5,8,10,19,24,
26,32
proceso, 5, 98, 205
programa, 10, 13, 17, 18, 351, 365
programación estructurada, 312
programador, 10, 11, 13, 18, 19
Q
Quick Basic, 210, 217
R
ratón, 5, 8
recuperar un programa, 219, 221
registro, 394, 457
S
salida, 12, 15, 226
sintaxis, 17
sistema computacional, 4, 8
sistema operativo, 7, 8
software, 4, 7, 8
de aplicación, 7, 8
del sistema, 7, 8
sort burbuja, 375
subprograma, 350, 365
subrutina, 349, 365
sujeto de acción, 10, 11, 19
T
teclado, 5, 8
V
variable, 13, 14, 25, 26, 32, 212, 215
Z
zonas de memoria, 13, 25, 26, 32, 211, 215
Descargar