View
1.035
Download
303
Category
Preview:
DESCRIPTION
Bores Rangel, Maria del Rosario.Estructura de la programacíon, diagramas de flujo, software de procesos internos y software de interfaces.
Citation preview
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
Impreso en México
9087654213
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 ............................................................................................................................ 3 1) Definición de computadora ........................................................................................ 4 2) Definición de sistema computacional ............................................................................ 4 3) Clasificación de los componentes de un sistema computacional ..................................... 4 4) Clasificación del hardware ........................................................................................... 5
A) Dispositivos de entrada ......................................................................................... 5 B) Dispositivos de salida ........................................................................................... 6 C) Dispositivos de procesamiento .............................................................................. 6 D) Dispositivos de almacenamiento permanente ......................................................... 6
5) Clasificación del software ............................................................................................ 7 A) Software de aplicación .......................................................................................... 7 B) Software del sistema .......................................................................................... 7
Resumen ............................................................................................................................. 8
Capítulo 2: Metodología para la solución de problemas ....................................................... 9
Objetivos ............................................................................................................................ 9 1) Definición del problema ............................................................................................... 11 2) Planeación de la solución ............................................................................................. 12 3) Algoritmo ..................................................................................................................... 13 4) Diagrama de flujo ......................................................................................................... 15 5) Codificación y edición del programa ............................................................................ 17 6) Pruebas y depuración .................................................................................................... 18 7) Documentación y mantenimiento .................................................................................. 18 Resumen ............................................................................................................................. 19
PARTE II: Lógica computacional ........................................................................................ 21
Capítulo 3: Conceptos básicos ............................................................................................ 23
Objetivos ............................................................................................................................ 23 1) Tipos de datos 24
A) Numéricos ............................................................................................................. 24
Vi CONTENIDO
B) Alfanuméricos .................................................................................................................... 25 2) Zonas de memoria ...................................................................................................................... 25
A) Constantes ........................................................................................................................... 26 B) Variables ............................................................................................................................. 26
3) Expresiones ................................................................................................................................. 26 A) Definición ........................................................................................................................... 26 B) Elementos de una expresión ............................................................................................. 26
4) Tipos de operadores ................................................................................................................... 26 A) Asociativos ...................................................................................................................... 27 B) Aritméticos ......................................................................................................................... 27 C) Relaciónales ........................................................................................................................ 28 D) Lógicos ................................................................................................................................ 28
Problema resuelto de operadores aritméticos ................................................................................. 29 Problemas propuestos de operadores aritméticos ........................................................................... 30 Problema resuelto de operadores relaciónales y lógicos ............................................................... 30 Problemas propuestos de operadores relaciónales y lógicos ......................................................... 31 Resumen ............................................................................................................................................. 32
Capítulo 4: Tipos de problemas ....................................................................................................... 33
Objetivos ............................................................................................................................................ 33 1) Problemas secuenciales ............................................................................................................. 34
Problemas resueltos ...................................................................................................... 34 Problemas propuestos ...................................................................................................... 51
2) Problemas selectivos .................................................................................................................. 53 2a) Problemas selectivos simples .......................................................................................... 54
Problemas resueltos ...................................................................................................... 54 Problemas propuestos ...................................................................................................... 69
2b) Problemas selectivos compuestos ................................................................................... 72 Problemas resueltos ...................................................................................................... 72 Problemas propuestos ...................................................................................................... 96
3) Problemas repetitivos ................................................................................................................. 98 Introducción ....................................................................................................................................... 98 1) Ciclos con un número determinado de iteraciones ................................................................. 99 2) Ciclos con un número indeterminado de iteraciones .............................................................. 102
Tipos de problemas repetitivos ................................................................................................. 103 3a) Problemas repetitivos simples ......................................................................................... 103
Problemas resueltos ...................................................................................................... 104 Problemas propuestos ...................................................................................................... 154
3a.2) Número indeterminado de iteraciones ......................................................................... 155 Problemas resueltos ........................................................................................................................... 155 Problemas propuestos ........................................................................................................................ 175 Problemas repetitivos compuestos ................................................................................................... 176 Problemas resueltos ........................................................................................................................... 176 Problemas propuestos ....................................................................................................................... 204 Resumen ............................................................................................................................................. 205
CONTENIDO Vii
PARTE III: Programación ................................................................................................... 207
Capítulo 5: Elementos del lenguaje .................................................................................. 209
Objetivos ............................................................................................................................ 209 Introducción ....................................................................................................................... 210 1) Tipos de datos .............................................................................................................. 210 2) Zonas de memoria ........................................................................................................ 211 3) Expresiones ............................................................. . . ................................................ 212 4) Tipos de operadores ..................................................................................................... 212 5) Palabras reservadas ...................................................................................................... 214 Resumen ............................................................................................................................. 215
Capítulo 6: Manejo de archivos ........................................................................................... 216
Objetivos ............................................................................................................................ 216 Procedimiento de entrada a Quick Basic ............................................................................. 217 Instrucciones de manejo de archivos ................................................................................... 217 a) Creando un programa ................................................................................................... 217 b) Recuperando un programa de disco ............................................................................... 219 c) Guardando un programa en disco .................................................................................. 219 d) Imprimiendo un programa ............................................................................................ 220 e) Ejecutando un programa ............................................................................................... 220 Resumen ............................................................................................................................. 221
Capítulo 7: Interacción usuario-programa ............................................................................ 222
Objetivos ............................................................................................................................ 222 a) Asignación ................................................................................................................... 223
Instrucción LET ........................................................................................................... 223 b) Entrada de datos ........................................................................................................... 225
Instrucción INPUT ....................................................................................................... 225 c) Salida de datos ........................................................................................................... 226
Instrucción PRINT ....................................................................................................... 226 Comentarios ........................................................................................................................ 227 Instrucción REM................................................................................................................. 227 Problemas resueltos ............................................................................................................ 228 Problemas propuestos .......................................................................................................... 235 Resumen ............................................................................................................................. 236
Capítulo 8: Control de ejecución ......................................................................................... 237
Objetivos ............................................................................................................................ 237 8a) Control de ejecución condicional 238
Instrucción IF ... THEN ... ELSE ............................................................................. 238 Problemas resueltos .................................................................................................... 241
Viii CONTENIDO
Problemas propuestos ............................................................................................................. 261 8b) Control de ejecución incondicional .................................................................................... 261
Instrucción GOTO ................................................................................................................... 261 8c) Estructuras repetitivas: combinación de las instrucciones IF ... THEN ... ELSE
y GOTO .................................................................................... ■■ ........................................... 262 Problemas resueltos ................................................................................................................ 262 Problemas propuestos ............................................................................................................. 274
8d) Estructuras repetitivas: Instrucción FOR ... NEXT .............................................................. 274 Problemas resueltos ................................................................................................................ 282 Problemas propuestos ............................................................................................................. 309
Resumen ............................................................................................................................................ 310
Capítulo 9: Funciones ...................................................................................................................... 311
Objetivos ............................................................................................................................................ 311 9a) Funciones predefinidas ............................................................................................................ 313
1) Funciones numéricas ....................................................................................................... 313 Funciones trigonométricas .............................................................................................. 313 Función SIN...................................................................................................................... 313 Función COS .................................................................................................................... 313 Función TAN .................................................................................................................... 314 Función ARCTAN ........................................................................................................... 314
Funciones aritméticas ............................................................................................................. 314 Función SQR .................................................................................................................... 314 Función ABS .................................................................................................................... 315 Función FIX...................................................................................................................... 315 Función INT .................................................................................................................. 316
Problemas resueltos .......................................................................................................................... 317 Problemas propuestos ....................................................................................................................... 322
2) Funciones alfanuméricas ................................................................................................. 323 Función LEFT$ ................................................................................................................ 323 Función RIGHT$ ............................................................................................................. 323 Función MID$ ............................................................................................................... 324 Función LEN .................................................................................................................... 324 Función SPACE$ ............................................................................................................. 325 Concatenación de expresiones alfanuméricas ............................................................... 325
Problemas resueltos .......................................................................................................................... 326 Problemas propuestos ....................................................................................................................... 339 9b) Funciones definidas por el usuario ........................................................................................ 339
1) Funciones de una sola línea ............................................................................................ 340 2) Funciones multilínea ....................................................................................................... 340
Problemas resueltos .......................................................................................................................... 341 Problemas propuestos ....................................................................................................................... 343 Resumen ............................................................................................................................................ 345
CONTENIDO iX
Capítulo 10: Procesos modulares ......................................................................................... 346
Objetivos ............................................................................................................................. 346 1) Función ...................................................................................................................... 349 2) Subrutina ....................................................................................................................... 349 3) Procedimiento ............................................................................................................... 350 4) Subprogramas ............................................................................................................... 350 5) Programas ..................................................................................................................... 351 Problemas resueltos ............................................................................................................. 351 Problemas propuestos .......................................................................................................... 365 Resumen .............................................................................................................................. 366
Capítulo 11: Estructuras de datos ......................................................................................... 367
Objetivos ............................................................................................................................. 367 1) Arreglos ........................................................................................................................ 368
Instrucción DIM ......................................................................................................... 369 Instrucción OPTION BASE .......................................................................................... 370 Problemas resueltos ................................................................................................... 371 Problemas propuestos ................................................................................................. 381
2) Matrices ........................................................................................................................ 381 Problemas resueltos ............................................................................................................. 382 Problemas propuestos .......................................................................................................... 391 3) Archivos de datos .......................................................................................................... 392
Organización de los archivos de datos ........................................................................... 395 1) Secuenciales ........................................................................................................... 395 2) Aleatorios o directos .............................................................................................. 395 Archivos de datos aleatorios .......................................................................................... 395 Proceso para accesar un archivo de datos aleatorio ........................................................ 395 Concepción del archivo de datos ................................................................................... 396 Operaciones con los archivos aleatorios ........................................................................ 397
1) Altas ............................................................................................................................. 398 2) Bajas ............................................................................................................................. 398 3) Consultas ................................................................................................................... 398 4) Cambios ........................................................................................................................ 399 5) Reporte general ............................................................................................................. 399 6) Reportes específicos ...................................................................................................... 399
Instrucciones y funciones para el manejo de archivos de datos aleatorios ........................ 400 Instrucción OPEN ...................................................................................................... 400 Instrucción FIELD# ................................................................................................... 401 Instrucción LSET .......................................................................................................... 401 Instrucción RSET .......................................................................................................... 402 Instrucción PUT# .......................................................................................................... 403 Instrucción GET# ......................................................................................................... 403 Instrucción CLOSE# ..................................................................................................... 404 Función LOF ................................................................................................................ 404
X CONTENIDO
Función MKS$ ............................................................................................................. 405 Función MKD$ ............................................................................................................. 405 Función MKI$ ........................................................................................................... 405 Función MKL$ ............................................................................................................. 406 Función CVS ................................................................................................................ 406 Función CVD ............................................................................................................... 406 Función CVI .............................................................................................................. 406 Función CVL ................................................................................................................ 406 Instrucciones para dar presentación a un programa ........................................................ 407 Instrucción CLS ............................................................................................................ 407 Instrucción LÓCATE .................................................................................................... 407
Problemas resueltos ............................................................................................................. 407 Problemas propuestos .......................................................................................................... 450 Resumen .............................................................................................................................. 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 computa-cional. 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 interco-nexiones.
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) DISPOSITIVOS DE ENTRADA B) DISPOSITIVOS DE SALIDA C) DISPOSITIVOS DE PROCESAMIENTO D) 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) Pedir el primer número y anotarlo en algún lugar, para evitar olvidarlo. 2) Pedir el segundo número y anotarlo. 3) Pedir el tercer número y anotarlo. 4) Efectuar la suma aritmética de estos tres números y anotar el resultado en algún lugar. 5) Dividir el resultado anterior entre 3 y anotarlo en algún lugar. 6) 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, electro-magné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; confor-man 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 contabili-dad, 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 computacio- nal
— 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, Com- putadora, 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 computa-cional.
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) 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
1) 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
1 4 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
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:
El bloque de salida de datos tiene la siguiente forma:
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 compu-tadora, 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.
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:
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.
18 PARTE 1. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS
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) 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
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 4000 nombre$ "William Shakespeare" direccion$ "Cuauhtémoc # 115,'Col. Narvarte" inscripción 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) 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 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:
1 5 - 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 Negación AND Conjunción OR 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 operado-res.
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:
4 x 3 - 4 + 1
Después se realiza la multiplicación:
12-4 + 1
A continuación se procede con la resta y queda:
8 + 1 Y
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. 4 + l * 5 ^ 2 - l 2. 9 / 3 + 4 ^ 2 - 5 * l + 9 / - 2 + 3 3. 5 / 2 + 3 - 4 * 5 / 2 4. (4 + 1) * 5^ 2- 1 5. 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. NOT ((M > N AND R > S ) OR (NOT (T < V AND S > M ))) 2. (3x2^2-4/2 * l)>(3*2^-4/2 * 1 ) AND (5 > 9/3) 3. (3>=3OR5<>5)ANDNOT(15/5+ 2O5) 4. NOT (NOT ((3 - (-3)) * 2 > (3 - (-3) * 2 ) OR 1^3 * 2 > 6)) 5. (3 > = 4 AND 5 > 3 AND 3 > 3) OR NOT (4 <= 4 OR 5 > 4 OR 6 >= 7)
3 2 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 propor-cionan 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 invariable-mente 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.
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.
36 PARTE II. LÓGICA COMPUTACIONAL
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. PEDIR lado1 2. PEDIR lado2 3. perímetro ← lado1 * 2 + lado2 * 2 4. área ←lado1 * lado2 5. DESPLEGAR perímetro 6. 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. PEDIR lado1, lado2 2. perímetro ←lado1* 2 +lado2 * 2 3. área ← lado1*lado2 4. DESPLEGAR perímetro, área
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 '
40 PARTE II. LÓGICA COMPUTACIONAL
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
4 2 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 a total de ventas c a comisión tr a total a recibir sb a sueldo base v1 a venta 1 v2 a venta 2 v3 a venta 3
1. PEDIR v1, v2, v2 2. tv ←v1 + v2 + v3 3. c←tv *0.10 4. tr ←sb + c 5. 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
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
tc a total de la compra d a descuento tp a total a pagar
1. PEDIR tc 2. d←tc * 0.15 3. t p← t c -d 4. DESPLEGAR tp
Paso 4. Diagrama de flujo (Fig. 4.8).
Figura 4.7
CAPÍTULO 4. TIPOS DE PROBLEMAS 45
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
46 PARTE I I . LÓGICA COMPUTACIONAL
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
CAPÍTULO 4. TIPOS DE PROBLEMAS 47
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 a calificación del parcial 1p2 a calificación del parcial2 p3 a calificación del parcial3 p a promedio de parcialesppa a porcentaje de parcialesef a calificación del examen pef a porcentaje de examen tf a calificación del trabajo ptf a porcentaje del trabajo cf a calificación final del curso
CAPITULO 4. TIPOS DE PROBLEMAS 49
1. PEDIR p1,p2,p3,ef,tf 2. p ← (pl + p2 + p3) / 3 3. ppar ← p * 0.55 4. pef ←ef * 0.30 5. ptf←tf*0.15 6. cf ←ppar + pef + ptf 7. 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
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:
50 PARTE II. LÓGICA COMPUTAC1ONAL
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:
n h a número de hombres que hay en el grupo nm a número de mujeres que hay en el grupo ph a porcentaje de hombres pm a porcentaje de mujeres ta a total de alumnos
1. PEDIR nh, nm 2. ta ← nh + nm 3. ph ←nh * 100 / ta 4. pm ← nm * 100 / ta 5. 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))
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. Calcular el nuevo salario de un obrero si obtuvo un incremento del 25% sobre su salario anterior.
5. En un hospital existen tres áreas: Ginecobstetricia, Pediatría y Traumatología. El presupuesto anual del hospital se reparte conforme a la siguiente tabla:
52 PARTE I I . LÓGICA COMPUTAC1ONAL
CAPÍTULO 4. TIPOS DE PROBLEMAS 53
Área Porcentaje del presupuesto
Ginecobstetricia 40%Traumatología 30%Pediatría 30%
Obtener la cantidad de dinero que recibirá cada área, para cualquier monto presupuestal. 6. 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%. 7. 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.
8. 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.
9. 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 II. 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 repre-sentará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 a calificación 1 c2 a calificación2 c3 a calificación3 p a 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.
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"
Figura 4.12
56 PARTE II. LÓGICA COMPUTACIONAL
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 x descuento
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
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.
58 PARTE II. LÓGICA COMPUTACIONAL
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.
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)
60 PARTE II. LÓGICA COMPUTAC1ONAL
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 ← h e * 6 + 4 0 * 4 DE OTRA MANERA
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
62 PARTE 11. LÓGICA COMPUTACIONAL
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 a porcentaje de interés ci a cantidad en inversión i a intereses cf a cantidad final en la cuenta
1. PEDIR p,ci
2. i ← ci * p
64 PARTE II. LÓGICA COMPUTACIONAL
3. DESPLEGAR i 4. SI i > 7000 ENTONCES
cf ← ci + i DESPLEGAR cf
Paso 4. Diagrama de flujo (Fig. 4.16).
Figura 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:
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
CAPÍTULO 4. TIPOS DE PROBLEMAS 67
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 a número de piezas cu a costo de cada pieza mt a monto total ci a cantidad a invertir de los fondos de la empresa cpb a cantidad a pedir al banco cc a cantidad a pagar a crédito i a 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. 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.
2. En un supermercado se hace una promoción, mediante la cual el cliente obtiene un descuento
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.
70 PARTE II. LÓGICA COMPUTACIONAL
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 Tipo de árbol 70% pino 20% oyamel 10% 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 Tipo de árbol 50% pino 30% oyamel 20% 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 contami-nació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:
7 4 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 a horas trabajadas ph a pago por hora normal he a horas extras het a horas extras que exceden de ocho phe a pago por horas extras pt a 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 75
pe ← ph * 2 * he
pt ← ph * 40 + pe DE OTRA FORMA
Figura4.19
pe ← ph • 2 « 8 + ph • 3 * het
7 6 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 77
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 a horas trabajadas ph a pago por hora n a horas normales e a horas extras d a horas extras dobles t a horas extras triples P a pago
1. PEDIR h, Ph
2. SI h > 40 > ENTONCES e ← h - 40 S I e 8 ENTONCES
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
Figura 4.20
A continuación, como la condición e > 8 no se cumple ejecuta:
n←40 d←5
CAPÍTULO 4. 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 UTILIDAD
menos de 1 año 5% del salario 1 año o más y menos de 2 años 7% del salario 2 años o más y menos de 5 años 10% del salario 5 años o más y menos de 10 años 15% del salario
10 años o más 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 UTILIDAD
menos de 1 año 5% del salario 1 año o más y menos de 2 años 7% del salario 2 años o más y menos de 5 años 10% del salario 5 años o más y menos de 10 años 15% del salario
10 años o más 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 a salario t a tiempo que tiene trabajando u 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.15 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. TIPOS DE PROBLEMAS 83
Figura 4.21
t ←0.5 s ← 1000
La primera condición se cumple ya que 0.5 es menor que 1 y ejecuta:
84 PARTE I I . 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 DESCUENTO
Blanca 0% Verde 10% Amarilla 25% Azul 50% Roja 100%
SOLUCIÓN Aplicar la condicional:
SI color de la bolita = "BLANCA" ENTONCES cantidad a descontar ← 0 DE OTRA FORMA
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 a monto de la compra b$ a color de la bolita d a cantidad por descontar cp a 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:
Figura 4.22
m←500 b$ ← "BLANCA"
Al ser verdadera la primera condicional ejecuta:
CAPÍTULO 4. 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 a ventas del departamento 1 v2 a ventas del departamento 2 v3 a ventas del departamento 3 s a salario que reciben los vendedores tv a total de ventas de la empresa p a porcentaje de ventas cd1 a cantidad por recibir por los vendedores del departamento 1 cd2 a cantidad por recibir por los vendedores del departamento 2 cd3 a cantidad por recibir por los vendedores del departamento 3
1. PEDIR vi, v2, v3, s 2. tv ← vi + v2 + v3 3. p ← tv * 0.33 4. 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
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.
92 PARTE II. LÓGICA C0MPUTAC10NAL
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:
ed←65
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. 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.
2. 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.
3. 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 % DESCUENTO
0 -2 2.01 -5 5.01 - 10 10.01 en adelante
0% 10% 15% 20%
Determinar cuánto pagará una persona que compre manzanas en esa frutería. 6. 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.
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.
7. 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 NIVEL DE HEMOGLOBINA
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
13 - 26 g%10 - 18 g% 11 - 15 g% 11.5 - 15 g% 12.6 . 15.5 g% 13 - 15.5 g% 12 - 16 g% 14 - 18 g%
98 PARTE I I . LÓGICA COMPUTACIONAL
8. 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. TIPOS DE PROBLEMAS 99
1. PEDIR cant 2. PEDIR cant 3. PEDIR cant 4. PEDIR cant 5. 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 3. FIN
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.
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 3. X
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.
CAPÍTULO 4. TIPOS DE PROBLEMAS 101
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.
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) Problemas repetitivos simples b) 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.
CAPÍTULO 4. TIPOS DE PROBLEMAS 103
104 PARTE I I . 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 3. X
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 a contador del numero de ciclosel a calificación parcial 1 c2 a calificación parcial 2 c3 a calificación parcial 3 P a 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
El proceso ALUMNO constará de las siguientes acciones: 1. PEDIR cl,c2,c3 2. p ← (cl + c2 + c3 ) / 3 3. DESPLEGAR p 4. 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 funcionali-dad.
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 a calificación 1 c2 a calificación 2 c3 a calificación 3 p a promedio
1. PEDIR cl,c2,c3 2. p ← (c1 + c2 + c3) / 3 3. DESPLEGAR p 4. PEDIR c1,c2,c3 5. p ← (c1 + c2 + c3) / 3 6. DESPLEGAR p 7. PEDIR cl,c2,c3 8. p ← (c1 + c2 + c3) / 3 9. DESPLEGAR p 10. PEDIR cl,c2,c3 11. p←(cl + c2 + c3)/3 12. DESPLEGAR p 13. PEDIR cl,c2,c3 14. 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
Figura 4.31
CAPÍTULO 4. 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 funcionali-dad.
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. i ← 1 2. 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 a variable contador de vendedoressb a sueldo base vi a ventas 1 v a ventas 2 v a ventas 3 tv a total de ventas c 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. PEDIR sb, v1, v2,2. tv ← v1 + v2 + v3 3. c ← tv * 0.1 4. tr ← sb + c 5. 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
Figura 4.32
Figura 4.33
CAPÍTULO 4. TIPOS DE PROBLEMAS 113
1 1 4 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 funcionali-dad.
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 obrerosi a variable contador de obreros ht a horas trabajadas he a horas extras s a 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
1 1 6 PARTE II. LÓGICA COMPUTACIONAL
Proceso OBRERO:
1. PEDIR ht 2. SI ht > 40 ENTONCES
he← 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
Figura 4.34
Figura 4.35
CAPÍTULO 4. TIPOS DE PROBLEMAS 117
1 1 8 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 a contador del número de ciclos s$ a sexo de la persona h a variable contador de hombres m a variable contador de mujeres n a número de ciclos
1. PEDIR n 2. h←0 3. m←0 4. i← 1 5. 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
Figura 4.36
Figura 4.37
CAPÍTULO 4. 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 COLOR
1 o2 amarilla3o4 rosa 5o6 roja 7o8 verde 9oO 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 ← 12 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 calcoma-ní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 PARTE II. LÓGICA COMPUTACIONAL
n a número de autos i a contador del número de iteraciones am a variable contador de autos con calcomanía amarilla rs a variable contador de autos con calcomanía rosa rj a variable contador de autos con calcomanía roja ve a variable contador de autos con calcomanía verde az a variable contador de autos con calcomanía azul ud a último dígito de la placa
1 PEDIR n 2 am ← 0 3 r s←0 4 rj ←0 5 ve ← 0 6 az←0 7 i ← 1 8 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. ud←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. PEDIR n 2. s←0 3. i← 1 4. SI i > n ENTONCES
IR al paso 5 DE OTRA FORMA ALUMNO i← i + 1 IR al paso 4
5. p←s/n 6. DESPLEGAR p
Proceso ALUMNO:
1. Pediré 2. s ← s + c 3. 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
I
Figura 4.40
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 funcionali- dad.
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).
Figura 4.42
Figura 4.43
CAPÍTULO 4. 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 determi-nado 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 funcionali-dad.
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 c ← c x 1.02 segunda iteración 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. PEDIR c 2. c←c*1.02^12 3. 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 funcionali-dad.
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,
CAPÍTULO 4. TIPOS DE PROBLEMAS 137
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 compleji-dad pues incluye, además de los dos contadores, dos acumuladores.
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
n a número de alumnosi a contador del número de e a edad del alumno s$ a sexo del alumno seh a suma de edades de hombres sem a suma de edades de mujeres nh a número de hombres nm a número de mujeres peh a promedio de edades de hombrespem a promedio de edades de mujeres Pg a promedio del grupo
1. Pedir n
2. nh ← 0 3. nm ← 0 4. seh ← 0 5. sem ← 0 6. i ← 1 7. SI i > n ENTONCES IR al paso 8 DE OTRA FORMA ALUMNO i ← i + 1 IR al paso 7 8. peh ← seh / nh 9. pem ← sem / nm 10. pg ← (seh + sem) / n
11. Desplegar peh, pem, pg Proceso ALUMNO: 1. Pedir e, s$ 2. 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
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
CAPÍTULO 4. 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 edad
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
Niños 0 - 12Jóvenes 13 -29 Adultos 30 -59 Viejos 60 - adelante
Figura 4.48
CAPÍTULO 4. 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 0-12 Jóvenes 13-29 Adultos 30-59 Viejos 60 - adelante
Paso 3. Algoritmo:
De ahora en adelante llamaremos:
i a contador del número de personas
e a edad de cada persona P a peso de cada persona nn a número de niños nj a número de jóvenes na a número de adultos nv a número de viejos spn a suma de pesos de niñosspj a suma de pesos de jóvenes spa a suma de pesos de adultos spv a suma de pesos de viejos ppn a promedio de pesos de niños PPJ a promedio de pesos de jóvenes ppa a promedio de pesos de adultos ppv a promedio de pesos de viejos
1. nn ←0 2. nj ← 0 3. na ← 0 4. nv ← 0 5. spn ← 0 6. Spj ← 0
CAPÍTULO 4. TIPOS DE PROBLEMAS 145
7. spa ← 0 8. spv ← 0 9. i← 1 10. SI i > 100 ENTONCES
IR al paso 11 DE OTRA FORMA PERSONA i←i + 1 IR al paso 10
11. ppn ← spn / nn 12. ppj←spj/nj 13. ppa ← spa / na 14. ppv ← spv / nv 15. DESPLEGAR ppn, ppj, ppa, ppv
Proceso PERSONA:
1. PEDIR e, p 2. Si e < = 12 ENTONCES
nn ←nn + 1 spn ← spn + p DE OTRA FORMA
Si e < = 29 ENTONCES n j ← n j + 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
3. 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
Figura 4.51
CAPÍTULO 4. 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 número de ciclos i a contador del número de ciclos num a número r a 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é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.
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.
CAPÍTULO 4. TIPOS DE PROBLEMAS 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 número de ciclos i a contador del número de ciclos num a número r a 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:
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.
2) 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.
3) 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.
4) 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.
5) 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:
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 1.2 x promedio de calidad mayor que 8 y menor que 15 1.00 x promedio de calidad menor o igual que 8 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
masa =
calidad =
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. CLIENTE 2. PEDIR mas$ 3. SI mas$ = "NO" ENTONCES
IR al paso 4 DE OTRA FORMA
IR al paso 1 4. 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. CLIENTE 2. PEDIR mas$ 3. SI mas$ = "NO" ENTONCES
IR al paso 4 DE OTRA FORMA
IR al paso 1
Proceso CLIENTE:
1. Pedir color$, tsd 2. SI color$ = "ROJA" ENTONCES
tcd ← tsd * 0.6 DE OTRA FORMA
SI color$ = "AMARILLA" ENTONCES tcd ← tsd * 0.75
DE OTRA FORMA tcd ← tsd
3. 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 a precio de cada artículo diferente n a número de artículos sb a subtotal por artículo distinto t a total de la compra
1. t←0 2. ARTICULO 3. PEDIR mas$ 4. 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.
Figura 4.57
Figura 4.58
CAPÍTULO 4. 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:
Edad Descuentocategoría 1 5-14 35%
categoría 2 15-19 25% categoría 3 20-45 10%categoría 4 46-65 25% categoría 5 66 - adelante 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:
Edad Descuentocategoría 1 5 -14 35%categoría 2 15-19 25% categoría 3 20-45 10% categoría 4 46-65 25% categoría 5 66 - adelante 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. TIPOS DE PROBLEMAS 163
p a precio del boleto e a edad el a total de dinero descontado en la categoría 1 c2 a total de dinero descontado en la categoría 2 c3 a total de dinero descontado en la categoría 3 c4 a total de dinero descontado en la categoría 4 c5 a total de dinero descontado en la categoría 5 c a cantidad a descontar por cliente
1. PEDIR p 2. c1← 0 3. c2 ← 0 4. c3 ← 0 5. c4 ← 0 6. c5 ← 0 7. CLIENTE 8. PEDIR mas$ 9. 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. Pedir e 2. 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"
3. FINP
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 funcionali-dad.
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. PEDIR e 2. 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. PEDIR p 2. c1 ← 0 3. c2 ← 0 4. c3 ← 0 5. c4 ← 0 6. c5 ← 0 7. CLIENTE 8. PEDIR mas$
9. SI mas$ = "NO" ENTONCES IR al paso 10
DE OTRA FORMA IR al paso 7
Figura 4.59
CAPÍTULO 4. 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 funcionali-dad.
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
Figura 4.62
CAPÍTULO 4. TIPOS DE PROBLEMAS 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 posteriormen-te 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 Fumar No fumar
1 10 16 20 2 18 20 24
Paso 3. Algoritmo: De ahora en adelante llamaremos:
t a tipo de camión c$ a categoría-del asiento ald a asientos de lujo disponibles afd a asientos de fumar disponibles anfd a asientos de no fumar disponibles nalo a número de asientos de lujo ocupados nafo a número de asientos de fumar ocupados nanfo a número de asientos de no fumar ocupados llenol$ a llenoseccionlujo$ llenof$ a llenoseccionfumar$ llenonf$ a llenoseccionnofumar$
1. PEDIR t 2. SI t = 1 ENTONCES
ald ←10 afd ← 16 anfd ← 20
DE OTRA FORMA ald← 18 afd ← 20 anfd ←24
3. nalo ←0 4. nafo ← 0 5. nanfo ← 0
172 PARTE II. LÓGICA COMPUTACIONAL
6. llenol$ ←"NO" 7. llenof$ ←"NO" 8. llenonf$ ← "NO" 9. CLIENTE 10. 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"
Proceso CLIENTE:
1. PEDIR c$ 2. 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 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"
3. 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 estruc-tura selectiva simple seguida de un ciclo con un número indeterminado de iteraciones, el cual tiene
Figura 4.63
CAPÍTULO 4. 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 funcionali-dad.
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) 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.
2) Modificar el problema resuelto 4 para que imprima el total de dinero recaudado por el camión. 3) 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.
4) 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.
5) 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 Nivel de hemoglobina
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
1 - 26 g%10
- 18 g%11
- 15 g11
.5 - 15 g1 .6 - 15.5 g%
176 PARTE II. LÓGICA COMPUTACIONAL
Edad Nivel de hemoglobina mayor de 10 y menor o igual que 15 años 13 - 15.5 g% mujeres mayores de 15 años 12 - 16 g% hombres mayores de 15 años 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 determi-nado 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. total del cajero = 0 2. CLIENTE 3. total del cajero = total del cajero + total del cliente 4. PEDIR mas$ 5. SI mas$ = "NO" ENTONCES
IR al paso 6 DE OTRA FORMA
IR al paso 2 6. 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. total del cliente = 0 2. ARTICULO 3. total del cliente = total del cliente + total del artículo 4. PEDIR masl$ 5. SI masl$ = "NO" ENTONCES
IR al paso 6 DE OTRA FORMA
IR al paso 2 6. 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. PEDIR precio, cantidad 2. 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 a precio de cada artículo c a cantidad de cada artículo tcaj a total del cajero tcl a total del cliente ta a total del artículo mas$ a Variable que determina el fin del ciclo del cajero. masl$ a Variable que determina el fin del ciclo del cliente. C a El proceso CLIENTE A a El proceso ARTICULO
1. tcaj←0 2. C 3. tcaj ← tcaj + tcl 4. PEDIR mas$ 5. SI mas$ = "NO" ENTONCES
IR al paso 6 DE OTRA FORMA
IR al paso 2 6. DESPLEGAR tcaj
Proceso C:
1. tcl←0 2. A 3. tcl ← tcl + ta 4. PEDIR masl$ 5. 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.
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"
CAPÍTULO 4. TIPOS DE PROBLEMAS 179
180 PARTE I I . LÓGICA COMPUTACIONAL
Figura 4.66
Figura 4-67
CAPÍTULO 4. TIPOS DE PROBLEMAS 181 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"
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. contador = 1 2. SI contador >5 ENTONCES
IR al paso 3 DE OTRA FORMA
MIEMBRO contador = contador + 1 IR al paso 2
3. 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. PEDIR promedio de peso anterior 2. suma de pesos = 0 3. contador de básculas = 1 4. 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
5. promedio actual = suma de pesos/10 6. diferencia de pesos = promedio actual - promedio de peso anterior 7. 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. PEDIR peso 2. 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 contador de miembros M a proceso MIEMBRO pant a promedio de peso anterior sp a suma de pesos cb a contador de básculas pa a promedio de peso actual dif a diferencia de pesos B a proceso BASCULA pe a peso por báscula
184 PARTE II. LÓGICA COMPUTACIONAL
1. c← 12. 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 + pe3. 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
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
CAPÍTULO 4. 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
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
CAPÍTULO 4. TIPOS DE PROBLEMAS 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 cb←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 cb←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. hora = 0 2. MINUTOS 3. hora = hora + 1 4. 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 minuto = 02 SEGUNDOS 3 minuto = minuto + 1 4 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. segundo = 0 2. DISPLAY 3. segundo = segundo + 1 4. 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 a contador de horasm a contador de minutoss a contador de M a proceso MINUTOSS a proceso SEGUNDOSD a proceso DISPLAY
1. h←0
2. M 3. h← h +1 4. 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. D 3. s←s + 1 4. SI s > 59 ENTONCES
IR al paso 5 DE OTRA FORMA
IR al paso 2 5. FINP
Proceso D:
1. DESPLEGAR h, m, s 2. 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 I I . LÓGICA COMPUTACIONAL
Figura 4.71
Figura 4.72
CAPÍTULO 4. TIPOS DE PROBLEMAS 193
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 .
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←2 3 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. PEDIR número de grupos 2. suma de promedios de grupos = 0 3. contador de grupos = 1 4. 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. PEDIR número de alumnos 2. suma de grupo = 0 3. contador de alumnos = 1 4. 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. PEDIR número de materias 2. suma de calificaciones del alumno = 0 3. contador de materias = 1 4. 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 a número de grupos stg a suma de promedios de grupos ptg a promedio de todos los grupos cg a contador de grupos G a proceso por GRUPO na a número de alumnos por grupo sg a suma de grupo ca a contador de alumnos A a proceso por ALUMNO pg a promedio del grupo nm a número de materias
CAPÍTULO 4. TIPOS DE PROBLEMAS 197
cm a contador de materias sa a suma de calificaciones del alumno pa a promedio del alumno el a calificación 1 de alguna materia de algún alumno de algún grupo. c2 a calificación 2 de alguna materia de algún alumno de algún grupo. c3 a calificación 3 de alguna materia de algún alumno de algún grupo. pm a promedio de materia
1. PEDIR g 2. stg ←0 3. cg ← 1 4. SI cg > g ENTONCES
IR al paso 5 DE OTRA FORMA G
cg ← cg + 1 IR al paso 4
5. ptg ← stg / g 6. DESPLEGAR ptg
Proceso G: 1. PEDIR na 2. sg ← 0 3. ca ← 1 4. SI ca > na ENTONCES
IR al paso 5 DE OTRA FORMA A
ca ←ca + 1 IR al paso 4
5. pg←sg/na 6. DESPLEGAR pg 7. stg ← stg + pg 8. FINP
Proceso A: 1. PEDIR nm 2. sa ← 0 3. cm ←1 4. SI cm > nm ENTONCES
IR al paso 5 DE OTRA FORMA M
cm ←cm 4- 1 IR al paso 4
5. pa ←sa / nm
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. c 1←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. c l←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
Figura 4.74
CAPÍTULO 4. 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 201
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
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 203
Ejecuta el ciclo M para la segunda materia del primer alumno del segundo grupo. c l←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 c 3←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.
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 condi-
ció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 CONTENIDO
salario 4000 nombre$ "William Shakespeare" dirección$ "Cuauhtémoc # 115, Col. Narvarte" inscripción 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 operando2
OPERADOR 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 encuen-tran 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 x, / 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.
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
= ' 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 nega-ció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 OPERACIÓN
NOT Negación AND Conjunción OR 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
Figura 6.3
Abrir
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.
CAPÍTULO 6. MANEJO DE ARCHIVOS 219
Figura 6.5
220 PARTE III. PROGRAMACIÓN
d)
e)
Figura 6.6
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 proporcio-narle 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
2 2 4 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 es un texto asociado a los datos que se van a introducir, variable es el nombre de la variable en donde se almacenará el dato intro-
ducido. 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 expresio-nes 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. área ←3.1416 * 5^2 2. DESPLEGAR área
Paso 4. Diagrama de flujo (véase Fig. 7.1):
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.
La edición de este programa consistiría en seguir los siguientes pasos: 1) Estando en el sistema operativo teclear Qbasic para entrar a Quick Basic. 2) Seleccionar la opción ESC de la pantalla de bienvenida para ir a la barra de menúes. 3) Seleccionar la opción Nuevo del menú Archivo. 4) 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 pro-blemas.
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
CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA 229
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
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):
CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA 233
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):
234 PARTE III. PROGRAMACIÓN
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 El alumno definirá las estructuras de ejecución condicional. 8.2 El alumno definirá las estructuras de ejecución incondicional. 8.3 El alumno definirá las estructuras repetitivas. 8.4 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 proble-mas 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
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).
CAPÍTULO 8. CONTROL DE EJECUCIÓN 239
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.
240 PARTE III. PROGRAMACIÓN
Figura 8.2
CAPÍTULO 8. CONTROL DE EJECUCIÓN 241
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:
nombre$ = "ARTURO
AND
"El Sr. Arturo tiene 20% de descuento'
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?
242 PARTE III. PROGRAMACIÓ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
CAPÍTULO 8. CONTROL DE EJECUCIÓN 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
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.
CAPÍTULO 8. CONTROL DE EJECUCIÓN 245
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.OSXt END IF PRINT "Calorías gastadas";cg END
Paso 6. Pruebas y depuración:
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
Figura 8.9
248 PARTE III. PROGRAMACIÓN
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
Figura 8.11
REM Salario de un trabajador con horas normales, dobles y triples INPUT "Horas trabajadas";ht INPUT "Pago por hora normal";ph
pe ← ph * 2 * 8 + ph * 3 * het
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 UTILIDAD
menos de 1 año 5% del salario 1 año o más y menos de 2 años 7% del salario 2 años o más y menos de 5 años 10% del salario
CAPÍTULO 8. CONTROL DE EJECUCIÓN 253
TIEMPO
5 años o más y menos de 10 años 10 años o más
UTILIDAD
15% del salario 20% del salario
Figura 8.12
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 . 1ELSE
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
cd3=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
Venta del departamento 2? 38 000 Venta del departamento 3? 30 000 Salario? 1500
Figura 8.14
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
Prueba 2: Edad? 55 Antigüedad? 20
Figura 8.15
"La jubilación espor antigüedad
adulta"
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. 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.
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 descuentocategoría 1 5-14 35% categoría 2 15-19 25%categoría 3 20-45 10%categoría 4 46-65 25%categoría 5 66 - adelante 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 Lujo Fumar No fumar1 10 16 20 2 18 20 24
Paso 4. Diagrama de flujo (véanse Figs. 8.22 y 8.23).
Figura 8.22
CAPÍTULO 8. CONTROL DE EJECUCIÓN 271
CAPÍTULO 8. CONTROL DE EJECUCIÓN 273
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"
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:
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:
2 7 6 PARTE III. PROGRAMACIÓ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
CAPÍTULO 8. CONTROL DE EJECUCIÓN 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. DESPLEGAR "Comienza el ciclo" 2. i← 1 3. SI i>5 ENTONCES
IR al paso 4 DE OTRA FORMA DESPLEGAR "HOLA"
i← i + 1 IR al paso 3
4. 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. i← l 2. SI i> 10 ENTONCES
IR al paso 3 DE OTRA FORMA DESPLEGAR i i← i + 1 IR al paso 2
3. 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
2 3 4 5 6 7 8 9 10
3. Algoritmo:
1. i←3 2. SI i > 5 ENTONCES
IR al paso 3 DE OTRA FORMA
DESPLEGAR "Iteración” i ← i + s
Figura 8.26
CAPÍTULO 8. CONTROL DE EJECUCIÓN 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. i←1 2. 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: 135
CAPÍTULO 8. CONTROL DE EJECUCIÓN 281
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
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 = [ c 1 + c 2 + c 3 ] / 3 PRINT "El promedio es:";p
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
Figura 8.27 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
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
Figura 8.30
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
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
CAPÍTULO 8. CONTROL DE EJECUCIÓN 289
290 PARTE III. PROGRAMACIÓN
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:
Figura 8.33
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
CAPÍTULO 8. CONTROL DE EJECUCIÓN 291
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 amarilla3o4 rosa 5o6 roja 7o8 verde9oO 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 293
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
294 PARTE III. PROGRAMACIÓN Figura 8.36
CAPÍTULO 8. CONTROL DE EJECUCIÓN 295
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
296 PARTE III . PROGRAMACIÓN
Paso 6. Pruebas y depuración:
Prueba:
Figura 8.37
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 funcionali-dad.
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
CAPÍTULO 8. CONTROL DE EJECUCIÓN 297
298 PARTE III. PROGRAMACIÓN
NEXT i PRINT "Cantidad final";c END
Figura 8.39
CAPÍTULO 8. CONTROL DE EJECUCIÓN 299
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
300 PARTE III. PROGRAMACIÓN
Figura 8.40
CAPÍTULO 8. CONTROL DE EJECUCIÓN 301
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
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 encon-trando 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 Edad
Niños 0-12Jóvenes 13-29Adultos 30-59Viejos 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
Figura 8.42
CAPÍTULO 8. CONTROL DE EJECUCIÓN 303
304 PARTE III. PROGRAMACIÓN Figura 8.43
CAPÍTULO 8. CONTROL DE EJECUCIÓN 305
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 F0R i=2T0 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:
306 PARTE III. PROGRAMACIÓN
Prueba: Cuántos números? 5
Número? 4 Número? 17
Figura 8.44
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
CAPÍTULO 8. CONTROL DE EJECUCIÓN 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 depen-diendo 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 instruccio- nes 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 predefi-
nidas 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, es el nombre asignado a la función Parámetro, 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: C O S ( 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. PEDIR t1, t2, t3, t4, ex 2. promt ← (t1 + t2 + t3 + t4 ) / 4 3. pt ←promt * 0.15 4. pex ← ex * 0.85 5. tot ← pt + pex 6. cal ← INT (tot) 7. 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. PEDIR n 2. primo$ ← "SI" 3. i←2 4. 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. res ←n / i - FIX(n / i) 2. 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
NEXT i IF primo$ = "SI" THEN
PRINT "Sí es primo"
Figura 9.2
CAPÍTULO 9. FUNCIONES 321
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) Pedir n números con decimales e imprimir cada uno de ellos eliminando la parte decimal. 2) Pedir n números, convertir cada uno a positivo e imprimir su raíz cuadrada, 3) Dados dos números, obtener el cociente y el residuo de dividir el primero entre el segundo. 4) 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)
322 PARTE 111. PROGRAMACIÓN
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ías-
despliega: 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
3 2 6 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. PEDIR frase 2. contador de espacios = 0 3. contador de letras = 1 4. Obtener longitud de la frase 5. 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$ a frase ce a contador de espacios cl a contador de letras 1 a longitud de la frase c$ a un carácter de la np a número de palabras A a proceso ANALIZA
1. PEDIR f$
2. c ←0 3. cl ← 1 4. I ←LEN(f$)
328 PARTE III. PROGRAMACIÓN
5. SI cl > 1 ENTONCES IR al paso 6 DE OTRA FORMA A
cl ← cl + 1 IR al paso 5
6. np ← ce + 1 7. 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.
Figura 9.4
CAPÍTULO 9. FUNCIONES 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. Tomar una letra 2. 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$ a nombre de la persona pa$ a primer apellido sa$ a segundo apellido fn$ a fecha de nacimiento inom$ a inicial del nombre ipa$ a inicial del primer apellido isa$ a inicial del segundo apellido cl a contador de letras
CAPÍTULO 9. FUNCIONES 333
c$ a carácter tomado 1 a longitud del primer apellido vpa$ a primera vocal del primer apellido rfc$ a registro federal de causantes P a proceso de buscar la vocal
1. PEDIR nom$,pa$,sa$,fn$ 2. inom$←LEFT$(nom$,l) 3. ¡pa$ ←LEFT$(pa$, 1) 4. isa$ ← LEFT$(sa$, 1) 5. 1 ← LEN(pa$) 6. cl ← 2 7. 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
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.
CAPÍTULO 9. FUNCIONES 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$ a nombrecompleto in$ a iniciales 1 a longitud del nombre completo c a contador
1. PEDIR nc$ 2. 1 ←LEN(nc$) 3. in$←LEFTS(nc$,l) 4. c←2 5. SI c> l-1 ENTONCES
IR al paso 6 DE OTRA FORMA P
c ← c + 1 IR al paso 5
6. DESPLEGAR in$
P: 1. c$ ←MID$(nc$,c, 1) 2. 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
Figura 9.7
CAPÍTULO 9. FUNCIONES 337
338 PARTE III. PROGRAMACIÓN
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.
in$ ← in$ + MID$(nc$,c+ 1 , 1 )
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. Dada una frase contar el número de veces que se repite algún carácter. 2. Dada una frase escribirla al revés. 3. Dada una frase obtener cuántas vocales y cuántas consonantes tiene. 4. Dado un texto escribirlo en escalera de la siguiente manera:
t te tex text texto
5. Dado un texto sustituir todas las letras a por *. 6. 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. 7. Decir si una palabra dada es un palíndromo o no. 8. 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 instruc-ciones.
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 341
donde: nombre 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.
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.
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 I I I . 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 c a contador n a número M a proceso que se repite como parte de FACT a función que obtiene el factorial
1. PEDIR n 2. DESPLEGAR FACT(n) 3. FIN
FACT: 1. 2.
f← 1 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. f ← f * c 2. 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 di-mensiones.
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 alfanu- mé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ís-
ticas 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 compues-tos.
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 t=0 2. CLIENTE 3. PEDIR mas$ 4. 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) PEDIR precio 1 2) PEDIR precio2 3) PEDIR precio3 4) PEDIR precio4 5) PEDIR precio5 6) precio = (precio 1 + precio2 + precio3 + precio4 + precio5) / 5
Proceso modular SUBASTA:
1) precio-total = superficie * precio 2) precio-final = precio-total * 0.9 3) precio-final = precio-final + 500 4) PEDIR mas$ 5) 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) Función 2) Subrutina 3) Procedimiento 4) Subprograma 5) 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 instruc-ció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
GOTO A1 ENDIF B:
PRINT 'Total del cliente:"; tcl PRINT RETURN
REM Subrutina del artículo
Figura 10.1
Figura 10.2
CAPÍTULO 10. PROCESOS MODULARES 353
3 5 4 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"
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.
CAPÍTULO 10. PROCESOS MODULARES 355
356 PARTE III. PROGRAMACIÓN
Figura 10.4
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:
CAPÍTULO 10. PROCESOS MODULARES 357
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.
358 PARTE 111. PROGRAMACIÓN
Figura 10.7
Figura 10.8
CAPÍTULO 10. PROCESOS MODULARES 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
Figura 10.9
CAPÍTULO 10. PROCESOS MODULARES 361
362 PARTE III. PROGRAMACIÓN
Figura 10.10
Figura 10.11
CAPÍTULO 10. PROCESOS MODULARES 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 I I 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 El alumno definirá qué es una estructura de datos. 11.2 El alumno explicará los tipos de estructura de datos, sus características y su manejo:
a) Arreglos b) Matrices c) Archivos
—Secuenciales —Aleatorios
11.3 El alumno utilizará la metodología para solucionar problemas empleando arreglos. 11.4 El alumno utilizará la metodología para solucionar problemas empleando matrices. 11.5 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 compa-raremos 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 a contador de iteraciones n a número de datos a a arreglo de números menor a número menor
1. PEDIR n2. 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 PARTE III. PROGRAMACIÓN
5. 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
Figura 11.1
CAPÍTULO II. ESTRUCTURAS DE DATOS 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 a contador de iteraciones j a contador de iteraciones de COMPARA n a número de datos a a arreglo de números
1. i←12. SI i > n ENTONCES IR al paso 3 DE OTRA FORMA PEDIR i ←i + 1 IR al paso 2 3. i← 1 4. SI i > n-1 ENTONCES IR al paso 5 DE OTRA FORMA COMPARA i ←i + 1 IR al paso 4 5. i← 1 6. 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
Figura 11.3
CAPÍTULO II. ESTRUCTURAS DE DATOS 377
378 PARTE III. PROGRAMACIÓN
Figura 11.4
CAPÍTULO I I . ESTRUCTURAS DE DATOS 379
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
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. Meter los n primeros pares a un arreglo e imprimirlo. 2. Pedir un conjunto de n números e imprimir el mayor de ellos. 3. 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. 4. 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
Alumno 2
7 8 910 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. alumno ←1 2. SI alumno > 5 ENTONCES
IR al paso 3 DE OTRA FORMA CALIFICACIONES alumno ←alumno + 1 IR al paso 2
3. FIN
Proceso CALIFICACIONES:
1. calificación ←1 2. SI calificación > 4 ENTONCES
IR al paso 3 DE OTRA FORMA CALIFICACIÓN calificación ←calificación + 1 IR al paso 2
3. FIN
Proceso CALIFICACIÓN:
1. PEDIR calif(alumno, calificación)
Para obtener los promedios se ejecutarán las siguientes acciones:
1. alumno ←1 2. SI alumno > 5 ENTONCES
IR al paso 3 DE OTRA FORMA CALIFICACIONES2 alumno ←alumno + 1 IR al paso 2
3. FIN
384 PARTE III. PROGRAMACIÓN
Proceso CALIFICACIONES2:
1. suma <—0 2. calificación ←1 3. SI calificación > 4 ENTONCES
IR al paso 4 DE OTRA FORMA CALIFICACION2 calificación ←calificación + 1 IR al paso 3
4. promedio = suma / 4 5. DESPLEGAR promedio
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:
a a alumno c a calificación s a suma P a promedio CS a proceso
c a proceso CALIFICACIÓN CS2 a proceso CALIFICACIONES
C2 a proceso CALIFICACION2
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
DE OTRA FORMA CS2
a ←a + 1 IR al paso 4 5. FIN
CS:
1 c← 12 SI c > 4 ENTONCES IR al paso 3 DE OTRA FORMA C c ← c + 1 IR al paso 2 3. FINP
C:
1. PEDIR calif(a, c) 2. FINP
CS2:
1. s←0 2. c ← 1 3. SI c> 4 ENTONCES
IR al paso 4 DE OTRA FORMA C2
c ←c + 1 IR al paso 3
4. p ←s /4 5. DESPLEGAR p 6. 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
CAPÍTULO II. ESTRUCTURAS DE DATOS 385
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
386 PARTE III. PROGRAMACIÓN
CAPÍTULO II. ESTRUCTURAS DE DATOS 387
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;"
NEXT a END
=";p
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
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.
392 PARTE III. PROGRAMACIÓN
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:
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 alfanu-mé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 30 dirección 30 teléfono 10
396 PARTE III. PROGRAMACIÓN
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 Nombre en Mem. Men, principal intermedia
nombre 30 nombre$ inombre$ dirección 30 direc$ idirec$ teléfono 10 telef$ 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) Altas 2) Bajas 3) Consultas 4) Cambios 5) Reporte general 6) Reportes específicos
398 PARTE II 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) 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
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) 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
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) 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
Es el despliegue de los campos de todos los registros activos de un archivo. Los pasos generales a seguir son:
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) 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) 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
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 instruc-ció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
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:
404 PARTE III. PROGRAMACIÓN
Bloque equivalente en diagrama de flujo:
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) Agregar nuevos artículos al archivo 2) Borrar algún artículo que ya no se venderá más 3) Consultar los datos de determinado artículo 4) Modificar datos de algún artículo 5) Obtener un reporte de todos los artículos 6) Poder aumentar las existencias de un artículo cuando se compre al proveedor 7) 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
nombre del artículo costo precio cantidad
Longitud
25 4 4 4
Nombre en Mem. principal
articul$ costo precio cant
Nombre en Mem. intermedia
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) Altas 2) Bajas 3) Consultas 4) Cambios 5) Reporte general 6) Compras 7) Ventas 8) 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 409
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 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 III. 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$ a nombre del artículo (M. Principal) costo a costo (M. Principal) precio a precio (M. Principal) cant a cantidad (M. Principal) iarticul$ a nombre del artículo (M. Intermedia) icosto$ a' costo (M. Intermedia) iprecio$ a precio (M. Intermedia) icant$ a cantidad (M. Intermedia) op a opción seleccionada sn$ 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 ENCUEN-TRA, 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. DESPLEGAR "MENÚ:" 2. DESPLEGAR "1) Altas" 3. DESPLEGAR "2) Bajas" 4. DESPLEGAR "3) Consultas" 5. DESPLEGAR "4) Cambios" 6. DESPLEGAR "5) Reporte general" 7. DESPLEGAR "6) Compras" 8. DESPLEGAR "7) Ventas"
CAPÍTULO II. ESTRUCTURAS DE DATOS 411
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
412 PARTE II I . PROGRAMACIÓN
9. cant←0 10. MOVER IZQUIERDA iarticul$ ← iarticul$ 11. MOVER IZQUIERDA icosto$ ← MKS$(costo) 12. MOVER IZQUIERDA iprecio$ ← MKS$(precio) 13. MOVER IZQUIERDA icant$ ←MKS$(cant) 14. ESCRIBIR REGISTRO r 15. CERRAR ARCHIVO "FERRET" 16. FINP
BAJAS:
1. ABRIR ARCHIVO "FERRET" 2. ENCUENTRA 3. 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. ABRIR ARCHIVO "FERRET" 2. ENCUENTRA 3. SI r=0 ENTONCES
DESPLEGAR "Ese artículo no se encuentra" DE OTRA FORMA
CAPÍTULO II. ESTRUCTURAS DE DATOS 413
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. ABRIR ARCHIVO "FERRET" 2. n← LOF(l)/37 3. i← 1 4. 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
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. PEDIR articul$ 2. articul$ ← articul$ + SPACE$(25-LEN(articul$)) 3. n ← LOF(l)/37 4. r←0 5. i← l 6. 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 415
Figura 11.14
416 PARTE III. PROGRAMACIÓN
Figura 11.15
CAPÍTULO II. ESTRUCTURAS DE DATOS 417
ABRIR ARCHIVO "FERRET"
Figura 11 .16
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 "…."
Figura 11.17
418 PARTE III. PROGRAMACIÓN
Figura 11.18
CAPÍTULO II. ESTRUCTURAS DE DATOS 419
420 PARTE III. PROGRAMACIÓN
Figura 11 .19
Figura 11.20
CAPÍTULO I I . ESTRUCTURAS DE DATOS 421
422 PARTE III. PROGRAMACIÓN
Figura 11.21
Figura 11.22
CAPÍTULO I I . 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 op=3THEN
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 425
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
426 PARTE III. PROGRAMACIÓN
FIELD #1, 25 AS iarticulS, 4 AS icostoS, 4 AS iprecioS, 4 AS icantS CLS PRINT "BAJAS"
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 427
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
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 429
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"
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:
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"
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) Agregar alumnos nuevos 2) Dar de baja alumnos 3) Consultar los datos de algún alumno 4) Modificar los datos de algún alumno 5) Obtener un reporte de la información de todos los alumnos 6) 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:
Longitud
matrícula 7 nombre 30 teléfono 10 dirección 50 calificación 4
Nombre en Nombre enMcm. principal Mem. intermedia
mat$ imat$ nom$ inom$tel$ itel$dir$ idir$ calif 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
Campo
432 PARTE III. PROGRAMACIÓN
2) BAJAS 3) CONSULTAS Y CAMBIOS 4) REPORTE GENERAL 5) 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 433
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) 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 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:
matrícula (M. Principal) nombre (M. Principal) 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
mat$ a nom$ a tel$ a dir$ a calif a imat$ a inom$ a itel$ a idir$ a ¡calif$ a op a sn$ a c a n a i a r a
434 PARTE III. PROGRAMACIÓN
1. DESPLEGAR "MENÚ:" 2. DESPLEGAR "1) Altas" 3. DESPLEGAR "2) Bajas" 4. DESPLEGAR "3) Consultas y cambios" 5. DESPLEGAR "4) Reporte general" 6. DESPLEGAR "5) Reporte de alumnos aprobados" 7. DESPLEGAR "6) Salir" 8. PEDIR op 9. 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 ABRIR ARCHIVO "ALUMNOS"2 n←LOF(l)/101 3 r ←n+l 4 i← 1 5 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 . ESTRUCTURAS DE DATOS 435
9. PEDIR dir$ 10. PEDIR calif 11. MOVER IZQUIERDA imat$ ← mat$ 12. MOVER IZQUIERDA inom$ ← nom$ 13. MOVER IZQUIERDA itel$ ←tel$ 14. MOVER IZQUIERDA idir$ ←dir$ 15. MOVER IZQUIERDA icalif$ ←MKS$(calif) 16. ESCRIBIR REGISTRO r 17. CERRAR ARCHIVO "ALUMNOS" 18. FINP
BAJAS:
1. ABRIR ARCHIVO "ALUMNOS" 2. ENCUENTRA 3. 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
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. ABRIR ARCHIVO ' 'ALUMNOS'' 2. n←LOF(l)/101 3. i← 1 4. 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. ABRIR ARCHIVO "ALUMNOS" 2. n ← LOF(1)/101 3. i← 1 4. 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 437
5. CIERRA ARCHIVO "ALUMNOS" 6. FINP
ENCUENTRA:
1. PEDIR nom$ 2. nom$ ← nom$ + SPACE$(30-LEN(nom$)) 3. n←LOF(l)/101 4. r←0 5. i← 1 6. 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
438 PARTE 111. PROGRAMACIÓN
Figura 11.23
Figura 11.24
CAPÍTULO II. ESTRUCTURAS DE DATOS 439
440 PARTE III. PROGRAMACIÓN
Figura 11.25
ABRIR ARCHIVO "ALUMNOS
"Ese alumno no se encuentra" imas$, inom$, itel,
idir$, CVS(icalif$)
CERRAR ARCHIVO "ALUMNOS
Figura 11.26
CAPÍTULO I I . ESTRUCTURAS DE DATOS 441
442 PARTE III. PROGRAMACIÓN
Figura 11.27
Figura 11.28
CAPÍTULO II. ESTRUCTURAS DE DATOS 443
444 PARTE III. PROGRAMACIÓN
Figura 11.29
CAPÍTULO 11. ESTRUCTURAS DE DATOS 445
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$
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 447
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"
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$
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 449
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
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
El programa debe manejar las siguientes opciones: 1) Introducir los datos de una película. 2) Reporte de todos los títulos de películas con determinada clasificación. 3) Reporte de todos los títulos de las películas cuyo precio de renta esté entre 3000 y 5000. 4) 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 Reserva P Prestado D 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 Sistema operativo PP Procesador de palabras HEC Hoja electrónica de cálculo BD Base de datos
Clave Tipo de computadora
MAC Macintosh PS 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 Gerente B Director C Supervisor D 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 Impuestos IMA 15% 10%B 10% 8% C 5% 6%D 3% 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
Deberás incluir un menú con las siguientes opciones: 1) Dar de alta empleados. 2) Obtener reporte de salarios reales. 3) Obtener reporte de los que ganan menos de 3500 y tienen 3 o menos años de antigüedad. 4) 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
Las opciones que necesita el gerente deben ser las siguientes: 1) Introducir los datos antes descritos. 2) Reporte de las ventas y el total de las ventas de un vendedor en una fecha determinada. 3) Dar de baja todos los registros de una fecha específica. 4) 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) Introducir los datos. 2) Reporte de todos los modelos de máquinas con sus respectivos precios unitarios. 3) Consulta de alguna máquina por medio del número de serie. 4) 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) Registro de nuevos pacientes. 2) Emitir un reporte de los pacientes que están en habitación de lujo. 3) Consulta por el número de cama de determinado paciente. 4) 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) Introducir nuevos datos. 2) Reportar la información de los discos o cassettes de determinado intérprete. 3) Reportar la información de las existencias por tipo de disco. 4) 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 III . 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 compu-
tadora 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 secun-
daria, 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 III . 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
G guardar un programa, 219, 221
H hardware, 4, 5, 7, 8
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
L lápiz óptico, 5, 8 lenguaje, 7, 8, 11, 17 bajo nivel, 7 alto nivel, 7
M mantenimiento, 11, 18, 19
ÍNDICE ANALÍTICO 461
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
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
Recommended