Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de...

151
Universidad Nacional de Luján Departamento de Ciencias Básicas División Estadística y Sistemas Cuaderno de Estudio Metodología de la Programación Jorge Peri Carlos Rodriguez Jorge Scucimarri Fernando Bordignon Material destinado a alumnos que cursen las asignaturas Computación ó Informática en carreras no relacionadas con los Sistemas de Información. Publicación oficial del Departamento de Ciencias Básicas de la Universidad Nacional de Luján, aprobada en el Concurso Anual de Publicaciones DCB 2002. Enero - 2004

Transcript of Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de...

Page 1: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

Universidad Nacional de Luján Departamento de Ciencias Básicas

División Estadística y Sistemas

Cuaderno de Estudio

Metodología de

la Programación

Jorge Peri Carlos Rodriguez Jorge Scucimarri Fernando Bordignon

Material destinado a alumnos que cursen las asignaturas Computación ó Informática en carreras no relacionadas con los Sistemas de Información.

Publicación oficial del Departamento de Ciencias Básicas de la Universidad Nacional de Luján, aprobada en el Concurso Anual de Publicaciones DCB 2002.

Enero - 2004

Page 2: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

2

Page 3: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

3

Índice General

Primera Parte: Conceptos Básicos

Introducción 5 Procesamiento 6 Algoritmos 9 Programas 11 Definiciones Básicas 13 Máquina de Von Neumann 14 Lenguajes de Programación 18 Lenguaje de Máquina 18 Lenguaje Ensamblador 19 Lenguajes de Alto Nivel 19 Intérprete 19 Compilador 20 Ventajas de los Lenguajes de Alto Nivel 20 Desventajas de los Lenguajes de Alto Nivel 21 Paradigmas de Programación 21 Metodología de la Programación 24 Sistemas de Información 25 Ingeniería de Software 26 Guía de Lectura - Conceptos Básicos 29

Segunda Parte: Introducción a la Programación

Datos 31 Tipos de Datos Primitivos 32 Variables 33 Declaración de Constantes y Variables 34 Expresiones y Operadores 35 Operadores Aritméticos 35 Operadores Relacionales 36 Operadores Lógicos 40 Orden de Evaluación de los Operadores 42 Funciones del Lenguaje 43 Trabajo Práctico I - Introducción a la Programación. 45

Tercera Parte: Programación Estructurada: Estructuras de Control

Estructogramas o Diagramas Chapín 50 Escritura de Programas 52 Entrada y Salida de Información 53 Estructura Secuencial 57 Trabajo Práctico II - Estructura Secuencial 59 Estructura de Selección 63 Decisiones 63 Estructura Condicional Simple 64 Estructura Condicional Compuesta 66 Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional 81

Page 4: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

4

Estructura Repetitiva o Iterativa 87 Estructura Mientras 88 Estructura Repetir 91 Estructura Repetir-Hasta 92 Estructura Para 94 Búsqueda del Extremo 97 Validación de Datos 98 Trabajo Práctico IV - Estructura Repetitiva 100

Cuarta Parte: Programación Estructurada: Archivos Secuenciales y Arreglos

Archivos Secuenciales 107 Operaciones Sobre Archivos 110 Grabación de Datos 110 Recuperación de Datos Grabados 113 Organización Secuencial 115 Acceso Secuencial 115 Modificaciones de Datos Sobre Archivos Secuenciales 117 Trabajo Práctico V - Archivos Secuenciales 121 Arreglos 125 Ordenamientos de Vectores 133 Ordenamiento por Inserción 138 Búsqueda en Vectores 139 Trabajo Práctico VI – Arreglos 141

Bibliografía 151

Page 5: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

5

Primera Parte Conceptos Básicos

Introducción Antes de tratar la problemática de la programación, se debe definir que es una computadora. Podemos decir que es una máquina capaz de procesar información, entendiendo por procesar a la tarea de producir un cambio de forma en la información. Conceptualmente se puede definir al computador como una máquina que puede realizar tres tareas básicas:

- Ingresar datos - Procesar datos - Producir una salida de datos

ENTRADA SALIDAPROCESO

La entrada y salida de datos, son las tareas que permiten que la computadora se comunique con el exterior, siendo necesario para ello que el mismo posea mecanismos que permitan al usuario poder ingresar datos y recibir las salidas que el computador emita. Estos mecanismos se denominan dispositivos de Entrada/Salida, y es necesario contar con al menos uno de cada tipo para que la computadora interactué con su contexto. Existe gran variedad de dispositivos, adecuándose cada uno de ellos a la forma en que se encuentre la información de entrada o en que deba quedar la de salida. Dispositivos de entrada

El más utilizado es sin lugar a dudas es el teclado, que se basó en un mecanismo similar al de las máquinas de escribir, contando a su vez con una serie de teclas que cumplen funciones específicas. Otros dispositivos de entrada son el mouse o apuntador que permite desplazar un puntero por la pantalla para seleccionar una tarea a realizar, el

Page 6: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

6

lápiz óptico que permite ingresar al computador movimientos en distintas direcciones, el scanner que posibilita el ingreso de una imagen y una extensa lista compuesta por dispositivos que se crean para facilitar el ingreso de información que se encuentra en distintas formas y estados.

Dispositivos de salida

En cuanto a este tipo de dispositivos, los más utilizados son la el monitor y la impresora. Existe gran variedad de monitores: color, monocromáticos, de alta y baja resolución, etc. Cada tipo de monitor se adecua al tipo de datos que se quiera mostrar. La impresora permite la obtención de una salida permanente que es impresa sobre papel de distintas medidas según el tamaño deseado. También podemos encontrar distintos tipos de impresora, variando entre ellas la velocidad de impresión, el tipo de caracteres que pueden imprimir, la capacidad de graficar o no, la posibilidad de imprimir a color, etc. El plotter es un dispositivo de impresión que permite el trazado de líneas de distintos colores, utilizado generalmente en la impresión de planos.

Dispositivos de Entrada/Salida

Estos dispositivos tienen la capacidad de enviar y recibir datos al computador y, a su vez, permiten el almacenamiento de información en forma permanente, esto es, aún después de apagado el computador. Existen dos grandes grupos dentro de estos dispositivos, los mecánicos y los magnéticos, tendiendo estos últimos a desplazar a los primeros. Dentro de los mecánicos se encuentran la tarjeta y la cinta perforada, ambas casi en desuso. En el grupo de los magnéticos encontramos a la cinta magnética, que es un carrete de cinta abierta, que se utiliza generalmente para almacenar información de resguardo o backup, el casette o cartridge que es un cartucho de cinta magnética cerrado y se utiliza con fines similares al los de la cinta abierta. Las tarjetas magnéticas (plástica, metálica o de papel), que tienen una banda de cinta magnética adherida a ella, y los diskettes y discos magnéticos, que son los dispositivos de este tipo más utilizados en la actualidad, por su gran velocidad de lectura y grabación, gran capacidad de almacenamiento y facilidad de acceso a la información almacenada en los mismos.

Page 7: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

7

A estos dispositivos la información llega luego de haber ingresado al computador por un dispositivo de entrada, y sale al exterior pasando por la computadora hacia un dispositivo de salida.

DISPOSITIVO

ENTRADA

DISPOSITIVO

SALIDACOMPUTADORA

DISPOSITIVO

SALIDA

Procesamiento El computador por sí solo es incapaz de procesar información. El conjunto de dispositivos descriptos anteriormente conforma un autómata capaz de efectuar las tareas que se le ordenan, pero carece del conocimiento necesario para decidir cuáles son esas tareas que debe ejecutar. Lo que se denomina sencillamente "procesamiento de la información" constituye una actividad por lo general muy compleja, mientras que la máquina puede ejecutar solamente tareas elementales, como hacer cuentas, comparaciones, imprimir, almacenar datos, etc. Veamos un ejemplo típico y relativamente sencillo: Ejemplo 1 Liquidación de haberes: Se desea hacer un recibo de sueldo de un determinado empleado de una empresa, ello requiere una serie de datos de entrada, que podrían ser los siguientes:

a) Nombre y apellido del empleado.

Page 8: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

8

b) Número de legajo. c) Categoría d) Antigüedad e) Estado civil f) Cantidad de hijos g) Obra social h) Premios i) Sindicato etc.

En función de toda esta información el computador deberá realizar los cálculos necesarios y producir las siguientes salidas:

a) Recibo de sueldo b) Cheque c) Descuento para la caja de jubilación d) Aporte a la obra social e) Aporte al sindicato etc.

En un caso real este proceso se efectúa para muchos empleados, con lo cual los descuentos y aportes se imprimen en forma de listados. Para poder producir la salida requerida en función de los datos de entrada, el computador deberá ejecutar una cantidad de tareas como las siguientes:

a) En función de la categoría, consultar en una tabla cuál es el sueldo básico. b) En función de la antigüedad, calcular el adicional por ese concepto. c) Calcular los adicionales por esposa, hijos y escolaridad. d) Calcular los aportes a la caja de jubilación, obra social y sindicato. e) Calcular el neto a cobrar etc.

Como se ve, el procesamiento necesario para producir una liquidación de haberes, es el resultado de la ejecución de una serie de tareas básicas, las cuales pueden descomponerse en otras aún más elementales. Para que estas tareas básicas conduzcan al resultado que se pretende deben ser ejecutadas en un cierto orden, y tanto la definición de las tareas como el orden deben estar definidos previamente al momento de la ejecución. La definición de

Page 9: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

9

las tareas se efectúa mediante lo que denominamos "instrucciones", que son órdenes que el computador puede identificar y ejecutar. Algoritmos Un algoritmo es la especificación rigurosa de una secuencia de pasos para alcanzar un resultado deseado en un tiempo finito. En su acepción más general, el término algoritmo puede aplicarse a casi cualquier actividad de la vida diaria, son algoritmos las recetas de cocina, los programas de actos, las instrucciones de uso de un aparato, etc. En todos estos casos existen dos características vinculadas con el concepto de algoritmo, por un lado se trata de tareas (batir un huevo, ejecutar una nota musical, etc.), y por el otro hay un orden cronológico en el cuál deben ser ejecutadas. Si se examina una de estas tareas o instrucciones, se observa que su ejecución implica a su vez la ejecución ordenada de otras tareas más elementales, por ejemplo para batir un huevo se requiere tomar un recipiente, tomar un batidor, cascar los huevos, colocarlos dentro del recipiente, etc. A su vez, cada una de estas tareas puede describirse en función de otras más elementales aún, y así sucesivamente. Con este concepto, podemos decir que un algoritmo es un conjunto finito de algoritmos para producir un proceso determinado, esto es lo que denominamos "definición recursiva". Para que esta definición no conduzca a una sucesión infinita, sería necesario definir aquellas instrucciones elementales que no pueden definirse como algoritmos.

Algoritmos comunes

° Ver una película

1. Buscar la película 2. Si el televisor y la reproductora de vídeo se hallan

apagados, encenderlos 3. Sacar la película del estuche

Page 10: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

10

4. Introducirla en la videocasetera 5. Tomar el control remoto 6. Sentarse en un sillón 7. Iniciar la reproducción y ajustar controles de imagen y

sonido 8. Ver la película

° Algoritmo para cambiar una rueda a un automóvil.

1. Inicio.

2. Traer gato y llanta repuesto.

3. Aflojar tornillos de las llantas.

4. Levantar el coche con el gato.

5. Sacar los tornillos de las llantas.

6. Quitar la llanta.

7. Insertar la llanta de repuesto.

8. Colocar los tornillos.

9. Ajustar los tornillos.

10. Bajar el gato.

11. Guardar la llanta y el gato

12. Fin

° Determinar el mayor de tres números enteros. Pasos del algoritmo :

1.- Comparar el primero y el segundo entero, deduciendo cuál es el mayor.

Page 11: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

11

2.- Comparar el mayor anterior con el tercero y deducir cuál es el mayor. Este será el resultado.

Los pasos anteriores se pueden especificar con mayor detalle, es decir realizar un refinamiento del algoritmo.

1.- Solicitar el primer número (N1)

2.- Solicitar el segundo número (N2)

3.- Comparar N1 con N2 y determinar el mayor y llamarlo MAYOR; si los números son iguales, seleccionar N1 y llamarlo MAYOR.

4.- Solicitar el tercer número (N3)

5.- Comparar MAYOR con N3 y seleccionar el mayor y llamarlo MAYOR; si los dos números son iguales, seleccionar a MAYOR.

6.- Mostrar el valor MAYOR.

7.- Fin

Programas El computador es una herramienta para la resolución de problemas, más potente será cuanto mayor sea su capacidad de modelar soluciones adecuadas para cada problema. LLamamos programación a la tarea de construir programas que efectúen el procesamiento de la información que nos proponemos. Un esquema de procesamiento de la información puede describirse como sigue:

a) Análisis del Problema, dando como resultado un modelo preciso del ambiente del problema. b) Diseño de una solución. Teniendo en cuenta los datos de entrada y de salida.

Page 12: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

12

c) Especificación de algoritmos. Es decir, cuál es la secuencia lógica de instrucciones que el computador debe ejecutar para producir los datos de salida a partir de los datos de entrada, teniendo en cuenta que una transformación sobre los mismos datos puede resolverse con una utilización de recursos diferentes. d) Escritura de programas. El algoritmo debe expresarse en un lenguaje de programación concreto y acorde a las característica del problema, que la maquina pueda interpretar y ejecutar. e) Verificar. Una vez escrito el programa en un lenguaje determinado se debe verificar que su ejecución conduce al resultado deseado con datos representativos del problema real.

Una de las ventajas fundamentales del procesamiento electrónico es que los tareas descriptas arriba se efectúan una sola vez, y el programa queda disponible para ejecutarse cuantas veces se desee. En el ejemplo de la liquidación de haberes, una vez construido el programa, será ejecutado todos los meses para que produzca la liquidación, cambiando únicamente los datos de entrada, debido a aumentos, cambios de antigüedad, etc.

Page 13: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

13

Definiciones Básicas Informática: Disciplina que estudia el análisis y resolución de problemas con la finalidad de procesar información automáticamente. Computadora: Maquina electrónica con capacidad de realizar cálculos numéricos y lógicos, cuya finalidad es ejecutar programas almacenados que resuelven problemas. Dato: Es una representación de un hecho. Información: Son datos recolectados y procesados de alguna forma, que poseen una relevancia para un observador particular. De forma más estricta, información es cualquier hecho que reduzca la incertidumbre. Hardware: Conjunto de elementos físicos relacionados que componen una computadora. Software: Son los datos y programas que hacen funcionar a una computadora. Es de carácter intangible. Algoritmo: Conjunto finito y no ambiguo de etapas expresadas en un cierto orden, que a partir de condiciones iniciales pueda resolver un problema en un tiempo finito. Programa: Algoritmo codificado en algún lenguaje de programación, que una computadora es capaz de interpretar y ejecutar , a los efectos de resolver un determinado problema. Usuario: Persona que utiliza los servicios que le brinda la computadora.

Page 14: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

14

Máquina de Von Neumann En el año 1946, John Louis Von Neumann -junto a otros colaboradores- escribió un artículo de investigación titulado "First Draft of a Report of the EDVAC". En el mencionado documento se expresaban algunas ideas acerca de como debía operar una computadora. A tales conceptos, derivados del artículo, se los conoce con el nombre de Máquina o Arquitectura de Von Neumann; y han brindado las bases para la construcción y el desarrollo de computadoras hasta los días actuales. Hasta antes de Von Neumann la programación de una computadora consistía directamente en la reordenación física de sus componentes. La arquitectura Von Neumann se fundamenta en el concepto de programa almacenado; donde de forma revolucionaria, plantea que las instrucciones y los datos tenían que almacenarse juntos en un medio común y uniforme -denominado memoria-, en vez de separados. Así las instrucciones y los datos podían leerse y escribirse bajo el control del programa. Nótese que un elemento de memoria o celda tiene una calidad ambigua con respecto a su interpretación -es instrucción o dato-; esta ambigüedad se resuelve al momento de la ejecución del programa almacenado, debido a que él mismo determinará que celdas contienen datos y cuales instrucciones. Un segundo concepto, introducido por Von Neumann, es la ruptura de secuencia. Se dotó a la computadora de una instrucción denominada "salto condicional", donde según el resultado de una operación, se ejecutaría la siguiente instrucción u otra. Junto con la arquitectura se definió un ciclo de trabajo, en toda ejecución de programa, que constaba de las siguientes operaciones:

Mientras haya instrucciones { Tomar de la memoria la siguiente instrucción.

Decodificar la instrucción. Tomar de la memoria él o los operandos. Ejecutar la operación. Almacenar los resultados. }

A la computadora debe considerársela como una máquina procesadora de información capaz de transformar un programa escrito en un lenguaje de alto nivel -generalmente expresado en lenguaje natural- en un programa en lenguaje

Page 15: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

15

que el hardware pueda decodificar y ejecutar. La tarea de conversión de lenguaje de alto nivel a lenguaje de máquina la debe realizar un programa denominado compilador. La máquina propuesta por Von Neumann consiste de los siguientes elementos: (a) una memoria, (b) una Unidad Aritmético Lógica (UAL) , (c) una Unidad Central de Proceso (UCP) y (d) una Unidad de Control (UC) , cuya función básica es la de gerenciar el ciclo de trabajo descripto anteriormente.

Flujo de control

Unidad Central de Proceso

Memoriade

trabajo

Unidadde

Entrada

Unidadde

Salida

Unidad de Control

UnidadAritméticoy Lógica

Registros

Flujo de información

Arquitectura original Von Neumann

Memoria Es un componente de hardware destinado al almacenamiento de los programas y los datos. A la memoria de trabajo, donde es posible leer y escribir, se la conoce con el nombre de memoria de acceso aleatorio (RAM). Su nombre deriva de que es posible acceder directamente a cualquier lugar de ella. Existe un segundo tipo de memoria, de solo lectura, denominada ROM; sobre la cual los fabricantes graban programas y datos básicos para el funcionamiento de la computadora. Unidad Aritmético y Lógica La unidad aritmética y lógica es el componente encargado de realizar las operaciones tanto aritméticas como lógicas derivadas de la ejecución de un programa, es dirigida por la Unidad de Control. La UAL comprende:

Page 16: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

16

• Varios registros de memoria llamados acumuladores, donde se almacenan los resultados parciales de las operaciones .

• Circuitos dedicados a la suma, resta, multiplicación, división,

comparación y testeo.

La Unidad de Control

La unidad de control es el módulo encargado de coordinar las operaciones que se deben realizar para procesar la información. Interpreta las instrucciones del programa y genera señales de control necesarias para gobernar el funcionamiento del resto de los elementos que componen una computadora. Un pequeño espacio de memoria denominado "buffer de almacenamiento" se sitúa en la unidad de control, y en él se mantienen temporalmente los datos que fluyen desde o hacia la memoria principal. Además existen una serie de registros de propósito general que sirven como almacenamiento interno a la UCP. Ejemplos de tales registros son:

El registro de instrucciones o contador de programa (IR), que contiene el código de la próxima instrucción a ejecutarse. El registro de próxima dirección (PC), que contiene la dirección de la siguiente instrucción a ser ejecutada. El registro de dirección de memoria (MAR) que contiene la dirección de la posición de memoria a ser leída o escrita. El registro de datos de memoria (MDR) que contiene el dato a ser leído o escrito en memoria de trabajo. Registros de propósito general (R) son utilizados para almacenar resultados intermedios.

Unidad Central de Proceso La UCP contiene los siguientes tres módulos:

• la memoria • la unidad aritmética y lógica

Page 17: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

17

• y la unidad de control La UAL y la UC conforman al procesador o microprocesador.

Memoriade

trabajo

Bus de datos

Bus Control

Bus de direcciones

UCP

UnidadCentral

deProceso

PeriféricodeE/S

PeriféricodeE/S

Arquitectura actual

Los periféricos de entrada/salida representan a los dispositivos que permiten la comunicación con el exterior (Ej, módulo controlador de teclado, vídeo, reproducción de sonido, etc). A los efectos de interconectar todos los módulos se implementa un cableado denominado sistema de bus. Un sistema de bus está compuesto por el conjunto de caminos compartidos que permiten la interconexión de los distintos componentes: UCP, memoria y periféricos de entrada/salida. Un bus está formado por un conjunto de líneas eléctricas que permiten la transmisión de datos en paralelo. Hay tres tipos de buses:

° de datos, ° de direcciones, donde viajan las direcciones de memoria sobre las

cuales se quiere leer o escribir. ° de control, donde viajan señales que controlan el acceso y el uso a los

buses de datos y de direcciones. Señales de control pueden ser: escribir en memoria, leer de memoria, escribir o leer en un dispositivo de entrada/salida, etc.

Page 18: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

18

En resumen, la máquina de Von Neumann es capaz de ejecutar un programa almacenado en memoria operando iterativamente, donde en cada ciclo ejecuta una instrucción de programa. Las fases que componen un ciclo son:

1. Fase de búsqueda de la instrucción. La UCP activa las señales de control necesarias para leer de memoria la instrucción a la que apunta el contador de programa (IR) 2. Fase de decodificación. Donde la UCP recibe la instrucción y la decodifica 3. Búsqueda de operandos. La UCP, en caso de ser necesario, lee los operandos de memoria o de los registros 4. Ejecución y almacenamiento del resultado. La UCP genera las señales necesarias para realizar la operación, y en caso de ser necesario, almacena el resultado en memoria principal o en un registro. 5. La UCP actualiza el registro contador de programa (IR), y pasa a ejecutar la siguiente instrucción

Lenguajes de Programación En toda computadora, las instrucciones deben darse en un lenguaje de programación que ella pueda decodificar. En las primeras computadoras, la programación era una tarea difícil y laboriosa ya que llaves tipo on-off de válvulas de vacío debían configurarse a mano. Programar tareas tan sencillas como ordenar una lista de nombres requería varios días de trabajo de equipos de programadores. Desde entonces se han desarrollado varios lenguajes informáticos, algunos orientados hacia funciones específicas y otros centrados en la facilidad de uso. Lenguaje de Máquina Es el lenguaje propio de cada computadora, está construido en base a instrucciones y estructuras de datos que el procesador directamente -sin traducción alguna- puede interpretar y ejecutar. La programación se realiza en

