UNIDAD 2 - METODOLOGÍA DE LA PROGRAMACIÓN. (48 Horas Aprox) 1 HERRAMIENTAS Y ANOTACIONES PARA EL DISEÑO DE ALGORITMOS .............. 3 1.1 DIAGRAMAS DE FLUJO. ............................................................ 3 1.1.1 Diagramas de flujo del sistema. Organigramas ........................... 3 1.1.2 Diagramas de flujo del programa. Ordinogramas. ....................... 4 2 ESTRUCTURA GENERAL DE UN PROGRAMA. .......................................... 6 2.1 La estructura de un programa. .................................................. 6 2.1.1 Estructura de un programa en PASCAL. ................................... 6 2.1.2 Estructura de un programa en C............................................ 7 2.1.3 Estructura de un programa en pseudocódigo............................. 8 2.2 PARTES PRINCIPALES DE UN PROGRAMA. ....................................... 8 2.2.1 Entrada. ....................................................................... 8 2.2.2 Proceso. ....................................................................... 8 2.2.3 Salida. ......................................................................... 8 2.3 CLASIFICACIÓN DE LAS INSTRUCCIONES......................................... 9 2.3.1 De declaración. ............................................................... 9 2.3.2 Primitivas. ..................................................................... 9 2.3.2.1 De entrada ............................................................... 9 2.3.2.2 De asignación ........................................................... 10 2.3.2.3 De salida. ............................................................... 10 2.3.3 De control. ................................................................... 10 2.3.3.1 Alternativas. ............................................................ 10 2.3.3.1.1 Simple (if then)...................................................... 10 2.3.3.1.2 Doble (if then else)................................................ 11 2.3.3.1.3 Múltiple (case of)................................................... 12 2.3.3.2 Repetitivas .............................................................. 13 2.3.3.2.1 Mientras (While)..................................................... 13 2.3.3.2.2 Repetir (Repeat). ................................................... 13 2.3.3.2.3 Para (For). ........................................................... 14 2.3.4 Compuestas. ................................................................. 15 2.3.5 Comentarios. ................................................................. 15 2.4 VARIABLES AUXILIARES DE UN PROGRAMA. .................................... 15 2.4.1 Contadores. .................................................................. 15 2.4.2 Acumuladores. ............................................................... 16 2.4.3 Máximos y Mínimos. ......................................................... 16 2.4.4 Switches. ..................................................................... 16 3 TÉCNICAS DE PROGRAMACIÓN ........................................................ 17 3.1 PROGRAMACIÓN CONVENCIONAL................................................ 17 3.2 PROGRAMACIÓN ESTRUCTURADA. .............................................. 17 3.2.1 EJEMPLOS ESTRUCTURA SECUENCIAL. .................................... 18 3.2.2 EJEMPLOS CON SELECTIVAS. ............................................... 19 3.2.2.1 Estructuras de decisión anidadas. ................................... 20 3.2.2.2 Alternativa Múltiple. .................................................. 22 3.2.3 EJEMPLOS CON ESTRUCTURAS REPETITIVAS. ............................ 24 3.2.3.1 Estructura Mientras (WHILE)......................................... 24 3.2.3.2 Estructura Repetir .................................................... 27 3.2.3.3 Estructura desde/para (FOR) ........................................ 30 3.2.4 Ejemplos estructuras repetitivas anidadas. ............................. 33 3.3 PROGRAMACIÓN MODULAR....................................................... 35 3.3.1 Tamaño de los módulos. .................................................... 35 3.3.2 Implementación de los módulos. .......................................... 36 3.3.2.1 Subprogramas, Procedimientos, Funciones. ........................ 36 3.3.2.1.1 Representación. ..................................................... 37 3.3.2.1.2 Parámetros. .......................................................... 38 3.3.2.1.3 Tipos de Parámetros. ............................................... 38 3.3.2.1.4 Ámbito: Variables locales y globales. ............................ 39 3.3.2.2 Funciones. .............................................................. 40 4 EJERCICIOS PROPUESTOS.............................................................. 50 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 1 HERRAMIENTAS Y ANOTACIONES PARA EL DISEÑO DE ALGORITMOS 1.1 DIAGRAMAS DE FLUJO. Antes de escribir un programa en un lenguaje de programación, podemos expresarlo gráficamente. Esta expresión gráfica nos ayudará a conocer la información que tenemos y a ordenar el tratamiento de la misma en pasos que faciliten luego la realización de un programa sin errores y fácil de entender y modificar. Para estas representaciones básicas utilizaremos unos símbolos sencillos. 1.1.1 Diagramas de flujo del sistema. Organigramas El organigrama representa la organización global de lo que queremos hacer, es decir, la información que tenemos, dónde la tenemos y qué queremos hacer con ella. El proceso o tratamiento se representa sin detallar, pues en el ordinograma se indicará dicho proceso. La norma para representar organigramas es la siguiente: - En la parte superior estarán los soportes de entrada, es decir donde está la información. En el centro estará el proceso sin desarrollarlo, y los soportes que funcionan tanto de entrada como de salida. En la parte inferior estarán los soportes de salida, es decir donde estará la información después del proceso. Algunos símbolos que utiliza el organigrama son los siguientes: UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 3 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. Ejemplos: 1) Organigrama de una aplicación que realiza un listado por impresora de los alumnos de un centro que están almacenados en un disco llamado ALUMNOS. 2) Organigrama de una aplicación con entrada de datos a través de teclado, visualización de datos por pantalla y por impresora listado de errores. Ejemplo 1 Ejemplo 2 ENT RADA D E DATO S ALUMNOS U.T . U.T. LIST AD O DE ERRO RES LISTADO DE ALUMNOS VISUALIZ ACIÓN DE DAT OS (U.T. Unidad de tratamiento) 1.1.2 Diagramas de flujo del programa. Ordinogramas. Es la representación gráfica del algoritmo. Debe ser amplia y ordenada y no contener errores. En el ordinograma vendrá reflejado: El principio del proceso, las operaciones que se van a realizar, en el orden que se haya establecido, y el final del proceso. • • • • • Las normas para la representación de ordinogramas son: El comienzo del programa aparece sólo una vez. El fin del programa aparece sólo una vez: al final. El camino se tomará de principio a fin y de izquierda a derecha si están en el mismo nivel. Se debe impedir el cruce entre los distintos caminos. Para ello se utilizan los conectores. Además de los símbolos anteriores, el ordinograma utiliza los siguientes símbolos: UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 4 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. • Ejercicios: Realizar el organigrama y el ordinograma en estos ejemplos: 1) Calcular el área de un rectángulo cuyos datos base y altura se leen de teclado. Visualizar el resultado en la pantalla. 2) Calcular la suma de dos cantidades leídas de teclado y visualizarla por pantalla. Organigramas: D AT OS BASE Y ALTU RA DATOS CAN 1 Y CAN 2 PR OCESO PROCESO R ESULTADO RESULTA DO UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 5 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. Ordinogramas: Ejercicio 1 Ejercicio 2 INICIO INICIO BASE, ALTURA CAN1,CAN2 AREA=BASE *ALTURA SUMA=CAN1+CAN2 "Àrea: ", AREA "SUMA=", SUMA FIN FIN 2 ESTRUCTURA GENERAL DE UN PROGRAMA. Todo programa contiene dos bloques bien diferenciados: • Bloque de declaraciones: En él se especifican todos los objetos que utiliza el programa (constantes, variables, tablas, registros, ficheros, etc.) indicando sus características. Este bloque se encuentra localizado siempre por delante del comienzo de las acciones. • Bloque de instrucciones: Constituido por el conjunto de operaciones que se han de realizar para la obtención de los resultados deseados. 2.1 La estructura de un programa. 2.1.1 Estructura de un programa en PASCAL. program nombre de programa {cabecera del programa} uses lista de librerías; const definición de constantes; type declaración de tipos de datos definidos por el usuario; var declaración de variables; UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 6 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. procedure definiciones de procedimientos; function definiciones de funciones; begin sentencias; end. {cuerpo del programa} Donde: • nombre de programa : Es el identificador por el que se designa al programa. • lista de librerías: Aquí se pondrán los nombres de las librerías que utiliza el programa. Por ejemplo en la librería crt están definidas todas las operaciones relacionadas con el teclado y la pantalla. • definición de constantes : Aquí se pondrán aquellos datos que se utilizan en el programa pero que no alteran su valor en ningún momento. • declaración de tipos de datos definidos por el usuario : Aquí se definen otros tipos de datos. • declaración de variables: Aquí se encuentran las variables del programa, su identificador y su tipo. • En definiciones de procedimientos y definiciones de funciones: se definen los subprogramas que tendrá nuestro programa. • sentencias : Aquí se pondrán las operaciones que realiza el programa. 2.1.2 Estructura de un programa en C. /* Estructura de un programa C */ #include ... /*directivas archivos de cabecera */ void main(void) /* función principal main() */ { /* Declaraciones de variables */ .......... /* Instrucciones de main() */ .......... } /* Declaraciones de funciones */ void fun1(void) /*cabecera de fun1() */ { /*cuerpo de fun1()*/ .............. } void fun2(void) /*cabecera de fun2() */ { /*cuerpo de fun2()*/ .............. } • • • • • Las directivas las utilizamos para indicar los archivos de cabecera, que contienen las funciones del lenguaje, que se utilizan en los programas. Una función Principal llamada main. Es la función que se ejecuta en primer lugar. El código de main() Las llamadas a funciones desde main. Desarrollo de las funciones declaradas por el usuario. UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 7 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 2.1.3 Estructura de un programa en pseudocódigo. Programa Nombre de programa Declaraciones <declaraciones de variables y constantes> Inicio <declaraciones de variables y constantes> Fin 2.2 PARTES PRINCIPALES DE UN PROGRAMA. Las partes principales de un programa son: DECLARACIONES PROGRAMA INSTRUCCIONES Entrada de datos Proceso o algoritmo Salida de resultados 2.2.1 Entrada. La constituyen todas las instrucciones que toman los datos de entrada desde un dispositivo externo y los almacenan en la memoria central para que puedan ser procesados. DATOS DE ENTRADA > MEMORIA CENTRAL 2.2.2 Proceso. Está formado por las instrucciones que modifican los objetos a partir de su estado inicial (datos de entrada) hasta el estado final (resultados), dejando los objetos que lo contienen disponibles en la memoria central. DATOS DE ENTRADA > PROCESO > RESULTADOS 2.2.3 Salida. Conjunto de instrucciones que toman los datos finales (resultados) de la memoria central y los envían a los dispositivos externos. MEMORIA CENTRAL UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. > DATOS DE SALIDA Pág: 8 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 2.3 CLASIFICACIÓN DE LAS INSTRUCCIONES. Según la función que desempeñan dentro de un programa, las instrucciones s e clasifican de la siguiente manera: 2.3.1 De declaración. Su misión es anunciar la utilización de objetos en un programa indicando qué identificador, tipo y otras características corresponde a cada uno de ellos. Ejemplos: En C /*constantes*/ #define VERDADERO 1 #define CIEN 100 #define IVA 0.17 /*variables*/ char car1, car2, car3; int m, n; float x, y; En seudocódigo Declaraciones Constantes VERDADERO = 1 CIEN = 100 IVA=0.17 Variables carácter car1, car2, car3 enteras m, n reales x, y Todo objeto referenciado en un programa debe haber sido previamente definido. 2.3.2 Primitivas. Son aquellas que ejecuta el procesador de modo inmediato. Pueden ser: de entrada, de asignación o de salida. 2.3.2.1 De entrada Su misión consiste en tomar uno o varios datos desde un dispositivo de entrada y almacenarlos en la memoria central en los objetos cuyos identificadores aparecen en la propia instrucción. EN C: Nombre scanf("control", campo); - No es aconsejable utilizar más de un dato por instrucción: Num scanf("%s", nombre); scanf("%d", &Num); UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 9 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 2.3.2.2 De asignación Nos permite realizar cálculos evaluando una expresión y depositando su valor final en un objeto o realizar movimientos de datos de un objeto a otro. EN C: variable = expresión; su m a= 0 suma = 0; suma = suma + 100; contador = contador + 1; su m a= su m a+1 00 2.3.2.3 De salida. Su misión consiste en enviar datos a un dispositivo externo, bien tomándolos de objetos depositados en la memoria central o definidos de alguna forma en la propia instrucción. Ejemplos en Pascal: EN C: printf(Control,campo1,campo2,....); Cuando se encuentra \n se provoca un salto de línea. printf("\n Hay %d alumnos \n",nume); printf("\n Total salario: %f \n",Salario); "Total sa lario:", salario 2.3.3 De control. Son instrucciones que realizan la evaluación de expresiones, generalmente lógicas, con el objetivo de controlar la ejecución de otras instrucciones o alterar el orden de ejecución normal de otras instrucciones. 2.3.3.1 Alternativas. Son aquellas que controlan la ejecución de uno o varios bloques de instrucciones, dependiendo del cumplimiento o no de alguna condición o del valor final de una expresión. Existen 3 modelos típicos de instrucciones alternativas: alternativa simple, doble y múltiple. 2.3.3.1.1 Simple (if then). Controla la ejecución de un conjunto de instrucciones por el cumplimiento o no de una condición, de tal forma, que si se cumple, se ejecutan; si no se cumple, no se ejecutan. En seudocódigo: UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 10 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. Si expresión_lógica Acción1 Acción2 .......... Fin-si entonces SI CONDICION En C: NO Una sola sentencia if (expresión) ACCIONES sentencia_v; Varias sentencias if (expresión) { sentencia1; sentencia2; ............. sentencian; } 2.3.3.1.2 Doble (if then else). Controla la ejecución de dos conjuntos de instrucciones por el cumplimiento o no de una condición, de tal forma, que si se cumple, se ejecutan las instrucciones del primer bloque; si no se cumple, se ejecutan las instrucciones del segundo. NO SI CONDICION AC CIO NF En seudocódigo: Si expresión_lógica Acción_v1 Acción_v2 .......... Si no Acción_f1 Acción_f2 ............ Fin-si ACCIO NV entonces En C: Una sola sentencia if (expresión) sentencia_v else sentencia_f; UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 11 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. Varias sentencias if (expresión) { sentencia_v1; sentencia_v2; ............. sentencia_vn; } else { sentencia_f1; sentencia_f2; ............. sentencia_fn; } 2.3.3.1.3 Múltiple (case of). Controla la ejecución de varios conjuntos de instrucciones por el valor final de una expresión, de tal forma que cada conjunto de instrucciones está ligado a un posible valor de la expresión, existiendo un bloque al final que engloba otros posibles valores no definidos. Se ejecutará el conjunto que se encuentre relacionado con el valor que resulte de la evaluación de la expresión, de tal forma que si este no aparece se ejecutará el último. EXP RESIÓN VAL OR1 ACCIÓN 1 VALO R2 ACCIÓ N2 EN LENGUAJE C switch (expresión) { case constante1: secuencia de sentencias; break; case constante2: secuencia de sentencias; break; case constante3: secuencia de sentencias; break; . . default: secuencia de sentencias; UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. VAL OR3 ACCIÓN3 OTROS AC CIÓN4 EN SEUDOCÓDIGO Según sea (expresión) Valor1: Instrucción1 Instrucción2 ........... Valor2: Instrucción1 Instrucción2 ............. ............ Otros: Instrucción1 Instrucción2 .............. Fin-según-sea Pág: 12 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. } 2.3.3.2 Repetitivas Son aquellas que controlan la repetición de un conjunto de instrucciones denominado rango mediante la evaluación de una condición que se realiza cada nueva repetición o por medio de un contador asociado. 2.3.3.2.1 Mientras (While). Controla la ejecución del conjunto de instrucciones que configuran su rango, de tal forma que éstas se ejecutan mientras se cumpla la condición, que será evaluada antes de cada repetición, es decir, mientras la condición sea CIERTA. En C: En seudocódigo: while (expresión_condición) Una_sentencia; Mientras (condición) sentencia1 sentencia2 ......... Fin-mientras while (expresión_condición) { sentencia(s); } NO CONDICION SI ACCION ES 2.3.3.2.2 Repetir (Repeat). Controla la ejecución del conjunto de instrucciones que configuran su rango, de tal forma que éstas se ejecutan hasta que se cumpla la condición, que será evaluada siempre después de cada repetición, es decir, hasta que la condición sea CIERTA. Se diferencia de la anterior en que las instrucciones se ejecutan al menos una vez. En seudocódigo: Repetir En C: do { sentencia1 UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. sentencias; Pág: 13 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. sentencia2 ......... Mientras (condición) ........... } while (condición); A CCI ONE S SI CO ND ICION NO 2.3.3.2.3 Para (For). Controla la ejecución del conjunto de instrucciones que configuran su rango, de tal forma que éstas se ejecutan un número determinado de veces que queda definido en lo que se denomina la cabecera del bucle. En ella se define un identificador de variable que va a actuar como contador asociado y que se denomina variable de control del bucle, definiéndose al mismo tiempo su valor inicial, su valor final y el incremento que esta variable de control va a adquirir en cada definición. VC = Variable de control VI = Valor inicial VF = Valor final IN = Incremento En seudocódigo: En C: Para VC=VI hasta VF hacer for(inicialización ; condición ; incremento) Unasentencia; sentencia-1; sentencia-2; for(n = 1 ; n <= 10000 ; n++) ; .............. sentencia-n for(inicialización ; condición ; incremento) Fin-para { sentencia1; sentencia2; sentencia3; } UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 14 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. VC = VI SI VC > V F NO ACCIONES VC = VC + IN 2.3.4 Compuestas. Una instrucción compuesta es aquella que representa a un conjunto de instrucciones que están definidas en otra parte. En general son llamadas a subprogramas (funciones, subrutinas, procedimientos). 2.3.5 Comentarios. Son frases que se incluyen de forma moderada en el diseño de un algoritmo con intención de aclarar el cometido o función de un objeto o conjunto de instrucciones. En pascal se representan por las llaves {}, o por los paréntesis seguidos y precedidos de un *. Ejemplo: {Esto es un comentario en Pascal} (*Esto es otro comentario en Pascal*) /*Esto es otro comentario en C */ // Esto es otro comentario en C 2.4 VARIABLES AUXILIARES DE UN PROGRAMA. Son objetos que utiliza un programa y por la función que realizan dentro del mismo toman un nombre especial, modelizando su funcionamiento debido a su frecuente utilización. 2.4.1 Contadores. Un contador es un objeto que se utiliza para contar cualquier evento que pueda ocurrir dentro de un programa. En general suelen contar de forma natural desde 0 y de 1 en 1, aunque se pueden realizar otros tipos de cuenta necesarios en algunos procesos. Se utilizan realizando sobre ellos dos operaciones básicas: UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 15 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. • • Inicialización: Todo contador se inicializa a 0 si realiza una cuenta natural, o a otro valor si se desea realizar otro tipo de cuenta. C1 = 0; CP = 2; Contabilización o incremento: Cada vez que aparece el evento a contar se ha de incrementar el contador en 1 si se realiza cuenta natural o en otro valor si se realiza otro tipo de cuenta. C1 = CP = C1 + 1; CP + 2; 2.4.2 Acumuladores. Son objetos que se utilizan en un programa para acumular elementos sucesivos con una misma operación. En general se utilizan para calcular sumas y productos, sin descartar otros posibles tipos de acumulación. Para utilizarlos se realizarán sobre ellos dos operaciones básicas: • Inicialización: Todo acumulador se inicializa a 0 si realiza sumas y a 1 si realiza productos. SUMA = 0; PRODUC = 1; • Acumulación: Cuando se hace presente en la memoria el elemento a acumular por la realización de una lectura o un cálculo, se efectúa la acumulación del mismo por medio de la asignación: SUMA = SUMA + CANTIDAD; PRODUC = PRODUC * NUMERO; 2.4.3 Máximos y Mínimos. Un máximo es una variable que guarda el máximo valor de un conjunto de valores. El máximo se inicializa a un valor muy pequeño para que tengamos la seguridad de que el primer valor que se almacene en esta variable sea el mayor. Un mínimo es similar al máximo solo que coge el valor más pequeño de una serie de valores. El mínimo se inicializa a un valor máximo. 2.4.4 Switches. Son objetos que se utilizan en un programa y sólo pueden tomar dos valores (true y false , 0 y 1) realizando la función de transmitir información de un punto a otro dentro del programa. Se utilizan iniciándolos con un valor y en los puntos en que corresponda se cambian al valor contrario. UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 16 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 3 TÉCNICAS DE PROGRAMACIÓN 3.1 PROGRAMACIÓN CONVENCIONAL. Los diagramas de flujo fueron la primera representación gráfica utilizada para el diseño de algoritmos y programas. Este tipo de herramienta constituye el fundamento de la programación convencional clásica y es de utilidad para la solución de problemas de pequeña y mediana complejidad. Sin embargo, para problemas complejos el diseño de algoritmos implica un aumento considerable de la representación gráfica y una reducción de la legibilidad del algoritmo. Para evitar estos inconvenientes se utilizan otras técnicas de programación que veremos en los siguientes puntos. 3.2 PROGRAMACIÓN ESTRUCTURADA. El término programación estructurada se refiere a un conjunto de técnicas que han ido evolucionando desde los primeros trabajos de Edsgar Dijkstra. Estas técnicas aumentan considerablemente la productividad del programa reduciendo en elevado grado el tiempo requerido para escribir, verificar, mantener y depurar los programas. La programación estructurada utiliza un número limitado de estructuras de programación que minimizan la complejidad de los problemas y por consiguiente reducen los errores. La programación estructurada hace los programas más fáciles de escribir, leer y mantener. La programación estructurada es el conjunto de técnicas que incorporan: • Diseño descendente (top-down). Es el proceso mediante el cual un problema se descompone en una serie de niveles o pasos sucesivos de refinamiento. Se descompone el problema en etapas o estructuras jerárquicas, de modo que se puede considerar cada estructura desde dos puntos de vista: )qué hace? y )cómo lo hace?. DISEÑO TOP PROBLEMA INICIAL Primer refinamiento SUBPROBLEMA 1 SUBPROB. 2 SUBPROB. 3 DOWN 21 refinamiento 1.1 2 3 1 ..... • 2 .... 3 1 2 3 .... Recursos abstractos. Descomponer un programa en términos de recursos abstractos consiste en descomponer una determinada acción compleja en términos de un número de acciones más simples capaz de ejecutarlas o constituyan instrucciones de computadora disponible. UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 17 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. • Estructuras básicas. En mayo de 1966 Böhm y Jacopini demostraron que un programa propio puede ser escrito utilizando solamente tres tipos de estructuras de control: - secuenciales - selectivas - repetitivas Un programa se define como propio si cumple las siguientes características: - 3.2.1 Posee un solo punto de entrada y uno de salida o fin para control del programa. Existen caminos desde la entrada hasta la salida que se pueden seguir y que pasan por todas las partes del programa. Todas las instrucciones son ejecutables y no existen lazos o bucles infinitos (sin fin). EJEMPLOS ESTRUCTURA SECUENCIAL. INICIO Acción 1 Acción 2 Acción 3 FIN Acción 1 Acción 2 < Acción 3 Ordinograma • Realiza el ordinograma y el seudocódigo de los siguientes ejercicios: 1) Programa que lea un número de teclado, calcule el cuadrado y el cubo y lo visualice. 2) Programa que lea un número expresado en segundos y lo visualice en el equivalente de minutos y segundos.(Utilizar los operadores / y % que sólo se utilizan con enteros). c =a / b; c = a % b; INICIO INICIO N UMERO N UMERO C UAD=NU MER O*NU MERO MINU TOS=NU MER O/60 CUB O=CU AD *NU MER O SEGUND OS=N UMERO/60 " Cuadr ado=",C UAD "C ubo=",CUBO FIN UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. "Min uto s=",MINUTOS "Segun dos=",SE GUN DOS FIN Pág: 18 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 1) Programa CuadradoYCubo; Declaraciones Enteras numero, cuad, cubo Inicio Visualiza(“Teclea un número:”) Leer numero cuad = numero * numero cubo = cuad * numero visualiza(“El cuadrado es : “, cuad) visualiza(“El cubo es : “, cubo) Fin 3.2.2 • 2) Programa Minutos; Declaraciones Enteras numero, minutos, segundos Inicio Visualiza(“Teclea un número:”) Leer(numero) minutos = numero / 60 segundos = numero % 60 Visualiza (“Los minutos son : “, minutos) Visualiza (“Los segundos : “, segundos) Fin. EJEMPLOS CON SELECTIVAS. Realiza el ordinograma y el seudocódigo de los siguientes ejercicios: 1) Programa que lea un número de teclado y deduzca si es positivo o negativo. 2) Programa que intercambie los valores de dos números enteros leídos de teclado si no están en orden creciente y no hacer nada si están ordenados. E JER CIC IO 1 : INIC IO E JE R CIC IO 2: N U ME R O1 , N U M ER O2 N U ME R O NO N U ME R O > 0 IN ICIO SI N U ME R O1 > N U M ER O2 NO SI N U ME R O , "E S NE GA TIVO O CE RO" N UM ER O , "E S P OSITIV O" A U X=N U M ER O1 N U ME R O1 =N U ME R O2 N U M ER O2 =A UX FIN FIN Programa PositivoNegativo Declaraciones Enteras Numero Inicio Visualiza “Teclea el número:” Leer Numero Si (Numero > 0) entonces Visualiza Numero, 'Es positivo' Si no Visualiza Numero, 'Es negativo' Visualiza 'O bien es cero' Fin_si Fin. UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Program Intercambiar Declaraciones Enteras Numero1, Numero2, Aux Inicio Visualiza “Teclea numero 1:” Leer Numero1 Visualiza “Teclea numero 2:” Leer Numero2 Si (Numero1 > Numero2) entonces Aux:=Numero1; Numero1:=Numero2; Numero2:=Aux Fin_si Fin Pág: 19 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 3.2.2.1 Estructuras de decisión anidadas. La sentencia que sigue a la palabra then o else puede ser cualquiera, incluso otra sentencia ifthen-else. Cuando una o ambas bifurcaciones de una sentencia if-then-else contienen también una sentencia if-then-else, se dice que dichas sentencias if están anidadas y al proceso anidamiento. NO NO NO ACCIONES4 COND3 SI COND2 SI CON D1 SI ACCIONES1 ACC IONES2 ACCIONES3 SI (condición1) entonces <ACCIONES1> si no Si (condición2) entonces <ACCIONES2> si no Si (condición3) entonces <ACCIONES3> si no <ACCIONES4> Fin_si Fin_si Fin_si • Realiza el ordinograma y el seudocódigo de los siguientes ejercicios: UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 20 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 1) Programa que lea tres números enteros de teclado y visualice el mayor (los tres números se suponen distintos). INICIO A, B, C SI NO NO A>B SI MAYOR = C SI NO B>C A>C MAYOR = B MAYOR = C MAYOR =A "MAYOR ES =", MAYOR FIN Programa Mayor Declaraciones Enteras A, B, C, MAYOR Inicio Visualiza “Teclea tres números enteros:” Leer A,B,C Si (A > B) entonces Si (A > C) entonces MAYOR = A si no MAYOR = C Fin-si si no Si (B > C) entonces MAYOR = B Si no MAYOR = C Fin-si Fin-si Visualiza “El número mayor es : “,MAYOR Fin 2) Programa que lea tres números enteros de teclado y visualice el mayor, el intermedio y el UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 21 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. menor (los tres números se suponen distintos). INICIO A, B, C NO SI A >B NO SI NO C >B MAYOR=C INTER=B MENOR =A MAYOR=B NO SI A >C MAYOR=C INTER=A MENOR=B SI MAYOR=A NO A >C INTER=C MENOR=A SI B> C INTER=A MENOR=C INTER=C MENOR=B INTER=B MENOR=C MAYOR, INTER, MENOR FIN Programa OrdenarTresNumeros Declaraciones Enteras A, B, C, MAYOR, INTER, MENOR Inicio Visualiza “Teclea tres números enteros:” Leer A,B,C Si (A > B) entonces Si (A > C) entonces MAYOR = A Si (B > C) entonces INTER = B MENOR = C Si no INTER = C MENOR = B Fin-si Si no MAYOR = C INTER = A MENOR = B Fin-si Si no Si (C > B) entonces MAYOR = C INTER = B MENOR = A Si no MAYOR = B Si (A > C) entonces INTER = A MENOR = C Si no INTER = C MENOR = A Fin-si Fin-si Fin-si Visualiza “El número mayor es : “,MAYOR Visualiza “El intermedio es : “,INTER Visualiza “El menor es : “,MENOR Fin 3.2.2.2 Alternativa Múltiple. UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 22 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 1) Realiza el ordinograma y la codificación en Pascal para un programa que lea un número entero de teclado y visualice el día de la semana al que corresponde. INICIO NUMERO NUMERO 1 "LUN ES" 2 "MARTES" 3 "MIERCOLES" 5 4 "JUEVES" "VIERNES" 6 "SABADO" 7 "DOMINGO" FIN Programa Diassemana Declaraciones Entera NUMERO Inicio Leer NUMERO Según sea NUMERO 1 : Visualiza “Lunes” 2 : Visualiza “Martes” 3 : Visualiza “Miércoles” 4 : Visualiza “Jueves” 5 : Visualiza “Viernes” 6 : Visualiza “Sábado” 7 : Visualiza ”Domingo” Otros Visualiza “DÍA NO VALIDO” Fin-Según-sea End. 2) Programa que lea dos números enteros de teclado (suponemos que son > 0) y, a continuación, pida la operación aritmética a realizar con estos dos números (+ , - , *, /), realice la operación pedida y visualice el resultado. Controlar que la operación tecleada no sea correcta Programa operaciones Declaraciones Enteras N1, N2, RESUL Caracter OPERA inicio Leer N1, N2 Visualiza “Teclea la operación + , - , *, / : “ Leer OPERA Según sea OPERA '+' : RESUL=N1+N2 Visualiza “SUMA:”, RESUL UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. '-' : Fin RESUL=N1-N2 Visualiza “RESTA:”, RESUL '*' : RESUL=N1*N2 Visualiza “PRODUCTO:”, RESUL '/' : RESUL=N1 / N2 Visualiza “DIVISIÓN:”, RESUL Otros Visualiza “OPERACIÓN INCORRECTA.” Fin-Según_sea Pág: 23 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. INICIO N1, N2 'Teclea +, - , * , /' OPERA OPERA + RESUL =N1+N2 'SUMA', RESUL * - RESUL=N1-N2 RESUL=N1*N2 'RESTA', RESTA 'PRODUCTO', RESUL / RESUL=N1/N2 OTRO 'OPERACION INCORRECTA' 'DIVISION', RESU L FIN 3.2.3 EJEMPLOS CON ESTRUCTURAS REPETITIVAS. Es una estructura con una entrada y una salida en la cual se repite una acción un número determinado o indeterminado de veces, dependiendo en este caso del cumplimiento de una condición. 3.2.3.1 Estructura Mientras (WHILE). RECUERDA: En esta estructura se repite una acción/es mientras se cumpla la condición (expresión lógica) que controla el bucle. La característica principal de esta estructura es que la condición es evaluada siempre antes de cada repetición. Si la condición es verdadera, se ejecuta el bucle, y si es falsa el control pasa a la sentencia siguiente al bucle. UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 24 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. While condición do Sentencia-simple; While condición do begin acción-1; acción-2; ................. acción-n end; NO CONDICION SI ACCIONES Ejemplos en Pascal: • Realiza el ordinograma y el seudocódigo de los siguientes ejercicios: 1) Programa para leer un número entero de teclado y decir si es primo o no lo es. ( Un número es primo si sólo es divisible por sí mismo y la unidad; entonces hay que dividirlo entre todos los números menores que él, hasta el 2 y ver si con alguno da resto 0; en ese caso no es primo.). INICIO PRIMO=TRUE DIVISOR=2 NUME NO DIVISOR<NUME AND PRIMO =TRUE SI NUMERO MOD DIVISOR = 0 NO NO SI PRIMO=TRUE SI NUME, 'NO ES PRIMO' NUME, 'ES PRIMO' PRIMO=FALSE FIN DIVISOR=DIVIDOR+1 UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 25 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. programa Primo declaraciones enteras Primo, Nume, Divisor Inicio Primo=0 Divisor=2 Visualiza “Teclea un nº > 0:'” Leer Nume mientras (Divisor < Nume) y (Primo=0) Si (Nume % Divisor =0) entonces Primo=1 Fin-si Divisor=Divisor+1 Fin-mientras Si (Primo =0) Entonces Visualiza Nume ,”Es Primo” Si no Visualiza Nume ,”NO es Primo” Fin-si Fin-programa 2) Escribir un programa que encuentre el primer valor N para el cual la siguiente suma exceda a 10000 : 1 + 2 + 3 + 4 + 5 + ......... + N. INICIO Programa suma10000 Declaraciones N, Suma : integer; Inicio Suma=0 N=0 mientras (Suma <= 10000) N=N+1 Suma=Suma +N Fin-mientras Visualiza “El valor de N es “, N Fin-programa SUMA=0 N=0 SUMA<= 10000 SI N=N+1 SUMA=SUMA+N UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. NO 'VALOR DE N', N FIN Pág: 26 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 3) Leer números enteros de teclado y contar la cantidad de números positivos y negativos leídos. El programa termina cuando leamos el 0. INICIO POSI=0 NEGA=0 Programa contarnumeros Declaraciones Enteras N, Posi, Nega Inicio Posi=0 Nega=0 Leer N Mientras (N !=0) Si (N > 0) entonces Posi=Posi +1 si no Nega=Nega+1 Fin-si Leer N Fin-mientras Visualiza “Positivos “, Posi Visualiza “Negativos “, Nega Fin-programa N NO N <> 0 SI NO SI 'POSITIVOS',POSI 'NEGATIVOS', NEGA N> 0 NEGA=NEGA + 1 POSI = POSI + 1 FIN N 3.2.3.2 Estructura Repetir . RECUERDA: En esta estructura se repite una acción/es mientras se cumpla la condición (expresión lógica) que controla el bucle, la cual se evalúa después de cada ejecución del mismo. Las acciones se ejecutan como mínimo una vez, pues la condición se evalua después de ejecutar. El bucle termina cuando la condición no se cumple. Repetir acción-1 acción-2 .................. acción-n Mientras condición ACCIONES SI CONDICION NO UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 27 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. - Ejemplos cortos. leer nºs de teclado hasta leer el 100 Repetir Visualiza “Teclea número : “ Leer numero Mientras (numero != 100) Visualiza potencias de 2 hasta que sea > 100 Visualiza “ Potencias de dos “ potencia=1 Repetir Visualiza potencia potencia = potencia * 2 mientras (potencia <= 100) {Lectura de datos hasta teclear 'N' en respuesta} Calcula la edad media de los alumnos. Visualiza “ Leer Nombre y Edad de alumnos “ respuesta='s' suma=0 contador=0 Repetir Visualiza “Teclea el Nombre : “ Leer (nombre); Visualiza “Teclea la Edad : “ Leer edad suma=suma+edad contador=contador+1 Visualiza “Teclea N para terminar “ Leer respuesta Mientras (respuesta!='n') y (respuesta !='N') media=suma/contador Visualiza “Edad media = “, media 1) Realizar un programa para obtener la suma de la serie 1 + 1/2 + 1/3 + ... + 1/N hasta que la suma sea mayor de 3. Visualiza el valor de N. INICIO programa sumaserie Declaraciones Enteras N Real Suma Inicio N=0 Suma=0 repetir N=N+1 Suma =Suma + 1/N Mientras (Suma <= 3) Visualiza “Suma “, Suma Visualiza “N vale “, N Fin-Programa S UMA=0 N=0 N=N +1 SUM A=SU MA +1/N SI S UMA <= 3 SI SU MA, N F IN UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 28 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 2) Hacer un entrada de datos de alumnos pidiendo por teclado los datos: NOMBRE, CURSO y SEXO; validando el curso con un valor de 1 a 3, y el sexo con los valores "H" o "M". El proceso terminará cuando se responda ‘N’ o ‘n’ a la pregunta: “¿Quieres teclear más datos?.” . Visualizar el nº de hombres y el nº de mujeres tecleados. IN ICIO Programa Datosalumnos Declaraciones Enteras CURSO, CH, CM Carácter SEXO, MAS Cadena NOMBRE Inicio CH=0. CM=0 repetir Visualiza “Teclea Nombre.” Leer NOMBRE Repetir Visualiza “Teclea Sexo.” Leer SEXO Mientras (SEXO != 'H') y (SEXO != 'M') Repetir Visualiza “Teclea Curso.” Leer CURSO Mientras (CURSO<1) o (CURSO>3) Si (SEXO='M' ) entonces CM=CM+1 Si no CH=CH+1 Fin si Visualiza “¿Quieres teclear más datos?.” Leer MAS Mientras (MAS!='N') y (MAS!='n') Fin C H=0 CM =0 NOMBR E SEXO SI SE XO!='H ' y SE XO!='M' NO C UR SO SI CU RSO<1 o CU RSO >3 NO NO SI S EXO='H' CM=C M+1 C H=CH +1 MAS NO MAS ='N' UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. SI CH , CM Pág: 29 FIN ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 3.2.3.3 Estructura desde/para (FOR) RECUERDA: utilizamos esta estructura cuando sabemose el número de veces que vamos a ejecutar un grupo de instrucciones. Utiliza una variable de control que debe inicializarse y dentro del bucle se va incrementando o decrementando. Ejemplos en seudocódigo: Para a =1 hasta 10 hacer Visualiza a Fin-para Para caracter ='a' hasta 'z' hacer Visualiza caracter Fin-para suma:=0; Para i=1 hasta 100 hacer suma=suma+i Fin-para • Visualiza “ Leer 10 números y sumarlos “ suma=0 Para i=1 hasta 10 hacer Visualiza “Teclea el número “, i ,” : “ Leer numero suma=suma+numero Fin-para Visualiza “La suma es : “,suma Realiza el ordinograma y el seudocódigo para los siguientes ejercicios: 1) Escribir un programa que calcule la suma : 1 + 1/2 + 1/3 + 1/4 + .... + 1/N, donde N se debe leer de teclado, comprobar que n sea distinto de 0 para realizar la suma. IN ICIO Programa Sumaserie Declaraciones Enteras I, N Real SUM Inicio Visualiza “Teclea Número.” Leer N Si (N <> 0) entonces SUM=0 Para I=1 hasta N hacer SUM = SUM + (1 / I) Fin-para Visualiza “LA SUMA ES:”, SUM Si no Visualiza ” el valor de N es 0” Fin-si Fin N NO N <> 0 'N ES 0 ' SI S UM = 0 I= 1 FIN NO I <= N 'S UM A' , S UM A SI SU M = SU M + 1 / I I =I + 1 UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 30 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 2) Escribir un programa para leer el nombre, la edad y el curso de los 100 alumnos de un centro y visualizar : la edad media , el número de alumnos de 2º curso y la edad media de los alumnos de 3º curso. INICIO AE=C=0 AE3=C3=C2=0 programa Alumnos Declaraciones Enteras I, AE, C, AE3, C3, C2 , CUR, EDAD Cadena NOM Real M, M3 Inicio AE=0, C=0 AE3=0, C3=0, C2=0 Para I=1 hasta 100 hacer Leer NOM, EDAD, CUR AE=AE+EDAD C=C+1 Si (CUR = 2) entonces C2=C2+1 Fin-si Si (CUR = 3) entonces C3=C3+1 AE3=AE3+EDAD Fin-si Fin-para M = AE/C M3=AE3/C3 Visualiza “Edad Media:”, M Visualiza “Media de los de 3º:”, M3 Visualiza “ALUMNOS de 2º:”, C2 Fin. I=1 NO M = AE / C M3 = AE3 /C3 I <= 100 SI NOM, EDAD, CUR M, M3, C2 FIN AE=AE+EDAD C=C+1 SI CUR = 2 C2 = C2 + 1 NOI SI CUR = 3 C3 = C3 +1 AE3=AE3+EDAD NO I=I+1 UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 31 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 3) Realiza un programa que lea 10 números enteros de teclado y visualize el mayor y el menor de los números leídos. INIC IO programa MaximoMinimo Declaraciones Enteras I, MAX, MIN, N Inicio MAX =-9999 MIN= 9999 Para I:=1 hasta 10 hacer Leer N Si (N > MAX) entonces MAX = N Fin-si Si (N < MIN) entonces MIN = N Fin-si Fin-para Visualiza “Maximo: “, MAX, “ Mínimo: “, MIN Fin MAX =-9 999 MIN =999 9 I= 1 NO I <=1 0 MAX , MIN SI N N > MA X MA X = N SI NO SI N < MIN MIN = N NO I =I+ 1 RECUERDA: Para poder calcular el máximo y el mínimo necesitamos dos variables auxiliares que irán guardando estos valores. Cada número tecleado se comparará con estas variables. Si el número tecleado es mayor que el máximo entonces el nuevo máximo será ahora el valor tecleado. Si el número tecleado es menor que el mínimo entonces el nuevo mínimo será ahora el valor tecleado. UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 32 FI N ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 3.2.4 Ejemplos estructuras repetitivas anidadas. Ejemplo 1 : Leer las temperaturas horarias de cada uno de los días del año en Guadalajara: INICIO DIAS = 1 programa Temperaturas Declaraciones Enteras Días, Horas, Temperatura Inicio Días=1 Mientras (Días<= 365) Horas=1 Mientras (Horas <= 24) Leer Temperatura Horas = Horas+1 Fin-mientras Días=Dias+1 Fin-mientras DIAS <= 365 NO FIN SI HORAS = 1 NO Fin. HORAS <= 24 SI TEMPERATURA HORAS=HORAS+1 DIAS = DIAS + 1 UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 33 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. Ejemplo 2: Leer las 5 asignaturas y notas en cada una de las tres evaluaciones de un alumno, y calcular la nota de cada evaluación: INICIO EVAL = 1 programa Evaluaciones Declaraciones Integer EVAL, Sum, nota, I Real NotaEva Cadena asignatura Inicio Para EVAL = 1 hasta 3 hacer Sum:=0; Para I = 1 hasta 5 hacer Leer asignatura Leer nota Sum=Sum+nota Fin-para NotaEva=Sum/3 Visualiza(Eval,' Evaluación = ', NotaEva) Fin-para Fin NO EVAL <= 3 FIN SI SUM=0 I =1 NO I <= 5 SI ASIGNATURA, NOTA NOTAEVA=SUM/3 SUM = SUM+NOTA EVAL , NOTAEVA I= I+ 1 EVAL = EVAL+1 UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 34 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 3.3 PROGRAMACIÓN MODULAR. En programación modular el programa se divide en módulos (partes independientes), cada una de las cuales ejecuta una actividad o tarea y se codifican independientemente de otros módulos. Cada uno de estos módulos se analizan, codifican y ponen a punto por separado. Cada programa contiene un módulo que se llama programa principal que controla todo lo que sucede; se transfiere el control a submódulos (subprogramas) , de modo que ellos puedan ejecutar sus funciones; sin embargo cada submódulo devuelve el control al programa principal cuando se haya completado su tarea. Si la tarea asignada a cada submódulo es demasiado compleja, éste deberá romperse en otros módulos más pequeños. Dado que los módulos son independientes, diferentes programadores pueden trabajar simultáneamente en diferentes partes del mismo programa. RAÍZ MOD.1 MOD. 2 MOD. 3 MOD. 4 MOD11 MOD 2.1 MOD 2.2 MOD 3.1 MOD4.2 MOD 4.1 3.3.1 Tamaño de los módulos. Aunque no exista una regla fija que permita definir el tamaño estándar del módulo, una buena aproximación es considerar módulos del tamaño físico de una página ( 30 o 40 líneas de instrucciones). • Ejemplo: Se desea diseñar un algoritmo que realice las siguientes tareas: - Impresión de cabeceras de un informe. - Lectura de datos. - Ejecutar cálculos. - Imprimir líneas detalladas de información. - Imprimir totales. Este programa se puede descomponer en módulos de modo que exista un módulo principal o de control y diferentes submódulos: Módulo Principal : Llamada a submódulo "Impresion de cabeceras" Llamada a submódulo "Proceso de datos" Llamada a submódulo "Impresion de totales" Fin de proceso. Submódulo Impresión de cabeceras : Instrucciones para impresión de cabeceras. Retorno al módulo principal. Submódulo Proceso de datos : UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 35 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. Lectura de datos. Ejecución de cálculos. Impresión detallada de líneas. Retorno al módulo principal. Submódulo Impresión de totales : Instrucciones para impresión de totales. Retorno al módulo principal. • Representación gráfica: Módulo Principal Módulo de impresión de cabeceras 3.3.2 Módulo de proceso de datos Módulo de impresión de totales Implementación de los módulos. La programación modular se implanta utilizando módulos que toman diferentes nombres según el lenguaje de programación: subprogramas, procedimientos, funciones. 3.3.2.1 Subprogramas, Procedimientos, Funciones. Un subprograma es un programa dentro de otro. Tiene los mismos componentes que un programa y se ejecuta cuando lo ordena el programa principal. Se considera subprograma interno a aquél que está junto al programa principal de nuestro trabajo, y se llama externo al que no lo está. Un procedimiento es un subprograma que realiza una tarea específica. Puede recibir 0 o más valores del programa que llama y devolver cero o más valores a dicho programa llamador. Un procedimiento está compuesto de un grupo de sentencias a las que se asigna un nombre (identificador) y constituye una unidad de programa. La tarea asignada al procedimiento se ejecuta siempre que se encuentre el nombre del procedimiento. Los procedimientos deben estar declarados antes de que puedan ser referenciados en el cuerpo del programa. Una función es un subprograma que devuelve un único resultado al programa o subprograma que le llamó, pero puede recibir 0 o más valores del programa que llama. UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 36 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 3.3.2.1.1 • Representación. En el ordinograma del programa principal se representaría la llamada al subprograma como: SUBPROGRAMA (Parámetros) donde SUBPROGRAMA tendría aparte un ordinograma normal, con inicio, instrucciones de su algoritmo y fin. • En seudocódigo declaramos un procedimiento de la siguiente forma: FORMATO 1: Sin parámetros FORMATO 2: Con parámetros Procedimiento nombreproc Declaraciones Declaraciones de variables locales Inicio cuerpo del procedimiento Fin-procedimiento Procedimiento nombreproc(lista de parámetros formales) Declaraciones Declaraciones de variables locales Inicio cuerpo del procedimiento Fin-procedimiento lista de parámetros formales : Sirven para pasar información al procedimiento y/o devolver información del procedimiento a la unidad de programa que le invoca; tiene el formato: param1: tipo1 ; param2: tipo2; .... • La llamada para que se ejecute el procedimiento: FORMATO 1 : FORMATO 2 : nombreproc nombreproc(lista parámetros actuales) EJEMPLO: Programa Mensaje Procedimiento Asteriscos Inicio Visualiza “ *************** “ Fin-procedimiento {Procedimiento que pinta asteriscos} UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 37 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. Inicio {Programa Principal} Asteriscos {llama a Asteriscos } Visualiza “Hola” Asteriscos Fin {La salida será : *************** Hola *************** } INICIO AS TERISCOS "Hola" AS TERISCOS INICIO ASTERISCOS " ****** ******* ** " Fin ASTERISCOS Fin 3.3.2.1.2 Parámetros. Los subprogramas nos permiten realizar varias veces una serie de acciones; estas acciones pueden ser ejecutadas siempre sobre los mismos o diferentes datos. Para que un subprograma pueda utilizar diferentes variables, se utilizan los parámetros. 3.3.2.1.3 Tipos de Parámetros. Se define como parámetro toda variable que se intercambia entre el programa y el subprograma. Existen dos tipos de parámetros: • Parámetros por valor : Son aquellos que da el programa para proporcionar información al subprograma, y cuyo valor no será modificado por el subprograma. • Parámetros por referencia : Son aquellos que van a ser modificados por el subprograma y su valor modificado va a ser devuelto al programa. Para distinguirlos de los pasados por valor, se les colocará delante, en la declaración del subprograma la palabra VAR. UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 38 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. EJEMPLO 1 : El procedimiento Asteriscos dibuja el nº de asteriscos indicado en el parámetro N: Procedimiento Asteriscos( Entera N) {Procedimiento que pinta N asteriscos} Declaraciones Entera I Inicio Para I=1 hasta N hacer Visualiza('*') Fin-para Fin-procedimiento Diferentes llamadas al procedimiento son: Asteriscos(5) Asteriscos(2*4 - X) 3.3.2.1.4 Dibuja 5 asteriscos Si X=6 Dibuja 2 asteriscos Ámbito: Variables locales y globales. Una variable local es aquella que está declarada y definida dentro de un subprograma, y es distinta de las variables con el mismo nombre declaradas en cualquier parte del programa principal. Una variable global es aquella que está declarada para el programa o algoritmo completo. Programa Ejemplovariables Declaraciones Cadena a , b , c {a, b, c, i, j Enteras i , j Procedimiento Declaraciones son variables globales, las puede usar cq procedimiento} SUBPROGRAMA1 { a, b, i son variables locales al procedimiento, cualquier modificación de estas } { variables no afecta a las variables globales} Cadena a , b Enteras i Inicio {Instrucciones} Fin-procedimiento Procedimiento SUBPROGRAMA2 Declaraciones { a, c, i , j son variables locales al procedimiento} Cadena a , c Enteras i , j Inicio {Instrucciones} Fin-procedimiento Inicio {PROGRAMA PRINCIPAL} SUBPROGRAMA1 SUBPROGRAMA2 Fin. UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 39 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 3.3.2.2 Funciones. Cuando un subprograma sólo devuelve un valor, se le puede considerar dentro de una variedad de subprogramas denominados funciones, y que se declaran de la siguiente forma: Tipo-dato Función nombrefuncion (parámetros) {declaraciones locales} Inicio <Cuerpo de la función> Retorna valor Fin-Función y cuya llamada se realiza de la siguiente forma : varF = nombrefuncion(var1, var2, .....) Donde varF es del tipo devuelto por la función. EJEMPLO: Función que calcula y devuelva la media de 2 cantidades leídas de teclado. PROGRAMA calcularmedia VAR Enteras n1, n2 Real resul Real Funcion media( enteras x , y ) Inicio media = (x + y) / 2 Fin-Función INICIO Fin. {Programa Principal} Leer n1, n2 resul = media(n1, n2) { Llamada a la función} Visualiza “La Media es: “, resul UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 40 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. EJERCICIO: Realizar el ordinograma y el seudocódigo para un programa en el que aparezca el siguiente menú: ** MENÚ DE OPCIONES ** 1 2 3 4 - NUMEROS PRIMOS. DIBUJO. TABLA DE MULTIPLICAR. FIN. Teclea opción: - Opción 1: Programa que calcule e imprima los N primeros números primos. N es un valor entero que se leerá de teclado. Deberá ser > 0. - Opción 2: Utilizando bucles anidados realiza un programa que visualize este triángulo tantas veces como indique N, un valor entero leído de teclado. Por ejemplo si N = 6, la salida será: $ $$ $$$ $$$$ $$$$$ $$$$$$ Validar la entrada de N de 1 a 20. - Opción 3: Realiza un programa que lea un número entero de teclado y visualize la tabla de multiplicar. Por ejemplo tecleo 5 la salida será: 5*1=5 5 * 2 = 10 5 * 3 = 15 ....... 5 * 10 = 50 TENIENDO EN CUENTA QUE: - Cada uno de estos ejercicios será un procedimiento. - El programa principal se encargará de llamar a cada procedimiento. UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 41 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. PROGRAMA PRINCIPAL INI CIO PINTARMENU O PCIO N O PCIO N 1 2 P RIMOS 3 DIB UJO SI TAB LAMULT O PCIO N != 4 NO FIN UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 42 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. INICIO PRIMOS SUBPROGRAMA PINTARMENU SUBPROGRAMA PRIMOS '**CALCULAR PRIMOS**' INICIO PINTARMENU N '**MENU DE OPCIONE S**' '1. NUMEROS PRIMOS.' '2. DIBUJO.' '3. TAB LA DE MULT.' '4.FIN' 'NUMEROS PRIMOS SON:' Teclea opción: FIN PINTARMENU I=1 NO I <= N FIN PRIMOS TECLA SI PRIMO= VERPRIMO(I) P RIMO =1 SI NO I, 'ES PRIMO' I = I +1 UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 43 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. FUNCION VERPRIMO: INICIO VERPRIMO PRI = 1 DIVISOR = 2 DIVISOR < X y PRI = 1 NO FIN VERPRIMO RETORNA PRI SI X % DIVISOR =0 SI PRI = 0 NO DIVISOR = DIVISOR + 1 INICIO TECLA SUBPROGRAMA TECLA: 'Pulsa una tecla' C FIN TECLA UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 44 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. SUBPROGRAMA TABLAMULT: INICIO TABLAMULT 'TABLA DE MULTIPLICAR' N '************** ****' I =1 NO I <= 10 SI PRODUC = I * N N,'*',I,'=', PRODUC I =I + 1 UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. '******** **********' TECLA FIN TABLAMULT Pág: 45 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 46 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. INICIO DIBUJO SUBPROGRAMA DIBUJO '*DIBUJO DE TRIANGULO*' N SI N <1 0 N>20 NO I =1 NO I <= N TECLA FIN DIBUJO SI J =1 J <= I NO SI '$' J =J +1 I = I +1 Salto de línea UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 47 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. {PROGRAMA QUE PINTA UN MENÚ DE EJERCICIOS } ProgramA Menú Declaraciones Enteras opcion Inicio Repetir PintarMenu Leer opcion Según sea opción 1 : Primos 2 : Dibujo 3 : TablaMult Fin-según-sea Mientras (opción != 4) Fin. {Fin de programa} *********************************************************************** {PINTA EL MENÚ EN LA PANTALLA} Procedimiento Pintarmenu Inicio {Borrar pantalla} Visualiza ” **MENÚ DE OPCIONES** “ Visualiza “1. NUMEROS PRIMOS.” Visualiza “2. DIBUJO.” Visualiza “3. TABLA DE MULTIPLICAR.” Visualiza “4. FIN.” Visualiza “ Teclea opción: “ Fin-Procedimiento-Pintarmenu {FUNCIÓN QUE COMPRUEBA SI UN NUMERO ES PRIMO O NO} {RECIBE EL NUMERO Y DEVUELVE TRUE SI LO ES, FALSE SI NO LO ES} Entero Función Verprimo(Entero X ) Declaraciones Entero PRI, DIVISOR Inicio PR= 1 DIVISOR=2 mientras (DIVISOR < X) y (PRI=1) hacer Si (X % DIVISOR) =0 entonces PRI=0 Fin-si DIVISOR:= DIVISOR+1 Fin-mientras Retorna PRI Fin-Función-Verprimo {Pulsar tecla antes de volver al programa principal} Procedimiento Tecla Declaraciones Carácter c Inicio Visualiza “Pulsa una tecla para volver...” Leer c Fin- Procedimiento-Tecla UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 48 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. {OPCIÓN PRIMERA DEL MENÚ - VISUALIZAR LOS NUMEROS PRIMOS HASTA N} Procedimiento Primos Declaraciones Enteras N, I, PRIMO Caracter c Inicio Borrar la pantalla Visualiza “**CALCULAR PRIMOS HASTA UN N1 LEIDO DE TECLADO**” Visualiza “Teclea un nº:” Leer N Visualiza “Los números primos hasta “, N ,” son los siguientes:” Para I=1 hasta N hacer PRIMO=Verprimo(I) Si (PRIMO = 1) entonces Visualiza I, “ Es primo.” Fin-si Fin-Para Tecla Fin- Procedimiento-Primos {OPCIÓN SEGUNDA DEL MENÚ - VISUALIZAR UN TRIÁNGULO} Procedimiento Dibujo Declaraciones Enteras N, I, J Inicio Borrar pantalla Visualiza “**DIBUJO DE UN TRIÁNGULO**” Repetir Visualiza “Teclea un n1 entre 1 y 20 : “ Leer N Mientras (N<1) o (N>0) Para I=1 hasta N hacer Para J=1 hasta I hacer Visualiza ‘$’ Fin-Para Visualiza {salto de línea} Fin-Para Tecla Fin- Procedimiento-Dibujo {OPCIÓN TERCERA DEL MENÚ - VISUALIZAR TABLA DE MULTIPLICAR} Procedimiento TablaMult Declaraciones Enteras N, I, PRODUC Inicio Borrar pantalla Visualiza “**TABLA DE MULTIPLICAR**” Visualiza “Teclea un nº : “ Leer N Visualiza “**************************'” Para I=1 hasta 10 hacer PRODUC = I * N Visualiza N ,' * ' , I , ' = ', PRODUC Fin-Para Visualiza “*************************” Tecla Fin- Procedimiento-TablaMulti UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. Pág: 49 ALICIA RAMOS. IES ALONSO DE AVELLANEDA. 4 EJERCICIOS PROPUESTOS. 1) Escribir un programa que determine si un año leído de teclado es bisiesto. Un año es bisiesto si es múltiplo de 4 (por ejemplo 1996). Los años múltiplos de 100 no son bisiestos, salvo si ellos son también múltiplos de 400 (2000 es bisiesto, 1800 no lo es). 2) Escribir un programa que calcule la suma de los 100 primeros términos de esta serie : 1/2 + 2/22 + 3/23 + 4/24 + .... + 100/2100 . 3) Calcular el factorial de un número N leido de teclado. 4) Calcular el factorial de N números leídos de teclado. N se leerá de teclado. 5) Escribe un programa que visualize el número más grande, el más pequeño y la media de una serie de N números leídos de teclado. N se leerá al principio y debe ser > 0 para realizar el proceso. 6) Diseñar una función que calcule potencias de la forma XN y un programa que haga uso de la misma, para distintos valores X y N. X y N se leerán de teclado. N debe ser > 0 XN = X * X * X * X *..... * X N Veces 7) El valor de ex se puede aproximar por la suma : 1+ x + x2/2! + x3/3! + .... + xn/N!. Escribe un programa que tome el valor de x como entrada y visualice la suma para N = 10. 8) Programa que calcule el número de combinaciones de M elementos tomados de N en N. (M y N deben ser > 0). No existen factoriales de números negativos. El Factorial de 0 es 1. 9) Realiza un programa que imprima este rombo: ;;;;;-;;;;; ;;;;---;;;; ;;;-----;;; ;;-------;; ;---------; ----------;---------; ;;-------;; ;;;-----;;; ;;;;---;;;; ;;;;;-;;;;; Los caracteres del rombo ( ; pedirán por teclado. - ) se 10) Realizar un programa que dibuje un tablero de ajedrez. 11) Realiza un programa que escriba los N primeros números de la sucesión de Fibonacci: n 0=0 n 1=1 n 2=n 0+n 1 =1 n 3=n 1+n 2 =2 n 4=n 2+n 3 =3 n 5=n 3+n 4 =2+3=5 n 6=n 4+n 5 =3+5=8 .... UNIDAD II - METODOLOGÍA DE LA PROGRAMACIÓN. 0, 1, 1, 2, 3, 5, 8 ..... Pág: 50