COMPUTACIÓN METODOLOGÍA, LÓGICA COMPUTACIONAL Y PROGRAMACIÓN COMPUTACIÓN METODOLOGÍA, LÓGICA COMPUTACIONAL Y PROGRAMACIÓN Ma. del Rosario Bores Rangel Ingeniera en Sistemas Computacionales Profesora de planta de Computación en el Departamento de Ciencias Básicas de la División de Enseñanza Media en el Instituto Tecnológico y de Estudios Superiores de Monterrey Campus Toluca Gerente de producto: Alejandra Martínez Ávila Supervisor de edición: Javier López Campoy Supervisor de producción: Zeferino García García COMPUTACIÓN Metodología, lógica computacional y programación Prohibida la reproducción total o parcial de esta obra, por cualquier medio, sin autorización escrita del editor. DERECHOS RESERVADOS © 1993, respecto a la primera edición por McGRAW-HILL INTERAMERICANA DE MÉXICO, S. A. de C. V. Atlacomulco 499-501, Fracc. Ind. San Andrés Atoto, 53500 Naucalpan de Juárez, Edo. de México Miembro de la Cámara Nacional de la Industria Editorial, Reg. Núm. 1890 ISBN 970-10-0225-3 1234567890 9087654213 Impreso en México Printed in México Esta obra se terminó de imprimir en febrero de 1993 en Programas Educativos, S.A. de C.V. Calz. Chabacano Núm. 65-A Col. Asturias Deleg. Cuauhtemoc 06850 México, D.F. Se tiraron 4000 ejemplares CONTENIDO Prólogo ............................................................................................................................... XI PARTE I: Metodología para la solución de problemas ......................................................... 1 Capítulo 1: Introducción .................................................................................................. 3 Objetivos ............................................................................................................................ 1) Definición de computadora ........................................................................................ 2) Definición de sistema computacional............................................................................ 3) Clasificación de los componentes de un sistema computacional ..................................... 4) Clasificación del hardware ........................................................................................... A) Dispositivos de entrada ......................................................................................... B) Dispositivos de salida ........................................................................................... C) Dispositivos de procesamiento .............................................................................. D) Dispositivos de almacenamiento permanente ......................................................... 5) Clasificación del software ............................................................................................ A) Software de aplicación .......................................................................................... B) Software del sistema .......................................................................................... Resumen ............................................................................................................................. 3 4 4 4 5 5 6 6 6 7 7 7 8 Capítulo 2: Metodología para la solución de problemas ....................................................... 9 Objetivos ............................................................................................................................ 1) Definición del problema ............................................................................................... 2) Planeación de la solución ............................................................................................. 3) Algoritmo..................................................................................................................... 4) Diagrama de flujo ......................................................................................................... 5) Codificación y edición del programa ............................................................................ 6) Pruebas y depuración .................................................................................................... 7) Documentación y mantenimiento .................................................................................. Resumen ............................................................................................................................. 9 11 12 13 15 17 18 18 19 PARTE II: Lógica computacional........................................................................................ 21 Capítulo 3: Conceptos básicos ............................................................................................ 23 Objetivos ............................................................................................................................ 1) Tipos de datos A) Numéricos ............................................................................................................. 23 24 24 Vi CONTENIDO B) Alfanuméricos .................................................................................................................... 2) Zonas de memoria ...................................................................................................................... A) Constantes ........................................................................................................................... B) Variables ............................................................................................................................. 3) Expresiones ................................................................................................................................. A) Definición ........................................................................................................................... B) Elementos de una expresión ............................................................................................. 4) Tipos de operadores ................................................................................................................... A) Asociativos ...................................................................................................................... B) Aritméticos ......................................................................................................................... C) Relaciónales........................................................................................................................ D) Lógicos ................................................................................................................................ Problema resuelto de operadores aritméticos ................................................................................. Problemas propuestos de operadores aritméticos ........................................................................... Problema resuelto de operadores relaciónales y lógicos ............................................................... Problemas propuestos de operadores relaciónales y lógicos......................................................... Resumen ............................................................................................................................................. 25 25 26 26 26 26 26 26 27 27 28 28 29 30 30 31 32 Capítulo 4: Tipos de problemas ....................................................................................................... 33 Objetivos ............................................................................................................................................ 1) Problemas secuenciales ............................................................................................................. Problemas resueltos ...................................................................................................... Problemas propuestos ...................................................................................................... 2) Problemas selectivos .................................................................................................................. 2a) Problemas selectivos simples .......................................................................................... Problemas resueltos ...................................................................................................... Problemas propuestos ...................................................................................................... 2b) Problemas selectivos compuestos ................................................................................... Problemas resueltos ...................................................................................................... Problemas propuestos ...................................................................................................... 3) Problemas repetitivos................................................................................................................. Introducción ....................................................................................................................................... 1) Ciclos con un número determinado de iteraciones ................................................................. 2) Ciclos con un número indeterminado de iteraciones .............................................................. Tipos de problemas repetitivos ................................................................................................. 3a) Problemas repetitivos simples ......................................................................................... Problemas resueltos ...................................................................................................... Problemas propuestos ...................................................................................................... 3a.2) Número indeterminado de iteraciones ......................................................................... Problemas resueltos ........................................................................................................................... Problemas propuestos ........................................................................................................................ Problemas repetitivos compuestos ................................................................................................... Problemas resueltos ........................................................................................................................... Problemas propuestos ....................................................................................................................... Resumen ............................................................................................................................................. 33 34 34 51 53 54 54 69 72 72 96 98 98 99 102 103 103 104 154 155 155 175 176 176 204 205 CONTENIDO Vii PARTE III: Programación................................................................................................... 207 Capítulo 5: Elementos del lenguaje .................................................................................. 209 Objetivos ............................................................................................................................ Introducción ....................................................................................................................... 1) Tipos de datos .............................................................................................................. 2) Zonas de memoria ........................................................................................................ 3) Expresiones ............................................................. . . ................................................ 4) Tipos de operadores ..................................................................................................... 5) Palabras reservadas ...................................................................................................... Resumen............................................................................................................................. 209 210 210 211 212 212 214 215 Capítulo 6: Manejo de archivos........................................................................................... 216 Objetivos ............................................................................................................................ Procedimiento de entrada a Quick Basic ............................................................................. Instrucciones de manejo de archivos ................................................................................... a) Creando un programa ................................................................................................... b) Recuperando un programa de disco ............................................................................... c) Guardando un programa en disco .................................................................................. d) Imprimiendo un programa ............................................................................................ e) Ejecutando un programa ............................................................................................... Resumen ............................................................................................................................. 216 217 217 217 219 219 220 220 221 Capítulo 7: Interacción usuario-programa............................................................................ 222 Objetivos ............................................................................................................................ a) Asignación ................................................................................................................... Instrucción LET ........................................................................................................... b) Entrada de datos ........................................................................................................... Instrucción INPUT ....................................................................................................... c) Salida de datos ........................................................................................................... Instrucción PRINT ....................................................................................................... Comentarios........................................................................................................................ Instrucción REM................................................................................................................. Problemas resueltos ............................................................................................................ Problemas propuestos.......................................................................................................... Resumen ............................................................................................................................. 222 223 223 225 225 226 226 227 227 228 235 236 Capítulo 8: Control de ejecución ......................................................................................... 237 Objetivos ............................................................................................................................ 8a) Control de ejecución condicional Instrucción IF ... THEN ... ELSE ............................................................................. Problemas resueltos.................................................................................................... 237 238 238 241 V iii CONTENIDO Problemas propuestos ............................................................................................................. 8b) Control de ejecución incondicional .................................................................................... Instrucción GOTO ................................................................................................................... 8c) Estructuras repetitivas: combinación de las instrucciones IF ... THEN ... ELSE y GOTO .................................................................................... ■ ........................................... Problemas resueltos ................................................................................................................ Problemas propuestos ............................................................................................................. 8d) Estructuras repetitivas: Instrucción FOR ... NEXT .............................................................. Problemas resueltos ................................................................................................................ Problemas propuestos ............................................................................................................. Resumen ............................................................................................................................................ 261 261 261 262 262 274 274 282 309 310 Capítulo 9: Funciones ...................................................................................................................... 311 Objetivos ............................................................................................................................................ 9a) Funciones predefinidas ............................................................................................................ 1) Funciones numéricas ....................................................................................................... Funciones trigonométricas .............................................................................................. Función SIN...................................................................................................................... Función COS .................................................................................................................... Función TAN .................................................................................................................... Función ARCTAN ........................................................................................................... Funciones aritméticas ............................................................................................................. Función SQR .................................................................................................................... Función ABS .................................................................................................................... Función FIX...................................................................................................................... Función INT .................................................................................................................. Problemas resueltos .......................................................................................................................... Problemas propuestos ....................................................................................................................... 2) Funciones alfanuméricas ................................................................................................. Función LEFT$ ................................................................................................................ Función RIGHT$ ............................................................................................................. Función MID$ ............................................................................................................... Función LEN .................................................................................................................... Función SPACE$ ............................................................................................................. Concatenación de expresiones alfanuméricas............................................................... Problemas resueltos .......................................................................................................................... Problemas propuestos ....................................................................................................................... 9b) Funciones definidas por el usuario ........................................................................................ 1) Funciones de una sola línea ............................................................................................ 2) Funciones multilínea ....................................................................................................... Problemas resueltos .......................................................................................................................... Problemas propuestos....................................................................................................................... Resumen ............................................................................................................................................ 311 313 313 313 313 313 314 314 314 314 315 315 316 317 322 323 323 323 324 324 325 325 326 339 339 340 340 341 343 345 CONTENIDO iX Capítulo 10: Procesos modulares ......................................................................................... 346 Objetivos ............................................................................................................................. 1) Función ...................................................................................................................... 2) Subrutina....................................................................................................................... 3) Procedimiento ............................................................................................................... 4) Subprogramas ............................................................................................................... 5) Programas ..................................................................................................................... Problemas resueltos ............................................................................................................. Problemas propuestos .......................................................................................................... Resumen.............................................................................................................................. 346 349 349 350 350 351 351 365 366 Capítulo 11: Estructuras de datos ......................................................................................... 367 Objetivos ............................................................................................................................. 1) Arreglos ........................................................................................................................ Instrucción DIM ......................................................................................................... Instrucción OPTION BASE .......................................................................................... Problemas resueltos ................................................................................................... Problemas propuestos ................................................................................................. 2) Matrices ........................................................................................................................ Problemas resueltos ............................................................................................................. Problemas propuestos .......................................................................................................... 3) Archivos de datos.......................................................................................................... Organización de los archivos de datos ........................................................................... 1) Secuenciales........................................................................................................... 2) Aleatorios o directos .............................................................................................. Archivos de datos aleatorios.......................................................................................... Proceso para accesar un archivo de datos aleatorio ........................................................ Concepción del archivo de datos ................................................................................... Operaciones con los archivos aleatorios ........................................................................ 1) Altas ............................................................................................................................. 2) Bajas ............................................................................................................................. 3) Consultas ................................................................................................................... 4) Cambios ........................................................................................................................ 5) Reporte general ............................................................................................................. 6) Reportes específicos...................................................................................................... Instrucciones y funciones para el manejo de archivos de datos aleatorios ........................ Instrucción OPEN ...................................................................................................... Instrucción FIELD# ................................................................................................... Instrucción LSET .......................................................................................................... Instrucción RSET.......................................................................................................... Instrucción PUT# .......................................................................................................... Instrucción GET# ......................................................................................................... Instrucción CLOSE#..................................................................................................... Función LOF ................................................................................................................ 367 368 369 370 371 381 381 382 391 392 395 395 395 395 395 396 397 398 398 398 399 399 399 400 400 401 401 402 403 403 404 404 X CONTENIDO Función MKS$ ............................................................................................................. Función MKD$ ............................................................................................................. Función MKI$ ........................................................................................................... Función MKL$ ............................................................................................................. Función CVS ................................................................................................................ Función CVD ............................................................................................................... Función CVI .............................................................................................................. Función CVL ................................................................................................................ Instrucciones para dar presentación a un programa ........................................................ Instrucción CLS ............................................................................................................ Instrucción LÓCATE .................................................................................................... Problemas resueltos ............................................................................................................. Problemas propuestos .......................................................................................................... Resumen.............................................................................................................................. 405 405 405 406 406 406 406 406 407 407 407 407 450 457 índice analítico .................................................................................................................... 459 PRÓLOGO El presente libro está destinado a todos aquellos interesados en iniciarse en la programación de computadoras. Nuestra motivación para hacerlo fue que no pudimos encontrar en el mercado un libro que enseñara al alumno a programar con una metodología gradual y sencilla. Muchos de los libros que revisamos enseñan a programar directamente sobre un lenguaje de computadora, lo cual hace que la programación dependa de un lenguaje determinado; otros emplean metodologías que confunden al estudiante por la forma poco gradual en que tratan los temas; otros más incluyen pocos ejercicios, con lo que la práctica del alumno, base del aprendizaje en la programación de computadoras, se ve minimizada. Con este libro buscamos resolver estas deficiencias, pues empleamos una metodología que presenta los temas de una manera gradual y organizada; además, incluimos dos tipos de problemas para que el estudiante se ejercite: — Los problemas resueltos, en los cuales se muestra, paso a paso, la forma de resolver un problema dado. — Los problemas propuestos, que tienen como propósito que el estudiante aplique la teoría aprendida para que, por sí mismo, resuelva un problema dado. La obra está dividida en tres grandes partes. En la primera describimos tanto las partes de la computadora —con un enfoque dirigido hacia la programación— como los pasos de la metodología que usamos a lo largo del libro para la solución de los problemas. En la segunda parte enseñamos los conceptos de lógica computacional necesarios para poder programar en cualquier lenguaje computacional. Nos hemos basado en técnicas tales como los algoritmos y los diagramas de flujo, incluidos como pasos de la metodología. En la última parte, la fase de elaboración de programas, enseñamos la versión Quick Basic del lenguaje Basic para lograr el objetivo de hacer programas funcionales y estructurados. Los capítulos que integran cada parte están organizados de la siguiente manera: primero se presentan los objetivos del capítulo; a continuación se expone la teoría, se resuelven problemas, se dejan problemas propuestos para el estudiante y, finalmente, el capítulo concluye con un resumen de conceptos. Dada la estructuración de los capítulos y la exposición de los conceptos, pensamos que este libro puede usarse de manera autodidacta o como libro de texto para materias de introducción a la programación de computadoras. De hecho este libro cubre el temario del curso de la materia Computación de la enseñanza media del Instituto Tecnológico y de Estudios Superiores de Monterrey. Por último hemos elaborado, para el maestro, un manual de soluciones de, aproximadamente, la mitad de los problemas propuestos. Dicho manual, que puede adquirirse por separado, creemos que será de gran utilidad. También recomendamos al maestro que utilice los problemas propuestos del último capítulo de este libro como proyectos finales para el alumno. Agradecemos infinitamente el apoyo moral brindado por nuestros padres, hermanos, esposos e hijos para que la elaboración de este libro fuera posible. Los autores PARTE I METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS CAPÍTULO 1 INTRODUCCIÓN OBJETIVOS Al final de este capítulo el alumno: 1.1 Será capaz de definir los siguientes conceptos: a) Computadora b) Procesamiento de información c) Sistema computacional 1.2 Explicará y clasificará los componentes de un sistema computacional: 1.2.1 Hardware á) Dispositivos de entrada b) Dispositivos de salida c) Dispositivos de procesamiento d) Dispositivos de almacenamiento permanente 1.2.2 Software a) De aplicación b) Del sistema 1.3 Identificará los componentes más importantes de la computadora por la función que realizan en ella. 3 CAPÍTULO 1 INTRODUCCIÓN 1) DEFINICIÓN DE COMPUTADORA Una computadora es una máquina electrónica que resuelve tareas relacionadas con el procesamiento de información, con una gran velocidad y precisión. Se entiende por procesamiento de información el tratamiento que reciben los datos para producir nueva información. Por ejemplo, si se tienen los datos (horas trabajadas, horas extras y pago por hora) de cada uno de los empleados de una empresa, se puede obtener la cantidad total de dinero que recibe cada uno en una semana determinada. La finalidad de la computadora es ayudar al hombre a realizar las tareas repetitivas en menor tiempo y con mayor exactitud. Esto permite que el hombre dedique su tiempo a tareas más creativas. Es importante notar que la computadora no razona de manera autónoma; simplemente ejecuta una serie de instrucciones que le proporciona un humano. 2) DEFINICIÓN DE SISTEMA COMPUTACIONAL Se le llama sistema computacional al conjunto de componentes computacionales que, de manera integral, ayudan a resolver un problema que requiere de procesamiento de información. 3) CLASIFICACIÓN DE LOS COMPONENTES DE UN SISTEMA COMPUTACIONAL Un sistema computacional consta de componentes físicos y lógicos. Los componentes físicos, o tangibles, conocidos como hardware, son los que realizan las tareas y entre ellos se encuentran los componentes eléctricos y electromagnéticos, así como sus interconexiones. Los componentes lógicos o intangibles, conocidos como software, son los que indican al hardware qué hacer y cómo hacerlo. 4 CAPÍTULO 1. INTRODUCCIÓN 5 En un humano también podemos encontrar componentes físicos y lógicos; por ejemplo, cuando se lanza una pelota, el brazo (componente físico) realiza la acción de tomar y lanzar la pelota, pero es el conjunto de órdenes (componente lógico) emitidas por el cerebro las que le indicarán al brazo que lleve a cabo este par de acciones, y cómo hacerlo. 4) CLASIFICACIÓN DEL HARDWARE La clasificación de los componentes considerados como hardware está apegada a los recursos que utiliza el hombre cuando resuelve alguna tarea de procesamiento de información. Los componentes se clasifican en: A) B) C) D) DISPOSITIVOS DE ENTRADA DISPOSITIVOS DE SALIDA DISPOSITIVOS DE PROCESAMIENTO DISPOSITIVOS DE ALMACENAMIENTO PERMANENTE Por ejemplo, si se pretende que una computadora realice la tarea de obtener el promedio de tres números cualesquiera, ésta debe tener medios para preguntar cuáles son esos tres números. También debe tener manera de efectuar la suma de éstos y la división entre 3. Asimismo, debe tener un medio de comunicación para mostrar el promedio que obtuvo. Si este problema lo tratara de resolver un humano en vez de la computadora, tendría que hacer lo siguiente: 1) 2) 3) 4) 5) 6) Pedir el primer número y anotarlo en algún lugar, para evitar olvidarlo. Pedir el segundo número y anotarlo. Pedir el tercer número y anotarlo. Efectuar la suma aritmética de estos tres números y anotar el resultado en algún lugar. Dividir el resultado anterior entre 3 y anotarlo en algún lugar. Mostrar el resultado anterior. Quien hizo el proceso debió tener oídos para escuchar los tres números que se le dieron, papel y lápiz para retenerlos y ayudarse a obtener los resultados de la suma y de la división; tener cerebro para realizar estas operaciones, y boca para leer el resultado. Así pues, esta persona tuvo canales de comunicación para preguntar datos y emitir resultados, y medios de procesamiento para realizar sus operaciones. De un modo análogo, la computadora también tiene canales de comunicación para recibir y emitir datos, así como medios de procesamiento. Vamos ahora a estudiar las partes de una computadora analizándola desde el punto de vista de la información que emite, recibe y procesa. A) Dispositivos de entrada Éstos son los componentes que permiten a la computadora recibir información. El dispositivo más común que permite recibir información del exterior es el teclado, el cual permite que se introduzca información cuando se oprimen sus teclas. 6 PARTE I. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS Otro dispositivo común es el ratón o mouse el cual permite que se seleccione información para así darle órdenes a la computadora, deslizándose a través de la pantalla. Alternativamente existen más dispositivos para que la recepción o entrada de datos se lleve a cabo; algunos de ellos son: el lápiz óptico, el scanner, etcétera. B) Dispositivos de salida Son los componentes que le permiten a la computadora mostrar al exterior la información. El dispositivo más usado para exteriorizar la información procesada es el monitor o pantalla, el cual permite visualizar letras, números, símbolos especiales e imágenes. Otro dispositivo especialmente útil, pues permite obtener la información impresa, es la impresora. C) Dispositivos de procesamiento Son los componentes que permiten procesar información. Éstos son en sí el "cerebro" de la computadora. Hasta ahora, tanto los dispositivos de entrada como los de salida, no resultan ser más que dispositivos periféricos a la computadora, porque sólo le sirven para transmitir información de o hacia el exterior. Se compone de dos partes: a) CPU (Central Procesing Unit: Unidad Central de Procesamiento). Es un circuito electrónico de la computadora capaz de realizar operaciones aritméticas y lógicas, así como coordinar todas las acciones de la computadora. b) Memoria principal. Es un conjunto de circuitos electrónicos que permiten almacenar y recuperar datos en forma de señales eléctricas. Las acciones de almacenar y recuperar los datos son ejecutadas por el CPU; la memoria sólo es un lugar de almacén de datos; es temporal, porque los almacena sólo mientras esté presente la corriente eléctrica, pero es de muy rápido acceso pues la información viaja a manera de señales eléctricas. D) Dispositivos de almacenamiento permanente Estos componentes son conocidos como memoria secundaria, y permiten almacenar la información en forma permanente. Debido a que la memoria principal es temporal, la información es trasladada a la memoria secundaria cuando se desea que ésta quede almacenada y que su permanencia no dependa de la presencia de la corriente eléctrica. La memoria secundaria es permanente debido a que la información es almacenada por medios electromagnéticos, pero se reduce significativamente su velocidad de acceso, en contraste con la velocidad de la memoria principal. Los dispositivos de almacenamiento permanente o secundario son considerados como dispositivos de entrada, pues el CPU, al recuperar la información que había sido almacenada previamente en memoria secundaria, está recibiendo información. Éstos mismos también son considerados como dispositivos de salida cuando el CPU manda la información de memoria principal a la memoria secundaria. Por lo tanto son considerados como dispositivos de entrada/salida. CAPÍTULO I. INTRODUCCIÓN 7 Como ejemplos podemos citar el disco duro, el disco flexible (diskette), la cinta y el disco óptico. 5) CLASIFICACIÓN DEL SOFTWARE Se clasifica en: A) Software de aplicación B) Software del sistema A) Software de aplicación Es un software que tiene un propósito específico. Por ejemplo: • • • • Software de contabilidad Software de nómina Software de facturación Software de procesamiento de textos, etcétera. B) Software del sistema Es un software que auxilia en la creación, modificación y ejecución del software de aplicación. Ejemplos; Sistema operativo: es un software que establece la comunicación entre los componentes del hardware y el resto del software. Su función principal es administrar el funcionamiento del hardware según las órdenes dadas por algún software. Por ejemplo, si usando un software de procesamiento de textos, se desea imprimir un trabajo, el sistema operativo verifica que la impresora esté encendida, si lo está, permite que se realice la impresión, y durante ésta, continúa verificando su estado; si la impresora no está encendida envía un mensaje indicándolo. Si el sistema operativo no estuviera presente la comunicación entre el software de procesamiento de textos y la impresora no podría realizarse. Lo mismo ocurriría con cualquiera otra interacción entre hardware y software. Lenguajes: es un software que proporciona un conjunto de vocablos y reglas, que se utilizarán para crear el software de aplicación. A su vez, los lenguajes se clasifican en: a) Bajo nivel: Utilizan vocablos directamente entendibles por el CPU de la computadora. Por ejemplo: Lenguaje máquina, ensamblador. b) Alto nivel: Utilizan vocablos parecidos al lenguaje humano pero ininteligibles para el CPU, por lo cual deben ser traducidos a un lenguaje computacional de bajo nivel. Por ejemplo: Basic, Pascal, Cobol, DBase, etcétera. 8 PARTE I. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS RESUMEN Computadora: Máquina electrónica que resuelve tareas relacionadas con el procesamiento de información con una gran velocidad y precisión. Sistema computacional: Es el conjunto de componentes computacionales que de manera integral ayudan a resolver un problema que requiera de procesamiento de información. Se clasifica en: Hardware: Componentes físicos o tangibles. Están incluidos los componentes eléctricos, electromagnéticos e interconexiones, y son los que llevan a cabo las tareas. Se clasifica en: Dispositivos de entrada: Son componentes que permiten recibir información. El más común es el teclado, pero también existen el mouse, lápiz óptico, scanner, etcétera. Dispositivos de salida: Son componentes que permiten mostrar información al exterior. Los más comunes son la pantalla y la impresora. Dispositivos de procesamiento: Son componentes que permiten procesar información; conforman el "cerebro" de la computadora. Éstos son: CPU: Circuito electrónico que lleva a cabo las operaciones aritméticas y lógicas y además coordina todas las acciones de la computadora. Memoria principal: Conjunto de circuitos electrónicos que permiten almacenar datos en forma de señales eléctricas, por lo cual es de rápido acceso, pero temporal. Dispositivos de almacenamiento permanente: Llamados también memoria secundaria; permiten almacenar y recuperar información por medios electromagnéticos, por lo que es de acceso lento pero permanente. Ejemplos; disco duro, disco flexible. Software: Componentes lógicos o intangibles. Indican al hardware qué hacer y cómo hacerlo. Se clasifica en: Software de aplicación: Software con un propósito específico. Ejemplo: software de contabilidad, software de nómina, etcétera. Software del sistema: Software que ayuda a la creación, modificación y ejecución del software de aplicación. Ejemplos: sistema operativo y lenguajes. CAPÍTULO 2 METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS OBJETIVOS El alumno será capaz de enunciar cada uno de los pasos de la metodología para la solución de problemas, así como las características de cada paso. 2.1 El alumno definirá la metodología para la solución de problemas. 2.2 El alumno describirá cada uno de los siguientes pasos: 2.2.1 Definición del problema 2.2.2 Planeación de la solución 2.2.3 Forma de seleccionar o formular un algoritmo — El alumno definirá qué es un algoritmo, — El alumno describirá las características generales de los algoritmos — El alumno enumerará las acciones que se pueden llevar a cabo con los algoritmos 2.2.4 Diagrama de flujo — El alumno definirá qué es un diagrama de flujo — El alumno explicará la siguiente notación: a) Bloques terminales, b) Bloques de entrada y salida, c) Bloques de proceso, d) Bloques de decisión o condicionales, é) Bloques de conexión 2.2.5 Codificación y edición del programa — El alumno definirá qué es codificación — El alumno definirá qué es edición del programa 2.2.6 Pruebas y depuración — El alumno explicará la importancia de las pruebas y la depuración de un programa para la validación de resultados 2.2.7 Documentación y mantenimiento — El alumno explicará la importancia de la documentación de un programa computacional — El alumno explicará la importancia del mantenimiento de un programa computacional para su actualización 2.3 El alumno explicará la interrelación de los siguientes términos: Programador, Programa, Computadora, Sujeto de acción 2.4 El alumno enumerará las características esenciales de un programador. CAPÍTULO 2 METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS Ya sabemos que una computadora es un aparato electrónico que ejecuta tareas de una manera veloz y precisa, pero no es capaz de razonar autónomamente. Por eso la persona que instruirá a la computadora es la que debe razonar el problema. Si la persona la instruye correcta o incorrectamente ésta hará de igual manera las tareas que se le encomienden. La persona capaz de instruir a la computadora usando algún lenguaje computacional, es llamado programador; se le llama programa al conjunto de instrucciones escritas en un lenguaje computacional. Cuando algún problema que requiera procesamiento de información es resuelto sin ayuda de una computadora, a la persona que lo resuelve de ahora en adelante le llamaremos sujeto de acción. Como ahora el problema va a ser solucionado con la ayuda de una computadora, es indispensable que el programador se ponga en lugar del sujeto de acción, identifique todas las acciones que éste llevaría a cabo y que posteriormente instruya a la computadora para que sea ésta quien haga el trabajo del sujeto de acción. Ahora bien, por una parte, está el sujeto de acción en una situación a resolver; por otra, está el programador que debe pensar como el sujeto de acción y también programar la computadora; y por otra, la misma computadora que, ejecutando un programa, resolverá el problema en lugar del sujeto de acción. Es conveniente definir ahora la interrelación de estos elementos. En primer lugar, la computadora es la que realizará una serie de instrucciones programadas por el programador para la correcta y rápida resolución del problema. En segundo lugar, el sujeto de acción sabe lo que requiere, y el programador debe entender eso perfectamente para que obtenga su objetivo. Por último, el programador va a instruir a la computadora. Pero para ello debe hacerlo con un 10 CAPÍTULO 2. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS 11 lenguaje que ella entienda, y, principalmente, con un orden de acciones adecuado para una correcta funcionalidad. Resumiendo, podría decirse que el programador es un traductor de las necesidades del sujeto de acción a acciones ejecutables por la computadora. Es posible que el sujeto de acción y el programador sean el mismo, cuando el programador requiera resolver una situación personal por medio de la computadora. Por el contrario, puede ser que el sujeto de acción, sea un conocido suyo, dueño de un negocio, y desee llevar un control sobre lo que vende diariamente, y usted, el programador, se permita ayudarle con un programa. Para esto tendría que ponerse de acuerdo con él en qué quiere, exactamente, y de qué información dispone para lograrlo. Entre mejor se logre esta comprensión de la situación, más rápido se llega a la solución de la misma. Un programador debe entonces tener tres características esenciales: 1) Ser capaz de analizar un problema hasta entenderlo a la perfección. 2) Saber enumerar una serie de pasos por medio de los cuales se va a llegar a la solución del problema, tomando en consideración las capacidades de la computadora. 3) Conocer un lenguaje de computación adecuado a la solución del problema. En este capítulo hablaremos de la metodología para la solución de problemas por medio de una computadora; antes comentaremos algunas de sus ventajas y desventajas. Como ventajas podemos citar que una computadora hace las cosas considerablemente rápido. Asimismo, tiene lenguajes con vocabularios que, aunque parcos, pueden ser increíblemente poderosos. Además, si se le instruyó correctamente, hace las cosas de manera perfecta. El inconveniente es que no está preparada para eventualidades. Por ejemplo si en la calle un perro ve que se le va a atravesar una bicicleta, éste puede detenerse aunque no se haya entrenado para ello; pero a una computadora se le debe programar contra todas las posibles condiciones del problema. Afortunadamente la computadora no tiene que cruzar la calle para ejecutar sus programas. El programador debe tener todas las características enumeradas anteriormente. No hay que olvidar que la práctica es fundamental para adquirir y/o afinar estas características. La práctica debe hacerse mediante una serie de pasos, llamados metodología para la solución de problemas por medio de la computadora, los cuales se enumeran a continuación: 1) 2) 3) 4) 5) 6) 7) 1) Definición del problema Planeación de la solución Algoritmo Diagrama de flujo Codificación y edición del programa Pruebas y depuración Documentación y mantenimiento DEFINICIÓN DEL PROBLEMA La definición del problema se centra en la elaboración de un texto que nos permitirá saber qué es lo que se pretende solucionar, y nos proporcionará información útil para el planteamiento de la solución. 12 PARTE I. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS En este libro el texto que compone la definición del problema se encontrará ya elaborado. Cabe mencionar que no siempre será útil la información que se proporcione para poder solucionar el problema. Para ejemplificar, analice la siguiente definición de un problema: Se pretende determinar cuánto mide el lado oeste de un terreno de 600 m2, que tiene forma rectangular y que el dueño conoce lo que mide el lado norte. Cabe mencionar que dentro de la superficie del terreno, en la parte central, existe un gran agujero que impide el paso, principalmente de norte a sur. Por lo anterior, nos damos cuenta que, puesto que no tenemos la necesidad de ir a medir el terreno, la información de la segunda oración es totalmente inútil. De hecho, para efectos de la solución, no nos afecta que algún despistado caiga en el agujero mencionado. 2) PLANEACIÓN DE LA SOLUCIÓN En este paso se debe entender por completo el problema, y dejar en claro cuál es la información útil que se nos da, qué otra nos hace falta y, con base en esto, determinar la mejor solución. Si nos hiciera falta información, en esta fase del problema se podría determinar que el problema no tiene solución. En esta fase también definimos formalmente lo que debemos entregar como resultado. Dado que esta información, una vez resuelto el problema, saldrá de la computadora, podemos decir que es una salida de información. De igual manera, la información adicional que necesitemos pedir, constituye una entrada de información hacia la computadora. Volviendo al ejemplo del terreno, definamos entonces cuáles son las entradas, salidas, datos adicionales, y solución al problema. SALIDA: Medida del lado oeste del terreno. ENTRADA: Necesitamos preguntarle al dueño cuánto mide el lado norte del terreno, pues no se da en la redacción de! problema. DATOS ADICIONALES DE QUE SE DISPONEN: La superficie total del terreno, que es de 600 m2. SOLUCIÓN: Dado que la superficie de un rectángulo está dada por la fórmula: superficie = lado A x lado B, tenemos como dato la medida de la superficie, 600 m2; también podemos decir, que el lado A es el lado oeste de nuestro terreno, mientras que el lado B vendría siendo el lado norte, por lo que la fórmula podría quedar de la siguiente manera: 600 = lado oeste x lado norte Puesto que el lado norte es una información que, una vez obtenida, podremos disponer de ella, podemos decir que: 600 lado oeste = lado norte CAPÍTULO 2. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS 13 Aplicando esta fórmula, podremos llegar a la solución. Observe que las unidades de la superficie del terreno han sido omitidas, pues la computadora puede realizar la operación aritmética, pero no el trabajo con unidades. Así que desde esta etapa se omitirá el uso de unidades. 3) ALGORITMO Algoritmo es una serie de pasos ordenados, encaminados a resolver un problema. Para establecer esta serie de pasos se requiere de una reflexión previa del problema dada por el .paso anterior (planeación de la solución). Además, se podrá observar que aunque en el paso anterior ya supimos qué fórmula aplicar para obtener la solución al problema del terreno, nada nos dice qué hacer antes y después de aplicar la fórmula. Las acciones que se pueden llevar a cabo en un algoritmo son las siguientes: Pedir datos, desplegar datos, evaluar condiciones y ejecutar operaciones. A continuación explicamos el uso de cada una de ellas. 1) Pedir datos Lo que una computadora puede pedir son números o palabras, que automáticamente son asignados a una zona de la memoria de la computadora, llamada como el programador quiere nombrarle. Puede ser una pequeña zona llamada número y que contenga al número 5, o puede ser una zona menos pequeña llamada oración que contenga la frase "Estoy aprendiendo computación". A estas zonas de memoria en donde se guardan datos se les denomina variables. Formato de petición de datos: PEDIR variable Ejemplos: PEDIR costo PEDIR edad PEDIR nombre 2) Desplegar datos Una computadora puede mostrarnos, por pantalla o impresora, números o palabras que, en su conjunto, nos den el resultado esperado. Probablemente estos números o palabras estén almacenados en variables creadas durante la ejecución del programa. Formato del despliegue de datos: Ejemplo: DESPLEGAR mensaje 14 PARTE I. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS DESPLEGAR variable DESPLEGAR mensaje / variable Ejemplo: DESPLEGAR "el valor excede a 200 000 pesos" DESPLEGAR edad DESPLEGAR "el nombre de la persona es": nombre 3) Evaluar condiciones La computadora es capaz de comparar números para saber si alguno es mayor, menor o igual que otro; también es capaz de comparar palabras para saber si alguna es más extensa o tiene precedencia alfabética sobre la otra, etcétera. El propósito de evaluar condiciones es decidir qué acción es la que va a seguir a continuación en caso de que nuestra condición se cumpla o no. Formatos para evaluar condiciones: SI condición ENTONCES conjunto de acciones DE OTRA FORMA conjunto de acciones SI condición ENTONCES conjunto de acciones Ejemplo: SI precio < 200 000 ENTONCES DESPLEGAR "El precio es accesible" DE OTRA FORMA DESPLEGAR "El precio es inaccesible" PEDIR precio-nuevo 4) Ejecutar operaciones La máquina puede realizar operaciones aritméticas guardando el resultado en alguna variable. También puede determinar un valor inicial para alguna variable. Formato para realizar operaciones: variable ←expresión numérica variable ← expresión alfanumérica Ejemplos: nueva-edad ← edad + 10 Lo cual significa que el valor de la variable edad, incrementado en 10, es almacenado CAPÍTULO 2. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS 15 en otra zona de la memoria llamada nueva-edad, con lo cual estamos creando una nueva variable. gastos-actuales ←56 000 Lo cual significa que la variable gastos-actuales simplemente toma el valor de 56 000. Volviendo al ejemplo del terreno, el algoritmo para resolver el problema es: 1) PEDIR lado-norte 2) lado-oeste ← 600/ lado-norte 3) DESPLEGAR "la longitud del lado oeste es", lado-oeste Al llevar a cabo este algoritmo se puede observar una vez más que: El paso 1 es una entrada de información; el paso 2 es una operación que ejecuta la computadora, y el paso 3 es una salida de información. 4) DIAGRAMA DE FLUJO Un diagrama de flujo está definido como la representación gráfica de un algoritmo. Un diagrama de flujo debe de hacerse porque resulta más fácil entender dibujos que entender un texto, sobre todo cuando el algoritmo tiende a hacerse grande. En un diagrama de flujo existen figuras con información dentro de cada una de ellas, con flechas que indican su secuencia. A las figuras les vamos a llamar de ahora en adelante bloques; existen bloques de varios tipos: A) Bloques terminales Se emplean para indicar el principio y el fin del diagrama de flujo. Su forma es: Si se escribe la palabra INICIO dentro del símbolo, sirve como el bloque indicador del inicio del diagrama de flujo. Si se escribe la palabra FIN, será el que indique que se ha terminado. Debe haber sólo un bloque de inicio y uno de fin en todo el diagrama de flujo. B) Bloques de entrada/salida Se emplean para introducir datos a la computadora o exteriorizarlos. El bloque de entrada de datos tiene la siguiente forma: 16 PARTE I. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS El bloque de salida de datos tiene la siguiente forma: Dentro de las figuras se anotan los datos que están entrando o saliendo, según el caso. C) Bloques de proceso En ellos se indica una acción imperativa o una operación aritmética. Su forma es: D) Bloques de decisión o condicionales Son preguntas del tipo SI o NO, que pueden alterar la secuencia en la ejecución de los bloques del diagrama de flujo, dependiendo si la respuesta es afirmativa o negativa. Su forma es: Dentro de la figura, se anota la pregunta. A la derecha se indica la acción o acciones que deben hacerse en el caso de que la respuesta a la pregunta sea afirmativa, mientras que por el lado izquierdo las acciones que deben hacerse en el caso de respuesta negativa. Un bloque condicional siempre debe terminar con un pequeño círculo que une al último bloque de la parte afirmativa con el último de la parte negativa. E) Bloques de conexión Son figuras que determinan que la secuencia de acciones en un diagrama continúa en alguna otra parte. Su forma es: CAPÍTULO 2. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS 17 Dentro de la figura se anota una letra o número para identificar un conector de otro. La función de los conectores depende de su forma. Si la forma es de este tipo: significa que la secuencia de los bloques continúa en donde se encuentre otro conector igual. Cuando se tienen problemas de espacio al escribir los diagramas estos conectores son muy útiles. Y cuando se tiene esta otra forma: implica que se seguirá con los bloques en donde se encuentre otro conector igual y al terminar la secuencia regresará al bloque que sigue al conector original. Una vez que se ha pasado el algoritmo a diagrama de flujo se debe probar su funcionalidad. Para esto, se anotan a un lado del diagrama las variables del problema y los valores que van tomando al ir siguiendo la secuencia del diagrama para checar que estén correctos. Si el programa tiene bloques condicionales se deben hacer tantas pruebas como combinaciones de condiciones haya. Volviendo al ejemplo del terreno el diagrama de flujo quedaría como se muestra en la figura 2.1. 5) CODIFICACIÓN Y EDICIÓN DEL PROGRAMA La codificación consiste en traducir el diagrama de flujo a instrucciones de un lenguaje de computadora, en nuestro caso BASIC. Al conjunto de instrucciones escritas en un lenguaje de computadora se le llama programa. La edición consiste en introducir el programa a la computadora por medio de un editor de textos. Debe cuidarse el aspecto de la sintaxis en la codificación de un programa, ya que las instrucciones deben tener un orden en la secuencia de las palabras y símbolos que las componen. Por ejemplo, en español no es lo mismo decir: El caballo blanco de Napoleón, que: Napoleón blanco de el caballo. Después de haber traducido a un programa en BASIC, se debe introducir a la computadora por medio de un editor de textos generalmente incluido con el lenguaje. 18 PARTE 1. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS Figura 2.1 6) PRUEBAS Y DEPURACIÓN Una vez que se tiene el programa introducido en la computadora, debe probarse exhaustivamente, ejecutando el programa hasta concluir que los resultados son los deseados y que no tiene errores. Para esto se deben preparar datos de prueba en papel, así como su solución para cotejarlo con la solución que obtenga la computadora. Si el programa tiene errores sintácticos éstos pueden corregirse simplemente consultando un libro de instrucciones del lenguaje. No así si el problema es de lógica, en cuyo caso debe revisarse y corregirse desde el algoritmo. 7) DOCUMENTACIÓN Y MANTENIMIENTO Una vez que el paso anterior ha sido completado, todos los pasos anteriores de la metodología de solución de problemas por medio de la computadora, deben pasarse en limpio y quedar archivados dentro de un folder llamado documentación. Para el paso 5 (codificación) debe obtenerse un listado del programa impreso por computadora, al igual que las pruebas que se hicieron en el paso 6. Si por algún motivo se llega a modificar el programa —generalmente porque cambian los requerimientos del problema— toda la documentación debe modificarse. Al proceso de mantener los programas y su documentación actualizados se le llama mantenimiento. Dado que tiempo después de haber hecho el programa ni el mismo programador puede recordar con exactitud cómo se resolvió determinado problema, la importancia de tener la documentación actualizada radica en su utilidad. CAPÍTULO 2. METODOLOGÍA PARA LA SOLUCIÓN DE PROBLEMAS 19 RESUMEN Programador: Persona capaz de instruir a la computadora usando algún lenguaje computacional. Sujeto de acción: Persona que resuelve tareas que requieran procesamiento de información sin ayuda de una computadora. El programador es la persona que traduce las necesidades del sujeto de acción a acciones ejecutables por la computadora y, por lo tanto, debe tener tres características esenciales: 1) Ser capaz de analizar un problema hasta entenderlo a la perfección. 2) Saber enumerar una serie de pasos por medio de los cuales se va a llegar a la solución del problema, tomando en consideración las capacidades de la computadora. 3) Conocer un lenguaje de computación adecuado a la solución del problema. La solución de problemas con ayuda de una computadora debe llevarse a cabo por medio de una metodología, cuyos pasos se enumeran a continuación: 1) 2) 3) 4) 5) 6) 7) Definición del problema Planeación de la solución Algoritmo Diagrama de flujo Codificación y edición del programa Pruebas y depuración Documentación y mantenimiento PARTE II LÓGICA COMPUTACIONAL CAPÍTULO 3 CONCEPTOS BÁSICOS OBJETIVOS 3.1 El alumno describirá los siguientes elementos necesarios para la solución de un problema: 3.1.1 Datos numéricos 3.1.2 Datos alfanuméricos 3.2 El alumno describirá y utilizará los siguientes elementos: 3.2.1 Constantes 3.2.2 Variables 3.3 El alumno describirá lo que es una expresión 3.3.1 El alumno explicará los elementos de una expresión — Operadores — Operandos 3.3.2 El alumno mencionará y usará los tipos de expresiones. — Aritméticas — Lógicas 3.3.3 El alumno explicará y aplicará los operadores: — Asociativos — Aritméticos — Relaciónales — Lógicos 23 CAPÍTULO 3 CONCEPTOS BÁSICOS Se ha visto ya que el objeto de la metodología para la solución de problemas es resolver problemas que requieran de procesamiento de información y que se pretende resolverlos con la ayuda de la computadora. Ahora bien, la manera de instruir a la computadora es por medio de un lenguaje computacional. Los lenguajes computacionales tienen sus reglas y es necesario saber algunos conceptos para entenderlas y así poder aplicarlas. Estos conceptos serán explicados a continuación tomando como referencia el lenguaje BASIC: 1. TIPOS DE DATOS Cuando se requiere de procesamiento de información, se pueden encontrar distintos tipos de datos que requieren ser procesados. Por ejemplo, para realizar operaciones aritméticas se requiere de datos de diferente tipo que los que se necesitarían para ordenar palabras alfabéticamente. Por lo tanto, podemos decir que los datos se clasifican en: A) Numéricos B) Alfanuméricos A) Numéricos Son datos cuyo contenido es una serie de dígitos (0 - 9) que en conjunto nos proporcionan un valor numérico, ya sea entero o real, y que pueden ser precedidos por un signo de + (positivo) o (negativo). Cuando se omite el uso del signo el dato se asume como positivo. Con ellos se puede realizar operaciones aritméticas o de conteo. Ejemplos; 1519.17 -32.5 1 0 24 CAPÍTULO 3. CONCEPTOS BÁSICOS 25 B) Alfanuméricos Son datos cuyo contenido son letras del abecedario, números o caracteres especiales, o bien una combinación de ellos. Aunque los datos alfanuméricos pueden contener números, no pueden ser usados para realizar operaciones aritméticas. Entre los caracteres especiales podemos encontrar: #, $, &, %, /, ", !, ?, ¡, =, -, +, x, [, ], {, }, etcétera. Cuando se hace referencia a este tipo de datos se deben encerrar entre comillas. Ejemplos; "Morelos Ote. # 23 - 7" "Benito Juárez" "16-45-19" "02/05/92" "Carlos Salinas de Gortari" 2. ZONAS DE MEMORIA Como se había visto, la memoria principal permite almacenar datos. Éstos, ya sean numéricos o alfanuméricos, se alojan en zonas de memoria para utilizarlos posteriormente. Estas zonas de memoria están formadas por un nombre para su identificación, y un contenido, el cual será el dato que se guarda en ellas. Por ejemplo, si el contenido es 15 y el nombre de la variable es edad, significa que hay una zona de memoria que se llama edad cuyo valor es 15. Los nombres de estas zonas de memoria se forman respetando las siguientes reglas: 1) El primer carácter debe ser una letra. 2) Los demás caracteres podrán ser letras, números o guiones; las letras no deben estar acentua das. 3) Si el tipo de dato que guarda (contenido) es alfanumérico, el nombre deberá llevar al final el signo $. Ejemplos: NOMBRE CONTENIDO salario nombre$ direccion$ inscripción 4000 "William Shakespeare" "Cuauhtémoc # 115,'Col. Narvarte" 500 NOTA: Obsérvese que en las zonas de memoria, nombre$ y direccion$, se incluye el signo $ en el nombre de la zona y el contenido se encierra entre comillas; esto se debe a que el contenido es un dato alfanumérico. También obsérvese que las variables direccion$ e inscripción no llevan acento. Las zonas de memoria se pueden clasificar en: A) Constantes B) Variables 26 PARTE II. LÓGICA C0MPUTAC10NAL A) Constantes Son zonas de memoria que guardan datos, los cuales no cambian durante la fase de procesamiento de información. Por ejemplo, si se desea obtener un reporte para cada uno de los empleados de una empresa, que incluya el nombre del empleado, la fecha y la cantidad de dinero que recibieron en la última semana, el dato fecha es importante para identificar la semana en que se recibió ese dinero y es constante, ya que es el mismo para todos ellos. B) Variables Son zonas de memoria cuyo contenido cambia durante la fase de procesamiento de información. Por ejemplo; si se desea obtener el número de trabajadores cuyo sueldo es mayor que 400, se necesitará una variable que lleve a cabo el conteo, cuyo valor inicial será de cero y éste se irá incrementando (variando) conforme vaya encontrando trabajadores que cumplan con la condición dada. 3. EXPRESIONES a) Definición Conjunto de operadores y operandos que producen un valor. b) Elementos de una expresión Una expresión está compuesta por operadores y operandos. Un operador es un símbolo o palabra que significa que se ha de realizar cierta acción entre uno o dos valores, llamados operandos. De modo general una expresión se escribe en cualquiera de las formas siguientes: operando 1 OPERADOR operando2 OPERADOR operando 1 4. TIPOS DE OPERADORES Existen cuatro tipos de operadores: A) B) C) D) Asociativos Aritméticos Relaciónales Lógicos Dependiendo del tipo de operadores que se usen en una expresión, ésta se convertirá en aritmética, lógica o relacional. CAPÍTULO 3. CONCEPTOS BÁSICOS 27 A) Asociativos El único operador asociativo es el paréntesis (), el cual permite indicar en qué orden deben realizarse las operaciones. Cuando una expresión se encuentra entre paréntesis, indica que las operaciones que están dentro de ellos deben realizarse primero. Si en una expresión se utilizan más de un paréntesis se deberá proceder primero con los que se encuentren más hacia el centro de la expresión. B) Aritméticos Son operadores que permiten realizar operaciones aritméticas entre operandos. El resultado que se obtiene al evaluar una expresión aritmética es un número. Al evaluar expresiones que contienen operadores aritméticos, se respeta una jerarquía en el orden en el que se aplican. Es decir, si se tiene una expresión aritmética con al menos dos operadores de distinta jerarquía, se deberá realizar primero una operación y luego la otra. La siguiente tabla muestra los operadores aritméticos ordenados de mayor a menor jerarquía: OPERADOR OPERACIÓN ^ Potenciación *, / Multiplicación, división +, Suma, resta Para resolver una expresión aritmética se deben seguir las siguientes reglas: 1) Primero se resuelven las expresiones que se encuentran entre paréntesis siguiendo estas mismas reglas. 2) Se procede aplicando la jerarquía de operadores. En caso de que haya dos operadores con la misma jerarquía se procede de izquierda a derecha. Por ejemplo, si se tiene la expresión (4+ 1)* 3 - 5 / 2 + 1 Primero se resuelve el paréntesis, por lo tanto el resultado parcial es: 5*3-5/2 + 1 Después de haber terminado con todos los paréntesis, se procede con lo demás, respetando la jerarquía de operadores, por lo cual, en este caso, se sigue con la multiplicación y división, pues la potenciación no se encuentra en esta expresión. Pero como la multiplicación y la división tienen la misma jerarquía, se realizará primero la multiplicación, que es la que está más a la izquierda; así quedaría: 15-5/2+ 1 28 PARTE II. LÓGICA COMPUTACIONAL Después se realiza la división: 15-2.5 + 1 A continuación se procede con la resta y queda: 12.5 + 1 Finalmente el resultado es: 13.5 Es muy importante señalar que si las expresiones aritméticas no se resuelven aplicando las reglas anteriores, se obtendrán resultados diferentes, como si cada persona decidiera hacerlo a su gusto; por eso, para asegurarse de expresar lo mismo, es importante respetar las reglas mencionadas. C) Relaciónales Son operadores que permiten comparar dos valores, sean numéricos o alfanuméricos. El resultado obtenido es un valor de verdad, que puede ser V (verdadero) o F (falso). La comparación entre un dato numérico y uno alfanumérico no puede llevarse a cabo. Los operadores relaciónales son los siguientes: OPERADOR OPERACIÓN = Igual que < >o>< Diferente que < Menor que > Mayor que <= Menor o igual que >= Mayor o igual que D) Lógicos Son operadores que permiten realizar las operaciones lógicas de conjunción, disyunción y negación. El resultado obtenido es un valor de verdad que puede ser V (verdadero) o F (falso). Los operadores lógicos se muestran a continuación, indicando la jerarquía de mayor a menor: OPERADOR OPERACIÓN NOT AND OR Negación Conjunción Disyunción Recordemos que la negación cambia el valor verdadero por el falso, y viceversa. CAPÍTULO 3. CONCEPTOS BÁSICOS 29 En la conjunción se necesitan dos valores verdaderos para producir otro verdadero; en cualquier otro caso se produce un valor de falso. En la disyunción, con cualquiera de los dos valores de los operadores, que sea verdadero, se obtiene un resultado de verdadero; en caso contrario el valor será falso. Las reglas para resolver las expresiones lógicas son las siguientes: 1) Se resuelven primero los paréntesis. 2) Se encuentran los valores de verdad de las expresiones relaciónales. 3) Se aplica la jerarquía de operadores lógicos. En caso de haber dos operadores iguales se procede la operación de izquierda a derecha. Por ejemplo, si se tiene la expresión NOT (2 > = 3) AND ( 5 > 3 OR 3 < 2) Primero se resuelven las expresiones relaciónales que estén dentro del paréntesis: NOT (F) AND (V OR F) Después se resuelven los paréntesis: NOT (F) AND (V) Después se resuelve la operación NOT, que tiene precedencia sobre la operación AND: V AND V Y el resultado final es: V lo que significa que el valor de verdad de la expresión es verdadero. A continuación se presentan problemas resueltos y propuestos para los distintos tipos de operadores. PROBLEMA RESUELTO DE OPERADORES ARITMÉTICOS Aplicando la jerarquía de operadores, encontrar el valor de la siguiente expresión. ( 4 * 1 / 2) ^ 2 * 3 – 2 ^ 2 + 1 Primero se resuelve el paréntesis, para lo cual es necesario respetar la jerarquía de operadores aritméticos; como la multiplicación y división tienen la misma prioridad, se procede de derecha a izquierda y queda: 30 PARTE II. LÓGICA COMPUTACIONAL (4 / 2) ^2 * 3 - 2 ^2 + 1 ^ ^ 2 *3 - 2 2 + 1 Después de terminar con todos los paréntesis, se procede, respetando la jerarquía de operadores, que con la potenciación: 4x3-4+1 Después se realiza la multiplicación: 12-4 + 1 A continuación se procede con la resta y queda: 8+1Y finalmente el resultado es: 9 PROBLEMAS PROPUESTOS DE OPERADORES ARITMÉTICOS Aplicando la jerarquía de operadores, encontrar el valor de cada una de las siguientes expresiones: 1. 2. 3. 4. 5. 4+l*5^2-l 9/3 + 4^2-5*l+9/-2 + 3 5/2 + 3-4*5/2 (4 + 1) * 5^ 2- 1 1 7 / 2 + 3 ^ 2 ^ 2-2 * 2 / 2 PROBLEMA RESUELTO DE OPERADORES RELACIÓNALES Y LÓGICOS Aplicando la jerarquía de operadores, encontrar el valor de verdad de la siguiente expresión, suponiendo que el valor de S es 5 y el valor de T es 70. NOT (S > 3 AND S <= 10) OR (T >= 100 AND T < 200) Primero se resuelven las expresiones relaciónales que estén dentro de los paréntesis; para esto es necesario primero sustituir el valor de las variables S y T: NOT (5 > 3 AND 5 <= 10) OR (70 >= 100 AND 70 < 200) NOT (V AND V ) OR (F AND V) CAPÍTULO 3. CONCEPTOS BÁSICOS 31 Después se resuelven los paréntesis: NOT (V) OR (F) Después se resuelve la operación NOT, que tiene precedencia sobre la operación OR: F OR F Y el resultado final es: F PROBLEMAS PROPUESTOS DE OPERADORES RELACIÓNALES Y LÓGICOS Aplicando la jerarquía de operadores, encontrar el valor de verdad de cada una de las siguientes expresiones: Para el problema 1 los valores para las variables son: M = 8, N = 9, R = 5, S = 5,T = 4 1. 2. 3. 4. 5. NOT ((M > N AND R > S ) OR (NOT (T < V AND S > M ))) (3x2^2-4/2 * l)>(3*2^-4/2 * 1 ) AND (5 > 9/3) (3>=3OR5<>5)ANDNOT(15/5+ 2O5) NOT (NOT ((3 - (-3)) * 2 > (3 - (-3) * 2 ) OR 1^3 * 2 > 6)) (3 > = 4 AND 5 > 3 AND 3 > 3) OR NOT (4 <= 4 OR 5 > 4 OR 6 >= 7) 32 PARTE II. LÓGICA COMPUTACIONAL RESUMEN Tipos de datos: A) Numéricos: son datos cuyo contenido es una serie de dígitos (0-9) que en conjunto nos proporcionan un valor numérico y que pueden ser precedidos por un signo de + (positivo) o - (negativo). Con ellos se puede realizar operaciones aritméticas o de conteo. B) Alfanuméricos: son datos cuyo contenido son letras del abecedario, números o caracteres especiales, o bien una combinación de ellos. Estos datos no pueden usarse para realizar operaciones aritméticas. Zonas de memoria: los datos, ya sean numéricos o alfanuméricos, se alojan en zonas de memoria principal con el objeto de utilizarlos posteriormente. Estas zonas de memoria están formadas por un nombre para su identificación y un contenido el cual será el dato que se guarda en ellas. Se pueden clasificar en: A) Constantes: son zonas de memoria que guardan datos, los cuales no cambian durante toda la fase de procesamiento de información. B) Variables: son zonas de memoria cuyo contenido cambia durante la fase de procesamiento de información. Expresiones: son un conjunto de operadores y operandos que producen un valor. Un operador es un símbolo o palabra que significa que se ha de realizar cierta acción entre uno o dos valores que son llamados operandos. Existen cuatro tipos de operadores: asociativos, aritméticos, relaciónales y lógicos. CAPÍTULO 4 TIPOS DE PROBLEMAS OBJETIVOS 4.1 El alumno describirá los siguientes tipos de problemas, de acuerdo a su estructura y mencionará sus características. 4.1.1 Secuenciales 4.1.2 Selectivos a) Simples b) Compuestos 4.1.3. Repetitivos a) Simples — Con un número determinado de iteraciones — Con un número indeterminado de iteraciones b) Compuestos 4.2 El alumno aplicará los primeros cuatro pasos de la metodología para la solución de problemas por medio de la computadora para resolver: 4.2.1 Problemas secuenciales 4.2.2 Problemas selectivos 4.2.3. Problemas repetitivos 33 CAPÍTULO 4 TIPOS DE PROBLEMAS Los tipos de problemas que podemos encontrar se clasifican según su estructura de la siguiente manera: 1) Secuenciales 2) Selectivos a) simples b) compuestos 3) Repetitivos a) simples b) compuestos c) múltiples A continuación definiremos cada uno de estos tipos de problemas y aplicaremos los primeros cuatro pasos de la metodología para la solución de problemas en cada uno de ellos. 1) PROBLEMAS SECUENCIALES Son problemas en los que, para su solución, se emplea una serie de acciones ejecutadas invariablemente en un orden secuencial. Problemas resueltos PROBLEMA 1 Aplicar los primeros cuatro pasos de la metodología de la solución de problemas por medio de la computadora para encontrar el área de un círculo de radio 5. Paso 1. Definición del problema: 34 CAPÍTULO 4. TIPOS DE PROBLEMAS 35 Encontrar el área de un círculo de radio 5. Paso 2. Planeación de la solución: El área de un círculo está dada por la fórmula área = pi x radio ^ 2 Si, por un lado, sabemos que la constante pi es igual a 3.1416, y por otro, que el radio del círculo es de 5, al sustituir estos valores en la fórmula obtendríamos: área = 3.1416 x 5^2 Al aplicar esta fórmula obtendremos la solución. Nos podemos percatar de que tenemos todos los datos para poder solucionar nuestro problema, por lo tanto no requeriremos de datos de entrada. SALIDA: Área del círculo ENTRADA: Ninguna DATOS ADICIONALES: Ninguno SOLUCIÓN: Aplicar la fórmula Área = 3.1416 x 5^2 Paso 3. Algoritmo: 1. area←3.1416 * 5^2 2. DESPLEGAR área El paso 1 implica: a) Una evaluación aritmética 3.1416 * 5^2, la cual produce un valor, y b) La asignación de este valor a la variable área. El paso 2 implica que el valor de la variable área sea desplegado por algún dispositivo de salida de la computadora, por el cual podremos ver la solución. Paso 4. Diagrama de flujo: El paso 1 del algoritmo es una operación aritmética por lo que le corresponde el bloque de proceso: y se lee "a la variable área se le asigna el valor del resultado de la operación 3.1416 * 5^2" El paso 2 implica una salida de datos, por lo que le corresponde el bloque de salida: y se lee "desplegar el valor de la variable área". El diagrama de flujo completo quedaría como se muestra en la figura 4.1. 36 PARTE II. LÓGICA COMPUTACIONAL Figura 4.1 Y lo probamos de la siguiente manera: 1) Escribir a un lado del diagrama los nombres de las variables utilizadas. En este caso sólo existe la variable área. 2) A la derecha de cada variable se escribe el símbolo de asignación "←". 3) A la derecha del símbolo de asignación se van escribiendo los valores que van tomando las variables a lo largo de la prueba del diagrama, separados por comas (,). Entonces, la prueba quedaría como en la figura 4.2. Como el único valor que toma la variable área está dado por la operación 3.1416 * 5^2, y esto es igual a 78.54; lo anotamos a la derecha de la variable y del símbolo de asignación, por lo que podemos decir que el diagrama de flujo está asignando el valor 78.54 a la variable área. A continuación, en el siguiente bloque este único valor que tomó la variable área es desplegado como la solución del problema que da el diagrama de flujo. El último bloque indica el fin del diagrama de flujo. NOTA: LOS pasos siguientes de la metodología (5 a 7) podrán ser concluidos en el capítulo siguiente. PROBLEMA 2 Modificar el problema anterior para que sea capaz de calcular el área de un círculo de cualquier radio requerido. Paso 1. Definición del problema: Encontrar el área de un círculo con un radio cualquiera. CAPÍTULO 4. TIPOS DE PROBLEMAS 37 área ←78.54 Figura 4.2 Paso 2. Planeación de la solución: Se resuelve con la misma fórmula del problema anterior: Área = pi x radio^2 Sólo que en esta ocasión desconocemos el valor del radio, por lo que tendremos que pedirlo como dato de entrada en el problema. SALIDA: área ENTRADA: radio DATOS ADICIONALES: Ninguno SOLUCIÓN: Aplicar la fórmula Área = pi x radio^2 NOTA: Si bien el término "cualquier radio" nos lleva a pensar en que podemos definir, en nuestro diagrama de flujo, el radio que queramos y sobre éste, calcular la fórmula, tenemos que pensar en "cualquier radio" como un término genérico, no particular. Así, nuestro diagrama de flujo puede ser utilizado cuantas veces se quiera utilizando cada vez un "radio cualquiera", con valores distintos dados como datos de entrada. Paso 3. Algoritmo: 1. PEDIR radio ^ 2. área ←3.1416 * radio 2 38 PARTE II. LÓGICA COMPUTACIONAL 3. DESPLEGAR área Nótese que si elimináramos el paso 1, al tratar de aplicar la fórmula nos percataríamos de que nos falta que radio tenga algún valor, por lo que estaría mal hecho el algoritmo. Así pues, en el paso 1 la computadora pedirá, una vez elaborado el programa, un valor para la variable radio, que será introducido por algún dispositivo de entrada, y con esto en la fórmula siguiente no habrá problemas para calcular el área. NOTA: En una fórmula no se pueden ocupar variables a las que no se les haya asignado previamente un valor. Paso 4, Diagrama de flujo (Fig. 4.3). Prueba 1 radio ←5 área ←78.54 Prueba 2 radio ← 8 CAPÍTULO 4. TIPOS DE PROBLEMAS 39 área←201.0624 PROBLEMA 3 Determinar el área y perímetro de un rectángulo cualquiera. Paso 1. Definición del problema: Encontrar el área y perímetro de un rectángulo cualquiera. Paso 2. Planeación de la solución: La fórmula para encontrar el perímetro de un rectángulo es: perímetro = lado1 x 2 + lado2 x 2, y la fórmula para calcular el área es: área = lado1x Iado2; de lo cual nos damos cuenta que nos hacen falta los datos lado1y Iado2, que tendremos que pedir como entrada. SALIDAS: perímetro, área ENTRADAS: lado1, lado2 DATOS ADICIONALES: Ninguno SOLUCIÓN: Aplicar las fórmulas: perímetro = lado1 x 2 + lado2 x 2 área = lado1x lado2 Paso 3. Algoritmo: 1. 2. 3. 4. 5. 6. PEDIR lado1 PEDIR lado2 perímetro ← lado1 * 2 + lado2 * 2 área ←lado1 * lado2 DESPLEGAR perímetro DESPLEGAR área Como los pasos 1 y 2 implican la misma acción y están secuenciales, pueden reducirse a un solo paso. Lo mismo ocurre con los pasos 5 y 6. 1. 2. 3. 4. PEDIR lado1, lado2 perímetro ←lado1* 2 +lado2 * 2 área ← lado1*lado2 DESPLEGAR perímetro, área 40 PARTE II. LÓGICA COMPUTACIONAL Figura 4.4 Paso 4. Diagrama de flujo (Fig. 4.4). Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.4) para verificar su funcionalidad. PROBLEMA 4 Obtener el promedio de edades de 3 personas. Paso 1. Definición del problema: Obtener el promedio de edades de 3 personas. Paso 2. Planeación de la solución: Para obtener un promedio se requiere sumar las cantidades implicadas y dividir la suma entre el número de estas cantidades. En este caso, por ser tres cantidades, la fórmula es la siguiente: I ' CAPÍTULO 4. TIPOS DE PROBLEMAS 41 promedio = (edad1 + edad2 + edad3) / 3 Nótese que la suma se encuentra agrupada con un paréntesis para indicar que ésta se debe hacer primero que la división. Si el paréntesis no existiera únicamente dividiría a edad3 y este resultado lo sumaría a las otras dos edades. En esta fórmula son desconocidas edad1, edad2 y edad3, por lo cual deberán ser pedidas como datos de entrada. SALIDAS: promedio ENTRADAS: edad1, edad2, edad3 DATOS ADICIONALES: Ninguno SOLUCIÓN: Aplicar la fórmula: promedio = (edad1 + edad2 + edad3) / 3 Paso 3. Algoritmo: 1. PEDIR edad1, edad2, edad3 2. promedio ← (edad1 + edad2 + edad3 ) / 3 3. DESPLEGAR promedio Paso 4. Diagrama de flujo (Fig. 4.5). Figura 4.5 42 PARTE II. LÓGICA COMPUTACIONAL Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.5) para verificar su funcionalidad. PROBLEMA 5 Suponga que un individuo decide invertir su capital en un banco y desea saber cuánto dinero ganará después de un mes si el banco paga a razón de 2% mensual. Paso 1. Definición del problema: Obtener cuánto dinero ganará un individuo después de un mes si el banco paga a razón de 2% mensual. Paso 2. Planeación de la solución: Para obtener la cantidad de dinero que el individuo ganará es necesario obtener el 2% de la cantidad invertida. Un 2% significa 2/100 lo cual es equivalente a 0.02; por lo tanto, para obtener la ganancia sólo hay que multiplicar la cantidad invertida por 0.02. Debido a que la cantidad invertida es un dato desconocido, éste se debe pedir como entrada. SALIDAS: ganancia ENTRADA: cantidad invertida DATOS ADICIONALES: 2% de interés mensual SOLUCIÓN: Aplicar la siguiente fórmula: ganancia = cantidad invertida x 0.02 Paso 3. Algoritmo: Para simplificar, en este problema llamaremos: g al dato ganancia ci al dato cantidad invertida 1. PEDIR ci 2. g← ci * 0.02 3. DESPLEGAR g Paso 4. Diagrama de flujo (Fig. 4.6): Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.6) para verificar su funcionalidad. PROBLEMA 6 Un vendedor recibe un sueldo base, más un 10% extra por comisiones de sus ventas. El vendedor desea saber cuánto dinero obtendrá por concepto de comisiones por las tres ventas que realizó en el mes, y el total que recibirá en el mes tomando en cuenta su sueldo base y sus comisiones. CAPÍTULO 4. TIPOS DE PROBLEMAS 43 Figura 4.6 Paso1. Definición del problema: Obtener la cantidad de dinero que obtendrá un vendedor por concepto de comisiones por tres ventas realizadas en el mes, y el total de dinero que recibirá en el mes por sueldo y comisiones. Se sabe que el vendedor recibe un sueldo base y un 10% extra por comisiones de sus ventas. Paso 2. Planeación de la solución: Para obtener la cantidad de dinero por concepto de comisiones es necesario saber la cantidad de cada una de las tres ventas, para poder sumarlas y obtener el total de sus ventas en ese mes. Posteriormente sobre el total de ventas podremos aplicar el 10% para obtener las comisiones correspondientes. Para obtener la cantidad total de dinero que recibirá es necesario sumar las comisiones obtenidas al sueldo base. Debido a que los datos de las tres ventas y el sueldo base son desconocidos, éstos serán las entradas. SALIDAS: cantidad a recibir por comisiones, cantidad total a recibir. ENTRADAS: cantidad de venial, cantidad de venta2, cantidad de venta3, sueldo base. DATOS ADICIONALES: la comisión es 10% sobre las ventas del mes. SOLUCIÓN: Aplicar las siguientes fórmulas: total de ventas = venta1 + venta2 + venta3 comisión = total de ventas x 0.10 total a recibir = sueldo base + comisión 44 PARTE II. LÓGICA COMPUTACIONAL Paso 3. Algoritmo: De ahora en adelante llamaremos: tv c tr sb v1 v2 v3 1. 2. 3. 4. 5. a a a a a a a total de ventas comisión total a recibir sueldo base venta 1 venta 2 venta 3 PEDIR v1, v2, v2 tv ←v1 + v2 + v3 c←tv *0.10 tr ←sb + c DESPLEGAR c, tr Paso 4. Diagrama de flujo (Fig. 4.7). Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.7) para verificar su funcionalidad. PROBLEMA 7 Una tienda ofrece un descuento del 15% sobre el total de la compra y un cliente desea saber cuánto deberá pagar finalmente por su compra. Paso 1. Definición del problema: Obtener la cantidad de dinero que tendrá que pagar un cliente, si la tienda ofrece un 15% de descuento sobre el total de la compra. Paso 2. Planeación de la solución: Para obtener el descuento es necesario conocer la cantidad total de la compra, y sobre ésta aplicar el 15%. Posteriormente este descuento deberá ser sustraído de la cantidad total de compra para así obtener la cantidad con descuento, que es la que el cliente pagará. El único dato desconocido es la cantidad total de la compra. SALIDAS: cantidad a pagar ENTRADAS: total de la compra DATOS ADICIONALES: El descuento equivale al 15% del total de la compra SOLUCIÓN: Aplicar las siguientes fórmulas: descuento = total de la compra x 0.15 total a pagar = total de la compra - descuento CAPÍTULO 4. TIPOS DE PROBLEMAS Figura 4.7 Paso 3. Algoritmo: De ahora en adelante llamaremos: tc a total de la compra d a descuento tp a total a pagar 1. 2. 3. 4. PEDIR tc d←tc * 0.15 tp←tc-d DESPLEGAR tp Paso 4. Diagrama de flujo (Fig. 4.8). 45 46 PARTE II. LÓGICA COMPUTACIONAL Figura 4.8 Este problema también se podría solucionar de la siguiente manera: Paso 2. Planeación de la solución: Dado que el descuento es del 15% sobre el total de la compra podemos visualizar al 85% restante como la cantidad total a pagar. SALIDAS: cantidad a pagar ENTRADAS: total de la compra DATOS ADICIONALES: El descuento equivale al 15% del total de la compra. SOLUCIÓN: Aplicar la siguiente fórmula: total a pagar = total de la compra x 0.85 Paso 3. Algoritmo: De ahora en adelante llamaremos: tc a total de la compra tp a total a pagar CAPÍTULO 4. TIPOS DE PROBLEMAS 47 Figura 4.9 1. PEDIR tc 2. tp ← tc * 0.85 3. DESPLEGAR tp Paso 4. Diagrama de flujo (Fig. 4.9): Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.9) para verificar su funcionalidad. PROBLEMA 8 Un alumno desea saber cuál será su calificación final en la materia de computación. Dicha calificación se compone de los siguientes porcentajes: 55% del promedio de sus tres calificaciones parciales 30% de la calificación del examen final 15% de la calificación de un trabajo final Paso 1. Definición del problema: Obtener la calificación final en una materia si ésta se compone de los siguientes porcentajes: 55% del promedio de sus tres calificaciones parciales 30% de la calificación del examen final 48 PARTE II. LÓGICA COMPUTACIONAL 15% de la calificación de un trabajo final Paso 2. Planeación de la solución: Para obtener el porcentaje correspondiente a sus calificaciones parciales, es necesario conocer las calificaciones obtenidas, promediarlas y posteriormente aplicar el 55%. Para obtener el porcentaje correspondiente al examen final es necesario aplicar el 30% sobre la calificación obtenida en el examen final, y para obtener el porcentaje correspondiente al trabajo final será necesario aplicar el 15% sobre la calificación obtenida en éste. Finalmente para obtener la calificación final del curso será necesario sumar las cantidades obtenidas con los porcentajes. Los datos que se desconocen son: calificación parcial1, calificación parcial2, calificación parcial3, calificación del examen final y calificación del trabajo final. SALIDAS: calificación final del curso ENTRADAS: calificación parcial1, calificación parcial2, calificación parcial3, calificación de examen final, calificación del trabajo final DATOS ADICIONALES: El promedio de calificaciones parciales equivale al 55% de la calificación final. El examen final equivale al 30% de la calificación final. El trabajo final equivale al 15% de la calificación final. SOLUCIÓN: Aplicar las fórmulas: promedio de parciales = (parcial1 + parcial2 + parcial3) / 3 porcentaje de parciales = promedio de parciales x 0.55 porcentaje de examen final = examen final x 0.30 porcentaje de trabajo final = trabajo final x 0.15 calificación final = porcentaje de parciales + porcentaje de examen final + porcentaje de trabajo final Paso 3. Algoritmo: De ahora en adelante llamaremos: p1 p2 p3 p ppa ef pef tf ptf cf a a a a a a a a a a calificación del parcial 1 calificación del parcial2 calificación del parcial3 promedio de parciales porcentaje de parciales calificación del examen porcentaje de examen calificación del trabajo porcentaje del trabajo calificación final del curso CAPITULO 4. 1. 2. 3. 4. 5. 6. 7. TIPOS DE PROBLEMAS 49 PEDIR p1,p2,p3,ef,tf p ← (pl + p2 + p3) / 3 ppar ← p * 0.55 pef ←ef * 0.30 p tf ← tf *0.1 5 cf ←ppar + pef + ptf DESPLEGAR cf NOTA: Obsérvese que el paso 2 de este algoritmo requiere del proceso aplicado en el problema 4. Paso 4. Diagrama de flujo (Fig. 4.10): Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.10) para verificar su funcionalidad. PROBLEMA 9 Un maestro desea saber qué porcentaje de hombres y qué porcentaje de mujeres hay en un grupo de estudiantes. Paso 1. Definición del problema: Obtener el porcentaje de hombres y de mujeres que hay en un grupo de estudiantes. Paso 2. Planeación de la solución: En primer lugar es necesario obtener el número de estudiantes que hay en el grupo, lo cual representará el 100%. Para obtener el número de estudiantes del grupo es necesario saber cuántos hombres y cuántas mujeres hay en el grupo. Debido a que el número total de alumnos del grupo representa el 100% podemos establecer una regla de 3 que nos llevaría a obtener el porcentaje de hombres que hay en el grupo. La regla de 3 quedaría de la siguiente manera: 100% — total de alumnos del grupo x — número de hombres que hay en el grupo Por lo tanto para obtener el porcentaje de hombres que hay en el grupo la fórmula a aplicar sería la siguiente: porcentaje de hombres = (número de hombres que hay en el grupo x 100) / total de alumnos del grupo De la misma manera se procede para obtener el porcentaje de mujeres, y la fórmula quedaría así: porcentaje de mujeres = (número de mujeres que hay en el grupo x 100) / total de alumnos del grupo 50 PARTE II. LÓGICA COMPUTAC1ONAL Figura 4.10 SALIDAS: porcentaje de hombres, porcentaje de mujeres ENTRADAS: número de hombres, número de mujeres DATOS ADICIONALES: Ninguno SOLUCIÓN: Aplicar las fórmulas: CAPÍTULO 4. TIPOS DE PROBLEMAS 51 porcentaje de hombres = (número de hombres que hay en el grupo x 100) / total de alumnos del grupo porcentaje de mujeres = (número de mujeres que hay en el grupo x100) / total de alumnos del grupo Paso 3. Algoritmo: De ahora en adelante llamaremos: nh a nm a ph a pm a ta a 1. 2. 3. 4. 5. número de hombres que hay en el grupo número de mujeres que hay en el grupo porcentaje de hombres porcentaje de mujeres total de alumnos PEDIR nh, nm ta ← nh + nm ph ←nh * 100 / ta pm ← nm * 100 / ta DESPLEGAR ph, pm NOTA: Obsérvese que en este problema no es necesario el uso de paréntesis para indicar el orden de las operaciones, debido a la jerarquía de operadores aritméticos. Paso 4. Diagrama de flujo (Fig. 4.11): Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.11) para verificar su funcionalidad. Ejercicio: Buscar otra opción de solución a este problema y aplicar los primeros cuatro pasos de la metodología de la solución de problemas. Problemas propuestos Usando los primeros cuatro pasos de la metodología de la solución de problemas por medio de la computadora, resuelva los siguientes problemas: 1. Dada una cantidad en pesos, obtener la equivalencia en dólares, asumiendo que la unidad cambiaría es un dato desconocido. 2. La presión, el volumen y la temperatura de una masa de aire se relacionan por la fórmula: masa = (presión x volumen) / (0.37 x (temperatura + 460)) 52 PARTE I I. LÓGICA COMPUTAC1ONAL Figura 4.11 Obtener la masa de aire de un neumático de automóvil que tiene un volumen de 2 pies cúbicos y una presión y temperatura indeterminadas. 3. Calcular el número de pulsaciones que una persona debe tener por cada 10 segundos de ejercicio, si la fórmula es: número de pulsaciones = (220 - edad) / 10 4. 5. Calcular el nuevo salario de un obrero si obtuvo un incremento del 25% sobre su salario anterior. En un hospital existen tres áreas: Ginecobstetricia, Pediatría y Traumatología. El presupuesto anual del hospital se reparte conforme a la siguiente tabla: CAPÍTULO 4. Área 7. 8. 9. 53 Porcentaje del presupuesto Ginecobstetricia Traumatología Pediatría 6. TIPOS DE PROBLEMAS 40% 30% 30% Obtener la cantidad de dinero que recibirá cada área, para cualquier monto presupuestal. El dueño de una tienda compra un artículo a un precio determinado. Obtener el precio en que lo debe vender para obtener una ganancia del 30%. Todos los lunes, miércoles y viernes, una persona corre la misma ruta y cronometra los tiempos obtenidos. Determinar el tiempo promedio que la persona tarda en recorrer la ruta en una semana cualquiera. Tres personas deciden invertir su dinero para fundar una empresa. Cada una de ellas invierte una cantidad distinta. Obtener el porcentaje que cada quien invierte con respecto a la cantidad total invertida. Un alumno desea saber cuál será su promedio general en las tres materias más difíciles que cursa, y cuál será el promedio que obtendrá en cada una de ellas. Estas materias se evalúan como se muestra a continuación: La calificación de Matemáticas se obtiene de la siguiente manera: Examen 90% Promedio de tareas 10%. En esta materia se pidió un total de tres tareas. La calificación de Física se obtiene de la siguiente manera: Examen 80% Promedio de tareas 20% En esta materia se pidió un total de dos tareas. La calificación de Química se obtiene de la siguiente manera: Examen 85% Promedio de tareas 15% En esta materia se pidió un total de tres tareas. 2) PROBLEMAS SELECTIVOS Las soluciones de este tipo de problemas son una serie de acciones en las que la ejecución de alguna dependerá de que se cumplan una o varias condiciones. Se identifican porque en la fase de solución del problema existe algún punto en el cual es necesario establecer una pregunta, para decidir si ciertas acciones deben realizarse o no. Para solucionar este tipo de problemas será necesario evaluar una o más condiciones. Por eso, los problemas selectivos se clasifican en: a) Simples b) Compuestos 54 PARTE I I. LÓGICA COMPUTACIONAL 2a) Problemas selectivos simples Se identifican porque están compuestos únicamente de una condición. Problemas resueltos: PROBLEMA 1 Determinar si un alumno aprueba o reprueba un curso, sabiendo que aprobará si su promedio de tres calificaciones es mayor o igual a 7; reprueba en caso contrario. Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: Lo primero que debe obtenerse es el promedio del alumno; se calcula con base en la siguiente fórmula: promedio = (calificación1 + calificación2 + calificación3) / 3 Puesto que los datos calificación1, calificación2 y calificación3 son desconocidos, éstos representarán las entradas del problema. El problema plantea dos opciones: que el alumno apruebe o que el alumno repruebe, lo cual se determina con base en el promedio obtenido. En este caso la salida será un mensaje que indique si el alumno está aprobado o reprobado. Por ello tendremos que usar el bloque condicional que, como se había mencionado, son preguntas que pueden alterar la secuencia de ejecución de las instrucciones dependiendo de que la condición planteada por la pregunta se cumpla o no. En este caso usaremos un bloque condicional pues si el promedio SI es mayor o igual a 7, sucederá una serie de acciones; y en caso de que el promedio NO sea mayor o igual que 7 sucederá otra serie de acciones. Para plantear esta condición utilizaremos el formato condicional ya visto: SI condición ENTONCES conjunto de acciones DE OTRA FORMA conjunto de acciones El cual para este ejemplo quedaría: SI promedio > = 7 ENTONCES DESPLEGAR "el alumno está aprobado" DE OTRA FORMA DESPLEGAR "el alumno está reprobado" SALIDAS: "el alumno está reprobado" o "el alumno está aprobado" ENTRADAS: calificación1, calificación2, calificación3 CAPÍTULO 4. TIPOS DE PROBLEMAS 55 DATOS ADICIONALES: Un alumno aprueba si su promedio es mayor o igual que 7; y en caso contrario reprueba. SOLUCIÓN: Aplicar la fórmula: promedio = (calificación1 + calificación2 + calificación3) / 3 Aplicar la condicional: SI promedio > = 7 ENTONCES DESPLEGAR "el alumno está aprobado" DE OTRA FORMA DESPLEGAR "el alumno está reprobado" Paso 3. Algoritmo: De. ahora en adelante llamaremos: c1 c2 c3 p a a a a calificación 1 calificación2 calificación3 promedio 1. PEDIR c1,c2,c3 2. p ← (c1 + c2 + c3) / 3 3. SI p > = 7 ENTONCES DESPLEGAR "el alumno está aprobado" DE OTRA FORMA DESPLEGAR "el alumno está reprobado" Paso 4. Diagrama de flujo: Como se había visto, el símbolo que representa la condicional es: Dentro de la figura, se anota la pregunta. A la derecha se indica la acción o acciones que deben hacerse en el caso de que la respuesta a la pregunta sea afirmativa, mientras que por el lado izquierdo las acciones que deben hacerse en caso de respuesta negativa. Por lo tanto el diagrama de flujo quedaría como se indica en la figura 4.12. En el diagrama se puede observar claramente cómo el orden en el que se ejecutan las instrucciones es secuencial, hasta antes de llegar a la condicional, pero en la condicional el orden varía dependiendo de si la condición es verdadera o falsa, es decir, si el promedio SI es mayor o igual a 7 o el promedio NO es mayor o igual a 7. Note que el final de las partes verdadera y falsa de la condición convergen en un pequeño círculo que nos indica el término del bloque condicional. 56 PARTE II. LÓGICA COMPUTACIONAL Figura 4.12 Prueba 1 c1 ←8 c2 ←9 c3 ←9 p ← 8.66 salida: " el alumno está aprobado" Prueba 2 c1 ←7 c2 ←6 c3 ←6 p ←6.33 salida: " el alumno está reprobado" CAPÍTULO 4. TIPOS DE PROBLEMAS 57 Obsérvese que en la prueba 1, la secuencia que el diagrama sigue es por el lado derecho del bloque condicional, lo que indica que la condición sí se cumplió, pues el promedio obtenido sí es mayor o igual que 7. En la prueba 2 la secuencia seguida es por el lado izquierdo del bloque condicional pues el promedio obtenido no es mayor o igual que 7. Al realizar estas pruebas se puede observar que el diagrama de flujo sí resuelve todas las opciones que puedan presentarse, pues se han realizado pruebas para cada una de las posibilidades. PROBLEMA 2 En un almacén se hace un 20% de descuento a los clientes cuya compra supere los $1000. ¿Cuál será la cantidad de dinero que pagará una persona por su compra? Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: Para determinar si el cliente alcanza descuento o no, necesitamos saber cuánto gastó en total. Como el dato no es proporcionado en la definición del problema se convertirá en dato de entrada. SALIDAS: Total a pagar ENTRADAS: Total de la compra DATOS ADICIONALES: Se otorgará un 20% de descuento si la compra supera los $1000. SOLUCIÓN: Aplicar la condicional: SI Total de la compra > 1000 ENTONCES descuento = 0.2 DE OTRA FORMA descuento = 0.0 Aplicar la fórmula: pago = compra - compra Paso 3. Algoritmo: De ahora en adelante llamaremos: compra a TOTAL DE LA COMPRA desc a DESCUENTO pago a TOTAL A PAGAR 1. PEDIR compra 2. SI compra > 1000 ENTONCES desc ← 0.2 DE OTRA FORMA desc ← 0.0 3. pago ← compra - compra*desc 4. DESPLEGAR pago x descuento 58 PARTE II. LÓGICA COMPUTACIONAL Paso 4. Diagrama de flujo (Fig. 4.13). Observe que el bloque condicional: lleva a cabo la acción desc ← 0.2 si la condición se cumple, esto es, si el valor de compra excede a 1000. La acción desc ← 0.0 se lleva a cabo, si esta misma condición no se cumple, esto es, si el valor de compra es menor o igual a 1000. CAPÍTULO 4. TIPOS DE PROBLEMAS 59 Al final, se haya ejecutado un proceso o el otro, las acciones del condicional convergen en un pequeño círculo que le da fin y continúa con el siguiente bloque de proceso. Prueba 1 Compra ← 2500 desc ← 0.2 Pago ← 2000 Prueba 2 Compra ← 700 desc ← 0 Pago ← 700 Prueba 3 Compra ← 1000 desc ← 0 Pago ← 1000 Obsérvese que en la prueba 1 la secuencia que el diagrama sigue es por el lado derecho del bloque condicional, lo que indica que la condición sí se cumplió pues el monto de la compra es mayor que 1000. En la prueba 2 la secuencia seguida es por el lado izquierdo del bloque condicional pues el monto de la compra no es mayor que 1000. En la prueba 3 la secuencia también es por el lado izquierdo ya que el monto de la compra tampoco es mayor que 1000. Al realizar estas pruebas se puede observar que el diagrama de flujo sí resuelve todas las opciones que puedan presentarse, ya que se han realizado pruebas para cada una de las posibilidades. Otra manera de resolver este problema se muestra en la figura 4.14. Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.14) para verificar su funcionalidad. PROBLEMA 3 Un obrero necesita calcular su salario semanal, el cual se obtiene de la siguiente manera: Si trabaja 40 horas o menos se le paga $4 por hora. Si trabaja más de 40 horas se le paga $4 por cada una de las primeras 40 horas y $6 por cada hora extra. Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: Para poder determinar el salario del obrero es importante determinar si trabajó horas extras o no, lo cual se determina de la siguiente manera: si las horas trabajadas exceden de 40 significa que SÍ trabajó horas extras y en caso de que las horas trabajadas sean menores o iguales que 40 significa que NO trabajó horas extras. 60 PARTE II. LÓGICA COMPUTAC1ONAL Figura 4.14 Como se habrá observado, este problema plantea dos posibilidades: que el obrero SÍ haya trabajado horas extras y que el obrero NO haya trabajado horas extras. Es importante establecerlo porque la serie de acciones que se efectúan en uno o en otro caso son distintas. El uso de una condicional nos ayuda a plantear estas dos posibilidades. En caso de que el obrero SÍ haya trabajado horas extras, las acciones que tendrían que realizarse serían: — Calcular horas extras trabajadas aplicando la fórmula: horas extras = horas trabajadas - 40 Lo cual significa que las horas extras serán todas las que excedan de 40. — Calcular salario de la siguiente manera: salario = (horas extras x 6) + (40 x 4) CAPÍTULO 4. TIPOS DE PROBLEMAS 61 Lo cual significa que lo que se paga por las horas extras que haya trabajado es de $6 y las primeras 40 horas se le pagan a $4. En caso de que el obrero NO haya trabajado horas extras las acciones que se llevarían a cabo son: —Calcular salario aplicando la siguiente fórmula: salario = horas trabajadas x 4 El único dato que se desconoce y que no puede ser calculado a partir de otros es el de horas trabajadas, por lo cual constituirá la única entrada del problema. SALIDAS: salario ENTRADAS: horas trabajadas DATOS ADICIONALES: la hora extra se paga a $6 y la hora normal se paga a $4. SOLUCIÓN: Aplicar la condicional: SI horas trabajadas > 40 ENTONCES horas extras = horas trabajadas - 40 salario = (horas extras x 6) + (40 x 4) DE OTRA MANERA salario = horas trabajadas x 4 O bien aplicar la condicional: SI horas trabajadas < = 40 ENTONCES salario = horas trabajadas x 4 DE OTRA MANERA horas extras = horas trabajadas - 40 salario = (horas extras x 6) + (40 x 4) Ahora se aplicarán los pasos 3 y 4 utilizando la primera condicional; que será ejercicio para el lector resolverlo aplicando la segunda condicional. Paso 3. Algoritmo: De ahora en adelante llamaremos: ht a horas trabajadas he a horas extras s a salario 1. PEDIR ht 2. SI ht > 40 ENTONCES he ← ht - 40 s ←he*6 + 40*4 DE OTRA MANERA 62 PARTE 11. LÓGICA COMPUTACIONAL Figura 4.15 s ← ht * 4 3. DESPLEGAR s Paso 4. Diagrama de flujo (Fig. 4.15). Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.15) para verificar su funcionalidad. PROBLEMA 4 Un hombre desea saber cuánto dinero se generará por concepto de intereses sobre la cantidad que CAPÍTULO 4. TIPOS DE PROBLEMAS 63 tiene en inversión en el banco. Él decidirá reinvertir los intereses siempre y cuando estos excedan a $7000, y en ese caso desea saber cuánto dinero tendrá finalmente en su cuenta. Paso 1. Definición del problema: Igual a la redacción del problema Paso 2. Planeación de la solución: Lo primero que debe obtenerse son los intereses que se generaron a partir de la cantidad que el hombre tiene en inversión; para esto se aplicaría la siguiente fórmula: intereses = cantidad en inversión x porcentaje de interés El problema plantea dos posibilidades: que el hombre reinvierta los intereses o que no los reinvierta; lo que lo llevaría a tomar esta decisión es que los intereses excedan o no de $7000. Si los intereses excedieran a $7000 la acción que sucedería es: cantidad final en la cuenta = cantidad en inversión + intereses Si los intereses no excedieran a $7000, no sucedería ninguna acción pues éstos no se reinvertirían. Se puede observar que los datos que se desconocen son: cantidad en inversión y porcentaje de interés que está dando el banco, por lo cual éstas serían las entradas del problema. SALIDAS: cantidad final en la cuenta, intereses ENTRADAS: cantidad en inversión, porcentaje de interés DATOS ADICIONALES: Los intereses se reinvertirán en caso de que excedan a $7000 y no se reinvertirán en caso contrario. SOLUCIÓN: — Aplicar la fórmula: intereses = cantidad en inversión x porcentaje de interés —Aplicar la condicional: SI intereses > 7000 entonces cantidad final en la cuenta = cantidad en inversión + intereses Nótese que la condicional carece del texto "DE OTRA FORMA", pues no hay acciones que efectuar si no se cumple la condición. Paso 3. Algoritmo: De ahora en adelante llamaremos: p ci i cf a a a a porcentaje de interés cantidad en inversión intereses cantidad final en la cuenta 1. PEDIR p,ci 2. i ← ci * p 64 PARTE II. LÓGICA COMPUTACIONAL Figura 4.16 3. DESPLEGAR i 4. SI i > 7000 ENTONCES cf ← ci + i DESPLEGAR cf Paso 4. Diagrama de flujo (Fig. 4.16). CAPÍTULO 4. TIPOS DE PROBLEMAS 65 Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.16) para verificar su funcionalidad. PROBLEMA 5 Una persona enferma, que pesa 70 kg, se encuentra en reposo y desea saber cuántas calorías consume su cuerpo durante todo el tiempo que realice una misma actividad. Las actividades que tiene permitido realizar son únicamente dormir o estar sentado en reposo. Los datos que tiene son que estando dormido consume 1.08 calorías por minuto y estando sentado en reposo consume 1.66 calorías por minuto. Paso1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: Lo primero que es importante saber es cuánto tiempo permaneció realizando la misma actividad, lo que constituirá una entrada para el problema. También será importante saber qué actividad es la que estuvo realizando, pues esto determinará cuál factor utilizar para hacer el cálculo, y así obtener el dato buscado; las calorías gastadas al realizar la misma actividad. El problema presenta dos opciones: que la actividad que haya realizado la persona haya sido estar dormido o que haya sido no estar dormido, es decir, estar sentado en reposo. Si el tipo de actividad que estuvo realizando fue dormir, la acción que se haría para calcular las calorías gastadas es: calorías gastadas = 1.08 x tiempo que duró la actividad Si el tipo de actividad que realizó fue no estar dormido, o sea estar sentado en reposo, la acción que se llevaría a cabo es: calorías gastadas = 1.66 x tiempo que duró la actividad Los datos que se desconocen son tiempo que duró la actividad y tipo de actividad, por lo que éstos serán las entradas del problema. SALIDAS: Calorías gastadas ENTRADAS: tipo de actividad, tiempo de actividad DATOS ADICIONALES: Las calorías gastadas por minuto al estar dormido son de 1.08 por minuto y las que se gastan por estar sentado en reposo son de 1.66 por minuto. SOLUCIÓN: Aplicar la condicional: SI tipo de actividad = "dormido" ENTONCES calorías gastadas ←1.08 x tiempo que duró la actividad DE OTRA FORMA calorías gastadas ← 1.66 x tiempo que duró la actividad 66 PARTE II. LÓGICA COMPUTACIONAL Paso 3. Algoritmo: De ahora en adelante llamaremos: cg a calorías gastadas a$ a tipo de actividad t a tiempo que duró la actividad 1. PEDIR a$,t 2. SI a$ = "dormido" ENTONCES cg ← 1.08 * t DE OTRA FORMA cg ← 1.66 * t 3. DESPLEGAR cg NOTA: ES importante notar que a la variable que representa el dato tipo de actividad se le agregó el signo $, así como a la palabra dormido se le encerró entre comillas pues el dato es de tipo alfanumérico. Paso 4. Diagrama de flujo (Fig. 4.17) Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.17) para verificar su funcionalidad. PROBLEMA 6 Una empresa quiere hacer una compra de varias piezas de la misma clase a un fabricante de refacciones. La empresa, dependiendo del monto total de la compra, decidirá qué hacer para pagar al fabricante. Si el monto total de la compra excede de $500 000 la empresa tendrá la capacidad de invertir de su propio dinero un 55% del monto de la compra pedir prestado al banco un 30%, y el resto lo pagará solicitando un crédito al fabricante. Si el monto total de la compra no excede de $500 000 la empresa tendrá capacidad de invertir de su propio dinero un 70% y el restante 30% lo pagará solicitando crédito al fabricante. El fabricante cobra por concepto de intereses un 20% sobre la cantidad que se le pague a crédito. Paso 1. Definición del problema: Igual a la redacción del problema. La empresa necesita determinar: cuánto dinero deberá invertir, de sus propios fondos; si hay necesidad, cuánto tendrá que pedir prestado al banco, cuánto tendrá que pagar a crédito y cuánto pagará por concepto de los intereses que se generen en el crédito. Paso 2. Planeación de la solución: Lo primero que deberá determinarse es el monto total que se debe pagar por todas las piezas que se compren; esto puede determinarse aplicando la siguiente fórmula: CAPÍTULO 4. TIPOS DE PROBLEMAS 67 Figura 4.17 monto total = núm. de piezas x costo de cada pieza El problema plantea dos opciones, las cuales dependen de si el monto total excede o no a $500 000. Si el monto total SÍ excede a $500 000 las acciones que se realizarían son las siguientes: — Calcular la cantidad que la empresa invertiría de sus propios fondos, lo cual se puede obtener aplicando la siguiente fórmula: cantidad a invertir = monto total x 0.55 —Calcular la cantidad a pagar a crédito mediante la siguiente fórmula: cantidad a pagar a crédito = monto total x 0.15 68 PARTE II. LÓGICA C0MPUTAC10NAL — Calcular la cantidad que se tendrá que pedir prestada al banco mediante la siguiente fórmula: cantidad a pedir al banco = monto total x 0.3 Si el monto total NO excede a $500 000, las acciones que se efectuarían son las siguientes: —Calcular la cantidad que la empresa invertiría de sus propios fondos, lo cual se puede obtener aplicando la siguiente fórmula: cantidad a invertir = monto total x 0.7 — Calcular la cantidad a pagar a crédito mediante la siguiente fórmula: cantidad a pagar a crédito = monto total x 0.30 Sea cual sea el monto total, el interés se calcula de la siguiente manera: interés = cantidad a pagar a crédito x 0.2 Los datos que se desconocen son núm. de piezas y costo de cada pieza; ésas son las entradas del problema. SALIDAS: cantidad a invertir, cantidad a pagar a crédito, cantidad a pedir al banco, intereses ENTRADAS: núm. de piezas, costo por pieza DATOS ADICIONALES: Si el monto total excede a $500 000 los porcentajes se distribuyen de la siguiente manera: — 55% del monto total es la cantidad a invertir de los fondos de la empresa — 30% del monto total es la cantidad a pedir al banco —15% del monto total es la cantidad a pagar a crédito Si el monto total no excede a $500 000 los porcentajes se distribuyen de la siguiente manera: — 70% del monto total es la cantidad a invertir de los fondos de la empresa — 30% del monto total es la cantidad a pagar a crédito. El interés que se paga por concepto de pagar a crédito es el 20% del monto total. SOLUCIÓN: — Aplicar la fórmula: monto total = núm. de piezas x costo de cada pieza — Aplicar la condicional: SI monto total > $500 000 ENTONCES cantidad a invertir ← monto total x 0.55 cantidad a pagar a crédito ← monto total x 0.15 CAPÍTULO 4. TIPOS DE PROBLEMAS 69 cantidad a pedir al banco ← monto total x 0.3 DESPLEGAR cantidad a pedir al banco DE OTRA FORMA cantidad a invertir ← monto total x 0.7 cantidad a pagar a crédito←monto total x 0.3 —Aplicar la fórmula: interés = cantidad a pagar a crédito x 0.2 Paso 3. Algoritmo: • De ahora en adelante llamaremos: np cu mt ci cpb cc i a a a a a a a número de piezas costo de cada pieza monto total cantidad a invertir de los fondos de la empresa cantidad a pedir al banco cantidad a pagar a crédito intereses 1. PEDIR np, cu 2. mt ← np * cu 3. SI mt > 500 000 ENTONCES ci ← mt * 0.55 cpb ← mt * 0.3 cc ← mt * 0.15 DESPLEGAR cpb DE OTRA FORMA ci ← mt * 0.7 cc ← mt * 0.3 4. i ←cc x 0.2 5. DESPLEGAR ci, ce, i Paso 4. Diagrama de flujo (Fig. 4.18): Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo (Fig. 4.18) para verificar su funcionalidad. PROBLEMAS PROPUESTOS 1. 2. Calcular el total que una persona debe pagar en una llantera, si el precio de cada llanta es de $300 si se compran menos de 5 llantas, y de $250 si se compran 5 o más. En un supermercado se hace una promoción, mediante la cual el cliente obtiene un descuento 70 PARTE II. LÓGICA COMPUTACIONAL Figura 4.18 dependiendo de un número que escoge al azar. Si el número escogido es menor que 74, el descuento es del 15% sobre el total de la compra, y si es mayor o igual a 74 el descuento es del 20%. Obtener cuánto dinero se le descuenta. CAPÍTULO 4. TIPOS DE PROBLEMAS 71 3. Calcular el número de pulsaciones que debe tener una persona por cada 10 segundos de ejercicio aeróbico; la fórmula que se aplica cuando el sexo es femenino es: número de pulsaciones = (220 - edad) /10 y si el sexo es masculino es: número de pulsaciones = (210 - edad) / 10 4. Una compañía de seguros está abriendo un departamento de fianzas y estableció un programa para captar clientes, que consiste en lo siguiente: Si el monto por el que se efectúa la fianza es menor que $50 000 la cuota a pagar será por el 3% del monto, y si el monto es mayor que $50 000 la cuota a pagar será el 2% del monto. La afianzadora desea determinar cuál será la cuota que debe pagar un cliente. 5. En una escuela la colegiatura de los alumnos se determina según el número de materias que cursan. El costo de todas las materias es el mismo. Se ha establecido un programa para estimular a los alumnos, el cual consiste en lo siguiente: si el promedio obtenido por un alumno en el último periodo es mayor o igual que 9, se le hará un descuento del 30% sobre la colegiatura y no se le cobrará IVA; si el promedio obtenido es menor que 9 deberá pagar la colegiatura completa, la cual incluye el 10% de IVA. Obtener cuánto debe pagar un alumno. 6. Una empresa de bienes raíces ofrece casas de interés social, bajo las siguientes condiciones: Si los ingresos del comprador son menores de $8000 el enganche será del 15% del costo de la casa y el resto se distribuirá en pagos mensuales, a pagar en diez años. Si los ingresos del comprador son de $8000 o más el enganche será del 30% del costo de la casa y el resto se distribuirá en pagos mensuales a pagar en 7 años. La empresa quiere obtener cuánto debe pagar un comprador por concepto de enganche y cuánto por cada pago parcial. 7. El gobierno ha establecido el programa SAR (Sistema de Ahorro para el Retiro) que consiste en que los dueños de las empresas deben obligatoriamente depositar en una cuenta bancada un porcentaje del salario de los trabajadores; adicionalmente los trabajadores pueden solicitar a la empresa que deposite directamente una cuota fija o un porcentaje de su salario en la cuenta del SAR, la cual le será descontada de su pago. Un trabajador que ha decidido aportar a su cuenta del SAR desea saber la cantidad total de dinero que se estará depositando a esa cuenta cada mes, y el pago mensual que recibirá. 8. Una persona desea iniciar un negocio, para lo cual piensa verificar cuánto dinero le prestaría el banco por hipotecar su casa. Tiene una cuenta bancaria, pero no quiere disponer de ella a menos que el monto por hipotecar su casa sea muy pequeño. Si el monto de la hipoteca es menor que $1 000 000 entonces invertirá el 50% de la inversión total, y un socio invertirá el otro 50%. Si el monto de la hipoteca es de $1 000 000 o más, entonces invertirá el monto total de la hipoteca y el resto del dinero que se necesite para cubrir la inversión total se repartirá a partes iguales entre el socio y él. 9. El gobierno del Estado de México desea reforestar un bosque que mide determinado número de hectáreas. Si la superficie del terreno excede a 1 millón de metros cuadrados, entonces decidirá sembrar de la siguiente manera: 72 PARTE II. LÓGICA COMPUTACIONAL Porcentaje de la superficie del bosque 70% 20% 10% Tipo de árbol pino oyamel cedro Si la superficie del terreno es menor o igual a un millón de metros cuadrados, entonces decidirá sembrar de la siguiente manera: Porcentaje de la superficie del bosque 50% 30% 20% Tipo de árbol pino oyamel cedro El gobierno desea saber el número de pinos, oyameles y cedros que tendrá que sembrar en el bosque, si se sabe que en 10 metros cuadrados caben 8 pinos, en 15 metros cuadrados caben 15 oyameles y en 18 metros cuadrados caben 10 cedros. También se sabe que una hectárea equivale a 10 mil metros cuadrados. 10. Una fábrica ha sido sometida a un programa de control de contaminación para lo cual se efectúa una revisión de los puntos IMECA generados por la fábrica. El programa de control de contaminación consiste en medir los puntos IMECA que emite la fábrica en cinco días de una semana y si el promedio es superior a los 170 puntos entonces tendrá la sanción de parar su producción por una semana y una multa del 50% de las ganancias diarias cuando no se detiene la producción. Si el promedio obtenido de puntos IMECA es de 170 o menor entonces no tendrá ni sanción ni multa. El dueño de la fábrica desea saber cuánto dinero perderá después de ser sometido a la revisión. 11. Una persona se encuentra en la disyuntiva de comprar un automóvil o un terreno, los cuales cuestan exactamente la misma cantidad de dinero. Sabe que mientras el automóvil se devalúa, con el terreno sucede lo contrario. Esta persona comprará el automóvil si al cabo de tres años la devaluación de éste no es mayor que la mitad del incremento del valor del terreno. Ayúdele a esta persona a determinar si debe o no comprar el automóvil. 2b) Problemas selectivos compuestos Este tipo de problemas se identifican porque para solucionarlos se necesita establecer más de una condición. PROBLEMAS RESUELTOS PROBLEMA 1 Paso 1. Definición del problema: Determinar la cantidad de dinero que recibirá un trabajador por concepto de las horas extras trabajadas en una empresa, sabiendo que cuando las horas de trabajo exceden de 40, el resto se consideran horas extras y que éstas se pagan al doble de una hora normal cuando no exceden de 8; si las horas extras CAPÍTULO 4. TIPOS DE PROBLEMAS 73 exceden de 8 se pagan las primeras 8 al doble de lo que se paga por una hora normal y el resto al triple. Paso 2. Planeación de solución: Primero hay que determinar si el trabajador trabajó horas extras o no, ya que el hecho de que esta condición sea verdadera o falsa nos llevará a emprender acciones distintas. La condicional que ayudaría a determinarlo es la siguiente: SI horas trabajadas > 40 ENTONCES acciones por llevar a cabo en caso de que sea verdad DE OTRA FORMA acciones por llevar a cabo en caso de que sea falsa En caso de que el trabajador SÍ haya trabajado más de 40 horas, significa que trabajó horas extras y las acciones que se llevarían a cabo son las siguientes: • Primero sería necesario calcular las horas extras y la fórmula que nos ayudaría a calcularlas es la siguiente: horas extras = horas trabajadas — 40 • El problema plantea dos opciones en caso de que el trabajador SÍ haya trabajado horas extras; dichas opciones son: • SI trabajó 8 o menos horas extras, éstas se le pagarán al doble de lo que se le paga por una hora normal. • SI trabajó más de 8 horas extras, las primeras 8 se le pagarán al doble de lo que se paga por una hora normal y el resto se le pagarán al triple. Estas dos opciones se pueden establecer con la siguiente condicional: SI horas extras > 8 ENTONCES horas extras excedentes de ocho ← horas extras — 8 pago por horas extras = pago por hora normal x 2 x 8 + pago por hora normal x 3 x horas extra excedentes de ocho DE OTRA FORMA pago por horas extras = pago por hora normal x 2 x horas extras • Finalmente, para calcular lo que el trabajador recibiría por pago habría que sumar lo que ganaría por las primeras 40 horas a lo que ganaría por las horas extras, puede usarse la siguiente fórmula: pago = pago por una hora normal x 40 + pago por horas extras Ahora determinemos que acciones se llevarían a cabo en caso de que el trabajador NO haya trabajado más de 40 horas: 74 PARTE II. LÓGICA COMPUTACIONAL • La única acción posible en este caso es calcular el pago por las horas trabajadas, lo cual se puede hacer mediante la siguiente fórmula: pago = pago por hora normal x horas trabajadas Las entradas del problema estarán constituidas por los datos: horas trabajadas y pago por hora normal. SALIDAS: pago ENTRADAS: pago por hora normal, horas trabajadas. DATOS ADICIONALES: si el trabajador no labora horas extras sólo se le paga el salario normal por hora, pero si trabaja horas extras, por cada una de ellas se le pagará el doble de lo que se le paga por una hora normal si son 8 o menos horas extras y si trabaja más de 8 horas extras se le pagan al doble las primeras 8 y el resto se la pagan al triple. SOLUCIÓN Aplicar la condicional: SI horas trabajadas > 40 ENTONCES horas extras ←horas trabajadas - 40 SI horas extras > 8 ENTONCES horas extras excedentes de ocho ← horas extras - 8 pago por horas extras ←pago por hora normal x 2 x 8 + pago por hora normal x 3 x horas extras excedentes de ocho DE OTRA FORMA pago por horas extras ← pago por hora normal x 2 x horas extras pago ← horas trabajadas x 40 + pago por horas extras DE OTRA FORMA pago ← horas trabajadas x pago por hora normal Paso 3. Algoritmo: De ahora en adelante llamaremos: ht ph he het phe pt a a a a a a horas trabajadas pago por hora normal horas extras horas extras que exceden de ocho pago por horas extras pago que recibe el trabajador 1. PEDIR ht.ph 2. SI ht > 40 ENTONCES he ← ht - 40 SI he > 8 ENTONCES het ← he - 8 pe ← ph * 2 * 8 + ph * 3 * het DE OTRA FORMA CAPÍTULO4. TIPOS DE PROBLEMAS pe ← ph • 2 « 8 + ph • 3 * het Figura4.19 pe ← ph * 2 * he pt ← ph * 40 + pe DE OTRA FORMA 75 76 PARTE II. LÓGICA COMPUTACIONAL pt ←ph * ht 3. DESPLEGAR pt Paso 4. Diagrama de flujo (Fig. 4.19). Prueba 1 ht←38 ph←2 Como la condición ht > 40 no se cumple, ejecuta la parte izquierda: pt←76 Al terminar la condición imprime 76, el cual es el pago que recibió el trabajador en esta semana. Prueba 2 ht←45 ph←2 Como la condición ht > 40 sí se cumple ejecuta el primer bloque de la parte derecha de la condición: he←5 A continuación, como la condición ht > 8 no se cumple, ejecuta: pe←20 pt ←100 Y finalmente se imprime el valor de pt = 100, que es lo que gana el empleado en esa semana por haber trabajado 5 horas extra. Prueba 3 ht←50 ph←2 La condición ht > 40 se cumple y ejecuta: he←10 <■■■ También la condición he > 8 se cumple y ejecuta: het ←2 CAPÍTULO 4. TIPOS DE PROBLEMAS pe ←44 pt←124 E imprime 124, lo que ganó el empleado por haber trabajado 10 horas extras. Otra forma de solucionar el problema es: Paso 2. Planeación de la solución: La fórmula general para calcular el pago del trabajador es: pago = horas normales x pago por hora normal + horas extras dobles x pago por hora normal x 2 + horas extras triples x pago por hora normal x 3 Por lo cual debemos obtener los datos horas normales, horas extras dobles y horas extras triples. Si horas trabajadas > 40 ENTONCES horas extras = horas trabajadas - 40 Si horas extras > 8 ENTONCES horas normales = 40 horas extras dobles = 8 horas extras triples = horas extras - 8 DE OTRA FORMA horas normales = 40 horas extras dobles = horas extras horas extras triples = 0 DE OTRA FORMA horas normales = horas trabajadas x pago por hora normal horas extras dobles = 0 horas extras triples = 0 Paso 3. Algoritmo: De ahora en adelante llamaremos: h ph a a n a e d a a t a P a 1. 2. horas pago horas horas horas horas pago trabajadas por hora normales extras extras dobles extras triples PEDIR h, Ph SI h > 40 > ENTONCES e ← h - 40 S I e 8 ENTONCES 77 78 PARTE II. LÓGICA COMPUTACIONAL nf ← 40 d←8 t ← e←8 DE OTRA FORMA n←40 d ←e t←0 DE OTRA FORMA n← h d←0 t←0 3. p ← n * ph + d *ph * 2 + t *ph *3 4. DESPLEGAR p Paso 4. Diagrama de flujo (Fig. 4.20). En aquellos problemas en donde un bloque condicional incluye otro bloque condicional se dice que un bloque está anidado dentro del otro. Ahora se efectuarán las mismas pruebas que se emplearon para la primera solución: Prueba 1 h←38 ph←2 Como la condición h > 40 no se cumple, ejecuta la parte izquierda: n←38 d←0 t←0 Al terminar la condición: p←76 e imprime este valor. Prueba 2 h←45 ph←2 Como la condición ht > 40 se cumple, ejecuta el primer bloque de la parte derecha de la condición: e←5 CAPÍTULO 4. Figura 4.20 A continuación, como la condición e > 8 no se cumple ejecuta: n ← 40 d←5 TIPOS DE PROBLEMAS 79 80 PARTE I I . LÓGICA COMPUTACIONAL t←0 p← 100 Y se imprime 100, que es lo que gana el empleado en esa semana por haber trabajado cinco horas extras. Prueba 3 h←50 ph←2 La condición ht > 40 se cumple y ejecuta: e← 10 También la condición e > 8 se cumple y ejecuta: n←40 d←8 t←2 p← 124 Y se imprime 124, lo que ganó el empleado por haber trabajado 10 horas extras. PROBLEMA 2 Paso 1. Definición del problema: Calcular la utilidad que un trabajador recibe en el reparto anual de utilidades si éste se le asigna como un porcentaje de su salario mensual que depende de su antigüedad en la empresa de acuerdo con la siguiente tabla: TIEMPO menos de 1 año 1 año o más y menos de 2 años 2 años o más y menos de 5 años 5 años o más y menos de 10 años 10 años o más UTILIDAD 5% del salario 7% del salario 10% del salario 15% del salario 20% del salario Paso 2. Planeación de la solución: Lo primero que es importante determinar es en qué rango se encuentra la antigüedad del trabajador en la empresa. Para ello será necesario averiguar si está en el primer rango, es decir si tiene menos de un año trabajando. Esto puede determinarse con la ayuda de la siguiente condicional: CAPÍTULO 4. TIPOS DE PROBLEMAS 81 SI tiempo < 1 ENTONCES acciones por llevar a cabo en caso de que tenga menos de 1 año trabajando en la empresa DE OTRA FORMA acciones por llevar a cabo en caso de que tenga 1 año o más trabajando en la empresa En caso de que el tiempo NO fuera menor que 1, significaría que el trabajador tiene 1 año o más trabajando en la empresa, pero no se sabe exactamente en cuál de los demás rangos se ubica, es decir, podría ser que estuviera en el rango de 1 a 2 años, o de 2 a 5 años, o de 5 a 10 años o de más de 10 años. El hecho de saber que NO tiene menos de 1 año trabajando no es útil para resolver el problema, por lo cual es necesario establecer un grupo de condiciones para verificar en qué rango se encuentra exactamente. Estas condiciones quedarían de la siguiente manera: SI tiempo < 1 ENTONCES acciones por llevar a cabo en caso de que tenga menos de 1 año DE OTRA FORMA SI tiempo < 2 ENTONCES acciones por realizar en caso de que tenga más de 1 año y menos de 2 DE OTRA FORMA SI tiempo < 5 ENTONCES acciones por realizar en caso de que tenga más de 2 años y menos de 5 DE OTRA FORMA SI tiempo < 10 ENTONCES acciones por realizar en caso de que tenga más de 5 años y menos de 10 DE OTRA FORMA acciones por realizar en caso de que tenga 10 años o más La condicional tiempo < 2 es una acción que se llevaría a cabo sólo si la condicional tiempo < 1 NO fuera verdad, lo cual significa que si la condicional tiempo < 2 SÍ fuera verdad el tiempo estaría necesariamente en el rango de entre 1 y 2 años, ya que ya se sabe que NO tiene menos de 1 año y que SÍ tiene menos de 2. Ocurre exactamente lo mismo con los demás rangos. Los datos tiempo y salario constituyen las entradas del problema. SALIDAS: utilidad ENTRADAS: tiempo, salario DATOS ADICIONALES: La utilidad que se otorga depende del tiempo que se tiene trabajando en la empresa según la siguiente tabla: TIEMPO menos de 1 año 1 año o más y menos de 2 años 2 años o más y menos de 5 años 5 años o más y menos de 10 años 10 años o más UTILIDAD 5% del salario 7% del salario 10% del salario 15% del salario 20% del salario 82 PARTE II. LÓGICA COMPUTACIONAL SOLUCIÓN Aplicar la condicional: SI tiempo < 1 ENTONCES utilidad ← salario x 0.05 DE OTRA FORMA SI tiempo < 2 ENTONCES utilidad ← salario x 0.07 DE OTRA FORMA SI tiempo < 5 ENTONCES utilidad ← salario x 0.1 DE OTRA FORMA Si tiempo < 10 ENTONCES utilidad ←salario x 0.15 DE OTRA FORMA utilidad ← salario x 0.2 Paso 3. Algoritmo: De ahora en adelante llamaremos: s t u a salario a tiempo que tiene trabajando a utilidad 1. PEDIR s, t 2. SI t < 1 ENTONCES u ← s * 0.05 DE OTRA FORMA SI t < 2 ENTONCES u ← s * 0.07 DE OTRA FORMA SI t < 5 ENTONCES u ← s * 0.1 DE OTRA FORMA S i t < 10 ENTONCES u ← s *0. 1 5 DE OTRA FORMA u ← s * 0.2 3. DESPLEGAR u Paso 4. Diagrama de flujo (Fig. 4.21). Prueba 1 Supongamos que una persona tiene 1/2 año de antigüedad y gana $1000 mensuales. CAPÍTULO 4. Figura 4.21 t ←0.5 s ← 1000 La primera condición se cumple ya que 0.5 es menor que 1 y ejecuta: TIPOS DE PROBLEMAS 83 84 PARTE II . LÓGICA COMPUTACIONAL u←50 y este último valor es desplegado como la solución del problema. Prueba 2 Ahora supongamos que una persona que tiene 15 años de antigüedad y gana $5000 mensuales. t← 15 s ←5000 La primera condición no la cumple, ya que 15 no es menor que 1, así que ejecuta la segunda condición, la cual tampoco se cumple ya que 15 no es menor que 2. Lo mismo pasa con la condición t < 5. Al llegar al último bloque condicional evalúa la condición 15 < 10, lo cual no es verdad y ejecuta la parte izquierda de la condición: u ←1000 y despliega este valor que es el 20% de los $5000 que gana esta persona por mes. Ejercicio: Efectuar por lo menos dos pruebas más a este diagrama de flujo para verificar su funcionalidad. PROBLEMA 3 Paso 1. Definición del problema: En una tienda de descuento se efectúa una promoción en la cual se hace un descuento sobre el valor de la compra total según el color de la bolita que el cliente saque al pagar en caja. Si la bolita es blanca no se le hará descuento alguno, si es verde se le hará un 10% de descuento, si es amarilla un 25%, si es azul un 50% y si es roja un 100%. Determinar la cantidad final que un cliente deberá pagar por su compra. Se sabe que sólo hay bolitas de los colores mencionados. Paso 2. Planeación de la solución: Lo primero que debe saberse es el color de la bolita que le correspondió al cliente. Con este dato se podrá determinar qué descuento se le aplicará. Esto puede hacerse estableciendo un grupo de condiciones que evalúen el color de la bolita. Las condiciones pueden ser las siguientes: SI color de la bolita = "BLANCA" ENTONCES El descuento será de 0% DE OTRA FORMA SI color de la bolita = "VERDE" ENTONCES El descuento será de 10% DE OTRA FORMA SI color de la bolita = "AMARILLA" ENTONCES El descuento será de 25% CAPÍTULO 4. TIPOS DE PROBLEMAS 85 DE OTRA FORMA SI color de la bolita = "AZUL" ENTONCES El descuento será de 50% DE OTRA FORMA El descuento será de 100% Nótese que si la bolita NO es blanca será necesario verificar SI es verde para poder asegurar que el descuento será del 10%. En caso de que la bolita NO sea blanca ni verde, entonces se tendrá que verificar que SÍ sea amarilla para poder asegurar que el descuento sea del 25%. En caso de que la bolita NO sea blanca ni verde ni amarilla ni azul, necesariamente tendrá que ser roja, ya que se sabe que no hay más colores y el descuento se obtiene entonces por exclusión. En caso de que la bolita sea blanca la fórmula para encontrar la cantidad por descontar podría ser la siguiente: cantidad por descontar = 0 Si la bolita es roja la fórmula para encontrar la cantidad por descontar debe ser la siguiente: cantidad por descontar = monto de la compra En cualquiera de los demás casos la cantidad por descontar podrá obtenerse mediante la siguiente fórmula: cantidad a descontar = monto de la compra x descuento Los datos que constituyen las entradas del problema son: monto de la compra y color de la bolita. SALIDAS: cantidad final a pagar ENTRADAS: monto de la compra, color de la bolita DATOS ADICIONALES: el descuento que se otorga depende del color de la bolita que se obtenga, como lo muestra la siguiente tabla: COLOR DE LA BOLITA Blanca Verde Amarilla Azul Roja SOLUCIÓN Aplicar la condicional: SI color de la bolita = "BLANCA" ENTONCES cantidad a descontar ← 0 DE OTRA FORMA DESCUENTO 0% 10% 25% 50% 100% 86 PARTE I I . LÓGICA COMPUTACIONAL SI color de la bolita = "VERDE" ENTONCES cantidad a descontar ← monto de la compra x 0.1 DE OTRA FORMA SI color de la bolita = "AMARILLA" ENTONCES cantidad a descontar ← monto de la compra x 0.25 DE OTRA FORMA SI color de la bolita = "AZUL" ENTONCES cantidad a descontar ← monto de la compra x 0.5 DE OTRA FORMA cantidad a descontar ← monto de la compra Paso 3. Algoritmo: De ahora en adelante llamaremos: m b$ d cp a a a a monto de la compra color de la bolita cantidad por descontar cantidad por pagar 1. PEDIR m, b$ 2. SI b$ = "BLANCA" ENTONCES d←0 DE OTRA FORMA SI b$ = "VERDE" ENTONCES d←m*0.1 DE OTRA FORMA SI b$ = "AMARILLA" ENTONCES d←m * 0.25 DE OTRA FORMA SI b$ = "AZUL" ENTONCES d ← m * 0.5 OTRA FORMA d←m 3. cp ← m ← d 4. DESPLEGAR cp Nótese que el nombre de la variable que contiene el dato del color de la bolita tiene al final el signo $ y que los nombres de los colores están entre comillas, esto se debe a que el dato color es de tipo alfanumérico. Paso 4. Diagrama de flujo (Fig. 4.22). Prueba J Realicemos una prueba para una persona que compró $500 y le correspondió una bolita de color blanco: CAPÍTULO 4. Figura 4.22 m←500 b$ ← "BLANCA" Al ser verdadera la primera condicional ejecuta: TIPOS DE PROBLEMAS 87 88 PARTE II. LÓGICA COMPUTACIONAL d←0 cp ← 500 e imprime 500, cantidad que se tendrá que pagar ya que la bola blanca no da derecho a obtener descuento. Prueba 2 Supongamos ahora que una persona ha comprado $200 y la bolita es amarilla. m←200 b$ ← "AMARILLA" La evaluación de la primera y la segunda condiciones resulta falsa, así que se evalúa la tercera, la cual es verdadera y entonces se ejecuta: d←50 cp ← 150 este último valor se despliega porque es un 25% de descuento sobre $200. Prueba 3 En esta prueba la persona obtuvo bolita roja y compró $350. m←350 b$ ← "ROJA" Ninguna de las cuatro condiciones es verdadera, ya que la bolita no es ni blanca ni verde ni amarilla, por lo cual se ejecuta la parte falsa de la última condición: d←350 cp ← 0 y se imprime 0, ya que la bolita roja otorga un 100% de descuento sobre la compra. PROBLEMA 4 Paso 1. Definición del problema: Una empresa que comercializa cosméticos tiene organizados a sus vendedores en tres departamentos y ha establecido un programa de incentivos para incrementar su productividad. El gerente, al final del mes, pide el importe global de las ventas de los tres departamentos y aquellos que excedan el 33% CAPÍTULO 4. TIPOS DE PROBLEMAS 89 de las ventas totales se les paga una cantidad extra equivalente al 20% de su salario mensual. Si todos los vendedores ganan lo mismo, determinar cuánto recibirán los vendedores de los tres departamentos al finalizar el mes. Paso 2. Planeación de la solución: En primer lugar, será necesario obtener las ventas totales de la empresa, lo que puede calcularse mediante la fórmula: ventas totales = ventas departamento 1 + ventas departamento 2 + ventas departamento 3 Una vez obtenidas las ventas totales se podrá calcular cuánto representa el 33% de éstas utilizando la siguiente fórmula: porcentaje de ventas = ventas totales x 0.33 El porcentaje de ventas servirá para determinar si los departamentos rebasan éste o no y así poder calcular si los vendedores de cada departamento recibirán un 20% más sobre su salario o no. Por cada departamento se tendrá una condicional como la siguiente: SI ventas del departamento > porcentaje de ventas ENTONCES cantidad por recibir ← salario + salario x 0.2 DE OTRA FORMA cantidad por recibir ← salario En este problema las condicionales tendrán que aplicarse en forma secuencial, ya que si un departamento recibe aumento o no es independiente de lo que suceda con los otros dos departamentos. Las entradas del problema estarán constituidas por los datos: ventas del departamento 1, ventas del departamento 2, ventas del departamento 3 y salario de los vendedores. SALIDAS: cantidad por recibir por los vendedores del departamento 1 cantidad por recibir por los vendedores del departamento 2 cantidad por recibir por los vendedores del departamento 3 ENTRADAS: ventas del departamento 1, ventas del departamento 2, ventas del departamento 3, salario de los vendedores. DATOS ADICIONALES: Los vendedores recibirán un 20% más sobre su salario si las ventas de su departamento rebasan el 33% de las ventas totales de la empresa. SOLUCIÓN —Aplicar la fórmula: ventas totales = ventas departamento 1 + ventas departamento 2 + ventas departamento 3 — Aplicar la fórmula: 90 PARTE II. LÓGICA COMPUTACIONAL porcentaje de ventas = ventas totales x 0.33 —Aplicar la condicional: SI ventas del departamento 1 > porcentaje de ventas ENTONCES cantidad por recibir por vendedores del departamento 1 ← salario + salario x 0.2 DE OTRA FORMA cantidad por recibir por los vendedores del departamento 1 ← salario —Aplicar la condicional: SI ventas del departamento 2 > porcentaje de ventas ENTONCES cantidad por recibir por vendedores del departamento 2 ← salario + salario x 0.2 DE OTRA FORMA cantidad por recibir por los vendedores del departamento 2 ← salario —Aplicar la condicional: SI ventas del departamento 3 > porcentaje de ventas ENTONCES cantidad por recibir por vendedores del departamento 3 ← salario 4- salario x 0.2 DE OTRA FORMA cantidad por recibir por los vendedores del departamento 3 ← salario Paso 3. Algoritmo: De ahora en adelante llamaremos: v1 v2 v3 s tv p cd1 cd2 cd3 1. 2. 3. 4. a a a a a a a a a ventas del departamento 1 ventas del departamento 2 ventas del departamento 3 salario que reciben los vendedores total de ventas de la empresa porcentaje de ventas cantidad por recibir por los vendedores del departamento 1 cantidad por recibir por los vendedores del departamento 2 cantidad por recibir por los vendedores del departamento 3 PEDIR vi, v2, v3, s tv ← vi + v2 + v3 p ← tv * 0.33 SI vi > p ENTONCES Cd1←s + s *0 . 2 DE OTRA FORMA cd1 ← s 5. SI v2 > p ENTONCES CAPÍTULO 4. TIPOS DE PROBLEMAS 91 cd2 ← S + S * 0.2 DE OTRA FORMA cd2←s 6. SI v3 > p ENTONCES cd3 ← s + s * 0.2 DE OTRA FORMA cd3←s 7. DESPLEGAR cd1, cd2, cd3 Paso 4. Diagrama de flujo (Fig. 4.23). Prueba Supongamos que el primer departamento vendió $32 000, el segundo $38 000 y el tercero $30 000. Cada vendedor gana $1500. v1 ← 32 000 v2← 38 000 v3← 30 000 s← 1500 tv ← 100 000 p ← 33 000 Al evaluar la primera condición ésta resulta falsa, ya que 32 000 no es mayor que 33 000, así es que ejecuta: Cd1 ← 1500 Cuando se evalúa la segunda condición ésta es verdadera, ya que 38 000 es mayor que 33 000, así es que ejecuta: cd2← 1800 La tercera condición es falsa porque 30 000 no es mayor que 33 000: cd3 ←1500 Y se imprimen los valores 1500, 1800 y 1500, lo que significa que el segundo departamento fue el único que obtuvo incentivo. Ejercicio: efectuar al menos una prueba más a este diagrama de flujo para verificar su funcionalidad. PROBLEMA 5 Paso 1. Definición del problema: El Instituto Mexicano del Seguro Social (IMSS) requiere clasificar a las personas que se jubilarán en 92 PARTE II. LÓGICA C0MPUTAC10NAL Figura 4.23 el año de 1992. Existen tres tipos de jubilaciones: por edad, por antigüedad joven y por antigüedad adulta. Las personas adscritas a la jubilación por edad deben tener 60 años o más y una antigüedad en su empleo de menos de 25 años. CAPÍTULO 4. TIPOS DE PROBLEMAS 93 Las personas adscritas a la jubilación por antigüedad joven deben tener menos de 60 años y una antigüedad en su empleo de 25 años o más. Las personas adscritas a la jubilación por antigüedad adulta deben tener 60 años o más y una antigüedad en su empleo de 25 años o más. Determinar en qué tipo de jubilación, quedará adscrita una persona. Paso 2. Planeación de la solución: Primero es importante determinar en qué rango se encuentran la edad y la antigüedad de la persona, para ello emplearemos la condicional: SI edad > = 60 ENTONCES SI antigüedad < 25 ENTONCES la jubilación es por edad DE OTRA FORMA la jubilación es por antigüedad adulta DE OTRA FORMA SI antigüedad < 25 ENTONCES no tiene por qué jubilarse DE OTRA FORMA la jubilación es por antigüedad joven Otra alternativa es emplear la siguiente condicional: SI edad > = 60 Y antigüedad < 25 ENTONCES la jubilación es por edad DE OTRA FORMA SI edad > = 60 Y antigüedad > 25 ENTONCES la jubilación es por antigüedad adulta DE OTRA FORMA SI edad < 60 Y antigüedad > 25 ENTONCES la jubilación es por antigüedad joven DE OTRA FORMA no tiene por qué jubilarse Recuerde que para que la expresión edad > = 60 Y antigüedad < 25 sea verdadera, es preciso que las dos condiciones se cumplan; si por lo menos una de ellas no se cumple toda la expresión será falsa. Esta segunda alternativa se empleará para solucionar el problema. El lector tendrá, como ejercicio, que continuar con la metodología para la primera alternativa. Las entradas del problema serán los datos: edad y antigüedad de la persona. SALIDAS: tipo de jubilación ENTRADAS: antigüedad, edad DATOS ADICIONALES: Si la edad > = 60 y la antigüedad < 25 entonces el tipo de jubilación es por edad. Si la edad > = 60 y la antigüedad > 25 entonces el tipo de jubilación es por antigüedad adulta. 94 PARTE II. LÓGICA COMPUTACIONAL Si la edad < 60 y la antigüedad > 25 entonces el tipo de jubilación es por antigüedad joven. Si la edad < 60 y la antigüedad < 25 entonces no tiene por qué jubilarse. SOLUCIÓN — Aplicar la condicional: SI edad > = 60 Y antigüedad < 25 ENTONCES la jubilación es por edad DE OTRA FORMA SI edad > = 60 Y antigüedad > 25 ENTONCES la jubilación es por antigüedad adulta DE OTRA FORMA SI edad < 60 Y antigüedad > 25 ENTONCES la jubilación es por antigüedad joven DE OTRA FORMA no tiene por qué jubilarse Paso 3. Algoritmo: De ahora en adelante llamaremos: ed a edad ant a antigüedad 1. PEDIR ed, ant 2. SI ed > = 60 AND ant < 25 ENTONCES DESPLEGAR "la jubilación es por edad" DE OTRA FORMA SI ed > = 60 AND ant > 25 ENTONCES DESPLEGAR "la jubilación es por antigüedad adulta" DE OTRA FORMA SI ed < 60 AND ant > 25 ENTONCES DESPLEGAR "la jubilación es por antigüedad joven" DE OTRA FORMA DESPLEGAR "no tiene por qué jubilarse" Recuerde que el conectivo lógico conjunción se representa con el operador AND, y que por esta razón sustituyó el lugar del conectivo Y. Paso 4. Diagrama de flujo (Fig. 4.24). Prueba 1 Hagamos una prueba con una persona de 65 años de edad y 30 años de antigüedad: e d←6 5 CAPÍTULO 4. TIPOS DE PROBLEMAS 95 Figura 4.24 ant ← 30 La primera condicional no se cumple, pues aunque ya la variable ed es mayor que 60, la variable ant no es menor que 25 y como no se cumplen ambas condiciones se pasa al siguiente bloque condicional. 96 PARTE I I . LÓGICA COMPUTACIONAL En el segundo bloque ambas condiciones se cumplen, así que se despliega el letrero "La jubilación es por antigüedad adulta". Prueba 2 Otro caso puede ser el de una persona que tenga 55 años de edad y 20 años de antigüedad: ed ←55 t ← 20an En la primera condicional sólo la condición ant < 25 se cumple, así es que la condición compuesta es falsa y se evalúa la parte izquierda del bloque. La segunda condicional también es falsa, ya que ninguna de las dos condiciones se cumple. También la tercera condicional es falsa, ya que sólo la condición ed < 60 se cumple; por lo tanto, se ejecuta la parte izquierda del bloque condicional, que consiste en desplegar el letrero "No tiene por qué jubilarse". Ejercicio: efectuar al menos una prueba más a este diagrama de flujo para verificar su funcionalidad. PROBLEMAS PROPUESTOS 1. 2. 3. En una fábrica de computadoras se planea ofrecer a los clientes un descuento que dependerá del número de computadoras que compren. Si las computadoras son menos de cinco se les da un 10% de descuento sobre el total de la compra; si el número de computadoras es mayor o igual a cinco pero menor que 10 se les otorga un 20% de descuento; y si son 10 o más se les da un 40% de descuento. El precio de cada computadora es de $3500. En una llantera se ha establecido una promoción de las llantas marca "Ponchadas", dicha promoción consiste en lo siguiente: Si se compran menos de cinco llantas el precio es de $45 cada una, de $40 si se compran de cinco a 10 y de $35 si se compran más de 10. Obtener la cantidad de dinero que una persona tiene que pagar por cada una de las llantas que compra y la que tiene que pagar por el total de la compra. En un juego de preguntas a lasque se responde "SÍ" o "NO" gana quien responda correctamente las tres preguntas. Si se responde mal a cualquiera de ellas ya no se pregunta la siguiente y termina el juego. Las preguntas son: 1. ¿Colón descubrió América? 2. ¿La independencia de México fue en el año 1810? 3. ¿The Doors fue un grupo de rock americano? 4. Un proveedor de estéreos ofrece un descuento del 10% sobre el precio sin IVA, de algún aparato si éste cuesta $2000 o más. Además, independientemente de esto, ofrece un 5% de descuento si CAPÍTULO 4. TIPOS DE PROBLEMAS 97 la marca es "NOSY". Determinar cuánto pagará, con IVA incluido, un cliente cualquiera por la compra de su aparato. 5. Una frutería ofrece las manzanas con descuento según la siguiente tabla: NUM. DE KILOS COMPRADOS 0 -2 2.01 -5 5.01 - 10 10.01 en adelante 6. % DESCUENTO 0% 10% 15% 20% Determinar cuánto pagará una persona que compre manzanas en esa frutería. El dueño de una empresa desea planificar las decisiones financieras que tomará en el siguiente año. La manera de planificarlas depende de lo siguiente: Si actualmente su capital se encuentra con saldo negativo, pedirá un préstamo bancario para que su nuevo saldo sea de $10 000. Si su capital tiene actualmente un saldo positivo pedirá un préstamo bancario para tener un nuevo saldo de $20 000, pero si su capital tiene actualmente un saldo superior a los $20 000 no pedirá ningún préstamo. Posteriormente repartirá su presupuesto de la siguiente manera: $5000 para equipo de cómputo $2000 para mobiliario y del resto la mitad será para la compra de insumos y la otra para otorgar incentivos al personal. 7. Desplegar qué cantidades se destinarán para la compra de insumos e incentivos al personal y, en caso de que fuera necesario, a cuánto ascendería la cantidad que se pediría al banco. Tomando como base los resultados obtenidos en un laboratorio de análisis clínicos, un médico determina si una persona tiene anemia o no, lo cual depende de su nivel de hemoglobina en la sangre, de su edad y de su sexo. Si el nivel de hemoglobina que tiene una persona es menor que el rango que le corresponde, se determina su resultado como positivo y en caso contrario como negativo. La tabla en la que el médico se basa para obtener el resultado es la siguiente: EDAD 0 - 1 mes mayor de 1 y menor o igual de 6 meses mayor de 6 y menor o igual de 12 meses mayor de 1 y menor o igual que 5 años mayor de 5 y menor o igual que 10 años mayor de 10 y menor o igual que 15 años mujeres mayores de 15 años hombres mayores de 15 años NIVEL DE HEMOGLOBINA 13 10 11 11.5 12.6 13 12 14 . - 26 18 15 15 15.5 15.5 16 18 g% g% g% g% g% g% g% g% 98 8. PARTE I I. LÓGICA COMPUTACIONAL Una institución educativa estableció un programa para estimular a los alumnos con buen rendimiento académico y que consiste en lo siguiente: Si el promedio es de 9.5 o más y el alumno es de preparatoria, entonces éste podrá cursar 55 unidades y se le hará un 25% de descuento. Si el promedio es mayor o igual a 9 pero menor que 9.5 y el alumno es de preparatoria, entonces éste podrá cursar 50 unidades y se le hará un 10% de descuento. Si el promedio es mayor que 7 y menor que 9 y el alumno es de preparatoria, éste podrá cursar 50 unidades y no tendrá ningún descuento. Si el promedio es de 7 o menor, el número de materias reprobadas es de cero a tres y el alumno es de preparatoria, entonces podrá cursar 45 unidades y no tendrá descuento. Si el promedio es de 7 o menor, el número de materias reprobadas es de cuatro o más y el alumno es de preparatoria, entonces podrá cursar 40 unidades y no tendrá ningún descuento. Si el promedio es mayor o igual a 9.5 y el alumno es de profesional, entonces podrá cursar 55 unidades y se le hará un 20% de descuento. Si el promedio es menor de 9.5 y el alumno es de profesional, entonces podrá cursar 55 unidades y no tendrá descuento. Obtener el total que tendría que pagar un alumno si la colegiatura para alumnos de profesional es de $300 por cada cinco unidades y para alumnos de preparatoria es de $180 por cada cinco unidades. 3) PROBLEMAS REPETITIVOS Introducción Se les llama problemas repetitivos a aquellos en cuya solución es necesario utilizar un mismo conjunto de acciones que puedan ejecutarse más de una vez. Por ejemplo, un problema repetitivo sencillo podría ser pedir cinco cantidades de la misma unidad. Para resolverlo se podría hacer este proceso en forma secuencial y el algoritmo y diagrama de flujo quedarían como se muestra en la figura 4.25. Este problema es repetitivo pues para solucionarlo se necesita realizar la misma acción, PEDIR cant más de una vez. Si bien escribir cinco veces la misma acción no costó mucho trabajo, imagine ahora si fueran 100 las cantidades que tuvieran que pedirse: la solución secuencial a este problema resultaría sumamente larga y tediosa. Para solucionar problemas repetitivos recurriremos al uso de ciclos, que nos evitarán escribir muchas veces un conjunto de acciones. Ahora definiremos lo que es un ciclo y algunos otros conceptos necesarios para la solución de problemas repetitivos. Ciclo: Es la ejecución de un mismo conjunto de acciones una o más veces. Se compone de: cuerpo del ciclo y estructura cíclica. Proceso: Conjunto de acciones a las que se les asigna un nombre. Para crearlo se deberán seguir las mismas reglas usadas para nombrar las variables, con la diferencia de que deberán emplearse letras mayúsculas. La última acción de un proceso deberá ser siempre FINP, para indicar el fin de éste. CAPÍTULO 4. 1. 2. 3. 4. 5. TIPOS DE PROBLEMAS 99 PEDIR cant PEDIR cant PEDIR cant PEDIR cant PEDIR cant Figura 4.25 Cuerpo del ciclo: Proceso que se ejecutará una o más veces. Estructura cíclica: Conjunto de acciones que permiten que el cuerpo del ciclo se ejecute una o más veces. Iteración: Es cada una de las ejecuciones del cuerpo del ciclo. La forma básica de un ciclo en algoritmo y diagrama de flujo es la siguiente: 1. 2. C IR al paso 1 En donde C es el nombre del cuerpo del ciclo, y la estructura cíclica está representada por la flecha, la cual ayuda a que el cuerpo del ciclo se ejecute varias veces. Los ciclos que usaremos son aquellos en los que el cuerpo del ciclo es ejecutado por la estructura cíclica hasta que cierta condición se satisface y que por lo tanto su número de iteraciones es finito. A veces la definición del problema nos lleva a usar un ciclo en el que el número de iteraciones a efectuarse se puede determinar previamente; sin embargo, otras veces, aunque sabemos que el ciclo tiene un número finito de iteraciones, no podremos saber de antemano el número de ellas. Es así que los ciclos se clasifican en: 1) Ciclos con un número determinado de iteraciones. 2) Ciclos con un número indeterminado de iteraciones. 1) Ciclos con un número determinado de iteraciones Son aquellos en que el número de iteraciones es determinable antes de ejecutarse el ciclo. Este número 100 PARTE I I . LÓGICA COMPUTACIONAL de iteraciones se puede obtener de la definición del problema, o bien mediante una entrada de datos cuando el problema indique que un conjunto de acciones se debe efectuar para n ocurrencias. Como ejemplo, resolvamos el problema planteado al principio del capítulo en donde debíamos pedir cinco cantidades de la misma unidad. Es claro que el número de iteraciones es de 5, por lo que entra en la categoría de ciclos con un número determinado de iteraciones. Para poder pedir exactamente cinco veces la variable cant necesitaremos ir contando el número de veces que la vayamos pidiendo. Cuando ya la hayamos pedido cinco veces tendremos que salir del ciclo, auxiliándonos con un bloque condicional que evalúe si ya hemos ejecutado cinco iteraciones. A la variable que nos ayuda a contar el número de iteraciones se le llama contador, y en adelante se utilizarán las variables i,j y k como contadores. En este caso, tanto el contador como el bloque condicional formarán parte de la estructura cíclica y la entrada de datos de la variable cant es el cuerpo del ciclo. Para pedir la variable cant cinco veces debemos hacer lo siguiente: 1. i← 1 2. SI i > 5 ENTONCES IR al paso 3 DE OTRA FORMA PEDIR cant i ← i +1 IR al paso 2 FIN 3. Y el diagrama de flujo correspondiente es el que se muestra en la figura 4.26. La variable i es el contador del número de iteraciones. La expresión: i ← i+1 significa que al valor de la variable i se le suma 1 y el resultado de la suma es reasignado a la variable i, por lo que esta expresión implica que el valor de la variable i es incrementado en 1. El diagrama de flujo hace lo siguiente: 1) El primer bloque ejecutable asigna el valor 1 a la variable i. 2) La secuencia del diagrama nos lleva a evaluar si i es mayor que 5, esto es, si 1 es mayor que 5; como esto es falso la secuencia del diagrama nos lleva a pedir la variable cant por primera vez. 3) El valor de i se incrementa y ahora es de 2. 4) Se evalúa la condición 2 > 5, la cual es falsa y nos lleva a pedir la variable cant por segunda vez. 5) El valor de i se incrementa y ahora es de 3. 6) Se evalúa la condición 3 > 5 y como es falso, se pide la variable cant por tercera vez. 7) i tiene ahora un valor de 4. 8) Se evalúa la condición 4 > 5; al ser falsa se pide la variable cant por cuarta vez. 9) i tiene ahora un valor de 5. 10) Se evalúa la condición 5 > 5, y al ser falsa se pide la variable cant por quinta vez. 11) i tiene ahora un valor de 6. 12) Se evalúa la condición 6 > 5; al ser verdadera se termina la ejecución del ciclo. CAPÍTULO 4. TIPOS DE PROBLEMAS 101 Figura 4.26 Como regla general a los ciclos con un número determinado de iteraciones les corresponde un algoritmo como el siguiente: 1. i← 1 2. SI i > n ENTONCES IR al paso 3 DE OTRA FORMA C i ← i +1 IR al paso 2 X 3. En donde la variable n es el número de iteraciones que se van a efectuar, y la variable i, como se vio, es el contador de iteraciones. C es el cuerpo del ciclo que será ejecutado n veces, y X es el conjunto de acciones que se ejecutarán cuando se termine con el ciclo. A este algoritmo le corresponde un diagrama de flujo como el de la figura 4.27. 102 PARTE II. LÓGICA COMPUTACIONAL Figura 4.27 2) Ciclos con un número indeterminado de iteraciones Son aquellos en donde el número de iteraciones permanece indeterminado durante la ejecución del ciclo, y el proceso repetitivo termina hasta que el usuario lo indique. En este tipo de ciclos el usuario decide dentro del ciclo cuando terminar con el proceso repetitivo sin importar cuántas iteraciones se hayan efectuado, a diferencia de los ciclos anteriores, en donde el número de iteraciones está determinado desde el principio. El algoritmo que le corresponde a este tipo de ciclos es el siguiente: 1. C 2. PEDIR mas$ 3. SI mas$ = "NO" ENTONCES IR al paso 4 DE OTRA FORMA IR al paso 1 4. X En donde C es el cuerpo del ciclo que será ejecutado un número indeterminado de veces, X es el conjunto de acciones que suceden al ciclo, y a la variable mas$ el usuario le dará un valor de SÍ o de NO, dependiendo de si se desea realizar otra iteración o terminar con la ejecución del ciclo. El diagrama de flujo correspondiente es el que se muestra en la figura 4.28. CAPÍTULO 4. TIPOS DE PROBLEMAS 103 Figura 4.28 En donde se podrá observar que el flujo del diagrama sale del ciclo hasta el momento en que la variable mas$ tome un valor de "NO" y debido a que no se sabe cuándo ocurrirá esto, se le llama ciclo con un número indeterminado de iteraciones. Tipos de problemas repetitivos Los Ciclos se emplean en los problemas repetitivos y, dependiendo de cómo sea necesario usar los ciclos, se clasifican en: a) b) Problemas repetitivos simples Problemas repetitivos compuestos Los problemas repetitivos simples son aquellos en los que se usa un solo ciclo, mientras que los problemas repetitivos compuestos emplean varios de ellos. 3a) Problemas repetitivos simples 3a.l) Número determinado de iteraciones Son problemas en que para su solución se requiere usar un solo ciclo, en el que su número de iteraciones es un dato conocido, que se puede obtener de la definición del problema, o bien como dato de entrada. 104 PARTE II. LÓGICA COMPUTAC1ONAL Problemas resueltos PROBLEMA 1 Calcular el promedio de calificaciones parciales de cada alumno de un grupo de cinco, sabiendo que existen tres periodos parciales. Paso 1: Definición del problema: Igual a la redacción del problema. Solución 1 Paso 2: Planeación de la solución: Dado que para cada alumno se efectuarán las mismas acciones, se puede determinar que es necesario utilizar un ciclo. Como en la definición del problema se plantea que son cinco alumnos se puede concluir que el número de iteraciones está determinado y es de cinco. Por lo tanto, el ciclo que le corresponde es el siguiente: 1. i ← 1 2. SI i > n ENTONCES IR al paso 3 DE OTRA FORMA C i←i+1 IR al paso 2 X 3. Sin embargo, como sabemos que el número de iteraciones es de cinco, podemos sustituir este valor en lugar de la variable n. Asimismo, como en cada iteración se procesará la calificación de cada alumno, sustituiremos ALUMNO como nombre del cuerpo del ciclo en lugar de C. 1. i ← 1 2. SI i > 5 ENTONCES IR al paso 3 DE OTRA FORMA ALUMNO i←i+1 IR al paso 2 3. X El proceso ALUMNO, estará compuesto de las siguientes acciones: • Pedir los valores de las 3 calificaciones parciales. • Aplicar la fórmula: promedio = ( calificación 1 + calificación2 + calificación3) / 3 • Desplegar el resultado obtenido. El proceso X corresponderá a la acción de terminar, ya que no hay acciones posteriores al ciclo. Una vez terminada la serie de acciones necesarias para cada alumno es importante verificar que el valor del contador no exceda al número de iteraciones, es decir, verificar si el contador todavía no CAPÍTULO 4. TIPOS DE PROBLEMAS 105 es mayor que 5. Si esto ocurriera significaría que no se ha terminado de procesar a todos los alumnos y sería necesario incrementar el contador en uno y repetir el proceso ALUMNO para el alumno siguiente. En caso contrario el proceso repetitivo se habrá terminado. SALIDAS: promedio de cada alumno ENTRADAS: calificación 1, calificación2 y calificación3 de cada alumno DATOS ADICIONALES: Ninguno SOLUCIÓN: Ver algoritmo Paso 3. Algoritmo: De ahora en adelante llamaremos: 1 el c2 c3 P a a a a a contador del numero de ciclos calificación parcial 1 calificación parcial 2 calificación parcial 3 promedio 1. i← 1 2. SI i > 5 ENTONCES IR al paso 3 DE OTRA FORMA ALUMNO i←i+1 IR al paso 2 3. FIN 1. 2. 3. 4. El proceso ALUMNO constará de las siguientes acciones: PEDIR cl,c2,c3 p ← (cl + c2 + c3 ) / 3 DESPLEGAR p FINP Nótese que las variables que se utilizan para obtener el promedio de todos los alumnos son las mismas, y esto no ocasiona ningún problema, pues al calcular el promedio de un alumno, éste inmediatamente se despliega, con lo que se cumple lo necesario para ese alumno. Cuando se procesa el promedio del alumno siguiente los datos del alumno anterior ya no se necesitan: entonces no afecta de ningún modo usar las mismas variables para resolver el problema. Paso 4. Diagrama de flujo (véanse Figs. 4.29 y 4.30): Hay que notar que este problema requirió del uso de un ciclo con un número determinado de iteraciones, la que a su vez requirió de una estructura secuencial, en este caso los bloques que componen al proceso ALUMNO. 106 PARTE II. LÓGICA COMPUTACIONAL Figura 4.29 Figura 4.30 CAPÍTULO 4. TIPOS DE PROBLEMAS 107 Prueba 1 i← 1 Ejecuta ALUMNO, debido a que el valor de i no es mayor que 5 cl ←8 c2←9 c3←9 p ← 8.66 Termina ALUMNO e incrementa el valor de i en 1. i← 2 Ejecuta ALUMNO debido a que el valor de i no es mayor que 5 cl←7 c2←5 c3←6 p←6 Termina ALUMNO e incrementa el valor de i en 1. i← 3 Ejecuta ALUMNO debido a que el valor de i no es mayor que 5 cl←9 c2← 10 c3←6 p ← 8.33 Termina ALUMNO e incrementa el valor de i en 1. i← 4 Ejecuta ALUMNO debido a que el valor de i no es mayor que 5 cl← 10 c2←9 c3← 10 p ← 9.66 Termina ALUMNO e incrementa el valor de i en 1. i← 5 Ejecuta ALUMNO debido a que el valor de i no es mayor que 5 cl←8 c2←7 c3←8 p ←7.66 Termina ALUMNO e incrementa el valor de i en 1. i←6 Debido a que el valor de i ya es mayor que 5, termina el ciclo y ejecuta FIN. Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad. 108 PARTE I I . LÓGICA COMPUTACIONAL Solución 2 Paso 2. Planeación de la solución: Resolveremos ahora el problema sin hacer uso de ciclos para justificar su gran utilidad. Primero será necesario conocer las tres calificaciones parciales del alumno 1, qué serán las entradas para encontrar el promedio de este alumno. Posteriormente podremos aplicar la fórmula para calcular el promedio: promedio = ( calificación 1 + calificación2 + calificación3 ) / 3 Para continuar con los demás alumnos, la secuencia sería exactamente la misma que para el alumno 1. SALIDAS: promedio de cada alumno ENTRADAS: calificación 1, calificación2, calificación3 de cada alumno DATOS ADICIONALES: Ninguno SOLUCIÓN: Por cada alumno aplicar la fórmula: promedio = (calificación 1 + calificación2 + calificación3 ) / 3 Paso 3. Algoritmo: De ahora en adelante llamaremos: c1 c2 c3 p 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. a a a a calificación 1 calificación 2 calificación 3 promedio PEDIR cl,c2,c3 p ← (c1 + c2 + c3) / 3 DESPLEGAR p PEDIR c1,c2,c3 p ← (c1 + c2 + c3) / 3 DESPLEGAR p PEDIR cl,c2,c3 p ← (c1 + c2 + c3) / 3 DESPLEGAR p PEDIR cl,c2,c3 p←(cl + c2 + c3)/3 DESPLEGAR p PEDIR cl,c2,c3 p ← (c1 + c2 + c3) / 3 15. DESPLEGAR p Al resolver así el problema, el trabajo del programador es más arduo que con la solución 1. Paso 4. Diagrama de flujo (véanse Fig. 4.31): Prueba I c1←8 CAPÍTULO 4. Figura 4.31 TIPOS DE PROBLEMAS 109 110 PARTE II. LÓGICA COMPUTACIONAL c2←9 c3←9 p ← 8.66 cl←7 c2←5 c3←6 p←6 c1←9 c2← 10 c3←6 p←8.33 c1← 10 c2←9 c3← 10 p ← 9.66 cl←8 c2←7 c3←8 p ← 7.66 Ejercicio: Realizar al menos otra prueba a este diagrama de flujo para verificar su funcionalidad. PROBLEMA 2 Una compañía de seguros tiene contratados a n vendedores. Cada uno hace tres ventas a la semana. Su política de pagos es que un vendedor recibe un sueldo base, y 10% extra por comisiones de sus ventas. El gerente de su compañía desea saber cuánto dinero obtendrá en la semana cada vendedor por concepto de comisiones por las tres ventas realizadas, y cuánto tomando en cuenta su sueldo base y sus comisiones. Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: Dado que para cada uno de los n vendedores se efectuarán las mismas acciones, se puede determinar que es necesario utilizar un ciclo. Como en la definición del problema se plantea que son n vendedores, se puede concluir que el número de iteraciones está determinado ya que el número de vendedores se puede pedir como dato de entrada. Por lo tanto, el ciclo que le corresponde es el siguiente: 1. 2. i ←1 SI i > n ENTONCES IR al paso 3 DE OTRA FORMA VENDEDOR i←i+1 CAPÍTULO 4. TIPOS DE PROBLEMAS 111 IR al paso 2 3.X Por otra parte, para cada uno de los n vendedores se realizará el proceso VENDEDOR, que estará compuesto de las siguientes acciones: —Pedir el monto de las 3 ventas realizadas y el sueldo base. —Aplicar la fórmula: total de ventas = venta 1 + venta2 + venta3 —Aplicar la fórmula: comisión = total de ventas x 0.1 —Aplicar la fórmula: total a recibir = sueldo base + comisión —Desplegar comisión y total a recibir El proceso X corresponderá a la acción de terminar, pues no hay acciones posteriores. Una vez terminada la serie de acciones necesarias para cada vendedor es importante verificar el valor del contador, es decir, si el contador todavía no es mayor que n, significa que no se ha terminado de procesar a los n vendedores y será necesario incrementar el contador en uno y repetir el proceso VENDEDOR para el siguiente. En caso contrario el ciclo se habrá terminado. SALIDAS: comisión y total a recibir por cada vendedor ENTRADAS: número de vendedores, sueldo base, ventas 1, ventas2 y ventas3 de cada vendedor. DATOS ADICIONALES: La comisión de cada vendedor equivale al 10% de las ventas semanales. SOLUCIÓN: Ver algoritmo. Paso 3. Algoritmo: De ahora en adelante llamaremos: n a número de vendedores i sb vi v v tv c a variable contador de vendedores a sueldo base a ventas 1 a ventas 2 a ventas 3 a total de ventas a comisión tr a total a recibir 1. PEDIR n 2. i ← 1 3. SI i > n ENTONCES IR al paso 4 112 PARTE II. LÓGICA COMPUTACIONAL DE OTRA FORMA VENDEDOR i←i + 1 IR al paso 3 4. FIN Proceso VENDEDOR: 1. 2. 3. 4. 5. PEDIR sb, v1, v2, tv ← v1 + v2 + v3 c ← tv * 0.1 tr ← sb + c DESPLEGAR c, tr 6 FINP Nótese que las variables que se utilizan para todos los vendedores son las mismas, y esto no ocasiona ningún problema pues al calcular comisión y total a recibir dé un vendedor, inmediatamente se despliega. Cuando se procesa lo del vendedor siguiente los datos del vendedor anterior ya no se necesitan, por lo que usar las mismas variables no afectó de ninguna manera para resolver el problema. Paso 4. Diagrama de flujo (véanse Figs. 4.32 y 4.33): Al igual que la solución 1 del problema anterior, requerimos en este problema de un ciclo con un número determinado de iteraciones, que necesitó a su vez de una estructura secuencial, dada por el proceso VENDEDOR. Prueba I n←3 i← 1 Ejecuta VENDEDOR pues el valor de i no es mayor que el valor de n. sb ← 3000 v1 ← 10 000 v2 ←20 000 v3 ←17 000 tv ← 47 000 c ← 4700 tr ←7700 Imprime 4700, que es la comisión que obtuvo el vendedor, y 7700, que es lo que éste va a recibir como pago por su salario base y su comisión. Termina VENDEDOR e incrementa el valor de i en 1. i←2 Ejecuta VENDEDOR debido a que el valor de i no es mayor que el valor de n. sb ← 4000 v1 ← 45 000 v2 ← 32 000 CAPÍTULO 4. Figura 4.32 Figura 4.33 TIPOS DE PROBLEMAS 113 114 PARTE II. LÓGICA COMPUTACIONAL v3 ← 33 000 tv← 110 000 c ← 11 000 tr ← 15 000 Imprime el valor de c y tr. Termina VENDEDOR e incrementa el valor de i en 1.ñ i← 3 Ejecuta VENDEDOR debido a que el valor de i no es mayor que el valor de n. sb ← 2500 v1 ←15 000 v2 ← 20 000 v3 ← 10 000 tv ← 45 000 c ← 4500 tr ← 7000 Imprime el valor de c y tr. Termina VENDEDOR e incrementa el valor de i en 1. i←4 Ejecuta FIN debido a que el valor de i es mayor que el de n. Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad. PROBLEMA 3 En una empresa se requiere calcular el salario semanal de cada uno de los n obreros que laboran en ella. El salario se obtiene de la siguiente manera: — Si el obrero trabaja 40 horas o menos se le paga $4 por hora. —Si el obrero trabaja más de 40 horas se le paga $4 por cada una de las primeras 40 horas y $6 por cada hora extra. Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: Debido a que en la definición del problema se plantea que son n obreros y para cada uno las acciones que se efectuarán son las mismas, se puede concluir que es necesario un ciclo con un número de iteraciones determinado, pues el número de obreros se puede pedir como dato de entrada. Por lo tanto, el ciclo que le corresponde es el siguiente: 1. i ← 1 2. SI i > n ENTONCES IR al paso 3 DE OTRA FORMA OBRERO CAPÍTULO 4. TIPOS DE PROBLEMAS 115 i ← i+ 1 IR al paso 2 3. X Por otra parte, para cada uno de los n obreros se efectuará el proceso OBRERO, el cual estará compuesto de las siguientes acciones: —Pedir el número de horas trabajadas —Determinar el salario del obrero utilizando la siguiente condicional: SI horas trabajadas > 40 ENTONCES horas extras = horas trabajadas - 40 salario = 40 x 4 + horas extras x 6 DE OTRA FORMA salario = horas trabajadas x 4 —Desplegar el salario El proceso X corresponderá a la acción de terminar, pues no hay acciones posteriores. SALIDAS: salario semanal ENTRADAS: número de obreros, horas trabajadas de cada obrero DATOS ADICIONALES: — Si el obrero trabaja 40 horas o menos se le paga $4 por hora. —Si el obrero trabaja más de 40 horas se le paga $4 por cada una de las primeras 40 horas y $6 por cada hora extra. Paso 3. Algoritmo: De ahora en adelante llamaremos: n a numero de obreros i ht he s a a a a variable contador de obreros horas trabajadas horas extras salario 1. PEDIR n 2. i← 1 3. SI i> n ENTONCES IR al paso 4 DE OTRA FORMA OBRERO i←i+1 IR al paso 3 4. FIN 116 PARTE II. LÓGICA COMPUTACIONAL Proceso OBRERO: 1. PEDIR ht 2. SI ht > 40 ENTONCES h e← h t - 40 s←40*4 + he*6 DE OTRA FORMA s ← ht * 4 3. DESPLEGAR s 4. FINP Paso 4. Diagrama de flujo (Figs. 4.34 y 4.35). Este problema requirió de una estructura selectiva simple, contenida dentro de un ciclo con un número determinado de iteraciones. Prueba 1 n←4 i←1 Ejecuta OBRERO debido a que el valor de i no es mayor que el valor de n. ht←65 he←25 s←310 Imprime 310, que es el salario del primer obrero. Termina OBRERO e incrementa el valor de i en 1. i←2 Ejecuta OBRERO, debido a que el valor de i no es mayor que el valor de n. ht←35 s← 140 Imprime 140, que es el salario del segundo obrero. Termina OBRERO e incrementa el valor de i en 1. i←3 Ejecuta OBRERO debido a que el valor de i no es mayor que el valor de n. ht←40 s← 160 Imprime 160, que es el salario del tercer obrero. Termina OBRERO e incrementa el valor de i en 1. i←4 Ejecuta OBRERO debido a que el valor de i no es mayor que el valor de n. ht←80 he←40 CAPÍTULO 4. Figura 4.34 Figura 4.35 TIPOS DE PROBLEMAS 117 118 PARTE II. LÓGICA C0MPUTAC10NAL S←400 Imprime 400, que es el salario del cuarto obrero. Termina OBRERO e incrementa el valor de i en 1. i← 5 Ejecuta FIN debido a que el valor de i es mayor que el de n. Ejercicio: Realizar al menos dos pruebas más a este diagrama de flujo para verificar su funcionalidad. PROBLEMA 4 Determinar cuántos hombres y cuántas mujeres se encuentran en un grupo de n personas, suponiendo que los datos son extraídos alumno por alumno. Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: El proceso de preguntar el sexo de una persona y categorizarlo se repetirá para cada una de las n personas, por lo que emplearemos un ciclo con un número determinado de iteraciones, pidiendo el valor de n como dato de entrada. La estructura que se deberá emplear es: 1 i← 1 2 Sli > n ENTONCES IR al paso 3 DE OTRA FORMA PERSONA i←i + 1 IR al paso 2 3 X Por otra parte, será necesario utilizar dos variables una para hombres y otra para mujeres, que nos ayuden a realizar el conteo de las personas. Estas variables tomarán un valor inicial de cero, pues al iniciar el conteo se considera que hay cero hombres y cero mujeres. Conforme se vayan encontrando hombres la variable para contar hombres se irá incrementando de 1 en 1, y de la misma manera, conforme se vayan encontrando mujeres. Antes de iniciar el proceso PERSONA se deberá poner el valor de las variables que contarán hombres y mujeres en cero, de la siguiente manera: —hombres = 0 — mujeres = 0 Además, para cada una de las n personas se realizará el proceso PERSONA, el cual estará compuesto por las siguientes acciones: CAPÍTULO 4. TIPOS DE PROBLEMAS 119 —Pedir el sexo de la persona — Si el sexo es masculino se sabrá que hay un hombre más en el grupo y para llevar este conteo haremos uso de una fórmula como la siguiente: hombres = hombres + 1 —Si el sexo es femenino se sabrá que hay una mujer más en el grupo y para llevar este conteo haremos uso de una fórmula como la siguiente: mujeres = mujeres + 1 El proceso X se realizará cuando se termine el conteo de todas las personas, es decir, cuando termine de ejecutarse el ciclo y estará compuesto de la acción: —Desplegar el número de mujeres y de hombres SALIDAS: número de hombres y mujeres ENTRADAS: número de personas, sexo de cada persona DATOS ADICIONALES: Ninguno Paso 3. Algoritmo: De ahora en adelante llamaremos: i s$ h m n a a a a a contador del número de ciclos sexo de la persona variable contador de hombres variable contador de mujeres número de ciclos 1. 2. 3. 4. 5. PEDIR n h←0 m←0 i← 1 SI i > n ENTONCES IR al paso 6 DE OTRA FORMA PERSONA i←i + 1 IR al paso 5 6. DESPLEGAR h, m Proceso PERSONA: 1. PEDIR s$ 2. SI s$ = "MASCULINO" ENTONCES 120 PARTE II. LÓGICA COMPUTACIONAL h←h + 1 DE OTRA FORMA m← m+1 3. FINP Paso 4. Diagrama de flujo (véanse Figs. 4.36 y 4.37). En este problema requerimos de un ciclo con un número determinado de iteraciones que a su vez requirió de una estructura selectiva simple para llegar a su solución. Prueba 1 n ←6 i← 1 h←0 m←0 Ejecuta PERSONA, debido a que el valor de i no es mayor que 6. s$ ← "MASCULINO" h← 1 Termina PERSONA e incrementa el valor de i en 1. i← 2 Ejecuta PERSONA debido a que el valor de i no es mayor que 6. s$ ←"MASCULINO" h←2 Termina PERSONA e incrementa el valor de i en 1. i← 3 Ejecuta PERSONA debido a que el valor de i no es mayor que 6. s$ ← "FEMENINO" m←1 Termina PERSONA e incrementa el valor de i en 1. i←4 Ejecuta PERSONA debido a que el valor de i no es mayor que 6. s$ ← "FEMENINO" m←2 Termina PERSONA e incrementa el valor de i en 1. i← 5 Ejecuta PERSONA debido a que el valor de i no es mayor que 6. s$ ← "MASCULINO" h←3 Termina PERSONA e incrementa el valor de i en 1. i← 6 CAPÍTULO 4. Figura 4.36 Figura 4.37 TIPOS DE PROBLEMAS 121 122 PARTE II. LÓGICA COMPUTACIONAL Ejecuta PERSONA debido a que el valor de i no es mayor que 6. s$ ← "MASCULINO" h←4 Termina PERSONA e incrementa el valor de i en 1. i←7 Ejecuta DESPLEGAR h,m debido a que i es mayor que 6, con lo cual se desplegará 4 y 2, los cuales son el número de hombres y mujeres del grupo, respectivamente. Ejercicio: Realizar al menos dos pruebas más a este diagrama de flujo para verificar su funcionalidad. PROBLEMA 5 El Departamento de Seguridad Pública y Tránsito del D.F., desea saber, de los n autos que entran a la ciudad de México, cuántos entran con calcomanía de cada color. Conociendo el último dígito de la placa de cada automóvil se puede determinar el color de la calcomanía utilizando la siguiente relación: DÍGITO 1 o2 3o4 5o6 7o8 9oO COLOR amarilla rosa roja verde azul Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: Cada auto que entre a la ciudad se clasificará según su dígito, por lo que se deberá utilizar un ciclo. Asimismo el número de iteraciones está determinado ya que se puede pedir como dato de entrada, por lo cual se utilizará un ciclo como el siguiente: 1 i← 1 2 SI i > n ENTONCES IR al paso 3 DE OTRA FORMA AUTO i←i + 1 IR al paso 2 3 X Por otra parte será necesario utilizar cinco variables, una para cada color de calcomanía, que nos ayuden al conteo de los autos de cada color. Estas variables tomarán un valor inicial de cero, pues al iniciar el conteo se considera que hay cero autos con calcomanía de cada color. Conforme se vayan CAPÍTULO 4. TIPOS DE PROBLEMAS 123 encontrando autos con calcomanía de cada color la variable para contar las calcomanías del color encontrado se irá incrementando de 1 en 1. Así pues, antes de comenzar con el proceso AUTO se deberá inicializar el valor de las variables que contarán autos de la siguiente manera: —amarillas = 0 —rosas = 0 —rojas= 0 —verdes = 0 —azules = 0 Por otra parte, para cada uno de los n autos se realizará el proceso AUTO, que estará compuesto de las siguientes acciones: —Pedir el último dígito de la placa. — Si el dígito es 1 o 2, se sabrá que hay un auto más con calcomanía amarilla y para llevar este conteo haremos uso de una fórmula como la siguiente: amarillas = amarillas + 1 — Si el dígito es 3 o 4 se sabrá que hay un auto más con calcomanía rosa y para llevar este conteo usaremos una fórmula como la siguiente: rosas = rosas + 1 — Si el dígito es 5 o 6 se sabrá que hay un auto más con calcomanía roja y para llevar este conteo haremos uso de una fórmula como la siguiente: rojas = rojas + 1 — Si el dígito es 7 o 8 se sabrá que hay un auto más con calcomanía verde y para llevar este conteo haremos uso de una fórmula como la siguiente: verdes = verdes + 1 — Si el dígito es 9 o 0 se sabrá que hay un auto más con calcomanía azul y para llevar este conteo haremos uso de una fórmula como la siguiente: azules = azules + 1 El proceso X se realizará cuando se termine el conteo de todos los autos, es decir, cuando termine de ejecutarse el ciclo y estará compuesto de la acción: — Desplegar el número de autos con calcolmanía de cada color. SALIDAS: número de autos con calcomanía amarilla, número de autos con calcomanía rosa, número de autos con calcomanía roja, número de autos con calcomanía verde, número de autos con calcomanía azul. ENTRADAS: número de autos, último dígito de la placa de cada auto. DATOS ADICIONALES: Ninguno Paso 3. Algoritmo: De ahora en adelante llamaremos: 124 n a i a am a rs a rj a ve a az a ud a 1 2 3 4 5 6 7 8 PARTE II. LÓGICA COMPUTACIONAL número de autos contador del número de iteraciones variable contador de autos con calcomanía amarilla variable contador de autos con calcomanía rosa variable contador de autos con calcomanía roja variable contador de autos con calcomanía verde variable contador de autos con calcomanía azul último dígito de la placa PEDIR n am ← 0 r s ←0 rj ←0 ve ← 0 az←0 i←1 SI i > n ENTONCES IR al paso 9 DE OTRA FORMA AUTO i=i+1 IR al paso 8 9 DESPLEGAR am, rs, rrj, . ve, , az Proceso AUTO: 1 PEDIR ud 2 SI ud = 1 OR ud = 2 ENTONCES am ← am + 1 DE OTRA FORMA SI ud = 3 OR ud = 4 ENTONCES rs ← rs + 1 DE OTRA FORMA SI ud = 5 OR ud = 6 ENTONCES rj ← rj + 1 DE OTRA FORMA SI ud = 7 OR ud = 8 ENTONCES ve ← ve + 1 DE OTRA FORMA SI ud = 9 OR ud = 0 ENTONCES az ← az + 1 DE OTRA FORMA DESPLEGAR "Dígito erróneo" i ←i -1 3. FINP Paso 4. Diagrama de flujo (vánse Figs. 4.38 y 4.39). CAPÍTULO 4. TIPOS DE PROBLEMAS 125 126 PARTE I I . LÓGICA COMPUTACIONAL Nos habremos percatado de que en este problema se usó una estructura selectiva compuesta contenida en un ciclo con un número determinado de iteraciones. Prueba 1 n← 10 i←1 am ← 0 rs ← 0 rj ← 0 ve ← 0 az← 0 Ejecuta AUTO debido a que el valor de i no es mayor que 10. u d ←3 rs ← 1 Termina AUTO e incrementa el valor de i en 1. i ←2 Ejecuta AUTO debido a que el valor de i no es mayor que 10. ud← 1 am ← 1 Termina AUTO e incrementa el valor de i en 1. i ←3 Ejecuta AUTO debido a que el valor de i no es mayor que 10. ud ← 4 rs ← 2 Termina AUTO e incrementa el valor de i en 1. i ←4 Ejecuta AUTO debido a que el valor de i no es mayor que 10. ud←9 az ← 1 Termina AUTO e incrementa el valor de i en 1. i ←5 Ejecuta AUTO debido a que el valor de i no es mayor que 10. ud←8 ve ← 1 Termina AUTO e incrementa el valor de i en 1. i ←6 jecuta AUTO debido a que el valor de i no es mayor que 10. ud ← 4 rs ← 3 Termina AUTO e incrementa el valor de i en 1. i ←7 CAPÍTULO 4. TIPOS DE PROBLEMAS 127 Ejecuta AUTO debido a que el valor de i no es mayor que 10. ud←0 az ← 2 Termina AUTO e incrementa el valor de i en 1. i ←8 Ejecuta AUTO debido a que el valor de i no es mayor que 10. ud←23 Despliega "dígito erróneo" y ejecuta AUTO con el mismo valor de i, ya que éste se decrementa y luego se incrementa: i ←7 i ←8 d←2 am ← 2 Termina AUTO e incrementa el valor de i en 1. i ←9 Ejecuta AUTO debido a que el valor de i no es mayor que 10. ud←3 rs ← 4 Termina AUTO e incrementa el valor de i en 1. i← 10 Ejecuta AUTO debido a que el valor de i no es mayor que 10. ud ←9 az←3 Termina AUTO e incrementa el valor de i en 1. i← 11 Ejecuta DESPLEGAR am,rs,rj,ve,az cuyos valores son 2,4,0,1,3 debido a que i es mayor que 10. Ejercicio: Realizar al menos dos pruebas más a este diagrama de flujo para verificar su funcionalidad. PROBLEMA 6 Obtener el promedio de calificaciones de un grupo de n alumnos. Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: En un grupo es fácilmente determinable el número de alumnos que lo componen, así que podemos 128 PARTE II. LÓGICA COMPUTACIONAL asumir que el número de iteraciones que requeriremos para nuestro ciclo es determinable y puede ser pedido como dato de entrada. Para poder obtener este promedio necesitamos saber la calificación de cada alumno, sumarlas y dividir esta suma entre el valor n. Para obtener la suma de las calificaciones tendremos que usar la siguiente expresión: suma ← suma + calificación Lo cual significa que el valor de la variable calificación se sumará al valor de la variable suma y el resultado quedará nuevamente en la variable suma. Al paso de las iteraciones, esta expresión irá acumulando las calificaciones en la variable suma, por lo que a la variable suma se le llamará acumulador. DEFINICIÓN. Un acumulador es una variable que suma sobre sí misma un conjunto de valores para de esta manera tener la suma de todos ellos en una sola variable. El formato general de un acumulador es: acumulador ← acumulador + variable Los acumuladores son frecuentemente usados en los ciclos cuando el problema requiera ir acumulando valores obtenidos en las iteraciones. Nótese que las expresiones: suma ← suma + calificación y i←i+i tienen similitud en que un valor es sumado a una variable cuyo resultado quedará en la misma variable. Sabemos que la variable i es un contador porque así lo hemos manejado para contar las iteraciones en un ciclo. La diferencia entre un contador y un acumulador es que mientras el primero va aumentando de uno en uno, el acumulador va aumentando en una cantidad variable. Como antes de sumar la primera calificación no se ha sumado nada, el valor inicial del acumulador suma debe ser de 0. Volviendo al problema, una vez que obtengamos la suma de las calificaciones al terminar el ciclo aplicaremos la fórmula: promedio = suma / n Definamos ahora nuestros datos: SALIDAS: promedio del grupo CAPÍTULO 4. TIPOS DE PROBLEMAS 129 ENTRADAS: número de alumnos, calificación de cada alumno DATOS ADICIONALES: ninguno Paso 3. Algoritmo: De ahora en adelante llamaremos: c a calificación s a suma p a promedio 1. 2. 3. 4. 5. 6. PEDIR n s←0 i← 1 SI i > n ENTONCES IR al paso 5 DE OTRA FORMA ALUMNO i← i + 1 IR al paso 4 p←s/n DESPLEGAR p Proceso ALUMNO: 1. 2. 3. Pediré s←s+c FINP Paso 4. Diagrama de flujo (véanse Figs. 4.40 y 4.41). En este problema ocupamos un ciclo con un número determinado de iteraciones que contiene una estructura de tipo secuencial. Efectuemos ahora una prueba a nuestro diagrama suponiendo que existe un grupo de cinco alumnos cuyas calificaciones son: 7, 5, 8, 10 y 10. Prueba: n←5 s←0 i← 1 Ejecuta ALUMNO debido a que el valor de i no es mayor que 5. c ←7 s ←7 Termina ALUMNO e incrementa el valor de i en 1. i←2 130 PARTE 11. LÓGICA COMPUTACIONAL Figura 4.41 Figura 4.40 I CAPÍTULO 4. TIPOS DE PROBLEMAS 131 Ejecuta ALUMNO debido a que el valor de i no es mayor que 5. c←5 s← 12 Termina ALUMNO e incrementa el valor de i en 1. Ejecuta ALUMNO debido a que el valor de i no es mayor que 5. c←8 s←20 Termina ALUMNO e incrementa el valor de i en 1. Ejecuta ALUMNO debido a que el valor de i no es mayor que 5. c← 10 s←30 Termina ALUMNO e incrementa el valor de i en 1. Ejecuta ALUMNO debido a que el valor de i no es mayor que 5. c← 10 s←40 Termina ALUMNO e incrementa el valor de i en 1. Como i > 6 ejecuta: p← 8 y finalmente ejecuta DESPLEGAR p, por lo cual despliega el valor 8, el cual es el promedio de 7, 5, 8, 10 y 10. En esta prueba se puede notar cómo antes del ciclo, el acumulador s tuvo que inicializarse con el valor cero, para que en cada una de las iteraciones se fueran acumulando correctamente los valores de la variable c. Ejercicio: Realizar al menos otra prueba a este diagrama de flujo para verificar su funcionalidad. PROBLEMA 7 Una persona desea invertir su dinero en un banco, el cual le otorga un 2% de interés. ¿Cuál será la cantidad de dinero que esta persona tendrá al cabo de un año si la ganancia de cada mes es reinvertida? Paso 1. Definición del problema: Igual a la redacción del problema. Solución 1 Paso 2. Planeación de la solución: Este problema puede requerir del uso de un ciclo con un número determinado de iteraciones, pues el proceso de invertir, obtener una ganancia y reinvertir los intereses, se repite mes con mes durante los 12 que conforman un año. 132 PARTE II. LÓGICA COMPUTACIONAL La cantidad invertida en el primer mes, más la ganancia obtenida por el interés de ese mismo mes se sumarán y constituirán la nueva cantidad invertida para el segundo mes, y así sucesivamente con los meses posteriores. Esto se expresa de la siguiente manera: ganancia = cantidad a invertir x 0.02 y cantidad a invertir = cantidad a invertir + ganancia Podemos observar que la función de la variable cantidad a invertir es la de acumular la inversión con las ganancias de los 12 meses, por lo que esta variable es un acumulador. Evidentemente el valor inicial de esta variable será la cantidad a invertir en el primer mes, por lo que tendrá que ser pedido como un valor de entrada al principio. Al final, el valor acumulado de cantidad a invertir será el resultado de invertir 12 meses una cantidad a invertir inicial. SALIDAS: cantidad a invertir final ENTRADAS: cantidad a invertir inicial DATOS ADICIONALES: Se otorga una ganancia mensual del 2% sobre el monto de la inversión. Paso 3. Algoritmo: De ahora en adelante llamaremos: i a contador de meses g a ganancia c a cantidad a invertir 1. PEDIR c 2. i← 1 3. SI i > 12 ENTONCES IR al paso 4 DE OTRA FORMA MES i←i + 1 IR al paso 2 4. DESPLEGAR c Proceso MES: 1. g ← c * 0.02 2. c ← c + g 3. FINP Puso 4. Diagrama de flujo (véanse Figs. 4.42 y 4.43). CAPÍTULO 4. Figura 4.42 Figura 4.43 TIPOS DE PROBLEMAS 133 134 PARTE II. LÓGICA C0MPUTAC10NAL Nótese que mientras transcurren las 12 iteraciones el valor de la variable c que se emplea en la fórmula g ← c * 0.02 es el valor acumulado que obtuvo en la iteración anterior. Al final se imprime la cantidad a invertir en el décimo tercer mes, la cual ya no fue reinvertida, pero constituye el valor final de los 12 meses anteriores. El problema requirió de una estructura secuencial contenida en un ciclo con un número determinado de iteraciones. Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad. Solución 2 Paso 2. Planeación de la solución: Las dos fórmulas: ganancia = cantidad a invertir x 0.02 y cantidad a invertir = cantidad a invertir + ganancia Pueden ser sustituidas por la fórmula: cantidad a invertir = cantidad a invertir x 1.02 por lo que el algoritmo y el diagrama de flujo de la solución anterior quedarían: Paso 3. Algoritmo: 1. PEDIR c 2. i← 1 3. SI i > 12 ENTONCES DESPLEGAR c IR al paso 4 DE OTRA FORMA MES i←i + 1 IR al paso 2 4. FIN Proceso MES: 1. c←c*1.02 2. FINP Paso 4. Diagrama de flujo (véase Fig. 4.44): CAPÍTULO 4. TIPOS DE PROBLEMAS 135 136 PARTE II. LÓGICA COMPUTACIONAL Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad. Solución 3 Paso 2. Planeación de la solución: Basándonos en la solución anterior, veamos que es lo que va ocurriendo con la variable c: primera iteración segunda iteración c ← c x 1.02 c ← c x 1.02 decimasegunda iteración c ← c x 1.02 Como se vio en la solución anterior, el valor que da como resultado la primera iteración es empleado en la segunda iteración para efectuar la multiplicación, y así sucesivamente con las diez iteraciones restantes. Esto lo podemos resumir de la siguiente manera: c←c x 1.02x1.02x...x1.02 12 12 veces Multiplicar varias veces una cantidad por sí misma, equivale a la operación de potenciación, por lo que: 1.02x1.02x...x1.02 = 1.0212 12 veces por lo que otra solución para este problema sería: Paso 3. Algoritmo: 1. 2. 3. PEDIR c c←c*1.02 ^ 12 DESPLEGAR c Paso 4. Diagrama de flujo (véase Fig. 4.45). Así, se habrá notado que una mejor planeación del problema lleva a una mejor solución. Se ha simplificado el problema de repetitivo a simplemente secuencial. Ejercicio: Realizar al menos una prueba a este diagrama de flujo para verificar su funcionalidad. CAPÍTULO 4. TIPOS DE PROBLEMAS 137 Figura 4.45 PROBLEMA 8 Calcular el promedio de edades de hombres, mujeres y de todo un grupo de n alumnos. Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: En primer lugar debemos pedir las n edades del grupo, por lo cual emplearemos un ciclo con « iteraciones, en donde el valor de n será pedido como dato de entrada. En cada ciclo deberemos pedir la edad y sexo de cada alumno. Para determinar los promedios pedidos emplearemos las siguientes fórmulas: promedio de hombres = suma de edades de hombres / número de hombres promedio de mujeres = suma de edades de mujeres / número de mujeres promedio de grupo = (suma de edades de hombres + suma de edades de mujeres) / n Por lo cual el problema requerirá de un acumulador de las edades de los hombres, un acumulador de las edades de las mujeres, un contador del número de hombres y un contador del número de mujeres que tiene el grupo. Acumular edades y contar alumnos de un sexo en especial quedará determinado por la condicional: SI sexo = "MASCULINO" ENTONCES Acumular edad de la persona en acumulador de hombres Sumar uno al contador del número de hombres DE OTRA FORMA Acumular edad de la persona en acumulador de mujeres Sumar uno al contador del número de mujeres SALIDAS: promedio de edades de hombres, 138 PARTE II. LÓGICA COMPUTACIONAL promedio de edades de mujeres, promedio del grupo ENTRADAS: número de alumnos, edad y sexo de cada uno de los alumnos DATOS ADICIONALES: ninguno Este problema es una modificación al problema resuelto 4, pero con un mayor grado de complejidad pues incluye, además de los dos contadores, dos acumuladores. Paso 3. Algoritmo: De ahora en adelante llamaremos: n i e s$ seh sem nh nm peh pem Pg a a a a a a a a a a a número de alumnos contador del número de edad del alumno sexo del alumno suma de edades de hombres suma de edades de mujeres número de hombres número de mujeres promedio de edades de hombres promedio de edades de mujeres promedio del grupo 1. Pedir n 2. 3. 4. 5. 6. 7. nh nm seh sem i← SI i 8. 9. 10. ←0 ←0 ←0 ←0 1 > n ENTONCES IR al paso 8 DE OTRA FORMA ALUMNO i←i + 1 IR al paso 7 peh ← seh / nh pem ← sem / nm pg ← (seh + sem) / n 11. Desplegar peh, pem, pg Proceso ALUMNO: 1. 2. Pedir e, s$ Si s$ = "MASCULINO" ENTONCES CAPÍTULO 4. TIPOS DE PROBLEMAS 139 nh ← nh + 1 seh ←seh + e DE OTRA FORMA nm ← nm + 1 sem ← sem + e 3. FINP Paso 4. Diagrama de flujo (véanse Figs. 4.46 y 4.47). Véase que dentro del ciclo se encuentra una estructura selectiva simple, igual a la del problema resuelto 4, sólo que esta vez se usaron acumuladores. Efectuemos ahora una prueba a nuestro diagrama suponiendo que existe un grupo de cinco alumnos. Prueba: n←5 nh ←0 nm ← 0 seh←0 sem ← 0 i← 1 Ejecuta ALUMNO debido a que el valor de i no es mayor que 5. e← 18 s$ ← "FEMENINO" Como s$ no es igual a "MASCULINO" ejecuta: nm ← 1 sem ← 18 i←2 Ejecuta ALUMNO debido a que el valor de i no es mayor que 5. e← 17 s$ ← "FEMENINO" Como s$ no es igual a "MASCULINO" ejecuta: nm ← 2 sem ← 35 i←3 Ejecuta ALUMNO debido a que el valor de i no es mayor que 5. e←20 s$ ← "MASCULINO" 140 PARTE II. LÓGICA COMPUTACIONAL Figura 4.46 CAPÍTULO 4. Figura 4.47 Como s$ es igual a "MASCULINO" ejecuta: nh←1 seh ← 20 i ←4 Ejecuta ALUMNO debido a que el valor de i no es mayor que 5. e← 19 s$ ← "FEMENINO" Como s$ no es igual a "MASCULINO" ejecuta: nm ← 3 sem ← 54 i ←5 TIPOS DE PROBLEMAS 141 142 PARTE II. LÓCICA C0MPUTAC10NAL Ejecuta ALUMNO debido a que el valor de i no es mayor que 5. e←24 s$ ← "MASCULINO" Como s$ es igual a "MASCULINO" ejecuta: nh←2 seh ← 44 i← 6 Como i > 6 ejecuta: peh ← 22 pem ← 18 pg←20 Ejercicio: A continuación se proporciona otro diagrama de flujo para solucionar este mismo problema (véanse Figs. 4.48 y 4.49). Encuentre la diferencia básica entre ambos diagramas e indique: a) cuál es más entendible y b) cuál es el más eficiente en la ejecución. PROBLEMA 9 Una persona debe realizar un muestreo con 100 personas para determinar el promedio de peso de los niños, jóvenes, adultos y viejos que existen en su zona habitacional. Para ello, conforme encuentra a las personas introduce los datos a su computadora, la cual mediante un programa las clasifica y despliega los cuatro promedios que la .persona requiere. Se determinan las categorías con base en la siguiente tabla: categoría Niños Jóvenes Adultos Viejos edad 0 13 30 60 - 12 -29 -59 - adelante Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: Requeriremos en primer lugar un ciclo que ejecute exactamente 100 iteraciones, pues se procesarán a 100 personas. En cada iteración, para cada persona debemos preguntar su edad, para clasificar. Asimismo para cada persona debemos pedir su peso y sumarlo al acumulador de pesos de su categoría. Al final del ciclo aplicaremos las siguientes fórmulas: promedio de peso de niños = suma de pesos de niños / número de niños promedio de peso de jóvenes = suma de pesos de jóvenes/ número de jóvenes CAPÍTULO 4. Figura 4.48 TIPOS DE PROBLEMAS 143 144 PARTE II. LÓGICA COMPUTACIONAL promedio de peso de adultos = suma de pesos de adultos / número de adultos promedio de peso de viejos = suma de pesos de viejos / número de viejos Por lo cual requeriremos de cuatro acumuladores para los pesos y de cuatro contadores para el número de personas de cada categoría. SALIDAS: promedio de peso de niños, promedio de peso de jóvenes, promedio de peso de adultos, promedio de peso de viejos. ENTRADAS: edad y peso de cada persona DATOS ADICIONALES: Categoría Edad Niños Jóvenes Adultos Viejos 0-12 13-29 30-59 60 - adelante Paso 3. Algoritmo: De ahora en adelante llamaremos: i e P nn nj na nv spn spj spa spv ppn PPJ ppa ppv a a a a a a a a a a a a a a contador del número de personas edad de cada persona peso de cada persona número de niños número de jóvenes número de adultos número de viejos suma de pesos de niños suma de pesos de jóvenes suma de pesos de adultos suma de pesos de viejos promedio de pesos de niños promedio de pesos de jóvenes promedio de pesos de adultos a promedio de pesos de viejos 1. nn ←0 2. 3. 4. 5. 6. nj ← 0 na ← 0 nv ← 0 spn ← 0 Spj ← 0 CAPÍTULO 4. 7. 8. 9. 10. 11. 12. 13. 14. 15. TIPOS DE PROBLEMAS 145 spa ← 0 spv ← 0 i← 1 SI i > 100 ENTONCES IR al paso 11 DE OTRA FORMA PERSONA i←i + 1 IR al paso 10 ppn ← spn / nn ppj←spj/nj ppa ← spa / na ppv ← spv / nv DESPLEGAR ppn, ppj, ppa, ppv Proceso PERSONA: 1. 2. 3. PEDIR e, p Si e < = 12 ENTONCES nn ←nn + 1 spn ← spn + p DE OTRA FORMA Si e < = 29 ENTONCES nj←nj+1 spj ←spj + p DE OTRA FORMA Si e < = 59 ENTONCES na ← na + 1 spa ← spa + p DE OTRA FORMA nv ← nv + 1 spv ← spv + p FINP Paso 4. Diagrama de flujo (véanse Figs. 4.50 y 4.51): Para resolver este problema se empleó un ciclo con un número determinado de iteraciones que contiene, a su vez, una estructura de tipo selectivo compuesto. A continuación se resolverá un par de problemas útiles para la solución de otros problemas más complejos. PROBLE MA 10 Encontrar el menor valor de un conjunto de n números dados. Paso J. Definición de problema: Igual a la redacción del problema. 146 PARTE I I . LÓGICA COMPUTACIONAL Figura 4.50 CAPÍTULO 4. Figura 4.51 TIPOS DE PROBLEMAS 147 148 PARTE I I . LÓGICA COMPUTACIONAL Paso 2. Planeación de la solución: Primero, el tener que pedir n números nos hace suponer que se deberá emplear un ciclo con n iteraciones. Para encontrar el menor valor se deberá partir de un número de referencia, el cual será el primero de estos números. Éste deberá ser comparado con cada uno de los demás valores pedidos. Por cada vez que alguno de estos números sea menor que el número de referencia, éste deberá ser ahora la nueva referencia pues es el menor número hasta el momento. Cuando termine de ejecutarse el ciclo el último valor de referencia será el número más pequeño. SALIDAS: número más pequeño ENTRADAS: n, número de referencia, números DATOS ADICIONALES: ninguno Paso 3. Algoritmo: De ahora en adelante llamaremos: n a i a num a r a 1. 2. 3. 4. número de ciclos contador del número de ciclos número número de referencia PEDIR n, r i←2 SI i > n ENTONCES IR al paso 4 DE OTRA FORMA NUMERO i←i + 1 IR al paso 3 DESPLEGAR r Proceso NUMERO: 1. 2. 3. PEDIR num SI num < r ENTONCES r ← num FINP Paso 4. Diagrama de flujo (véanse Figs. 4.52 y 4.53). Hay que hacer notar que el contador del ciclo empezó esta vez con el valor de 2. Esto se debe a que antes del ciclo se pidió el primer número, que fue tomado como número de referencia; por lo tanto el ciclo se ejecutará n - 1 iteraciones pidiendo y comparando el resto de los n - 1 números. CAPÍTULO 4. TIPOS DE PROBLEMAS Figura 4.52 Prueba: Supongamos que queremos saber el menor de los siguientes números: 4, 17, -15, 8, 0 n← 5 r←4 i←2 Ejecuta NUMERO debido a que el valor de i no es mayor que 5. num ← 17 Como num no es menor que r no ejecuta acción alguna. 149 150 PARTE II. LÓGICA COMPUTACIONAL Figura 4.53 i←3 Ejecuta NUMERO debido a que el valor de i no es mayor que 5. num ←15 Como num es menor que r ejecuta: r ← 15 i←4 Ejecuta NUMERO debido a que el valor de i no es mayor que 5. num ← 8 Como num no es menor que r no ejecuta acción alguna. i←5 Ejecuta NUMERO debido a que el valor de i no es mayor que 5. num ←8 Como num no es menor que r no ejecuta acción alguna. i←6 Como i > 6 imprime el valor de r que es -15, que es el menor de los números dados. CAPÍTULO 4. TIPOS DE PROBLEMAS 151 Ejercicio: Realizar al menos una prueba más a este diagrama de flujo para verificar su funcionalidad. PROBLEMA 11 Encontrar el mayor valor de un conjunto de n números dados. Paso 1. Definición de problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: Este problema se resolverá de una manera bastante similar al anterior, sólo que esta vez, para encontrar el número mayor las comparaciones deben ser ahora buscando un número mayor que el número de referencia. SALIDAS: número más grande ENTRADAS: n, número de referencia, números DATOS ADICIONALES: ninguno Paso 3. Algoritmo: De ahora en adelante llamaremos: n a i a num a r a número de ciclos contador del número de ciclos número número de referencia 1. PEDIR n, r 2. i ← 2 3. SI i > n ENTONCES IR al paso 4 DE OTRA FORMA NUMERO i←i + 1 IR al paso 3 4. Desplegar r Proceso NUMERO: 1. PEDIR num 2. SI num > r ENTONCES r ← num 3. FINP Paso 4. Diagrama de flujo (véase Fig. 4.54). 152 PARTE II. LÓGICA COMPUTACIONAL Figura 4.54 CAPÍTULO 4. TIPOS DE PROBLEMAS 153 Como en el problema anterior el contador del ciclo empezó con el valor de 2 ya el primer número, que fue tomado como número de referencia, se compara con el resto de los n - 1 números. Prueba: Lo probaremos con los mismos valores del anterior problema: 4, 17, -15, 8, 0 n←5 r←4 i←2 Ejecuta NUMERO debido a que el valor de i no es mayor que 5. num ← 17 Como num es mayor que r ejecuta: r ← 17 i←3 Ejecuta NUMERO debido a que el valor de i no es mayor que 5. num ← -15 Como num no es mayor que r no ejecuta acción alguna. i←4 Ejecuta NUMERO debido a que el valor de i no es mayor que 5. num ← 8 Como num no es mayor que r no ejecuta acción alguna. i← 5 Ejecuta NUMERO debido a que el valor de i no es mayor que 5. num ← 8 Como num no es mayor que r no ejecuta acción alguna. i←6 Como i > 6 imprime el valor de r que es 17, que es el mayor de los números dados. Ejercicio: Realizar al menos una prueba más a este diagrama de flujo para verificar su funcionalidad. 154 PARTE II. LÓGICA C0MPUTAC10NAL Problemas propuestos 1) La presión, volumen y temperatura de una masa de aire se relacionan por la fórmula: masa = 2) 3) 4) 5) presión x volumen 0.37 x (temperatura + 460) Calcular el promedio de masas de aire de los neumáticos de n vehículos que están en compostura en un servicio de alineación y balanceo. Los vehículos pueden ser motocicletas o automóviles. Al cerrar un expendio de naranjas, 15 clientes que aún no han pagado recibirán un 15% de descuento si compran más de 10 kilos. Determinar cuánto pagará cada cliente y cuánto percibirá la tienda por esas compras. Determinar la cantidad semanal de dinero que recibirá cada uno de los n obreros de una empresa. Se sabe que cuando las horas que trabajó un obrero exceden de 40, el resto se convierte en horas extras que se pagan al doble de una hora normal, cuando no exceden de 8; cuando las horas extras exceden de 8 se pagan las primeras 8 al doble de lo que se paga por una hora normal y el resto al triple. Modificar el problema propuesto 3 para que se determine el total de dinero que la empresa tendrá que pagar por concepto de pago de salarios a los n empleados que laboran en ella. En una granja se requiere saber alguna información para determinar el precio de venta por cada kilo de huevo. Es importante determinar el promedio de calidad de las n gallinas que hay en la granja. La calidad de cada gallina se obtiene según la fórmula: calidad = peso de la gallina x altura de la gallina número de huevos que pone Finalmente para fijar el precio del kilo de huevo, se toma como base el siguiente cuadro: Promedio total de calidad Precio del kilo de huevo mayor o igual que 15 mayor que 8 y menor que 15 menor o igual que 8 1.2 x promedio de calidad 1.00 x promedio de calidad 0.80 x promedio de calidad 6) En un centro de verificación de automóviles se desea saber el promedio de puntos contaminantes de los primeros 25 automóviles que lleguen. Asimismo se desea saber los puntos contaminantes del carro que menos contaminó y del que más contaminó. 7) En la Cámara de Diputados se levanta una encuesta con todos los integrantes con el fin de determinar qué porcentaje de los n diputados está a favor del Tratado de Libre Comercio, qué porcentaje está en contra y qué porcentaje se abstiene de opinar. 8) Un entrenador le ha propuesto a un atleta recorrer una ruta de cinco kilómetros durante 10 días, para determinar si es apto para la prueba de 5 kilómetros o debe buscar otra especialidad. Para considerarlo apto debe cumplir por lo menos una de las siguientes condiciones: — Que en ninguna de las pruebas haga un tiempo mayor a 16 minutos. — Que al menos en una de las pruebas realice un tiempo menor a 14 minutos y medio. — Que su promedio de tiempos sea menor o igual a 15 minutos. 9) Para efectuar un muestreo que le indique porcentajes de marcas de automóviles, una persona se CAPÍTULO 4. TIPOS DE PROBLEMAS 155 sitúa a un lado de la carretera y clasifica los primeros 150 automóviles que pasen, según las marcas "FOR", "CHE", "VOL", "CHR", "NIS" y "OTROS". 10) Un zoólogo pretende determinar el porcentaje de animales que hay en las siguientes tres categorías de edades: de 0 a 1 año, de más de 1 año y menos de 3 y 3 o más años. El zoólogo todavía no está seguro del animal que va a estudiar. Si se decide por elefantes sólo tomará una muestra de 20 de ellos; si se decide por jirafas, tomará 15 muestras, y si son chimpancés tomará 40. 3a.2) Número indeterminado de iteraciones Son problemas que para su solución se requiere usar un ciclo, en el que el número de iteraciones es un dato desconocido y el proceso repetitivo termina hasta que el usuario lo indica. Problemas resueltos PROBLEMA 1 En una tienda de descuento las personas que van a pagar el importe de su compra llegan a la caja y sacan una bolita de color, que les dirá qué descuento tendrán sobre el total de su compra. Determinar la cantidad que pagará cada cliente desde que la tienda abre hasta que cierra. Se sabe que si el color de la bolita es roja el cliente obtendrá un 40% de descuento; si es amarilla, un 25%, y si es blanca no obtendrá descuento. Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: En primer lugar podemos determinar que es necesario usar un ciclo, puesto que todos los clientes hacen repetidamente lo mismo: escoger una bolita y obtener un descuento. También podemos deducir que el número de clientes que se atenderán es indeterminado, pues no sabemos cuántos clientes van a entrar a la tienda a lo largo del día; por lo tanto el número de iteraciones del ciclo es indeterminado; entonces la estructura que le corresponde a este problema es: 1. 2. 3. 4. CLIENTE PEDIR mas$ SI mas$ = "NO" ENTONCES IR al paso 4 DE OTRA FORMA IR al paso 1 FIN El proceso CLIENTE será el conjunto de acciones que resolverá la situación para cada cliente, mientras que el ciclo repetirá el proceso CLIENTE hasta que ya no haya más clientes; por eso después de cada ejecución se encuentra la entrada de una variable alfanumérica cuyo valor deberá ser "SÍ" o "NO" y la condición que le precede llevará a ejecutar una vez más el ciclo o le dará término. 156 PARTE I I . LÓGICA COMPUTACIONAL Por lo tanto, como el proceso CLIENTE resolverá la situación para uno solo de los clientes, éste tendrá que evaluar la siguiente condicional: SI color de la bolita = "ROJA" total con descuento = total sin descuento x 0.6 DE OTRA FORMA SI color de la bolita = "ROJA" total con descuento = total sin descuento x 0.75 DE OTRA FORMA total con descuento = total sin descuento Paso 3. Algoritmo: De ahora en adelante llamaremos: color$ a color de la bolita tsd a total sin descuento tcd a total con descuento mas$ a variable que recibe un valor de "SÍ" o "NO" dependiendo si hay más clientes o no 1. 2. 3. CLIENTE PEDIR mas$ SI mas$ = "NO" ENTONCES IR al paso 4 DE OTRA FORMA IR al paso 1 Proceso CLIENTE: 1. 2. 3. Pedir color$, tsd SI color$ = "ROJA" ENTONCES tcd ← tsd * 0.6 DE OTRA FORMA SI color$ = "AMARILLA" ENTONCES tcd ← tsd * 0.75 DE OTRA FORMA tcd ← tsd FINP Paso 4. Diagrama de flujo (véanse Figs. 4.55 y 4.56). En este diagrama podemos observar una estructura selectiva compuesta dentro de un ciclo con un número indeterminado de iteraciones. CAPÍTULO 4. TIPOS DE PROBLEMAS 157 158 PARTE I I . LÓGICA COMPUTAC1ONAL Prueba: Al llegar la primera persona del día se ejecuta el proceso P: color$ ← "AMARILLA" tsd ← 300 Como la pelotita no fue roja, la primera condición es negativa y evalúa la segunda condición. Como ésta es verdadera, se ejecuta: tcd ←225 y se imprime el resultado, que es el 25% de descuento de 300 Termina el proceso P y pide la variable mas$ para saber si continúa la ejecución del ciclo para más personas: mas$ ← "SI" Como sí hubo mas personas regresa a ejecutar el proceso P: color$ ←"ROJA" tsd ← 200 Por lo que ejecuta la parte verdadera de la primera condicional: tcd ←120 e imprime este resultado. mas$ ← "SI" color$ ← "BLANCA" tsd← 150 Ejecuta la parte falsa de la segunda condicional pues la pelota no es ni roja ni amarilla: tcd ← 150 e imprime este resultado para este comprador que no obtuvo descuento. Supongamos ahora que ya no hay más compradores y se vaya a cerrar la tienda. mas$ ← "NO" Al evaluar la condición de fin de ciclo, ésta resulta verdadera y termina de ejecutarse el ciclo y el diagrama de flujo. Ejercicio: Efectuar al menos una prueba más a este diagrama de flujo para verificar su funcionalidad. PROBLEMA 2 En un supermercado una ama de casa pone en su carrito los artículos que va tomando de los estantes. La señora quiere asegurarse de que el cajero le cobre bien lo que ella ha comprado, por lo que cada vez que toma un artículo distinto anota su precio junto con la cantidad de artículos iguales que ha CAPÍTULO 4. TIPOS DE PROBLEMAS 159 tomado y determina cuánto dinero gastará en ese artículo; a esto le suma lo que irá gastando en los demás artículos, hasta que decide que ya tomó todo lo que necesitaba. Ayudarle a esta señora a obtener el total de sus compras. Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: El hecho de ir a un supermercado sin una idea fija de lo que se va a comprar nos hace suponer que al entrar a él no sabemos el número exacto de artículos distintos que vayamos a comprar, por lo que tendremos que usar un ciclo con un número indeterminado de iteraciones, como el siguiente: 1. ARTICULO 2. PEDIR mas$ 3. SI mas$ = "NO" ENTONCES IR al paso 4 DE OTRA FORMA IR al paso 1 4. FIN En cada ciclo debemos obtener un subtotal para el artículo que se acaba de comprar mediante la siguiente fórmula: subtotal = precio del artículo x número de artículos Este subtotal lo debemos ir sumando a un total de manera que por cada artículo distinto que se compre, se incremente este total, por lo que requeriremos del uso de un acumulador, que llamaremos total de la compra, que antes de iniciar el ciclo debe empezar con el valor cero. SALIDAS: total de la compra ENTRADAS: precio, número de artículos para cada uno de los artículos distintos DATOS ADICIONALES: ninguno Paso 3. Algoritmo: De ahora en adelante llamaremos: p n sb t a a a a precio de cada artículo diferente número de artículos subtotal por artículo distinto total de la compra 1. 2. 3. 4. t←0 ARTICULO PEDIR mas$ SI mas$ = "NO" ENTONCES IR al paso 5 160 PARTE 11. LÓGICA COMPUTAC1ONAL DE OTRA FORMA IR al paso 2 5. DESPLEGAR t Proceso ARTICULO: 1 PEDIR p 2 sb ← p* n 3 t←t + sb 4 FINP Paso 4. Diagrama de flujo (véanse Figs. 4.57 y 4. 58). En este problema podremos notar que un ciclo con un número indeterminado de iteraciones, manda ejecutar una estructura secuencial. Prueba: t←0 p← 10 n←4 sb←40 t ←40 mas$ ← “SI" p←6 n←3 sb← 18 t ← 58 mas$ ← “SI" p←22 n←5 sb← 110 t← 168 mas$ ← “SI" p←6.5 n←2 sb← 13 t← 181 mas$ ← “NO” El ciclo termina de ejecutarse e imprime 181, que es la cantidad total de dinero que la señora gastó en la compra de sus artículos. CAPÍTULO 4. Figura 4.57 Figura 4.58 TIPOS DE PROBLEMAS 161 162 PARTE II. LÓGICA COMPUTACIONAL Ejercicio: Efectuar al menos una prueba más a este diagrama de flujo para verificar su funcionalidad. PROBLEMA 3 Un teatro otorga descuentos según la edad del cliente. Determinar la cantidad de dinero que el teatro deja de percibir por cada una de las categorías. Tomar en cuenta que los niños menores de 5 años no pueden entrar al teatro y que existe un precio único en los asientos. Los descuentos se hacen tomando en cuenta el siguiente cuadro: categoría 1 categoría 2 categoría 3 categoría 4 categoría 5 Edad 5-14 15-19 20-45 46-65 66 - adelante Descuento 35% 25% 10% 25% 35% Paso 1. Definición del problema: Igual a la redacción del problema Paso 2. Planeación de la solución: Emplearemos un ciclo con un número indeterminado de iteraciones ya que no tenemos manera de saber cuántas personas entrarán en un teatro. Asimismo requeriremos de 5 acumuladores para saber el total de dinero por concepto de descuentos de cada categoría. SALIDAS: total de dinero descontado en la categoría 1 total de dinero descontado en la categoría 2 total de dinero descontado en la categoría 3 total de dinero descontado en la categoría 4 total de dinero descontado en la categoría 5 ENTRADAS: precio del boleto edad de cada uno de los clientes DATOS ADICIONALES: categoría 1 categoría 2 categoría 3 categoría 4 categoría 5 Edad 5-14 15-19 20-45 46-65 66 - adelante Descuento 35% 25% 10% 25% 35% Nótese que el descuento de las categorías 1 y 5 es el mismo, así como el de las categorías 2 y 4. Paso 3. Algoritmo: De ahora en adelante llamaremos: CAPÍTULO 4. p e el c2 c3 c4 c5 c a a a a a a a a precio del boleto edad total de dinero descontado en la categoría 1 total de dinero descontado en la categoría 2 total de dinero descontado en la categoría 3 total de dinero descontado en la categoría 4 total de dinero descontado en la categoría 5 cantidad a descontar por cliente 1. 2. 3. 4. 5. 6. 7. 8. 9. PEDIR p c1← 0 c2 ← 0 c3 ← 0 c4 ← 0 c5 ← 0 CLIENTE PEDIR mas$ SI mas$ = "NO" ENTONCES IR al paso 10 DE OTRA FORMA IR al paso 7 10. DESPLEGAR c1, c2, c3, c4, c5 Proceso CLIENTE: 1. 2. 3. Pedir e SI e >= 5 AND e <= 14 OR e >= 66 ENTONCES c ← p * 0.65 SI e > = 5 AND e <= 14 ENTONCES c1 ← c1 + c DE OTRA FORMA c5 ← c5 + c DE OTRA FORMA SI e >= 15 AND e <= 19 OR e >= 46 AND e <= 65 ENTONCES c ← p * 0.75 SI e >= 15 AND e <= 19 ENTONCES c2 ← c2 + c DE OTRA FORMA c4 ← c4 + c DE OTRA FORMA SI e > = 20 AND e < = 45 ENTONCES c ← p * 0.9 c3 ← c3 + c DE OTRA FORMA DESPLEGAR "No pueden entrar niños menores de 5 años" FINP TIPOS DE PROBLEMAS 163 164 PARTE II. LÓGICA COMPUTAC1ONAL Paso 4. Diagrama de flujo (véanse Figs. 4.59 y 4.60). Obsérvese que un ciclo con un número indeterminado de iteraciones ejecuta una estructura selectiva compuesta. Ejercicio: Efectuar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad. Otra forma de solucionarlo variando un poco la solución anterior es: Paso 2. Planeación de la solución: En la solución anterior se tuvieron que emplear condiciones que preguntaban por el rango inferior y superior de las categorías, por ejemplo: e >= 15 AND e <= 19 OR e > = 46 AND e< = 65 Esto fue debido a que se tuvo que dejar por exclusión la parte falsa de la última condición para validar la solución contra edades que fueran inferiores a 5 años. Sin embargo, para validar que el dato de entrada edad sea inferior a 5 años podemos hacer lo siguiente: 1. 2. PEDIR e SI e < 5 ENTONCES DESPLEGAR "No pueden entrar niños menores de 5 años" IR al paso 1 Podrá observarse que esta última es un ciclo con un número indeterminado de iteraciones, el cual terminará de ejecutarse cuando la variable e tenga un valor mayor o igual a 5. Esta variante del ciclo con un número indeterminado de iteraciones que conocíamos es muy usada para validar que los datos de entrada sean correctos y no tener que usar exclusión con estructuras selectivas. El nuevo algoritmo quedaría de la siguiente manera: Paso 3. Algoritmo: 1. 2. 3. 4. 5. 6. 7. 8. PEDIR p c1 ← 0 c2 ← 0 c3 ← 0 c4 ← 0 c5 ← 0 CLIENTE PEDIR mas$ CAPÍTULO 4. Figura 4.59 9. SI mas$ = "NO" ENTONCES IR al paso 10 DE OTRA FORMA IR al paso 7 TIPOS DE PROBLEMAS 165 166 PARTE II. LÓGICA COMPUTACIONAL Figura 4.60 CAPÍTULO 4. TIPOS DE PROBLEMAS 167 10. DESPLEGAR c1, c2, c3, c4, c5 Proceso CLIENTE: 1. Pediré 2. SI e < 5 ENTONCES DESPLEGAR "No pueden entrar niños menores de 5 años" IR al paso 3 DE OTRA FORMA 3. SI e <= 14 OR e >=66 ENTONCES c ← p * 0.65 SI e<= 14 ENTONCES c1 ← c1 + c DE OTRA FORMA c5 ← c5 + c DE OTRA FORMA SI e <= 19 OR e >= 46 ENTONCES c ←p *0.75 SI e<= 19 ENTONCES c2 ← c2 + c DE OTRA FORMA c4 ← c4 + c DE OTRA FORMA c ← p * 0.9 c3 ← c3 + c 4. FINP Paso 4. Diagrama de flujo (véanse Figs. 4.61 y 4.62). Ejercicio: Efectuar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad. PROBLEMA 4 Una compañía de transportes terrestres de lujo tiene dos tipos de camiones. Todos los camiones están divididos en tres secciones: de Lujo, fumar y No Fumar. Las reservaciones se hacen momentos antes de que el camión vaya a salir. Un camión puede salir cuando tenga el cupo Heno o cuando se decida que ya se esperó suficiente tiempo para llenarse. Lo que se necesita es que se haga un programa de computadora que avise cuándo un camión debe salir. Se proporciona una tabla con el número de asientos de lujo, fumar y no fumar de los dos tipos de camiones: tipo Lujo Fumar No fumar 1 10 16 20 2 18 20 24 168 PARTE II. LÓGICA COMPUTACIONAL Figura 4.61 CAPÍTULO 4. TIPOS DE PROBLEMAS Figura 4.62 169 170 PARTE II. LÓGICA COMPUTAC1ONAL Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: Antes de verificar el cupo del camión en turno debemos saber a qué tipo pertenece para así saber de cuantos asientos consta cada sección del camión. De esta manera podremos determinar posteriormente si ya se terminaron los asientos en alguna sección. Para esto empleamos la siguiente condicional: SI tipo = 1 ENTONCES asientos de lujo disponibles = 10 asientos de fumar disponibles = 1 6 asientos de no fumar disponibles = 20 DE OTRA FORMA asientos de lujo disponibles = 1 8 asientos de fumar disponibles = 20 asientos de no fumar disponibles = 24 A continuación se tendrá que usar un ciclo con un número indeterminado de iteraciones. Dentro del ciclo debe pedirse la categoría del asiento y verificar si ya se ha llenado el cupo de las categorías de asientos. Para esto emplearemos una variable tipo alfanumérica para cada sección del camión, que nos indique si la sección se ha llenado o no: si la variable toma un valor de "SI" significará que está llena la sección y si es "NO" significará que todavía hay asientos disponibles en esa sección. Esto se representa con la siguiente condicional: SI categoría = "LUJO" ENTONCES SI llenoseccionlujo$ = "NO" ENTONCES número de asientos de lujo ocupados = número de asientos de lujo ocupados + 1 SI número de asientos de lujo ocupados = asientos de lujo disponibles llenoseccionlujo$ = "SI" DE OTRA FORMA DESPLEGAR "Asientos de la sección de lujo agotados" DE OTRA FORMA SI categoría = "FUMAR" ENTONCES SI llenoseccionfumar$ = "NO" ENTONCES número de asientos de fumar ocupados = número de asientos de fumar ocupados + 1 SI número de asientos de fumar ocupados = asientos de fumar disponibles llenoseccionfumarS = "SI" DE OTRA FORMA DESPLEGAR "Asientos de la sección de fumar agotados" DE OTRA FORMA SI llenoseccionnofumar$ = "NO" ENTONCES número de asientos de no fumar ocupados = número de asientos de no fumar ocupados + 1 CAPÍTULO 4. TIPOS DE PROBLEMAS 171 SI número de asientos de no fumar ocupados = asientos de no fumar disponibles llenoseccionnofumar$ = "SI" DE OTRA FORMA DESPLEGAR "Asientos de la sección de no fumar agotados" En donde el valor inicial que deben tener las variables llenoseccionlujo$, llenoseccionfumar$ y llenoseccionnofumar$ debe ser de "NO". SALIDAS: Mensaje: "Ya puede salir el camión" ENTRADAS: tipo de camión categoría por cada uno de los pasajeros DATOS ADICIONALES: Tipo Lujo 1 2 10 18 Fumar 16 20 Paso 3. Algoritmo: De ahora en adelante llamaremos: t a c$ a ald a afd a anfd a nalo a nafo a nanfo a llenol$ a llenof$ a llenonf$ a 1. 2. tipo de camión categoría-del asiento asientos de lujo disponibles asientos de fumar disponibles asientos de no fumar disponibles número de asientos de lujo ocupados número de asientos de fumar ocupados número de asientos de no fumar ocupados llenoseccionlujo$ llenoseccionfumar$ llenoseccionnofumar$ PEDIR t SI t = 1 ENTONCES ald ←10 afd ← 16 anfd ← 20 DE OTRA FORMA ald← 18 afd ← 20 anfd ←24 3. 4. 5. nalo ←0 nafo ← 0 nanfo ← 0 No fumar 20 24 172 PARTE II. LÓGICA COMPUTACIONAL llenol$ ←"NO" llenof$ ←"NO" llenonf$ ← "NO" CLIENTE SI llenol = "SI" AND llenof = "SI" AND llenonf = "SI" ENTONCES mas$ ← "NO" DE OTRA FORMA PEDIR mas$ 11. SI mas$ = "NO" ENTONCES IR al paso 12 DE OTRA FORMA IR al paso 9 12. DESPLEGAR "Ya puede salir el camión" 6. 7. 8. 9. 10. Proceso CLIENTE: 1. 2. PEDIR c$ SI c$ = "LUJO" ENTONCES SI Uenol$ = "NO" ENTONCES nalo ← nalo + 1 SI nalo = ald ENTONCES Uenol$ ← "SI" DE OTRA FORMA DESPLEGAR "Asientos de la sección de lujo agotados" DE OTRA FORMA SI c$ = "FUMAR" ENTONCES SI llenof$ = "NO" ENTONCES nafo ← nafo + 1 3. SI nafo = afd ENTONCES llenof$ ← "SI" DE OTRA FORMA DESPLEGAR "Asientos de la sección de fumar agotados" DE OTRA FORMA SI llenonf$ = "NO" ENTONCES nanfo ← nanfo + 1 SI nanfo = anfd ENTONCES llenonf$ ← "SI" DE OTRA FORMA DESPLEGAR "Asientos de la sección de no fumar agotados" FINP Paso 4. Diagrama de flujo (véanse Figs. 4.63 y 4.64). En este problema podemos observar algunas variantes: el proceso principal consta de una estructura selectiva simple seguida de un ciclo con un número indeterminado de iteraciones, el cual tiene CAPÍTULO 4. Figura 4.63 TIPOS DE PROBLEMAS 173 CAPÍTULO 4. TIPOS DE PROBLEMAS 175 una manera inusual de terminar con el ciclo. A su vez este ciclo llama a una estructura selectiva compuesta. Ejercicio: Efectuar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad. Las variables alfanuméricas que indican el estado de cada sección de asientos casi durante toda la ejecución del diagrama valen "NO" y no es sino hasta el momento en que se alcanza la cifra de asientos disponibles cuando vale "SI", valor usado para determinar que ya no se pueden vender más boletos en esa sección en iteraciones posteriores. A este tipo de variables que sirven como indicadores de que alguna condición se ha cumplido o no, se les llama banderas. DEFINICIÓN: Una bandera es una variable que generalmente usa dos valores opuestos. Cuando se cumple cierta condición el valor inicial de la bandera cambia hacia el valor opuesto y este valor determinará acciones posteriores. Problemas propuestos 1) 2) 3) 4) 5) Una persona que va de compras a la tienda "Enano, S.A.", decide llevar un control sobre lo que va comprando, para saber la cantidad de dinero que tendrá que pagar al llegar a la caja. La tienda tiene una promoción del 20% de descuento sobre aquellos artículos cuya etiqueta sea roja. Determinar la cantidad de dinero que esta persona deberá pagar. Modificar el problema resuelto 4 para que imprima el total de dinero recaudado por el camión. Un censador recopila ciertos datos aplicando encuestas para el último Censo Nacional de Población y Vivienda. Desea obtener de todas las personas que alcance a encuestar en un día, qué porcentaje tiene estudios de primaria, secundaria, carrera técnica, estudios profesionales y estudios de posgrado. Un inspector de la Secretaría de Desarrollo Social (SEDSO) que se dedica a verificar los puntos IMECA (índice Metropolitano de la Calidad del Aire) emitidos por las fábricas, desea saber el promedio de dichos puntos emitidos por todas las fábricas que pueda visitar en un día y el nombre y puntos IMECA de la fábrica que más haya contaminado. El médico de un laboratorio de análisis clínicos desea determinar cuántas personas que visitan el laboratorio en un día determinado se encuentran con un resultado positivo para anemia. Tomando como base los resultados obtenidos en el laboratorio, el médico determina si cada persona tiene anemia o no, dependiendo de su nivel de hemoglobina en la sangre, de su edad y su sexo. Si el nivel de hemoglobina que tiene cada persona es menor que el rango que le corresponde se determina su resultado como positivo para anemia y en caso contrario como negativo. El cuadro en el que el médico se basa para obtener el resultado es el siguiente: Edad 0 - 1 mes mayor de 1 y menor o igual de 6 meses mayor de 6 y menor o igual de 12 meses mayor de 1 y menor o igual que 5 años mayor de 5 y menor o igual que 10 años Nivel de hemoglobina 1 1 0 1 1 1 1 1 - 26 - 18 - 15 . 5 - 15 . 6 - 15.5 g% g% g g g% 176 PARTE II. LÓGICA COMPUTACIONAL Edad mayor de 10 y menor o igual que 15 años mujeres mayores de 15 años hombres mayores de 15 años Nivel de hemoglobina 13 - 15.5 g% 12 - 16 g% 14 - 18 g% 6) Una escuela ha iniciado su periodo de inscripciones para el curso de computación. El sistema de inscripciones consiste en que los alumnos seleccionen el grupo en que deseen quedar inscritos y si hay lugar disponible se pueden inscribir en ese grupo. El cupo por grupo es de 15 alumnos y se ofrecen cuatro grupos distintos. El director necesita que cuando un alumno se inscriba, el número de alumnos inscritos se incremente si hay cupo o bien que se indique si el cupo ya ha sido sobrepasado y que se dé al alumno la oportunidad de volver a seleccionar. Además el director desea saber cuántos alumnos quedaron inscritos en cada grupo al final del día. 7) Un jefe de casilla desea determinar cuántas personas de cada una de las secciones que componen su zona asisten el día de las votaciones. Las secciones son: norte, sur y centro. También desea determinar cuál es la sección con mayor número de votantes. 8) Un negocio de copias tiene un límite de producción diaria de 10 000 copias si el tipo de impresión es offset y de 50 000 si el tipo es estándar. Si hay una solicitud de un trabajo el empleado tiene que verificar que las copias pendientes hasta el momento y las copias solicitadas no excedan del límite de producción. Si el límite de producción se excediera el trabajo solicitado no podría ser aceptado. El empleado necesita llevar un buen control de las copias solicitadas hasta el momento para decidir en forma rápida si los trabajos que se soliciten en el día se deben aceptar o no. 3b) PROBLEMAS REPETITIVOS COMPUESTOS Recordemos que los problemas repetitivos compuestos son aquellos en los que se emplean varios ciclos. Frecuentemente encontraremos problemas en donde el cuerpo de un ciclo es otro ciclo. En estos casos estaremos hablando de un ciclo interno que está anidado dentro de un ciclo externo. Podemos encontrar muchas combinaciones, dependiendo de si los ciclos tienen un número determinado o indeterminado de iteraciones o si existen más de dos ciclos anidados. Problemas resueltos PROBLEMA 1 En un supermercado un cajero captura los precios de los artículos que los clientes compran e indica a cada cliente cuál es el monto de lo que deben pagar. Al final del día le indica a su supervisor cuánto fue lo que cobró en total a todos los clientes que pasaron por su caja. Paso 1. Definición del problema: Igual a la redacción del problema. Paso 2. Planeación de la solución: Para empezar, podemos visualizar dos ciclos: uno para obtener el total de cada cliente y otro para obtener el total de lo que el cajero cobró en todo el día. CAPÍTULO 4. TIPOS DE PROBLEMAS 177 El ciclo para obtener el total por cliente debe obtener la cantidad de dinero por cada artículo distinto que compró el cliente para ir acumulando su total y como al llegar a la caja el cliente no sabe cuántos artículos distintos compró, emplearemos un ciclo con un número indeterminado de iteraciones que llamaremos "ciclo del cliente". Lo que llamaremos "ciclo del cajero" deberá ir acumulando los totales de los clientes para así obtener el total del cajero. Como no podremos saber cuántos clientes pasarán por la caja se usará también un ciclo con un número indeterminado de iteraciones. El algoritmo del ciclo del cajero debe quedar de la siguiente forma: 1. 2. 3. 4. 5. 6. total del cajero = 0 CLIENTE total del cajero = total del cajero + total del cliente PEDIR mas$ SI mas$ = "NO" ENTONCES IR al paso 6 DE OTRA FORMA IR al paso 2 DESPLEGAR total del cajero El paso 2 es la llamada a ejecución del ciclo denominado CLIENTE. Para poder saber el total del cajero necesitamos ir acumulando los totales de los clientes. Por ello el ciclo del cajero llama a ejecución al ciclo del CLIENTE, cuyo algoritmo deberá quedar de la siguiente forma: 1. 2. total del cliente = 0 ARTICULO 3. total del cliente = total del cliente + total del artículo 4. 5. 6. PEDIR masl$ SI masl$ = "NO" ENTONCES IR al paso 6 DE OTRA FORMA IR al paso 2 DESPLEGAR total del cliente En donde el paso 2 es la llamada a ejecución del proceso denominado ARTICULO, el cual constará de los siguientes pasos: 1. 2. PEDIR precio, cantidad total del artículo = precio x cantidad Se definirán ahora los datos requeridos: SALIDAS: total de cada cliente, total del cajero ENTRADAS: precio, cantidad de cada artículo DATOS ADICIONALES: ninguno 178 PARTE II. LÓGICA COMPUTACIONAL Paso 3. Algoritmo: De ahora en adelante llamaremos: p c tcaj tcl ta mas$ masl$ C A a a a a a a a a a precio de cada artículo cantidad de cada artículo total del cajero total del cliente total del artículo Variable que determina el fin del ciclo del cajero. Variable que determina el fin del ciclo del cliente. El proceso CLIENTE El proceso ARTICULO 1. 2. 3. 4. 5. tcaj←0 C tcaj ← tcaj + tcl PEDIR mas$ SI mas$ = "NO" ENTONCES IR al paso 6 DE OTRA FORMA IR al paso 2 6. DESPLEGAR tcaj Proceso C: 1. 2. 3. 4. 5. tcl←0 A tcl ← tcl + ta PEDIR masl$ SI masl$ = "NO" ENTONCES IR al paso 6 DE OTRA FORMA IR al paso 2 6. DESPLEGAR tcl 7. FINP Proceso A. 1. PEDIR p, c 2. ta ←p * c 3. FINP Paso 4. Diagrama de flujo (véanse Figs. 4.65, 4.66 y 4.67). Para resolver este problema se requirió de un ciclo con un número indeterminado de iteraciones, el cual tiene anidado otro ciclo del mismo tipo, que a su vez contiene un pequeño proceso secuencial. CAPÍTULO 4. TIPOS DE PROBLEMAS Figura 4-65 Prueba: tcaj ← 0 Llega el primer cliente, ejecuta el ciclo del CLIENTE: tcl←0 El cajero captura el primer artículo de este cliente y ejecuta el proceso ARTICULO: p←20 c←3 ta←60 tcl ← 60 masl$← "SI" 179 180 PARTE II. LÓGICA COMPUTACIONAL Figura 4.66 Figura 4-67 CAPÍTULO 4. p← 15 c← 1 ta← 15 tcl ← 75 masl$ ← "SI" p←8 c←6 ta←48 tcl ← 123 mas$ ← "NO" E imprime 123, que es el total a pagar de este cliente tcaj ← 123 Llega otro cliente con un solo artículo y se ejecuta el ciclo del CLIENTE: tcl←0 p← 110 c←1 ta←110 tcl← 110 masl$ ← "NO" Imprime 110, que es el total a pagar de este cliente. tcaj ← 233 Supongamos que llega el último cliente: tcl ← 0 p←20 c←6 ta← 120 tcl ← 120 masl$ ← "SI" TIPOS DE PROBLEMAS 181 182 PARTE 11. LÓGICA COMPUTACIONAL p←65 c←2 ta← 130 tcl ←250 masl$ ←"NO" Imprime 250, que es el total del cliente. tcaj ← 483 mas$ ← "NO" Finalmente imprime 483, que es lo que el cajero cobró a los tres clientes que pasaron por su caja. Ejercicio: Efectuar dos pruebas a este diagrama de flujo. PROBLEMA 2 Cinco miembros de un club contra la obesidad desean saber cuánto han bajado o subido de peso desde la última vez que se reunieron. Para esto se debe realizar un ritual de pesaje en donde cada uno se pesa en diez básculas distintas para así tener el promedio más exacto de su peso. Si existe diferencia positiva entre este promedio de peso y el peso de la última vez que se reunieron, significa que subieron de peso. Pero si la diferencia es negativa, significa que bajaron. Lo que el problema requiere es que por cada persona se imprima un letrero que diga "SUBIÓ" o "BAJO" y la cantidad de kilos que subió o bajó de peso. Paso 1. Definición del problema: Igual a la redacción del problema Paso 2. Planeación de la solución: Para solucionar este problema será necesario utilizar dos ciclos. El primero estará compuesto por las acciones que se deben efectuar por cada uno de los cinco miembros del club, por lo que será necesario utilizar un ciclo con un número determinado de iteraciones. Este ciclo estará compuesto por las siguientes acciones: 1. 2. 3. contador = 1 SI contador >5 ENTONCES IR al paso 3 DE OTRA FORMA MIEMBRO contador = contador + 1 IR al paso 2 FIN El segundo ciclo será el proceso MIEMBRO, el cual contiene las acciones que se realizarán por cada miembro del club. Dichas acciones estarán representadas por un ciclo con un número determi- CAPÍTULO 4. TIPOS DE PROBLEMAS 183 nado de iteraciones, pues será necesario hacer lo mismo por cada una de las diez básculas y por una condicional para determinar si subió o bajó de peso. Las acciones que componen a este proceso son las siguientes: 1. 2. 3. 4. 5. 6. 7. PEDIR promedio de peso anterior suma de pesos = 0 contador de básculas = 1 SI contador de básculas > 10 ENTONCES IR al paso 5 DE OTRA FORMA BASCULA contador de básculas = contador de básculas + 1 IR al paso 4 promedio actual = suma de pesos/10 diferencia de pesos = promedio actual - promedio de peso anterior SI diferencia de pesos < 0 ENTONCES DESPLEGAR "bajó de peso" DE OTRA FORMA DESPLEGAR "subió de peso" El proceso BASCULA está formado por las acciones que se llevan a cabo cuando un miembro llega a una báscula, las acciones que lo componen son las siguientes: 1. 2. PEDIR peso suma de pesos = suma de pesos + peso Se definirán ahora los datos requeridos: SALIDAS: el mensaje "bajó de peso " o "subió de peso" por cada miembro. ENTRADAS: promedio peso anterior de cada miembro, diez pesos distintos por cada miembro. DATOS ADICIONALES: Un miembro bajó de peso si la diferencia entre el peso anterior y el promedio de pesos en las diez básculas es negativo, en caso contrario subió de peso. Paso 3. Algoritmo: De ahora en adelante llamaremos: c a M a pant a sp a cb a pa a dif a B a pe a contador de miembros proceso MIEMBRO promedio de peso anterior suma de pesos contador de básculas promedio de peso actual diferencia de pesos proceso BASCULA peso por báscula 184 PARTE II. LÓGICA COMPUTACIONAL 1. c← 1 2. SI c> 5 ENTONCES IR al paso 3 DE OTRA FORMA M c←c+1 IR al paso 2 3. FIN Proceso M: 1. PEDIR pant 2 sp ←0 3. cb← 1 4. SI cb> 10 ENTONCES IR al paso 5 DE OTRA FORMA B cb ← cb + 1 IR al paso 4 5. pa ←sp/10 6. dif 4- pa - pant 7. SI dif < 0 ENTONCES DESPLEGAR "bajó de peso" DE OTRA FORMA DESPLEGAR "subió de peso" 8. FINP Proceso B: 1. PEDIR pe 2. sp ← sp + pe 3. FINP Paso 4. Diagrama de flujo (véanse Figs. 4.68, 4.69 y 4.70). En este problema se empleó un ciclo con un número determinado de iteraciones, el cual contiene a su vez un ciclo del mismo tipo seguido de una estructura selectiva simple. El ciclo interno ejecuta un proceso secuencial. Prueba: c← 1 Llega el primer miembro, ejecuta el ciclo M pant← 120 sp←0 CAPÍTULO 4. Figura 4-68 cb← 1 El primer miembro se pesa la primera vez; se ejecuta el proceso B. pe← 115 sp← 115 cb←2 El primer miembro se pesa la segunda vez; se ejecuta el proceso B. pe← 114 sp ← 229 cb←3 El primer miembro se pesa la tercera vez; se ejecuta el proceso B. pe← 116 s p ← 345 cb←4 El primer miembro se pesa la cuarta vez; se ejecuta el proceso B. pe← 117 sp ← 462 cb←5 TIPOS DE PROBLEMAS 185 186 PARTE II. LÓGICA COMPUTACIONAL Figura 4-69 El primer miembro se pesa la quinta vez; se ejecuta el proceso B. pe ← 114 sp ← 576 cb ← 6 CAPÍTULO 4. TIPOS DE PROBLEMAS Figura 4.70 El primer miembro se pesa la sexta vez; se ejecuta el proceso B. pe← 115 sp ← 691 cb←7 El primer miembro se pesa la séptima vez; se ejecuta el proceso B. pe← 116 sp ←807 cb←8 El primer miembro se pesa la octava vez; se ejecuta el proceso B. pe← 115 sp ← 922 cb←9 El primer miembro se pesa la novena vez; se ejecuta el proceso B. pe ← 114 sp ← 1036 cb← 10 El primer miembro se pesa la décima vez; se ejecuta el proceso B. pe← 116 sp← 1152 cb← 11 Debido a que la variable cb, contador de básculas, se excede de 10, el ciclo B termina. pa← 115.2 dif←-4.8 187 188 PARTE II. LÓGICA COMPUTACIONAL Como la diferencia de pesos es negativa se despliega: "bajó de peso" c←2 Llega el segundo miembro; ejecuta el ciclo M pant ← 100 sp ← 0 cb← 1 El segundo miembro se pesa la primera vez; se ejecuta el proceso B. pe ←98 sp←98 cb←2 El segundo miembro se pesa la segunda vez; se ejecuta el proceso B. pe ←97 sp ← 195 cb←3 El segundo miembro se pesa la tercera vez; se ejecuta el proceso B. pe ←98 sp ← 293 cb ← 4 El segundo miembro se pesa la cuarta vez; se ejecuta el proceso B. pe ←97.5 sp ← 390.5 cb←5 El segundo miembro se pesa la quinta vez; se ejecuta el proceso B. pe ←98.1 sp ←488.6 c b ←6 El segundo miembro se pesa la sexta vez; se ejecuta el proceso B. pe ←97.7 sp ← 586.3 cb←7 El segundo miembro se pesa la séptima vez; se ejecuta el proceso B. pe ←98 sp ←684.3 cb←8 El segundo miembro se pesa la octava vez; se ejecuta el proceso B. pe ←97 CAPÍTULO 4. TIPOS DE PROBLEMAS 189 sp←781.3 c b←9 El segundo miembro se pesa la novena vez; se ejecuta el proceso B. pe ← 97.6 sp ← 878.9 cb ← 10 El segundo miembro se pesa la décima vez; se ejecuta el proceso B. pe ← 97.4 sp ← 976.3 cb← 11 Como la variable cb, contador de básculas, se excede de 10, el ciclo B termina. pa ← 97.63 dif←-2.37 Como la diferencia de pesos es negativa se despliega: "bajó de peso" Ejercicio: Efectuar las pruebas correspondientes a los miembros 3,4 y 5 del club de obesidad. PROBLEMA 3 Simular el comportamiento de un reloj digital imprimiendo la hora, minuto y segundo en cada segundo de un día desde las 0:00:00 horas hasta las 23:59:59 horas. Paso 1: Definición del problema: Igual a la redacción del problema. Paso 2: Planeación de la solución: En la solución de este problema deberán emplearse tres ciclos: uno para contar las horas, otro para contar los minutos y otro más para los segundos. El ciclo de horas va desde la hora 0 hasta la hora 23. Además, cada hora contiene minutos, por lo que el ciclo de horas es el siguiente: 1. 2. 3. 4. hora = 0 MINUTOS hora = hora + 1 SI hora > 23 ENTONCES IR al paso 5 DE OTRA FORMA IR al paso 2 5. FIN. 190 PARTE 11. LÓGICA COMPUTACIONAL De manera similar los minutos empiezan a correr a partir del minuto 0 y terminan en el 59 y cada minuto tiene segundos: 1 2 3 4 minuto = 0 SEGUNDOS minuto = minuto + 1 SI minuto > 59 ENTONCES IR al paso 5 DE OTRA FORMA IR al paso 1 5 FINP Finalmente los segundos también van de 0 a 59 y en cada segundo debe desplegarse la hora, minuto y segundo actual: 1. 2. 3. 4. segundo = 0 DISPLAY segundo = segundo + 1 SI segundo > 59 ENTONCES IR al paso 5 DE OTRA FORMA IR al paso 2 5. FIN El proceso DISPLAY constará de la acción: 1. DESPLEGAR hora, minuto, segundo Paso 3. Algoritmo: De ahora en adelante llamaremos: h m s M S D a a a a a a contador de horas contador de minutos contador de proceso MINUTOS proceso SEGUNDOS proceso DISPLAY 1. h←0 2. M 3. 4. h← h +1 SI h > 23 ENTONCES IR al paso 5 DE OTRA FORMA IR al paso 2 5. FIN CAPÍTULO 4. TIPOS DE PROBLEMAS 191 Proceso M: 1. m ← 0 2. S 3. m←m + 1 4. SI m > 59 ENTONCES IR al paso 5 DE OTRA FORMA IR al paso 2 5. FINP Proceso S: 1. s←0 2. 3. 4. 5. D s←s + 1 SI s > 59 ENTONCES IR al paso 5 DE OTRA FORMA IR al paso 2 FINP Proceso D: 1. 2. DESPLEGAR h, m, s FINP Paso 4: Diagrama de flujo (véanse Figs. 4.71, 4.72 y 4.73). En este diagrama de flujo podemos observar claramente cómo un ciclo con un número determinado de iteraciones manda a ejecutar otro ciclo con un número determinado de iteraciones, que a su vez llama a ejecución otro ciclo del mismo tipo. Prueba: Debido a lo largo de la prueba ésta es abreviada. h←0 m←0 s←0 Imprime 0, 0, 0, correspondiente a las 0:00:00 h. h←0 m←0 Imprime 0, 0, 0, correspondiente a las 0:00:01 h. 192 PARTE II. LÓGICA COMPUTACIONAL Figura 4.71 Figura 4.72 CAPÍTULO 4. Figura 4.73 h←0 m←0 s←59 Imprime 0, 0, 59, correspondiente a las 0:00:59 h. h←0 m← 1 s←0 Imprime 0, 1,0, correspondiente a las 0:01:00 h. . . . h←0 m←59 s←59 Imprime 0, 59, 59, correspondiente a las 0:59:59 h. h← 1 . TIPOS DE PROBLEMAS 193 194 PARTE I I . LÓGICA COMPUTACIONAL m← 0 s←0 Imprime 1, 0, 0, correspondiente a las 1:00:00 h. . . . h←23 m←59 s←59 Imprime 23, 59, 59, correspondiente a las 23:59:59 h. h←23 m←59 s←59 Imprime 23, 59, 59, correspondiente a las 23:59:59 h. h←23 m←59 s←60 y se cumple la condición de término del ciclo S, por lo que regresa al ciclo M: h←23 m←60 s←60 con lo que también se cumple la condición de término del ciclo M, por lo que regresa al diagrama principal: h←24 m←60 s← 60 y también se cumple la condición de término del ciclo de las horas y se llega al fin del diagrama de flujo. PROBLEMA 4 Se desea obtener el promedio de g grupos que están en un mismo año escolar: siendo que cada grupo puede tener n alumnos que cada alumno puede llevar m materias y que en todas las materias se promedian tres calificaciones para obtener el promedio de la materia. Lo que se desea desplegar es el promedio de los grupos, el promedio de cada grupo y el promedio de cada alumno. Paso 1: Definición del problema: Igual a la redacción del problema. CAPÍTULO 4. TIPOS DE PROBLEMAS 195 Paso 2: Planeación de la solución: La solución de este problema estará compuesta por 3 ciclos anidados. El primer ciclo representará a las acciones que se han de realizar para cada uno de los g grupos, por lo que será necesario utilizar un ciclo con un número determinado de iteraciones. Las acciones que lo componen son las siguientes: 1. 2. 3. 4. PEDIR número de grupos suma de promedios de grupos = 0 contador de grupos = 1 SI contador de grupos > número de grupos ENTONCES IR al paso 5 DE OTRA FORMA GRUPO contador de grupos = contador de grupos +1' IR al paso 4 5. promedio de todos los grupos = suma de promedios de grupos / número de grupos 6. DESPLEGAR promedio de todos los grupos El segundo ciclo será el proceso GRUPO y estará compuesto por las acciones que se habrán de realizar por cada grupo, lo que significa que será un ciclo que se repetirá tantas veces como alumnos haya en cada grupo, por lo que será necesario utilizar un ciclo con determinado número de iteraciones y las acciones que lo componen son las siguientes: 1. 2. 3. 4. PEDIR número de alumnos suma de grupo = 0 contador de alumnos = 1 Si contador de alumnos > número de alumnos ENTONCES IR al paso 5 DE OTRA FORMA ALUMNO contador de alumnos = contador de alumnos + 1 IR al paso 4 5. promedio del grupo = suma de grupo / número de alumnos 6. DESPLEGAR promedio del grupo 7. suma de promedios de grupos = suma de promedios de grupos + promedio del grupo El paso 7 implica el hecho de acumular el último promedio de grupo obtenido a los obtenidos anteriormente. Es muy importante que esta acción se realice cada vez que se ha terminado con un grupo: es por eso que el lugar correcto de ésta es después de que se ha terminado con el ciclo de un grupo y no se ha comenzado con otro. El tercer ciclo será el proceso ALUMNO y estará compuesto por las acciones que sea necesario realizar por cada alumno de un grupo, por lo que el ciclo será con determinado número de iteraciones 196 PARTE II. LÓGICA COMPUTACIONAL ya que el número de alumnos es determinable. Las acciones que componen a este ciclo son las siguientes: 1. 2. 3. 4. PEDIR número de materias suma de calificaciones del alumno = 0 contador de materias = 1 SI contador de materias > número de materias ENTONCES IR al paso 5 DE OTRA FORMA MATERIA contador de materias = contador de materias + 1 IR al paso 4 5. promedio del alumno = suma de calificaciones del alumno / número de materias 6. DESPLEGAR promedio del alumno 7. suma de grupo = suma de grupo + promedio del alumno El proceso MATERIA se realizará una vez por cada materia que curse el alumno, las acciones que lo componen son las siguientes: 1. PEDIR calificación 1, calificación2, calificación3 2. promedio de materia = ( calificación 1 + calificación2 + calificación3) / 3 3. suma de calificaciones del alumno = suma de calificaciones del alumno + promedio de materia SALIDAS: promedio de grupos, promedio por grupo, promedio del alumno ENTRADAS: número de todos los grupos, número de alumnos por cada grupo, número de materias por cada alumno, calificación 1, calificación 2, calificación 3 de cada materia de cada alumno. DATOS ADICIONALES: ninguno Paso 3. Algoritmo: De ahora en adelante llamaremos: g stg ptg cg G na sg ca A pg nm a a a a a a a a a a a número de grupos suma de promedios de grupos promedio de todos los grupos contador de grupos proceso por GRUPO número de alumnos por grupo suma de grupo contador de alumnos proceso por ALUMNO promedio del grupo número de materias CAPÍTULO 4. cm sa pa el c2 c3 pm 1. a a a a a a a contador de materias suma de calificaciones del alumno promedio del alumno calificación 1 de alguna materia de algún alumno de algún grupo. calificación 2 de alguna materia de algún alumno de algún grupo. calificación 3 de alguna materia de algún alumno de algún grupo. promedio de materia PEDIR g 2. stg ←0 3. 4. cg ← 1 SI cg > g ENTONCES IR al paso 5 DE OTRA FORMA G cg ← cg + 1 IR al paso 4 ptg ← stg / g DESPLEGAR ptg 5. 6. Proceso G: 1. PEDIR na 2. 3. sg ← 0 ca ← 1 4. SI ca > na ENTONCES IR al paso 5 DE OTRA FORMA A ca ←ca + 1 IR al paso 4 pg←sg/na DESPLEGAR pg stg ← stg + pg FINP 5. 6. 7. 8. Proceso A: 1. PEDIR nm 2. 3. sa ← 0 cm ←1 4. SI cm > nm ENTONCES IR al paso 5 DE OTRA FORMA M cm ←cm 4- 1 IR al paso 4 pa ←sa / nm 5. TIPOS DE PROBLEMAS 197 198 PARTE II. LÓGICA COMPUTACIONAL 6. DESPLEGAR pa 7. sg ← sg + pa 8. FINP Proceso M: 1. PEDIR c1,c2,c3 2. pm ←( c1+ c2 + c3) / 3 3. sa ← sa + pm 4. FINP Paso 4. Diagrama de flujo (véanse Figs. 4.74 a 4.77): En este problema empleamos un ciclo con un número determinado de iteraciones triplemente anidado en ciclos del mismo tipo. El ciclo más interno ejecuta un proceso secuencial. Prueba: g←1 stg←0 cg←1 Ejecuta el ciclo G para el primer grupo. na←2 sg←0 ca←1 Ejecuta el ciclo A para el primer alumno del primer grupo. nm ←2 sa ←0 cm ← 1 Ejecuta el ciclo M para la primera materia del primer alumno del primer grupo. c1←9 c2←7 c3←8 pm ←8 sa←8 cm ←2 Ejecuta el ciclo M para la segunda materia del primer alumno del primer grupo. cl←8 c2←9 c3←8 pm ← 8.33 sa ← 16.33 cm ← 3 Termina el ciclo M para el primer alumno del primer grupo. pa←8.165 CAPÍTULO 4. Figura 4.74 TIPOS DE PROBLEMAS 199 200 PARTE II. LÓGICA COMPUTACIONAL Figura 4.75 Despliega el promedio del primer alumno del primer grupo 8.165 sg← 8.165 ca ← 2 Ejecuta el ciclo A para el segundo alumno del primer grupo. CAPÍTULO 4. TIPOS DE PROBLEMAS Figura 4.77 Figura 4.76 nm ←2 sa ←0 cm ← 1 Ejecuta el ciclo M para la primera materia del segundo alumno del primer grupo. c1 ←7 201 202 PARTE II. LÓGICA COMPUTACIONAL c2←6 c3←9 pm ← 7.33 sa ←7.33 cm←2 Ejecuta el ciclo M para la segunda materia del segundo alumno del primer grupo. cl←8 c2←9 c3←7 pm ← 8 sa ← 15.33 cm ← 3 Termina el ciclo M para el segundo alumno del primer grupo. pa ← 7.66 Despliega el promedio del segundo alumno del primer grupo 7.66 sg← 15.82 ca ←3 Termina el ciclo A para el primer grupo. pg←7.91 Despliega el promedio del primer grupo 7.91 stg ← 7.91 cg←2 Ejecuta el ciclo G para el segundo grupo. na ← 2 sg←0 ca←1 Ejecuta el ciclo A para el primer alumno del segundo grupo. nm←2 sa←0 cm←1 Ejecuta el ciclo M para la primera materia del primer alumno del segundo grupo. c1 ← 10 c2←9 c3← 10 pm ←9.66 sa ← 9.66 cm←2 CAPÍTULO 4. TIPOS DE PROBLEMAS Ejecuta el ciclo M para la segunda materia del primer alumno del segundo grupo. cl←9 c2← 10 c3← 10 pm ← 9.66 sa ← 19.32 cm ←3 Termina el ciclo M para el primer alumno del segundo grupo. pa ← 9.66 Despliega el promedio del primer alumno del segundo grupo 9.66 sg ←9.66 ca ← 2 Ejecuta el ciclo A para el segundo alumno del segundo grupo. nm ← 2 sa ←0 cm ←1 Ejecuta el ciclo M para la primera materia del segundo alumno del segundo grupo. cl ←7 c2←6 c3←5 pm ←6 sa ←6 cm ←2 Ejecuta el ciclo M para la segunda materia del segundo alumno del segundo grupo. el←10 c2← 10 c3←10 pm ←10 sa ←16 cm ← 3 Termina el ciclo M para el segundo alumno del segundo grupo. pa ←8 Despliega el promedio del segundo alumno del segundo grupo, 8. sg← 17.66 ca ←3 Termina el ciclo A para el segundo grupo. 203 204 PARTE II. LÓGICA COMPUTACIONAL pg ← 8.83 Despliega el promedio del primer grupo, 8.83 stg ← 16.74 cg←3 Termina el ciclo G. ptg ← 8.37 Despliega el promedio de todos los grupos, 8.37 Ejercicio: Efectuar una prueba más a este diagrama de flujo. Problemas propuestos 1. Simular el comportamiento de un calendario, desplegando día, mes y año de un año completo no bisiesto. 2. Modificar el problema resuelto 3 de tal manera que antes de funcionar el reloj se le pueda dar una hora exacta en la que se active una alarma que despliegue el siguiente letrero: "RING, RING". 3. Modificar el problema resuelto 3 para que se pueda determinar la hora exacta en que debe comenzar el reloj. 4. Un atleta se ha propuesto recorrer una misma ruta durante un año, corriendo 6 días a la semana, para así saber su promedio por semana, por mes y por todo el año. 5. A lo largo del día un cajero procesa a las personas que llegan a efectuar movimientos bancarios. Estos movimientos deben ser esencialmente cargos o abonos. Determinar la cantidad total de dinero obtenida por concepto de cargos y abonos en todo el día, así como un balance que indique si hubo más cargos que abonos o viceversa y la diferencia absoluta. 6. Llevar el control de un tablero que registra los puntos de set de un partido de tenis de 5 sets sin muerte súbita, es decir, que gana el set aquel que llegue a 6 puntos o más con dos puntos de ventaja sobre el adversario. Lo que debe imprimir es un mensaje con el nombre del jugador que gana cada set y el nombre del ganador del partido. CAPÍTULO 4. TIPOS DE PROBLEMAS 205 RESUMEN Los tipos de problemas que podemos encontrar se clasifican, según su estructura, de la siguiente manera: 1) Secuenciales: son problemas en los que para su solución se emplean una serie de acciones, las cuales se ejecutan invariablemente en un orden secuencial. 2) Selectivos: las soluciones de este tipo de problemas son una serie de acciones en las que la ejecución de algunas de ellas dependerá de que se cumplan una o varias condiciones. a) Simples: son aquellos que están compuestos únicamente de una condición. b) Compuestos: son aquellos que para solucionarlos se necesita establecer más de una condición. 3) Repetitivos: se les llama problemas repetitivos a aquellos en cuya solución es necesario utilizar un mismo conjunto de acciones que puedan ejecutarse más de una vez. a) Simples: son aquellos en los que se usa un solo ciclo. Se clasifican a su vez en: 1) Con un número determinado de iteraciones: son problemas en que para su solución se requiere usar un solo ciclo en el que su número de iteraciones es un dato conocido, el cual se puede obtener, o bien de la definición del problema o bien como dato de entrada. 2) Con un número indeterminado de iteraciones: son problemas que para su solución se requiere usar un ciclo, en el que el número de iteraciones es un dato desconocido y el proceso repetitivo termina hasta que el usuario lo indica. b) Compuestos: son aquellos en los que se usan varios ciclos Conceptos relacionados con problemas repetitivos: —Ciclo: es la ejecución de un mismo conjunto de acciones una o más veces. Se compone de cuerpo del ciclo y estructura cíclica. —Proceso: conjunto de acciones a las cuales se les asigna un nombre. — Cuerpo del ciclo: proceso que se ejecutará una o más veces. —Estructura cíclica: conjunto de acciones que permiten que el cuerpo del ciclo se ejecute una o más veces. —Iteración: es cada una de las ejecuciones del cuerpo del ciclo. — Contador: es la variable que nos ayuda a contar el número de iteraciones en un ciclo. —Acumulador: es una variable que suma sobre sí misma un conjunto de valores para de esta manera tener la suma de todos ellos en una sola variable. —Bandera: es una variable que generalmente usa dos valores opuestos. Cuando se cumple cierta condición el valor inicial de la bandera cambia hacia el valor opuesto y este valor determinará acciones posteriores. PARTE III PROGRAMACIÓN CAPÍTULO 5 ELEMENTOS DEL LENGUAJE OBJETIVOS 5.1 El alumno describirá los tipos de datos que usa el lenguaje Basic. 5.2 El alumno explicará el manejo de los datos que usa el lenguaje Basic. — Constantes, variables y palabras reservadas — Reglas de asignación — Operadores y jerarquía a) Asociativos b) Aritméticos c) Relaciónales d) Lógicos — Identificadores a) El alumno definirá qué es un identificador b) El alumno explicará las reglas para el uso de los identificadores 209 CAPÍTULO 5 ELEMENTOS DEL LENGUAJE INTRODUCCIÓN Dentro del marco de la metodología para la solución de problemas por medio de la computadora hemos trabajado hasta ahora con los cuatro primeros pasos. Con esto hemos aprendido la lógica computacional necesaria para poder hacer programas de computadora. Hasta cierto punto hemos aprendido lo más difícil; sin embargo, aún nos resta aprender las instrucciones del lenguaje Basic para poder empezar a hacer nuestros primeros programas. Para el paso 5 de la metodología que, como se recordará, es la codificación, tiene como requisito aprender los conceptos básicos del lenguaje Basic. Así como aprendimos a traducir un algoritmo en diagrama de flujo, ahora aprenderemos a traducir ambos en programa. De hecho, retomaremos los problemas resueltos a lo largo del libro para trabajar con los últimos pasos de la metodología. Una vez dominando esto podremos ver otras instrucciones más complejas, propias de Basic. El Basic es un lenguaje computacional de alto nivel, fácil de aprender, que vio la luz en 1964, creado por los estadunidenses G. Kemeny y Thomas E. Kurtz. A partir de entonces se han creado muchas versiones tanto en compilador como en intérprete. Para este libro emplearemos la versión denominada Quick Basic, que es un compilador, y viene proporcionado junto con el sistema operativo MS-DOS/OS-DOS a partir de la versión 5.0 Aunque algunos de los elementos básicos del lenguaje Basic fueron ya vistos al principio de la parte 2 del libro, los resumiremos a continuación. 1) TIPOS DE DATOS A) Numéricos Son datos cuyo contenido es una serie de dígitos (0-9) que en conjunto nos proporcionan un valor numérico, ya sea entero o real, y que pueden ser precedidos por un signo de + (positivo) o 210 CAPÍTULO 5. ELEMENTOS DEL LENGUAJE 211 (negativo). Cuando se omite el uso del signo el dato se asume como positivo. Existen varios tipos de datos numéricos. Para efectos de este libro emplearemos los números de simple precisión, con los cuales hemos venido trabajando hasta el momento. Con los datos numéricos se pueden realizar operaciones aritméticas o de conteo. Ejemplos: 1519.17 -32.5 1 0 B) Alfanuméricos Son datos cuyo contenido son letras del abecedario, números o caracteres especiales, o bien una combinación de ellos. Aunque los datos alfanuméricos pueden contener números, éstos no pueden ser usados para realizar operaciones aritméticas. Entre los caracteres especiales podemos encontrar: #,$,&,%,/, ", !, ?, ¡, =, -, +, X, (,), {, }, etcétera. Cuando se hace referencia a este tipo de datos se deben encerrar entre dobles comillas. Ejemplos: "Morelos Ote, # 23-7" "Benito Juárez" "16-45-19" "02/05/92" "Carlos Salinas de Gortari" 2) ZONAS DE MEMORIA Los datos, sean numéricos o alfanuméricos, se alojan en zonas de memoria para poder utilizarlos posteriormente. Estas zonas de memoria están formadas por un nombre o identifícador y un contenido, que será el dato que se guarda en ellas. Por ejemplo, si el contenido es 15 y el nombre de la variable es EDAD, significa que hay una zona de memoria que se llama EDAD cuyo valor es 15. Los identificadores de estas zonas de memoria se forman respetando las siguientes reglas. 1) El primer carácter debe ser una letra. 2) Los demás caracteres podrán ser letras, números o guiones, siempre y cuando las letras no estén acentuadas. 3) Si el tipo de dato que guarda (contenido) es alfanumérico, el nombre deberá llevar al final el signo $. Ejemplos: NOMBRE salario nombre$ dirección$ inscripción CONTENIDO 4000 "William Shakespeare" "Cuauhtémoc # 115, Col. Narvarte" 500 212 PARTE III. PROGRAMACIÓN NOTA: Obsérvese que en las zonas de memoria nombre$ y dirección$ se incluye el signo $; en el nombre de la zona y el contenido se encierra entre dobles comillas; esto es debido a que el contenido es un dato alfanumérico. Las zonas de memoria se pueden clasificar en: A) Constantes B) Variables A) Constantes Son zonas de memoria que guardan datos, los cuales no cambian durante toda la fase de procesamiento de información. B) Variables Son zonas de memoria cuyo contenido cambia durante la fase de procesamiento de información. 3. EXPRESIONES a) Definición Conjunto de operadores y operandos que producen un valor. b) Elementos de una expresión Una expresión está compuesta por operadores y operandos. Un operador es un símbolo o palabra que significa que se ha de realizar cierta acción entre uno o dos valores llamados operandos. De modo general, una expresión se escribe en cualquiera de las formas siguientes, operando 1 OPERADOR OPERADOR operando2 operando 1 4. TIPOS DE OPERADORES Existen cuatro tipos de operadores: A) Asociativos B) Aritméticos C) Relaciónales D) Lógicos Dependiendo del tipo de operadores que se usen en una expresión, ésta se convertirá en aritmética, lógica o relacional. CAPÍTULO 5. ELEMENTOS DEL LENGUAJE 213 A) Asociativos El único operador asociativo es el paréntesis (), el cual permite indicar en qué orden deben llevarse a cabo las operaciones. Cuando una expresión se encuentra entre paréntesis, indica que las operaciones que se encuentran dentro de ellos deben realizarse primero. Si en una expresión se utilizan más de un paréntesis se deberá proceder primero con los que se encuentren más hacia el centro de la expresión. B) Aritméticos Son operadores que permiten realizar operaciones aritméticas entre operandos. El resultado que se obtiene al evaluar una expresión aritmética es un número. Al evaluar expresiones que contienen operadores aritméticos, se respeta una jerarquía en el orden en el que se aplican. Es decir, si se tiene una expresión aritmética con al menos dos operadores de distinta jerarquía, se deberá realizar primero una operación que la otra. La siguiente tabla muestra los operadores aritméticos ordenados de mayor a menor jerarquía. OPERADOR OPERACIÓN - Negación Potenciación Multiplicación, División Suma, Resta ^ x, / +, - Para resolver una expresión aritmética se deben seguir las siguientes reglas: 1) Primero se resuelven las expresiones que se encuentran entre paréntesis siguiendo estas mismas reglas. 2) Se procede aplicando la jerarquía de operadores. En caso de que haya dos operadores con la misma jerarquía se procede de izquierda a derecha. C) Relaciónales Son operadores que permiten comparar dos valores sean numéricos o alfanuméricos. El resultado que se obtiene es un valor de verdad que puede ser V(verdadero) o F(falso). La comparación entre un dato numérico y uno alfanumérico no puede llevarse a cabo. Los operadores relaciónales son los siguientes: OPERADOR OPERACIÓN = ' <> o >< < > <= >= Igual que Diferente que Menor que Mayor que Menor o igual que Mayor o igual que D) Lógicos Son operadores que permiten realizar las operaciones lógicas de conjunción, disyunción y negación. El resultado que se obtiene es un valor de verdad, que puede ser V(verdadero) o F(falso). Los operadores lógicos se muestran a continuación, indicando la jerarquía de mayor a menor. 214 PARTE I I I . PROGRAMACIÓN OPERADOR NOT AND OR OPERACIÓN Negación Conjunción Disyunción Recordemos que la negación cambia el valor Verdadero por el Falso y viceversa. En la conjunción se necesitan dos valores Verdaderos para producir otro Verdadero; en cualquier otro caso se produce un valor de Falso. En la disyunción, con cualquiera de los dos valores de los operadores que sea Verdadero se obtiene un resultado de Verdadero, en caso contrario el valor será Falso. Las reglas para resolver las expresiones lógicas son las siguientes: 1) Se resuelven primero los paréntesis. 2) Se encuentran los valores de verdad de las expresiones relaciónales. 3) Se aplica la jerarquía de operadores lógicos. En caso de haber dos operadores iguales se procede la operación de izquierda a derecha. 5) PALABRAS RESERVADAS Son aquellas palabras que son elementos del lenguaje Basic, tales como las que forman parte de las instrucciones, los operadores, etc.. Estas palabras no pueden ser usadas como identificadores. Las palabras reservadas serán escritas en este libro con letras mayúsculas. CAPÍTULO 5. ELEMENTOS DEL LENGUAJE 215 RESUMEN Basic: lenguaje computacional de alto nivel, fácil de aprender que fue creado en el año de 1964 por los norteamericanos G. Kemeny y Thomas E. Kurtz. Palabras reservadas: son aquellas palabras que son elementos del lenguaje Basic, tales como las que forman parte de las instrucciones, los operadores, etc. Estas palabras no pueden usarse como identificadores. Tipos de datos: A) Numéricos: son datos cuyo contenido es una serie de dígitos (0-9) que en conjunto nos proporcionan un valor numérico y que pueden ser precedidos por un signo de + (positivo) o (negativo). Con ellos se puede realizar operaciones aritméticas o de conteo. B) Alfanuméricos: son datos cuyo contenido son letras del abecedario, números o caracteres especiales, o bien una combinación de ellos. Estos datos no pueden ser usados para realizar operaciones aritméticas. Zonas de memoria: los datos, ya sean numéricos o alfanuméricos, se alojan en zonas de memoria principal con el objeto de utilizarlos posteriormente. Estas zonas de memoria están formadas por un nombre para su identificación y un contenido el cual será el dato que se.guarda en ellas. Se pueden clasificar en: A) Constantes: son zonas de memoria que guardan datos, los cuales no cambian durante toda la fase de procesamiento de información. B) Variables: son zonas de memoria cuyo contenido cambia durante la fase de procesamiento de información. Expresiones: son un conjunto de operadores y operandos que producen un valor. Un operador es un símbolo o palabra que significa que se ha de realizar cierta acción entre uno o dos valores que son llamados operandos. Existen tres tipos de operadores: asociativos, aritméticos, relaciónales y lógicos. CAPÍTULO 6 MANEJO DE ARCHIVOS OBJETIVOS 6.1 El alumno explicará las siguientes operaciones del manejo de archivos: —Crear un programa —Recuperar un programa —Guardar un programa —Imprimir un programa —Ejecutar un programa 216 CAPÍTULO 6 MANEJO DE ARCHIVOS Un archivo es una colección de información. Según el tipo de información que contienen los archivos, se clasifican en: 1) archivos texto 2) archivos tipo programa 3) archivos de datos El tipo de archivos en el que enfocaremos nuestro interés en este capítulo serán los archivos tipo programa, cuyo contenido será un conjunto de instrucciones escritas en el lenguaje computacional Quick Basic. En este capítulo aprenderemos las instrucciones necesarias para interaccionar con un programa, esto es, para crearlo, modificarlo, guardarlo o recuperarlo de disco y ejecutarlo. PROCEDIMIENTO DE ENTRADA A QUICK BASIC Estando en el prompt del sistema operativo, se deberá teclear Qbasic e inmediatamente aparecerá en la pantalla una ventana como se muestra en la figura 6.1, a la que se deberá responder con cualquiera de las opciones Entrar o ESC como se indica en la ventana. INSTRUCCIONES DE MANEJO DE ARCHIVOS El manejo de archivos tipo programa se realiza con la utilización del menú Archivo de la barra de menúes que aparecen al seleccionar ESC en la ventana de bienvenida. Al seleccionar este menú aparecen las siguientes opciones, como se puede apreciar en la figura 6.2. a) Creando un programa Para crear un programa se deberá seleccionar la opción Nuevo del menú Archivo. Después de 217 218 PARTE III. PROGRAMACIÓN Archivo Edición Ver Búsqueda Ejecutar Depurar Opciones Ayuda Figura 6.1 Archivo Edición Ver Búsqueda Ejecutar Depurar Opciones Ayuda Figura 6.2 Abrir Figura 6.3 CAPÍTULO 6. MANEJO DE ARCHIVOS 219 Figura 6.4 seleccionar esta opción aparecerá una pantalla en blanco en la cual se podrá insertar un programa utilizando el editor de textos que se incluye con Quick Basic. b) Recuperando un programa de disco Para recuperar un programa de disco será necesario ejecutar la opción Abrir... del menú Archivo (véase Fig. 6.3). En esta ventana será necesario escribir el nombre del programa que se desea editar o bien seleccionarlo de la lista de archivos que se muestra. También existe la posibilidad de seleccionar la unidad de disco en donde se pudiera encontrar el programa. c) Guardando un programa en disco Las opciones Guardar. . . y Guardar como. .. nos ayudarán a almacenar un programa en disco. Si se ejecuta la opción Guardar. . . y es la primera vez que se almacena un programa, aparecerá una ventana como la de la figura 6.4. En dicha ventana será necesario escribir el nombre del programa, e indicar la unidad de disco, en la que se desea que se almacene éste. Figura 6.5 220 PARTE III. PROGRAMACIÓN Figura 6.6 d) e) Si se ejecuta la opción guardar y ya se le había dado nombre al programa, Quick Basic sólo almacenará el programa. La opción Guardar como... se utiliza para almacenar un programa bajo un nombre diferente del que se le hubiera dado con la opción de Guardar. . . es una forma de obtener una copia del programa. Si se ejecuta esta opción aparecerá una ventana como la de la figura 6.5. A la cual se le deberá responder con el nombre y unidad de disco deseados. Imprimiendo un programa La opción Imprimir. . . del menú Archivo nos permitirá desplegar por impresora un programa. Al ejecutar esta opción aparecerá una ventana como la de la figura 6.6. En la cual se le deberá seleccionar cualquiera de las opciones indicadas. Ejecutando un programa Para ejecutar un programa debe emplearse la opción Ejecutar del menú principal de Quick Basic, la cual puede ser vista en las figuras 6.1 y 6.2. CAPÍTULO 6. MANEJO DE ARCHIVOS 221 RESUMEN Archivo: es una colección de información. Dependiendo del tipo de información que contienen los archivos, se clasifican en archivos de datos, programas y textos. Instrucciones para el manejo de programas: El manejo de archivos tipo programa se lleva a cabo con la utilización del menú Archivo de la barra de menúes que aparece en la ventana de bienvenida de Quick Basic. a) Crear un programa Para crear un programa se deberá seleccionar la opción Nuevo... del menú Archivo. Después de seleccionar esta opción aparecerá una pantalla en blanco en la cual se podrá insertar un programa utilizando el editor de textos que se incluye con Quick Basic. b) Recuperar un programa de disco Para recuperar un programa de disco será necesario ejecutar la opción Abrir... del menú Archivo. En esta ventana será necesario escribir el nombre del programa que se desea editar o bien seleccionarlo de la lista de archivos que se muestra. También existe la posibilidad de seleccionar la unidad de disco en donde se pudiera encontrar el programa. c) Guardar un programa en disco Las opciones Guardar. . . y Guardar como. . . del menú Archivo nos ayudarán a almacenar un programa en disco. Si se ejecuta la opción Guardar. .. y ya se le había dado previamente nombre al programa, Quick Basic sólo almacenará el programa. La opción Guardar como. . . se utiliza para almacenar un programa bajo un nombre diferente del que se le hubiera dado con la opción de Guardar... d) Imprimir un programa La opción Imprimir... del menú Archivo nos permitirá desplegar por impresora un programa. e) Ejecutar un programa La opción Ejecutar del menú principal de Quick Basic nos permite ejecutar el programa que esté cargado en memoria en ese momento. CAPÍTULO 7 INTERACCIÓN USUARIO-PROGRAMA OBJETIVOS 7.1 El alumno explicará los siguientes procesos iteractivos del usuario con el programa: —Asignación —Entrada de datos —Salida de datos —Comentarios 7.2 El alumno explicará el diseño de programas que sean amigables al usuario. 7.3 El alumno utilizará las instrucciones de iteracción del lenguaje Basic en la solución de problemas de tipo secuencial. 222 CAPÍTULO 7 INTERACCIÓN USUARIO-PROGRAMA Son instrucciones que permiten al usuario tener comunicación con el programa, sea para proporcionarle datos de entrada u obtener datos de salida. Las instrucciones de interacción usuario-programa se clasifican en: a) Asignación b) Entrada de datos c) Salida de datos A continuación definiremos las instrucciones útiles para la interacción usuario-programa; para especificarlas haremos uso de la siguiente simbología: (expresión) La expresión que se encuentre dentro de este par de símbolos será considerada opcional. { expresiónl/expresión2 } Se puede optar entre cualquiera de las dos expresiones, pero se debe incluir alguna de las dos. expresión Se debe incluir obligatoriamente. a) ASIGNACIÓN Instrucción: LET Función: 223 224 PARTE III. PROGRAMACIÓN Asignar a una variable un valor, ya sea el resultado de una expresión, el valor de una variable o bien el de una constante. Formato: (LET) variable = expresión donde: variable es el nombre de la variable, en donde se va a almacenar el valor de la expresión, expresión es la expresión cuyo valor será almacenado en la variable. Instrucción equivalente en algoritmo: variable ← expresión Bloque equivalente en simbología de diagramas de flujo: Ejemplos; 1) a = 500 Al ejecutar esta instrucción la variable a toma el valor de 500. 2) LET a = 500 Al ejecutar esta instrucción la variable a toma el valor de 500. Nótese que el formato de esta instrucción permite la utilización opcional de LET, por eso es que este ejemplo hace exactamente lo mismo que el anterior. 3) promedio = (c1 + c2 + c3 ) / 3 Al ejecutar esta instrucción la variable promedio adquiere como valor el resultado de la expresión que se encuentra del lado derecho del signo =. 4) nom$ = "Federico" Al ejecutar esta instrucción la variable nom$ adquiere como valor el dato Federico. 5) nom$ = 5 Al ejecutar esta instrucción Quick Basic marcará un error, pues el tipo de la variable es distinto al tipo del dato que se le intenta asignar. Lo correcto sería asignar un dato alfanumérico a la variable nom$ o bien asignar el valor 5 a una variable de tipo numérica. 6) nom$ = ed Al igual que en el ejemplo anterior, al ejecutar esta instrucción Quick Basic marcará un error, pues el tipo de la variable es distinto al tipo del dato que se le intenta asignar. Lo correcto sería asignar un dato alfanumérico a la variable nom$ o bien asignar el valor de la variable ed a una variable de tipo numérica. CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA 225 b) ENTRADA DE DATOS Instrucción: INPUT Función: Durante la ejecución de un programa, permite la introducción de datos por medio del teclado. Formato: INPUT (;) ( "mensaje" {;/,}) variable (.variable ). .. donde: mensaje variable es un texto asociado a los datos que se van a introducir, es el nombre de la variable en donde se almacenará el dato introducido. Instrucción equivalente en algoritmo: PEDIR variable Bloque equivalente en simbología de diagramas de flujo: Cuando Quick Basic ejecuta la instrucción INPUT, se produce una pausa en la ejecución del programa para permitir al usuario introducir los datos. En la pantalla aparece un signo de interrogación si el mensaje se omitió, y si éste se incluyó entonces aparece el mensaje seguido de un signo de interrogación. Para indicar fin de datos se debe oprimir la tecla <ENTER> o ←. Ejemplos; 1) INPUT ed Al ejecutar esta instrucción en la pantalla aparece lo siguiente: ?__ Quick Basic hace una pausa esperando a que el usuario teclee algún valor, seguido de la tecla <ENTER> en el momento en que lo haga la variable ed adquirirá ese valor. 2) INPUT "Introduce tu edad"; ed Al ejecutar esta instrucción en la pantalla aparece: Introduce tu edad ?__ Quick Basic hace una pausa esperando a que el usuario teclee algún valor; en el momento en que lo haga la variable ed adquirirá ese valor. Obsérvese que la diferencia entre este ejemplo y el anterior es sólo en cuanto a la 226 PARTE III. PROGRAMACIÓN comunicación que se establece con la utilización del mensaje. Aunque los dos ejemplos hacen lo mismo en cuanto a que la variable ed toma un valor, este ejemplo hace mucho más claro para el usuario que lo que se espera es que introduzca como entrada una edad. 3) INPUT "Introduce tu nombre"; nom$ Al ejecutar esta instrucción en la pantalla aparece: Introduce tu nombre ? _ En el momento en que el usuario introduzca algún dato, la variable nom$ adquirirá ese valor. Obsérvese que es importante que el nombre de la variable utilizado en la instrucción incluya el signo $, ya que el tipo del dato es alfanumérico. c) SALIDA DE DATOS Instrucción: PRINT Función: Permite desplegar datos en la pantalla. Formato: { PRINT/ ? } (lista de expresiones ) ( { , / ; } ) donde: lista de expresiones es un conjunto de expresiones numéricas o alfanuméricas separadas por comas o puntos y comas. Instrucción equivalente en algoritmo: DESPLEGAR lista de expresiones Bloque equivalente en simbología de diagramas de flujo: Cuando Quick Basic ejecuta la instrucción PRINT, se despliega en la pantalla la lista de expresiones especificada. Ejemplos; 1) PRINT ed Al ejecutar esta instrucción en la pantalla aparece el valor de la variable ed. 2) ?ed CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA 227 Al ejecutar esta instrucción en la pantalla aparece el valor de la variable ed. Nótese que es equivalente utilizar la instrucción PRINT que utilizar el signo ?. 3) PRINT "Tu edad es"; ed Al ejecutar esta instrucción en la pantalla aparece el mensaje Tu edad es seguido del valor de la variable ed. 4) PRINT 100+ 100 Al ejecutar esta instrucción en la pantalla aparece el resultado de la expresión, que es 200. 5) PRINT "100 + 100 ="; 100+100 Al ejecutar esta instrucción en la pantalla aparece el mensaje 100 + 100 = seguido del resultado de la expresión, que es 200. 6) PRINT "Mi nombre es" PRINT "María" Al ejecutar este conjunto de instrucciones en la pantalla aparece lo siguiente: Mi nombre es María Después de que Quick Basic ejecuta la instrucción PRINT coloca el cursor en la línea siguiente. Por eso es que el mensaje María aparece en la siguiente línea. 7) PRINT "Mi nombre es" PRINT PRINT "María" Al ejecutar estas instrucciones en la pantalla aparece lo siguiente: Mi nombre es María Cuando Quick Basic ejecuta la instrucción PRINT y la lista de expresiones se omite sólo desplegará una línea en blanco y colocará el cursor en la línea siguiente. Por eso en este ejemplo entre los dos mensajes aparece una línea en blanco. 8) PRINT "Mi nombre es "; PRINT "María" Al ejecutar estas instrucciones aparece lo siguiente en la pantalla: Mi nombre es María Cuando un PRINT termina con el símbolo ; no coloca el cursor en la línea siguiente, sino que el cursor permanece en la posición siguiente al último carácter desplegado. Comentarios Instrucción: REM 228 PARTE III. PROGRAMACIÓN Función: Permite incluir mensajes no ejecutables dentro de un programa. Formato: { REM / ' } (mensaje) donde: mensaje es un texto que el programador incluye al programa como referencia. Ejemplo: REM Este programa obtiene el promedio de tres calificaciones Aplicación de las instrucciones necesarias para la interacción usuario-programa Problemas resueltos PROBLEMA 1 Aplicar los primeros 5 pasos de la metodología de la solución de problemas por medio de la computadora para encontrar el área de un círculo de radio 5. Paso 1. Definición del problema: Encontrar el área de un círculo de radio 5. Paso 2. Planeación de la solución: El área de un círculo está dada por la fórmula: área = Pi * radio^2 Si, por un lado, sabemos que la constante Pi es igual a 3.1416, y por otro, que el radio del círculo es de 5, al sustituir estos valores en la fórmula obtendríamos: área = 3.1416 * 5^2 Al aplicar esta fórmula obtendremos la solución. Nos podemos percatar de que tenemos todos los datos para poder solucionar nuestro problema, por lo que no requeriremos de datos de entrada. SALIDA: Área del círculo ENTRADA: Ninguna DATOS ADICIONALES: Ninguno SOLUCIÓN: Aplicar la fórmula área = 3.1416 X 5^2 Paso 3: Algoritmo 1. 2. área ←3.1416 * 5 ^2 DESPLEGAR área Paso 4. Diagrama de flujo (véase Fig. 7.1): CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA 229 Figura 7.1 Paso 5. Codificación y edición del programa: La codificación es la siguiente: REM Programa que obtiene el área de un círculo de radio 5 área = 3.1416 * 5 ^ 2 PRINT "El área del círculo con radio 5 es ": área END NOTA: Un programa escrito en Quick Basic deberá incluir la instrucción END para indicar el FIN del programa. 1) 2) 3) 4) La edición de este programa consistiría en seguir los siguientes pasos: Estando en el sistema operativo teclear Qbasic para entrar a Quick Basic. Seleccionar la opción ESC de la pantalla de bienvenida para ir a la barra de menúes. Seleccionar la opción Nuevo del menú Archivo. Escribir el programa utilizando el editor de Quick Basic. NOTA: Los pasos correspondientes a la edición del programa serán los mismos para todos los problemas. Paso 6. Pruebas y depuración: La fase de pruebas consiste en dos fases: —La primera es haciendo una prueba de escritorio como se había hecho en el capítulo 4, que consiste en seguir el algoritmo o diagrama de flujo y darle valores a las variables para verificar su funcionalidad. En este caso la primera fase de pruebas quedaría así: área ← 78.54 Se despliega 78.54 230 PARTE III. PROGRAMACIÓN —La segunda es ejecutando el programa para verificar si se logran los resultados buscados y si la presentación en la ejecución del programa nos es agradable. Para realizar esta prueba basta con ejecutar la opción Empieza del menú Ejecutar y en la pantalla se visualizaría lo siguiente: El área del círculo con radio 5 es: 78.54 La depuración del programa consiste en corregir lo que sea necesario para lograr que el programa logre el objetivo buscado. En los siguientes problemas resueltos se realizará la fase de codificación de los problemas resueltos 2, 3, 4 y 5 incluidos en los problemas secuenciales del capítulo 4. Se omitirán algunos pasos de la metodología debido a que ya fueron estudiados. PROBLEMA 2 Modificar el problema anterior para que sea capaz de calcular el área de un círculo de cualquier radio requerido. Paso 1. Definición del problema: Encontrar el área de un círculo con un radio cualquiera. Paso 4. Diagrama de flujo (véase Fig. 7.2): Paso 5. Codificación y edición del programa: Figura 7.2 CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA 231 El programa correspondiente al diagrama de flujo anterior es el siguiente: Programa 1 REM Programa que obtiene el área de un círculo de un radio cualquiera INPUT radio área = 3.1416 * radio^2 PRINT área END Este programa también podría ser escrito de la siguiente manera: Programa 2 REM Programa que obtiene el área de un círculo de un radio cualquiera INPUT "Introduce el radio del círculo"; radio área = 3.1416 * radio ^ 2 PRINT "El área es"; área END La diferencia entre los dos programas mostrados consiste en la presentación, pues el segundo programa, al utilizar mensajes en las entradas y salidas, logra que el usuario tenga una idea de qué datos se espera introduzca como entradas y qué resultados son los que el programa arroja como salidas. El segundo programa se considera un programa amigable para el usuario. Paso 6. Pruebas y depuración: Primera fase de pruebas: Prueba 1 para el programa 1 radio ←5 área ← 78.54 Se despliega 78.54 Prueba 1 para el programa 2 radio ← 5 área ← 78.54 Se despliega 78.54 Prueba 2 para el programa 1 radio ← 8 área ←201.0624 Se despliega 201.0624 Prueba 2 para el programa2 radio ←8 área ←201.0624 Se despliega 201.0624 232 PARTE 111. PROGRAMACIÓN Segunda fase de pruebas: Prueba 1 para el programa 1 ?5 78.54 Prueba 1 para el programa 2 Introduce el radio del círculo ? 5 El área es 78.54 Prueba 2 para el programa 1 ?8 201.0624 Prueba 2 para el programa 2 Introduce el radio del círculo ? 8 El área es 201.0624 En esta fase de pruebas se puede observar claramente cómo el programa 2 es más amigable que el programa 1 por la utilización de mensajes asociados a las instrucciones INPUT y PRINT. PROBLEMA 3 Determinar el área y perímetro de un rectángulo cualquiera. Paso 1. Definición del problema: Encontrar el área y perímetro de un rectángulo cualquiera. Paso 4. Diagrama de flujo (véase Fig. 7.3): Paso 5. Codificación y edición del programa: El programa correspondiente al diagrama de flujo anterior es el siguiente: Programa 1 REM Programa que obtiene el perímetro y área de un rectángulo INPUT "Da los lados del rectángulo"; lado1, Iado2 perímetro = lado1* 2 + Iado2*2 área = lado1 * Iado2 PRINT "El perímetro y área son"; perímetro, área END Programa 2 REM Programa que obtiene el perímetro y área de un rectángulo INPUT "Da el primer lado del rectángulo"; lado1 INPUT "Da el segundo lado del rectángulo"; Iado2 CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA 233 Figura 7.3 perímetro = lado1 * 2 + Iado2 * 2 área = lado1 * Iado2 PRINT "El perímetro del rectángulo es"; perímetro PRINT "El área del rectángulo es"; área END Obsérvese cómo las instrucciones INPUT y PRINT del programa 1 se fraccionaron en dos instrucciones cada una; para lograr un programa más amigable al tener un mensaje por cada dato de entrada, y un mensaje por cada salida. De cualquier modo el objetivo se logra con los dos programas. Ejercicio: Realizar al menos una vez el paso de pruebas y depuración incluyendo las dos fases de pruebas. PROBLEMA 4 Obtener el promedio de edades de 3 personas. Paso 1. Definición del problema: Obtener el promedio de edades de 3 personas. Paso 4. Diagrama de flujo (véase Fig. 7.4): 234 PARTE III. PROGRAMACIÓN Paso 5. Codificación y edición del programa: El programa correspondiente al diagrama de flujo anterior es el siguiente: REM Programa que obtiene el promedio de 3 edades INPUT "Da la primera edad"; edad1 INPUT "Da la segunda edad"; edad2 INPUT "Da la tercera"; edad3 promedio = [ edad1 + edad2 + edad3 ] / 3 PRINT "El promedio de las tres edades es"; promedio END Ejercicio: Realizar al menos una vez el paso de pruebas y depuración, incluyendo las dos fases de pruebas. PROBLEMA 5 Paso 1. Definición del problema: Suponga que un individuo decide invertir su capital en un banco y desea saber cuánto dinero ganará después de un mes si el banco paga a razón de 2% mensual. Paso 4. Diagrama de flujo (véase Fig. 7.5): CAPÍTULO 7. INTERACCIÓN USUARIO-PROGRAMA 235 Figura 7.5 Paso 5. Codificación y edición del programa: El programa correspondiente al diagrama de flujo anterior es el siguiente: REM Reinversión mensual INPLJT "Introduce el capital"; ci g = ci X 0.02 PRINT "La ganancia después de un mes será de:" ;g END Ejercicio: Realizar al menos una vez el paso de pruebas y depuración incluyendo las dos fases de pruebas. Problemas propuestos Aplicar los pasos 5) Codificación y edición del programa y 6) Pruebas y depuración, en los problemas propuestos incluidos en los problemas secuenciales del capítulo 4. 236 PARTE III. PROGRAMACIÓN RESUMEN Las instrucciones de interacción usuario-programa son aquellas que permiten al usuario tener comunicación con el programa ya sea para proporcionarle datos de entrada u obtener datos de salida. Las instrucciones de interacción usuario-programa se clasifican en: a) Asignación Instrucción LET: asignar a una variable un valor, ya sea el resultado de una expresión, el valor de una variable o bien el de una constante. b) Entrada de datos Instrucción INPUT: durante la ejecución de un programa, permite la introducción de datos por medio del teclado. c) Salida de datos Instrucción PRINT: permite desplegar datos a través de la pantalla. Comentarios Instrucción REM: permite incluir mensajes no ejecutables dentro de un programa. CAPÍTULO 8 CONTROL DE EJECUCIÓN OBJETIVOS 8.1 8.2 8.3 8.4 El alumno definirá las estructuras de ejecución condicional. El alumno definirá las estructuras de ejecución incondicional. El alumno definirá las estructuras repetitivas. El alumno aplicará las instrucciones de control de ejecución del lenguaje Basic en la solución de problemas 8.4.1 Selectivos a) Simples b) Compuestos 8.4.2 Repetitivos —Simples a) Con un número indeterminado de iteraciones b) Con un número determinado de iteraciones 237 CAPÍTULO 8 CONTROL DE EJECUCIÓN Las instrucciones de control de ejecución se clasifican en: 1) Control de ejecución condicional 2) Control de ejecución incondicional 3) Estructuras repetitivas 8a) CONTROL DE EJECUCIÓN CONDICIONAL Instrucción: IF. . . THEN. . . ELSE Función: Permite la ejecución de un conjunto de instrucciones dependiendo del resultado de la evaluación de una condición dada. Esta instrucción es necesaria para resolver problemas de tipo selectivo, tanto simples como compuestos. Equivalencias: En algoritmo: SI condición ENTONCES Conjunto de acciones 1 DE OTRA FORMA Conjunto de acciones 2 En bloque de diagrama de flujo (véase Fig. 8.1): Formatos: 238 CAPÍTULO 8. CONTROL DE EJECUCIÓN 239 Figura 8.1 Formato 1: IF condición THEN Conjunto de instrucciones 1 (ELSE Conjunto de instrucciones 2) ENDIF Formato 2: IF condición THEN Conjunto de instrucciones 1 (ELSE Conjunto de instrucciones 2) En este libro emplearemos únicamente el formato 1, pues resulta ser el más claro y por ende el que más ayuda en la fase de mantenimiento de los programas. Cuando la evaluación de la condición resulta verdadera se evalúa el conjunto de instrucciones 1. Si resulta falsa se ejecuta el conjunto de instrucciones 2. El conjunto de instrucciones 1 equivale a la parte derecha o verdadera de un bloque condicional de diagrama de flujo, mientras que el conjunto de instrucciones 2, a la parte izquierda o falsa, y como ésta no siempre existe, está marcada como opcional en el formato de la instrucción. Se recomienda ampliamente que tanto el conjunto de acciones 1 como el conjunto de acciones 2 se escriban indentados (con sangría) con respecto al IF, ELSE y END IF. Observe que lo que delimita a la parte verdadera de la instrucción es el renglón en donde se encuentra el IF. . . THEN y el renglón donde se encuentra el ELSE. Lo que delimita la parte falsa es el ELSE y el END IF. El END IF es equivalente al pequeño círculo delimitador del fin de un bloque selectivo en diagrama de flujo. Ejemplos: 1) Bloque (véase Fig. 8.2). Instrucción: IFedad> = 18THEN PRINT "Es mayor de edad" END IF 2) Bloque (véase Fig. 8.3). 240 PARTE III. PROGRAMACIÓN Figura 8.2 Figura 8.3 Instrucción: IF edad> = 18 THEN PRINT "Es mayor de edad" ELSE PRINT "Es menor de edad" END IF 3) Bloque (véase Fig. 8.4). Instrucción: IF nombre$="ARTURO" AND color$="ROJO"THEN PRINT "El Sr. Arturo tiene 20% de descuento" total=subtotal X 0.8 ELSE total=subtotal END IF A continuación se presentarán los pasos finales de la metodología para la solución de problemas de los problemas selectivos, tanto simples como compuestos. CAPÍTULO 8. CONTROL DE EJECUCIÓN 241 nombre$ = "ARTURO AND "El Sr. Arturo tiene 20% de descuento' Figura 8.4 Problemas resueltos PROBLEMA 1 Determinar si un alumno aprueba o reprueba un curso, sabiendo que un alumno aprueba si su promedio de tres calificaciones es mayor o igual a 7, y reprueba en caso contrario. Paso 4. Diagrama de flujo (véase Fig. 8.5). Paso 5. Codificación y edición del programa: REM Obtener promedio de tres calificaciones y decir si es aprobatorio o no INPUT "Primera calificación";c1 INPUT "Segunda calificación";c2 INPUT 'Tercera calificación";c3 p= [c1+c2+c3]/3 IF p>=7THEN PRINT "El alumno está aprobado" ELSE PRINT "El alumno está reprobado" ENDIF END Paso 6. Pruebas y depuración: Segunda fase: 242 PARTE III. PROGRAMACIÓN Figura 8.5 Prueba 1 Primera calificación? 8 Segunda calificación? 9 Tercera calificación? 9 El alumno está aprobado Prueba 2 Primera calificación? 7 Segunda calificación? 6 Tercera calificación? 6 El alumno está reprobado PROBLEMA 2 En un almacén se hace un 20% de descuento a aquellos clientes cuya compra supere los $1000. ¿Cuál será la cantidad de dinero que pagará una persona por su compra? CAPÍTULO 8. CONTROL DE EJECUCIÓN Figura 8.6 Paso 4. Diagrama de flujo (véase Fig. 8.6). Paso 5. Codificación y edición del programa: REM Descuento en un almacén para el que compre más de $1000 INPUT "Valor de la compra";compra IF compra>1OOOTHEN pago=compra*O.8 ELSE pago=compra ENDIF PRINT "El pago es:";pago END 243 244 PARTE III. PROGRAMACIÓN Paso 6. Pruebas y depuración: Segunda fase: Prueba 1 Valor de la compra? 2500 El pago es: 2000 Prueba 2 Valor de la compra? 700 El pago es: 700 Prueba 3 Valor de la compra? 1000 El pago es: 1000 PROBLEMA 3 Un obrero necesita calcular su salario semanal, el cual se obtiene de la siguiente manera: —Si trabaja 40 horas o menos se le paga $4 por hora. —Si trabaja más de 40 horas se le paga $4 por cada una de las primeras 40 horas y $6 por cada hora extra. Paso 4. Diagrama de flujo (véase Fig. 8.7). Paso 5. Codificación y edición del programa: REM Obtención del salario de un obrero con horas extras INPUT "Número de horas trabajadas";ht IF ht>40 THEN he=ht-40 s=he * 6 + 40 * 4 ELSE s= ht * 4 END IF PRINT "El salario semanal es:";s END Paso 6. Pruebas y depuración: Segunda fase: Prueba 1 Número de horas trabajadas? 38 El salario semanal es: 152 CAPÍTULO 8. CONTROL DE EJECUCIÓN 245 Figura 8.7 Prueba 2 Número de horas trabajadas? 45 El salario semanal es: 190 PROBLEMA 4 Un hombre desea saber cuánto dinero se generará por concepto de intereses sobre la cantidad que tiene en inversión en el banco. Él decidirá reinvertir los intereses siempre y cuando éstos excedan de $7000, y en ese caso desea saber cuánto dinero tendrá finalmente en su cuenta. 246 PARTE 111. PROGRAMACIÓN Figura 8.8 Paso 4. Diagrama de flujo (véase Fig. 4.8). Paso 5. Codificación y edición del programa: REM Inversión en un banco INPUT "Porcentaje de interés";p INPUT "Cantidad en inversión";ci ¡=ci * p/1OO CAPÍTULO 8. CONTROL DE EJECUCIÓN 247 PRINT "lntereses:";¡ IF i>7OOO cf=ci+i PRINT "Cantidad final en la cuenta:";cf END IF END Paso 6. Pruebas y depuración: Segunda fase: Prueba 1 Porcentaje de interés? 5 Cantidad en inversión? 70 000 Intereses: 3500 Prueba 2 Porcentaje de interés? 7 Cantidad en inversión? 120 000 Intereses: 8400 Cantidad final en la cuenta: 128 400 PROBLEMA 5 Una persona enferma que pesa 70 kg se encuentra en reposo y desea saber cuántas calorías consume su cuerpo durante todo el tiempo que realice una misma actividad. Las actividades que tiene permitido realizar son únicamente dormir o estar sentado en reposo. Los datos que tiene son que estando dormido consume 1.08 calorías por minuto y estando sentado en reposo consume 1.66 calorías por minuto. Paso 4. Diagrama de flujo (véase Fig. 8.9). Paso 5. Codificación y edición del programa: REM Calorías que gasta un enfermo INPUT “Tipo de actividad";a$ INPUT "Minutos que duró la actividad";t IF a$="DORMIDO"THEN cg=1.BBXt ELSE cg=1.OSX t END IF PRINT "Calorías gastadas";cg END Paso 6. Pruebas y depuración: 248 PARTE III. PROGRAMACIÓN Figura 8.9 Segunda fase: Prueba 1 Tipo de actividad? DORMIDO Minutos que duró la actividad? 100 Calorías gastadas: 166 Prueba 2 Tipo de actividad? SENTADO Minutos que duró la actividad? 100 Calorías gastadas: 108 PROBLEMA 6 CAPÍTULO 8. CONTROL DE EJECUCIÓN 249 Una empresa quiere hacer una compra de varias piezas de la misma clase a un fabricante de refacciones. La empresa, dependiendo del monto total de la compra, decidirá qué hacer para pagar al fabricante. Si el monto total de la compra excede de $500 000 la empresa tendrá la capacidad de invertir de su propio dinero un 55% del monto de la compra, deberá pedir prestado al banco un 30% y el resto lo pagará solicitando un crédito al fabricante. Si el monto total de la compra no excede de $500 000 la empresa tendrá capacidad de invertir de su propio dinero un 70% y el restante 30% lo pagará solicitando crédito al fabricante. El fabricante cobra por concepto de intereses un 20% sobre la cantidad que se le pague a crédito. La empresa necesita determinar: cuánto dinero tendrá que invertir de sus propios fondos, si hay necesidad, cuánto deberá pedir prestado al banco, cuánto tendrá que pagar a crédito y cuánto por concepto de los intereses que se generen en el crédito. Paso 4, Diagrama de flujo (véase Fig. 8.10). Paso 5. Codificación y edición del programa: REM Presupuesto de compra de una empresa INPUT "Número de piezas";np NPUT "Costo de cada pieza";cu mt=np * cu IF mt>500000 THEN ci=mt * 0.55 cc=mt* 0.15 cpb=mt * 0.3 PRINT "Cantidad a pedir al banco:"; cpb ELSE ci=mt* 0.7 cc=mt* 0.3 END IF i=cc* 0.2 PRINT "Cantidad que invierte la empresa:";ci PRINT "Cantidad a pagar a crédito";cc PRINT "lntereses:";¡ END Ejercicio: Realizar la segunda fase del paso de pruebas y depuración. PROBLEMA 7 Determinar la cantidad de dinero que recibirá un trabajador por concepto de las horas trabajadas en una empresa, sabiendo que cuando las horas que trabajó exceden de 40, el resto se convierte en horas extras y que éstas se pagan al doble de una hora normal cuando no exceden de 8; cuando las horas extras exceden de 8 se pagan las primeras 8 al doble de lo que se paga por una hora normal y el resto al triple de lo de una normal. 250 PARTE III. PROGRAMACIÓN Figura 8.10 Paso 4. Diagrama de flujo (véase Fig. 8.11). Paso 5. Codificación y edición del programa: CAPÍTULO 8. CONTROL DE EJECUCIÓN 251 pe ← ph * 2 * 8 + ph * 3 * het Figura 8.11 REM Salario de un trabajador con horas normales, dobles y triples INPUT "Horas trabajadas";ht INPUT "Pago por hora normal";ph 252 PARTE III. PROGRAMACIÓN IF ht>40 THEN he=ht-40 IF he>8 THEN het=he-8 pe=ph * 2 * 8+ph * 3 * het ELSE pe=ph*2*he END IF pt=ph*4O+pe ELSE pt=ph*ht ENDIF PRINT "Pago del trabajador:";pt END Paso 6. Pruebas y depuración: Segunda fase: Prueba 1: Horas trabajadas? 38 Pago por hora normal? 2 Pago del trabajador: 76 Prueba 2: Horas trabajadas? 45 Pago por hora normal? 2 Pago del trabajador: 100 Prueba 3: Horas trabajadas? 50 Pago por hora normal? 2 Pago del trabajador: 124 PROBLEMA 8 Calcular la utilidad que un trabajador recibe en el reparto anual de utilidades si éste se le asigna como un porcentaje de su salario mensual, dependiendo del tiempo que tenga trabajando en la empresa de acuerdo con la siguiente tabla: TIEMPO menos de 1 año 1 año o más y menos de 2 años 2 años o más y menos de 5 años UTILIDAD 5% del salario 7% del salario 10% del salario CAPÍTULO 8. CONTROL DE EJECUCIÓN TIEMPO UTILIDAD 5 años o más y menos de 10 años 10 años o más Figura 8.12 15% del salario 20% del salario 253 254 PARTE III. PROGRAMACIÓN Paso 4. Diagrama de flujo (véase Fig. 8.12): Paso 5. Codificación y edición del programa: REM Reparto de utilidades INPUT "Tiempo que tiene trabajando";t INPUT "Salario";s IF t<1 THEN u=s *0.05 ELSE IF t<2 THEN u=s *0.07 ELSE IF t<5 THEN u=s*0.1 ELSE IF t<1OTHEN u=s *0.15 ELSE u=s *0,2 END IF END IF END IF END IF PRINT "Utilidad:";u END Paso 6. Pruebas y depuración: Segunda fase: Prueba 1: Supongamos que una persona tiene 1/2 año trabajando y gana $1000 mensuales. Tiempo que tiene trabajando? 0.5 Salario? 1000 Utilidad: 50 Prueba 2: Tiempo que tiene trabajando? 15 Salario? 5000 Utilidad: 1000 PROBLEMA 9 En una tienda de descuento se tiene una promoción mediante la cual se hace un descuento sobre el valor de la compra total, dependiendo del color de la bolita que el cliente saque al efectuar el pago en caja. Si la bolita es blanca no se le hará descuento; si es verde se le hará un 10% de descuento; si CAPÍTULOS. CONTROL DE EJECUCIÓN 255 es amarilla un 25%; si es azul un 50%, y si es roja un 100%. Determinar la cantidad final que un cliente deberá pagar por su compra. Se sabe que sólo hay bolitas de los colores mencionados. Paso 4. Diagrama de flujo (véase Fig. 8.13). Figura 8.13 256 PARTE III. PROGRAMACIÓN Paso 5. Codificación y edición del programa: REM Descuento según el color de la bolita INPUT "Monto de la compra";m INPUT "Color de la bolita";b$ IF b$ = "BLANCA" THEN d=O ELSE IF b$=”VERDE"THEN d=m*0.1 ELSE IF b$= "AMARILLA" THEN d=m*0.25 ELSE IF b$= "AZUL" THEN d=m*0.5 ELSE d=m END IF END IF END IF END IF cp=m-d PRINT "Cantidad a pagar:";cp END Paso 6. Pruebas y depuración: Segunda fase: Prueba 1: Monto de la compra? 500 Color de la bolita? BLANCA Cantidad a pagar: 500 Prueba 2: Monto de la compra? 200 Color de la bolita? AMARILLA Cantidad a pagar: 150 Prueba 3: Monto de la compra? 350 Color de la bolita? ROJA Cantidad a pagar: 0 CAPÍTULO 8. CONTROL DE EJECUCIÓN 257 PROBLEMA 10 Una empresa que comercializa cosméticos tiene organizados a sus vendedores en tres departamentos y ha implementado un programa de incentivos para incrementar la productividad de éstos. El gerente, al final del mes, pide el global de las ventas de los tres departamentos, y aquellos que excedan el 33% de las ventas totales se les paga una cantidad extra equivalente al 20% de su salario mensual. Si todos los vendedores ganan lo mismo, determinar cuánto recibirán los vendedores de los tres departamentos al finalizar el mes. Paso 4. Diagrama de flujo (véase Fig. 8.14): Paso 5. Codificación y edición del programa: REM Incentivos para los departamentos de una empresa INPUT “Venta del departamento 1 ";v1 INPUT "Venta del departamento 2";v2 INPUT "Venta del departamento 3";v3 INPUT "Salario";s tv=v1+v2+v3 P=tv * 0.33 IFv1>p THEN cd1 =s+s * o.2 ELSE cd1 =s END IF IF v2>p THEN cd2=s+s * o.2 ELSE cd2=s END IF IF v1 >p THEN c d3=s+s * 02 ELSE cd3=s ENDIF PRINT "Cantidad a recibir para el departamento 1:";cd1 PRINT "Cantidad a recibir para el departamento 2:";cd2 PRINT "Cantidad a recibir para el departamento 3:";cd3 END Paso 6. Pruebas y depuración: Segunda fase: Prueba: Venta del departamento 1? 32 000 258 PARTE III. PROGRAMACIÓN Figura 8.14 Venta del departamento 2? 38 000 Venta del departamento 3? 30 000 Salario? 1500 CAPÍTULO 8. CONTROL DE EJECUCIÓN 259 Cantidad a recibir para el departamento 1: 1500 Cantidad a recibir para el departamento 2: 1800 Cantidad a recibir para el departamento 3: 1500 PROBLEMA 11 El IMSS requiere hacer una clasificación de las personas que se jubilan en 1992. Existen tres tipos de jubilaciones: por edad, por antigüedad joven y por antigüedad adulta. Las personas que entran al tipo de jubilación por edad deben tener 60 años o más y una antigüedad en su empleo de menos de 25 años. Las personas que entran al tipo de jubilación por antigüedad joven deben tener menos de 60 años y una antigüedad en su empleo de 25 años o más. Las personas que entran al tipo de jubilación por antigüedad adulta deben tener 60 años o más y una antigüedad en su empleo de 25 años o más. Determinar en qué tipo de jubilación entraría una persona. Paso 4. Diagrama de flujo (véase Fig. 8.15): Paso 5. Codificación y edición del programa: REM Jubilaciones INPUT "Edad";ed INPLJT "Antigüedad";ant IF ed>=6O AND ant<25 THEN PRINT "La jubilación es por edad" ELSE IF ed>=60 AND ant>25 THEN PRINT "La jubilación es por antigüedad adulta" ELSE IF ed<6O AND ant>25 THEN PRINT "La jubilación es por antigüedad joven" ELSE PRINT "No tiene por qué jubilarse" END IF END IF END IF END Paso 6. Pruebas y depuración: Segunda fase: Prueba J: Edad? 65 Antigüedad? 30 La jubilación es por antigüedad adulta 260 PARTE III. PROGRAMACIÓN "La jubilación es por antigüedad adulta" Figura 8.15 Prueba 2: Edad? 55 Antigüedad? 20 CAPÍTULO 8. CONTROL DE EJECUCIÓN 261 No tiene por qué jubilarse Problemas propuestos Terminar la metodología para la solución de problemas para la sección de problemas propuestos selectivos simples y compuestos del capítulo 4. 8b) CONTROL DE EJECUCIÓN INCONDICIONAL Instrucción: GOTO Función: Brincar incondicionalmente a otra parte del programa marcada con una etiqueta. Equivalencias: En algoritmo: IR al paso X En bloque de diagrama de flujo: Formato: GOTO etiqueta Esta instrucción sirve para continuar la secuencia de ejecución de un programa en otro punto del mismo, marcado con una etiqueta. Para crear una etiqueta se deben seguir las mismas reglas empleadas para dar nombre a variables. En el punto de brinco la etiqueta debe tener el símbolo de dos puntos (:) al final. Ejemplo: 1) INPUT x$ A: INPUT y$ GOTO A En este punto se aprecia cómo la variable x$ es pedida una vez y la variable y$ es pedida más de una vez; de hecho en un número infinito de veces, debido al uso de la instrucción GOTO. El uso de la instrucción GOTO va en contra de las técnicas de programación estructurada que hemos venido usando a lo largo del libro; por lo tanto no recomendamos usarla a menos que se use en combinación con la instrucción IF. . . THEN. . . ELSE para la codificación de ciclos como un número indeterminado de iteraciones, lo cual veremos a continuación. 262 PARTE III. PROGRAMACIÓN 8c) ESTRUCTURAS REPETITIVAS: COMBINACIÓN DE LAS INSTRUCCIONES IF... THEN... ELSE Y GOTO Esta combinación es usada para codificar ciclos con un número indeterminado de iteraciones. Recordemos que estos ciclos tienen la siguiente estructura: 1. 2. 3. C PEDIR mas$ SI mas$="NO" ENTONCES IR al paso 4 DE OTRA FORMA IR al paso 1 4. X En donde C es el cuerpo del ciclo. El programa correspondiente puede quedar de la siguiente forma: A: C INPUT "Más iteracciones (S/N)"; mas$ IF mas$="NO" THEN GOTOB ELSE GOTO A END IF B: Puede observarse que en la parte falsa de la condición, que es cuando se quiere realizar otra iteración, con el GOTO A se brinca al punto en donde comienza el cuerpo del ciclo. En caso de que no se quieran más iteraciones se ejecuta el GOTO B y por lo tanto continúa con la instrucción siguiente al IF, por lo cual se da término al ciclo. A continuación se resolverán los problemas repetitivos simples con un número indeterminado de iteraciones, para los cuales emplearemos la combinación IF... THEN... ELSE - GOTO. Problemas resueltos PROBLEMA 1 En una tienda de descuento las personas que van a pagar por el importe de su compra llegan a la caja y sacan una bolita de color que les dirá qué descuento tendrán sobre el total de su compra. Determinar la cantidad que pagarán cada uno de los clientes desde que la tienda abre hasta que cierra. Se sabe que si el color de la bolita es roja el cliente obtendrá un 40% de descuento. Si el color es amarillo obtendrá un 25% y si es blanca no obtendrá descuento. CAPÍTULO 8. CONTROL DE EJECUCIÓN 263 Paso 4. Diagrama de flujo (véanse Figs. 8.16 y 8.17). Paso 5. Codificación y edición del programa: Dado que aún no hemos visto algunas instrucciones necesarias para poder tener un programa dividido en procesos, tendremos a continuación que integrar el proceso CLIENTE al programa principal. Observe que se ha remarcado el principio y fin de este proceso entre comentarios. REM Descuentos a clientes durante un día según bolita que saquen A: REM Comienza proceso del CLIENTE INPUT "Color de la bolita";color$ INPUT "Total de la compra";tsd IF color$="ROJA" THEN tcd=tsd * 0.6 ELSE IF color$="AMARILLA" THEN tcd=tsd * 0.75 ELSE tcd=tsd END IF ENDIF PRINT 'Total con descuento:";tcd REM Termina proceso del CLIENTE INPUT "Otro cliente más (SI/NO)";mas$ IF mas$="NO" THEN GOTO B ELSE GOTO A END IF B: END Paso 6. Pruebas y depuración: Segunda fase: Prueba: Color de la bolita? AMARILLA Total de la compra? 300 Total con descuento: 225 Otro cliente más (SI/NO)? SI Color de la bolita? ROJA Total de la compra? 200 Total con descuento: 120 264 PARTE III. PROGRAMACIÓN Figura 8.16 Figura 8.17 CAPÍTULO 8. CONTROL DE EJECUCIÓN 265 Otro cliente más (SI/NO)? SI Color de la bolita? BLANCA Total de la compra? 150 Total con descuento: 150 Otro cliente más (SI/NO)? NO PROBLEMA 2 En un supermercado un ama de casa que está de compras va metiendo en su carrito los artículos que toma de los estantes. La mujer quiere asegurarse de que el cajero le cobre bien lo que ella ha comprado, por lo que cada vez que compra un artículo distinto anota su precio, junto con la cantidad de artículos iguales que ha comprado y determina cuánto dinero se ha gastado en ese artículo y a esto le suma todo lo que se vaya gastando en los demás artículos hasta que decide que ya compró todo lo que necesitaba. Ayudarle a esta mujer a obtener el total de sus compras. Paso 4. Diagrama de flujo (véanse Figs. 8.18 y 8.19). Paso 5. Codificación y edición del programa: Al igual que en el problema anterior integraremos el proceso ARTICULO al programa principal, dado que aún no hemos visto las instrucciones necesarias para tener un programa dividido en procesos. REM Mujer de compras en un supermercado t=O A: REM Comienza proceso ARTICULO INPUT "Precio";p INPUT "Número de artículos";n sb=p*n t=t+sb REM Termina proceso ARTICULO INPUT "Más artículos (S/N)";mas$ IF mas$ = "N" THEN GOTO B ELSE GOTO A END IF B: PRINT Total:";t END Paso 6. Pruebas y depuración: Segunda fase: 266 PARTE III. PROGRAMACIÓN Figura 8.19 Figura 8.18 Prueba: Precio? 10 Número de artículos? 4 Más artículos (S/N)? S Precio? 22 Número de artículos? 5 Más artículos (S/N)? S Precio? 6.5 Número de artículos? 2 Más artículos (S/N)? N Total: 181 CAPÍTULO 8. CONTROL DE EJECUCIÓN 267 PROBLEMA 3 Un teatro efectúa descuentos según la edad del cliente. Determinar la cantidad de dinero que el teatro deja de percibir por cada una de las categorías. Tomar en cuenta que los niños menores de 5 años no pueden entrar al teatro y que existe un precio único en los asientos. Los descuentos se hacen tomando en cuenta la siguiente tabla: edad categoría 1 categoría 2 categoría 3 categoría 4 categoría 5 5-14 15-19 20-45 46-65 66 - adelante descuento 35% 25% 10% 25% 35% Paso 4. Diagrama de flujo (véanse Figs. 8.20 y 8.21). Paso 5. Codificación y edición del programa: REM Descuentos en un teatro INPUT "Precio del boleto";p c1= O c2=O c3=O c4=O c5=O A: REM Proceso del CLIENTE ERROR: INPUT "Edad";e IF e<=THEN PRINT "No pueden entrar niños menores de 5 años" GOTO ERROR END IF IF e<=14 OR e >=66 THEN c=p*O.65 IF e<=14 THEN c1=c1+c ELSE c5=c5+c END IF ELSE IF e<=19 OR e>=46 THEN c=p * 0.75 IF e<=19THEN c2=c2+c 268 PARTE III. PROGRAMACIÓN Figura 8.20 Figura 8.21 CAPÍTULO 8. CONTROL DE EJECUCIÓN 269 270 PARTE III. PROGRAMACIÓN ELSE c4=c4+c END IF ELSE c=p * 0.9 c3=c3+c END IF END IF REM Fin del proceso CLIENTE INPUT "Más clientes (S/N)";mas$ IF mas$="N0" THEN GOTOB ELSE GOTO A END IF B: PRINT 'Total descontado en categoría 1 :";d PRINT 'Total descontado en categoría 2:";c2 PRINT 'Total descontado en categoría 3:";c3 PRINT "Total descontado en categoría 4:";c4 PRINT 'Total descontado en categoría 5:";c5 END Paso 6. Pruebas y depuración: Ejercicio: Introduzca el programa a la computadora y efectúe al menos 2 pruebas. PROBLEMA 4 Una compañía de transportes terrestres de lujo tiene 2 tipos de camiones. Todos los camiones están divididos en 3 secciones: de Lujo, Fumar y No Fumar. Las reservaciones se hacen momentos antes de que el camión vaya a salir. Un camión puede salir cuando tenga el cupo lleno o cuando se decida que ya se esperó suficiente tiempo para llenarse. Lo que se necesita es que se haga un programa de computadora que avise cuándo un camión debe de salir. Se proporciona una tabla con el número de asientos de lujo, fumar y no fumar de los dos tipos de camiones: ipo 1 2 Lujo 10 18 Fumar 16 20 No fumar 20 24 Paso 4. Diagrama de flujo (véanse Figs. 8.22 y 8.23). CAPÍTULO 8. CONTROL DE EJECUCIÓN Figura 8.22 271 CAPÍTULO 8. CONTROL DE EJECUCIÓN Paso 5. Codificación y edición del programa: REM Control de una compañía de camiones INPUT 'Tipo de camión";t IF t=1 THEN ald=1O afd=16 anfd=2O ELSE ald=18 afd=20 anfd=24 END IF nalo=O nafo=O nanfo=O llenol$="NO" llenof$="NO" llenonf$="NO" A: REM Comienza proceso CLIENTE INPUT "Categoría";c$ IF c$="LUJO" THEN IF llenol$="NO" THEN nalo=nalo+1 IF nalo=ald THEN llenol$="SI" END IF ELSE PRINT "Asientos de la sección de lujo agotados" END IF ELSE IF c$="FUMAR" THEN IF llenof$="NO" THEN nafo=nafo+1 IF nafo=afd THEN llenof$="SI" END IF ELSE PRINT "Asientos de la sección de fumar agotados" END IF ELSE IF llenonf$="NO" THEN nanfo=nanfo+1 IF nanfo=anfd THEN llenonf$ = "SI" 273 274 PARTE III. PROGRAMACIÓN END IF ELSE PRINT "Asientos de la sección de no fumar agotados" END IF END IF END IF REM Termina proceso CLIENTE IF llenol$="Sr AND llenof$="SI" AND llenonf$="SI" THEN mas$= "NO" ELSE INPUT "Espero más clientes (SI/NO)";mas$ ENDIF IF mas$="NO" THEN GOTO B ELSE GOTO A ENDIF B: PRINT "Ya puede salir el camión" END Paso 6. Pruebas y depuración: Ejercicio: Introduzca el programa a la computadora y efectúe al menos 2 pruebas. Problemas propuestos Terminar la metodología para la solución de problemas para la sección de problemas propuestos repetitivos simples con un número indeterminado de iteraciones del capítulo 4. 8d) ESTRUCTURAS REPETITIVAS: INSTRUCCIÓN FOR...NEXT Instrucción: FOR...NEXT. Función: Repetir un conjunto de instrucciones un número determinado de veces. Esta instrucción debe usarse para codificar ciclos que tengan un número determinado de iteraciones. Equivalencias: En algoritmo: Hasta ahora hemos visto un ciclo con un número determinado de iteraciones con la siguiente representación: 1. i ← l 2. SI i > n ENTONCES CAPÍTULO 8. CONTROL DE EJECUCIÓN 275 IR al paso 3 DE OTRA FORMA C i←i + 1 IR al paso 2 3. X En donde C es el cuerpo del ciclo y X la instrucción siguiente al ciclo. Se define que el valor inicial del contador i es 1 y se incrementa de 1 en 1 hasta llegar al valor de n, por lo que el número de iteraciones es n. Sin embargo podemos emplear un formato más general en el cual el valor inicial del contador pueda ser diferente de 1, al igual que el valor de incremento en el contador, hasta que se llegue a un valor final. En la mayoría de los casos este formato se concretará al primer formato visto. Ésta sería su representación: 1. i ← a 2. SI i > b ENTONCES IR al paso 3 DE OTRA FORMA C i← i + s IR al paso 2 3. X En diagrama de flujo (véase Fig. 8.24). Formato: FOR i=a TO b (STEP s) C NEXT i Cuando la cláusula STEP es omitida se asume como STEP 1 En donde: i es una variable contador a es el valor inicial del contador b es el valor final del contador s es el valor en el cual el contador se incrementa en cada ciclo. Si s es un valor negativo el contador se decrementará y la comparación de la condición cambiará de > a <, por lo que b deberá tener un valor menor a a. C es el cuerpo del ciclo. Se recomienda ampliamente que el cuerpo del ciclo vaya indentado con respecto al FOR y al NEXT. El FOR...NEXT ejecuta en ciclo el conjunto de acciones C delimitadas por el renglón del FOR y el renglón del NEXT siguiendo este algoritmo: 276 PARTE III. PROGRAMACIÓN Figura 8.24 1 i ←a 2. SI i>b ENTONCES IR al paso 3 DE OTRA FORMA C i←i + s IR al paso 2 3. X Cuando el valor del STEP sea negativo la condición del paso 2 cambiará a: 2. SI i< b ENTONCES Ejemplos: 1. Diagrama de flujo (véase Fig. 8.25). Programa: CAPÍTULO 8. CONTROL DE EJECUCIÓN Figura 8.25 REM Programa que imprime cinco veces "HOLA" empleando la instrucción FOR...NEXT PRINT "Comienza el ciclo" FOR i=1 T0 5 PRINT "HOLA" NEXT i PRINT "Fin del ciclo" END Prueba: Comienza el ciclo HOLA HOLA HOLA 277 278 PARTE III. PROGRAMACIÓN HOLA HOLA Fin del ciclo Para entender mejor este ejemplo se escribirá el algoritmo que le corresponde a este programa: 1. 2. 3. 4. DESPLEGAR "Comienza el ciclo" i← 1 SI i>5 ENTONCES IR al paso 4 DE OTRA FORMA DESPLEGAR "HOLA" i←i + 1 IR al paso 3 DESPLEGAR "Fin del ciclo" Como el FOR...NEXT no tiene STEP se asumió el valor de incremento en 1. Los pasos 2 y 3 de este algoritmo son los que corresponden al FOR...NEXT. La gran ventaja al codificar el FOR...NEXT es que ya no tenemos que preocuparmos por asignar valor inicial al contador, ni por incrementarlo, ni por verificar la condición de fin del ciclo. Simplemente indicamos el valor inicial del contador, el valor final, el valor de incremento, las instrucciones del cuerpo del ciclo y el FOR...NEXT realizará las acciones necesarias para que el cuerpo del ciclo se ejecute. 2. Algoritmo: 1. 2. 3. i←l SI i> 10 ENTONCES IR al paso 3 DE OTRA FORMA DESPLEGAR i i←i+ 1 IR al paso 2 X Diagrama de flujo (véase Fig. 8.26). Programa: REM Programa que imprime del 1 al 1O F0R i=1 TO 10 PRINT i NEXT i END Prueba: 1 CAPÍTULO 8. CONTROL DE EJECUCIÓN Figura 8.26 2 3 4 5 6 7 8 9 10 3. Algoritmo: 1. 2. i←3 SI i > 5 ENTONCES IR al paso 3 DE OTRA FORMA DESPLEGAR "Iteración” i←i+s 279 280 PARTE III. PROGRAMACIÓN IR al paso 2 3. FIN Programa: REM Programa que imprime tres veces la palabra "Iteración" FOR i=3 TO 5 PRINT "Iteración" NEXTi END Prueba: Iteración Iteración Iteración Si el FOR...NEXT lo reemplazamos por el siguiente FOR...NEXT haría exactamente lo mismo: FORi=1 T0 3 PRINT "Iteración" NEXTi 4. Algoritmo: 1. 2. i←1 SI i> 11 ENTONCES IR al paso 3 DE OTRA FORMA DESPLEGAR i i←i + 2 IR al paso 2 3. FIN Programa: REM Programa que imprime los seis primeros números impares FOR i = 1 TO 11 STEP 2 PRINT i NEXT i END Esta vez el incremento es de 2 por que así lo indica la cláusula STEP. Prueba: 1 3 5 CAPÍTULO 8. CONTROL DE EJECUCIÓN 7 9 11 5. Algoritmo: 1. i← -5 2. SI i> 4 ENTONCES IR al paso 3 DE OTRA FORMA DESPLEGAR i i←i + 1 IR al paso 2 3. FIN Programa: REM Programa que imprime el rango de números (-5...4) FOR i= -5 TO 4 PRINT i NEXT i END Prueba: -5 -4 -3 -2 -1 0 1 2 3 4 6. Algoritmo: 1. i←6 2. SI i < -9 ENTONCES IR al paso 3 DE OTRA FORMA DESPLEGAR i i ← i + (-3) IR al paso 2 281 282 PARTE III. PROGRAMACIÓN 3. X Programa: REM Programa que imprime el rango de números [B...-9] brincando de 3 en 3 FOR i=6 TO-9 STEP-3 PRINT i NEXT i END Observe que como el contador va de un número mayor hacia un número menor, el STEP debe ir decrementando pues de lo contrario el contador jamás alcanzaría el valor final. También es de hacerse notar que cuando un FOR...NEXT contiene la cláusula STEP con un valor negativo la condición de fin de ciclo checa que el contador sea menor que el valor final, como se aprecia en el algoritmo. Prueba: 6 3 0 -3 -6 -9 A continuación complementaremos la metodología para la solución de los problemas de tipos repetitivos simples con un número determinado de ciclos, empleando la instrucción FOR...NEXT. Problemas resueltos PROBLEMA 1 Calcular el promedio de calificaciones parciales de cada uno de los alumnos de un grupo de 5, sabiendo que existen tres periodos parciales. Paso 4. Diagrama de flujo (véanse Figs. 8.27 y 8.28). Paso 5. Codificación y edición del programa: REM Obtener el promedio de 5 alumnos FOR i=1 T0 5 INPUT "Calificación parcial 1";c1 INPUT "Calificación parcial 2";c2 INPUT "Calificación parcial 3";c3 p=[c1+c2+c3]/3 PRINT "El promedio es:";p Figura 8.27 PRINT NEXT i END Paso 6. Pruebas y depuración: Segunda fase: Prueba: Calificación parcial 1 ? 8 Calificación parcial 2? 9 Calificación parcial 3? 9 El promedio es: 8.66 Calificación parcial 1 ? 7 Calificación parcial 2? 5 Calificación parcial 3? 6 El promedio es: 6 CAPÍTULO 8. CONTROL DE EJECUCIÓN 283 284 PARTE III. PROGRAMACIÓN Figura 8.28 Calificación parcial 1? 9 Calificación parcial 2? 10 Calificación parcial 3? 6 El promedio es: 8.33 Calificación parcial 1? 10 Calificación parcial 2? 9 Calificación parcial 3? 10 El promedio es: 9.66 Calificación parcial 1? 8 Calificación parcial 2? 7 Calificación parcial 3? 8 El promedio es: 7.66 PROBLEMA 2 Una compañía de seguros tiene contratados a n vendedores, cada uno de los cuales hace tres ventas a la semana. Su política de pagos es que un vendedor recibe un sueldo base, más un 10% extra por comisiones de sus ventas. El gerente de la compañía desea saber cuánto dinero obtendrá en la semana cada vendedor por concepto de comisiones por las tres ventas realizadas, y cuánto tomando en cuenta su sueldo base y sus comisiones. Paso 4. Diagrama de flujo (véanse Figs. 8.29 y 8.30). Figura 8.29 Paso 5. Codificación y edición del programa: REM Pago a vendedores en una compañía de seguros INPUT "Número de vendedores";n PRINT FOR i=1 TO n INPUT "Sueldo base";sb INPUT 'Venta 1 ";v1 INPUT 'Venta 2";v2 INPUT 'Venta 3";v3 tv=v1+v2+v3 c=tv*0.1 tr=sb+c CAPÍTULO 8. CONTROL DE EJECUCIÓN 285 286 PARTE III. PROGRAMACIÓN Figura 8.30 PRINT "Comisión:";c PRINT 'Total a recibir:";tr PRINT NEXT i END Paso 6. Pruebas y depuración: Segunda fase: Prueba: Número de vendedores? 3 Sueldo base? 3000 Venta 1? 10000 Venta 2? 20000 Venta 3? 17000 Comisión: 4700 CAPÍTULO 8. CONTROL DE EJECUCIÓN 287 Total a recibir: 7700 Sueldo base? 4000 Venta 17 45000 Venta 2? 32000 Venta 3? 33000 Comisión: 11000 Total a recibir: 15000 Sueldo base? 2500 Venta 1? 15000 Venta 2? 20000 Venta 3? 10000 Comisión: 4500 Total a recibir: 7000 PROBLEMA 3 En una empresa se requiere calcular el salario semanal de cada uno de los n obreros que laboran en ella. El salario se obtiene de la siguiente manera: —Si el obrero trabaja 40 horas o menos se le paga $4 por hora. —Si el obrero trabaja más de 40 horas se le paga $4 por cada una de las primeras 40 horas y $6 por cada hora extra. Paso 4. Diagrama de flujo (véanse Figs. 8.31 y 8.32). Paso 5. Codificación y edición del programa: REM Salario semanal de los obreros de una empresa INPUT "Número de obreros";n PRINT FOR i=1 ton INPUT "Horas trabajadas";ht IF ht > 40 THEN he=ht-40 s=40 * 4+he * 6 ELSE s=ht * 4 END IF PRINT "Salario:";s PRINT NEXT i END Paso 6. Pruebas y depuración: Segunda fase: 288 PARTE III. PROGRAMACIÓN Prueba: Número de obreros? 4 Horas trabajadas? 65 Salario: 310 Horas trabajadas? 40 Salario: 160 Horas trabajadas? 35 Salario: 140 Horas trabajadas? 80 Salario: 400 Figura 8.31 CAPÍTULO 8. CONTROL DE EJECUCIÓN 289 Figura 8.32 PROBLEMA 4 Determinar cuántos hombres y cuántas mujeres se encuentran en un grupo de n personas, suponiendo que los datos son extraídos alumno por alumno. Paso 4. Diagrama de flujo (véanse Figs. 8.33 y 8.34). Paso 5. Codificación y edición del programa: REM Número de hombres y mujeres de un grupo INPUT "Número de personas en el grupo";n PRINT h=0 m=0 290 PARTE III. PROGRAMACIÓN Figura 8.33 F0R i=1 TO n INPUT "Sexo";s$ IF s$ ="MASCULINO" THEN h=h+1 ELSE m=m+1 END IF NEXT i PRINT "Número de hombres:";h PRINT "Número de mujeres:";m END Paso 6. Pruebas y depuración: CAPÍTULO 8. CONTROL DE EJECUCIÓN 291 Figura 8.34 Segunda fase: Prueba: Número de personas en el grupo? 6 Sexo? MASCULINO Sexo? MASCULINO Sexo? FEMENINO Sexo? FEMENINO Sexo? MASCULINO Sexo? MASCULINO Número de hombres: 4 Número de mujeres: 2 PROBLEMA 5 El Departamento de Seguridad Pública y Tránsito del D.F., desea saber: de n autos que entran a la 292 PARTE III. PROGRAMACIÓN ciudad de México cuántos entran con calcomanía de cada color. Conociendo el último dígito de la placa de cada automóvil se puede determinar el color de la calcomanía utilizando la siguiente relación: Dígito Color 1o2 3o4 5o6 7o8 9oO amarilla rosa roja verde azul Paso 4. Diagrama de flujo (véanse Figs. 8.35 y 8.36). Paso 5. Codificación y edición del programa: REM Autos con colores de calcomanías distintas INPUT "Número de autos del muestreo";n PRINT am=O rs=O rj=O ve=O az=O FOR i=1 TO n INPUT "Ultimo dígito de la placa";ud IF ud=1 0R ud=2 THEN am=am+1 ELSE IF ud=3 0R ud=4 THEN rs=rs+1 ELSE IF ud=5 0R ud=6 THEN rj=rj+1 ELSE IF ud=7 0Rud = 8 THEN ve=ve+1 ELSE IF ud=9 0R ud=0 THEN az=az+1 ELSE PRINT "Dígito erróneo" i←i-1 END IF END IF END IF END IF CAPÍTULO 8. CONTROL DE EJECUCIÓN END IF NEXT i PRINT PRINT "Autos con calcomanía amarilla:";am PRINT "Autos con calcomanía rosa:";rs PRINT "Autos con calcomanía roja:";rj PRINT "Autos con calcomanía verde:";ve PRINT "Autos con calcomanía azul:";az END Paso 6. Pruebas y depuración: Figura 8.35 293 294 PARTE III. PROGRAMACIÓN Figura 8.36 CAPÍTULO 8. CONTROL DE EJECUCIÓN Segunda fase: Prueba: Número de autos del muestreo? 10 Último dígito de la placa? 3 Último dígito de la placa? 1 Último dígito de la placa? 4 Último dígito de la placa? 9 Último dígito de la placa? 8 Último dígito de la placa? 4 Último dígito de la placa? 0 Último dígito de la placa? 23 Último dígito erróneo Último dígito de la placa? 2 Último dígito de la placa? 3 Último dígito de la placa? 9 Autos con calcomanía amarilla: 2 Autos con calcomanía rosa: 4 Autos con calcomanía roja: 0 Autos con calcomanía verde: 1 Autos con calcomanía azul: 3 PROBLEMA 6 Obtener el promedio de calificaciones de un grupo de n alumnos. Paso 4. Diagrama de flujo (véanse Figs. 8.37 y 8.38). Paso 5. Codificación y edición del programa: REM Obtener el promedio de calificaciones de un grupo INPUT "Número de alumnos";n PRINT s=O FOR i=1 TO n INPUT "Calificación";c s=s +c NEXT i p= s/ n PRINT PRINT "Promedio del grupo:";p END 295 296 PARTE I I I . PROGRAMACIÓN Figura 8.37 Paso 6. Pruebas y depuración: Prueba: CAPÍTULO 8. CONTROL DE EJECUCIÓN 297 Figura 8.38 Número de alumnos? 5 Calificación? 7 Calificación? 5 Calificación? 8 Calificación? 10 Calificación? 10 Promedio del grupo: 8 PROBLEMA 7 Una persona desea invertir su dinero en un banco, el cual le otorga un 2% de interés mensual sobre la cantidad invertida. ¿Cuál será la cantidad de dinero que tendrá luego de un año si la ganancia de cada mes es reinvertida? Paso 4. Diagrama de flujo (véase Fig. 8.39). Ejercicio: Realizar al menos dos pruebas a este diagrama de flujo para verificar su funcionalidad. Paso 5. Codificación y edición del programa: REM Ganancia anual en un banco con reinversión mensual INPUT "Cantidad inicial";c F0R i=1 T0 12 c=c*1.02 298 PARTE III. PROGRAMACIÓN NEXT i PRINT "Cantidad final";c END Figura 8.39 CAPÍTULO 8. CONTROL DE EJECUCIÓN Paso 6. Pruebas y depuración: Ejercicio: Introduzca el programa a la computadora y efectúe al menos dos pruebas. PROBLEMA 8 Calcular el promedio de edades de hombres, mujeres y de todo un grupo de n alumnos. Paso 4. Diagrama de flujo (véanse Figs. 8.40 y 8.41). Paso 5. Codificación y edición del programa: REM Promedio de edades de un grupo de hombres y mujeres INPUT "Número de alumnos";n PRINT nh=O nm= O seh=O sem= O FOR i=1 TO n INPUT "Edad";e INPUT "Sexo";s$ IF s$="MASCULINO" THEN nh=nh+1 seh=seh+e ELSE nm=nm + 1 sem=sem+e END IF NEXT i peh=seh / nh pem=sem / nm pg= [seh+sem]/n PRINT PRINT "Promedio de edades de hombres:";peh PRINT "Promedio de edades de mujeres:";pem PRINT "Promedio de edades del grupo:";pg END Paso 6. Pruebas y depuración: Segunda fase: Prueba: Número de alumnos? 5 299 300 PARTE III. PROGRAMACIÓN Figura 8.40 CAPÍTULO 8. CONTROL DE EJECUCIÓN Figura 8.41 Edad? Sexo? Edad? Sexo? Edad? Sexo? Edad? Sexo? Edad? Sexo? 18 FEMENINO 17 FEMENINO 20 MASCULINO 19 FEMENINO 24 MASCULINO Promedio de edades de hombres: 22 Promedio de edades de mujeres: 18 301 302 PARTE III. PROGRAMACIÓN Promedio de edades del grupo: 19.6 PROBLEMA 9 Una persona debe realizar un muestreo de 100 personas para determinar el promedio de peso de los niños, jóvenes, adultos y viejos que existen en su zona habitacional. Para ello, conforme va encontrando a las personas, introduce los datos a su computadora, la cual, mediante un programa, las clasifica y despliega los cuatro promedios que la persona requiere. Se determinan las categorías con base en el siguiente cuadro: Categoría Niños Jóvenes Adultos Viejos Edad 0-12 13-29 30-59 60 - adelante Paso 4. Diagrama de flujo (véanse Figs. 8.42 y 8.43). Paso 5. Codificación y edición del programa: REM Promedio de niños, jóvenes, adultos y viejos nn=O nj=O na=O nv=O spn=O spj=O spa=O spv=O FOR i=1 TO 1OO INPUT "Edad";e INPLJT "Peso";p IF e< = 12 THEN nn=nn+1 spn=spn+p ELSE IF e< = 29 THEN nj=nj+1 spj=spj+p ELSE IFe<=59THEN na=na+1 spa=spa+p ELSE nv=nv+1 CAPÍTULO 8. CONTROL DE EJECUCIÓN Figura 8.42 303 304 PARTE III. PROGRAMACIÓN Figura 8.43 CAPÍTULO 8. CONTROL DE EJECUCIÓN spv=spv+p END IF END IF END IF NEXT i ppn=spn/nn ppj=spj/nj ppa=spa/na ppv=spv/nv PRINT PRINT "Promedio de pesos de niños:";ppn PRINT "Promedio de pesos de jóvenes:";ppj PRINT "Promedio de pesos de adultos:";ppa PRINT "Promedio de pesos de viejos:";ppv END Paso 6. Pruebas y depuración: Ejercicio: Introduzca el programa a la computadora y efectúe una prueba. PROBLEMA 10 Encontrar el menor valor de un conjunto de n números dados. Paso 4. Diagrama de flujo (véanse Figs. 8.44 y 8.45). Paso 5. Codificación y edición del programa: REM Encontrar el menor número de n dados INPUT "Cuantos números";n PRINT INPUT "Número",r F 0R i= 2T 0 n INPUT "Número";num IF num<r THEN r=num END IF NEXT i PRINT PRINT "El menor es:";r END Paso 6. Pruebas y depuración: Segunda fase: 305 306 PARTE III. PROGRAMACIÓN Figura 8.44 Prueba: Cuántos números? 5 Número? 4 Número? 17 CAPÍTULO 8. CONTROL DE EJECUCIÓN Figura 8.45 Número? -15 Número? 8 Número? 8 El menor es: -15 PROBLEMA 11 Encontrar el mayor valor de un conjunto de n números dados. Paso 4. Diagrama de flujo (véase Fig. 8.46). Paso 5. Codificación y edición del programa: REM Encontrar el mayor número de n dados INPUT "Cuantos números";i; PRINT 307 308 PARTE III. PROGRAMACIÓN Figura 8.46 CAPÍTULO 8. CONTROL DE EJECUCIÓN 309 INPUT "Número";r FOR i=2 T0 n INPUT "Número";num IF num>r THEN r=num END IF NEXT i PRINT PRINT "El mayor es:";r END Paso 6. Pruebas y depuración: Segunda fase: Prueba: Cuántos números? 5 Número? 4 Número? 17 Número? -15 Número? 8 Número? 8 El mayores: 17 Problemas propuestos Terminar la metodología para la solución de problemas para la sección de problemas propuestos repetitivos simples, con un número determinado de iteraciones del capítulo 4. 310 PARTE I I I . PROGRAMACIÓN RESUMEN Las instrucciones de control de ejecución se clasifican en: a) Control de ejecución condicional Instrucción IF... THEN... ELSE: permite la ejecución de un conjunto de instrucciones dependiendo del resultado de la evaluación de una condición dada. Esta instrucción es necesaria para resolver problemas de tipo selectivo, tanto simples como compuestos. b) Control de ejecución incondicional Instrucción GOTO: brincar incondicionalmente a otra parte del programa marcada con una etiqueta. El uso de la instrucción GOTO no es recomendable a menos de que se use en combinación con la instrucción IF... THEN... ELSE para la codificación de ciclos como un número indeterminado de iteraciones. c) Estructuras repetitivas 1) Combinación de las instrucciones IF...THEN...ELSE y GOTO: esta combinación es usada para codificar ciclos con un número indeterminado de iteraciones. 2) Instrucción FOR...NEXT: esta instrucción es usada para repetir un conjunto de instrucciones un número determinado de veces. Debe usarse para codificar ciclos que tengan un número determinado de iteraciones. CAPITULO 9 FUNCIONES OBJETIVOS 9.1 El alumno definirá qué es una función. 9.2 El alumno definirá los diferentes tipos de funciones. a) Predefinidas — Numéricas — Alfanuméricas b) Definidas por el usuario 9.2 El alumno aplicará los pasos de la metodología para resolver problemas con funciones predefinidas y definidas por el usuario. 311 CAPITULO 9 FUNCIONES La programación estructurada está basada, fundamentalmente, en la descomposición de un problema general, en subproblemas más fáciles de resolver. Uno de los recursos que Quick Basic provee para descomponer un problema en subproblemas son las funciones. Una función es un proceso que puede ser utilizado en un programa como parte de una expresión. Una característica muy importante de las funciones es que después de ser ejecutadas regresan un valor. El formato general de las funciones es: Función (parámetro) donde: Función, Parámetro, es el nombre asignado a la función es el dato sobre el cual se va a aplicar la función. Un ejemplo de función es la de obtener la raíz cuadrada de un número. Quick Basic cuenta con la función SQR, que ayuda a obtenerla. Si escribiéramos un programa que estuviera conformado por las líneas: INPUT "Da un número"; a PRINT SQR a Quick Basic primero aceptaría por teclado un dato que pasaría a ser el valor de la variable a. Después tendría que ejecutar la función SQR utilizando como parámetro la variable a y una vez hecho esto podría desplegar en pantalla el valor obtenido. A diferencia de los procesos que hemos utilizado en los capítulos anteriores, en este ejemplo se puede visualizar cómo es que la función SQR es un proceso que regresa un valor después de ser ejecutado. Existen dos tipos de funciones: a) Predefinidas b) Definidas por el usuario 312 CAPÍTULO 9. FUNCIONES 313 Las primeras son funciones que Quick Basic incluye en su conjunto de instrucciones y las segundas son creadas por el usuario mismo. La forma de utilizarlas es la misma, aunque en el caso de las definidas por el usuario será necesario aprender a crearlas. 9a) FUNCIONES PREDEFINIDAS Las funciones predefinidas que incluye Quick Basic se clasifican en: 1) Numéricas 2) Alfanuméricas 1) Funciones numéricas Son funciones que al ser ejecutadas trabajan con valores numéricos. A continuación describiremos el formato y la función de las funciones numéricas más comunes: Funciones trigonométricas Función: SIN Funcionamiento: obtiene el seno de un ángulo en radianes. Formato: SIN (x) donde: x Valor en radianes al cual se aplicará la función seno. Ejemplo; a = SIN ( 1 ) PRINT "El seno de 1 es "; a despliega: El seno de 1 es 0.017452406 Función: COS Funcionamiento: obtiene el coseno de un ángulo en radianes. Formato: COS(x) donde: 314 PARTE III. PROGRAMACIÓN x Valor en radianes al cual se aplicará la función coseno. Ejemplo; a = COS [1] PRINT "El coseno de 1 es "; a despliega: El coseno de 1 es 0.999847695 Función: TAN Funcionamiento: obtiene la tangente de un ángulo en radianes. Formato: TAN( x) donde: x Valor en radianes al cual se aplicará la función tangente. Ejemplo; a = TAN [1 ] PRINT "La tangente de 1 es "; a despliega: La tangente de 1 es 0.017455064 Función: ARCTAN Funcionamiento: obtiene el arcotangente de un ángulo en radianes. Formato: ARCTAN(x) donde: x Valor en radianes al cual se aplicará la función arcotangente. Ejemplo; a = ARCTAN ( 1 ] PRINT "El arcotangente de 1 es "; a despliega: El arcotangente de 1 es 45 Funciones aritméticas Función: SQR CAPÍTULO 9. FUNCIONES 315 Funcionamiento: obtiene la raíz cuadrada de un número. Formato: SQR(x) donde: x Expresión numérica sobre la cual se aplicará la función raíz cuadrada. Ejemplo: 1) PRINT SOR [25 ] despliega: 5 2) a = SQR[25 ]1 5 PRINT a despliega: 10 Función: ABS Funcionamiento: obtiene el valor absoluto de un número. Formato: ABS(x) donde: x Expresión numérica sobre la cual se aplicará la función de valor absoluto. Ejemplo; 1) INPUT "Da un número"; a INPUT "Da otro número"; b dif = a - b PRINT "La diferencia es "; ABS [ dif ] Prueba: Da un número? 10 Da otro número? 15 La diferencia es 5 Función: FIX Funcionamiento: elimina los dígitos que se encuentran a la derecha del punto decimal de una expresión numérica. Formato: 316 PARTE III. PROGRAMACIÓN FIX ( X ) donde: x Expresión numérica sobre la cual se aplicará la función. Ejemplo; 1) a = FIX [ 99.99 ] PRINT a despliega: 99 2) a = FIX [ -99.99 ] PRINT a despliega: -99 Función: INT Funcionamiento: obtiene el valor entero más cercano. Si la parte decimal es de 0.5 o más aproxima al valor entero inmediato superior y en caso contrario aproxima al valor entero inmediato inferior. Formato: INT (x) donde: x Expresión numérica sobre la cual se aplicará la función. Ejemplo; 1) a = INT [ 99.99 ] PRINT a despliega: 100 2) a = INT[ -99.99 ] • PRINT a despliega: -98 3) a = INT[ 99.49 ] PRINT a despliega: 99 CAPÍTULO 9. FUNCIONES 317 Problemas resueltos PROBLEMA 1 La calificación de matemáticas de un alumno se obtiene sumando los porcentajes correspondientes a tareas y examen, y aproximando este valor al entero inmediato superior si la parte decimal es de 0.5 o más, o al entero inmediato inferior en caso contrario. El promedio de las calificaciones de cuatro tareas equivalen al 15% y el examen equivale al 85%. Obtener la calificación de un alumno. Paso 1. Definición del problema: Igual a la redacción del problema Paso 2. Planeación de la solución: Será necesario obtener el promedio de las cuatro tareas del alumno, aplicando la fórmula: promedio de tareas = (t1 + t2 + t3 + t4 ) / 4 Los porcentajes correspondientes a tareas y examen se obtienen aplicando las fórmulas: porcentaje de tareas = promedio de tareas x 0.15 porcentaje de examen = examen X 0.85 El total de puntos estaría expresado por: total = porcentaje de tareas + porcentaje de examen Finalmente se deberá aproximar la calificación al entero inmediato superior o inferior; para esto utilizaremos la función INT, por lo que la fórmula quedaría: calificación = INT (total) SALIDAS: calificación ENTRADAS: calificación de cada tarea y de examen DATOS ADICIONALES: A partir de 0.5 la calificación sube al entero inmediato superior y en caso contrario baja al entero inmediato inferior. Paso 3. Algoritmo: 1. 2. 3. 4. 5. 6. 7. PEDIR t1, t2, t3, t4, ex promt ← (t1 + t2 + t3 + t4 ) / 4 pt ←promt * 0.15 pex ← ex * 0.85 tot ← pt + pex cal ← INT (tot) DESPLEGAR cal 318 PARTE III. PROGRAMACIÓN Figura 9.1 Paso 4. Diagrama de flujo (véase Fig. 9.1). Paso 5. Codificación y edición del programa: REM Promedio de matemáticas INPUT "Calificación de la tarea 1"; t1 INPUT "Calificación de la tarea 2"; t2 INPUT "Calificación de la tarea 3"; t3 CAPÍTULO 9. FUNCIONES 319 INPUT "Calificación de la tarea 4"; t4 INPUT "Calificación del examen"; ex promt = [ t1 + t2 + t3 + t4 ] / 4 pt = promt * 0.15 pex = ex * 0.85 tot = pt + pex cal = INT (tot ] PRINT "La calificación es:";cal END Paso 6. Pruebas y depuración: Calificación de la tarea 1? 8 Calificación de la tarea 2? 9 Calificación de la tarea 3? 7 Calificación de la tarea 4? 9 Calificación del examen? 8.5 La calificación es: 8 PROBLEMA 2 Dado un número determinar si es primo o no. Paso 1. Definición del problema: Igual a la redacción del problema Paso 2. Planeación de la solución: Sabemos que un número n es primo si sólo es divisible entre sí mismo y la unidad, es decir, si la división es exacta solamente cuando se divide entre uno y n. Por lo tanto un número no es primo cuando es divisible entre cualquier número que esté entre 2 y el número anterior a n. Así, sólo basta con averiguar esto último para decir que el número no es primo, y en caso contrario será un número primo. Por lo tanto se empleará un ciclo con un número determinado de iteraciones que empezará en la iteración 2 y terminará en la n-1, empleando el valor del contador para determinar si el número es divisible entre éste. En caso de que el número sea divisible entre cualquier valor de este rango ya no tendrá caso seguir con el ciclo y se forzará a que el contador tome el último valor del rango para que la condición de fin de ciclo sea verdadera. Para saber si un número a es divisible entre otro b basta con saber si existe residuo en la división entre ambos. Esto se logra de la siguiente manera con la función FIX: residuo = a / b - FIX(a / b) Si el residuo es cero entonces a es divisible entre b. SALIDAS: Letrero que indique si el número es primo o no 320 PARTE III. PROGRAMACIÓN ENTRADAS: n DATOS ADICIONALES: Un número es primo cuando únicamente es divisible entre sí mismo y 1. Paso 3. Algoritmo: De ahora en adelante llamaremos: n a número a determinar si es primo o no i a contador de iteraciones primo$ a bandera que indica si el número es primo o no res a residuo 1. 2. 3. 4. PEDIR n primo$ ← "SI" i←2 SI i > n-1 ENTONCES IR al paso 5 DE OTRA FORMA DIVISIBLE i←i + 1 IR al paso 4 5. SI primo$ = "SI" ENTONCES DESPLEGAR "Sí es primo" DE OTRA FORMA DESPLEGAR "No es primo" Proceso DIVISIBLE: 1. 2. res ←n / i - FIX(n / i) SI res = 0 ENTONCES primo$ ← "NO" i←n - 1 Paso 4. Diagrama de flujo (véanse Figs. 9.2 y 9.3). Paso 5. Codificación y edición del programa: REM Programa que determina si un número es primo o no INPUT "Da un número mayor que cero"; n primo$="SI" F0R i = 2 T0 n-1 res = n / i - FIX(n / i) IF res = O THEN primo$ = "NO" i = n -- 1 END IF CAPÍTULO 9. FUNCIONES Figura 9.2 NEXT i IF primo$ = "SI" THEN PRINT "Sí es primo" 321 322 PARTE 111. PROGRAMACIÓN Figura 9.3 ELSE PRINT "No es primo" END IF END NOTA: Observe que los números 1 y 2, que son primos, se imprime que lo son pues no entran al ciclo, y el valor de la bandera indica que son primos. Problemas propuestos 1) 2) 3) 4) Pedir n números con decimales e imprimir cada uno de ellos eliminando la parte decimal. Pedir n números, convertir cada uno a positivo e imprimir su raíz cuadrada, Dados dos números, obtener el cociente y el residuo de dividir el primero entre el segundo. Determinar si un número es múltiplo de otro. Se sabe que un número es múltiplo de otro cuando la división del segundo entre el primero es exacta. 5) Dado un número, determinar todos sus múltiplos empezando por 2. 6) Dado un ángulo en radiantes, obtener su cosecante, si se sabe que la cosecante de un ángulo es el inverso del seno, es decir: cosecante(x) = 1/ seno(x) CAPÍTULO 9. FUNCIONES 323 2) FUNCIONES ALFANUMÉRICAS Son funciones que al ser ejecutadas trabajan con valores alfanuméricos. A continuación describiremos las funciones alfanuméricas más comunes en términos de su formato y funcionamiento. Función: LEFT$ Funcionamiento: obtiene determinado número de caracteres empezando por el extremo izquierdo. Formato: LEFT$ ( expresión alfanumérica, cantidad ) donde: expresión alfanumérica Es la expresión sobre la cual se aplicará la función. cantidad Es una expresión numérica que indica el número de caracteres que se desean obtener del lado izquierdo de la expresión alfanumérica. Ejemplos; 1) a$ = "María Morales" PRINT LEFT$( a$.5 ) despliega: María 2) a$ = "María Morales" PRINT LEFT$[ a$,7 ] despliega: María M Nótese que al contar los siete caracteres que se encuentran del lado izquierdo, el espacio queda incluido entre ellos debido a que el espacio también es un carácter. Función: RIGHT$ Funcionamiento: obtiene determinado número de caracteres empezando por el extremo derecho. Formato: RIGHT$ ( expresión alfanumérica, cantidad ) donde: expresión alfanumérica Es la expresión sobre la cual se aplicará la función. cantidad Es una expresión numérica que indica el número de caracteres que se desean obtener del lado derecho de la expresión alfanumérica. 324 PARTE III. PROGRAMACIÓN Ejemplos; 1) a$ = "María Morales" PRINT RIGHT$(a$,5 ) despliega: rales 2) a$ = "María Morales" PRINT RIGHT$( a$,9 ) despliega: a Morales Nótese que esta función obtiene los caracteres a partir del extremo derecho, pero conserva el orden original. Función: MID$ Funcionamiento: obtiene determinado número de caracteres empezando en determinada posición. Formato: MID$ ( expresión alfanumérica, posición inicial, cantidad ) donde: expresión alfanumérica: Es la expresión sobre la cual se aplicará la función. posición inicial Es la posición donde se encuentra el primer carácter a obtener. cantidad Es una expresión numérica que indica el número de caracteres a obtener a partir de la posición inicial. Ejemplos; 1) a$ = "María Morales" PRINT MID$( a$,2,3 ) despliega: arí Nótese que a partir de la posición 2 del string, que es la letra a de María, se tomaron 3 caracteres que son la propia a, la r y la í. Función: LEN Funcionamiento: obtiene el número de caracteres que posee un dato alfanumérico. Formato: CAPÍTULO 9. FUNCIONES 325 LEN ( expresión alfanumérica ) donde: expresión alfanumérica Es la expresión sobre la cual se aplicará la función. Ejemplos: 1) a$ = "María Morales" PRINT LEN( a$ ) despliega: 13 Función: SPACE$ Funcionamiento: obtiene una cantidad determinada de espacios. Formato: SPACE$ ( expresión numérica ) donde: expresión numérica Cantidad de espacios que se desean obtener. Ejemplos; 1) PRINT "hola"; SPACE$(5); "Buenos"; SPACE$(5); "díasdespliega: hola buenos días Concatenación de expresiones alfanuméricas La operación de concatenar dos o más expresiones alfanuméricas consiste en unirlas por medio del operador +. Cuando en una expresión el operador utilizado es el operador + y los operandos son de tipo alfanumérico, la operación que Quick Basic realiza es la de concatenación, y si los operandos son de tipo numérico, se lleva a cabo la operación suma. Los espacios en blanco se representan poniendo entre comillas cuantos espacios en blanco se deseen. Por ejemplo, la expresión " "'es un espacio en blanco. También se le conoce como carácter nulo al hecho de abrir y cerrar comillas sin poner nada entre ellas, de la siguiente manera " ". Ejemplos; 1) a$ = "Buenos días" INPUT "Cuál es tu nombre?"; nom$ PRINT a$ + nom$ prueba: Cuál es tu nombre? María 326 PARTE III. PROGRAMACIÓN Buenos díasMaría Nótese cómo el operador + une los dos datos alfanuméricos y de hecho quedan juntos; si se deseara que quedaran separados tendría que interponerse un espacio entre ellos. 2) a$ = "Buenos días" b$ = "" INPUT "Cuál es tu nombre? "; nom$ PRINT a$ + b$ + nom$ o bien 2) a$ = "Buenos días " INPUT "Cuál es tu nombre?"; nom$ PRINT a$ + nom$ prueba: Cuál es tu nombre? María Buenos días María Un programa equivalente al anterior sería hacer uso de la función SPACE$ y quedaría así: 3) a$ = "Buenos días" b$ = SPACE$(1) INPUT "Cuál es tu nombre?"; nom$ PRINT a$ + b$ + nom$ prueba: Cuál es tu nombre? María Buenos días María Problemas resueltos PROBLEMA 1 Dada una frase obtener el número de palabras que contiene. Paso J. Definición del problema: Igual a la redacción del problema Paso 2. Planeación de la solución: Sabemos que para encontrar el número de palabras que contiene una frase, podemos contar el número de espacios que contiene y sumarle uno. Para contar el número de espacios que contiene la frase necesitaremos utilizar un ciclo con determinado número de iteraciones que contendrá un proceso que se repetirá una vez por cada carácter que contenga la frase y dejará de repetirse cuando se llegue al último carácter. CAPÍTULO 9. FUNCIONES 327 Para saber el límite del ciclo haremos uso de la función LEN, la que nos regresará el número de caracteres que tiene la frase. Así el ciclo quedaría: 1. 2. 3. 4. 5. PEDIR frase contador de espacios = 0 contador de letras = 1 Obtener longitud de la frase SI contador de letras > longitud ENTONCES IR al paso 6 DE OTRA FORMA ANALIZA contador de letras = contador de letras + 1 IR al paso 5 6. número de palabras = contador de espacios + 1 7. DESPLEGAR número de palabras El proceso que está dentro del ciclo estará compuesto de las siguientes acciones: ANALIZA: 1. Tomar un carácter 2. SI carácter tomado = espacio ENTONCES incrementar contador de espacios en uno Los datos del problema son: SALIDAS: Número de palabras que tiene una frase ENTRADAS: frase DATOS ADICIONALES: Ninguno Paso 3. Algoritmo: De ahora en adelante llamaremos: f$ ce cl 1 c$ np A a a a a frase contador de espacios contador de letras longitud de la frase a un carácter de la a número de palabras a proceso ANALIZA 1. PEDIR f$ 2. c ←0 3. cl ← 1 4. I ←L E N ( f $ ) 328 5. 6. 7. PARTE III. PROGRAMACIÓN SI cl > 1 ENTONCES IR al paso 6 DE OTRA FORMA A cl ← cl + 1 IR al paso 5 np ← ce + 1 DESPLEGAR "la frase tiene", np, " palabras" A: 1. c$ ←MID$( f$, cl, 1) 2. SI c$ = SPACE$(1) ENTONCES ce ← ce + 1 3. FINP Paso 4. Diagrama de flujo (véase Fig. 9.4). Paso 5. Codificación y edición del programa: REM Programa que obtiene el número de palabras de una frase INPUT "Da la frase";f$ ce=O I = LEN( f$ ) FOR cl=1 TO I c$= MID$ (f$, cl, 1 ) IF c$=SPACE$[1] THEN ce=ce + 1 END IF NEXT cl np= ce +1 PRINT "La frase tiene"; np; "palabras" END Paso 6. Pruebas y depuración del programa: Se llevará a cabo la primera fase de pruebas: f$ ←Buenos días México ce ←0 1←18 cl← 1 Ejecuta proceso A por primera vez. c$←B cl←2 Ejecuta proceso A por segunda vez. CAPÍTULO 9. FUNCIONES Figura 9.4 329 330 PARTE III. PROGRAMACIÓN c$←u cl←3 Ejecuta proceso A por tercera vez. c$←e cl←4 Ejecuta proceso A por cuarta vez. c$←n cl←5 Ejecuta proceso A por quinta vez. C$ ←0 cl ←6 Ejecuta proceso A por sexta vez. c$←s cl ←7 Ejecuta proceso A por séptima vez. c$← ce ← 1 cl←8 Ejecuta proceso A por octava vez. c$←d cl←9 Ejecuta proceso A por novena vez. c$←í c$ ←10 Ejecuta proceso A por décima vez. c$←a cl← 11 Ejecuta proceso A por undécima vez. c$ ←s Cl←12 Ejecuta proceso A por duodécima vez. c$← ce ← 2 cl← 13 Ejecuta proceso A por decimotercera vez. CAPÍTULO 9. FUNCIONES 331 c $← M cl← 14 Ejecuta proceso A por decimocuarta yez. c$←é cl ←15 Ejecuta proceso A por decimoquinta vez. c$←x cl ←16 Ejecuta proceso A por decimosexta vez. c$←i cl← 17 Ejecuta proceso A por decimoséptima vez. c$←c cl ←18 Ejecuta proceso A por decimoctava vez. c$ ← o cl← 19 Debido a que el valor de el es mayor que el de 1, se sale del ciclo. np ←3 Despliega: La frase tiene 3 palabras En la segunda fase de pruebas se observará en la pantalla lo siguiente: Da la frase? Buenos días México La frase tiene 3 palabras Ejercicio: Introducir el programa en la computadora y realizar la segunda fase de pruebas con al menos tres frases. PROBLEMA 2 Obtener el Registro Federal de Causantes (RFC) de una persona. Se sabe que éste se obtiene incluyendo la inicial del primer apellido, la primera vocal a partir de la segunda letra del primer apellido, la inicial del segundo apellido y la inicial del primer nombre. Además se le agrega la fecha de nacimiento en el formato año-mes-día utilizando dos dígitos para cada uno. Paso 1. Definición del problema: Igual a la redacción del problema 332 PARTE III. PROGRAMACIÓN Paso 2. Planeación de la solución: Una vez pedidos como entrada los datos de: nombre, primer apellido, segundo apellido y fecha de nacimiento, procederemos a obtener el RFC. Para obtener las iniciales de nombre y apellidos, se podrá utilizar cualquiera de las dos funciones siguientes: inicial$ = MID$ [expresión alfanumérica,1,1] o inicial$ = LEFT$ [expresión alfanumérica.1] Donde la expresión alfanumérica podrá ser nombre, primero o segundo apellido. Posteriormente se procederá a buscar la primera vocal del primer apellido, para lo que tendremos que utilizar un ciclo con un número determinado de iteraciones, en donde un proceso se repetirá a partir de la segunda letra tantas veces como letras tenga el apellido, o hasta que se encuentre alguna vocal. El proceso estará formado por las siguientes acciones: 1. 2. Tomar una letra SI letra tomada="a" o letra tomada = "A" o letra tomada="e" o letra tomada = "E" o letra tomada="i" o letra tomada = "I" o letra tomada="o" o letra tomada = "O" o letra tomada= "u" o letra tomada = "U" ENTONCES primera vocal del primer apellido < - letra tomada contador de letras < - número de letras Finalmente para obtener el RFC se concatenarán los datos obtenidos. SALIDAS: RFC ENTRADAS: nombre, primer apellido, segundo apellido, fecha de nacimiento DATOS ADICIONALES: El RFC se obtiene poniendo la inicial del primer apellido, seguido de la primera vocal a partir de la segunda letra del primer apellido, seguido de la inicial del segundo apellido, de la inicial del primer nombre y de la fecha de nacimiento en el formato año-mes-día. Paso 3. Algoritmo: De ahora en adelante llamaremos: nom$ pa$ sa$ fn$ inom$ ipa$ isa$ cl a nombre de la persona a primer apellido a segundo apellido a fecha de nacimiento a inicial del nombre a inicial del primer apellido a inicial del segundo apellido a contador de letras CAPÍTULO 9. FUNCIONES c$ 1 vpa$ rfc$ P 333 a carácter tomado a longitud del primer apellido a primera vocal del primer apellido a registro federal de causantes a proceso de buscar la vocal 1. 2. 3. 4. 5. 6. 7. PEDIR nom$,pa$,sa$,fn$ inom$←LEFT$(nom$,l) ¡pa$ ←LEFT$(pa$, 1) isa$ ← LEFT$(sa$, 1) 1 ← LEN(pa$) cl ← 2 SI cl>l ENTONCES IR al paso 8 DE OTRA FORMA P cl ←cl + 1 IR al paso 7 8. rfc$ ←ipa$ + vpa$ + isa$ + inom$ + fn$ 9. DESPLEGAR rfc$ P: 1. c$←MID$(pa$,cl,l) 2. SI c$="a" OR c$="A" OR c$="e" OR c$="E" OR c$="i" OR c$="I" OR c$="o" OR c$ = "O" OR c$ = "u" OR c$="U" ENTONCES vpa$ ← c$ cl←l 3. FINP Paso 4. Diagrama de flujo (véanse Figs. 9.5 y 9.6). Paso 5. Codificación y edición del programa: REM Registro Federal de Causantes INPUT "Da tu nombre"; nom$ INPUT "Da tu primer apellido"; pa$ INPUT "Da tu segundo apellido"; sa$ INPUT "Da tu fecha de nacimiento en el formato [AAMMDD]"; fn$ inom$ = LEFT$[nom$.1] ipa$ = LEFT$[pa$,1] isa$ = LEFT$[sa$,1] I = LEN[pa$] F0Rcl=2 T0 l c$ = MID$[pa$.cl,1] IF c$="a" OR c$="A" OR c$="e" OR c$="E" OR c$="i" OR 334 PARTE III. PROGRAMACIÓN Figura 9.5 CAPÍTULO 9. FUNCIONES Figura 9.6 c$="l" OR c$="o" OR c$="O" OR c$="u" OR c$="U" THEN vpa$= c$ cl = I END IF NEXT cl rfc$ =ipa$ + vpa$ + isa$ + inom$ + fn$ PRINT “Tu registro federal de causantes es"; rfc$ END Ejercicio: Efectuar el paso de pruebas del programa incluyendo las dos fases. 335 336 PARTE III. PROGRAMACIÓN PROBLEMA 3 Pedir el nombre completo de una persona en una misma variable y obtener sus iniciales. Paso 1. Definición del problema: Igual a la redacción del problema Paso 2. Planeación de la solución: Obtener la inicial del nombre es sencillo, pues.es el primer carácter del nombre completo. Para obtener las demás iniciales tendremos que emplear un ciclo con un número determinado de iteraciones desde el segundo hasta el penúltimo carácter del nombre completo. Por cada espacio que encontremos significará que el carácter siguiente es una inicial, por lo que lo concatenaremos a una variable que irá acumulando las iniciales. SALIDAS: iniciales ENTRADAS: nombre completo Paso 3. Algoritmo: De ahora en adelante llamaremos: nc$ in$ 1 c 1. 2. 3. 4. 5. 6. P: 1. 2. a a a a nombrecompleto iniciales longitud del nombre completo contador PEDIR nc$ 1 ←LEN(nc$) in$←LEFTS(nc$,l) c←2 SI c> l-1 ENTONCES IR al paso 6 DE OTRA FORMA P c←c+1 IR al paso 5 DESPLEGAR in$ c$ ←MID$(nc$,c, 1) SI c$ = SPACE$( 1) ENTONCES in$=in$ + MID$(nc$,c+l,l) Paso 4. Diagrama de flujo [véanse Figs. 9.7 y 9.8). Paso 5. Codificación y edición del programa: REM Obtener las iniciales de un nombre completo CAPÍTULO 9. FUNCIONES Figura 9.7 337 338 PARTE III. PROGRAMACIÓN in$ ←in$ + MID$(nc$,c+ 1 , 1 ) Figura 9.8 INPUT "Nombre completo"; nc$ I = LEN[nc$] in$ = LEFT$[nc$, 1] FOR c=2 TO l-1 c$= MID$[nc$,c,1] IFc$=SPACE$[1] THEN in$=in$ + MID$[nc$,c+1,1] END IF NEXT c PRINT "Las iniciales son:"; in$ END Ejercicio: Efectuar el paso de pruebas del programa incluyendo las dos fases. Podemos encontrar otra solución más a este problema, para lo cual únicamente desarrollaremos los pasos 2 y 5 de la metodología. Paso 2. Planeación de la solución: Bajo la misma idea de que encontrando un espacio el siguiente carácter es una inicial, podemos agregar antes del ciclo un espacio al nombre completo y de esta manera detectar la primera inicial dentro del ciclo, para lo cual la variable que concatena las iniciales debe comenzar esta vez con el carácter nulo. CAPÍTULO 9. FUNCIONES 339 Paso 5. Codificación y edición del programa: REM Obtener las iniciales de un nombre completo INPUT "Nombre completo"; nc$ nc$ = SPACE$[1] + nc$ I = LEN[nc$] in$ = " " FOR c=1 TO l-1 c$=MID$[nc$,c,1] IF c$=SPACE$[1] THEN in$=in$ + MID$[nc$,c + 1,1] END IF NEXT c PRINT "Las iniciales son:"; in$ END Ejercicio: Efectuar el paso de prueba del programa incluyendo las dos fases. Problemas propuestos 1. 2. 3. 4. 5. 6. 7. 8. Dada una frase contar el número de veces que se repite algún carácter. Dada una frase escribirla al revés. Dada una frase obtener cuántas vocales y cuántas consonantes tiene. Dado un texto escribirlo en escalera de la siguiente manera: t te tex text texto Dado un texto sustituir todas las letras a por *. Dado el nombre completo de una persona, obtener su primer apellido. Por ejemplo, si el nombre es Juan Rodríguez Gómez, deberá obtener la palabra Rodríguez. Decir si una palabra dada es un palíndromo o no. Dada una frase convertirla a tipo telegrama eliminando las siguientes palabras: y, de, el, la, lo, los, las, un, una, unos, unas, te, le, que. Por ejemplo, si la frase es: Te envío lo siguiente para que lo revises. Debe imprimir: envío siguiente para revises 9b) FUNCIONES DEFINIDAS POR EL USUARIO Este tipo de funciones se clasifican en: 1) Funciones de una sola línea 2) Funciones multilíneas 340 PARTE III. PROGRAMACIÓN 1) Funciones de una sola línea Son funciones que el usuario-programador-define y están conformadas por una línea de instrucciones. El formato para crear este tipo de funciones es el siguiente: DEF FNnombre [(lista de parámetros)] = expresión donde: nombre Es el nombre que el programador asigna a la función. Para asignar este nombre deberán seguirse las reglas usadas para dar nombres a las variables. lista de parámetros Es una lista de variables separadas por comas a las que se les asignará un valor cuando se llame a la función. expresión Es el valor que regresará la función. Una función se puede definir en cualquier parte del programa. Ejemplo: INPUT "Da tu nombre"; a$ INPUT "Da tu apellido paterno"; b$ INPUT "Da tu apellido materno"; c$ PRINT FNinicial$Ca$,b$,c$) DEF FNinicial$(a$,b$,c$) = LEFT$(a$, 1) + SPACE$(1) + LEFT$(b$, 1] + SPACE$(1) + LEFT$(c$, 1) Prueba: Da tu nombre? Roberto Da tu apellido paterno? Pérez Da tu apellido materno? Salazar RPS 2) Funciones multilínca Son funciones que el usuario define y están conformadas por más de una línea. El formato para crearlas es el siguiente: DEF FNnombre [(lista de parámetros)] : :instrucciones : [EXIT DEF] [FNnombre = expresión] END DEF CAPÍTULO 9. FUNCIONES donde: nombre lista de parámetros 341 Es el nombre que el usuario asigna a la función. Para asignar este nombre deberán seguirse las reglas usadas para dar nombre a las variables. Es una lista de variables separadas por comas, a las que se les asignará un valor cuando se llame a la función. EXIT DEF Se utiliza cuando se necesita regresar a la línea que se encuentra después de donde se hizo la llamada, antes de que la función termine. END DEF Es el fin de la función multilínea. Problemas resueltos PROBLEMA 1 Escribir una función que devuelva el factorial de un número. El factorial de un número se define como el producto de todos los enteros menores que él, empezando por 1 e incluyéndolo a él mismo. Por ejemplo, el factorial de 4 es: 4X3X2X1=24 Paso 1. Definición del problema: Igual a la redacción del problema Paso 2. Planeación de la solución: La función FACT se definirá como un procedimiento con la diferencia de que la última instrucción será FIN FACT. Necesitaremos hacer uso de un ciclo con un número determinado de iteraciones en donde cada iteración consistirá de multiplicar el contador de iteraciones por el último producto obtenido. El proceso principal, que es donde se mandará llamar a la función FACT, quedará de la siguiente manera: 1. PEDIR número 2. DESPLEGAR FACT (número) 3. FIN La función FACT quedará de la siguiente manera: FACT: 1. factorial ← 1 2. contador ← 1 3. SI contador > número ENTONCES IR al paso 4 DE OTRA FORMA M 342 PARTE III. PROGRAMACIÓN contador ← contador + 1 IR al paso 3 4. FIN FACT M: 1. factorial ← factorial X contador 2. FINP SALIDAS: Factorial de un número ENTRADAS: Número Paso 3. Algoritmo: De ahora en adelante llamaremos: f a factorial a contador c n M FACT a número a proceso que se repite como parte de a función que obtiene el factorial 1. PEDIR n 2. 3. DESPLEGAR FACT(n) FIN FACT: 1. f← 1 2. c←1 3. SIc> n ENTONCES IR al paso 4 DE OTRA FORMA M c ←1 c + 1 IR al paso 3 4. FIN FACT M: 1. 2. f←f* c FINP Paso 4. Diagrama de flujo (véanse Figs. 9.9 y 9.10). Paso 5. Codifícación y edición del programa: REM Factorial de un número INPUT "Da un número"; n CAPÍTULO 9. FUNCIONES 343 Figura 9.9 PRINT "El factorial del número es"; FNfact[n] END DEF FNfact[n] f=1 FOR c=1 TO n f= f * c NEXTc FNfact = f END DEF Ejercicio: Efectuar el paso de pruebas del programa incluyendo las dos fases. Problemas propuestos 1. Escribir una función que obtenga el resultado de elevar un número a cualquier potencia, sin hacer uso del operador A. 2. Escribir una función que obtenga la hipotenusa de un triángulo rectángulo para cualesquiera dimensiones. 3. Escribir una función que regrese el resultado de sumar los primeros n números naturales. 4. Escribir una función que obtenga el número de vocales que contiene una frase. 344 PARTE III. PROGRAMACIÓN Figura 9.10 CAPÍTULO 9. FUNCIONES 345 RESUMEN Función: una función es un proceso que puede ser utilizado en un programa como parte de una expresión. Una característica importante de las funciones es que después de ser ejecutadas regresan un valor. Se clasifican en: a) Funciones predefinidas: son funciones que Quick Basic incluye en su conjunto de instrucciones y a su vez se clasifican en: 1) Funciones numéricas: son funciones que al ser ejecutadas trabajan con valores numéricos. Funciones trigonométricas Función SIN: obtiene el seno de un ángulo en radianes. Función COS: obtiene el coseno de un ángulo en radianes. Función TAN: obtiene la tangente de un ángulo en radianes. Función ARCTAN: obtiene el arcotangente de un ángulo en radianes. Funciones aritméticas Función SQR: obtiene la raíz cuadrada de un número. Función ABS: obtiene el valor absoluto de un número. Función FIX: elimina los dígitos que se encuentran a la derecha del punto decimal de una expresión numérica. Función INT: obtiene el valor entero más cercano. 2) Funciones alfanuméricas: son funciones que al ser ejecutadas trabajan con valores alfanuméricos. Función LEFT$: obtiene determinado número de caracteres empezando por el extremo izquierdo. Función RIGHT$: obtiene determinado número de caracteres empezando por el extremo derecho. Función MID$: obtiene determinado número de caracteres empezando en determinada posición. Función LEN: obtiene el número de caracteres que tiene un dato alfanumérico. Función SPACE$: obtiene una cantidad determinada de espacios. b) Funciones definidas por el usuario: son funciones creadas por el programador mismo mediante la instrucción DEF FN y se clasifican en: 1) Funciones de una sola línea 2) Funciones multilíneas CAPÍTULO 10 PROCESOS MODULARES OBJETIVOS 10.1 El alumno definirá qué es un proceso modular o módulo. 10.2 El alumno identificará los diferentes tipos de los procesos modulares, así como sus características particulares: a) Funciones b) Subrutinas c) Procedimientos d) Subprogramas é) Programas 10.3 El alumno aplicará los procesos modulares para la solución de problemas repetitivos compuestos. 346 CAPÍTULO 10 PROCESOS MODULARES Se le llama módulo a una sección separada del cuerpo principal de un proceso pero que es ejecutada desde algún punto de éste. Un módulo tiene un nombre y misión específica. Por ejemplo, el siguiente algoritmo procesa un número indeterminado de clientes para producir un total. 1 2. 3. 4. t=0 CLIENTE PEDIR mas$ SI mas$ = "NO" ENTONCES IR al paso 5 DE OTRA FORMA IR al paso 2 5. DESPLEGAR t El proceso CLIENTE es un módulo, pues es mandado ejecutar por un proceso principal; tiene un nombre y una misión específica, que es procesar a un solo cliente. El concepto de módulo nace de la idea de que un problema sea separado en problemas más pequeños para facilitar su solución. Por ejemplo, considere el siguiente problema: Una persona desea vender un terreno rectangular de gran valor, para lo cual deberá revisar sus escrituras y saber cuántos metros cuadrados va a vender; además piensa realizar un sondeo con cinco vecinos suyos para obtener un promedio del precio del metro cuadrado en su zona. Finalmente someterá a subasta su terreno con un precio inicial de $500 más sobre el 90% del valor del terreno calculado por él y dando incrementos de $500 en cada nueva oferta hasta que sea vendido. Si nadie acepta la oferta inicial se rematará en el 90% de su valor. Obtener el precio final por concepto de la venta del terreno. 347 348 PARTE I I I . PROGRAMACIÓN Paso 1. Definición del problema: Dada en la redacción del problema. Paso 2. Planeación de la solución: El problema se divide en tres partes, a saber: 1) Investigar las medidas del terreno para conocer su superficie. 2) Tomar cinco muestras del precio del metro cuadrado para calcular promedio del precio del metro cuadrado. 3) Realizar la subasta para desplegar el precio final Podemos resumir estos pasos de la siguiente manera: 1) SUPERFICIE-TERRENO 2) PRECIO-METRO2 3) SUBASTA Cada uno debe contener los siguientes pasos: Proceso modular SUPERFICIE-TERRENO: 1) PEDIR largo 2) PEDIR ancho 3) superficie = largo * ancho Proceso modular PRECIO-METRO2: 1) 2) 3) 4) 5) 6) PEDIR precio 1 PEDIR precio2 PEDIR precio3 PEDIR precio4 PEDIR precio5 precio = (precio 1 + precio2 + precio3 + precio4 + precio5) / 5 Proceso modular SUBASTA: 1) 2) 3) 4) 5) precio-total = superficie * precio precio-final = precio-total * 0.9 precio-final = precio-final + 500 PEDIR mas$ SI mas$ = "NO" ENTONCES IR al paso 6 DE OTRA FORMA IR al paso 3 6) precio-final = precio-final - 500 7) DESPLEGAR precio-final CAPÍTULO 10. PROCESOS MODULARES 349 Lo que se hizo en este paso 2 de la metodología fue partir el problema en sus tres partes principales y se les dio un nombre a cada una. A continuación se atacó cada una de las partes llegando a una solución para lo que de cada una de ellas se necesitaba, haciendo de esta manera más sencilla la solución integral del problema. A esta técnica de solucionar un problema dividiéndolo en sus partes principales se le llama modularización, llamándosele a cada parte, proceso modular o módulo. Ejercicio: Se deja al alumno terminar los pasos de la metodología para este ejemplo. Existen varios conceptos relacionados con modularización: 1) 2) 3) 4) 5) Función Subrutina Procedimiento Subprograma Programa A continuación los definimos. 1) Función Es una instrucción que recibe uno o varios valores llamados parámetros y dependiendo de éstos se produce un resultado. Una función puede estar en el vocabulario Quick Basic o puede ser definida por el programador mediante la instrucción DEF FN. Ejemplos: Funciones numéricas: INT, SIN, COS. Funciones alfanuméricas: LEN, LEFT$, RIGHT$ 2) Subrutina Es una parte del programa que no pertenece al cuerpo del programa principal pero que es mandado ejecutar desde éste mediante la instrucción GOSUB. La subrutina debe tener un nombre o etiqueta al principio de ella, seguida de dos puntos (:) y terminar con la instrucción RETURN. Cuando desde el programa principal se manda ejecutar la subrutina con GOSUB se transfiere el control del programa a la instrucción siguiente a la etiqueta, hasta que se encuentre la instrucción RETURN, con lo cual se devuelve el control al cuerpo principal del programa en la instrucción siguiente al GOSUB. Se recomienda indentar las instrucciones de la subrutina con respecto a la etiqueta y al RETURN. Con respecto al algoritmo y diagrama de flujo, una subrutina equivale a un proceso en donde su último bloque o instrucción, que es FINP, equivale en Quick Basic a la instrucción RETURN. 350 PARTE 111. PROGRAMACIÓN Ejemplo: REM Ejemplo de subrutina CLS PRINT "Todavía no se ejecuta la subrutina" PRINT GOSUB MODULO PRINT PRINT 'Ya terminó de ejecutarse la subrutina" END MODULO: PRINT "Este mensaje es parte de la subrutina" RETURN Ejecución: Todavía no se ejecuta la subrutina Este mensaje es parte de la subrutina Ya terminó de ejecutarse la subrutina 3) Procedimiento Es una combinación de subrutina y función, pues es un conjunto de instrucciones fuera del cuerpo del programa principal que es mandado ejecutar desde éste, como subrutina, pero también puede recibir parámetros como las funciones. Los procedimientos deben comenzar con la línea: SUB nombre-del-procedimiento ( parámetros ) y deben terminar con: END SUB Desde el cuerpo principal del programa se manda ejecutar un procedimiento mediante la instrucción: CALL nombre-del-procedimiento ( parámetros ) 4) Subprogramas Son programas que son mandados a ejecutar por otros programas mediante la instrucción CHAIN. CAPÍTULO 10. PROCESOS MODULARES 351 5) Programas Es un conjunto de instrucciones bajo un mismo nombre de archivo. Un programa complejo puede estar modularizado y comprender funciones, subrutinas, procedimientos e inclusive subprogramas. Los programas en Quick Basic terminan con la instrucción .BAS. A continuación se terminará con la metodología para los problemas repetitivos compuestos del capítulo 4, utilizando el concepto de subrutinas. Problemas resueltos PROBLEMA 1 En un supermercado un cajero captura los precios de los artículos que los clientes compran e indica a cada cliente cuál es el monto de lo que deben pagar. Al final del día le indica a su supervisor cuánto fue lo que cobró en total a todos los clientes que pasaron por su caja. Paso 4. Diagrama de flujo (véanse Figs. 10.1 y 10.2). Paso 5. Codificación y edición del programa: REM Cajero en un supermercado tcaj=O X: GOSUB C tcaj=tcaj + tcl INPUT "Más clientes (SI/N0)";mas$ IFmas$="NO"THEN GOTO Y ELSE GOTO X END IF Y: PRINT 'Total del cajero:"; tcaj END REM Subrutina del cliente C: tcl=O A1: GOSUB A tcl=tcl + ta INPUT "Más artículos (SI/N0)";mas1$ IFmas1$="N0"THEN GOTO B ELSE 352 PARTE III. PROGRAMACIÓN Figura 10.1 GOTO A1 ENDIF B: PRINT 'Total del cliente:"; tcl PRINT RETURN REM Subrutina del artículo CAPÍTULO 10. Figura 10.2 PROCESOS MODULARES 353 354 PARTE III. PROGRAMACIÓN A: INPUT "Precio";p INPUT "Cantidad";c ta=p * c RETURN Paso 6. Pruebas y depuración: Ejercicio: Se deja al alumno la tarea de editar el programa y realizar esta fase de pruebas de la metodología. Se sugiere que estas pruebas sean las mismas que las del diagrama de flujo del ejercicio correspondiente en el capítulo 4. PROBLEMA 2 Cinco miembros de un club de obesidad desean saber cuánto han bajado o subido de peso desde la última vez que se reunieron. Para ello realizan un ritual de pesaje en donde cada uno se pesa en diez básculas distintas para así tener un promedio más exacto de su peso. Si existe diferencia positiva entre este promedio de peso y el peso de la última vez que se reunieron, significa que subieron de peso. Pero si la diferencia es negativa, significa que bajaron. Lo que el problema requiere es que por cada persona se imprima un letrero que diga "SUBIÓ" o "BAJO" y la cantidad de kilos que subió o bajó de peso. Paso 4. Diagrama de flujo (véanse Figs. 10.3, 10.4 y 10.5). Paso 5. Codificación y edición del programa: REM Control de peso en un club F0Rc=1 T0 5 GOSUB M NEXT c END REM Subrutina Miembro M: INPUT "Promedio de peso anterior";pant sp=O F0R cb=1 TO 10 GOSUB B NEXT cb pa=sp/1O dif=pa-pant IFdif <OTHEN PRINT "Bajó de peso" ELSE PRINT "Subió de peso" CAPÍTULO 10. PROCESOS MODULARES 355 Figura 10.3 END IF PRINT RETURN REM Subrutina Báscula B: INPUT "Peso";pe sp=sp+pe RETURN Paso 6. Pruebas y depuración: Ejercicio: Se deja al alumno la tarea de editar el programa y realizar esta fase de pruebas de la metodología. Se sugiere que estas pruebas sean las mismas que las del diagrama de flujo del ejercicio correspondiente en el capítulo 4. 356 PARTE III. PROGRAMACIÓN Figura 10.4 CAPÍTULO 10. PROCESOS MODULARES 357 Figura 10.5 PROBLEMA 3 Simular el comportamiento de un reloj digital imprimiendo la hora, minuto y segundo en cada segundo de un día desde las 0:00:00 horas hasta las 23:59:59 horas. Paso 4. Diagrama de flujo (véanse Figs. 10.6, 10.7 y 10.8). Paso 5. Codificación y edición del programa. REM Reloj F0Rh=OT0 59 GOSUB M NEXT h END REM Subrutina Minutos M: F0R m=0T0 59 GOSUB S NEXT m RETURN REM Subrutina Segundos S: 358 PARTE 111. PROGRAMACIÓN Figura 10.6 FOR s=O TO 59 GOSUB D NEXTs RETURN REM Subrutina DISPLAY D: PRINT h;":"; m ;":"; s RETURN Paso 6. Pruebas y depuración: Ejercicio: Se deja al alumno la tarea de editar el programa y realizar esta fase de pruebas de la metodología. Se sugiere que estas pruebas sean las mismas que las del diagrama de flujo del ejercicio correspondiente en el capítulo 4. CAPÍTULO 10. PROCESOS MODULARES Figura 10.7 Figura 10.8 359 360 PARTE III. PROGRAMACIÓN PROBLEMA 4 Se desea obtener el promedio de g grupos que están en un mismo año escolar, considerando que cada grupo puede tener n alumnos, que cada alumno puede llevar m materias y que en todas las materias se promedian tres calificaciones para obtener el promedio de la materia. Lo que se desea desplegar es el promedio de los grupos, el promedio de cada grupo y el promedio de cada alumno. Paso 4. Diagrama de flujo (véanse Figs. 10.9, 10.10, 10.11 y 10.12). Paso 5. Codificación y edición del programa: REM Promedios de grupos INPUT "Número de grupos";g stg=O FORcg=1 TO g GOSUB G NEXT cg ptg=stg / g PRINT "Promedio de todos los grupos:";ptg END REM Subrutina Grupo G: INPUT "Número de alumnos del grupo";na sg=O FOR ca=1 TO na GOSUB A NEXT ca pg=sg / na PRINT "Promedio del grupo";pg PRINT stg=stg+pg RETURN REM Subrutina Alumno A: INPUT "Número de materias del alumno";nm sa=O FOR cm=1 TO nm GOSUB M NEXTcm pa=sa / nm PRINT "Promedio del alumno";pa CAPÍTULO 10. PROCESOS MODULARES Figura 10.9 361 362 PARTE III. PROGRAMACIÓN Figura 10.10 CAPÍTULO 10. PROCESOS MODULARES Figura 10.11 363 364 PARTE III. PROGRAMACIÓN Figura 10.12 PRINT sg=sg+pa RETURN REM Subrutina Materia M: INPUT "Calificación 1 ";c1 INPUT "Calificación 2";c2 INPUT "Calificación 3";c3 PRINT pm= [c1+c2+c3]/3 sa=sa+pm RETURN Paso 6. Pruebas y depuración: Ejercicio: Se deja al alumno la tarea de editar el programa y realizar esta fase de pruebas de la metodología. Se sugiere que estas pruebas sean las mismas que las del diagrama de flujo del ejercicio correspondiente en el capítulo 4. CAPÍTULO 10. PROCESOS MODULARES 365 Problemas propuestos Realizar los pasos restantes de la metodología para los problemas repetitivos compuestos propuestos en el capítulo 4, empleando subrutinas. 366 PARTE II I . PROGRAMACIÓN RESUMEN Módulo: es una sección separada del cuerpo principal de un proceso pero que es ejecutada desde algún punto de éste. Un módulo tiene un nombre y misión específica. El concepto de módulo nace de la idea de que un problema debe dividirse en problemas más pequeños para facilitar su solución. Modularización: técnica para solucionar un problema dividiéndolo en sus partes principales, llamándosele a cada una de estas partes proceso modular o módulo. Conceptos relacionados con modularización: Función: es una instrucción que recibe uno o varios valores llamados parámetros y dependiendo de éstos se produce un resultado. Una función puede estar en el vocabulario de Quick Basic o puede ser definida por el programador mediante la instrucción DEF FN. Subrutina: es una parte del programa que no pertenece al cuerpo del programa principal pero que es mandado ejecutar desde éste mediante la instrucción GOSUB. La subrutina debe tener un nombre o etiqueta al principio de ella seguida de dos puntos (:) y terminar con la instrucción RETURN. Procedimiento: es una combinación de subrutina y función, ya que es un conjunto de instrucciones fuera del cuerpo del programa principal que es mandado ejecutar desde éste, como subrutina, pero también puede recibir parámetros como las funciones. Subprogramas: son programas que son mandados a ejecutar por otros programas. Programas: es un conjunto de instrucciones bajo un mismo nombre de archivo. Un programa complejo puede estar modularizado y comprender funciones, subrutinas, procedimientos e inclusive subprogramas. CAPÍTULO 11 ESTRUCTURAS DE DATOS OBJETIVOS 11.1 11.2 11.3 11.4 11.5 El alumno definirá qué es una estructura de datos. El alumno explicará los tipos de estructura de datos, sus características y su manejo: a) Arreglos b) Matrices c) Archivos —Secuenciales —Aleatorios El alumno utilizará la metodología para solucionar problemas empleando arreglos. El alumno utilizará la metodología para solucionar problemas empleando matrices. El alumno utilizará la metodología para solucionar problemas empleando archivos aleatorios. 11.5.1 El alumno explicará las operaciones que pueden realizarse con los archivos aleatorios: a) Altas b) Bajas c) Consultas d) Cambios e) Reporte general f) Reportes específicos 11.5.2 El alumno definirá las instrucciones que proporciona el lenguaje Quick Basic para el tratamiento de archivos aleatorios 11.5.3 El alumno será capaz de resolver un problema empleando las operaciones vistas con los archivos aleatorios. 367 CAPÍTULO ESTRUCTURAS DE DATOS Frecuentemente en la vida diaria mencionamos conceptos relacionados con una colección de datos. Por ejemplo, si vemos un conjunto de personas menores de 13 años de edad les llamamos "niños" y no importa no mencionar el nombre de todos y cada uno para referirnos a ellos. Hasta el momento hemos considerado los datos como valores individuales, por ejemplo, el valor 5 se asigna a la variable n o el dato 12 se multiplica por algún otro, etc. Sin embargo, los datos pueden organizarse en estructuras, de tal manera que podemos tener un conjunto de datos numéricos llamados edades o un conjunto de datos alfanuméricos llamados nombre$, etc. Se le llama estructura de datos a la organización que reciben los datos para tratar a un conjunto de ellos como una unidad. Existen varias estructuras de datos, dependiendo de la forma de organización de éstos, de las cuales estudiaremos a tres: 1) Arreglos 2) Matrices 3) Archivos de datos Las dos primeras están relacionadas con el tratamiento de datos en memoria principal, mientras que los archivos de datos lo están con la memoria secundaria. A continuación estudiaremos cada una de estas estructuras de datos. 1) Arreglos La estructura de datos que organiza sus datos de manera lineal se denomina arreglos. Éstos emplean un índice entre paréntesis para referenciar los elementos de que consta. Por ejemplo, si deseáramos tener en el arreglo nombres$ los nombres de 5 personas tendríamos que ejecutar las siguientes instrucciones: 368 CAPÍTULO 11. ESTRUCTURAS DE DATOS 369 nombres$(l) = "ALFREDO" nombres$(2) = "RAÚL" nombres$(3) = "JOSÉ" nombres$(4) = "JUAN" nombres$(5) = "CARLOS" Lo cual significa que al elemento 1 del arreglo nombres$ se le asignó el dato "ALFREDO" y que a los demás elementos del arreglo se les asignó el dato respectivo. Para recuperar un dato del arreglo, por ejemplo para imprimirlo, sólo basta con el nombre del arreglo y el número de elemento-índice-en que está guardado: PRINT nombres$(3) desplegará en pantalla: JOSÉ a$ = nombres$(4) + SPACE$(1) + nombres$(5) PRINT a$ desplegará: JUAN CARLOS Si en vez de asignar este arreglo lo tuviéramos que pedir como dato de entrada, tendríamos que usar las siguientes instrucciones: INPUT nombre$(l) INPUT nombre$(2) INPUT nombre$(3) INPUT nombre$(4) INPUT nombre$(5) Como en este conjunto de instrucciones lo único que varía son los índices del arreglo, podemos emplear la instrucción FOR...NEXT para hacerlo más sencillo. FORi=l TO5 INPUT nombre$(i) NEXT i Antes de usarlo, un arreglo debe ser declarado con la instrucción DIM: DIM nombre-del-arreglo ( expresión numérica) donde: el nombre del arreglo puede ser un identificador numérico o alfanumérico el resultado de la expresión numérica debe ser el índice máximo que esperamos alcanzar con nuestro arreglo 370 PARTE III. PROGRAMACIÓN un mismo DIM puede contener varias declaraciones, separando las variables con comas Si la instrucción DIM no se emplea para declarar un arreglo se asume que su rango de índices es de 0 a 10, por tanto, es un error efectuar un acceso con índices que no estén en este rango. Para nuestro arreglo nombres$, dado que su índice máximo es 5, su declaración deberá quedar de la siguiente manera: DIM nombres$(5) Con esta declaración Quick Basic reservará los índices 0,1, 2, 3, 4 y 5 para nuestro arreglo. Como el índice 0 no lo ocupamos, puede emplearse la instrucción OPTION BASE para indicarle a Quick Basic que el primer índice de nuestro arreglo comenzará en 1 y no en 0: OPTION BASE 1 El formato general de la instrucción es: OPTION BASE n en donde n es el primer índice que emplearemos para los arreglos que declaremos después de la instrucción. Si la instrucción no aparece en el programa se asume que n es igual a 0. En un arreglo todos los elementos deben ser del mismo tipo, ya sea numéricos o alfanuméricos. Así pues, el conjunto de instrucciones para pedir un arreglo de nombres y luego desplegarlo sería: REM Pedir 5 nombres en un arreglo y desplegarlos OPTION BASE 1 DIM nombres$(5) PRINT "Teclea 5 nombres:" FOR i=1 T0 5 INPUT nombres$[¡) NEXT PRINT "Los nombres tecleados son:" FORi=1 T0 5 PRINT nombres$(i) NEXT END Prueba; Teclea 5 nombres: ? RAMIRO ? NORMA ? ENRIQUE ? ALEJANDRO ? JULIO Los nombres tecleados son: RAMIRO CAPÍTULO I I . ESTRUCTURAS DE DATOS 371 NORMA ENRIQUE ALEJANDRO JULIO A continuación resolveremos algunos problemas con arreglos. Problemas resueltos PROBLEMA 1 Pedir un conjunto de n números e imprimir cuál es el menor de ellos. Paso 1. Definición del problema: Dado en la redacción del problema. Paso 2. Planeación de la solución: La solución de este problema se inicia pidiendo n números dentro de un arreglo, para lo cual emplearemos un ciclo con un número determinado de n iteraciones. Posteriormente, asumiremos que el primer elemento del arreglo es el número menor y lo compararemos con los demás elementos. Si alguno de los elementos es menor al número menor hasta el momento, entonces será el nuevo número menor. Esto lo haremos usando un ciclo con un número determinado de iteraciones, desde la iteración 2 hasta la n. Finalmente se desplegará el número menor obtenido. SALIDAS: número menor ENTRADAS: arreglo de números DATOS ADICIONALES: ninguno Paso 3. Algoritmo: De ahora en adelante llamaremos: i n a menor a a a a contador de iteraciones número de datos arreglo de números número menor 1. PEDIR n 2. i← 1 3. SI i > n ENTONCES IR al paso 4 DE OTRA FORMA PEDIR i←i + 1 IR al paso 3 4. menor ←a(l) 372 5. PARTE III. PROGRAMACIÓN i←2 6. SI i > n ENTONCES IR al paso 7 DE OTRA FORMA ANALIZAR i←i + 1 IR al paso 6 7. DESPLEGAR menor PEDIR: 1. PEDIR a(i) 2. FINP ANALIZAR: 1. SI a(¡) < menor ENTONCES menor ←a(i) 2. FINP Paso 4. Diagrama de flujo (véanse Figs. 11.1 y 11.2) Paso 5. Codificación y edición del programa: Para usar el arreglo primero deberemos dimensionarlo, para ello emplearemos una combinación de las instrucciones OPTION BASE y DIM. REM Programa que encuentra el menor número de n dados INPUT "Cuántos números";n OPTION BASE 1 DIM a[n] FOR i = 1TOn INPUT a[ i ] NEXT i menor = a[1] FOR i = 2 TO n IF a[¡]<menorTHEN menor = a[¡] END IF NEXT i PRINT "El menor es:"; menor END Paso 6. Pruebas y depuración: Cuántos números? 6 ?8 ? 13 CAPÍTULO II. ESTRUCTURAS DE DATOS Figura 11.1 373 374 PARTE III. PROGRAMACIÓN Figura 11.2 ?2 ?5 ?37 ?20 El menor es: 2 PROBLEMA 2 Ordenar un arreglo de números en orden ascendente, esto es, que el primer elemento del arreglo quede como el menor número de todos, y así sucesivamente hasta que el último sea el mayor de todos. Paso 1. Definición del problema: Dado en la redacción del problema. Paso 2. Planeación de la solución: Para resolver este problema emplearemos una popular técnica de ordenamiento de arreglos llamada Sort Burbuja. CAPÍTULO 11. ESTRUCTURAS DE DATOS 375 El Sort Burbuja toma el primero de los elementos del arreglo y lo compara con los demás y en caso de que alguno de éstos sea menor, intercambia los valores, de manera tal que el primer elemento se queda con el menor valor de todos. A continuación se toma el segundo elemento para compararlo con los siguientes y se repite el proceso. Esto se repite para los primeros n-1 números del arreglo y al final el elemento n-1 se compara con el elemento n para dejar el valor más grande de todos en el último elemento. A esta técnica se le llama Sort porque este término inglés indica ordenamiento; se le llama Burbuja porque los primeros elementos que son ordenados conforme avanza el proceso parecen burbujas que salen antes que las otras. SALIDAS: arreglo ordenado ascendentemente ENTRADAS: arreglo de números DATOS ADICIONALES: ninguno Paso 3. Algoritmo: De ahora en adelante llamaremos: i j n a a a a a contador de iteraciones contador de iteraciones de COMPARA número de datos arreglo de números 1. i←1 2. SI i > n ENTONCES 3. 4. 5. 6. IR al paso 3 DE OTRA FORMA PEDIR i ←i + 1 IR al paso 2 i← 1 SI i > n-1 ENTONCES IR al paso 5 DE OTRA FORMA COMPARA i ←i + 1 IR al paso 4 i← 1 SI i > n ENTONCES IR al paso 7 DE OTRA FORMA DESPLIEGA i←i + 1 IR al paso 6 7. FIN 376 PARTE III. PROGRAMACIÓN PEDIR: 1. PEDIR a(i) 2. FINP COMPARA: 1. j←i + 1 2. SIj>nENTONCES IR al paso 3 DE OTRA FORMA INTERCAMBIA j←j + 1 IR al paso 2 3. FINP DESPLIEGA: 1. DESPLEGAR a(i) 2. FINP INTERCAMBIA: 1. SI a(j) ← a(i) ENTONCES aux ←a(i) a(i) ← a(J) a(j)← aux 2. FINP Paso 4. Diagrama de flujo (véanse Figs. 11.3,11.4 y 11.5). Paso 5. Codificación y edición del programa: REM Ordenamiento de números en orden ascendente INPUT "Cuántos números";n OPTION BASE 1 DIM a[n] REM Pedir arreglo FOR i=1 TO n INPUT a[¡] NEXT i REM Ordenar arreglo FOR i=1 TO n-1 FORi=i+1 TOn IF a[j] < a[¡]THEN aux = a[i] a[i] = a[j] a[j] = aux END IF NEXT j CAPÍTULO II. ESTRUCTURAS DE DATOS Figura 11.3 377 378 PARTE III. PROGRAMACIÓN Figura 11.4 CAPÍTULO I I . ESTRUCTURAS DE DATOS Figura 11.5 NEXT i REM Desplegar arreglo PRINT "El arreglo ordenado ascendentemente es." FOR i = 1 TO n PRINT a [ i ] NEXT i END Paso 6. Pruebas y depuración: Cuántos números? 6 ?8 ? 13 ?2 ?5 ?37 ?20 El arreglo ordenado ascendentemente es: 2 5 8 13 20 379 380 PARTE III. PROGRAMACIÓN 37 PROBLEMA 3 Ordenar un arreglo de datos alfanuméricos en orden ascendente, es decir, que el primer elemento del arreglo quede como el primero en orden alfabético de todos y así sucesivamente hasta que el último sea el mayor en orden alfabético. Paso 1. Definición del problema: Dado en la redacción del problema. Paso 2. Planeación de la solución: La solución es igual a la del problema anterior, sólo que ocupando un arreglo alfanumérico, ya que con una comparación de dos strings se sabe cuál de ellos es el menor en orden alfabético. Por lo tanto, sólo se aplicarán los pasos 5 y 6 de la metodología. Paso 5. Codificación y edición del programa: REM Ordenamiento de strings pon orden alfabético INPUT "Cuántos strings";n OPTION BASE 1 DIM a$[n] REM Pedir arreglo FOR i=1 TO n INPUT a$[ i ] NEXT i REM Ordenar arreglo FORi=1 T0n-1 F0Rj=¡+1 TOn IF a$[j] < a$[¡]THEN aux$ = a$[¡] a$[i] = a$[j] a$[¡] = aux$ END IF NEXT j NEXT i REM Desplegar arreglo PRINT "El arreglo ordenado alfabéticamente es:" FOR i = 1 TO n PRINT a$[¡] NEXT i END Paso 6. Pruebas y depuración: Cuántos strings? 5 CAPÍTULO I I . ESTRUCTURAS DE DATOS 381 ?MESA ? ÁRBOL ?MASA ? SILLA ? LIBRO El arreglo ordenado alfabéticamente es: ÁRBOL LIBRO MASA MESA SILLA Problemas propuestos 1. 2. 3. 4. Meter los n primeros pares a un arreglo e imprimirlo. Pedir un conjunto de n números e imprimir el mayor de ellos. Ordenar un arreglo de números en orden descendente, de mayor a menor, de tal manera que el primer elemento del arreglo quede como el mayor y el último sea el menor. Se le llama serie Fibbonacci a la que comienza con dos números iniciales que son 1 y 1 y va obteniendo el siguiente elemento a partir de la suma de los dos últimos elementos. Para el primer caso, al sumar 1 y 1 obtenemos 2, por lo tanto los dos últimos elementos de la serie serían el segundo 1 y el 2, por lo que el siguiente elemento sería 1 +2=3, el siguiente elemento 2+3=5, etc. Una serie Fibbonacci de 10 elementos sería: 1, 1, 2, 3, 5, 8, 13, 21, 34 y 55. Elaborar un programa que meta los n primeros números de la serie Fibbonacci a un arreglo y lo imprima. 2) MATRICES Las matrices son aquellas estructuras de datos que organizan sus datos en forma de tabla, para ello emplean dos índices: uno para indicar el renglón y otro la columna, y así referenciar sus datos. A las matrices también se les llama tablas o arreglos de dos dimensiones. Por ejemplo, si desean registrarse las 3 calificaciones de 2 alumnos podríamos emplear una matriz de 2 renglones por 3 columnas representarlo gráficamente como lo muestra la figura 11.6. El primer renglón es para el primer alumno, quien obtuvo calificaciones de 7, 8 y 9. El segundo alumno obtuvo calificaciones de 10, 7 y 8. Para meter la primera calificación del primer alumno a la matriz, tendríamos que referirnos a la primera columna y al primer renglón de la siguiente manera: Calificación 1 Calificación 2 Calificación 3 Alumno 1 7 8 9 Alumno 2 10 7 8 Figura 11.6 382 PARTE III. PROGRAMACIÓN calif(l,1) = 7 lo que significa que para el primer alumno su primera calificación es de 7. calif(l,2) = 8 significa que para el primer alumno su segunda calificación es de 8. la tercera calificación del primer alumno se asignaría: califa ,3) = 9 Para el segundo alumno: calif(2,l) = 10 calif(2,2) = 7 calif(2,3) = 8 Por tanto, el significado del renglón es el de un alumno y el de la columna es de una calificación. En este caso estamos hablando de una matriz de 2 renglones por 3 columnas o, más abreviado, de una matriz de 2 X 3. Al igual que los arreglos, las matrices también se dimensionan, esto se hace indicando el número de renglones y columnas de la siguiente manera: DIM nombre-de-la-matriz (expresión numérica 1, expresión numérica 2) donde: la expresión numérica 1 es el número máximo de renglones de la matriz la expresión numérica 2 es el número máximo de columnas que se usarán en la matriz Para el ejemplo de la matriz de las calificaciones su DIM es: DIM calif(2,3) Si antes de un DIM aparece una instrucción OPTION BASE x, x afectará tanto a los renglones como a las columnas. Problemas resueltos PROBLEMA 1 Pedir en una matriz las 4 calificaciones de 5 alumnos y de la misma matriz obtener el promedio de los alumnos. Paso 1. Definición del problema: CAPÍTULO I I . ESTRUCTURAS DE DATOS 383 Dado en la redacción del problema. Paso 2. Planeación de la solución: Este es un problema repetitivo compuesto, ya que vamos a emplear un ciclo de 5 iteraciones para procesar a los 5 alumnos, y para cada uno emplearemos otro ciclo de 4 iteraciones para procesar sus 4 calificaciones. Recordemos que cuando un ciclo está dentro de otro se trata de un problema repetitivo compuesto. Si suponemos que los renglones son los alumnos y las columnas las calificaciones, entonces emplearemos una matriz de 5 X 4 para solucionar el problema. El problema se divide en dos partes: pedir la matriz y obtener de la matriz los promedios. Para pedir la matriz, que llamaremos calif, usaremos las siguientes acciones: 1. 2. 3. alumno ←1 SI alumno > 5 ENTONCES IR al paso 3 DE OTRA FORMA CALIFICACIONES alumno ←alumno + 1 IR al paso 2 FIN Proceso CALIFICACIONES: 1. 2. 3. calificación ←1 SI calificación > 4 ENTONCES IR al paso 3 DE OTRA FORMA CALIFICACIÓN calificación ←calificación + 1 IR al paso 2 FIN Proceso CALIFICACIÓN: 1. PEDIR calif(alumno, calificación) Para obtener los promedios se ejecutarán las siguientes acciones: 1. 2. 3. alumno ←1 SI alumno > 5 ENTONCES IR al paso 3 DE OTRA FORMA CALIFICACIONES2 alumno ←alumno + 1 IR al paso 2 FIN 384 PARTE III. PROGRAMACIÓN Proceso CALIFICACIONES2: 1. 2. 3. suma <—0 calificación ←1 SI calificación > 4 ENTONCES IR al paso 4 DE OTRA FORMA CALIFICACION2 calificación ←calificación + 1 IR al paso 3 promedio = suma / 4 DESPLEGAR promedio 4. 5. Proceso CALIFICACION2: 1. suma = suma + calif(alumno, calificación) La definición de los datos de entrada y salida queda: SALIDAS: promedio de los 5 alumnos ENTRADAS: calificaciones de los 5 alumnos DATOS ADICIONALES: ninguno Paso 3 Algoritmo: De ahora en adelante llamaremos: CS2 a a a a a a a C2 a proceso CALIFICACION2 a c s P CS c alumno calificación suma promedio proceso proceso CALIFICACIÓN proceso CALIFICACIONES 1. a← 1 2. SI a > 5 ENTONCES IR al paso 3 DE OTRA FORMA CS a ←a + 1 IR al paso 2 3. a← 1 4. SI a > 5 ENTONCES IR al paso 5 CAPÍTULO II. 5. DE OTRA FORMA CS2 a ←a + 1 IR al paso 4 FIN CS: 1 c← 1 2 SI c > 4 ENTONCES IR al paso 3 DE OTRA FORMA C c←c+1 IR al paso 2 3. FINP C: 1. 2. PEDIR calif(a, c) FINP CS2: 1. 2. 3. 4. 5. 6. s←0 c←1 SI c> 4 ENTONCES IR al paso 4 DE OTRA FORMA C2 c ←c + 1 IR al paso 3 p ←s /4 DESPLEGAR p FINP C2: 1. s←s + calif(a, c) 2. FINP Paso 4. Diagrama de flujo (véanse Figs. 11.7, 11.8 y 11.9). Paso 5. Codificación y edición del programa: REM Promedio de calificaciones empleando una matriz ESTRUCTURAS DE DATOS 385 386 PARTE III. PROGRAMACIÓN Figura 11.7 OPTION BASE 1 DIM calif[5,4] FOR a = 1 TO 5 FOR c = 1 T0 4 PRINT "Teclea la calificación ";c;" del alumno"; a INPUT calif(a.c) NEXT c CAPÍTULO II. ESTRUCTURAS DE DATOS Figura 11.8 NEXT a FOR a = 1 T0 5 s=O FOR c = 1 T0 4 s=s+calif(a,c) NEXT c p=s/4 PRINT "Promedio alumno "; a;" =";p NEXT a END 387 388 PARTE III. PROGRAMACIÓN Figura 11.9 Ejercicio: Efectuar el paso de pruebas del programa incluyendo las dos fases. PROBLEMA 2 CAPÍTULO II. ESTRUCTURAS DE DATOS 389 Pedir 2 matrices de m renglones por n columnas y obtener una tercera matriz que sea la suma de ambas. La suma de una matriz con otra consiste en sumar cada uno de los elementos de una matriz con cada uno de los elementos de la otra: c(l,1)=a(l,1)+b(l,1) c(l,2)=a(l,2)+b(l,2) : : c(m,n)=a(m,n)+b(m,n) Paso 1. Definición del problema: Dado en la redacción del problema. Paso 2. Planeación de la solución: Para solucionar este problema primero pediremos las dos matrices a y b. A continuación ejecutaremos un ciclo para sumar todos los renglones y otro ciclo interno para sumar todos los elementos en las columnas. Al final desplegaremos la matriz resultante. Nos saltaremos directamente al paso 5 de la metodología: Paso 5. Codificación y edición del programa: REM Suma de matrices OPTION BASE 1 DIM a[m,n], b[m,n], c[m,n] PRINT "Teclea los elementos de la matriz a:" FORi=1 10 5 FORj = 1 T0 4 INPUT a[,j] NEXT j NEXTi PRINT "Teclea los elementos de la matriz b:" FOR i = 1 T0 5 FOR j = 1 T0 4 INPUT b[i,j] NEXT j NEXT i FOR i = 1 T0 5 FOR j=1 T0 4 c[¡,j]=a[¡,j] + b[i,j] NEXT j NEXT i PRINT "La matriz resultante es:" FOR i=1 T0 5 FOR j = 1 T0 4 PRINT c[i,j];" " NEXT j 390 PARTE III. PROGRAMACIÓN PRINT NEXT i END Observe que cuando se despliega la matriz resultante al final del ciclo interno la instrucción PRINT está sin parámetros y que el PRINT interno termina en punto y coma. Esto es para imprimir en forma gráfica nuestra matriz, es decir, que cada renglón de nuestra matriz se vea como un renglón en la pantalla. PROBLEMA 3 Un campo de golf consta de 18 hoyos; en ellos debe introducirse, sucesivamente, una pelota a base de golpes con un bastón. En una tarjeta van anotándose el número de golpes requeridos para llegar a cada uno de los hoyos. En una misma tarjeta pueden anotarse los golpes de varios jugadores, ya que ésta tiene la forma de una tabla; en ésta los renglones corresponden a los jugadores y las columnas a cada hoyo del campo. Por ejemplo, si en un juego participaran 4 jugadores la tarjeta tendría la forma que se muestra en la figura 11.10. Lo cual quiere decir que el jugador 1 necesitó 4 golpes para llegar al hoyo 1, 4 para avanzar del hoyo 1 al 2, 6 para avanzar del hoyo 2 al 3, etcétera. En resumen, gana el juego el jugador que llegue al hoyo 18 con el menor número de golpes. Suponga que un partido de golf recién terminó y ya se tiene la tarjeta que registra todos los golpes: a) elabore un programa que pregunte cuántos jugadores participan y capture en una matriz los golpes de los 18 hoyos para los n jugadores, como si la matriz fuera la tarjeta del partido b) que el programa pida un arreglo con los nombres de los n jugadores c) que el programa imprima el nombre de la persona que ocupó el primer lugar, el segundo, etc., hasta el enésimo lugar Paso 1. Definición del problema: Dado en la redacción del problema. Paso 2. Planeación de la solución: En primer lugar, se trata de pedir una matriz de dimensiones n X 18, a la que llamaremos g, y un Hoyo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1/ 18 Jugador 1 4 4 6 7 2 4 5 4 3 3 5 5 6 3 4 4 2 4 Jugador 2 5 4 5 7 3 5 4 3 2 2 5 5 6 4 3 3 2 3 Jugador 3 6 6 7 5 4 3 4 5 4 3 6 5 5 3 4 4 3 4 Jugador 4 7 5 7 7 4 5 5 6 4 4 4 5 5 4 5 5 3 5 Figura 11.10 CAPÍTULO II. ESTRUCTURAS DE DATOS 391 arreglo de nombres de dimensión n, al que llamaremos n$. Asimismo, tendremos que crear un arreglo numérico con la suma de los golpes de los n jugadores para después hacer un sort ascendente con él y saber en qué lugares quedaron los jugadores, a este arreglo le llamaremos s. La creación de los dos arreglos y la matriz las efectuaremos en un mismo ciclo anidado, a continuación realizaremos el sort y finalmente se desplegarán los resultados. Nos saltaremos directamente al paso 5 de la metodología. Paso 5. Codificación y edición del programa: REM Programa de golf INPUT "Número de jugadores"; n OPTION BASE 1 DIM g[n,18], s[n], n$[n] FOR i=1 TO n PRINT "Nombre del jugador ";¡; INPUT n$[¡] PRINT "Favor de capturar los golpes del jugador";i s[i]=0 FOR j = 1 TO 18 INPUT g[i,j] s[i]= s[i]+ g[i,j] NEXT j NEXT i REM Sort FOR i=1 to n-1 FOR j=i+1 TO n IF s[j] < s[¡] THEN aux = s[¡] s[¡] = s[j] s[j] = aux aux$=n$[¡] n$[i]=n$[j] n$[j]=aux$ END IF NEXT j NEXT i REM Desplegar resultados FOR i =1 TO n PRINT "Lugar";i;":";n$(¡) NEXT i END Problemas propuestos 1) Efectuar la resta de dos matrices de dimensión m X n, sabiendo que esta operación es la resta de los elementos de una matriz con cada uno de los elementos de la otra. 392 PARTE III. PROGRAMACIÓN 2) Pedir una matriz de dimensiones m X n y obtener su matriz traspuesta. Una matriz b es traspuesta de otra a cuando, para todos los elementos de a: b(j,i) = a(i.j) 3) Investigar cómo se obtiene el resultado de multiplicar una matriz por otra y hacer el programa que lo realice. 4) En un pequeño torneo de fútbol participaron 5 equipos jugando todos contra todos. Se registraron los resultados de los marcadores en una tabla, donde el contenido de cada celda corresponde al número de goles que el equipo del renglón i le anotó al equipo de la columna j. Por ejemplo, si la tabla fuera: Elemento (1,2) = 1 Elemento (2,1) = 3 Significa que el equipo 2 le ganó al equipo 1 por marcador de 3-1 a) elaborar un programa que permita pedir estos resultados en una matriz. También pedir en un arreglo los nombres de los 5 equipos. Sabiendo que con un empate ambos equipos ganan un punto y que si alguno gana obtiene dos puntos y el otro cero: b) agregue al programa las instrucciones necesarias para que se cree un arreglo con los puntos que lograron cada uno de los equipos. c) agregue al programa las instrucciones necesarias para que se imprima el nombre del equipo que ganó el torneo (es decir, el que logró más puntos). d) agregue al programa las instrucciones necesarias para que se cree un arreglo con los goles que anotó cada equipo e) ¿cuál fue el campeón goleador? 3) ARCHIVOS DE DATOS Los archivos de datos son estructuras de datos que sirven para almacenar información en memoria secundaria. CAPÍTULO I I . ESTRUCTURAS DE DATOS 393 Como vimos en el capítulo 6, existen tres tipos de archivos: 1) archivos tipo programa 2) archivos de datos 3) archivos tipo texto Los archivos con los que trataremos en este capítulo son los archivos de datos. A diferencia de los datos manejados hasta el momento, que se almacenaban en zonas de la memoria principal, estos datos se podrán guardar en memoria secundaria, lo cual nos permitirá almacenarlos en forma permanente y luego volver a utilizarlos, ya sea para modificarlos, borrarlos o simplemente para consultarlos. El principal objetivo de esta sección es aprender a guardar datos nuevos en un archivo, así como consultar, modificar y borrar datos previamente almacenados, pero primero debemos entender la función y estructura de este tipo de archivos. Para entender la función de los archivos de datos supongamos que tiene un negocio y desea obtener un registro de sus clientes, para poder consultar cualquier información en el momento en que lo desee. Los datos que necesita por cada cliente son: nombre, calle y número, colonia, ciudad, estado, código postal, teléfono y fecha de ingreso. Además usted no cuenta con una computadora. Una forma de obtener esta información organizada podría ser abrir una tarjeta para cada cliente, en donde se anotarán estos datos; y así en el momento de necesitar información de alguno de ellos, lo que debe hacer es buscar la tarjeta correspondiente y ver la información. El conjunto de tarjetas podría quedar como lo muestra la figura 11.11. Si deseara modificar algún dato, lo que debe hacer es: buscar la tarjeta, cambiar el dato antiguo por el nuevo, y volver a guardarla. Las operaciones que se podrían hacer con la información de los clientes serían: agregar la tarjeta de un cliente nuevo, eliminar la de algún cliente que se muda de ciudad, modificar, o simplemente consultar los datos. Figura 11.11 392 PARTE III. PROGRAMACIÓN Figura 11.12 Representación gráfica de un archivo de datos Dichas operaciones no serían tan fáciles si el número de clientes fuera muy grande o si lo que deseáramos saber fuera algo más complicado, como por ejemplo obtener una lista de clientes que viven en determinada colonia, o una lista de los que ingresaron como clientes del negocio entre el 01/ENE/92 y 01/MAY/92. Los archivos de datos surgieron para satisfacer necesidades como las mencionadas, pero con ayuda de la computadora. Los datos contenidos en este tipo de archivos tendrán una organización similar a la que se llevaría sin ayuda de la computadora, pero con otra terminología. A lo que sería al equivalente de la tarjeta de un cliente lo llamaremos registro, y a cada uno de los datos de cada cliente, campo. Un archivo de datos para manejar a nuestros clientes se representa gráficamente como un cuadro (véase Fig. 11.12), en donde cada renglón contiene un registro con los datos de un cliente y habrá tantos registros como clientes haya. Cada columna incluye un dato del cliente. En este caso los nombres de los campos son: nombre, calle y número, colonia, ciudad, estado, código postal, teléfono y fecha ingreso, que son los mismos para todos los registros y el contenido de los campos serán los datos específicos de cada cliente. Definamos ahora formalmente los conceptos nuevos: Archivo de datos: colección de datos organizada por registros y campos, que es almacenada en dispositivos de memoria secundaria. Registro: información referente a una entidad, formado por un conjunto de campos. Campo: característica de una entidad. Siempre que se desee trabajar con un archivo de datos será muy importante diseñar primero la estructura de éste, es decir, determinar qué campos se necesitarán utilizar. CAPÍTULO II. ESTRUCTURAS DE DATOS 395 Organización de los archivos de datos Es el método en que se dispone el acceso a los registros. Existen básicamente dos métodos: 1) Secuencial 2) Aleatorio o directo 1) Secuenciales Son archivos en que para conseguir un registro en particular se deben recorrer todos los anteriores y sus registros pueden ser de longitud variable. 2) Aleatorios o directos Permiten tener acceso a cualquier registro sin tener que recorrer los que se encuentren almacenados antes. En este tipo de archivos cada registro tiene un número que lo identifica, para así poder localizar alguno en cualquier momento con sólo indicar su número. Todos sus registros tienen la misma longitud. Dada la versatilidad de los archivos aleatorios serán éstos los que estudiaremos en este libro. Archivos de datos aleatorios Son archivos organizados de tal manera que permiten el acceso a un registro específico, para leer o modificar la información almacenada en él. Cada registro se identifica por un número que indica su posición en el archivo. Proceso para accesar un archivo de datos aleatorio Como se había visto, un sistema computacional cuenta con dos tipos de memorias: la memoria principal y la memoria secundaria. Para el manejo de archivos en Quick Basic se utiliza una tercera memoria, que le llama memoria intermedia o buffer, la cual se encuentra en alguna zona de la memoria principal y el objetivo es ser intermediaria entre la memoria principal y la memoria secundaria durante el manejo de los archivos de datos. Como hemos mencionado, las operaciones que se pueden realizar sobre un archivo de datos son: agregar registros consultar registros borrar registros modificar registros las cuales se reducen a operaciones de lectura o escritura sobre el archivo de datos. La interacción entre los diferentes tipos de memoria y las operaciones de lectura y escritura se pueden representar gráficamente como se muestra en la figura 11.13: 396 PARTE III. PROGRAMACIÓN Figura 11.13 Lo que significa que cuando sea necesario escribir información en un archivo de datos se tendrán que realizar dos pasos: 1) pasar los datos de la memoria principal a la memoria intermedia 2) pasar los datos de la memoria intermedia a la memoria secundaria Y cuando sea necesario leer información de un archivo de datos sólo será necesario: 1) pasar los datos de memoria secundaria a memoria intermedia La memoria intermedia tiene como característica que sólo puede almacenar datos de tipo alfanumérico, por lo que para el manejo de datos de tipo numérico será necesario convertirlos a alfanuméricos cuando se escriba información o convertirlos a numéricos nuevamente cuando se lea información que previamente haya sido convertida a alfanumérica. Esto se realizará mediante funciones especiales que Quick Basic tiene para este fin. Concepción del archivo de datos En la planeación de la solución del problema se debe diseñar la estructura de los registros, que es especificar el nombre y longitud —número de caracteres— de los campos. Esto depende de los requerimientos encontrados en la definición del problema. Por ejemplo, para almacenar los datos de un directorio telefónico en un archivo de datos, su estructura podría ser: Campo Longitud nombre dirección 30 30 teléfono 10 CAPÍTULO II. ESTRUCTURAS DE DATOS 397 La longitud de cada campo se determina calculando la longitud que podría ocupar un dato común; por ejemplo, la longitud del campo nombre es de 30, porque no son comunes nombres más largos. La longitud del registro se obtiene sumando las longitudes calculadas para todos los campos; así para la estructura del archivo que acabamos de definir, la longitud del registro es de 70. Con frecuencia se puede encontrar un campo muy importante dado que el contenido en cada registro lo diferencia de los demás. Por ejemplo, el campo nombre en este caso es importante pues para localizar los datos de una persona necesitamos buscarla por el nombre. A este tipo de campos se les llama campos clave. También es conveniente dar nombre a las variables de memoria principal que se emplearán para manejar los datos que se enviarán a la memoria intermedia y al disco duro en operaciones de escritura. Estas variables pueden ser numéricas o alfanuméricas, dependiendo de lo que se necesite. Para el caso del ejemplo serían: nombre$ direc$ telef$ Asimismo debemos dar nombre a las variables de memoria intermedia que serán empleadas en las operaciones de lectura y escritura de registros. Recomendamos emplear los mismos nombres que se hayan manejado para la memoria principal, pero anteponiendo la letra i —de intermedia— para diferenciarlas. No olvide que estas variables deben ser alfanuméricas. Para el caso del ejemplo serían: inombre$ idirec$ itelef$ Si ponemos en una tabla estos datos que definimos quedarían: Campo Longitud Nombre en Men, principal Nombre en Mem. intermedia nombre dirección teléfono 30 30 10 nombre$ direc$ telef$ inombre$ idirec$ itelef$ Operaciones con los archivos aleatorios Aunque básicamente las operaciones con los archivos son de lectura y escritura de registros, en un programa típico de manejo de archivos de datos, podemos encontrar las siguientes opciones: 1) 2) 3) 4) 5) 6) Altas Bajas Consultas Cambios Reporte general Reportes específicos 398 PARTE I I I . PROGRAMACIÓN 1) ALTAS Se refiere a la inclusión de los datos de un nuevo registro en el archivo de datos. Los pasos generales a seguir son: 1) Abrir el archivo 2) Especificar la estructura asignando espacio para los campos en memoria intermedia 3) Buscar el primer número de registro que esté inactivo para hacer ahí la alta; de no haber se tiene que crear un nuevo registro al final del archivo 4) Pedir los datos de la entidad en variables de memoria principal 5) Pasar los datos de memoria principal a memoria intermedia 6) Escribir los datos de memoria intermedia a memoria secundaria en el número de registro encontrado en el paso 3 7) Cerrar el archivo 2) BAJAS Se refiere a la exclusión de un registro como parte activa del archivo de datos. Para lograr esto lo que haremos será escribir espacios en el campo clave del registro que se quiera dar de baja, y cuando se haga una lectura a este registro se verificará que no tenga solamente espacios porque significará que el registro está inactivo. A este tipo de baja se le llama baja lógica pues aunque algunos datos aun permanecen, están inhabilitados. Otra forma de dar baja lógica es agregar un campo más a la estructura del archivo que indique si está activo o inactivo. Nosotros emplearemos la primera forma mencionada. Los pasos generales a seguir son: • 1) 2) 3) 4) 5) 6) Abrir el archivo Especificar la estructura asignando espacio para los campos en memoria intermedia Leer el registro Escribir espacios en el campo clave de memoria intermedia Escribir el registro Cerrar el archivo 3) CONSULTAS Se refiere al acceso y despliegue de los datos de un registro activo por medio de su campo clave. Los pasos generales a seguir son: 1) 2) 3) 4) 5) Abrir el archivo Especificar la estructura asignando espacio para los campos en memoria intermedia Leer el registro Desplegar los campos de memoria intermedia Cerrar el archivo CAPÍTULO I I . ESTRUCTURAS DE DATOS 399 4) CAMBIOS Se refiere al cambio en algún dato de los campos de un registro activo. Los pasos generales a seguir son: 1) 2) 3) 4) 5) 6) 7) Abrir el archivo Especificar la estructura asignando espacio para los campos en memoria intermedia Leer registro Pedir el nuevo dato en variable de memoria principal Pasar el dato de la variable de memoria principal a la de memoria intermedia Escribir el registro Cerrar el archivo 5) REPORTE GENERAL Es el despliegue de los campos de todos los registros activos de un archivo. Los pasos generales a seguir son: 1) 2) 3) 4) 5) Abrir el archivo Especificar la estructura asignando espacio para los campos en memoria intermedia Verificar el número de registros existentes i ←1 SI i > número de registros existentes ENTONCES IR al paso 6 DE OTRA FORMA LEER REGISTRO i SI el registro está activo ENTONCES Desplegar variables de memoria intermedia i←i + 1 IR al paso 5 6) Cerrar el archivo 6) REPORTES ESPECÍFICOS Es el despliegue de los campos de todos los registros que cumplan con una condición específica y estén activos en un archivo. Los pasos generales a seguir son: 1) 2) 3) 4) 5) Abrir el archivo Especificar la estructura asignando espacio para los campos en memoria intermedia Verificar el número de registros existentes i← 1 SI i > número de registros existentes ENTONCES IR al paso 6 40it PARTE III. PROGRAMACIÓN DE OTRA FORMA LEER REGISTRO i SI el registro está activo y cumple con la condición del reporte específico ENTONCES Desplegar variables de memoria intermedia i← i + 1 IR al paso 5 6) Cerrar el archivo Pueden existir muchas otras opciones en un programa que maneje archivos de datos, dependiendo de los requerimientos del problema. Instrucciones y funciones para el manejo de archivos de datos aleatorios INSTRUCCIÓN: OPEN Funcionamiento: permite abrir un archivo de datos, ya sea para escribir o para leer datos en él. Formato: OPEN "R", número de archivo, "nombre", longitud donde: "R": es un parámetro que siempre usaremos para indicar que los archivos son aleatorios (random en inglés) número de archivo: es un número entre 1 y 15 que se asocia al archivo, para referirse a éste mediante el número en vez de su nombre nombre: nombre del archivo, el cual es asignado según las reglas del sistema operativo DOS; recomendamos usar la extensión .DAT para indicar que se trata de un archivo de datos longitud: es la longitud de cada registro, la cual es calculada en el momento de diseñar la estructura de los registros. Acción equivalente en algoritmo: ABRIR ARCHIVO "nombre" Bloque equivalente en diagrama de flujo: ABRIR ARCHIVO nombre se usa el símbolo de proceso para indicar que es una orden y la raya interna para indicar que es una operación de archivos Ejemplo: OPEN "R", 1, "DIRTEL.DAT", 70 CAPÍTULO II. ESTRUCTURAS DE DATOS 401 INSTRUCCIÓN: FIELD # Funcionamiento: asigna espacio en la memoria intermedia para los campos que componen los registros. Formato: FIELD # número de archivo, longitud 1 AS variable de memoria intermedia1... , longitudN AS variable de memoria intermediaN donde: número de archivo: es un número entre 1 y 15 que se asocia al archivo, para referirse a éste mediante el número en vez de su nombre longitud i: especifica el número de caracteres que debe tener cada campo. El total de caracteres de todos los campos debe ser igual a la indicada en la instrucción OPEN. variable de memoria intermedia i: nombre asignado a la variable de memoria intermedia No tiene acción en algoritmo ni bloque en diagrama de flujo equivalentes; sin embargo, en un programa debe ir enseguida de la instrucción OPEN. Ejemplo: FIELD #1, 30 AS inombre$, 30 AS idirec$, 10 AS itelef$ INSTRUCCIÓN: LSET Funcionamiento: mueve un dato de memoria principal a memoria intermedia acomodando el dato que se mueve, justificado a la izquierda. Debe haber tantos LSETs como variables de memoria principal se quieran pasar a memoria intermedia. Formato: LSET variable de memoria intermedia = expresión alfanumérica Acción equivalente en algoritmo: MOVER IZQUIERDA variable de memoria intermedia ← expresión alfanumérica Bloque equivalente en diagrama de flujo: variable de memoria intermedia ← expresión alfanumérica se usa el símbolo de proceso para indicar que es una asignación y la raya interna para indicar que es una operación de archivos Ejemplos: LSET inombre$ = nombre$ LSET idirec$ = direcS LSET itelef$ = telef$ 402 PARTE III. PROGRAMACIÓN INSTRUCCIÓN: RSET Funcionamiento: mueve un dato de memoria principal a memoria intermedia acomodando el dato que se mueve justificado a la derecha. Debe haber tantos RSETs como variables de memoria principal se quieran pasar a memoria intermedia. Formato: RSET variable de memoria intermedia = expresión alfanumérica Acción equivalente en algoritmo: MOVER DERECHA variable de memoria intermedia ← expresión alfanumérica Bloque equivalente en diagrama de flujo: variable de memoria intermedia ← expresión alfanumérica se usa el símbolo de proceso para indicar que es una asignación y la raya interna para indicar que es una operación de archivos Ejemplo: RSET inombre$ = nombreS RSET idirec$ = direcS RSET itelef$ = telef$ Veamos un ejemplo para diferenciar las instrucciones LSET y RSET. Supongamos que deseamos pasar la expresión alfanumérica "María" a la variable de memoria intermedia inombre$; la instrucción para hacerlo podría ser cualquiera de las siguientes: LSET inombre$ = "María" ó RSET inombre$ = "María" La diferencia se nota en la forma en que Quick Basic acomoda la expresión en el espacio reservado por el FIELD para esa variable de memoria intermedia. Como el campo tiene una longitud de 30 caracteres, el LSET haría lo siguiente: que es justificar a la izquierda la expresión; en cambio el RSET haría lo siguiente: CAPÍTULO II. ESTRUCTURAS DE DATOS 403 que es justificar a la derecha la expresión INSTRUCCIÓN: PUT # Funcionamiento: graba en memoria secundaria un registro con el contenido de la memoria intermedia. Formato: PUT # número de archivo, número de registro donde: número de archivo: es un número entre 1 y 15 que se asocia al archivo, para referirse a éste mediante el número en vez de por su nombre número de registro: número de registro en donde se desea almacenar los datos Acción equivalente en algoritmo: ESCRIBIR REGISTRO número de registro Bloque equivalente en diagrama de flujo: se usa el símbolo de salida de datos para indicar que están saliendo datos hacia la memoria secundaria y la raya interna para indicar que se trata de una operación de archivos. Ejemplo: PUT#1, 1 INSTRUCCIÓN: GET # Funcionamiento: pasa el registro especificado de memoria secundaria o memoria intermedia. Formato: GET # número de archivo, número de registro donde: número de archivo: es un número entre 1 y 15 que se asocia al archivo, para referirse a éste mediante el número en vez de su nombre número de registro: número de registro de donde se desea extraer los datos Acción equivalente en algoritmo: LEER REGISTRO número de registro 404 PARTE III. PROGRAMACIÓN Bloque equivalente en diagrama de flujo: se usa el símbolo de entrada ya que están entrando datos provenientes de memoria secundaria, y la raya interna para indicar que se trata de una operación de archivos Ejemplo: GET#1, 1 INSTRUCCIÓN: CLOSE # Funcionamiento: cierra un archivo de datos. Formato: CLOSE # número de archivo donde: número de archivo: es un número entre 1 y 15 que se asocia al archivo, para referirse a éste mediante el número en vez de su nombre Acción equivalente en algoritmo: CERRAR ARCHIVO nombre Bloque equivalente en diagrama de flujo: CERRAR ARCHIVO nombre se usa el símbolo de proceso para indicar que es una orden y la raya interna para indicar que es una operación de archivos Ejemplo: CLOSE #1 FUNCIÓN: LOF Funcionamiento: regresa el número de caracteres que tiene un archivo Formato: CAPÍTULO II. ESTRUCTURAS DE DATOS 405 LOF(número de archivo) Dado que en un archivo aleatorio todos los registros tienen la misma longitud, la instrucción LOF nos puede ayudar a obtener el número de registros que tiene un archivo aplicándola como parte de la siguiente fórmula: número de registros = LOF (número de archivo) / longitud de cada registro donde: longitud de cada registro es la longitud especificada en la instrucción OPEN Ejemplo: n = LOF[1] / 70 FUNCIÓN: MKS$ Funcionamiento: convierte datos tipo numérico que sean reales a tipo alfanumérico, siempre y cuando el número de dígitos que la compongan no sea más de 7. Se usa en conjunto con LSET o RSET. La longitud del campo de memoria intermedia especificado en la instrucción FIELD debe ser de 4. Formato: LSET variable de memoria intermedia = MKS$ (expresión numérica real con 7 o menos dígitos) RSET variable de memoria intermedia = MKS$ (expresión numérica real con 7 o menos dígitos) FUNCIÓN: MKD$ Funcionamiento: convierte datos tipo numérico que sean reales a tipo alfanumérico cuando el número de dígitos que la compongan sea más de 7. Se usa en conjunto con LSET o RSET. La longitud del campo de memoria intermedia especificado en la instrucción FIELD debe ser de 8. Formato: LSET variable de memoria intermedia = MKD$ (expresión numérica real con más de 7 dígitos) RSET variable de memoria intermedia = MKD$ (expresión numérica real con más de 7 dígitos) FUNCIÓN: MKI$ Funcionamiento: convierte datos tipo numérico que sean enteros a tipo alfanumérico, siempre y cuando estén entre -32768 y 32767. Se usa en conjunto con LSET o RSET. La longitud del campo de memoria intermedia especificado en la instrucción FIELD debe ser de 2. Formato: LSET variable de memoria intermedia = MKI$ (expresión numérica entera) 406 PARTE III. PROGRAMACIÓN RSET variable de memoria intermedia = MKI$ (expresión numérica entera) FUNCIÓN: MKL$ Funcionamiento: convierte datos tipo numérico que sean enteros a tipo alfanumérico, siempre y cuando estén entre -2147483648 y 2147483647. Se usa en conjunto con LSET o RSET. La longitud del campo de memoria intermedia especificado en la instrucción FIELD debe ser de 4. Formato: LSET variable de memoria intermedia = MKL$ (expresión numérica entera larga) RSET variable de memoria intermedia = MKL$ (expresión numérica entera larga) FUNCIÓN: CVS Funcionamiento: convierte un dato que fue convertido previamente a alfanumérico con la instrucción MKS$, a tipo numérico. Formato: variable numérica = CVS (variable de memoria intermedia) FUNCIÓN: CVD Funcionamiento: convierte un dato que fue convertido previamente a alfanumérico con la instrucción MKD$, a tipo numérico. Formato: variable numérica = CVD (variable de memoria intermedia) FUNCIÓN: CVI Funcionamiento: convierte un dato que fue convertido previamente a alfanumérico con la instrucción MKI$, a tipo numérico. Formato: variable numérica = CVI (variable de memoria intermedia) FUNCIÓN: CVL Funcionamiento: convierte un dato que fue convertido previamente a alfanumérico con la instrucción MKL$, a tipo numérico. Formato: variable numérica = CVL (variable de memoria intermedia) CAPÍTULO I I . ESTRUCTURAS DE DATOS 407 Instrucciones para dar presentación a un programa El par de instrucciones que veremos a continuación pueden ser usadas en cualquier programa para darle presentación a los datos que pedimos y desplegamos en la pantalla. INSTRUCCIÓN: CLS Funcionamiento: limpia la pantalla y sitúa el cursor en la esquina superior izquierda. Formato: CLS INSTRUCCIÓN: LÓCATE Funcionamiento: sitúa el cursor en cualquier parte de la pantalla que se desee. La pantalla de texto sobre la que trabajamos tiene 24 renglones por 80 columnas. Formato: LOCATE renglón, columna Ejemplo: LOCATE 5,35 sitúa el cursor en el renglón 5 y en la columna 35 Problemas resueltos PROBLEMA 1 En una ferretería se desea tener un programa que les permita llevar un control sobre las existencias de los productos que venden. Los datos que manejan son: nombre del artículo, costo unitario, precio de venta y cantidad que tienen en almacén. Las operaciones que se desean realizar son: 1) 2) 3) 4) 5) 6) 7) Agregar nuevos artículos al archivo Borrar algún artículo que ya no se venderá más Consultar los datos de determinado artículo Modificar datos de algún artículo Obtener un reporte de todos los artículos Poder aumentar las existencias de un artículo cuando se compre al proveedor Poder descontar de las existencias de un artículo cuando se venda al cliente Paso 1. Definición del problema: Dado en la redacción del problema. Paso 2. Planeación de la solución: Lo primero que debemos hacer es diseñar la estructura de los registros, que es especificar nombre y 408 PARTE III. PROGRAMACIÓN longitud de los campos, así como dar nombre a las variables de memoria principal e intermedia, que serán usadas para manejar los datos del archivo: Campo Longitud nombre del artículo costo precio cantidad 25 4 44 Nombre en Mem. principal Nombre en Mem. intermedia articul$ costo precio cant iarticul$ icosto$ iprecio$ icant$ La longitud de los campos costo, precio y cantidad es de 4, pues los estamos considerando como números reales de 7 o menos dígitos y éstos ocupan en el archivo sólo 4 caracteres después de haber sido convertidos a alfanuméricos, con la instrucción MKS$. La longitud de cada registro se calcula sumando las longitudes de los campos y en este caso será de 37. El campo clave que emplearemos para localizar los registros es el campo nombre del artículo. Para presentar en pantalla las distintas operaciones al usuario utilizaremos un menú con las siguientes opciones: 1) 2) 3) 4) 5) 6) 7) 8) Altas Bajas Consultas Cambios Reporte general Compras Ventas Salir El menú estará desplegándose continuamente y ejecutando la opción deseada hasta que se mande ejecutar la opción 8 del menú, con la cual se dará término al programa. Dependiendo de la opción que se haya seleccionado, se ejecutarán las siguientes acciones: 1) ALTAS 1) Abrir el archivo 2) Especificar la estructura asignando espacio para los campos en memoria intermedia 3) Buscar el primer número de registro que esté inactivo para hacer ahí la alta; de no haber se tiene que crear un nuevo registro al final del archivo 4) Pedir los datos de la entidad en variables de memoria principal 5) Pasar los datos de memoria principal a memoria intermedia 6) Escribir los datos de memoria intermedia a memoria secundaria en el número de registro encontrado en el paso 3 7) Cerrar el archivo 2) BAJAS 1) Abrir el archivo CAPÍTULO II. ESTRUCTURAS DE DATOS 2) 3) 4) 5) 6) 409 Especificar la estructura asignando espacio para los campos en memoria intermedia Leer el registro Escribir espacios en el campo clave de memoria intermedia Escribir el registro Cerrar el archivo 3) CONSULTAS 1) Abrir el archivo 2) Especificar la estructura asignando espacio para los campos en memoria intermedia 3) Leer el registro 4) Desplegar los campos de memoria intermedia 5) Cerrar el archivo 4) CAMBIOS 1) Abrir el archivo 2) Especificar la estructura asignando espacio para los campos en memoria intermedia 3) Leer registro 4) Pedir el nuevo dato en variable de memoria principal 5) Pasar el dato de la variable de memoria principal a la de memoria intermedia 6) Escribir el registro 7) Cerrar el archivo 5) REPORTE GENERAL 1) Abrir el archivo 2) Especificar la estructura asignando espacio para los campos en memoria intermedia 3) Verificar el número de registros existentes 4) i← 1 5) SI i > número de registros existentes ENTONCES IR al paso 6 DE OTRA FORMA LEER REGISTRO i SI el registro está activo ENTONCES Desplegar variables de memoria intermedia i← i + 1 IR al paso 5 6) Cerrar el archivo 6) COMPRAS 1) Abrir el archivo 2) Especificar la estructura asignando espacio para los campos en memoria intermedia 3) Leer registro 4) Pedir la cantidad de artículos comprada 5) Sumar este dato con la cantidad de artículos que se tiene en la memoria intermedia y reasignar la suma a esta misma variable 6) Escribir el registro 7) Cerrar archivo 410 PARTE I I I. PROGRAMACIÓN 7) VENTAS 1) Abrir el archivo 2) Especificar la estructura asignando espacio para los campos en memoria intermedia 3) Leer registro 4) Pedir la cantidad de artículos vendida 5) Restar este dato a la cantidad de artículos que se tiene en la memoria intermedia y reasignar la resta a esta misma variable 6) Escribir el registro 7) Cerrar archivo Paso 3. Algoritmo: De ahora en adelante llamaremos: articul$ costo precio cant iarticul$ icosto$ iprecio$ icant$ op sn$ a nombre del artículo (M. Principal) a costo (M. Principal) a precio (M. Principal) a cantidad (M. Principal) a nombre del artículo (M. Intermedia) a' costo (M. Intermedia) a precio (M. Intermedia) a cantidad (M. Intermedia) a opción seleccionada a variable que toma un valor de 'S' o' N' para confirmar la baja de un registro c a número de campo que se desea cambiar cantcomp a cantidad de artículos comprados cantvend a cantidad de artículos vendidos total a cantidad de artículos después de la compra o venta n a número de registros del archivo i a contador de registros del archivo r a número de registro encontrado Dado que se necesita en varios de los procesos, se ha creado otro proceso más, llamado ENCUENTRA, que sirve para localizar un registro según el campo clave. Observe cómo en este proceso se tienen que agregar espacios al valor que se pretende localizar, pues la longitud del campo nombre del artículo es de 25 y en la alta el LSET se encargó de guardar el dato con un relleno de espacios a la derecha del dato. 1. 2. 3. 4. 5. 6. 7. 8. DESPLEGAR "MENÚ:" DESPLEGAR "1) Altas" DESPLEGAR "2) Bajas" DESPLEGAR "3) Consultas" DESPLEGAR "4) Cambios" DESPLEGAR "5) Reporte general" DESPLEGAR "6) Compras" DESPLEGAR "7) Ventas" CAPÍTULO II. 9. DESPLEGAR "8) Salir" 10. PEDIR op 11. SI op=l ENTONCES ALTAS DE OTRA FORMA SI op=2 ENTONCES BAJAS DE OTRA FORMA SI op = 3 ENTONCES CONSULTAS DE OTRA FORMA SI op=4 ENTONCES CAMBIOS DE OTRA FORMA SI op=5 ENTONCES REPORTEG DE OTRA FORMA SI op=6 ENTONCES COMPRAS DE OTRA FORMA SI op = 7 ENTONCES VENTAS 12. SI op=8 ENTONCES IR al paso 13 DE OTRA FORMA IR al paso 1 13. FIN ALTAS: 1. 2. 3. 4. 5. 6. 7. 8. ABRIR ARCHIVO "FERRET" n←LOF(l)/37 r←n+1 i←1 SI i > n ENTONCES IR al paso 6 DE OTRA FORMA LEER REGISTRO i SI iarticul$=SPACE$(25) ENTONCES r←i i←n i← i + 1 IR al paso 5 PEDIR articul$ PEDIR costo PEDIR precio ESTRUCTURAS DE DATOS 411 412 PARTE I I I . PROGRAMACIÓN 9. 10. 11. 12. 13. 14. 15. 16. cant←0 MOVER IZQUIERDA iarticul$ ← iarticul$ MOVER IZQUIERDA icosto$ ← MKS$(costo) MOVER IZQUIERDA iprecio$ ← MKS$(precio) MOVER IZQUIERDA icant$ ←MKS$(cant) ESCRIBIR REGISTRO r CERRAR ARCHIVO "FERRET" FINP BAJAS: 1. 2. 3. ABRIR ARCHIVO "FERRET" ENCUENTRA SI r=0 ENTONCES DESPLEGAR "Ese artículo no se encuentra" DE OTRA FORMA SI CVS(icant$) > 0 ENTONCES DESPLEGAR "Ese artículo todavía tiene existencias" DE OTRA FORMA DESPLEGAR iarticul$, CVS(icosto$), CVS(iprecio$), CVS(icant$) PEDIR sn$ SI sn$="S" ENTONCES MOVER IZQUIERDA iarticul$ ← SPACE$(25) ESCRIBIR REGISTRO r 4. CERRAR ARCHIVO "FERRET" 5. FINP CONSULTAS: 1. ABRIR ARCHIVO "FERRET" 2. ENCUENTRA 3. SI r=0 ENTONCES DESPLEGAR "Ese artículo no se encuentra" DE OTRA FORMA DESPLEGAR iarticul$, CVS(icosto$), CVS(iprecio$), CVS(icant$) 4. CERRAR ARCHIVO "FERRET" 5. FINP CAMBIOS: 1. 2. 3. ABRIR ARCHIVO "FERRET" ENCUENTRA SI r=0 ENTONCES DESPLEGAR "Ese artículo no se encuentra" DE OTRA FORMA CAPÍTULO II. ESTRUCTURAS DE DATOS DESPLEGAR "0) NINGUNO" DESPLEGAR "1) Artículo" DESPLEGAR "2) Costo" DESPLEGAR "3) Precio" DESPLEGAR "4) Cantidad" PEDIR c SI c > 0 ENTONCES SI c= l ENTONCES PEDIR articul$ MOVER IZQUIERDA iarticul$ ← articul$ DE OTRA FORMA SI c = 2 ENTONCES PEDIR costo MOVER IZQUIERDA icosto$ ← MKS$(costo) DE OTRA FORMA SI c = 3 ENTONCES PEDIR precio MOVER IZQUIERDA iprecio$ ← MKS$(precio) DE OTRA FORMA PEDIR cant MOVER IZQUIERDA icant$ ← MKS$(cant) ESCRIBIR REGISTRO r 4. CERRAR ARCHIVO "FERRET" 5. FINP REPORTEG: 1. 2. 3. 4. ABRIR ARCHIVO "FERRET" n← LOF(l)/37 i← 1 SI i > n ENTONCES IR al paso 5 DE OTRA FORMA LEER REGISTRO i SI iarticul$ < > SPACE$(25) ENTONCES DESPLEGAR iarticul$, CVS(icosto$), CVS(iprecio$), CVS(icant$) i←i + 1 IR al paso 4 5. CIERRA ARCHIVO "FERRET" 6. FINP COMPRAS: 1. ABRIR ARCHIVO "FERRET" 2. ENCUENTRA 3. SI r=0 ENTONCES 413 414 PARTE III. PROGRAMACIÓN DESPLEGAR "Ese artículo no se encuentra" DE OTRA FORMA PEDIR cantcomp total ←CVS(icant$) + cantcomp MOVER IZQUIERDA icant$ ← MKS$(total) ESCRIBIR REGISTRO r 4. CERRAR ARCHIVO "FERRET" 5. FINP VENTAS: 1. ABRIR ARCHIVO "FERRET" 2. ENCUENTRA 3. SI r=0 ENTONCES DESPLEGAR "Ese artículo no se encuentra" DE OTRA FORMA PEDIR cantvend total ← CVS(icant$) - cantvend MOVER IZQUIERDA icant$ ← MKS$(total) ESCRIBIR REGISTRO r 4. CERRAR ARCHIVO "FERRET" 5. FINP ENCUENTRA: 1. 2. 3. 4. 5. 6. PEDIR articul$ articul$ ← articul$ + SPACE$(25-LEN(articul$)) n ← LOF(l)/37 r←0 i←l SI i > n ENTONCES IR al paso 7 DE OTRA FORMA LEER REGISTRO i SI articul$ = iarticul$ ENTONCES r←i i←n i←i+ 1 IR al paso 6 7. FINP Paso 4. Diagrama de flujo (véanse Figs. 11.14 a 11.22). Paso 5. Codificación y edición del programa: REM FERRET.BAS CAPÍTULO II. ESTRUCTURAS DE DATOS Figura 11.14 415 416 PARTE III. PROGRAMACIÓN Figura 11.15 CAPÍTULO II. ESTRUCTURAS DE DATOS ABRIR ARCHIVO "FERRET" Figura 11.16 417 418 PARTE III. PROGRAMACIÓN Figura 11.17 REM Programa de control de existencias MENÚ: CLS LOCATE 1,30: PRINT " F E R R E T E R Í A " LOCATE 5,34: PRINT "M E N U" LOCATE 6,34: PRINT " " …. CAPÍTULO II. ESTRUCTURAS DE DATOS Figura 11.18 419 420 PARTE III. PROGRAMACIÓN Figura 11 .19 CAPÍTULO I I . Figura 11.20 ESTRUCTURAS DE DATOS 421 422 PARTE III. PROGRAMACIÓN Figura 11.21 CAPÍTULO I I . Figura 11.22 ESTRUCTURAS DE DATOS 423 424 PARTE III. PROGRAMACIÓN LOCATE 10,31: PRINT "1) Altas" LOCATE 11,31: PRINT "2] Bajas" LOCATE 12,31: PRINT "3) Consultas" LOCATE 13,31: PRINT "4) Cambios" LOCATE 14,31: PRINT "5) Reporte general" LOCATE 15,31: PRINT "6) Compras" LOCATE 16,31: PRINT "7) Ventas" LOCATE 17,31: PRINT "8) Salir" LOCATE 21,34: INPUT "OPCIÓN -=>",op IF op = 1 THEN GOSUB ALTAS ELSE IF op = 2 THEN GOSUB BAJAS ELSE IF o p= 3T HE N GOSUB CONSULTAS ELSE IF op=4 THEN GOSUB CAMBIOS ELSE IF op = 5THEN GOSUB REPORTEG ELSE IF op = B THEN GOSUB COMPRAS ELSE IF op=7THEN GOSUB VENTAS END IF END IF END IF END IF END IF END IF ENDIF IF op = 8THEN GOTO FIN ELSE GOTO MENÚ END IF FIN: END ALTAS: OPEN "R", 1, "FERRET.DAT". 37 CAPÍTULO II. ESTRUCTURAS DE DATOS FIELD #1, 25 AS iarticul$, 4 AS icostoS, 4 AS iprecio$, 4 AS icant$ REM Localizar el registro en el que se va a dar la alta REM que es el primero dado de baja o el siguiente al último n=L0F[1]/37 r=n + 1 FOR i=1 TO n GET#1,i IF iarticul$=SPACE$(25) THEN r=i i=n END IF NEXT i CLS PRINT "ALTAS" PRINT PRINT "Favor de teclear los siguientes datos:" PRINT REM Pedir los datos en variables de memoria principal INPUT "Articulo: ",articul$ INPUT "Costo: ",costo INPUT "Precio: ",precio cant = O REM Pasar los datos a memoria intermedia LSET iarticul$ = articuIS LSET icosto$ = MKS$(costo) LSET iprecio$ = MKS$(precio) LSET icant$ = MKSS(cant) REM Escribir los datos a disco PUT#1,r CLOSE #1 PRINT INPUT "Alta realizada. Oprima <enter>...", enter$ RETURN BAJAS: OPEN "R". 1, "FERRET.DAT", 37 425 426 PARTE III. PROGRAMACIÓN FIELD #1, 25 AS iarticulS, 4 AS icostoS, 4 AS iprecioS, 4 AS icantS CLS PRINT "BAJAS" PRINT REM Localizar el registro GOSUB ENCUENTRA PRINT IF r=O THEN INPUT "Ese artículo no se encuentra. Oprima <ENTER>...",enter$ ELSE IF CVS[icant$] >O THEN INPUT "Ese artículo todavía tiene existencias. Oprima <ENTER> ...",enter$ ELSE REM Desplegar registro para confirmar baja PRINT "Artículo: ",iarticul$ PRINT "Costo: ",CVS[icosto$] PRINT "Precio: ",CVS[iprecio$] PRINT "Cantidad: ",CVS[icant$] PRINT INPUT "Es éste el artículo (S/N)";sn$ IF sn$="S"THEN REM Borrar lógicamente el registro LSET iarticul$=SPACE$(25) PUT #1,r PRINT INPUT "Baja realizada. Oprima <ENTER> ...",enter$ END IF END IF END IF CLOSE #1 RETURN CONSULTAS: OPEN "R". 1, "FERRET.DAT", 37 FIELD #1, 25 AS iarticul$. 4 AS icosto$, 4 AS iprecio$. 4 AS icant$ CLS PRINT "CONSULTAS" PRINT CAPÍTULO II. ESTRUCTURAS DE DATOS REM Localizar el registro GOSUB ENCUENTRA PRINT IF r=OTHEN INPUT "Ese artículo no se encuentra. Oprima <ENTER> ...",enter$ ELSE REM Desplegar datos PRINT "Artículo: ",iarticul$ PRINT "Costo: ",CVS(icosto$) PRINT "Precio: ",CVS(iprecio$) PRINT "Cantidad: ",CVS(icant$) PRINT INPUT "Oprima <ENTER> ...",enter$ END IF CLOSE #1 RETURN CAMBIOS: OPEN "R", 1, "FERRET.DAT", 37 FIELD #1, 25 AS iarticul$, 4 AS icostoS, 4 AS iprecio$, 4 AS icant$ CLS PRINT "CAMBIOS" PRINT REM Localizar el registro GOSUB ENCUENTRA PRINT IF r=O THEN INPUT "Ese artículo no se encuentra. Oprima <ENTER> ...",enter$ ELSE REM Desplegar menú de campos PRINT "O) NINGUNO" PRINT "1] Articulo" PRINT "2] Costo" PRINT "3) Precio" PRINT "4] Cantidad" PRINT PEDIRC: INPUT "Número de campo que desea cambiar";c 427 428 PARTE III. PROGRAMACIÓN PRINT IF c>0 THEN REM Hacer cambio en variable de memoria intermedia IF c=1 THEN INPUT "Articulo: ",articul$ LSET iarticul$ = articul$ ELSE IF c=2 THEN INPUT "Costo: ",costo LSET icosto$ = MKS$(costo) ELSE IF c = 3THEN INPUT "Precio: ",precio LSET iprecio$ = MKS$[precio] ELSE IFc=4THEN INPUT "Cantidad: ",cant LSET icantS = MKS$(cant] ELSE GOTO PEDIRC END IF END IF END IF END IF REM Escribir cambio en el disco PUT#1,r PRINT INPUT "Cambio realizado. Oprima <ENTER> ...",enter$ END IF END IF CLOSE #1 RETURN REPORTEG: OPEN "R". 1, "FERRET.DAT", 37 FIELD #1, 25 AS iarticul$, 4 AS icosto$, 4 AS iprecio$, 4 AS icant$ CLS PRINT “REPORTE GENERAL" PRINT n = L0F[1]/37 FOR i=1 TO n GET#1,i CAPÍTULO II. ESTRUCTURAS DE DATOS REM Desplegar sólo aquellos que no están dados de baja IF iarticul$< >SPACE$(25) THEN PRINT "Artículo: ",iarticul$ PRINT "Costo: ",CVS(icosto$) PRINT "Precio: ",CVS(iprec¡o$) PRINT "Cantidad: ",CVS(icant$) PRINT END IF NEXT i CLOSE #1 INPUT "Fin del archivo. Oprima <ENTER> ...",enter$ RETURN COMPRAS: OPEN "R", 1, "FERRET.DAT", 37 FIELD #1, 25 AS iarticul$, 4 AS icosto$, 4 AS ¡precio$, 4 AS icant$ CLS PRINT "COMPRAS" PRINT REM Localizar el registro GOSUB ENCUENTRA PRINT IF r=OTHEN INPUT "Ese artículo no se encuentra. Oprima <ENTER> ...",enter$ ELSE INPUT "Cuantos artículos se compraron";cantcomp total = CVS[icant$] + cantcomp REM Pasar nuevo total a memoria intermedia LSET icant$ = MKS$[total] REM Escribir actualización en disco PUT#1,r PRINT INPUT "Actualización efectuada. Oprima <ENTER> ...",enter$ END IF CLOSE #1 RETURN VENTAS: 429 430 PARTE III. PROGRAMACIÓN OPEN "R", 1, "FERRET.DAT", 37 FIELD #1, 25 AS iarticul$, 4 AS icosto$, 4 AS iprecio$, 4 AS icant$ CLS PRINT "VENTAS" PRINT REM Localizar el registro GOSUB ENCUENTRA PRINT IF r=O THEN INPUT "Ese artículo no se encuentra. Oprima <ENTER> ,..",enter$ ELSE INPUT "Cuantos artículos se vendieron";cantvend total = CVS(icant$) - cantvend REM Pasar nuevo total a memoria intermedia LSET icant$ = MKS$[total) REM Escribir actualización en disco PUT#1,r PRINT INPUT "Actualización efectuada. Oprima <ENTER> ...",enter$ END IF CLOSE #1 RETURN ENCUENTRA: REM Pedir el nombre del artículo que se va a buscar en el archivo INPUT "Teclea el nombre del artículo: ",articul$ articul$=articul$+SPACE$[25-LEN[articul$]] n=L0F[1]/37 REM Regresar en r el número de registro o O si no existe r=0 FOR i=1 TO n GET#1,i IF articul$=iarticul$ THEN r=i CAPÍTULO II. ESTRUCTURAS DE DATOS 431 i=n END IF NEXT i RETURN Ejercicio: Efectuar el paso de pruebas del programa PROBLEMA 2 Se pretende llevar un control de un grupo de alumnos por computadora, teniendo las siguientes opciones: 1) 2) 3) 4) 5) 6) Agregar alumnos nuevos Dar de baja alumnos Consultar los datos de algún alumno Modificar los datos de algún alumno Obtener un reporte de la información de todos los alumnos Obtener un reporte de la información de los alumnos aprobados (con calificación mayor o igual a 7) Los datos que se quiere tener de todos y cada uno de los alumnos son: matrícula, nombre, teléfono, dirección y calificación. Paso 1. Definición del problema: Dado en la redacción del problema. Paso 2. Planeación de la solución: La estructura de los registros y nombre de variables correspondientes de memoria principal e intermedia son: Campo matrícula nombre teléfono dirección calificación Longitud 7 30 10 50 4 Nombre en Mcm. principal Nombre en Mem. intermedia mat$ nom$ tel$ dir$ calif imat$ inom$ itel$ idir$ icalif$ Longitud del registro: 101 Aunque también el campo matrícula puede ser usado como campo clave, emplearemos el campo nombre como campo clave. El menú del programa quedará configurado con las siguientes opciones: 1) ALTAS 432 2) 3) 4) 5) PARTE III. PROGRAMACIÓN BAJAS CONSULTAS Y CAMBIOS REPORTE GENERAL REPORTE DE ALUMNOS APROBADOS 6) SALIR Las novedades de este programa con respecto al anterior son: 1) Las opciones de consultas y cambios se manejarán conjuntamente en una opción del menú 2) Aparece un reporte específico que es el de aquellos alumnos que han aprobado la materia Las acciones generales a seguir para cada una de las opciones del menú son: 1) ALTAS 1) Abrir el archivo 2) Especificar la estructura asignando espacio para los campos en memoria intermedia 3) Buscar el primer número de registro que esté inactivo para hacer allí la alta y si no hay se tiene que crear un nuevo registro al final del archivo 4) Pedir los datos de la entidad en variables de memoria principal 5) Pasar los datos de memoria principal a memoria intermedia 6) Escribir los datos de memoria intermedia a memoria secundaria en el número de registro encontrado en el paso 3 7) Cerrar el archivo 2) BAJAS 1) Abrir el archivo 2) Especificar la estructura asignando espacio para los campos en memoria intermedia 3) Leer el registro 4) Escribir espacios en el campo clave de memoria intermedia 5) Escribir el registro 6) Cerrar el archivo 3) CONSULTAS Y CAMBIOS 1) Abrir el archivo 2) Especificar la estructura asignando espacio para los campos en memoria intermedia 3) Leer registro 4) Desplegar datos de memoria intermedia 5) SI se desea modificar datos ENTONCES Pedir el nuevo dato en variable de memoria principal Pasar el dato de la variable de memoria principal a la de memoria intermedia Escribir el registro 5) Cerrar el archivo 4) REPORTE GENERAL 1) Abrir el archivo 2) Especificar la estructura asignando espacio para los campos en memoria intermedia 3) Verificar el número de registros existentes CAPÍTULO I I . ESTRUCTURAS DE DATOS 4) Í ← 1 5) SI i > número de registros existentes ENTONCES IR al paso 6 DE OTRA FORMA LEER REGISTRO i SI el registro está activo ENTONCES Desplegar variables de memoria intermedia i←i + 1 IR al paso 5 6) Cerrar el archivo 5) REPORTE DE ALUMNOS APROBADOS 1) 2) 3) 4) 5) Abrir el archivo Especificar la estructura asignando espacio para los campos en memoria intermedia Verificar el número de registros existentes i← 1 SI i > número de registros existentes ENTONCES IR al paso 6 DE OTRA FORMA LEER REGISTRO i SI el registro está activo y la calificación es mayor o igual a 7 ENTONCES Desplegar variables de memoria intermedia i ←i + 1 IR al paso 5 6) Cerrar el archivo Paso 3. Algoritmo: De ahora en adelante llamaremos: mat$ nom$ tel$ dir$ calif imat$ inom$ itel$ idir$ ¡calif$ op sn$ c n i r a matrícula (M. Principal) a nombre (M. Principal) a a a a a a a a a a a a a a teléfono (M. Principal) dirección (M. Principal) calificación (M. Principal) matrícula (M. Intermedia) nombre (M. Intermedia) teléfono (M. Intermedia) dirección (M. Intermedia) calificación (M. Intermedia) opción seleccionada variable que toma un valor de 'S' o 'N' para confirmar la baja de un registro número de campo que se desea cambiar número de registros del archivo contador de registros del archivo número de registro encontrado 433 434 PARTE III. PROGRAMACIÓN 1. 2. 3. 4. 5. 6. 7. 8. 9. DESPLEGAR "MENÚ:" DESPLEGAR "1) Altas" DESPLEGAR "2) Bajas" DESPLEGAR "3) Consultas y cambios" DESPLEGAR "4) Reporte general" DESPLEGAR "5) Reporte de alumnos aprobados" DESPLEGAR "6) Salir" PEDIR op SI op=l ENTONCES ALTAS DE OTRA FORMA SI op = 2 ENTONCES BAJAS DE OTRA FORMA SI op = 3 ENTONCES CONSCAMB DE OTRA FORMA SI op=4 ENTONCES REPORTEG DE OTRA FORMA SI op=5 ENTONCES REPORTEA 10. SI op = 6 ENTONCES IR al paso 11 DE OTRA FORMA IR al paso 1 11. FIN ALTAS: 1 2 3 4 5 ABRIR ARCHIVO "ALUMNOS" n←LOF(l)/101 r ←n+l i← 1 SI i > n ENTONCES IR al paso 6 DE OTRA FORMA LEER REGISTRO i SI inom$ = SPACE$(30) ENTONCES r←i i←n ¡←i + 1 IR al paso 5 6 PEDIR mat$ 7 PEDIR nom$ 8 PEDIR tel$ CAPÍTULO I I . 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. PEDIR dir$ PEDIR calif MOVER IZQUIERDA imat$ ← mat$ MOVER IZQUIERDA inom$ ← nom$ MOVER IZQUIERDA itel$ ←tel$ MOVER IZQUIERDA idir$ ←dir$ MOVER IZQUIERDA icalif$ ←MKS$(calif) ESCRIBIR REGISTRO r CERRAR ARCHIVO "ALUMNOS" FINP BAJAS: 1. 2. 3. ABRIR ARCHIVO "ALUMNOS" ENCUENTRA SI r=0 ENTONCES DESPLEGAR "Ese alumno no se encuentra" DE OTRA FORMA DESPLEGAR imat$, inom$, itel$, idir$, CVS(icalif$) PEDIR sn$ SI sn$="S" ENTONCES MOVER IZQUIERDA inom$ ← SPACE$(30) ESCRIBIR REGISTRO r 4. CERRAR ARCHIVO "ALUMNOS" 5. FINP CONSCAMB: 1. ABRIR ARCHIVO "ALUMNOS" 2. ENCUENTRA 3. SI r=0 ENTONCES DESPLEGAR "Ese alumno no se encuentra" DE OTRA FORMA DESPLEGAR "0) SALIR" DESPLEGAR "1) Matrícula:", imat$ DESPLEGAR "2) Nombre:", inom$ DESPLEGAR "3) Teléfono:", itel$ DESPLEGAR "4) Dirección:", idir$ DESPLEGAR "5) Calificación:", CVS(icalif$) PEDIR c SI c > 0 ENTONCES SI c=l ENTONCES PEDIR mat$ MOVER IZQUIERDA imat$ ← mat$ DE OTRA FORMA SI c=2 ENTONCES ESTRUCTURAS DE DATOS 435 436 PARTE III. PROGRAMACIÓN PEDIR nom$ MOVER IZQUIERDA inom$ ← nom$ DE OTRA FORMA SI c=3 ENTONCES PEDIR tel$ MOVER IZQUIERDA itel$ ← tel$ DE OTRA FORMA SI c=4 ENTONCES PEDIR dir$ MOVER IZQUIERDA idir$ ← dir$ DE OTRA FORMA PEDIR calif MOVER IZQUIERDA icalf$ ← MKS$(calif) ESCRIBIR REGISTRO r 4. CERRAR ARCHIVO "ALUMNOS" 5. FINP REPORTEG: 1. 2. 3. 4. ABRIR ARCHIVO ' 'ALUMNOS'' n←LOF(l)/101 i← 1 SI i > n ENTONCES IR al paso 5 DE OTRA FORMA LEER REGISTRO i SI inom$ O SPACE$(30) ENTONCES DESPLEGAR imat$, inom$, itel$, idir$, CVS(icalif$) i←i + 1 IR al paso 4 5. CIERRA ARCHIVO "ALUMNOS" 6. FINP REPORTEA: 1. 2. 3. 4. ABRIR ARCHIVO "ALUMNOS" n ← LOF(1)/101 i← 1 SI i > n ENTONCES IR al paso 5 DE OTRA FORMA LEER REGISTRO i SI c inom$ <> SPACE$(30) AND CVS(icalif$)> = 7 ENTONCES DESPLEGAR imat$, inom$, itel$, idir$, CVS(icalif$) i←i + 1 IR al paso 4 CAPÍTULO II. ESTRUCTURAS DE DATOS 5. CIERRA ARCHIVO "ALUMNOS" 6. FINP ENCUENTRA: 1. 2. 3. 4. 5. 6. PEDIR nom$ nom$ ← nom$ + SPACE$(30-LEN(nom$)) n←LOF(l)/101 r←0 i← 1 SI i > n ENTONCES IR al paso 7 DE OTRA FORMA LEER REGISTRO i SI nom$ = inom$ ENTONCES r←i i←n i ←i + 1 IR al paso 6 7. FINP Paso 4. Diagrama de flujo (véanse Figs. 11.23 a 11.29): Paso 5, Codificación y edición del programa: REM ALUMNOS.BAS REM Programa de control de alumnos MENÚ: CLS LOCATE 1,31: PRINT "CONTROL DE ALUMNOS" LOCATE 5,34: PRINT "M E N U" LOCATE 6,34: PRINT " - - - -“ LOCATE 9,31: PRINT "1) Altas" LOCATE 11,31: PRINT "2) Bajas" LOCATE 13,31: PRINT "3) Consultas y cambios" LOCATE 15,31: PRINT "4) Reporte general" LOCATE 17,31: PRINT "5) Reporte de alumnos aprobados" LOCATE 19,31: PRINT "6) Salir" LOCATE 22,34: INPUT "OPCIÓN -=> ",op IF op = 1 THEN GOSUB ALTAS ELSE IF op = 2 THEN GOSUB BAJAS ELSE 437 438 PARTE 111. PROGRAMACIÓN Figura 11.23 CAPÍTULO II. ESTRUCTURAS DE DATOS Figura 11.24 439 440 PARTE III. PROGRAMACIÓN ABRIR ARCHIVO "ALUMNOS "Ese alumno no imas$, inom$, itel, idir$, CVS(icalif$) CERRAR ARCHIVO "ALUMNOS Figura 11.25 se encuentra" CAPÍTULO I I . ESTRUCTURAS DE DATOS Figura 11.26 441 442 PARTE III. PROGRAMACIÓN Figura 11.27 CAPÍTULO II. ESTRUCTURAS DE DATOS Figura 11.28 443 444 PARTE III. PROGRAMACIÓN Figura 11.29 CAPÍTULO 11. ESTRUCTURAS DE DATOS IF op = 3 THEN GOSUB CONSCAMB ELSE IF op = 4 THEN GOSUB REPORTEG ELSE IF op = 5 THEN GOSUB REPORTEA END IF END IF END IF END IF END IF IF op = 6 THEN GOTO FIN ELSE GOTO MENU END IF FIN: END ALTAS: OPEN "R", 1, "ALUMNOS.DAT", 101 FIELD #1, 7 AS imat$, 30 AS inom$, 10 AS itel$, 50 AS idir$, 4 AS icalif$ REM Localizar el registro en el que se va a dar la alta REM que es el primero dado de baja o el siguiente al último n = L0F[1]/1O1 r=n + 1 F0R i=1 TO n GET#1,i IF inom$=SPACE$(3O) THEN r=i i=n END IF NEXT i CLS PRINT "ALTAS" PRINT PRINT "Favor de teclear los siguientes datos:" PRINT REM Pedir los datos en variables de memoria principal INPUT "Matrícula: ",mat$ 445 446 PARTE III. PROGRAMACIÓN INPUT "Nombre: ",nom$ INPUT 'Teléfono: ",tel$ INPLJT "Dirección: ",dir$ INPUT "Calificación: ",calif REM Pasar los datos a memoria intermedia LSET imat$ = mat$ LSET inom$ = nom$ LSET itel$ = tel$ LSET idir$ = dir$ LSET icalifS = MKS$(calif) REM Escribir los datos a disco PUT#1,r CLOSE #1 PRINT INPUT "Alta realizada. Oprima <ENTER> ,..",enter$ RETURN BAJAS: OPEN "R", 1, "ALUMNOS.DAT", 101 FIELD #1, 7 AS imat$, 30 AS inom$, 10 AS itel$, 50 AS idir$, 4 AS icalifS CLS PRINT "BAJAS" PRINT REM Localizar el registro GOSUB ENCUENTRA PRINT IF r=O THEN INPUT "Ese alumno no se encuentra. Oprima <ENTER> ...", enter$ ELSE REM Desplegar registro para confirmar baja PRINT "Matrícula: ",imat$ PRINT "Nombre: ",inom$ PRINT 'Teléfono: ",itel$ PRINT "Dirección: ",idir$ PRINT "Calificación: ",CVS(icalif$) PRINT INPUT "Es éste el alumno (S/N)";sn$ CAPÍTULO II. ESTRUCTURAS DE DATOS IFsn$="S"THEN REM Borrar lógicamente el registro LSET inom$=SPACE$[3O] PUT#1,r PRINT INPUT "Baja realizada. Oprima <ENTER>...",enter$ END IF END IF CLOSE #1 RETURN CONSCAMB: OPEN "R", 1, "ALUMNOS.DAT", 101 FIELD #1, 7 AS imat$, 30 AS inom$. 10 AS itel$, 50 AS idir$, 4 AS icalif$ CLS PRINT "CONSULTAS Y CAMBIOS" PRINT REM Localizar el registro GOSUB ENCUENTRA PRINT IF r=0 THEN INPUT "Ese alumno no se encuentra. Oprima <ENTER>...", enter$ ELSE REM Desplegar menú de campos PRINT "O] SALIR" PRINT "1] Matrícula: ",imat$ PRINT "2]Nombre: ",inom$ PRINT "3] Teléfono: ",itel$ PRINT "4] Dirección: ",idir$ PRINT "5]Calificación: ",CVS(icalif$) PRINT PEDIRC: INPUT "Número de campo que desea cambiar";c PRINT IF c>0 THEN REM Hacer cambio en variable de memoria intermedia IF c=1 THEN INPUT "Matrícula: ",mat$ 447 448 PARTE III. PROGRAMACIÓN LSET imat$ = mat$ ELSE IF c=2 THEN INPUT "Nombre: ",nom$ LSET inom$ = nom$ ELSE IFc=3THEN INPUT 'Teléfono: ",tel$ LSET itel$ = tel$ ELSE IF c=4 THEN INPUT "Dirección: ",dir$ LSET idir$ = dir$ ELSE IF c=5 THEN INPUT "Calificación: ",calif LSET icalif$ = MKS$(calif) ELSE GOTO PEDIRC END IF END IF END IF END IF END IF REM Escribir cambio en el disco PUT#1,r PRINT INPUT "Cambio realizado. Oprima <ENTER>...",enter$ END IF END IF CLOSE #1 RETURN REPORTEG: OPEN "R", 1, "ALUMNOS.DAT", 101 FIELD #1, 7 AS imat$, 30 AS inom$, 10 AS itel$, 50 AS idir$, 4 AS icalif$ CLS PRINT "REPORTE GENERAL" PRINT n = L0F[1]/101 F0R i=1 TO n GET#1,i REM Desplegar sólo aquellos que no estén dados de baja CAPÍTULO 11. ESTRUCTURAS DE DATOS IF inom$< >SPACE$[30] THEN PRINT "Matrícula: ",imat$ PRINT "Nombre: ",inom$ PRINT 'Teléfono: ",itel$ PRINT "Dirección: ",idir$ PRINT "Calificación: ",CVS(icalif$] PRINT ENDIF NEXT i CLOSE #1 INPUT "Fin del archivo. Oprima <ENTER>...",enter$ RETURN REPORTEA: OPEN "R", 1, "ALUMNOS.DAT", 101 FIELD #1, 7 AS imat$, 30 AS inom$, 10 AS itel$, 50 AS idir$, 4 AS icalif$ CLS PRINT "REPORTE DE ALUMNOS APROBADOS" PRINT n = L0F[1]/101 FOR i = 1 TO n GET#1,i REM Desplegar aquellos que no estén dados de baja REM y que su calificación es aprobatoria IF inom$<>SPACE$[3O] AND CVS(icalif$)>=7 THEN PRINT "Matrícula: ",imat$ PRINT "Nombre: ",¡nom$ PRINT 'Teléfono: ",itel$ PRINT "Dirección: ",idir$ PRINT "Calificación: ",CVS(icalif$) PRINT END IF NEXT i CLOSE # i INPUT "Fin del archivo. Oprima <ENTER>...",enter$ RETURN ENCUENTRA: REM Pedir el nombre que se va a buscar en el archivo INPUT "Teclea el nombre: ",nom$ nom$=nom$+SPACE$(3O-LEN(nom$]] n=L0F[1]/1O1 449 450 PARTE III. PROGRAMACIÓN REM Regresar en r el número de registro o O si no existe r=O FOR i=1 TO n GET#1,i IFnom$=inom$ THEN r=i i=n END IF NEXT i RETURN Ejercicio: Efectuar el paso de pruebas del programa Problemas propuestos 1. En un centro de video se requiere llevar un control de las películas que se rentan. Por cada película se necesita almacenar los siguientes datos: Clave de la película Título Clasificación Precio de renta Número de copias 1) 2) 3) 4) El programa debe manejar las siguientes opciones: Introducir los datos de una película. Reporte de todos los títulos de películas con determinada clasificación. Reporte de todos los títulos de las películas cuyo precio de renta esté entre 3000 y 5000. Dar de baja los datos de una película, dada su clave. 2. En una biblioteca se necesita un programa para almacenamiento y consulta de información de libros. La información que se maneja por libro es: Folio Título Autor Materia Estatus Lugar El estatus puede ser: R P D Reserva Prestado Disponible CAPÍTULO II. ESTRUCTURAS DE DATOS 451 El programa debe manejar las siguientes opciones: 1) Introducir los datos de un nuevo libro. 2) Generar un reporte de todos los libros que se encuentran en reserva. 3) Generar un reporte de todos los libros que se encuentran en determinado lugar y cuyo folio está entre determinado rango. 4) Dar de baja los datos de un libro dado su folio. 3. El departamento de material de apoyo académico necesita un programa que le ayude a manejar la información referente al control de los préstamos de equipo que se hace a profesores de una escuela. Los datos que comúnmente manejan son: Nombre del aparato Nombre del profesor Fecha del préstamo Fecha de regreso del equipo El programa debe manejar las siguientes opciones: 1) Introducir los datos de un nuevo préstamo de equipo. 2) Borrar los datos de un préstamo cuando éste haya sido devuelto. 3) Generar un reporte de todos los préstamos existentes. 4) Generar un reporte de todos los profesores a los que se les prestó determinado tipo de aparato. 4. En el Centro de Cómputo de cierta escuela se desea llevar un control por computadora de los discos de programas que se prestan a los alumnos. Para esto, el encargado pide que se haga un programa con un archivo que contenga los siguientes campos: Número del paquete (consecutivo) Nombre del programa o paquete Área a la que pertenece (sistema operativo, hoja de cálculo, etc.) Tipo de computadora en que corre Total de discos que lo componen Las claves para las áreas y para el tipo de computadora que se pueden usar son: Clave Área SO PP HEC BD Sistema operativo Procesador de palabras Hoja electrónica de cálculo Base de datos Clave Tipo de computadora MAC PS Macintosh IBM PS/2 452 PARTE III. PROGRAMACIÓN Además te pide que el programa muestre un menú con las opciones de: 1) Dar de alta un nuevo paquete. 2) Obtener un reporte general de todo el archivo. 3) Obtener reporte: a) por área b) por tipo de computadora 4) Dar de baja un paquete por su número. 5. El administrador de una empresa pide que se realice un programa que calcule el salario real de todos y cada uno de sus empleados. Para esto se necesita un archivo que contenga los siguientes datos: Clave del empleado (secuencial) Nombre del empleado Dirección y teléfono Salario nominal (máximo $15 000) Rango Antigüedad Las claves del rango que se pueden utilizar son: Clave Rango A B C D Gerente Director Supervisor Otro El programa debe realizar un reporte que muestre los siguientes datos: Nombre del empleado Rango Salario real Donde el salario real se calcula a partir del salario nominal considerando lo siguiente: a) se descuentan los impuestos y la cuota del IMSS según los porcentajes de la siguiente tabla: Clave de rango A B C D Impuestos 15% 10% 5% 3% IM 10% 8% 6% 2% b) se aumenta un 15% a todos por concepto de la caja de ahorros. Además el administrador pide un reporte de todos los empleados que ganan entre 0 y 3499 y que tienen 3 años o menos de antigüedad, que contenga los siguientes datos: CAPÍTULO II. ESTRUCTURAS DE DATOS 453 Clave Nombre del empleado Antigüedad Salario 1) 2) 3) 4) Deberás incluir un menú con las siguientes opciones: Dar de alta empleados. Obtener reporte de salarios reales. Obtener reporte de los que ganan menos de 3500 y tienen 3 o menos años de antigüedad. Dar de baja un empleado dando su nombre. 6. El gerente de mercadotecnia de la empresa "Escaleras y Aluminios S.A. de C.V." requiere un programa que le permita llevar un control de la venta de escaleras sencillas del modelo ES-001, y del modelo ES-002, que son escaleras de tijera. Para lo anterior se propone que la estructura del archivo tenga los siguientes datos: Fecha Nombre del vendedor Número de escaleras ES-001 vendidas Número de escaleras ES-002 vendidas Precio de la ES-001 Precio de la ES-002 1) 2) 3) 4) Las opciones que necesita el gerente deben ser las siguientes: Introducir los datos antes descritos. Reporte de las ventas y el total de las ventas de un vendedor en una fecha determinada. Dar de baja todos los registros de una fecha específica. Reporte de las ventas y el total de ventas en un mes determinado. 7. En una empresa de transportación de carga se requiere contar con un programa que permita tener un control de los envíos que se realizan. Esta empresa cuenta con 50 camiones, los cuales se encargan de entregar las mercancías en diferentes lugares de la república. El gerente necesita almacenar: Número del camión (secuencial = número de registro) Nombre del chofer Fecha de salida Fecha de regreso Ciudad a donde se va a entregar la mercancía Cantidad que se le cobra al cliente por el servicio Cantidad de viáticos que se requieren para realizar el viaje Los datos anteriores le permitirán tomar decisiones con respecto a los servicios que se solicitan, así como la disponibilidad de sus unidades. El gerente requiere lo siguiente: 1) Introducir los datos mencionados cada vez que un camión salga. 2) Hacer consultas por número de camión. 3) Reporte de los camiones que han viajado a una ciudad en específico y el total de dinero neto obtenido por los viajes a esa ciudad. 454 PARTE III. PROGRAMACIÓN 4) Dar de baja los datos en el momento en que el camión regrese por medio de la fecha de regreso. 8. Una fábrica produce diferentes tipos de computadoras; lo que implica que debe manejar mucha información de su producción como la siguiente: Número de serie Modelo de máquina Tipo de monitor Procesador Costo unitario Precio unitario Línea en la que se produce Para manejar esta información se requiere realizar un programa que maneje las siguientes opciones: 1) 2) 3) 4) Introducir los datos. Reporte de todos los modelos de máquinas con sus respectivos precios unitarios. Consulta de alguna máquina por medio del número de serie. Dar de baja los datos correspondientes a un número de serie de máquina. 9. En una relojería se venden básicamente tres tipos de joyas: relojes, anillos y aretes. Éstos se manejan por un número consecutivo que el dueño de la relojería les asigna según vayan llegando las joyas. El dueño te ha contratado para que elabores un sistema que le permita hacer lo siguiente: 1) Emitir un reporte de cuántos relojes, anillos o pares de aretes tiene en existencia. 2) Cuánto dinero tiene invertido en joyas, por cada categoría (relojes, anillos y aretes). 3) Cuando llegue alguna joya nueva se pueda registrar y se le asigne automáticamente el número que le corresponde. 4) En caso de vender alguna de las joyas, se dé de baja por la clave de la misma. El archivo debe manejar los siguientes datos: Clave de la joya (secuencial) Tipo o categoría Descripción de la joya Valor monetario 10. En un hospital hay tres tipos de internado: sala general, habitación normal y habitación de lujo. El director del hospital te pide elabores un programa que le permita realizar lo siguiente: 1) 2) 3) 4) Registro de nuevos pacientes. Emitir un reporte de los pacientes que están en habitación de lujo. Consulta por el número de cama de determinado paciente. Dar de baja los datos de un paciente cuando salga del hospital por medio del número de cama. CAPÍTULO II. ESTRUCTURAS DE DATOS 455 Para lograr lo anterior se requiere que se tengan almacenados los siguientes datos: Clave del paciente Nombre Número de cama Tipo de habitación Costo por día 11. Un ortodoncista, para manejar las actividades en su consultorio, maneja la siguiente información: Nombre del paciente Fecha de la cita Hora de la cita El doctor requiere controlar sus citas por medio de una computadora que le permita: 1) Registrar nuevas citas 2) Dado el nombre de un paciente poder ver los datos correspondientes a su cita. 3) Tener un reporte de todas las personas que debe atender en una fecha determinada con su horario correspondiente. 4) Dar de baja los datos de los pacientes en una fecha determinada. 12. Se requiere llevar un control de los discos y cassettes que se tienen en una casa disquera. La información que se requiere tener de cada disco o cassette es: Nombre del intérprete Nombre del disco Tipo: 1) Compact 2)LP 3) Cassette El programa debe ser capaz de realizar lo siguiente: 1) 2) 3) 4) Introducir nuevos datos. Reportar la información de los discos o cassettes de determinado intérprete. Reportar la información de las existencias por tipo de disco. Eliminar los datos dando el nombre del disco y tipo de disco. 13. A menudo las amas de casa llegan al supermercado a comprar su despensa y no saben lo que les hace falta; para colmo, días antes lo recordaron y no es sino hasta al llegar a su casa después de la compra, que se dan de topes contra la pared por no haberlo anotado. Una ama de casa moderna a la que no le gustan los "chipotes", ha decidido encargarle a usted un programa que: 1) Registre los productos que le hacen falta (con su cantidad correspondiente) conforme se le ocurran. 2) Emita un reporte de estos productos pendientes, incluyendo su número de registro en el archivo. 456 PARTE I I I . PROGRAMACIÓN 3) Elimine los productos adquiridos para que ya no salgan en la lista de pendientes, por medio del número de registro. 4) Despliegue el total de dinero aproximado que requerirá para comprar todos los productos pendientes. Se sugiere que el archivo tenga los siguientes campos: Nombre del artículo Cantidad Precio aproximado 14. Una persona sumamente olvidadiza desea tener almacenadas en la computadora las fechas de nacimiento de sus amigos y familiares, para felicitarlos oportunamente. Lo que desea es un programa con las siguientes opciones: 1) Una opción en donde al teclear la fecha, despliegue la(s) persona(s) que cumple(n) años en ese día. 2) Otra opción en donde pueda agregar nombres nuevos con su fecha de cumpleaños y teléfono, para saber a quién llamar y felicitarlos. 3) Otra opción en donde pueda eliminar a los conocidos con los que ya no trate y a los fallecidos. 4) Una opción en donde pueda consultar individualmente los datos de una persona, por su nombre. Los datos que debe manejar el archivo son: Nombre de la persona Fecha de nacimiento Teléfono 15. El centro de cómputo de una escuela requiere de un programa que le permita tener un control de las personas que ocupan las computadoras. Para esto requiere almacenar la información de los alumnos que llegan o ocupar máquinas. La información es: Matrícula Nombre del alumno Carrera Semestre Tipo de computadora Número de computadora Fecha Hora El programa debe contener lo siguiente: 1) Registrar al alumno al momento en que entre. 2) Proporcionar los datos de todos los alumnos que ocuparon una computadora en fecha y computadora determinadas. 3) Proporcionar un reporte de todos los alumnos que trabajaron en una fecha específica. 4) Dar de baja a algún alumno que se arrepintió y decidió no hacer uso de la computadora. CAPÍTULO I I . ESTRUCTURAS DE DATOS 457 RESUMEN Estructura de datos: se le llama así a la organización que reciben los datos para poder tratar a un conjunto de ellos como una unidad. Como ejemplo tenemos a los arreglos, matrices y archivos de datos, de los cuales los dos primeros están relacionados con el tratamiento de datos en memoria principal, mientras los archivos de datos están relacionados con la memoria secundaria. Arreglo: se le llama así a la estructura de datos que organiza sus datos de manera lineal. Los arreglos emplean un índice entre paréntesis para referenciar a los elementos de que consta. Matriz: es aquella estructura de datos que organiza sus datos en forma de tabla, para lo cual emplea dos índices: uno para indicar el renglón y otro la columna, para referenciar sus datos. A las matrices se les llama también tablas o arreglos de dos dimensiones. Instrucción DIM: es usada para declarar arreglos y matrices. Instrucción OPTION BASE: define el rango inferior de los índices para los arreglos y matrices. Archivo de datos: estructura de datos que sirve para almacenar información en memoria secundaria, organizada en registros y campos. Registro: información referente a una entidad, formado por un conjunto de campos. Campo: característica de una entidad. Tipos de archivos de datos 1) Secuenciales: son archivos que para accesar un registro en particular se deben recorrer todos los anteriores y sus registros pueden ser de longitud variable. 2) Aleatorios o directos: permiten tener acceso a cualquier registro sin tener que recorrer los que se encuentren almacenados antes que él. En este tipo de archivos cada registro tiene un número que lo identifica para así poder localizar cualquier registro en cualquier momento con sólo referenciar su número. Todos sus registros tienen la misma longitud. Archivos de datos aleatorios Memoria intermedia o Buffer: parte de la memoria principal que emplea Quick Basic para ser intermediaria entre la memoria principal y la memoria secundaria durante el manejo de los archivos de datos. Campo clave: campo cuyo contenido en cada registro lo diferencia de los demás. Operaciones con los archivos aleatorios 1) Altas: se refiere a la inclusión de los datos de un nuevo registro en el archivo de datos. 2) Bajas: se refiere a la exclusión de un registro como parte activa del archivo de datos. 3) Consultas: se refiere al acceso y despliegue de los datos de un registro activo por medio de su campo clave. 4) Cambios: se refiere al cambio en algún dato de los campos de un registro activo. 5) Reporte general: es el despliegue de los campos de todos los registros activos de un archivo. 6) Reportes específicos: es el despliegue de los campos de todos los registros que cumplan con una condición específica y estén activos en un archivo. 458 PARTE I II . PROGRAMACIÓN Instrucciones y funciones para el manejo de archivos de datos aleatorios Instrucción OPEN: permite abrir un archivo de datos, ya sea para escribir o leer datos en él. Instrucción FIELD #: asigna espacio en la memoria intermedia para los campos que componen los registros. Instrucción LSET: mueve un dato de memoria principal a memoria intermedia acomodando el dato que se mueve justificado a la izquierda. Instrucción RSET: mueve un dato de memoria principal a memoria intermedia acomodando el dato que se mueve justificado a la derecha. Instrucción PUT #: graba en memoria secundaria un registro con el contenido de la memoria intermedia. Instrucción GET #: pasa el registro especificado de memoria secundaria o memoria intermedia. Instrucción CLOSE #: cierra un archivo de datos. Función LOF: regresa el número de caracteres que tiene un archivo. Funciones MKS$, MKD$, MKI$, MKL$: sirven para convertir datos de tipo numérico a alfanumérico, ya sean reales de simple precisión, reales de doble precisión, enteros o enteros largos. Funciones CVS, CVD, CVI, CVL: se usan para convertir datos alfanuméricos en numéricos, ya sean reales de simple precisión, reales de doble precisión, enteros o enteros largos. Instrucciones para dar presentación a un programa Instrucción CLS: limpia la pantalla y sitúa el cursor en la esquina superior izquierda. Instrucción LOCATE: sitúa el cursor en cualquier parte de la pantalla que se desee. ÍNDICE ANALÍTICO A acumulador, 128, 205 algoritmo, 11, 13, 17-19 archivo, 217, 221, 393 de datos, 392, 394 secuencial, 395, 457 aleatorio, 395, 457 operaciones, 398, 457 alta, 398, 457 baja, 398, 457 cambio, 398, 457 consulta, 398, 457 reporte específico, 398, 457 reporte general, 398, 457 arreglo, 368, 457 B bandera, 175, 205 BASIC, 17, 24, 210, 215 bloques, 15 terminales, 15 de entrada/salida, 15 de entrada, 15, 16 de salida, 16 de proceso, 16 de decisión, 16 condicionales, 16, 17, 54, 55 de conexión, 16, 17 anidados, 78 buffer, 395, 457 C campo, 394, 457 ciclo, 98, 99, 205 con número determinado de iteraciones, 99,101,275 con número indeterminado de iteraciones, 102, 262 cinta, 7 codificación, 11, 17-19 componentes físicos, 4, 8 componentes lógicos, 4, 8 computadora, 4, 5, 6, 8, 10, 11, 13, 14, 19, 24 concatenación, 325 condición, 14, 17, 53, 54 condicional, 55 constante, 25, 26, 32, 212, 215 contador, 100, 128, 205 contenido de la variable, 25, 211 CPV, 6, 8 crear un programa, 217, 221 cuerpo del ciclo, 98, 99, 205 D datos 4, 6, 18, 24, 32 definición del problema, 11, 12, 19 depuración, 11, 18, 19 desplegar datos, 13 diagrama de flujo, 11, 15, 17, 19, 55 disco duro, 7, 8 disco flexible, 7, 8 disco óptico, 7 diskette, 7 dispositivos de almacenamiento permanente, 5, 6, 8 de entrada, 5, 6, 8 de entrada/salida, 5, 6, 8 de procesamiento, 5, 8 de salida, 5, 6, 8 periféricos, 6 documentación, 11, 18, 19 E edición, 11, 17, 19 editor de textos, 17 ejecutar operaciones, 13, 14 460 ÍNDICE ANALÍTICO entrada, 12, 15, 225 estructura cíclica, 98, 99, 205 estructura de datos, 368, 457 evaluar condiciones, 13, 14 expresión, 26, 27, 32, 212, 215 alfanumérica, 14 aritmética, 26-28 elementos de, 26, 212 lógica, 26, 28 numérica, 14 relacional, 26 F fórmula, 3, 8 función, 312, 345, 349, 365 función predefinida, 314, 345 numéricas, 313, 345 ABS, 315, 345 ARCTAN, 314, 345 COS, 313, 345 FIX, 315, 345 INT, 316, 345 SIN, 313, 345 SQR, 315, 345 TAN, 314, 345 alfanuméricas, 323, 345 LEFT$, 323, 345 LEN, 324, 345 MID$, 324, 345 RIGHT$, 323, 345 SPACE$, 325, 345 función definida por el usuario, 339, 345 de una línea, 340 multilíneas, 340 funciones CLS, 407, 458 CVD, 405, 458 CVI, 405, 458 CVL, 405, 458 CVS, 405, 458 I identificador, 211 impresora, 6, 7, 8, 13 imprimir un programa, 220, 221 información, 4, 5, 6, 8, 11, 12 instrucción, 4, 17 cali, 350 chain, 350 CLOSE#, 404, 458 de interacción usuario-programa, 223, 236 de control de ejecución, 238 condicional, 238, 310 incondicional, 261, 310 DIM, 369, 457 END, 229 FIELD#, 401, 458 FOR...NEXT, 275-282, 310 GET#, 403, 458 GOSUB...RETURN, 349 GOTO, 261,310 IF...ELSE...ENDIF, 239, 240, 310 INPUT 225, 226, 236 LET 223, 224, 236 LOCATE, 407, 458 LOF función, 404, 458 LSET, 401, 458 MKD$ función, 405, 458 MKI$ función, 405, 458 MKL$ función, 405, 458 MK$ función, 405, 458 OPEN, 400, 458 OPTION BASE, 370, 457 PRINT, 226, 227, 236 PUT#, 403, 458 REM, 227, 228, 236 RSET, 402, 458 SUB...ENDSUB, 350 G guardar un programa, 219, 221 L lápiz óptico, 5, 8 lenguaje, 7, 8, 11, 17 bajo nivel, 7 alto nivel, 7 H hardware, 4, 5, 7, 8 M mantenimiento, 11, 18, 19 ÍNDICE ANALÍTICO matriz, 381,457 memoria intermedia, 395, 457 memoria principal, 6, 8, 25 memoria secundaria, 6, 8 metodología, 11, 18, 24 modularización, 349, 365 módulo, 347, 365 monitor, 6 mouse, 5, 8 N nombre de la variable, 25, 211 números, 13, 14 O operación, 15 operaciones aritméticas, 6, 14, 24, 27 lógicas, 6 operador, 26, 28, 32 aritmético, 26, 27, 32, 213 asociativo, 26, 27, 32, 213 lógico, 26, 28, 32, 213 relacional, 26, 28, 32, 213 P palabras, 13, 14 palabras reservadas, 214, 215 pantalla, 6, 8, 13 problemas repetitivos, 34, 98, 205 simples, 34, 103 compuestos, 34, 176, 205 múltiples, 34 secuenciales, 34, 205 selectivos, 34, 205 simples, 34, 53, 54, 205 compuestos, 34, 53, 72, 205 461 procedimiento, 350, 365 procesamiento de información, 4,5,8,10,19,24, 26,32 proceso, 5, 98, 205 programa, 10, 13, 17, 18, 351, 365 programación estructurada, 312 programador, 10, 11, 13, 18, 19 Q Quick Basic, 210, 217 R ratón, 5, 8 recuperar un programa, 219, 221 registro, 394, 457 S salida, 12, 15, 226 sintaxis, 17 sistema computacional, 4, 8 sistema operativo, 7, 8 software, 4, 7, 8 de aplicación, 7, 8 del sistema, 7, 8 sort burbuja, 375 subprograma, 350, 365 subrutina, 349, 365 sujeto de acción, 10, 11, 19 T teclado, 5, 8 V variable, 13, 14, 25, 26, 32, 212, 215 Z zonas de memoria, 13, 25, 26, 32, 211, 215