Page 19: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

19

código binario, y es por ello que es bastante difícil construir programas en este lenguaje. En general, los programadores evitan construir programas basándose en lenguaje de máquina, prefieren utilizar un lenguaje de mayor nivel que les brinde un grado más alto de abstracción. Lenguaje Ensamblador Es una herramienta "más amigable" que permite reducir y simplificar la tarea de construir programas. Se basa en asignar un código mnemotécnico a cada orden en lenguaje máquina, por lo cual la escritura deja de estar exclusivamente en sistema binario. Una vez que el programador construyó un programa fuente, se utiliza un programa auxiliar denominado "ensamblador" cuya función es traducir el código fuente a lenguaje de máquina (a veces llamado código objeto). Debido a la dependencia existente entre el lenguaje propio de la computadora y el lenguaje ensamblador, los programas realizados son dependientes exclusivamente del tipo de procesador de la computadora donde se desarrollaron.

Ejemplo de instrucciones mov ax,0002 ; instancia el valor 0002 en el registro ax mov bx,0004 ; instancia el valor 0004 en el registro bx add ax,bx ; le suma al contenido de ax el contenido de bx

Lenguajes de Alto Nivel Los lenguajes de alto nivel proveen un método por el cual en base a instrucciones redactadas en lenguaje natural, los programadores pueden construir programas de forma más sencilla y en menos tiempo. Otra característica importante que poseen los lenguajes de alto nivel, es la independencia de sus instrucciones con respecto al lenguaje de máquina, esto hace que un mismo programa fuente pueda llevarse a distintas computadoras, con distintos tipos de procesadores, y funcionar correctamente. La característica enunciada se denomina portabilidad. Una vez que un programa construido en lenguaje de alto nivel está finalizado, hay que traducirlo al lenguaje de máquina de la computadora donde se desea ejecutarlo. Para ello se utilizan programas traductores, y son de dos tipos: intérpretes y compiladores. Intérprete

Page 20: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

20

Es un programa traductor que toma un programa fuente, lo traduce a lenguaje de máquina y lo ejecuta línea a línea. Ejemplo: Basic, Prolog, Perl.

Programa

Fuente

Traducción y

ejecuciónsimultánea

Intérprete

Dado que existe un proceso continuo de traducción de instrucciones, los programas que se ejecutan de forma interpretada corren de forma más lenta que los compilados (están traducidos a código de máquina). Compilador Es un programa que traduce los programas fuentes escritos en lenguajes de alto nivel a lenguaje de máquina, produciendo un programa objeto que posteriormente puede ser ejecutado.

Programa

Fuente

Programa

ObjetoCompilador

Ventajas de los Lenguajes de Alto Nivel

° El tiempo de educación de programadores es menor, comparado con los programadores de lenguajes de bajo nivel.

° Portabilidad de programas fuentes. ° Permiten escribir programas en términos orientados al problema ° La escritura de programas se basa en lenguaje natural. ° Las modificaciones y ajustes de los programas son simples. ° Es posible lograr una importante producción en el desarrollo de programas. ° No se necesita que el programador conozca detalles sobre el hardware

donde se ejecutará el programa.

Page 21: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

21

Desventajas de los Lenguajes de Alto Nivel

° No se aprovechan en profundidad los recursos internos de la máquina. Se explotan de mejor manera utilizando lenguajes de bajo nivel.

° Los programas ejecutables, en general, necesitan más recursos en su

corrida. ° En general, los programadores no disponen de librerías de ayuda específica

a los problemas que necesitan resolver. Paradigmas de Programación Un paradigma de programación es un modelo básico de diseño y desarrollo de programas. Los llamados paradigmas de programación son conceptualizaciones genéricas, que agrupan bajo un nombre a distintos lenguajes de programación.

• Paradigma Imperativo Esta basado en el modelo Von Neumann, en donde un conjunto de operaciones primitivas realizan una ejecución secuencial. Se utiliza esencialmente la instrucción de asignación como constructor básico, sobre el cual se construyen las instrucciones de control secuencial, alternativo e iterativo.

Los lenguajes imperativos son orientados a instrucciones y por ello se consideran conducidos por comandos. Los programas escritos en ellos se basan en la idea de secuencia de instrucciones que se tienen que llevar a cabo como una receta, son la transcripción de un algoritmo. La unidad de trabajo es la instrucción. Un programa consta de una secuencia de sentencias, y la ejecución de cada sentencia obliga al intérprete o compilador a cambiar el valor de una o más localizaciones en su memoria.

PROGRAM intercambio;

VAR x,y, tmp; BEGIN

tmp := x; x := y; y := tmp;

END.

Page 22: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

22

Algunos de los lenguajes de este tipo son Pascal, Ada y C.

• Paradigma Lógico

Trata de representar conocimiento mediante relaciones (predicados) entre objetos (datos). Un programa lógico consiste en un conjunto de relaciones, y su ejecución vendrá a demostrar que una nueva relación se sigue de las que constituían el programa. Las relaciones serán especificadas con reglas y hechos. La ejecución de programas lógicos consiste en la demostración de hechos sobre las relaciones por medio de consultas. Así, el hecho de programar consistirá en proporcionar a la computadora un universo finito en forma de hechos y reglas (base de conocimientos), dotándolo de los medios para realizar inferencias de un hecho a otro. Si posteriormente se le hacen las preguntas adecuadas, Prolog buscará las respuestas en dicho universo y nos las mostrará en pantalla. La programación lógica trata con relaciones en lugar de con funciones, lo que nos proporciona mayor flexibilidad, ya que las relaciones no tienen sentido de la dirección y tratan uniformemente argumentos y resultados (no hay distinción entre parámetros de entrada y de salida). La idea central de todo esto se la puede expresar utilizando la ecuación de Kowalski “algoritmo = lógica + control”, de manera que el control (estrategia para encontrar la solución) se la deja en manos de la computadora, y sólo se debe atender la lógica (información acerca del problema). En programación lógica las expresiones pueden ser hechos, reglas o preguntas: Sócrates es hombre (hecho) Alguien es mortal si alguien es hombre (regla) =>¿Sócrates es mortal? (pregunta)

=>SI (respuesta) Aquí el intérprete obtuvo la respuesta sobre un dato que no se le había dado en forma explícita. El silogismo anterior escrito en el lenguaje Prolog quedaría como:

Page 23: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

23

Los hechos: hombre(Socrates)

La regla: mortal(x) :- hombre(x) La pregunta : ? mortal(Socrates) La repuesta: YES Ejemplo en lenguaje Prolog, cálculo del factorial de un número

/* factorial(N,F) <- F es el factorial de N */ factorial(0,1). factorial(N,F) :- N1 is N-1,

factorial(N1,F1), F is N*F1.

• Paradigma Funcional

El Programa es una Función (o un grupo de funciones). Usualmente compuesto de Funciones más simples. La relación entre las funciones son muy simples: Una Función puede llamar a otra Función, o el resultado de una Función puede ser usado como el argumento de otra Función. Las variables, comandos y efectos laterales son exclusivos. Los programas son escritos enteramente dentro del lenguaje de expresiones, funciones y declaraciones. Un "programa¨ funcional es un encadenamiento de funciones que se invocan y se pasan datos unas a otras. Ejemplo de programa en Common Lisp, cálculo del factorial de un número :

( DEFUN FACTORIAL (N) ( IF (= N 0) 1 (* N (FACTORIAL (- N 1))) ) )

Dos de estos lenguajes son Scheme y ML.

Page 24: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

24

Metodología de la Programación Las siguientes son etapas que deben cumplirse a los efectos de resolver un problema mediante un programa informático:

Definición del problema Se debe partir de un enunciado de problema claro y completo. Análisis del problema A partir de comprender claramente cual es el problema, se procede a analizar alternativas de solución, como ser:

• Resultados que se esperan. • Datos de entrada se brindan. • Posibles métodos a utilizar para obtener la salida deseada.

Construcción de un algoritmo Por medio de un lenguaje de especificación (puede ser gráfico o un seudolenguaje) se procede a construir un algoritmo que resuelva el problema en estudio. En esta etapa, una vez construido el algoritmo, se sugiere que el diseñador realice una prueba de escritorio -someter el algoritmo a diversas ejecuciones, variando los datos de entrada y verificar su funcionamiento- a los efectos de determinar si el método elegido funciona correctamente. Codificación

Utilizando un lenguaje de computadora se traduce el algoritmo a un programa fuente que una máquina sea capaz de entender y ejecutar. Se recomienda que el técnico que realice esta tarea -el programador- inserte comentarios junto a las líneas de código a los efectos de facilitar la lectura del programa (documentación interna) en instancias superiores de validación o mantenimiento. Compilación

Page 25: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

25

Si el lenguaje utilizado en el proceso de codificación requiere de una traducción a lenguaje de máquina se utiliza un programa compilador a los efectos de generar un programa objeto. Es importante destacar que una de las funciones de todo compilador es el análisis sintáctico del programa fuente a los efectos de detectar errores de sintaxis ocasionados por errores de codificación. El compilador no analiza semántica, es decir que las fallas de lógica que pueda existir en el programa fuente no son detectadas por el compilador. Prueba Se ejecutar el programa con distintos juegos de datos de entrada y se corrigen los errores que se puedan presentar. Al final se obtiene un programa depurado. Documentación Etapa final en la cual se realiza la documentación externa en la cual se explica lo que el programa hace y cuales son los datos de entrada y salida. parte de esta documentación es requerida por usuarios y por programadores encargados del mantenimiento del software.

Sistemas de Información Un sistema es un conjunto de componentes que interaccionan entre sí para lograr un objetivo común. Por lo tanto, un sistema de información es un conjunto ordenado de elementos (no necesariamente computacionales) que permiten manipular toda aquella información necesaria para implementar aspectos específicos de la toma de decisiones. Los sistemas de información, surgen de la necesidad de información que experimentan las organizaciones para implementar un conjunto específico de toma de decisiones. Un sistema de información es un conjunto de personas, datos y procedimientos que funcionan en conjunto. El énfasis en sistema significa que los variados componentes buscan un objetivo común para apoyar las actividades de la organización. Estas incluyen operaciones diarias de la empresa, la comunicación de los datos e informes, la administración de las actividades y la toma de decisiones.

Page 26: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

26

Los sistemas de información son la base de muchas actividades que ocurren en las organizaciones y en la sociedad. Todas las organizaciones cuentan con alguna clase o tipo de sistema de información. Las organizaciones han aprendido como utilizar la información como un instrumento eficaz para la administración; por ello, buscan que todos los datos medibles sean organizados de manera que sea fácil registrarlos, almacenarlos, procesarlos, recuperarlos y comunicarlos, según lo requieran los usuarios que los operan, teniendo con ello un sistema funcional que satisfaga sus necesidades que lo requieran. Los sistemas de información cumplen en las organizaciones tres objetivos fundamentales:

° Automatización de procesos operativos. (Sistemas transaccionales) ° Proporcionar información que sirva de apoyo al proceso de la toma de

decisiones. (Sistemas de soporte a las decisiones) ° Lograr ventajas competitivas a través de su implementación y

uso.(Sistemas estratégicos) En todo sistema de información existen tres actividades generales. En primer lugar, recepción de datos de fuentes internas o externas de la organización como elementos de entrada. Después, se actúa sobre los datos para obtener información. Finalmente el sistema produce la información para ser utilizada por el usuario. En general, los sistemas de información cuentan con algunos de los siguientes elementos:

° Dispositivos de ingreso de datos. ° Dispositivos de almacenamiento de datos. ° Equipos de comunicaciones. ° Equipos de procesamiento de datos. ° Dispositivos de visualización. ° Procedimientos, programas, métodos y documentación. ° Profesionales del análisis de sistemas de información, para diseñar,

mantener y utilizar los elementos anteriores.

Page 27: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

27

Ingeniería de Software La Ingeniería de Software es un área de las Ciencias de la Computación, que ofrece métodos y técnicas para desarrollar y mantener software de calidad que resuelven problemas de información. Comprende el uso de metodologías, herramientas y técnicas para resolver problemas prácticos que se presentan en la construcción, desarrollo, soporte y evolución del software. Las incumbencias propias de un ingeniero de software son variadas, comprenden el desarrollo de software de base -módulos de sistemas operativos, compiladores e intérpretes-, el desarrollo de software para sistemas distribuidos y la construcción de software de aplicación de la más diversa gama. Ciclo de Vida del Software

Se ha definido un modelo denominado ciclo de vida de software, el cual es una forma de plantear el desarrollo de proyectos de software. Las fases que lo comprenden son:

Análisis de requerimientos Estadio en el cual, en base a un mandato, se reconoce el problema a resolver. Se estudia el sistema objeto, se hace una evaluación y un diagnóstico. Finalmente se especifican todos los requerimientos. Diseño Como objetivo de la etapa, atendiendo los requerimientos del cliente, se modela un sistema que satisfaga las especificaciones derivadas del análisis de requerimientos. Desarrollo de requerimientos Se traduce el diseño a programas computables. Prueba

Por un lado se valida al sistema informático propuesto ejecutando pruebas intensas de verificación de comportamiento, y por otro lado se analiza si el modelo a prueba satisface plenamente las especificaciones de requerimientos.

Page 28: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

28

Implementación

En esta etapa se implementa el nuevo sistema informático a los efectos de que la organización demandante lo comience a utilizar.

Mantenimiento

Etapa final que tiene por objetivo ajustar el sistema a nuevos requerimientos y a cambios en el sistema objeto.

Page 29: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

29

Guía de Lectura - Conceptos Básicos 1. Explique mediante un algoritmo el funcionamiento de la máquina de Von

Neumann 2. ¿ Cómo se transfieren las instrucciones y los datos entre la UCP y la memoria

de trabajo? 3. Describa los pasos necesarios para “programar” una máquina. ¿Qué es un

programa fuente? ¿Qué lenguaje se utiliza? ¿Por qué existen lenguajes de alto, medio y bajo nivel?

4. Describa qué es un paradigma de programación. Caracterice al paradigma

imperativo.

5. ¿De qué maneras es posible ejecutar un programa? ¿Un algoritmo puede ser ejecutado por una computadora? Justifique.

6. Especifique tres algoritmos relacionados con su ocupación o hobby.

7. ¿Qué es un sistema? ¿Cuál es el objetivo de los sistemas de información?

Page 30: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

30

Page 31: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

31

Segunda Parte Introducción a la Programación

Datos Todo algoritmo utiliza datos. Los datos representan una abstracción de la realidad. Por ejemplo, para calcular el sueldo de un empleado se necesita realizar una abstracción de la información relativa al problema en estudio, tal como: función o cargo, antigüedad, cantidad de hijos, estudios cursados, días trabajados, etc.

Los datos son unidades atómicas de información, almacenadas en memoria, a partir de las cuales se realizan las operaciones determinadas por los programas. Todo dato presenta una serie de atributos que lo caracterizan. Por ejemplo, un dato que sea el sueldo percibido el último mes por una persona X tendrá los siguientes atributos:

• Nombre. Es un identificador, y es un nombre simbólico que se refiere a un dato determinado, es decir, un nombre para referirse a variables, funciones y cualquier otro objeto definido por el usuario en un programa. El dato del ejemplo podría tener por nombre "sueldo_último_mes" a los efectos de identificar a ese objeto concreto.

• Tipo. El tipo de una variable se refiere a la naturaleza de la información

que contiene. Determina la característica del contenido del objeto, es decir, la información que va a poder contener. En el ejemplo, el tipo del dato llamado "sueldo_último_mes" es numérico, porque así se expresa un número real.

Un tipo de dato se caracteriza por:

• Un dominio de posibles valores • Un modo común de representación de sus valores • Un conjunto de operadores asociados

Page 32: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

32

• Valor. Es el contenido en sí del objeto, y está acorde al tipo definido. En el ejemplo del sueldo será un valor concreto, tal como 345.78.

345.78 22

Ana Gomez

Sueldo_ultimo_mes

tipo numérico

porcentaje_aumento

tipo numérico

nombre-empleado

tipo caracter

Extracto de una memoria de trabajo

Tipos de Datos Primitivos

Entero

Cualquier valor que pertenezca al conjunto de los números enteros Z { ...,-3, -2, -1, 0,1, 2, 3,...} y que este en un rango que el lenguaje pueda aceptar.

Ejemplo temperatura <- -2 humedad <- 78

Real

Cualquier valor perteneciente al conjunto de los números reales R {..., -7, ..., -2.2, ..., 0, ..., 14.4,..., 33, ...} y que este en un rango que el lenguaje pueda aceptar.

Ejemplo salario <- 178.23

Page 33: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

33

saldo <- -55.98

La siguiente tabla muestra las características de los tipos de datos más comunes:

Tipo Tamaño Rango de valores booleano 1 bit falso, verdadero byte 8 bits -128...127 / 0..255 short 16 bits -32768 ... 32767 char 16 bits \u0000 ... \uffff int 32 bits -2147483648 ... 2147483647 long 64 bits -9,22E18 ... 9,22E18 float 32 bits reales de 32 bits double 64 bits reales de 64 bits

Caracter

Un caracter es un símbolo válido proveniente de un alfabeto. La concatenación de caracteres da por resultado una cadena o string.

Ejemplo apellido <- "Diaz Martinez" animal_peligroso <- "león de Kenia"

Lógico

Posibilitan la representación de dos estados posibles: F) falso y V) verdadero.

Ejemplo

vacío <- V asistirá <- F

Variables

Una variable es una identificación, asignada por el programador, a una dirección de memoria, donde se aloja un dato. Ejemplo

Page 34: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

34

Pi <- 3.14 IVA <- 21 institución <- "Universidad Nacional de Luján" Una constante es un dato almacenado en una variable cuyo contenido no puede ser modificado durante la ejecución de un programa. Declaración de Constantes y Variables La declaración de una constante o una variable implica la asignación de un espacio de memoria de trabajo que estará asociado a ella. El tamaño dependerá del tipo de dato y lenguaje de programación con el que se trabaje. Al declarar una variable o una constante se liga al dato con un nombre o identificador, por el cual se accederá a tal posición de memoria de allí en más. El tipo de dato y el identificador de una variable son dos atributos asociados a ella. Ciertos lenguajes de programación, junto con la buena práctica del oficio, exigen que todas las variables y constantes de un programa sean previamente declaradas antes de ser utilizadas. Cuando se desea inicializar o modificar el valor de una variable se realiza una operación de asignación. Se la simboliza con los caracteres "<-". Asignar significa asociar un valor determinado a un identificador. Ejemplo vacio <- V saldo <- saldo_anterior + 500 frase <- "Hola" + " " + "Mundo !!!" resultado <- ((producción - fallados) ^2) - 678 Existe otro objeto denominado literal y es la forma como se escriben los valores de cada tipo. Ejemplo 26, 789, -9 son literales numéricos, y "hola mundo", "o" y "zeta" son literales de caracteres. La asignación es una instrucción donde se asocia un valor a una variable. Del lado izquierdo siempre habrá una variable, mientras que del lado derecho de la asignación podrá haber un literal, otra variable ó una expresión.

Ejemplos

Page 35: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

35

cantidad_de_vehículos <- (6+8) / 2

Donde se evalúa 6 +8 y a lo obtenido se lo divide por 2. Finalmente al resultado se lo almacena en la variable cuyo identificador es cantidad_de_vehículos.

Las variables A, B, y C son de tipo lógico. A <- 12 < 5 En A se almacena el valor de verdad falso B <- (7 <= 12) En B se almacena el valor de verdad verdadero C <- 7 >= 7 En C se almacena el valor de verdad verdadero

Con variables de tipo caracter empleado <- "Carlos Gomez" cantidad_empleados <- "veinte"

Expresiones y Operadores Una expresión es una combinación de elementos del lenguaje que al ser evaluados dan por resultado un valor. Este valor puede ser un número, un caracter, una cadena o cualquier otro tipo de dato. El tipo de una expresión está determinado por los tipos de las partes que la componen y la semántica de sus operadores. A los efectos de realizar cálculos y operaciones sobre los datos es necesario contar con alguna forma de combinación que indique la acción a realizar. Se utiliza una simbología de operadores para formalizar tales cálculos y operaciones. Un operador es un símbolo que transforma una variable o la combina de alguna otra manera con otra variable o literal. Por ejemplo, la siguiente expresión tiene dos operadores, '*' producto y '/' división:

(costo * 1.22)/desvio_mes;

Operadores Aritméticos

Son operadores que se aplican sobre datos numéricos y devuelven igualmente un dato numérico.

Page 36: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

36

Operador Significado

** Potenciación + Signo más (unario) - Cambio de signo (unario) * Multiplicación / ó div División real y entera % ó mod resto de división (reales y enteros) + Suma - Resta

Un operador es unario cuando solo tiene un operando, como por ejemplo los signos de los números (-7, +7, etc.) Un operador es binario cuando necesita dos operandos, como por ejemplo la suma (8 + 2). Todos los operandos son binarios excepto la notación de signos, que son unarios.

Ejemplos

Expresión Comentario 7 / 5 = 3.5 División real 7 div 2 = 3 División entera 7 mod 2 = 1 Resto de división entera

Operadores Relacionales

Permiten realizar comparaciones de valores de tipo numérico o carácter. Estos operadores sirven para expresar las condiciones en los algoritmos. Proporcionan resultados lógicos.

Operador Significado < Menor que > Mayor que = Igual que <= Menor o igual que >= Mayor o igual que <> Distinto de

La sintaxis de las operaciones de comparación es:

Page 37: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

37

expresión1 operador de relación expresión2

Una vez evaluada la expresión, se obtendrá un resultado que será Verdadero o Falso.

Dado X <- 12 y Y <- 5

Expresión Resultado X > Y Es Verdadero

(X-3) < (Y-2) Es Falso (X-4) >= (Y+3) Es verdadero

"A" > "B" Es verdadero "z" > "Z" Es verdadero

"uno" = "unos" Es falso "uno" < "unos" Es verdadero

La Tabla ASCII La tabla ASCII codifica la equivalencia en bits de todos los números, letras y símbolos. También contempla una serie de caracteres de control que sirven para representar algunos datos que poseen función de control en un sistema informático; por ejemplo el salto de página o línea, los tabuladores o el beep del parlante. En el formato ASCII, para representar un carácter son necesarios grupos de ocho bits --conjunto conocido como byte u octeto--. Haciendo todas las combinaciones posibles de ceros y unos que hay en ocho bits (2 elevado a 8), el resultado es de 256 combinaciones o caracteres diferentes; más que suficiente para representar todos los caracteres necesarios. Así, la tabla ASCII dice que una "A" binaria es "01000001", y "Z" equivale a "01011010". Las personas que contamos en base al sistema decimal, recordamos mucho mejor que una "A" en la tabla ASCII es un 65 y una "Z", un 90.

Reglas de orden de caracteres ASCII 1. Los caracteres correspondientes a dígitos numéricos están en su orden natural:

Page 38: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

38

"0">"1"<"2"<"3"<"4"<"5"<"6"<"7"<"8"<"9" 2. Las letras mayúsculas continúan el orden alfabético:

"A"<"B"<"C"<"D"<, . . . . . .,<"Z" 3. Luego continúan las letras minúsculas, pero sus códigos son mayores que las letras mayúsculas, por lo tanto se ordenan antes.

"a"<"b"<"c"<"d"<, . . . . . .,<"z" y

"a">"M">"C">"B" 4. El resto de los caracteres.

En la siguiente tabla ASCII se puede observar el conjunto de los 128 primeros caracteres y sus equivalencias en el sistema decimal.

Valor

Decimal Caracter Valor

Decimal Caracter Valor

Decimal Caracter

0 NUL \0 42 * 84 T

1 SOH 43 + 85 U

2 STX 44 , 86 V

3 ETX 45 - 87 W

4 EOT 46 . 88 X

5 ENQ 47 / 89 Y

6 ACK 48 0 90 Z

7 BEL 49 1 91 [

8 BS 50 2 92 \

9 HT 51 3 93 ]

10 LF 52 4 94 ^

11 VT 53 5 95 _

12 FF 54 6 96 `

13 CR 55 7 97 a

14 SO 56 8 98 b

15 SI 57 9 99 c

16 DLE 58 : 100 d

17 DC1 59 ; 101 e

18 DC2 60 < 102 f

Page 39: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

39

19 DC3 61 = 103 g

20 DC4 62 > 104 h

21 NAK 63 ? 105 i

22 SYN 64 @ 106 j

23 ETB 65 A 107 k

24 CAN 66 B 108 l

25 EM 67 C 109 m

26 SUB 68 D 110 n

27 ESC 69 E 111 o

28 FS 70 F 112 p

29 GS 71 G 113 q

30 RS 72 H 114 r

31 US 73 I 115 s

32 SPACE 74 J 116 t

33 ! 75 K 117 u

34 COMILLAS 76 L 118 v

35 # 77 M 119 w

36 $ 78 N 120 x

37 % 79 O 121 y

38 & 80 P 122 z

39 ' 81 Q 123 {

40 ( 82 R 124 |

41 ) 83 S 125 }

126 ~

127 DEL

° Nótese que el alfabeto ocupa posiciones consecutivas y respeta la

ordenación tradicional. ° Nótese que la mayúsculas preceden a la minúsculas. ° Los primeros 32 símbolos se denominan caracteres de control porque

cumplen funciones específicas, pero no representan información alfanumérica alguna.

Operadores sobre Cadenas

Los operadores tradicionales sobre cadenas son:

Page 40: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

40

• Concatenación (+), operador que une dos cadenas para formar una

nueva. Por ejemplo "hola" + " mundo" devolverá una nueva cadena que contenga "hola mundo".

• Multiplicación (*), operador que copia una cadena un número

determinado de veces. Por ejemplo "ba"'*2 nos devolverá la cadena "baba", '8'*3 devolverá "888".

Operadores Lógicos

Son aquéllos que permiten la combinación de valores de verdad en una expresión, que al ser evaluada devuelve un valor de verdad. El resultado de las operaciones lógicas se determina a través de tablas de verdad correspondientes a cada operador.

Tabla de Verdad del Operador NOT

A NOT A V F F V

Donde A es una expresión booleana Tabla de Verdad del Operador de Conjunción AND

A B A AND B F F F F V F V F F V V V

Donde A y B son expresiones booleanas

Tabla de Verdad del Operador de Disyunción OR

A B A OR B F F F

Page 41: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

41

F V V V F V V V V

Donde A y B son expresiones booleanas

Tabla de Verdad del Operador de Disyunción Exclusiva XOR

A B A XOR B F F F F V V V F V V V F

Donde A y B son expresiones booleanas

Ejemplos

Expresión Resultado (3 = 4) AND ( 6 < 7) Falso

NOT (4 < 6) Falso (3=4) EQV (5=6) Verdadero

Orden de Prioridad de las operaciones Todas las subexpresiones entre paréntesis se evalúan primero. Las subexpresiones con paréntesis anidados se evalúan desde el centro hacia los extremos. Dentro de una expresión, los operadores se evalúan de la siguiente manera:

° Se analiza la expresión de izquierda a derecha.

° Si en la expresión existen paréntesis, lo que se encuentra dentro de estos se evalúan de izquierda a derecha según orden de prioridad de los mismos.

° Si en la expresión se encuentran más de un par de

Page 42: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

42

paréntesis, la evaluación se realiza comenzando con el paréntesis que se encuentra más a la izquierda en la expresión hasta llegar al par de paréntesis que se encuentra más a la derecha de la expresión.

Orden de Evaluación de los Operadores Los operadores de una expresión se evalúan según el siguiente orden:

Tipo de Operador Significado Prioridad Exponenciación 1 Negación 2

Aritméticos Multiplicación/División 3 División entera 4 Módulo 5 Suma/Resta 6 Mayor 7 Mayor igual 7 Menor 7

De relación Menor igual 7 Igual 7 Distinto 7 Complemento (NO- NOT) 8 Conjunción (Y -AND) 9

Lógicos Disyunción (O - OR) 10 Disyunción exclusiva (XOR) 11

De forma tradicional, la evaluación de operadores de igual orden se realiza siempre de izquierda a derecha. Ejemplo de evaluación - A ((4 + 2)^2 - 14) / 2 * 5

(6^2 - 14) / 2 * 5 (36 - 14) / 2 * 5

Page 43: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

43

22 / 2 * 5 11 * 5

Resultado 55

Ejemplo de evaluación - B:

Siendo a = 10, b = 12, c = 13 y d =10

((a > b)or(a < c)) and ((a = c) or (a > = b)) F T F F

T F Resultado F

Ejemplo de evaluación - C

5 - 2 > 4 and not 0.5 = 1 / 2 5 - 2 > 4 and not 0.5 = 0.5

3 > 4 and not 0.5 = 0.5 falso and not 0.5 = 0.5

falso and not cierto falso and falso

Resultado FALSO

Funciones del Lenguaje Una función es un conjunto de declaraciones, definiciones, expresiones y sentencias que realizan una tarea específica. Cada función tiene la misión de realizar un algoritmo determinado a partir de datos de entrada, llamados parámetros o argumentos, obteniendo un resultado o valor de retorno. En los lenguajes de programación, sus diseñadores incorporan varias funciones predefinidas. Los programadores pueden hacer uso de tales funciones del lenguaje e incorporarlas a sus programas. Existen distintas categorías de funciones: matemáticas, de cadenas de caracteres, de fecha, de entrada y salida, etc. La sintaxis general de una función es:

nombre_función(argumento1,..., argumenton).

Page 44: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

44

Ejemplos de funciones del lenguaje sobre tipos numéricos:

Nombre Significado Ejemplos

abs Calcula el valor absoluto abs(-5) abs(x)

int Devuelve la parte entera de un número real

int(-2.8) int(12.1)

rnd Genera un número aleatorio (mayor a 0 y menor a 1)

round Redondea un dato a un número determinado de cifras

round(2.1) round(7.125, 2)

cos Calcula el coseno del ángulo n (en radianes)

cos(n)

sin Calcula el seno del ángulo n (enradianes)

sin(n)

sqrt Calcula la raíz cuadrada de n sqrt(n) Ejemplos de funciones del lenguaje que operan sobre cadenas:

Nombre Significado Ejemplos length Calcula el largo de una cadena. length("Hola mundo")

substr Extrae una subcadena de una cadena de caracteres.

substr(cadena,2,3)

chr Retorna el caracter ASCII equivalente al número decimal brindado como argumento

chr(65)

lower Devuelve en minúsculas todas las letras de una cadena

lower(cadena) lower("MaLANdro")

upper Devuelve en mayúsculas todas las letras de una cadena

upper(cadena) upper("malandro)

Nota: Las funciones detalladas anteriormente son a título informativo. El nombre exacto y la sintaxis de cada función dependerá del lenguaje de programación a utilizar. Se aconseja verificar en el manual del lenguaje las características de una función predefinida a utilizar.

Page 45: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

45

Trabajo Práctico I - Introducción a la Programación

1. Sean A, B y C variables numéricas, D y E variables cadena y X e Y lógicas. Los valores de las mismas, en un instante dado, son:

A: 3 B:-5 C: 1 D:'libro' E:'librería' X: T Y: F Calcular los siguientes predicados: a) (A > 3 OR Y) AND (C = 1 XOR D < E) b) ((NOT (A<>3) AND X) OR C = 1) AND (D < 'libra') c) NOT (NOT x AND (A > 5 XOR B > 10) 2. Sean I y J dos variables numéricas enteras, cuyos valores son 6 y 12 respectivamente. Indicar cuáles de los siguientes predicados son verdaderos. a) 2 * I < J b) 2 * I < 1 c) I > 0 AND I < 10 d) I > 25 OR (I < 50 AND J < 50) e) I < 4 OR J > 5 f) NOT I > 6 3. Sean X, Y, Z y T variables numéricas. Escribir los predicados correspondientes a: a) Los valores de X e Y son superiores a 3 b) Los valores de X, Y y Z son idénticos c) Los valores de X, Y y Z son iguales pero difieren del de T

d) El valor de X está comprendido estrictamente entre los valores de Y y de T, y el valor de Y es inferior al de T

4. Dados los siguientes valores para las variables X, Y, Z, evaluar las expresiones e indicar el resultado de las siguientes expresiones:

Siendo X=2, Y=0 y Z=1 y los operadores &&=and , ||=or , !=not

a) (X && Y) || (X && Z) b) (X || ! Y) && (!X || Z) c) X || Y && Z

Page 46: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

46

d) ! (X || Y) && Z

5. Dados los siguientes valores de I, J, K y L, añadir los paréntesis que sean necesarios a las expresiones para que se evalúen todas dando resultado "verdadero".

I=10, J=19, K=3, L=0

a) I == J || K b) I >= J || I <= J && K c) ! K || K d) ! L && L

6. Modificar los paréntesis, de los problemas del ejercicio anterior, para que el resultado fuera falso.

Page 47: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

47

Tercera Parte

Programación Estructurada - Estructuras de Control:

Los programas para computadoras deben estar escritos con un alto grado de estructuración, lo cual les permite ser fácilmente comprensibles en actividades tales como pruebas, mantenimiento y modificación de los mismos. Mediante la programación estructurada todas las bifurcaciones de control de un programa se encuentran estandarizadas, de forma tal que es posible leerlos desde su inicio hasta su final en forma continua, sin tener que saltar de un lugar a otro del programa siguiendo el rastro de la lógica establecida por el programador. Los lenguajes de programación tienen un conjunto mínimo de instrucciones que permiten especificar un algoritmo, y son:

1. Secuencia: Sucesión simple de dos o mas operaciones. 2. Selección: Bifurcación condicional de una o más operaciones 3. Interacción: Repetición de un conjunto de instrucciones mientras se

cumpla una condición. Estos tres tipos de estructuras lógicas de control pueden ser combinadas para producir programas que manejen cualquier tarea de procesamiento de información. Un programa estructurado está compuesto de segmentos o bloques , los cuales pueden estar constituidos por unas pocas instrucciones o por una página o más de codificación. Cada segmento tiene solamente una entrada y una salida, estos segmentos, asumiendo que no poseen lazos infinitos y no tienen instrucciones que jamás se ejecuten, se denominan programas propios. Cuando varios programas propios se combinan utilizando las tres estructuras básicas de control mencionadas anteriormente, el resultado es también un programa propio. La programación Estructurada esta basada en el Teorema de la Estructura, el cual establece que cualquier programa propio (un programa con una entrada y una salida exclusivamente) es equivalente a un programa que contiene solamente las estructuras lógicas mencionadas anteriormente.

Page 48: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

48

Una característica importante en un programa estructurado es que puede ser leído en secuencia, desde el comienzo hasta el final sin perder la continuidad de la tarea que cumple el programa, lo contrario de lo que ocurre con otros estilos de programación. Esto es importante debido a que, es mucho más fácil comprender completamente el trabajo que realiza una función determinada, si todas las instrucciones que influyen en su acción están físicamente contiguas y encerradas por un bloque. La facilidad de lectura, de comienzo a fin, es una consecuencia de utilizar solamente tres estructuras de control y de eliminar la instrucción de desvío de flujo de control, excepto en circunstancias muy especiales tales como la simulación de una estructura lógica de control en un lenguaje de programación que no la posea. Como ventajas del uso de la programación estructurada se pueden citar los siguientes ítems:

° Un programa escrito de acuerdo a las reglas de la programación estructurada no solamente tendrá una estructura, sino también una excelente presentación.

° Un programa escrito de esta forma tiende a ser mucho más fácil de comprender que programas escritos en otros estilos. La facilidad de comprensión del contenido de un programa puede facilitar el chequeo de la codificación y reducir el tiempo de prueba y depuración de programas. Esto último es cierto parcialmente, debido a que la programación estructurada concentra los errores en uno de los factores más generador de fallas en programación: la lógica.

° Un programa que es fácil para leer y el cual está compuesto de segmentos bien definidos tiende a ser simple, rápido y menos expuesto a mantenimiento. Estos beneficios derivan en parte del hecho que, aunque el programa tenga una extensión significativa, en documentación tiende siempre a estar al día, esto no suele suceder con los métodos convencionales de programación.

El teorema de la estructura establece que un programa propio puede ser escrito utilizando solamente las siguientes estructuras lógicas de control: secuencia, selección e iteración.

Page 49: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

49

Un programa se define como propio si cumple con los dos requerimientos siguientes:

° Tiene exactamente una entrada y una salida para control del programa. ° Existen caminos seguibles desde la entrada hasta la salida que conducen

por cada parte del programa, es decir, no existen lazos infinitos ni instrucciones que no se ejecutan.

Las tres estructuras lógicas de control básicas, se definen de la siguiente forma:

Secuencia: es la estructura de control más simple y representa una lista ó secuencia de instrucciones. En términos de diagrama la secuencia es representada por una instrucción después de la otra, como se muestra a continuación.

Inicio

Leer num1, num2

suma <- num1 + num2

dif <- num1 - num2

Escribir("SUMA: ", suma)

Escribir("DIFERENCIA: ", dif)

Fin

Selección: Se basa en ejecutar una de dos acciones tomando la decisión en base al resultado de evaluar una condición. Esta estructura de control es denominada usualmente condicional.. La representación en forma de diagrama de flujo de esta estructura lógica de control se muestra a continuación:

V FCondición

Instrucción 1

....

Instrucción n

Instrucción 1

....

Instrucción n

Page 50: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

50

Donde V y F son bloques a ejecutar en caso de que la evaluación de la condición sea verdadero o falso. Iteración: Esta estructura es utilizada a los efectos que se repita la ejecución de un conjunto de instrucciones mientras se cumpla una condición. Generalmente a esta estructura se le conoce como Mientras-Hacer y su representación se muestra a continuación:

Mientras <condición> hacer

Instrucciones

donde el resultado de la condición a evaluar determinará si se ejecuta el bloque de instrucciones (en caso de resultar verdadero) o se continua con la siguiente línea de programa.

Estructogramas o Diagramas Chapín

Los diagramas de Chapin (también conocidas como diagramas de Nassi-Schneiderman) describen los procedimientos usados para recibir, procesar, y transmitir información. Los diagramas proporcionan toda la lógica necesaria para que programadores puedan escribir programas estructurados en cualquier lenguaje de programación o a los efectos de documentar procedimientos específicos. El modelo de diagramas fue desarrollado por Isaac Nassi y Ben Shneiderman, publicándose en el año 1973. Corresponden a las normas DIN 66261 e ISO/IEC 8631:1989. Dado que muestran las estructuras de un programa, también se denominan "estructogramas". El concepto es simple: cada bloque (o secuencia de acciones) se representa dentro de un rectángulo; cada estructura utiliza una forma de representación particular, pudiendo a su vez encerrar otros bloques.

Page 51: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

51

En los diagramas NS existen seis estructuras: Secuencial, Decisión (si condicional), Selección, Para, Mientras y Repetir.

seccion = 1

V F

Escribir("Elnúmero es impar")

antiguedad <-sueldo*10/100

años < 5

V F

sueldo <- basico + 250antiguedad = 0

antiguedad <-sueldo*20/100

Leer seccion, años

basico <- 800

sueldo <- basico + 120

total <- sueldo + antiguedad

escribir("El monto a abonar es ", total)

Inicio

Fin

Ejemplo de diagrama de Chapín

Page 52: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

52

Escritura de Programas La utilización de la identación es importante debido a que, cuando se es consistente en su utilización, facilita la lectura de los programas al mostrar en una forma ordenada las relaciones existentes entre las distintas instrucciones. A continuación pueden observarse dos programas, los cuales realizan la misma función, pero el de la derecha es más fácil de comprender.

Sin identación Con identación print "Ingrese seccion del empleado: "; $seccion = <STDIN>; chop($seccion); print "Ingrese años de antiguedad : "; $anios = <STDIN>; chop($anios); $basico = 800; if ($seccion == 1) {$sueldo = $basico + 120; if($anios < 5) {$antiguedad = $sueldo*10/100;} else{$antiguedad = $sueldo*20/100;} }else{$sueldo = $basico + 250; $antiguedad = 0;} $total = $sueldo + $antiguedad; print "El monto a abonar es $total\n";

print "Ingrese seccion del empleado: "; $seccion = <STDIN>; chop($seccion); print "Ingrese años de antiguedad : "; $anios = <STDIN>; chop($anios); $basico = 800; if ($seccion == 1) { $sueldo = $basico + 120; if($anios < 5) { $antiguedad = $sueldo*10/100; } else { $antiguedad = $sueldo*20/100; } } else { $sueldo = $basico + 250; $antiguedad = 0; } $total = $sueldo + $antiguedad; print "El monto a abonar es $total\n";

Adicionalmente se recomienda la inserción de comentarios en los programas. Tales citas ayudan a los programadores a identificar fácilmente la misión de las partes con la finalidad de facilitar su mantenimiento. Normas de Identación Las siguientes son sugerencias para el desarrollo de una política de identación en un programa:

a) Se obtiene consistencia si todas las instrucciones de un mismo nivel

comienzan en una misma columna.

Page 53: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

53

b) En los lenguajes en que se hagan declaraciones sobre las variables a utilizar, la información quedará mas claramente representada si los atributos declarados se alinean en forma vertical.

c) El uso de líneas vacías ayuda a mostrar con mas claridad las relaciones existentes entre distintos ítems agrupados en las declaraciones

d) Las instrucciones son mucho mas fáciles de localizar y de cambiar si no se escribe mas de una instrucción por línea.

e) La visión de control de las estructuras lógicas o de los bloques se clarifica si las instrucciones controladas son idénticas por alguna cantidad constante. Se sugiere una idéntica de tres espacios.

Entrada y Salida de Información

Toda operación que realice una computadora va a estar incluida en una de las siguientes categorías:

° Recibir entradas. Aceptar información proveniente del mundo exterior.

° Generar salidas. brindar información al mundo exterior.

° Procesar información. Realizar operaciones sobre los datos.

° Almacenar información. En cualquier dispositivo con que opere.

En base a las cuatro operaciones básicas enunciadas, las computadoras realizan todas sus funciones.

Las operaciones de entrada permiten leer determinados datos -generalmente ingresados por teclado- y asignarlos a determinadas variables definidas por el programador. La operación de entrada se conoce como operación de Lectura o read. La salida de información es soportada por dispositivos de salida (monitor, impresora, etc). La operación de salida se denomina escritura o Write. Generalmente, en la escritura de algoritmos las acciones de lectura y escritura se representan de la siguiente manera:

° leer ( Nom_variable )

° escribir (lista de variables de salida)

Page 54: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

54

Ejemplo de ingreso y salida de datos en una especificación de cálculo de liquidación de horas extras, detallada pseudocódigo: Inicio Leer(horas trabajadas) Leer(valor_de_la_hora_extra) liquidación <- horas:trabajadas * valor_de_la_hora_extra Escribir(liquidación) Fin

Opcionalmente, en el ingreso de datos por teclado puede definirse una lista de variables como parámetro de la orden leer.

Leer (dato1, dato2, dato3) Ejemplo:

Ingresando dos números, mostrar por pantalla su suma y su diferencia. Pseudocódigo

Inicio Leer(num1, num2) suma <- num1 + num2 dif <- num1 - num2 Escribir("SUMA: ", suma) Escribir("DIFERENCIA: ", dif) Fin Diagrama NS

Page 55: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

55

Inicio

Leer num1, num2

suma <- num1 + num2

dif <- num1 - num2

Escribir("SUMA: ", suma)

Escribir("DIFERENCIA: ", dif)

Fin

Ejercitación en Lenguaje Perl

Se utiliza la instrucción print cuando se quiere enviar un mensaje a la salida estandar (generalmente el monitor).

print "Esto es un mensaje\n";

En el ejemplo, se muestra la cadena "Esto es un mensaje" por pantalla, y al final se inserta un salto de línea (\n), lo cual posicionará al cursor en un nuevo renglón.

$alfa = 345.2; $beta = 8; $resultado = $alfa * $beta; print "El resultado de multiplicar $alfa por $beta es $resultado\n\n";

Aquí el mensaje contiene terminos y variables de memoria ($alfa, $beta y $resultado). En el siguiente ejemplo se solicitará al operador que ingrese un dato. El ingreso se solicita con la instrucción <STDIN>, y se almacena el dato en la variable $d.

print "Ingrese una distancia en centimetros: "; $d = <STDIN>; chop($d); $r = $d / 2.54; print "$d centimetros equivalen a $r pulgadas\n";

Page 56: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

56

Page 57: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

57

Estructura Secuencial

La estructura secuencial corresponde a un conjunto de instrucciones que se ejecutan en una secuencia predeterminada y fija, de arriba hacía abajo.

El diagrama Chapin o NS (Nassi-Schneiderman) de la estructura secuencial es:

Instrucción 1

Instrucción 2

Instrucción 3

...

Instrucción n

Ejemplo: Construir un algoritmo para pasar una temperatura dada en grados centígrados a grados Fahrenheit. La fórmula para hacer la conversión es: F = ( 9 * C ) / 5 + 32; donde C es el valor en grados centígrados y F en grados Fahrenheit.

Inicio Leer temperatura en grados centígrados y almacenarlo en TC TF <- ( 9 * TC ) / 5 + 32;

Escribir("La temperatura equivalente en grados Fahrenheit es:",TF) Fin

Representación del pseudocódigo en un diagrama NS

Inicio

Leer temperatura en grados centígrados y almacenarlo en TC

TF <- ( 9 * TC ) / 5 + 32;

Escribir("La temperatura equivalente en grados Fahrenheit es:",TF)

Fin

Ejemplo de estructura secuencial

Page 58: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

58

Introducir dos números a y b, con partes decimales, luego obtener la suma de las partes decimales. Por ejemplo : a=16.12 y b=7.33 entonces deberá obtener s = 0.12 + 0.33 = 0.45

Diagrama NS

Inicio

Fin

Leer pn, sn

r = (pn - int(pn)) + (sn - int(sn))

Escribir("El resultado es", r)

Ejercitación en Lenguaje Perl

print "Ingrese el primer número : "; $pn = <STDIN>; chop($pn); print "Ingrese el segundo número: "; $sn = <STDIN>; chop($sn); $r = ($pn - int($pn)) + ($sn - int($sn)); print "La suma de las partes decimales de $pn y $sn es $r\n";

Page 59: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

59

Trabajo Práctico II - Estructura Secuencial

Ejercicios 1. Diseñe un algoritmo que halle el área y el perímetro de un rectángulo. Considere las siguientes fórmulas: área = base x altura, perímetro = 2 x (base+altura). 2. Diseñe un algoritmo para convertir una longitud dada en centímetros a pies. Considere que: 1 pie = 30.48 centímetros. 3. Calcular el área de un triángulo, conociendo su altura y su base. 4. En una carrera de turismo carretera el tiempo se mide en minutos, segundos y centésimas de segundo y, el espacio recorrido se mide en metros. Diseñe un algoritmo para determinar la velocidad promedio de un automóvil en km/hr. 5. Diseñe un algoritmo que determine la suma de las cifras de un número entero positivo de 4 cifras. 6. Diseñe un algoritmo que determine el porcentaje de varones y de mujeres que hay en un recinto

7. Dados dos números a y b, se desea intercambiar sus valores, utilizando una variable auxiliar

8. Dados dos números a y b, se desea intercambiar sus valores, sin utilizar una variable auxiliar. Por ejemplo si a=7 y b=12 debe mostrar a=12 y b=7.

9. Dados 2 números a y b, mostrar. 10. Diseñe un algoritmo para sumar dos marcas de tiempo dadas en horas, minutos y segundos. 11. Se solicita un préstamo por C pesos durante N meses a una tasa de interés mensual L. Al final de los N meses la cantidad adeudada es C * (1 + I) ^ N. Hacer un algoritmo al cual se le dan los valores de C, N e L, y calcule e imprima la suma adeudada.

Page 60: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

60

12. Construir un algoritmo al cual se le de un valor de X, y los coeficientes A, B y

C del polinomio: P(X)= AX2 + BX + C; y calcule e imprima el valor del polinomio. 13. Hacer un algoritmo para ingresarle una medida en metros, y que imprima esa medida expresada en centímetros, pulgadas, pies y yardas. Los factores de conversión son los siguientes:

1 yarda = 3 pies 1 pie = 12 pulgadas 1 metro = 100 centímetros 1 pulgada = 2.54 centímetros

14. Preparar un algoritmo para darle el diámetro de cualquier círculo, e imprima el radio, la circunferencia y la superficie. 15. Preparar un programa para darle las notas de cuatro parciales y muestre la nota promedio. 16. Una empresa de ventas de Alemania paga a sus empleados un salario fijo de 5000 marcos, mas una comisión de 200 marcos por cada venta realizada, mas el 8 % del valor de esas ventas. Preparar un algoritmo para que calcule el sueldo que le corresponde en un mes determinado, ingresando la cantidad de ventas que realizó y el valor total de las mismas. 17. Un millonario excéntrico tenía tres hijos: Carlos, José y Marta. Al morir dejó el siguiente legado: A José le dejó 4/3 de lo que le dejó a Carlos. A Carlos le dejó 1/3 de su fortuna. A Marta le dejo la mitad de lo que le dejó a José. Preparar un algoritmo para darle la suma a repartir e imprima cuanto le tocó a cada uno. Aplicaciones 1- ECUACION DE SEGUNDO GRADO: Todos sabemos que las raíces reales de una ecuación de segundo grado pueden obtenerse usando las fórmulas:

X1 = (-B + SQR(B^2 - 4*A*C)) / (2*A) y X2 = (-B - SQR(B^2 - 4*A*C)) / (2*A)

Realizar un algoritmo para ingresarle los coeficientes A, B y C, y que calcule y muestre por pantalla las raíces X1 y X2. Observación: este programa funcionará únicamente cuando las raíces sean reales, es decir cuando ( B ^ 2 - 4 * A * C )

Page 61: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

61

>= 0; de lo contrario se producirá un error al pretender obtener una raíz cuadrada de un número negativo. 2- DETERMINANTE DE UNA MATRIZ: Dada una matriz de tres filas por tres columnas:

| A1 A2 A3 | | A4 A5 A6 | | A7 A8 A9 |

puede obtenerse su determinante mediante la fórmula:

D = A1*A5*A9 + A2*A6*A7 + A3*A4*A8 - A3*A5*A7 - A2*A4*A9 - A1*A6*A8

Preparar un programa que permita ingresar por teclado los elementos de la matriz, y que calcule y muestre por pantalla el determinante. 3- CALCULO FINANCIERO, AMORTIZACIONES: En un préstamo amortizable en cuotas fijas mensuales, el valor de las mismas esta dado por las siguientes fórmulas:

CUOTA = CAPITAL * ((1 + I) ^ N - 1) / (I * (1+ I) ^ N) I = TASA / 100

donde CUOTA es el valor de la cuota a pagar, CAPITAL es la cantidad de dinero prestado, TASA es el porcentaje de interés mensual, y N es la cantidad de cuotas a pagar. Preparar un programa para ingresarle los valores de CAPITAL, TASA y N, y calcule y muestre por pantalla el valor de la cuota a pagar. Temas complementarios 1- SISTEMAS DE ECUACIONES: Dado un sistema de ecuaciones con dos incógnitas: ax + by = c dx + ey = f Preparar un programa para ingresarle los coeficientes, y que calcule por el método de sustitución los valores de x e y, mostrándolos por pantalla. 2- SISTEMAS DE ECUACIONES: Preparar un programa como el anterior, pero para un sistema de tres ecuaciones con tres incógnitas, usando el método de

Page 62: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

62

determinantes. 3. CALCULO FINANCIERO: Transformando adecuadamente la fórmula de la cuota dada anteriormente, pueden construirse programas que obtengan:

a) El capital a partir del valor de la cuota, de la tasa, y de la cantidad de cuotas. b) La cantidad de cuotas a partir del capital, del valor de la cuota, y de la tasa de interés.

4. CAMBIO DE COORDENADAS: Un vector puede estar definido por sus coordenadas rectangulares ( x e y), o por sus coordenadas polares ( fi y ro). Para pasar de un sistema a otro se usa el teorema de Pitágoras y las funciones trigonométricas. Desarrollar un programa para pasar de rectangular a polar y otro para pasar de polar a rectangular.

Page 63: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

63

Estructura de Selección Decisiones Hasta ahora se han visto algoritmos en los cuales se ingresan ciertos datos, luego se hacen algunas operaciones aritméticas y finalmente se muestran los resultados por la pantalla o la impresora. En realidad, esta es una utilización muy pobre de la computadora, como si solamente se tratara de una calculadora una poco más sofisticada, con la única ventaja de permitirnos construir un programa una vez y posteriormente, utilizarlo todas las veces que sea necesario con distintos grupos de datos. Como se vio anteriormente, una característica importante que distingue a una computadora de otras máquinas es la posibilidad de ejecutar operaciones lógicas, es decir que puede evaluar expresiones del tipo: 1) total > 50 2) alfa < mo 3) be4 <- jota + 6 4) pepe - 4 = alfa + beta De la evaluación de este tipo de operaciones se pueden obtener dos resultados posibles: verdadero (V) o falso (F). En el primer ejemplo, la computadora va a ir a buscar el número que esté almacenado en la variable total y va a verificar si ese dato es mayor que 50, en cuyo caso el resultado de la expresión será verdadera; de otra manera, si el número es igual a 50 o menor, el resultado de la expresión será falso. En el segundo ejemplo la computadora consultará los contenidos de las variables alfa y mo, y verificará si se cumple o no que el número almacenado en alfa es menor que el almacenado en mo. Los ejemplos tres y cuatro involucran operaciones aritméticas, en estos casos la computadora consultará los contenidos de las variables en juego, efectuará las operaciones aritméticas que correspondan y luego comparará los resultados, verificando si cumplen o no la condición indicada. Es posible también hacer que la computadora evalúe expresiones más complejas, por ejemplo, podemos desear verificar si el contenido de la variable samo es mayor que 45 pero menor que 70, lo que podemos expresar matemáticamente

Page 64: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

64

como 45 < samo < 70, pero en realidad esta forma de expresarlo está encubriendo otro operador lógico. En informática escribiremos esta expresión como:

samo > 45 AND samo < 70 en la que el símbolo AND representa al operador lógico "y" (conjunción). ¿Cómo se evaluará esta expresión?. Primero la computadora obtendrá los resultados a ambos lados del AND; luego operará con esos dos valores para obtener el valor de verdad de AND. De forma similar se puede trabajar con el operador lógico OR (disyunción). Por lo general se dispone también de las operaciones de negación, disyunción exclusiva, implicación y equivalencia. Esta capacidad de evaluar expresiones lógicas se utiliza para hacer que la computadora tome decisiones de las instrucciones a ejecutar en base al resultado obtenido. Estructura Condicional Simple En el caso mas sencillo, se le indica a la computadora que ejecute un cierto grupo de instrucciones si se cumple una cierta condición:

Si (condición) entonces hacer { ...

(instrucciones) ..

} Fin Si Llamaremos "estructura de decisión" o "estructura condicional simple" a este bloque de instrucciones, la computadora verificará si se cumple la condición indicada, en cuyo caso pasará a ejecutar las instrucciones que se detallaron, en cambio si la condición no se cumple no las ejecutará y pasará a las instrucciones que siguen en el algoritmo. A este caso podemos describirlo con la frase "hacer si se cumple". El diagrama Chapin para representar a una estructura condicional simple es el siguiente:

Page 65: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

65

V FCondición

Instrucción 1

....

Instrucción n

Ejemplo en pseudocódigo

Si (gama > 22) entonces hacer {

gama <- gama /3;

....

} Fin Si

V Fgama > 22

gama <- gama / 3

....

.....

Ejemplo Suponga que se vende un artículo cuyo precio unitario es de $1235.-, se desea un algoritmo al cual se le dé la cantidad vendida e imprima el monto de la venta, teniendo en cuenta que si se venden más de 12 unidades se efectúa un descuento de $1700.-; la estructura de decisión debe resolver una situación que puede describirse como sigue: "comprobar si se vendieron mas de 12 unidades, en ese caso, descontarle al monto $1700.-", : Si (cantidad > 12) entonces hacer { monto <- monto – 1700 } Fin Si

Page 66: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

66

Agregando las instrucciones de entrada, salida y cálculo, obtenemos el algoritmo completo que resuelve el problema:

Inicio Leer(cantidad) monto <- cantidad * 1235 Si cantidad > 12 entonces hacer { monto <- monto - 1700 } Fin Si Escribir(monto) Fin

Ejercitación en Lenguaje Perl

La instrucción de decisión se expresa con el término if, seguido de una condición y finalmente un bloque (delimitado por llaves) a ejecutar en caso de que la evaluación de la condición de verdadero. El bloque puede contener n instrucciones separadas por punto y coma. print "Ingrese cantidad a adquirir: "; $c = <STDIN>; chop($c); $monto = $c * 1235; if ($c > 12) { $monto = $monto - 1700; } print "El monto es $monto\n";

Estructura de Selección Compuesta En el caso más general, se le indicará a la computadora que ejecute un determinado grupo de instrucciones si el resultado de una evaluación es V, u otro grupo si el resultado es F. Si (condición) entonces hacer {

Page 67: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

67

... (instrucciones) ... } de lo contrario hacer { ... (instrucciones) ... } Fin Si En diagrama chapín la estructura condicional compuesta se representa:

V FCondición

Instrucción 1

....

Instrucción n

Instrucción 1

....

Instrucción n

Si (gama > 22) entonces hacer {

gama <- gama /3;

....

}

de lo contrario hacer

{

escribir("gama no es mayor a 22")

...

}

Fin Si Ejemplo

Page 68: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

68

Supongamos que una empresa vende un cierto producto a un precio de $215.- la unidad, pero si el cliente compra mas de 100 unidades, el precio se rebaja a $197.- la unidad: Si (C > 100) entonces hacer { P <- 197 } de lo contrario hacer { P <- 215 } Fin Si Si se desea un programa completo al cual se le ingrese la cantidad vendida e imprima el monto de la misma, falta agregar las instrucciones correspondientes a la entrada, salida y cálculos:

Inicio Leer(cantidad)

Si (cantidad > 100) entonces hacer { precio <- 197 } de lo contrario { precio <- 215 } Fin Si monto <- cantidad * precio Escribir(monto) Fin

En diagrama NS

Page 69: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

69

V Fcantidad > 100

precio <- 197

....

.....

Leer cantidad

precio <- 215

monto <- cantidad * precio

escribir monto

inicio

Fin

Ejercitación en Lenguaje Perl En el presente ejemplo se utiliza una estructura condicional compuesta. La alternativa "de lo contrario" se expresa utilizando el término else seguido de un bloque de instrucciones a ejecutar. print "Ingrese cantidad : "; $c = <STDIN>; chop($c); if ($c > 100) { $precio = 197; } else { $precio = 215; } $monto = $c * $precio; print "El monto es $monto\n";

Otro ejemplo: Supongamos que se nos presenta el siguiente problema: "Ingresar un número entero N y mostrar por pantalla un cartel indicando si es par o impar". Para saber si un número N es par es suficiente comprobar si es divisible por dos, o lo que es lo mismo, que el cociente N / 2 produzca como resultado un número entero. Para ello podemos usar la función "parte entera" que está disponible en la mayoría de los lenguajes de computación, esta función, la indicaremos: variable1 <- int(variable2)

Page 70: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

70

permite almacenar en variable1 la parte entera del número guardado en variable2, o sea que si en variable2 hay un 23.456 en variable1 quedará almacenado un 23. Por otra parte, se observa que si se almacena en una variable cociente el resultado de la división entre número y 2, y en otra llamada entero la parte entera de cociente, tendremos que si número es divisible por 2, el contenido de entero será igual al de cociente. Teniendo en cuenta ello, proponemos la siguiente solución para el problema planteado:

Inicio

Fin

Leer numero

cociente = numero / 2

entero = int(cociente)

entero = cociente

V F

Escribir("El

número es par")

Escribir("El

número es impar")

también puede hacerse:

Page 71: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

71

Inicio

Fin

Leer numero

cociente = numero / 2

entero = int(cociente)

fraccion = 0

V F

Escribir("El

número es par")

Escribir("El

número es impar")

fraccion = cociente - entero

ó también :

Inicio

Fin

Leer numero

numero/2 = int(numero/2)

V F

Escribir("El

número es par")

Escribir("El

número es impar")

Selecciones Anidadas Frecuentemente es necesario efectuar un proceso de decisión dentro de otro, es decir, según la salida que tenga la primera condición, se debe efectuar una segunda instrucción de decisión, en forma general, esto puede presentarse como sigue:

Si (condición 1) entonces hacer (I)

Page 72: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

72

{ (instrucciones) } de lo contrario { (instrucciones)

Si (condición 2) entonces hacer (II) { (instrucciones) } de lo contrario {

(instrucciones) } Fin Si

} Fin Si

Llamamos "selecciones anidadas", a esta estructura. Esta disposición de instrucciones puede ser mucho mas compleja, dado que las instrucciones Si marcadas con (I) y (II) pueden contener a su vez otras estructuras de selección dentro de sus respectivas salidas por verdadero y falso. Decisiones anidadas graficadas en un diagrama NS

Condicion 1

V F

Escribir("El

número es impar")

Instrucciones

Condición 2

V FInstrucciones

Instrucciones

Page 73: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

73

Ejemplo Si se nos presenta el siguiente problema: "Una empresa de USA paga a sus empleados un sueldo básico de U$S 800.-, más un adicional que se calcula de la siguiente manera:

-Los que trabajan en la sección 1 cobran U$S 120.- más, y sobre el total un adicional por antigüedad del 10 % si tienen menos de 5 años, y del 20 % si tienen 5 años o más. -Los que trabajan en la sección 2 cobran U$S 250.- más, pero no cobran adicional por antigüedad.

Preparar un algoritmo para ingresarle el número de sección y la antigüedad, y que muestre por pantalla cuanto cobra el empleado. En este caso la pregunta por la antigüedad depende de la sección en que trabaje, una posible solución podría ser:

Page 74: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

74

seccion = 1

V F

Escribir("El

número es impar")

antiguedad <-sueldo*10/100

años < 5

V F

sueldo <- basico + 250

antiguedad = 0

antiguedad <-sueldo*20/100

Leer seccion, años

basico <- 800

sueldo <- basico + 120

total <- sueldo + antiguedad

escribir("El monto a abonar es ", total)

Inicio

Fin

Ejercitación en Lenguaje Perl print "Ingrese seccion del empleado: "; $seccion = <STDIN>; chop($seccion); print "Ingrese años de antiguedad : "; $anios = <STDIN>; chop($anios); $basico = 800; if ($seccion == 1) { $sueldo = $basico + 120; if($anios < 5)

Page 75: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

75

{ $antiguedad = $sueldo*10/100; } else { $antiguedad = $sueldo*20/100; } } else { $sueldo = $basico + 250; $antiguedad = 0; } $total = $sueldo + $antiguedad; print "El monto a abonar es $total\n";

Menú de Opciones Un mismo algoritmo puede ejecutar distintos procesos alternativos, de tal forma que el usuario al ejecutarlo decida cuál de esas tareas es la que necesita en ese momento. En este caso el programa debe mostrar al usuario cual es el listado de tareas que puede hacer, y debe permitir que el operador opte por una de ellas; a este listado se lo denomina "menú". En el método más sencillo las opciones se presentan numeradas, de forma que el usuario pueda indicarlas por el número, éste se ingresa y se almacena en una variable, ejecutándose las instrucciones que correspondan, en síntesis, la secuencia de tareas es la siguiente:

1- Mostrar por pantalla el menú de opciones. 2- Ingresar el número de opción digitado por el usuario. 3- Según sea el número ingresado, ejecutar el procedimiento correspondiente.

Ejemplo Supongamos que se desea un algoritmo para obtener las superficies de distintas figuras geométricas, para simplificar consideraremos solo tres: triángulo, rectángulo y círculo. Las fórmulas respectivas son:

stT <- (base * altura) /2 srR <- base * altura sc <- 3.1416 * radio ^2

Page 76: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

76

Cuando ejecute el programa, el operador tiene que poder elegir que superficie calcular, para ello el programa muestra el menú de opciones:

Escribir(" Elija una opción") Escribir(" 1. Triángulo") Escribir(" 2. Rectángulo") Escribir(" 3. Círculo")

Cuando aparezca este menú en la pantalla, el operador digitará un número, que puede ser 1, 2 ó 3, cualquiera sea la respuesta, el programa la almacenará en una variable:

Ingresar una opción Una vez ingresado el número, el algoritmo ejecutará el procedimiento que corresponda al número ingresado, para ello deberá ejecutar instrucciones de decisión en las cuales compare el número almacenado dentro de la variable Opción:

Si opción = 1 entonces hacer {

Ejecutar TRIANGULO } Fin Si Si opción = 1 entonces hacer {

Ejecutar RECTANGULO }

Fin Si Si opción = 1 entonces hacer {

Ejecutar CIRCULO { Fin Si

Donde cada uno de estos procedimientos ingresa los datos necesarios, y efectúa los cálculos; el siguiente es un listado con el algoritmo completo:

Principio

Page 77: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

77

Escribir(" Elija una opción") Escribir(" 1. Triángulo") Escribir(" 2. Rectángulo") Escribir(" 3. Círculo") Leer(opcion)

Si opción = 1 entonces hacer {

Ejecutar TRIANGULO } Fin Si Si opción = 1 entonces hacer {

Ejecutar RECTANGULO }

Fin Si Si opción = 1 entonces hacer {

Ejecutar CIRCULO { Fin Si

Escribir("Superficie":, superficie)

Fin

Procedimiento TRIANGULO Leer(base, altura) superficie <- base * altura /2

Fin TRIANGULO Procedimiento RECTANGULO

Leer(base, altura) superficie <- base * altura

Fin RECTANGULO Procedimiento CIRCULO

Page 78: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

78

Leer(radio) superficie <- 3.1416 * radio ^2

Fin CIRCULO Obsérvese que en este algoritmo, si el usuario por error digita un número mayor que 3, no se ejecutará ningún procedimiento, y al final se pretenderá mostrar el contenido de la variable superficie, en la cual no hay nada almacenado. Esta situación puede salvarse si se agrega una decisión como la siguiente:

Si opcion > 3 entonces hacer {

Ejecutar CIRCULO { Fin Si

Ejercitación en Lenguaje Perl

$opcion = 0; $superficie = 0; print "Elija una opcion\n"; print "1. Triangulo\n"; print "2. Rectangulo\n"; print "3. Circulo\n"; $opcion = <STDIN>; chop($opcion); if ($opcion == 1) { &triangulo; } if ($opcion == 2) { &rectangulo; } if ($opcion == 3) { &circulo; } print "\nLa superficie es $superficie\n"; sub triangulo { print "\nIngrese base :"; $base = <STDIN>; chop($base);

Page 79: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

79

print "\nIngrese altura :"; $altura = <STDIN>; chop($altura); $superficie = $base*$altura/2; return($superficie); }

sub rectangulo { print "\nIngrese base :"; $base = <STDIN>; chop($base); print "\nIngrese altura :"; $altura = <STDIN>; chop($altura); $superficie = $base*$altura; return($superficie); } sub circulo { print "\nIngrese radio :"; $radio = <STDIN>; chop($radio); $superficie = 3.1416*($radio*$radio); return($superficie); }

Estructura de Selección Múltiple

Esta forma es útil cuando se tiene que elegir entre más de dos opciones, se denomina de selección múltiple. En esta estructura, una variable de control puede tomar distintos valores. Según el caso, se ejecutan distintas acciones.

Alternati

va 1

Alternati

va 2 y 3Alternati

va n

De lo

contrario

Evaluar Selector

Instrucciones Instrucciones Instrucciones Instrucciones

Reglas:

1. La expresión <selector> se evalúa y se compara con las constantes que expresan cada caso posible; las constantes son listas de uno o más

Page 80: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

80

valores de <selector>. Ejecutadas la(s) <instrucciones>, el control se pasa a la primera instrucción a continuación del Fin del selector.

2. La alternativa "de lo contrario" es opcional. 3. Si el valor de <selector> no está comprendido en ninguna lista de

constantes y no existe la alternativa "de lo contrario", se sigue con el flujo del programa. En caso de existir la cláusula "de lo contrario" se ejecutan las instrucciones correspondientes a tal bloque.

Diagrama NS del cuerpo principal del programa menú utilizando una estructura de selección múltiple.

Fin

Inicio

Escribir("Elija una opcion"; "1. Triangulo";

"2. Rectangulo";"3. Circulo";)

Leer(opcion)

Evaluar opcion

Ejecutar(triangulo)

Alternativa 1

Ejecutar(rectangulo)

Escribir("La superficie es ",superficie")

Alternativa 2

Ejecutar(circulo)

Alternativa 3

De locontrario

Page 81: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

81

Trabajo Práctico III - Estructura Condicional

1. Escribir un programa que indique si un número introducido por teclado es positivo, igual a cero o negativo. 2. Dados dos números a y b, se desea mostrarlos ordenados ascendentemente 3. Ingresar tres números y hallar el mayor. 4. Ingresar tres números y hallar el menor. 5. Ingresar tres números y hallar la diferencia del mayor menos el menor. 6. Ingresar tres números y hallar la diferencia del medio menos el menor. 7. Ingresar un número n y verificar si es múltiplo de 3 o 5. 8. Ingresar tres números, y si los tres son iguales se debe mostrar solamente un mensaje. 9. Ingresar tres números, y si dos son iguales mostrar un mensaje. 10. Se desea escribir el nombre del día de la semana en función de un número de día, introducido por teclado. Donde 1 es Domingo, 2 Lunes y así sucesivamente. 11. Haga un programa que determine si un año es bisiesto: si es divisible por 4, pero no es divisible por 100 o si es divisible por 400. Ejemplos: año 1998 no, año 1996 si, año 1900 no, año 2000 si. 12 Suma de fracciones. Para sumar dos números racionales se utiliza la siguiente fórmula: a c ad + bd - + - = ------- b d bd 13. Diseñe un algoritmo para obtener el grado de eficiencia de un operario de una fábrica de tornillos, de acuerdo a las siguientes condiciones, que se le imponen para un período de prueba:

Page 82: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

82

- Menos de 200 tornillos defectuosos. - Más de 10000 tornillos producidos. El grado de eficiencia se determina de la siguiente manera:

- Si no cumple ninguna de las condiciones, grado 5. - Si sólo cumple la primera condición, grado 6. - Si sólo cumple la segunda condición, grado 7. - Si cumple las dos condiciones, grado 8.

14. Diseñe un algoritmo que lea tres longitudes y determine si forman o no un triángulo. Si es un triángulo determine de que tipo de triángulo se trata entre: equilátero (si tiene tres lados iguales), isósceles (si tiene dos lados iguales) o escaleno (si tiene tres lados desiguales). Considere que para formar un triángulo se requiere que: "el lado mayor sea menor que la suma de los otros dos lados".

15. Diseñe un algoritmo que califique el puntaje obtenido en el lanzamiento de tres dados en función a la cantidad seis obtenidos, de acuerdo a lo siguiente:

- Seis en los tres dados, excelente. - Seis en dos dados, muy bien. - Seis en un dado, regular. - Ningún seis, pésimo.

16. Una compañía dedicada al alquiler de automóviles cobra $30 hasta un máximo de 300 km de distancia recorrida. Para más de 300 km y hasta 1000 km, cobra $30 más un monto adicional de $ 0.15 por cada kilómetro en exceso sobre 300. Para más de 1000 km cobra $30 más un monto adicional de $ 0.10 por cada kilómetro en exceso sobre 1000. Los precios ya incluyen el 18% del impuesto general a las ventas, IGV. Diseñe un algoritmo que determine el monto a pagar por el alquiler de un vehículo y el monto incluido del impuesto. Aplicaciones 1. FUNCIONES CALENDARIO: La cantidad de días transcurridos entre dos fechas puede calcularse transformándolas en días Julianos. Esta es una convención astronómica que representa cada fecha como el número de días transcurridos desde el 1 de enero de 4713 AC. Para transformar una fecha expresada como DIA, MES y AÑO en días Julianos se usa la siguiente fórmula:

Page 83: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

83

DJ = ENT (365.25 * AP) + ENT (30.6001 * MP) + + DIA + 1720982 donde DJ es el día Juliano, y AP y MP son dos constantes que se obtienen como sigue: Si MES = 1 ó 2: AP = AÑO - 1 MP = MES + 13 Si MES > 2: AP = AÑO MP = MES + 1 La cantidad de días entre dos fechas es igual a la diferencia entre los respectivos días Julianos:

días = (día Juliano 2) - (día Juliano 1) Preparar un programa BASIC para ingresarle las dos fechas como DIA1, MES1, AÑO1, y DIA2, MES2, AÑO2 respectivamente, y muestre la cantidad de días transcurridos entre ambas. 2. En el cálculo de raíces de la ecuación de segundo grado visto en el capítulo anterior, el programa no funcionará si la expresión B ^ 2 - 4 * A * C da resultado negativo, porque en ese caso la ecuación tiene raíces imaginarias. Modifique el programa para que antes de calcular las raíces evalúe la expresión, y en caso necesario, muestre el cartel : "RAICES IMAGINARIAS", y termine la ejecución. Temas Complementarios 1. Pueden construirse otros programas de funciones calendario, que permitan obtener por ejemplo:

a) Dada una fecha a la cual se le suma una cierta cantidad de días, cual es la fecha resultante. b) Dada una fecha, a que día de la semana corresponde. Se dan a continuación las fórmulas que pueden aplicarse para este tipo de problemas:

Page 84: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

84

DIAP = DJ - 1720982 AP = ENT ( (DIAP - 122.1) / 365.25) MP = ENT ((DIAP - ENT(365.25 * AP))/30.6001) DIA = DIAP-ENT(365.25 * AP)-ENT(30.6001 * MP) Si MP = 14 ó 15: MES = MP - 13 Si MP < 14: MES = MP -1 Si MES > 2: AÑO = AP Si MES = 1 ó 2: AÑO = AP + 1

Para calcular el día de la semana: DS = 7 * FRAC ( (DIAP + 5) / 7)

donde DS = 0 ----> domingo DS = 1 ----> lunes ..... DS = 6 ----> sábado

2. SUPERFICIE DEL CUERPO HUMANO (BSA): La superficie de un cuerpo humano puede estimarse aproximadamente a partir de los datos de peso y altura (P y H). Por lo general se usa la fórmula de DuBois:

BSA(D)= H ^ 0.725 * P ^ 0.425 * 0.007184 en la cual la altura debe estar expresada en centímetros y el peso en kilogramos, mientras que la superficie queda dada en metros cuadrados. Esta fórmula produce un gran error para valores de BSA(D) menores que 0.6

Page 85: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

85

m2, como ocurre en el caso de los niños. Para valores de BSA(D) menores que el indicado se usa la fórmula de Boyde:

BSA(B)= H^0.3 * P^(0.7285-0.0188*log(P)) * 0.0003207 en la cual la altura está expresada en cm. y el peso en gramos. La superficie queda dada en m2.

Page 86: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

86

Page 87: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

87

Estructura Repetitiva o Iterativa La estructura repetitiva es utilizada cuando se necesita que un conjunto de instrucciones (bloque) se ejecuten un cierto número finito de veces. Un bucle, lazo o ciclo, forma básica de una estructura iterativa, se compone de dos partes: a) una condición, y b) un cuerpo o bloque.

Mientras x sea distinto de 3 hacer <- condición{

instrucción 1instrucción 2 <- bloque.......................instrucción n

}Fin Mientras

Estructura

de control

Básicamente existen dos tipos de estructuras repetitivas o iterativas: a) donde el número de ciclos a ejecutar el bloque está perfectamente establecido, y b) donde el número de ciclos que se ejecutará el bloque se determina por la evaluación de una cierta condición.

Ejemplo de número de ciclos preestablecidos Para n igual 0 hasta n igual 10 -incremento 1- hacer

{ Mostrar n^n n <- n + 1 } Fin Para Ejemplo de número de ciclos dependientes de una condición suma <- 0 contador <- 0 n <- 1 Mientras n sea mayor a 0 hacer { Ingrese un número ( 0 finaliza):, número_ingresado Si número_ingresado es menor o igual a 0 hacer {

Page 88: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

88

promedio <- suma / contador mostrar promedio } De lo contrario hacer {

suma <- suma + número_ingresado contador <- contador + 1 } Fin Si } Fin Mientras Las estructuras iterativas más populares son

° Mientras ° Repetir ° Repetir - Hasta ° Para

Estructura Mientras La estructura repetitiva Mientras es aquella en la que el número de iteraciones no se conoce por anticipado y el cuerpo del ciclo o bloque se ejecuta repetidamente mientras que una condición sea verdadera .

Su sintaxis es : Mientras <condición> hacer { instrucción 1 instrucción 2

....................... instrucción n } Fin Mientras El diagrama Chapin o NS (Nassi-Schneiderman) de la estructura Mientras es:

Page 89: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

89

Mientras <condición> hacer

Instrucciones

Explicación del modo de funcionamiento :

° La expresión que conforma la condición se evalúa antes y después de cada ejecución de las instrucciones comprendidas por el bloque. Si la condición da por resultado verdadero, se ejecuta el bloque, y si es falsa, el control pasa a la instrucción siguiente al bloque

° Si al evaluar la condición por primera vez, se determina que el

resultado es falso, entonces no se ingresa al bloque y el control pasa a la instrucción siguiente al bloque. Es decir que el bloque no se ejecutará nunca.

° Si alguno de los elementos que componen la expresión de

evaluación no se modificase, y la expresión hubiese arrojado -previamente- verdadero en su evaluación. Se ha ingresado en un ciclo infinito, del cual nunca se saldrá. Tales ciclos deben evitarse.

Ejemplo:

Construir un algoritmo para calcular e imprimir la suma de los números enteros comprendidos entre -27 y 34, ambos inclusive.

Page 90: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

90

Mientras numero <= 34 hacer

suma <- suma + número

numero <- numero + 1

Escribir(suma)

Fin

suma <- 0

numero <- -27

Inicio

Ejercitación en Lenguaje Perl Nótese que la orden mientras se codifica con el término while. Al bloque se lo delimita con los caracteres {}. Programa que muestra el menor número natural ingresado por teclado. my $i = 0; my $iterar = 1; my $mayor = 0; while ($iterar == 1) { print "Ingrese un número natural (0 es fin):"; $i = <STDIN>; if ($i <= 0) { $iterar = 0; print "\nEl mayor número ingresado es ".$mayor."\n"; } else { if ($i > $mayor) { $mayor = $i; } } }

Page 91: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

91

print "\nFin del programa\n";

Estructura Repetir La instrucción Repetir permite que se ejecute un bloque de instrucciones y luego se evalúe una condición a los efectos de ejecutar nuevamente el bloque -en caso de resultar verdadera- o continuar con la próxima instrucción siguiente al bloque

Su sintaxis es :

Hacer { instrucción 1 instrucción 2

....................... instrucción n } Repetir Mientras <condición>

El diagrama Chapin de la estructura Repetir es:

Mientras <condición> hacer

Instrucciones

Explicación del modo de funcionamiento :

° La condición se evalúa al final del bloque, después de ejecutarse todas las instrucciones contenidas.

° Si o si siempre se ejecuta al menos una vez el bloque.

Page 92: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

92

° Si el resultado de la evaluación de la condición da verdadero, se continua iterando, de lo contrario se continua con la próxima instrucción de programa.

Ejercitación en Lenguaje Perl Se utiliza el término do para indicar el comienzo de una estructura Repetir, a continuación se inserta el bloque de instrucciones, utilizando los delimitadores {}. Al final de llave de cierre se inserta la instrucción de evaluación que corresponde al término while. Programa que .. my $i = 0; my $iterar = 1; do { if ($i == 0) { $iterar = 0} print $i."\n"; } while ($iterar == 1)

Estructura Repetir - Hasta La instrucción Repetir-Hasta permite iterar por un bloque de instrucciones hasta que la evaluación de una condición da verdadero.

Su sintaxis es :

Haga { instrucción 1 instrucción 2

....................... instrucción n } Repetir Hasta <condición>

El diagrama de la estructura Repetir-Hasta es:

Page 93: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

93

Repetir Hasta <condición> hacer

Instrucciones

Explicación del modo de funcionamiento :

° La condición se evalúa al final del bloque, después de ejecutarse todas las instrucciones contenidas.

° Si o si siempre se ejecuta al menos una vez el bloque. ° Si el resultado de la evaluación de la condición da verdadero, se sale

del ciclo, de lo contrario se continúa iterando.

Ejercitación en Lenguaje Perl Se utiliza el término do para indicar el comienzo de una estructura Repetir, a continuación se inserta el bloque de instrucciones, utilizando los delimitadores {}. Al final de llave de cierre se inserta la instrucción de evaluación que corresponde al término until. Programa que .. my $i = 0; my $iterar = 0; do { if ($i == 0) { $iterar = 1} print $i."\n"; } until ($iterar == 1)

Page 94: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

94

Estructura Para Estructura que se utiliza para iterar en aquellos casos que de antemano se conoce la cantidad de ciclos a realizar. Por ejemplo: ingresar 10 notas de un alumno y calcular su promedio y desvío estandar. Al ejecutarse la orden Para primera vez, a la variable de control se le asigna un valor inicial (expresion1). Inmediatamente se ejecutan las instrucciones del bloque asociado y luego se verifica si el valor final (expresión2) es mayor que el valor inicial (expresión); en caso de no ser así se incrementa o decrementa automáticamente el contenido de la variable de control en uno y se vuelve a ejecutar el bloque de instrucciones, hasta que la variable de control sea mayor/menor que el valor final referido en la expresión2, situación en la que se finaliza la estructura Para y se continua con la próxima instrucción que continua al bloque antedicho.

Su sintaxis es :

Para <variable_de_control> <- <expresión1> hasta <expresion2> hacer {

instrucción 1 instrucción 2

....................... instrucción n }

Fin Para El diagrama de la estructura Repetir-Hasta es:

Para <variable_control> <- <expresión1> .

hasta <expresion2> hacer .

Instrucciones

Page 95: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

95

Explicación del modo de funcionamiento :

° La variable de control se inicializa una sola vez, al inicio de la primera iteración.

° La condición se evalúa en cada iteración. ° El incremento o decremento se realiza antes de cada evaluación. ° Hay lenguajes en los cuales la condición de finalización está

implícita en la misma estructura. Tal como el caso del lenguaje Pascal donde la forma de la instrucción Para es: FOR variable: valor_inicial TO valor_final.

° Al finalizar la ejecución de una estructura de control Para, la variable

de control está instanciada con el valor de expresión2 más un incremento o decremento, según corresponda.

Ejercitación en Lenguaje Perl Se utiliza el término for para indicar el comienzo de una estructura Para, a continuación se inserta el bloque de instrucciones, utilizando los delimitadores {}. Programa que .. for ($n=1; $n<10; $n++) { print "iteración número:".$n."\n"; } print "n contiene ".$n." al salir del la estructura Para\n";

Salida #> perl p.pl iteración número:1 iteración número:2 iteración número:3 iteración número:4 iteración número:5

Page 96: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

96

iteración número:6 iteración número:7 iteración número:8 iteración número:9 n contiene 10 al salir del la estructura Para

Ejemplos de Uso de Estructuras Repetitivas Se ingresan por teclado las notas de los alumnos en una determinada asignatura, o un 99 si el alumno estuvo ausente. Preparar un algoritmo para calcular e imprimir la nota promedio, recordando que el alumno ausente no se promedia. Luego de la última nota se ingresa un valor negativo. Principio suma <-- 0 cantidad <-- 0 Leer(nota) Mientras nota >= 0 hacer { Si nota <> 99 entonces hacer: {

suma <-- suma + nota cantidad <-- cantidad + 1

} Fin Si Ingresar nota } Fin mientras promedio <-- suma / cantidad Escribir("Promedio: "; promedio) Fin Se ingresan por teclado 100 números enteros. Preparar un algoritmo que cuente y muestre por pantalla la cantidad de negativos, positivos y ceros que se ingresaron. Principio sumaneg <-- 0 sumapos <-- 0 sumacer <-- 0 Para contador = 1 hasta 100 hacer:

Page 97: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

97

{ Leer(número) Si número < 0 entonces hacer: { sumaneg <-- sumaneg + 1 } sino hacer: { Si número > 0 entonces hacer: { sumapos <-- sumapos + 1 } sino hacer: { sumacer <-- sumacer + 1 } Fin Si }

Fin Si }

Fin Para Escribir("Negativos: "; sumaneg) Escribir("Positivos: "; sumapos) Escribir("Ceros : "; sumacer) Fin Búsqueda del Extremo Un problema típico es el de encontrar el valor extremo entre una serie de valores, es decir el máximo o el mínimo. Tomemos el caso más trivial: encontrar y mostrar el mayor de un grupo de números ingresados por el teclado. La forma simple de pensar el problema es comparar cada nuevo número que ingresa con el mayor de los que ingresaron hasta el momento, si el nuevo es mayor lo tomaremos como tal de aquí en más, sino lo descartamos y comparamos el que sigue: Ingresar número Si número > mayor entonces hacer {

Page 98: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

98

mayor <-- número } Fin Si De esta manera, en la variable mayor, siempre estará almacenado el mayor de los números ingresados, ya que cada vez que ingresa uno mayor se reemplaza el valor anterior por el nuevo. Para ello, cuando ingreso el primero, obviamente es el mayor por ser el único. El algoritmo completo queda como sigue: Principio Leer(n) Leer(número) mayor <-- número Para C = 2 hasta N hacer: { Leer(número) Si número > mayor entonces hacer: { mayor <-- número } Fin Si } Fin Para Escribir(mayor) Fin Obsérvese que C comienza valiendo 2, porque cuando se ingresa en el ciclo ya se ingresó el primer número. Validación de Datos Un refrán utilizado entre los programadores dice: "si ingresa basura, sale basura", lo que quiere decir que, independientemente de la excelencia del algoritmo, si se le ingresan datos erróneos producirá resultados también erróneos. La casi totalidad de los errores se produce en el ingreso de los datos por parte del operador. Si bien es imposible prever todos los errores que se pueden cometer, un buen programa debe estar preparado para evitar todos los que sea posible. Llamamos "validación" a este control de los datos que ingresan.

Page 99: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

99

La técnica básica parte de la premisa de que hay valores imposibles para ciertos datos: en una fecha, el día no puede ser mayor que 31 o el mes mayor de 12, la altura de una persona no puede ser 8 metros, el cónyuge no puede ser más que 1(?), etc. La mayoría de los datos posee un rango de valores posibles, y cada valor que ingresa debe estar necesariamente dentro de ese rango. La validación consiste en verificar que cada dato que ingresa se encuentre dentro del rango, si no es así, se le indica al operador que ingrese el dato nuevamente: Leer(variable) Mientras (variable fuera de rango) hacer: { Escribir(mensaje al operador) Leer(variable) } Fin mientras Ejemplo de validación Supongamos que en una fecha se ingresa el día, entonces comprobamos que no sea menor que 1 ni mayor que 31: Ingresar día Mientras día <1 ó día > 31 hacer { Escribir("dato erróneo, ingrese nuevamente") Leer(día) } Fin mientras Obsérvese que no es posible asegurar que este algoritmo va a evitar todos los errores, por ejemplo no detectará si el operador ingresa un 16 en lugar de un 15, en cambio sí funcionará en la mayoría de las inversiones, es decir si el operador ingresa un 72 en lugar de un 27, el cual es un error muy común cuando se digitan números rápidamente.

Page 100: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

100

Trabajo Práctico IV - Estructura Repetitiva

1. Hallar el máximo común divisor y el mínimo común múltiplo de dos números naturales. 2. Calcular la suma y el producto de los números pares comprendidos entre 20 y 500. 3. Ingresar un número natural n e indicar si es primo. 4. Dado un número natural n se desea mostrar todos los números primos anteriores a n.

5. Preparar un algoritmo para ingresarle dos números naturales N1 y N2, hallar el producto N1 * N2 mediante sumas sucesivas y mostrar el resultado. Recordar que:

N1 * N2 = N1 + N1 + ... + N1 (N2 veces)

6. Los números perfectos son números naturales que son iguales a la suma de todos sus divisores propios excepto él mismo. Así, por ejemplo, el 6 es un número perfecto ya que es igual a la suma de sus tres divisores propios: 1, 2 y 3. Se pide escribir un programa que calcule los cuatro primeros números perfectos.

7. Escribir un programa que imprima la secuencia de todas las combinaciones de hora y minuto de un día, comenzando por 01:00 y terminando por 12:59. 8. ¿A cúanto asciende la suma de los números pares comprendidos entre 300 y 1232? 9. Construir un algoritmo para calcular y mostrar por pantalla cuantas campanadas da un reloj desde una cierta hora H, que se ingresa por teclado, hasta las doce de la noche, el reloj da una campanada a las y media. 10. Construir un algoritmo para ingresarle un número natural n, y que calcule y muestre por pantalla el factorial de n. La fórmula general para hallar el factorial de un número entero positivo es: n! = n * (n - 1)! 11. Construir un algoritmo para ingresarle por el teclado dos números naturales M y N. Hallar el cociente M/N por restas sucesivas y mostrar por pantalla el

Page 101: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

101

dividendo, divisor, cociente y resto. 12. Ingresando un número natural N, construir un algoritmo para hallar y mostrar por pantalla los divisores naturales de N. Usar parte entera (INT). 13. En la sucesión de Fibonacci, los dos primeros números son 0 y 1, y cada uno de los restantes es igual a la suma de los dos que lo anteceden. Los primeros términos son: 1, 1, 2, 3, 5, 8, 13, 21, ... Preparar un algoritmo para ingresarle una cantidad C, y que muestre los primeros C términos de la sucesión. 14. Completar el algoritmo anterior para calcular también la suma y el producto de los primeros C términos de la sucesión. 15. Se efectúa una encuesta entre 120 consumidores de cigarrillos. Las respuestas están codificadas como 1, 2 ó 3 según sea la marca elegida. Preparar un algoritmo para ingresarle las 120 respuestas, y muestre por pantalla el número de la marca preferida. 16. Preparar un algoritmo que encuentre e imprima todos los números de tres dígitos (del 100 al 999) que sean iguales a la suma de los cubos de sus dígitos. Recordar que un número de tres dígitos, por ejemplo 729, puede construirse sumando 700 + 20 + 9, o sea: 7 * 100 + 2 * 10 + 9 17. Preparar un algoritmo que encuentre e imprima los números primos comprendidos entre 1000 y 2000. Ciclos Anidados 1. Escribir programas que visualicen en pantalla figuras similares a las siguientes

* **** * * ** *** ** * *** ** *** * **** * **** * *** ** *

Siendo variable el número de líneas, debiéndose ingresar por teclado. Para los casos ejemplo el número de líneas es 4.

Page 102: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

102

Aplicaciones 1. REGRESION LINEAL: Dados una serie de pares de datos correspondientes a dos variables, pueden obtenerse los coeficientes de la recta que mas aproxima a los datos. Por ejemplo, si se tienen los siguientes valores de ventas de una empresa durante los últimos cinco años: x : año y : ventas (mill)

1985 1.25 1986 1.75 1987 2.00 1988 2.50 1989 3.25 VENTAS| | * 3 + | | * | 2 + * | * | | * 1 + | | | 0 +-----+-----+-----+-----+-----+-----> 85 86 87 88 89 AÑO

A partir de estos datos pueden obtenerse mediante el método de regresión lineal los coeficientes de una recta que aproxima a estos puntos, y que da la pendiente del crecimiento de las ventas a través del tiempo. Esta recta tendrá la forma: VENTAS = A + B * AÑO o en general: y = A + B * x Las fórmulas para hallar los coeficientes A y B son las siguientes:

Page 103: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

103

B = (Sxy - Sx *Sy / N) / (Sx2 - (Sx) ^ 2 / N) A = Sy / N - B * Sx / N

donde: N : Cantidad de pares de datos Sx : Sumatoria de las x Sy : Sumatoria de las y Sx2: Sumatoria de los cuadrados de x Sxy: Sumatoria de los productos x * y Para determinar la calidad de la aproximación de la recta con respecto a los datos se usa el "coeficiente de determinación" (r). Valores de r cercanos a uno indican mejor aproximación que valores cercanos a cero. La fórmula para la obtención de r es un poco mas compleja:

r = (Sxy - Sx * Sy / N) ^ 2 / ((Sx2 - Sx ^ 2 / N) * (Sy2 - Sy ^ 2 / N)) nótese una diferencia: Sx2 indica la suma de los cuadrados de x, en cambio en Sx^2 se efectúa el cuadrado de la suma. Preparar un programa para ingresarle N, luego ingresarle N pares de datos correspondientes a ambas variables, y muestre los coeficientes de la recta que los aproxima y el coeficiente de determinación. 2. CALCULO COMBINATORIO: En la teoría combinatoria se estudia la manera de ordenar los elementos de un conjunto o la manera de agrupar sus elementos, obteniendo fórmulas que permitan calcular el número de ordenaciones o el de grupos que puedan formarse. Los conceptos más importantes son el de permutación, variación y combinación. Permutaciones: Son los distintos modos de ordenar los elementos de un conjunto. Ejemplo: en el conjunto formado por A, B y C, las permutaciones son: ABC, ACB, BAC, BCA, CAB y CBA. El número de permutaciones posibles con n elementos está dado por: Pn = n! (ver ejercicio de factorial) Variaciones: Se llama variación de n objetos tomados p a p (o variación de orden p) a todo conjunto ordenado formado por p objetos seleccionados de cualquier

Page 104: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

104

manera entre los n objetos dados, considerando distintas dos variaciones cuando difieran en algún objeto o en el orden en que estén dispuestos. El número de variaciones de orden p que se pueden formar con n objetos está dada por: Vn, p = n! / (n - p) ! Combinaciones: Se llama combinación de n objetos diferentes tomados p a p (o combinación de orden p) a todo conjunto de p objetos elegidos entre los n objetos dados, de tal modo que dos conjuntos se diferencien al menos en un objeto. El número de combinaciones de orden p que se pueden formar con n objetos está dado por: Cn, p = n! / ( p! * (n - p)! ) Preparar un programa de cálculo combinatorio que presente un menú con las tres posibilidades. Temas complementarios 1. MAS SOBRE REGRESION: No siempre es una recta la que mejor ajusta a un grupo de pares de datos. Damos a continuación las fórmulas para obtener regresiones exponenciales, logarítmicas y potenciales, con las cuales podrán construirse los respectivos programas. Ante la duda frente a un determinado grupo de datos, se pueden efectuar las cuatro regresiones, teniendo en cuenta que la que mas aproxime a la realidad es aquella que de un mayor coeficiente de determinación. Aproximación exponencial. La ecuación de la curva es: y = A * e ^ (B * x) donde e es la base de los logaritmos naturales, siendo aproximadamente 2.71828... Las fórmulas para obtener los coeficientes son:

B = (Sxlny - Sx * Slny / N) / (Sx2 - Sx ^ 2 / N) A = EXP(Slny / N - B * Sx / N) r = (Sxlny - Sx * Slny / N) ^ 2 / ((Sx2 - Sx ^ 2 / N) * (Slny2 - Slny ^ 2 / N))

Page 105: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

105

Aproximación logarítmica. La ecuación de la curva es:

y = A + B * LN(x) Las fórmulas son:

b = (Sylnx - 1 / n * Slnx * Sy) / (Slny2 - 1 / n * Slnx ^ 2) a = 1 / n * (Sy - b * Slnx) r = (Sylnx - 1 / n * Slnx * Sy) ^ 2 / ((Slnx2 - 1 / n * Slnx ^ 2) * (Sy2 - 1 / n * Sy ^ 2))

Aproximación potencial: La ecuación general de la curva es:

Y = a * x ^ b y las fórmulas correspondientes:

b = (Slnxlny - (Slnx * Slny) / n) / (Slnx2 - Slnx ^ 2 / n) a = exp(Slny / n - b * Slnx / n) r = (Slnxlny - (Slnx * Slny) / n) ^ 2 / ((Slnx2 - Slnx ^ 2 / n) * (Slny2 - Slny ^ 2 / n))

donde:

Slnx : sumatoria de los logaritmos naturales de los x. Slny : sumatoria de los logaritmos naturales de los y. Slnx2: sumatoria de los cuadrados de los logaritmos naturales de los x. Slny2: sumatoria de los cuadrados de los logaritmos naturales de los y. Sxlny: sumatoria de los productos de los x por los logaritmos naturales de los y. Sylnx: sumatoria de los productos de los y por los logaritmos naturales de los x. Slnxlny: sumatoria de los productos de los logaritmos naturales de los x por los logaritmos naturales de los y.

Las demás notaciones son las dadas anteriormente. Con estas fórmulas es posible completar el programa de regresión, presentando un menú que permita elegir el tipo de ajuste que se desea. Es conveniente que el usuario pueda probar con distintos ajustes sin tener que volver a ingresar los

Page 106: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

106

datos cada vez, para ello el menú puede tener una opción para el ingreso.

Page 107: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

107

Cuarta Parte

Programación Estructurada - Archivos Secuenciales

y Arreglos:

Archivos Secuenciales Como es sabido, las computadoras pueden procesar grandes cantidades de datos. Por ejemplo, un programa que liquide los sueldos de una empresa de 1000 empleados, necesariamente debe contar con datos básicos para realizar tal tarea, como ser: números de legajo, apellidos y nombres, categorías, secciones, sueldos básicos, adicionales, etc., que en total suman un importante volumen de información. Sin embargo, en los programas desarrollados hasta ahora, se han procesado cantidades relativamente pequeñas de datos; almacenados exclusivamente en la memoria de trabajo, la cual posee una capacidad limitada e inferior a la de cualquier soporte de almacenamiento secundario (disco rígido, CD-ROM, cinta, etc). Aquí se deben hacer algunas consideraciones con respecto al momento en que se usa cada dato, se puede, en principio, pensar que los datos tienen dos tipos de disponibilidad:

a) los que se están usando en un momento dado por un programa. b) los que no se están usando en ese momento, pero que serán requeridos en alguna otra situación futura.

Almacenar datos que no se están utilizando en la memoria de trabajo, es ocupar espacio inútilmente; sumado a que tal soporte es volátil y por consecuencia, una vez apagado el equipo la memoria se borra, y desaparece la información almacenada. En una computadora, la información que no está siendo procesada, permanece almacenada en unidades de almacenamiento secundario, que pertenecen a la categoría de periféricos de entrada-salida. Aquí los datos no están guardados en variables, sino que permanecen agrupados en bloques de

Page 108: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

108

información llamados archivos.. Esta forma de ordenar a los datos es análoga a la que se utiliza en un archivo manual, donde n elementos relacionados se almacenan juntos en un recipiente contenedor. Por ejemplo fichas de alumnos en una carpeta, tarjetas de presentación juntas en un tarjetero, etc.

Archivo

de datos de

ALUMNOS

FICHA DEL ALUMNOAlumno: Gomez, MirianFecha nacimiento: 10/03/1972Sexo: femeninoCurso: 7aSituación: regular

FICHA DEL ALUMNOAlumno: Ver, PabloFecha nacimiento: 11/04/1973Sexo: masculinoCurso: 8bSituación: regular

FICHA DEL ALUMNOAlumno: Vega, AnaFecha nacimiento: 09/07/1972Sexo: femeninoCurso: 7aSituación: regular

"Situación" es unitem de datos ócampo

A la ficha ótarjeta del alumnose la denomina"registro"

Obsérvese que la mínima estructura de organización de datos archivo son los caracteres, los que a su vez se agrupan en estructuras mayores -campos y registros-, hasta llegar al archivo. De todas estas estructuras préstese especial atención a la ficha o registro. Este nivel de agrupamiento de los datos presenta tres características importantes:

a) Cada registro corresponde a un alumno, es decir, centraliza toda la información que corresponde a un individuo. b) Todas los registros poseen los mismos items, y éstos están dispuestos en el mismo orden. c) Cada vez que se agrega, modifica o se borra información del archivo, se accede a un registro, aún si solamente se modifica un solo caracter de un determinado ítem o campo.

En el archivo, los registros se almacenan en algún orden preestablecido. Cada vez que se incorpora un nuevo alumno se agrega un registro con sus datos, cada vez que se produce una baja se quita el registro correspondiente ( o se lo marca como borrado), y cada vez que cambia algún dato se extrae el registro, se lo modifica y se coloca nuevamente en el archivo.

Page 109: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

109

Cuando se tienen distintos conjuntos de datos por almacenar, para cada uno se utiliza un archivo, identificándolo con un nombre: "asignaturas", "profesores", "notas_alumnos", etc. En un sistema de computación, se emula la forma de estructurar la información, pero utilizando un soporte físico de almacenamiento distinto, en lugar de usar carpetas, cajones y tarjeteros se utilizan por lo general medios de almacenamiento digitales, tales como: discos, cintas, disquetes, CDROM, etc. Se puede pensar que cada vez que se graba información en el disco, se realiza una operación equivalente al agregado de una tarjeta a un tarjetero, éste es pues el paquete de datos que se intercambia entre la memoria central y el medio de almacenamiento; este bloque de datos se denomina "registro"; un registro es entonces equivalente a una tarjeta, y en nuestro ejemplo contiene todos los datos correspondientes a un alumno. Cuando se almacenan o se recuperan datos desde un disco, la información se transfiere de a bloques que pueden contener uno o n registros. Al equivalente del ítem en un archivo digital se lo denomina campo, de tal forma que cada registro se compone de n campos, donde cada uno identifica un atributo de la entidad que se desea registrar. Registro del alumno Ana Vega

Campo Alumno Fecha Nacimiento

Sexo Curso Situación

Vega, Ana 09/07/1972 femenino 7a regular Campo 1 Campo 2 Campo 3 Campo 4 Campo 5

Archivo de alumnos

Gomez, Mirian 10/03/1972 femenino 6c libre Ver, Pablo 11/04/1972 masculino 7a regular Vega, Ana 09/07/1972 femenino 7a regular

El siguiente cuadro muestra las analogías entre las estructuras de almacenamiento de información de un proceso manual y de uno informatizado:

MANUAL MAGNETICO mueble, tarjetero, cajonera CDROM, disco rígido,

disquete, cinta ficha, tarjeta registro item campo letra, dígito numérico, símbolo caracter

Page 110: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

110

Operaciones Básicas sobre Archivos En las operaciones de almacenamiento y recuperación de los datos, también existen analogías entre el procesamiento manual y el electrónico. Retornando al ejemplo del archivo manual de alumnos, si es necesario modificar la situación de alumno Gomez, Mirian se deben ejecutar los siguientes pasos:

1. Abrir el tarjetero de "alumnos" 2. Buscar la tarjeta correspondiente al alumno "Gomez, Mirian" 3. Escribir la modificación sobre el ítem "situación". 4. Guardar la tarjeta actualizada en el tarjetero. 5. Cerrar el tarjetero "alumnos"

Con algunas variaciones, se utiliza una secuencia análoga cuando se opera sobre un archivo informático, donde un algoritmo determinará la secuencia de pasos correspondientes. Grabación de Datos El algoritmo más sencillo es el de creación de un archivo, es decir, crear un archivo sobre un soporte digital. En este caso, antes que nada, lo primero que se debe hacer es identificar que se desea almacenar, segundo que atributos se asociaran a cada registro (los campos), lo que a su vez determina cuales son los tipos de datos de cada campo. Primer ejemplo: Suponiendo que se desea almacenar una agenda telefónica personal en un soporte digital, y específicamente interesa registrar los siguientes atributos: apellido, nombre y número de teléfono, el registro quedará configurado como sigue: Registro del archivo agenda

Apellido Nombres Teléfono

También debe tenerse en cuenta que a medida que son grabados, los registros se ubicarán uno a continuación de otro en el archivo:

Page 111: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

111

Registro 1 Registro 2 Registro 3 Registro 4 ... Registro n

En cada registro se almacenan datos existentes en variables de memoria de trabajo, de tal forma que en cada campo se guarda el dato contenido en una variable: variable 1 ---------> campo 1 variable 2 ---------> campo 2

variable 3 ---------> campo 3 Una grabación de un registro sobre un archivo se indica de la siguiente forma: Grabar en (nombre de archivo) : (variable 1, variable 2,..., variable n) En el ejemplo, es necesario dar un nombre al archivo, podría ser "AGENDA"; y las variables se denominan: apellido, nombres y teléfono. La orden de grabación se definiría de la siguiente forma: Grabar en AGENDA(apellido, nombres, teléfono) Existen instrucciones que permiten abrir y cerrar un archivo:

Abrir(nombre de archivo) Abrir AGENDA

y Cerrar(nombre de archivo) Cerrar AGENDA Los datos que se graban en el archivo AGENDA se toman de variables almacenadas en la memoria de trabajo, por lo tanto es necesario previamente instanciar información en tales variables. Un algoritmo completo para grabar un registro sería el siguiente: Principio Abrir AGENDA Leer(apellido, nombres, teléfono)

Page 112: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

112

Grabar en AGENDA(apellido, nombres, teléfono) Cerrar AGENDA Fin. Este algoritmo graba un registro, es decir, los datos correspondientes a una persona. En el ejemplo es necesario almacenar los datos de muchas personas, con lo que las instrucciones de ingreso y grabación deben repetirse una cantidad no determinada de veces; ello se logra por medio de un ciclo. Hay varias formas posibles de construir un ciclo como éste, la mas común es mediante una estructura "mientras", que repetirá las instrucciones hasta que se ingrese algún carácter determinado, por ejemplo una "x" en la variable apellido: Principio

Abrir AGENDA Leer apellido Mientras apellido <> "x" hacer: { Leer(nombres, teléfono)

Grabar en AGENDA(apellido, nombres, teléfono) Ingresar apellido }

Fin Mientras Cerrar AGENDA Fin

Ejercitación en Lenguaje Perl Carga del archivo agenda open(ARCHIVO, ">agenda"); print "\n\nIngrese apellido (x) fin) : "; $apellido = <STDIN>; chop($apellido); while ($apellido ne "x") { print "Ingrese nombres : "; $nombres = <STDIN>; print "Ingrese telefono : "; $telefono = <STDIN>; chop($nombres);chop($telefono); print ARCHIVO "$apellido,$nombres,$telefono\n"; print "\n\nIngrese apellido (x fin) : "; $apellido = <STDIN>;

Page 113: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

113

chop($apellido); } close(ARCHIVO);

Después del último registro grabado, la computadora coloca una marca en el disco que llamamos "marca de fin de archivo" (en inglés "end of file" o EOF), que posteriormente sirve para identificar hasta donde llegan los registros grabados en un archivo. Una cuestión importante a tener en cuenta es que el programa anterior comienza siempre grabando desde el primer registro, borrando lo que hubiera grabado anteriormente. Si deseamos seguir grabando a continuación del último existente, en nuestra convención lo indicaremos como: Grabar al final en (nombre de archivo) Grabar al final en AGENDA Con estas instrucciones, la computadora antes de grabar buscará la marca de fin de archivo (EOF), para grabar los nuevos registros a continuación, cuando termine colocará el EOF en la nueva posición.

Ejercitación en Lenguaje Perl Programa que añade un registro al archivo agenda. Nótese que en la instrucción de apertura del archivo se utiliza el modificador >> para indicar que su modo de apertura es añadir al final. open(ARCHIVO, ">>agenda"); $apellido = "Santolini"; $nombres = "Lucia Micaela"; $telefono = "45322"; print ARCHIVO "$apellido,$nombres,$telefono\n"; close(ARCHIVO);

Recuperación de Datos Grabados Para leer los datos almacenados en un archivo, el proceso es inverso, o sea que los datos pasan del registro a variables de memoria central. La operación con la que indicaremos la lectura es:

Page 114: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

114

Leer de (nombre de archivo)(variable 1, variable 2, .., variable n) Supongamos que queremos leer un registro de nuestra agenda telefónica, la instrucción de lectura será: Leer de AGENDA(apellido, nombres, teléfono) Segundo ejemplo Se desea obtener un listado por impresora con todos los datos almacenados en el archivo AGENDA. Los pasos son: abrir el archivo, leer cada registro e imprimirlo hasta encontrar el fin de archivo (EOF), y cerrar el archivo: Principio

Abrir AGENDA Mientras no (EOF de AGENDA) hacer: { Leer de AGENDA(A, N, T) Escribir(A, N, T) } Fin Mientras Cerrar AGENDA

Fin

Ejercitación en Lenguaje Perl Programa que lee y muestra por pantallas los campos de los registros que conforman el archivo agenda. open(ARCHIVO, "agenda"); $i= 1; while (!eof(ARCHIVO)) { $registro_leido = <ARCHIVO>; chop($registro_leido); ($apellido,$nombres,$telefono) = split(",",$registro_leido); print "Registro ".$i++.": $apellido * $nombres * $telefono\n"; } close(ARCHIVO);

Page 115: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

115

La expresión "EOF de AGENDA" , antes de cada lectura de registro, hace que la computadora determine si está la marca de fin de archivo, si no la encuentra quiere decir que hay un nuevo registro para leer, con lo cual la instrucción: Mientras no EOF de AGENDA seguida de la instrucción de lectura debe interpretarse como "leer mientras no se encuentre el fin de archivo", dicho en otras palabras, leer mientras haya registros. Organización Secuencial Volviendo al ejemplo del archivo manual, se puede observar que existen distintas formas de tener ordenadas las tarjetas dentro del mismo, pueden estar por orden alfabético, por curso, por situación, etc. Algo similar ocurre con los archivos informáticos. Se denomina "organización" del archivo a la forma en que está ordenado. De todas las formas posibles, la más primitiva es tenerlo por orden "de llegada", es decir, la tarjeta o registro correspondiente a un nuevo alumno se coloca al final, detrás de todas las demás. En informática es posible grabar los registros de la misma forma, cada nuevo registro, detrás de los anteriores; a esta organización se la denomina "secuencial". Otra forma posible de organización es aquella en que cada ficha de alumno está identificada con un número, el cual indica el orden en que la tarjeta está colocada en el tarjetero. Cuando se desea acceder a una tarjeta n se la localiza por su número, en base a consultar etiquetas asociadas a cada tarjeta que contienen sus números. A esta organización se la denomina "relativa" Acceso Se denomina "acceso" a la manera en que ´se puede buscar un registro determinado dentro de un archivo. Como se comprenderá, la forma de acceso va a depender de la estructura del archivo. Esta sección se dedica exlusivamente a archivos secuenciales. Acceso Secuencial De la misma forma que en un archivo manual organizado secuencialmente, el acceso a un registro determinado obliga a buscar en todos los registros, a partir del primero, hasta encontrar el que se desea.

Page 116: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

116

En nuestro ejemplo del archivo de alumnos, supongamos que deseamos mostrar el curso y situación del alumno "Vega, Ana". Para ello, debemos leer desde el primer registro, comparando cada nombre de alumno con el buscado, cuando se lo encuentre, se debe mostrar los datos correspondientes:

Principio Abrir ALUMNOS Mientras no (EOF de ALUMNOS) hacer: {

Leer de ALUMNOS:(APE_NOM, FECHA_N, SEXO, CURSO, SITUACION)

Si APE_NOM = "Vega, Ana" entonces hacer: { Escribir(APE_NOM, FECHA_N, SEXO, CURSO, SITUACION) } Fin Si } Fin mientras Cerrar CLIENTES

Fin Si deseamos que el algoritmo sirva para buscar los datos de un cliente cualquiera, reemplazar el nombre "Vega, Ana", por una variable cuyo valor se ingresa por teclado al principio:

Ejercitación en Lenguaje Perl Programa que solicita por teclado un apellido, lee del archivo agenda todos los registros, y solamente muestra todos aquellos que coincidan con tal apellido. open(ARCHIVO, "agenda"); print "\n\nIngrese apellido a buscar en el archivo agenda : "; $x_apellido = <STDIN>; chop($x_apellido); $i= 1; while (!eof(ARCHIVO)) { $registro_leido = <ARCHIVO>; chop($registro_leido); ($apellido,$nombres,$telefono) = split(",",$registro_leido); if ($x_apellido eq $apellido) { print "$apellido * $nombres * $telefono\n"; }

Page 117: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

117

} close(ARCHIVO);

Modificaciónes de Datos Sobre Archivos Secuenciales Dado un archivo secuencial, existen tres formas posibles de introducir modificaciones a los datos contenidos en él:

a) Dar de alta nuevos registros b) Dar de baja registros c) Modificar el contenido de un registro existente.

Un proceso que hace estas tareas es clásico en computación, y generalmente recibe el nombre de "Altas, Bajas y Modificaciones", o abreviadamente ABM. Este algoritmo puede construirse con tres subrutinas, y un menú que permita al usuario elegir una de ellas. Analizaremos cada subrutina por separado: Altas Por tratarse de un archivo secuencial, cada nuevo registro que se agregue se grabará al final de los demás; el algoritmo es similar al de creación de un archivo, pero la grabación se realiza al final. Cuando se abre el archivo hay que indicar que se lo desea hacer en modo añadir (append), el siguiente es el esquema general de un módulo que implemente el proceso de altas:

Principio

Abrir (archivo) Leer(variable de corte) Mientras (variable de corte) <> (valor de corte) hacer: {

Leer(variables restantes) Grabar al final en (archivo)(variables) Ingresar (variable de corte)

} Fin Mientras Cerrar (archivo)

Fin

A los efectos de que el módulo anterior sea realmente operativo, se debería incluir la validación de los datos que se ingresan.

Page 118: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

118

Bajas Este es un caso más complejo, ya que es necesario eliminar un registro ubicado entre los demás. Al extraer un registro, el siguiente pasa a ocupar su lugar, proceso que se repite hasta el final del archivo. Suponiendo el siguiente archivo

Registro empleado "Perez" Registro empleado "Diaz" Registro empleado "Welly" Registro empleado "Saltz" Registro empleado "Miranda" Registro empleado "Trileo"

Si se debe dar de baja el registro del empleado Saltz, todos los que le siguen deben desplazarse un lugar hacia atrás:

Registro empleado "Perez" Registro empleado "Diaz" Registro empleado "Welly" Registro empleado "Miranda" Registro empleado "Trileo"

Para poder hacer esto se debe utilizar un archivo auxiliar, ya que si un archivo fue abierto para lectura, no pueden grabarse datos en él; y por otra parte debemos leer el archivo a modificar hasta encontrar el registro a dar de baja. El registro que se debe dar de baja tiene que poder identificarse por un campo, generalmente un número (socio, cuenta, cliente, legajo, etc.). El algoritmo leerá cada registro, comparando el número con el que es desea dar de baja, si no es , se graba en el auxiliar y se pasa a leer el próximo, de lo contrario se va a leer sin grabar nada. El siguiente es el esquema general del algoritmo:

Principio Abrir (archivo) Abrir (auxiliar) Leer(número-baja) Mientras no (EOF de archivo) hacer: {

Leer de (archivo)(número y restantes campos) Si número-baja <> número entonces hacer: {

Page 119: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

119

Grabar en (auxiliar)(número y restantes campos) }

} Fin Mientras Cerrar (archivo) Cerrar (auxiliar)

Fin Hasta aquí los datos quedaron almacenados en el archivo auxiliar, mientras que en el original quedaron los datos sin la baja. Es necesario entonces, copiar los datos del archivo auxiliar al original:

principio Abrir (archivo) Abrir (auxiliar) Mientras (no EOF de auxiliar) hacer: {

Leer de (auxiliar)(variables) Grabar en (archivo)(variables) }

Fin Mientras Cerrar (archivo) Cerrar (auxiliar)

Fin Este algoritmo resulta ineficiente si se pretenden producir muchas bajas de registros, ya que en cada caso es necesario recorrer todo el archivo y generar el auxiliar, para solucionar de forma eficiente tales situaciones se utilizan otras técnicas. Modificaciones El esquema del algoritmo es similar al de bajas. Si en el ejemplo se desea modificar el registro del empleado Saltz en lugar de borrarlo. Se copian todos los registros en el archivo auxiliar, salvo el que se desea modificar, el cual se graba con los nuevos datos. La estructura "mientras" del algoritmo se especifica como sigue:

Mientras no (EOF de archivo) hacer: {

Leer de (archivo)(número y restantes campos)

Page 120: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

120

Si número = modif entonces hacer: {

Ingresar (restantes campos) } Fin Si

Grabar en (auxiliar) (número y restantes campos) }

Fin Mientras

Page 121: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

121

Trabajo Práctico V - Archivos Secuenciales

1.- En un archivo se tienen datos sobre la lluvia caída durante un cierto período. Cada registro corresponde a un día y contiene:

Archivo LLUVIAS * DIA * MES * AÑO * PRECIPITACIONES (<=0 si no llovió)

Preparar un algoritmo que lea el archivo y cuente cuantos días hubo sin lluvias, cuantos días llovió menos de 50 mm., y cuantos llovió 50 mm. o más. Producir un listado como el siguiente:

INFORME ANUAL DE LLUVIAS - CANTIDAD DE DIAS

SIN LLUVIAS : XX MENOS DE 50 mm. : XX 50 mm. O MAS : XX

2.- Perfeccionar el algoritmo anterior para que además informe:

- PORCENTAJES SIN LLUVIA : XX MENOS DE 50 mm. : XX 50 mm. O MAS : XX PRECIPITACIONES TOTALES : XXX

3.- En una estación meteorológica se registran diariamente la temperatura máxima y la mínima. Preparar un algoritmo para generar un archivo con estos datos. El programa debe permitir que todos los días un operador cargue datos validándolos. La estructura del archivo debe quedar como sigue:

Archivo TEMPERATURA

* DIA * MES * TEMPERATURA MAXIMA * TEMPERATURA MINIMA

Page 122: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

122

4.- Usando el archivo anterior, prepara un algoritmo para que imprima el siguiente reporte a fin de año:

TEMPERATURA -INFORME ANUAL

TEMPERATURA MINIMA DEL AÑO : XX REGISTRADA EL DIA : XX DEL MES : XX

TEMPERATURA MAXIMA DEL AÑO : XX REGISTRADA EL DIA : XX DEL MES : XX

MAXIMA AMPLITUD TERMICA : XX REGISTRADA EL DIA : XX DEL MES : XX

Simultáneamente generar otro archivo con las temperaturas medias diarias, ((máx + mín)/2). 5.- Se efectúa una encuesta para conocer el nivel de ocupación de los pobladores de una ciudad. Los encuestados contestaron sobre los siguientes ítems:

- Sexo (1:varón, 2:mujer) - Edad - Estado civil (1:soltero, 2:casado, 3:otros). - Trabaja (0: no, 1: si) - Estudia (0: no, 1: si)

Preparar algoritmos para procesar información recolectada en base a los siguientes requerimientos:

a) Generar un programa que permita cargar los registros y validar los datos en el ingreso. b) Una vez que se tiene el archivo, imprimir un reporte como el siguiente:

PORCENTAJES

VARONES : XX MUJERES : XX MENORES DE 18 AÑOS QUE TRABAJAN : XX

Page 123: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

123

SOLTEROS : XX CASADOS : XX ENCUESTADOS QUE TRABAJAN Y ESTUDIAN : XX MUJERES QUE TRABAJAN : XX

6.- En un archivo están almacenados los datos correspondientes a los empleados de una empresa de europea, con la siguiente estructura:

Archivo EMPLEADOS * LEGAJO * NOMBRE * SUELDO - BASICO * ANTIGUEDAD * ESTADO CIVIL (0: soltero, 1: casado ,2: otros). * HIJOS

Prepara un programa que lea el archivo e imprima los recibos de sueldo, con el siguiente formato:

RECIBO DE HABERES LEGAJO :XXXX - NOMBRE :XX... SUELDO BASICO : XXXX ANTIGUEDAD : XXXX APORTE JUBILATORIO : XXXX SALARIO POR ESPOSA : XXXX SALARIO POR HIJOS : XXXX NETO A COBRAR : XXXX

Para los cálculos, tener en cuenta las siguientes especificaciones:

a) El adicional por antigüedad es el 2% del sueldo básico. b) El aporte jubilatorio es el 15 % del sueldo básico más la antigüedad c) El salario por esposa es una suma fija de 80 Euros d) El salario por hijos es de 25 Euros por cada uno.

Después de haber impreso el último recibo, imprimir un resumen para la empresa con los siguientes datos:

CANTIDAD DE EMPLEADOS : XXXX

Page 124: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

124

TOTAL SUELDOS : XXXX TOTAL APORTES : XXXX TOTAL SALARIOS : XXXX TOTAL A PAGAR : XXXX

Page 125: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

125

Arreglos En algunos casos a resolver por medio de programas, se puede hallar la dificultad de tener que almacenar en memoria una gran cantidad de datos de un mismo tipo. Supongamos, por ejemplo, que necesitamos hacer un programa que ordene de forma alfabética cuatro nombres que se ingresan por teclado, con lo visto hasta este capítulo la solución sería almacenar cada nombre en una variable y luego ir encontrando en base a decisiones el orden requerido:

Leer(nombre1) Leer(nombre2) Leer(nombre3) Leer(nombre4)

Este ejemplo puede resolverse en la forma planteada pero, ¿ qué ocurriría si la cantidad a ordenar fuera de 100, 500 ó 1000 nombres ?. La solución planteada sería ineficiente, pues se necesitarían tantas variables diferentes como nombres a ingresar. La causa de este inconveniente esta dada por la imposibilidad de almacenar mas de un dato en una variable, como solución a ello se utilizan los arreglos. Consisten en agrupar bajo un mismo nombre a un conjunto de variables, donde cada dato tendrá una posición dentro del arreglo, y esa posición es definida por medio de un índice que se adjunta a la variable. Para el caso anterior necesitaríamos un arreglo capaz de contener cuatro datos.

Page 126: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

126

Juan

Ana

María

Miguel

0

1

2

3

Arreglo nombres

Indice Valor

ElementoElemento

Segundo elemento delarreglo nombre

nombre[2] <- "María"

Como se ve en el gráfico, se ha definido un arreglo denominado "nombres" que consta de cuatro elementos, donde para referirse a cada uno de ellas se utilizará

un índice de la siguiente manera :

Primer elemento cuyo valor es Juan: nombres[0] Segundo elemento cuyo valor es Ana: nombres[1] Tercer elemento cuyo valor es María: nombres[2] Cuarto elemento cuyo valor es Miguel: nombres[3]

Este tipo de arreglo también se denomina vector, por agrupar las variables bajo un solo índice o en una dirección. Para almacenar datos en este tipo de variables utilizamos los mismos métodos que para cualquier variable de memoria, con la ventaja que si necesitamos cargar más de una variable del arreglo, podemos ubicar al ingreso dentro de un ciclo : Principio Para c<-0 hasta 3 incrementando 1 hacer : { Ingresar(nombres[c]) } Fin Para Fin

Page 127: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

127

Ejercitación en Lenguaje Perl for($c=0; $c<=3; $c++) { print "\ncIngrese el valor del elemento $c :"; $nombres[$c] = <STDIN>; chop($nombres[$c]); }

De esta forma el primer nombre que se ingrese será almacenado en nombres[0], el segundo en nombres[1] y así sucesivamente. De la misma manera para mostrar el contenido del arreglo también se puede utilizar un ciclo o bien referirse a una variable específica del arreglo. Escribir(nombres[3]) Mostrará por pantalla el contenido de la tercer casilla o elemento del arreglo nombres. Para c = 0 hasta 3 hacer: { Escribir(nombres[c])

} Fin para

Ejercitación en Lenguaje Perl for($c=0; $c<=3; $c++) { print "El elemento [$c] contiene el valor : $nombres[$c]\n"; }

En este caso se imprimirá el contenido de todas las casillas del vector nombres. Podemos también definir arreglos de mas de un índice, dependiendo la cantidad máxima de índices del lenguaje de programación que se esté utilizando. Cada índice puede imaginarse como una nueva dimensión del arreglo, por ejemplo si se define el arreglo x[3,4] podemos representarlo :

Page 128: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

128

x[1,0] x[1,1] x[1,2] x[1,3]

x[2,0] x[2,1] x[2,2] x[2,3]

x[0,0] x[0,1] x[0,2] x[0,3]

Arreglo x de

3 filas por cuatro

columnas

Elemento x[0,1]

Fila 0, columna 1

En esta representación el primer índice se refiere al número de fila y el segundo al de la columna en donde se encuentra ubicada la variable del arreglo. La forma de cargar este arreglo por filas sería : Principio Para f=0 hasta 2 hacer { Para c=0 hasta 3 hacer

{ leer(x[f,c]) }

Fin Para }

Fin Para Fin

Ejercitación en Lenguaje Perl for($f=0; $f<=2; $f++) { for($c=0; $c<=3; $c++) { print "Ingrese el valor del elemento [$f,$c] :"; $nombres[$f][$c] = <STDIN>; } } print "\nImpresión del arreglo\n"; for($f=0; $f<=2; $f++) { for($c=0; $c<=3; $c++)

Page 129: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

129

{ print "[$f,$c] -> $nombres[$f][$c]"; } }

En este caso se utilizan dos ciclos, uno para cada índice, según se ubiquen los índices uno dentro de otro, el arreglo se cargará por filas o por columnas. Para cargarlo por columnas sería : Principio Para c = 0 hasta 3 hacer { Para F = 1 hasta 3 hacer { Leer(x[f,c])

} Fin para

} Fin para Fin A los efectos de mostrar u operar con los datos de este arreglo, también se deben colocar los dos índices. Si quisiéramos mostrar solo la primer fila el algoritmo sería : Principio Para c=0 hasta 3 hacer: { Leer(x[1,c])

} Fin Para Fin

De esta manera, teniendo cierta precaución con el manejo de los índices, podemos operar con sectores del arreglo. En un mismo programa podemos definir varios arreglos de distintas dimensiones, la restricción estará dada por la capacidad de memoria del equipo o el lenguaje que se está utilizando. Téngase en cuenta que en los ejemplos planteados hasta el momento, se utilizó para los ciclos la estructura Para, pudiéndose de igual manera trabajar con arreglos usando las estructuras Mientras y Hasta.

Page 130: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

130

Ejemplo A Se tiene un listado con las ventas realizadas en los 30 días de un mes, desordenadas. Realizar un algoritmo que totalice la venta de cada día y emita un listado con dicho total por día y el total mensual. Después del último dato se ingresa un día negativo. Principio Leer(día) Leer(venta) Mientras (día > 0) hacer: { tot(día) <--- tot(día) + venta Leer(día) Leer(venta) } Fin Mientras totmes <--- 0 Escribir("Día Total") Para I <- 1 hasta 30 hacer: { Escribir(I; " "; tot(i)) totmes <--- totmes + tot(i) } Fin Para Escribir("Total del mes: "; totmes) Fin

Ejercitación en Lenguaje Perl print "\ndia :";$dia=<STDIN>;chop($dia); print "\nventa:";$venta=<STDIN>;chop($venta); while($dia>0) { $tot[$dia] = $tot[$dia] + $venta; print "\ndia :";$dia=<STDIN>;chop($dia); print "\nventa:";$venta=<STDIN>;chop($venta); }

Page 131: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

131

$totmes=0; print "dia\ttotal\n"; for($i=1;$i<=30;$i++) { print $i."\t".$tot[$i]."\n"; $totmes = $totmes + $tot[$i]; } print "total del mes: $totmes\n";

Ejemplo B Se tiene almacenado en un vector la altura de 20 plantas numeradas, correspondientes a un experimento. Hacer un algoritmo que permita ingresar una altura y muestre los números de las plantas que tienen dicha altura.

Leer(ALTURA) Para C = 1 hasta 20 hacer: { Si V(C) = ALTURA entonces hacer: { Escribir(C) } Fin Si } Fin Para

Si quisiéramos agregar al algoritmo la opción de que muestre un mensaje en el caso de que no se encuentre alguna planta con la altura deseada, seria: Leer(ALTURA) S <--- 0 Para C=1 hasta 20 hacer: { Si V(C)=ALTURA entonces hacer: { Escribir(C) S <--- 1 } Fin Si }

Page 132: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

132

Fin Para Si S = 0 entonces hacer: { Escribir("No hay plantas de tal altura") } Fin

Ejercitación en Lenguaje Perl print "\naltura :";$altura=<STDIN>;chop($altura); $s=0; for($c=1;$c<=20;$c++) { if ($v[$c] = $altura) { print $c."\nt"; $s = 1; } } if ($s == 1) { print "No hay plantas de tal altura\n"; }

La variable S, se denomina señal, y se utiliza para saber si se pasó o no por un lugar determinado del algoritmo. Este método de búsqueda en un arreglo se denomina Búsqueda Secuencial, el mismo sería ineficiente para el caso de que quisiéramos buscar varios valores dentro del arreglo, pues por cada uno de ellos se deberá recorrer integramente al mismo, haciendo esta tarea muy lenta la búsqueda, más aún si el arreglo posee una gran cantidad de datos. La forma de solucionar este problema es ordenando previamente los datos del arreglo, lo que permitirá utilizar otros métodos de búsqueda. Ejemplo C Dada una matriz N de 25 x 25, hallar la suma de los números almacenados en sus dos diagonales principales. Principio Para FILA=1 hasta 25 hacer:

Page 133: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

133

{ Para COL=1 hasta 25 hacer: {

Leer(N(FILA,COL)) }

Fin Para } Fin Para DIAG1 <--- 0 DIAG2 <--- 0 Para I = 1 hasta 25 hacer: { DIAG1 <--- DIAG1 + N(I,I) DIAG2 <--- DIAG2 + N(I,26-I) } Fin Para Escribir("Diagonal principal: ";DIAG1) Escribir("Diagonal secundaria: ";DIAG2) Fin Ordenamiento de Vectores En muchos casos nos encontraremos con la necesidad de ordenar el contenido de un arreglo en forma ascendente o descendente. El ejemplo mas típico es el de querer ordenar un conjunto de nombres que se ingresaron en un arreglo. Existen varios métodos para ordenar vectores, nosotros nos dedicaremos en un primer momento al que se denomina burbujeo. Plantearemos el ejemplo de un vector de 4 elementos que contiene los siguientes datos :

V(1) V(2) V(3) V(4)

5 4 6 2

Si se quieren ordenar de menor a mayor, el resultado deberá ser el siguiente estado:

Page 134: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

134

V(1) V(2) V(3) V(4)

2 4 5 6

Comenzaremos comparando los datos almacenados en V(1) y en V(2) y colocando el valor mayor en V(2). En este caso pasaría el valor 5 a V(2) y el valor 4 a V(1). De la misma manera compararemos luego V(2) con V(3) y V(3) con V(4). El algoritmo que realizaría esta tarea sería : Para I=1 hasta 3 hacer: { Si (V(I)>V(I+1)) entonces hacer: { A <--- V(I) V(I) <--- V(I+1) V(I+1) <--- A } } Fin Para Observemos que en el algoritmo se compara cada V(I) con el siguiente, esto hace que el ciclo para deba ir hasta el valor N-1 considerando a N como número de elementos del vector. En nuestro ejemplo los datos del vector se irán acomodando de la siguiente manera :

V(1) V(2) V(3) V(4)

5 4 6 2

4 5 6 2 I = 1

4 5 6 2 I = 2

4 5 2 6 I = 3

Page 135: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

135

El resultado de aplicar el algoritmo es, para vectores de cualquier longitud y siempre que ordenemos de menor a mayor, que el dato mayor queda ubicado en el último elemento del arreglo. Nótese que si quisiéramos ordenar de mayor a menor cambiando el sentido de la pregunta quedará el número menor en el último casillero del vector. Este algoritmo deberá ejecutarse N-1 veces (considerando a N como el número de elementos del vector), quedando de esa forma ordenado el vector en forma completa. La forma de implementarlo seria: Para VEZ=1 hasta 3 hacer: { Para I=1 hasta 3 hacer: { Si (V(I)>V(I+1)) entonces hacer: { A <--- V(I) V(I) <--- V(I+1) V(I+1) <--- A } Fin Si } Fin Para } Fin Para Siendo el resultado de cada vez:

4 5 2 6 VEZ = 1

4 2 5 6 VEZ = 2

2 4 5 6 VEZ = 3

Notemos que luego de cada vez, no se hace necesario comparar los elementos que ya quedaron ordenados, esto puede solucionarse haciendo el ciclo de VEZ desde 3 hasta 1 y realizando el ciclo de I hasta VEZ en lugar de hacerlo siempre hasta N-1.

Page 136: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

136

Para VEZ=3 hasta 1 (incrementando -1) hacer: { Para I=1 hasta VEZ hacer: { Si V(I)>V(I+1) entonces hacer: { A <--- V(I)

V(I) <--- V(I+1) V(I+1) <--- A

} Fin Si } Fin Para } Fin Para De esta manera la primera vez el ciclo I ira hasta 3, la segunda hasta 2 y la tercera hasta 1, haciendo de esta manera mucho más eficiente el algoritmo. En algunos casos se puede dar que el vector quede ordenado antes de realizar todas las veces planteadas el ciclo de comparación I, por lo tanto se ejecutará algunas veces sin necesidad de que así ocurra. La solución para ello es usar una señal que permita detectar si se realizaron o no intercambios de elementos luego de cada vez. Para VEZ=3 hasta 1 (incrementando -1) hacer:

{ S <--- 0

Para I=1 hasta VEZ hacer: { Si (V(I)>V(I+1)) entonces hacer: {

A <--- V(I) V(I) <--- V(I+1) V(I+1) <--- A S <--- 1

} Fin Si } Fin Para

Si S=0 entonces hacer:

Page 137: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

137

{ VEZ <--- 1 } Fin Si

} Fin Para En el caso de detectar mediante la señal S que no se ha producido ningún intercambio de contenidos, se fuerza la salida del ciclo VEZ asignando a la variable de control el valor hasta. Ejemplo D Se tiene un listado con los nombres y edades de 20 personas. Hacer un algoritmo que permita cargar los nombres en un vector NOM, las edades en uno EDAD y emita un listado de los datos ordenados por edad. Principio

Para I=1 hasta 20 hacer: {

Leer(NOM(I)) Leer(EDAD(I))

} Fin Para

Para VEZ=19 hasta 1 (incrementando -1) hacer: { S <--- 0 Para I=1 hasta VEZ hacer: { Si (EDAD(I)>EDAD(I+1)) entonces hacer: {

X <--- NOM(I) NOM(I) <--- NOM(I+1)

NOM(I+1) <--- X E <--- EDAD(I) EDAD(I) <--- EDAD(I+1) EDAD(I+1) <--- E S <--- 1

Page 138: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

138

} Fin Si } Fin Para Si S=0 entonces hacer: { VEZ <--- 1 } Fin Si } Fin Para Para I=1 hasta 20 hacer: { Escribir(NOM(I);" ";EDAD(I)) } Fin Para Fin Ordenamiento por Inserción

Algoritmo para ordenar una lista de números de menor a mayor utilizando una segunda lista inicialmente vacía:

° Paso 1. Si la primera lista tiene sólo un número, sáquelo de la lista, colóquelo en la primera posición disponible en la segunda lista y termine; la segunda lista contiene los números de la primera, ordenados de menor a mayor.

° Paso 2. Recorra la lista completa y encuentre al menor de todos los

números que hay en ella. ° Paso 3. Saque ese número de la primera lista y colóquelo en la primera

posición disponible en la segunda lista. ° Paso 4. Repita el paso 1, pero usando ahora la primera lista reducida, es

decir, sin el número que sacó.

Page 139: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

139

Ejemplo: Aplicando el algoritmo anterior, ordene de menor a mayor la lista (7 3 9 13 2 18 11 2). Este algoritmo se llama de inserción, ya que va insertando los números de la primera lista en forma ordenada en la segunda lista. Este algoritmo de ordenación de una lista lo utilizamos cuando ordenamos un conjunto de naipes para sujetarlos en la mano. Así, partimos con una lista de naipes desordenados y una mano sin naipes. Luego tomamos cada uno de los naipes de la primera lista y los vamos insertando en forma ordenada en la mano. Al final terminamos con cuando la primera lista no tiene naipes y la mano contiene todos los naipes iniciales ordenados. Búsqueda en Vectores Se había planteado anteriormente que para el caso de tener que realizar muchas búsquedas en un vector o tener que buscar datos en vectores de gran longitud, es conveniente ordenar primero el vector y luego utilizar un método mucho más eficiente que la búsqueda secuencial. Supongamos que tenemos el siguiente arreglo en memoria y se desea saber si en algún elemento del mismo se encuentra almacenado el número 43:

23

V(1)

43

V(2)

11

V(3)

56

V(4)

21

V(5)

35

V(6)33

V(7)

El primer paso será ordenarlo con algún método, con lo que quedará :

11

V(1)

21

V(2)

23

V(3)

33

V(4)

35

V(5)

43

V(6)56

V(7)

El algoritmo del método, siendo N el número máximo de elementos del vector y A el valor a buscar, es : Leer(N) Leer(A) S <--- N I <--- 1

Page 140: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

140

Mientras ((S-I)<>1) hacer: { K <--- ENT((S+I)/2) Si V(K) <= A entonces hacer: { I <--- K } sino hacer: { S <--- k } Fin Si } Fin Mientras Si V(I)=A entonces hacer: { Escribir(V(I)) } sino hacer: { Si V(S)=A entonces hacer: { Escribir(V(S)) } sino hacer: { Escribir(A;"No se encuentra") } Fin Si } Fin Si

Page 141: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

141

Trabajo Práctico VI - Arreglos

1. Dada una lista de 30 números, realizar un algoritmo que los guarde en un arreglo y luego los muestre en orden inverso al que fueron ingresados. 2. Se tiene una lista de números, el primer número de la lista indica cual es el total de números de la lista incluido el primero. Hacer un algoritmo que guarde todos los datos de la lista en un vector, inclusive el primero. Principio Ingresar(cant) v(1) <--- cant Para I <- 2 hasta cant hacer { Ingresar(v[I]) } Fin Para Fin 3. Preparar un algoritmo que realice las siguientes operaciones :

a) Cargue un arreglo X con 50 números. b) Copie los datos que se encuentren en las casillas con índice par en otro arreglo Y. c) Muestre el contenido del arreglo Y por pantalla.

4. Una empresa tiene 10 vendedores que entregan cada uno semanalmente un listado con las ventas de cada uno de los días sin totalizar. Se pide realizar un algoritmo que muestre por pantalla el total semanal de cada vendedor, el promedio de venta semanal de la empresa y el código del vendedor que más vendió en esa semana. 5. Hacer un algoritmo que almacene en un arreglo 20 números y luego multiplique a cada dato por el índice de la casilla en la que se encuentra almacenado. 6. Se tiene un vector V con 30 elementos. Hacer un algoritmo que intercambie el contenido de la casilla número 1 con el de la 30, el de la 2 con el de la 29 y así

Page 142: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

142

sucesivamente. Pensar el mismo problema para un vector de 29 elementos. 7. Teniendo en memoria un vector con los saldos de las cuentas corrientes de los 100 clientes de un banco (el número de cuenta coincide con el índice) se pide realizar un algoritmo que realice las siguientes operaciones :

a) Cargar los movimientos que tuvieron ese día las cuentas corrientes e ir actualizando los datos del vector. Después del último movimiento se ingresa un número de cuenta corriente negativo. b) Emitir un listado con los clientes que tengan saldo negativo.

Ejercicios de ordenamiento 8. Hacer un algoritmo que permita cargar en un vector 10 nombres, los ordene alfabéticamente y los muestre por pantalla. 9. Al problema anterior se le agrega un vector ALTURA, suponiendo a los tres vectores ya cargados hacer un algoritmo que emita un listado de los datos ordenados por altura y otro listado ordenados por nombre. 10. Se tiene un vector A de M elementos y otro B de N elementos, ambos ordenados en forma creciente. Desarrollar un algoritmo que construya otro vector C, ordenado en forma creciente, con los elementos combinados de A y B. Desechar la solución simple pero ineficiente de colocar un vector a continuación de otro y luego reordenarlo. 11. Se ingresan por teclado N datos correspondientes a mediciones experimentales de una cierta magnitud. Hacer un algoritmo que encuentre y muestre la mediana de esos valores. La mediana es aquel valor de la variable tal que el 50% de las observaciones son mayores que él y el otro 50% son menores. Por ejemplo para el conjunto de valores 3, 15, 17, 5, 11, 1, 8, 9 y 7 la mediana es 8; mientras que para 17, 12, 3, 26, 6, 11, 25 y 9 la mediana es 11,5. Ejercicios con arreglos de dos dimensiones 12. Hacer un algoritmo que almacene en un vector N$ los nombres de 10 personas y en otro E las edades, luego que permita ingresando el nombre de una persona saber la edad de la misma (si no se encuentra que emita el cartel

Page 143: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

143

correspondiente), pudiendo realizar esta consulta muchas veces. 13. Se tiene en memoria una matriz de 56 x 72 Hacer un algoritmo que calcule el promedio de todos los datos almacenados en la matriz. 14. Dada una matriz de 8 x 14 construir un vector con los valores negativos almacenados en dicha matriz. 15. Dadas dos matrices M y N de 35 x 24, se pide generar una tercer matriz P cuyos elementos sean la suma de los elementos correspondientes de las otras dos. 16. Dada una matriz de 15 x 15, generar un vector con los elementos de sus diagonales principales. 17. Se tiene una matriz M de 36 columnas por 54 filas, y un vector V de 36 elementos. Se pide dividir los elementos de cada columna de la matriz por el elemento correspondiente del vector, guardando los resultados en otra matriz de 36 por 54. 18. Se ingresan por teclado los siguientes datos referidos a los alumnos de una carrera: número de alumno, código de la materia, y nota obtenida. Hacer un algoritmo que obtenga e imprima la nota promedio de cada alumno y la nota promedio de cada materia. La cantidad de materias y la de alumnos se ingresan al principio por teclado. Como primer paso, llenar la matriz que se use con ceros, de esta forma quedará un cero en el lugar que corresponda a un alumno ausente en determinada materia. Luego de la última terna de datos se ingresan tres ceros. 19. Dada una matriz numérica, se denomina punto de silla a aquel que es simultáneamente máximo de su fila y mínimo de su columna. Determinar mediante un programa todos los puntos de silla de una matriz generada con números aleatorios. 20. Un programador que trabaja en un observatorio astronómico recibe datos vía satélite de la intensidad luminosa de distintas regiones del Cosmos. La información de cada una de las regiones es recibida por un detector de luz de los satélites exploradores, y el propio detector la almacena en un arreglo de dos dimensiones (70 x 20), representando cada elemento del arreglo la cantidad de luz procedente de la porción de imagen correspondiente. El rango de intensidad varía entre 0 y 100. Se supondrá la existencia de una estrella en el área correspondiente a un elemento del arreglo cuando la suma de la intensidad correspondiente al mismo más la

Page 144: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

144

media de los 8 puntos circundantes es mayor o igual que 60. Construir un algoritmo que sea capaz de tratar el arreglo de intensidades medidas por el detector, y represente en pantalla un asterisco (*) en aquellas zona donde considera la existencia de una estrella. En las zonas en las que no, presentará en pantalla un espacio en blanco. (Omitir los cálculos para los puntos situados en la periferia del arreglo). Aplicaciones 1. PROMEDIOS MOVILES: Cuando se tiene una serie de datos, generalmente en función del tiempo, los promedios móviles tienden a suavizar las oscilaciones bruscas, permitiendo visualizar más claramente las tendencias a largo plazo. En un promedio móvil, se promedia un número especificado de datos puntuales. Cuando se incluye un nuevo dato, el primero es descartado para hacer lugar al mismo. Por ejemplo, en la siguiente serie de datos se muestran los promedios móviles tomados en grupos de tres: DATOS PROMEDIOS 41 56 (41 + 56 + 45) / 3 = 47.33 45 (56 + 45 + 37) / 3 = 46.00 37 (45 + 37 + 32) / 3 = 38.00 32 (37 + 32 + 35) / 3 = 34.66 35 (32 + 35 + 29) / 3 = 32.00 29 (35 + 29 + 33) / 3 = 32.33 33 (29 + 33 + 24) / 3 = 28.66 24 (33 + 24 + 28) / 3 = 28.33 28 (24 + 28 + 22) / 3 = 24.66 22 Se observa que si bien los datos presentan altibajos, los valores de los promedios móviles tienden claramente a bajar. De la misma forma, los datos pueden mediarse en grupos de distinta cantidad de datos. Por ejemplo en grupos de cinco:

DATOS PROMEDIOS 1 6

Page 145: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

145

5 (41+56+45+37+32)/5= 42.20 7 (56+45+37+32+35)/5= 41.00 2 (45+37+32+35+29)/5= 35.60 5 (37+32+35+29+33)/5= 33.20 9 (32+35+29+33+24)/5= 30.60 3 (35+29+33+24+28)/5= 29.80 4 (29+33+24+28+22)/5= 27.20 8 2

Llamaremos "Tamaño de Ventana" a la cantidad de datos de los grupos. Preparar un programa para que haga lo siguiente:

a) Ingresar la cantidad total de datos. b) Ingresar los datos. c) Ingresar el tamaño de ventana. d) Calcular e imprimir los promedios móviles. El programa debe permitir el cálculo de los promedios con distintas ventanas sin que se deban ingresar nuevamente los datos en cada caso.

2. PRODUCTO DE MATRICES: Dada una matriz A de M filas por N columnas, y otra matriz B de N filas por P columnas, se define el producto A por B como:

C = A * B Donde C es una matriz de M filas por P columnas, tal que el elemento de la fila I, columna J de C es la sumatoria de los productos de los elementos de la fila I de A, por los elementos de la columna J de B. Por ejemplo: | -1 2 | B= | 3 -2 | | 2 -1 | | 2 3 -1 | | 5 -1 | A= | 1 -2 2 | | -3 4 | | 1 1 -3 | | -4 3 | Obsérvese que el elemento (2,1) de C, que es -3, se calculó como:

1 * (-1) + (-2) * 3 + 2 * 2 =

Page 146: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

146

donde 1, -2 y 2 son los elementos de la fila 2 de A, mientras que 1, 3 y 2 son los elementos de la columna 1 de B. Para que el producto sea posible, la cantidad de columnas de A debe ser igual a la cantidad de filas de B. Preparar un programa para multiplicar matrices, haciendo lo siguiente:

a) Ingresar M, N y P. b) Ingresar los elementos de A y B. c) Obtener el producto e imprimir A, B y C.

3. DISTRIBUCION PORCENTUAL: Cuando se tiene una cierta cantidad de datos de un mismo tipo, puede interesar saber cual es la distribución porcentual de los mismos, es decir, que porcentaje del total representa cada uno. Para ello se toma cada dato, se lo multiplica por 100 y se lo divide por la suma de todos. Supongamos que una persona durante un día consumió las siguientes cantidades de alimentos: 200 grs. de carne 150 grs. de pan 800 grs. (cm3) de agua 300 grs. de verduras 170 grs. de otros alimentos. Se desea saber, del total ingerido, que porcentaje consumió de carne, que porcentaje de pan, etc. En el ejemplo las cuentas son las siguientes: Cantidades Porcentajes 200 200*100/1620 = 12.35 % 150 150*100/1620 = 9.26 % 800 800*100/1620 = 49.38 % 300 300*100/1620 = 18.52 % 170 170*100/1620 = 10.49 % --------- 1620 Preparar un programa a los efectos de ingresarle una secuencia de datos, y

Page 147: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

147

obtenga e imprima la distribución porcentual de los mismos. Aplicaciones en Estadística Descriptiva Es muy útil disponer de un programa que, dada una serie de valores que representan la medida de un cierto atributo cuantitativo, permita ordenar los datos y calcular parámetros estadísticos para su análisis. Preparar este programa teniendo en cuenta las siguientes definiciones:

a) Distribución de frecuencias: Es la disposición de los datos en clases, especificando el número de datos u observaciones que caen en cada clase. Ejemplo: Suponer que los siguientes son valores de pesos de un grupo de personas: 54, 62, 46, 68, 72, 58, 48, 56, 74, 64, 50, 66, 62, 52, 76, 60, 64, 68, 78, 54. Pueden tomarse cuatro intervalos de 10 Kg. cada uno, con lo cual queda una tabla como la siguiente:

Intervalo Peso Frecuencia % 1 40<=P<50 2 10 2 50<=P<60 7 35 3 60<=P<70 8 40 4 70<=P<80 3 15 TOTAL: 20 100

b) Media aritmética: (promedio) Si los datos se han dispuestos en forma de distribución de frecuencias, el cálculo de la media aritmética se abrevia usando la fórmula:

XM = SXf/Sf Donde SXf es la sumatoria de los productos de los puntos medios del intervalo por sus respectivas frecuencias, y Sf es la suma de todas las frecuencias, en nuestro ejemplo;

SXf = 45 * 2 + 55 * 7 +... Sf = 2 + 7 +...

Page 148: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

148

con lo que XM = 61, que es una aproximación del valor real (XM = 60.6) c) Mediana: Es el valor de la variable tal que el 50% de los datos es menor que él, y el otro 50% es mayor. d) Modo: Es el valor del punto medio del intervalo de mayor frecuencia, en nuestro ejemplo modo = 65. e) Desviación standard: Sirve para medir la dispersión de los datos. Se puede calcular mediante:

DE = SQR (SfX2/N - XM^2) Donde SfX2 es la sumatoria de los productos de los cuadrados de los puntos medios de los intervalos por las respectativas frecuencias, en nuestro ejemplo:

SfX2 = 2 * 45^2 + 7 * 55^2 +... f) Simetría: Se calcula mediante la siguiente fórmula:

S = (XM - modo) /DE g) Curtosis: Es la medida del achatamiento de la curva, se calcula mediante:

Curtosis = M4 / DE 4 Donde M4 se calcula:

M4 = (f1 * D1^4 + f2 * D2^4 +...) /N A su vez, D1, D2, etc son las diferencias entre los puntos medios de los intervalos y la medida aritmética. En nuestro ejemplo:

D1 = 45 - 61 = -16 D2 = 55 - 61 = -6 D3 = 65 - 61 = 4 D4 = 75 - 61 = 14

Con lo que:

Page 149: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

149

M4 = (2 * (-16)^4 + 7 * (-6)^4 + 8 * 4^4 + 3 * 14 4) /20

h) Variación relativa: Se obtiene mediante el coeficiente de variación:

V = DE * 100 / XM

Page 150: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

150

Page 151: Metodología de la Programación - tyr.unlu.edu.ar€¦ · Selecciones Anidadas 71 Menú de Opciones 75 Estructura de Selección Múltiple 79 Trabajo Práctico III - Estructura Condicional

UNLu - DCB Cuaderno de estudio "Metodología de la Programación"

151

Bibliografía

Fundamentos de informática, lógica, resolución de problemas, programas y computadoras Autores Allen B. Tucker, W. James Bradley, Robert D. Cupper, David K. Garnick Editorial McGraw-Hill Año 1994 Curso de programación Autores Jorge Castro, Felipe Cucker, Xavier Messeger, Albert Rubio, Luis Solano, Borja Valles Editorial McGraw-Hill Año 1993 Fundamentos de programación. Algoritmos y Estructuras de Datos Autores Luis Joyanes Aguilar Editorial McGraw-Hill, 2da edición, Año 1998 Algoritmos. Problemas resueltos y comentados Autores Joaquín Fernández, Francisco J. Oliver, José L. Sánchez Editorial Paraninfo Año 1992

Algorithms Autores Ian Craw y John Pulham. Universidad de Aberdeen. http://www.maths.abdn.ac.uk/~igc/tch/mx4002/notes/notes.html

El Lenguaje de programación C.

Autores B. Kernighan, B y D.Ritchie. Editorial Prenctice Hall , 2da edición Introducción a la programación. Un enfoque práctico Autores J.M. González, J. Cordero, , R. Martínez, R. Romero

Editorial Algaida Informática, año 1996