TEMA 2 METODOLOGIA DE LA PROGRAMACION Guión • Introducción. Definición de algoritmo • Características de los algoritmos • Estructura de un algoritmo • Datos • Expresiones • Instrucciones • Pseudo código • Diagrama de flujo • Vectores y Arrays • Otras técnicas • Diagrama de caja • Tablas de decisión • Diagramas estructurados • Técnicas de programación • Introducción. Definición de algoritmo. Se define algoritmo como el conjunto ordenado y finito de operaciones que permiten hallar la solución a un problema determinado. • Características de los algoritmos. • Debe ser exacto y determinado, es decir, a entradas idénticas, salidas idénticas. • Efectivo y finito. Efectivo porque puede ser ejecutado mecánicamente. • Transportable, porque se puede ejecutar independientemente del hardware y del software utilizado. • Amigable de cara al usuario, con mensajes claros y concisos, y bien documentado. • Estructura de un algoritmo • Datos a.1. Simple. Contienen solo un dato. Tipos: a.1.1. Numérico. Un solo número. a.1.1.1. Entero a.1.1.2. Real a.1.2. No numérico a.1.2.1. Cadena a.1.2.2. Booleano (v/f) a.1.2.3. Carácter 1 a.2. Estructura de datos. Contienen más de un dato. Tipos de estructura: a.2.1. Interna a.2.1.1. Estática. Utiliza un tamaño de memoria fija. Esta puede ser: a.2.1.1.1. Vector: Conjunto finito del mismo tipo de datos. a.2.1.1.2. Tabla: Conjunto de órdenes del mismo tipo de datos en forma de matriz de dos dimensiones. a.2.1.1.3. Registros: Conjunto de datos de distintos tipos. a.2.1.1.4. Poliedro: Conjunto de datos del mismo tipo agrupados en una dimensión mayor que dos. a.2.1.2. Dinámica. Estructura de datos con tamaño no definido de memoria. Variará en función de las necesidades de los problemas. • Expresiones Conjunto formado por operandos (variables, constantes u operadores), unidos entre si mediante operadores que realizan una acción sobre ellos. V.g. SUMA = 8 + C, donde SUMA y C son variables 8 es constante = y + son operadores b.1. Constante: elemento que no varía a lo largo de la ejecución del programa. Existe la posibilidad de asignarle un nombre al principio del programa, de forma que su denominación sea lo más cómoda posible. b.2. Variable: elemento cuyo contenido puede modificarse a lo largo de la ejecución de un programa. Para definir una variable se realizan tres pasos normalmente: 1) Se define el nombre de la variable 2) Se define el tipo de datos que contendrá 3) Se define el valor inicial de la variable antes de empezar la ejecución del programa Las variables se clasifican de dos formas: 1ª− Según el tipo de datos que contengan (numérica, no numérica,..) 2ª− Según la función que vaya a realizar dentro del programa, a saber: 2 • Contadores: Añaden uno al valor de la constante cada vez que se ejecutan • Acumuladores: Acumulan cantidades. • Interruptores o switches: Permiten recorrer un cierto camino del programa b.3. Operadores. Elementos que unen los distintos tipos de operandos. Pueden ser: 1º− Aritméticos. +, −, *, /, MOD, ^, DIV 2º− Relacionales J, N, M , P , O ,MN • Instrucciones Se clasifican en: c.1. Simples. Una sola línea. Pueden ser: c.1.1. Declarativas. Hacen constar al programa una condición de un elemento (v.g. Declaro c constante) c.1.2. Primitivas, que a su vez pueden ser: c.1.2.1. De entrada, con las que el programa lee un dato (v.g. leer edad) c.1.2.2. De salida, (v.g. Escribir (edad:)).Saldría en pantalla. c.1.2.3. De asignación, asigna el valor de un operando a una variable (v.g. c = c + 1) c.1.3. De control, que puede ser: c.1.3.1. Alternativa: permite realizar una serie de condiciones u otras dependiendo si se cumple una determinada condición. Tres tipos: c.1.3.1.1. Simples: Se ejecuta un grupo de instrucciones en función de que se cumpla una determinada condición. En caso contrario el programa seguirá su curso normal. V.g.: SI (nota N 5) ESCRIBIR aprobado FIN SI c.1.3.1.2. Dobles: se ejecuta un grupo de instrucciones en caso de que se cumpla una determinada condición, pero en caso contrario se ejecuta otro grupo de instrucciones. V.g.: SI (nota N 5) ESCRIBIR aprobado SI NO 3 ESCRIBIR 5 c.1.3.1.3. Múltiples: se utilizan en los casos en los que la ejecución de un grupo de instrucciones dependa de unos valores contenidos en una variable. V.g.: EN CASO DE (variable) Valor 1 Instrucción 1 Valor 2 Instrucción 2 Valor 3 Instrucción 3 c.1.3.2. Repetitivas: instrucciones que se repiten un número finito de veces en función de una condición que se verá afectada en cada ciclo o bucle. Son las que siguen: c.1.3.2.1. MIENTRAS: se ejecuta un número finito de veces un grupo de instrucciones mientras ocurre una determinada condición. V.g.: MIENTRAS (condición) Instrucciones FIN MIENTRAS Esta instrucción tiene la particularidad de que la instrucción o grupo de instrucciones que está vinculadas a ella puede que no se ejecuten al menos una vez. c.1.3.2.2. REPETIRHASTA: se ejecuta un número finito de veces un grupo de instrucciones hasta que se cumpla una determinada condición. V.g.: REPETIR Instrucción HASTA (condición) Esta instrucción tiene la particularidad de que el grupo de instrucciones se va a ejecutar al menos una vez. c.1.3.2.3. PARA: Se utiliza cuando sabemos exactamente el número de veces que se va a ejecutar un bloque de instrucciones. V.g.: PARA variable de valor inicial A final HACER instrucciones 4 FIN PARA c.1.4. Comentarios: Instrucciones que nos dan información sobre un bloque del código, pero que no se compilan. c.2. Instrucciones compuestas. Formadas por un grupo de instrucciones que se agrupan en lo que se conoce como un módulo (procedimiento o función). • Pseudo código Se define como una notación o algoritmo mediante la cual podemos escribir la solución de un problema, utilizando palabras y frases del lenguaje natural, sujeto a unas determinadas reglas. Estructura: PROGRAMA: Nombre del programa. ENTORNO: Declaración del tipo de datos. ALGORITMO: Secuencias de instrucciones. FIN DEL ALGORITMO. En un pseudo código se utilizan las siguientes instrucciones: • Instrucciones simples primitivas: a.1. SALIDA ESCRIBIR Nombre _ variable: ESCRIBIR nombre _ constante ESCRIBIR expresión a.2.ENTRADA LEER nombre _ variable a.3. ASIGNACION nombre_ variable_ destino = ó ! nombre_ variable nombre_ variable_ destino = ó ! nombre_ constante nombre_ variable_ destino = ó ! expresión • Instrucciones simples de control: b.1. ALTERNATIVAS b.1.1. ALTERNATIVA SIMPLE 5 SI condición ENTONCES Instrucción 1 Instrucción 2 Instrucción n FIN SI b.1.2. ALTERNATIVA DOBLE SI condición ENTONCES Instrucción 1 Instrucción 2 Instrucción n SI NO Instrucción 1 Instrucción 2 Instrucción n FIN SI B.1.3. ALTERNATIVA MULTIPLE EN CASO DE (variable) Valor 1: Instrucción 1 Instrucción 2 Instrucción n Valor 2: Instrucción 1 Instrucción 2 Instrucción n EN OTRO CASO Instrucción 1 Instrucción 2 6 Instrucción n FIN b.2. REPETITIVAS b.2.1.MIENTRAS MIENTRAS (condición) HACER Instrucción 1 Instrucción 2 . Instrucción n FIN MIENTRAS b.2.2. REPETIR REPETIR Instrucción 1 Instrucción 2 . Instrucción n HASTA (condición) b.2.3. PARA PARA variable valor_ inicial A valor_ final [INCREMENTO] HACER Instrucción 1 Instrucción 2 . Instrucción n FIN PARA * [ ] Las cosas entre corchetes implican que son opcionales. En este caso, si no se pusiera el valor del incremento, por defecto sería uno. EJERCICIOS 7 1−Realizar el pseudo código de un programa que permita calcular el área de un rectángulo. Se deberá introducir la base y la altura para poder realizar el cálculo. PROGRAMA: AREA DE RECTANGULO ENTRONO: DECLARO base de tipo real DECLARO altura de tipo real DECLARO área de tipo real ALGORITMO: ESCRIBIR Introduce base: LEER base ESCRIBIR introduce altura LEER altura área = base * altura ESCRIBIR El área es:, área FIN ALGORITMO 2−Realizar el pseudo código que representa un algoritmo que reciba como dato de entrada el valor de una temperatura expresada en grados centígrados y nos calcule y escriba sus equivalentes en grados kelvin. PROGRAMA: TEMPERATURA EN GRADOS KELVIN ENTORNO: DECLARO cent, kelvin base de tipo real ALGORITMO: ESCRIBIR Introduce temperatura en grados centígrados: LEER cent kelvin = 273 + cent ESCRIBIR La temperatura en grados kelvin es:, kelvin, ºK FIN ALGORITMO 3−Realizar el pseudo código que permita al usuario introducir por el teclado dos notas, calculando la suma y el producto de las notas, para posteriormente calcular datos estadísticos. 8 PROGRAMA: DATOS ESTADISTICOS ENTORNO: DECLARO nota 1,nota 2, suma, producto base de tipo real ALGORITMO: ESCRIBIR Introduce nota 1: LEER nota 1 ESCRIBIR Introduce nota 2: LEER nota 2 suma = nota 1 + nota 2 producto = nota 1* nota 2 FIN ALGORITMO Ó PROGRAMA: DATOS ESTADISTICOS ENTORNO: DECLARO OPCION producto base de tipo caracter ALGORITMO: ESCRIBIR Introduce nota 1: LEER nota 1 ESCRIBIR Introduce nota 2: LEER nota 2 suma = nota 1 + nota 2 producto = nota 1* nota 2 ESCRIBIR Pulse la tecla S para suma y P para producto LEER opción SI (opción = `S') ENTONCES ESCRIBIR La suma es:, suma 9 SI NO SI (opción = `P') ENTONCES ESCRIBIR El producto es:, producto SI NO ESCRIBIR Tecla incorrecta FIN SI FIN SI FIN ALGORITMO * Nota: Una letra entre comilla simple (`') corresponde a una tecla. Ó PROGRAMA: DATOS ESTADISTICOS ENTORNO: DECLARO OPCION producto base de tipo caracter ALGORITMO: ESCRIBIR Introduce nota 1: LEER nota 1 ESCRIBIR Introduce nota 2: LEER nota 2 suma = nota 1 + nota 2 producto = nota 1* nota 2 ESCRIBIR Pulse la tecla S para suma y P para producto LEER opción EN CASO DE (opción) CASO `S' ESCRIBIR La suma es:, suma CASO `P' 10 ESCRIBIR El producto es:. producto EN OTRO CASO ESCIBIR Tecla incorrecta FIN FIN ALGORITMO 5−Realizar un pseudo código que permita saber si un número es mayor, menor o igual que cero. PROGRAMA: IDENTIFICAR CERO ENTORNO: DECLARO num de tipo real ALGORITMO: ESCRIBIR Introduce un número: LEER num SI (num = 0) ENTONCES ESCRIBIR El número es igual a cero SI NO SI (num > 0) ENTONCES ESCRIBIR El número es mayor que cero SI NO ESCRIBIR El número es menor que cero FIN SI FIN SI FIN ALGORITMO Ó PROGRAMA: IDENTIFICAR CERO ENTORNO: DECLARO num, control de tipo real 11 ALGORITMO: ESCRIBIR Introduce un número: LEER num SI (num = 0) ENTONCES control = 1 FIN SI SI (num >0) ENTONCES control = 2 FIN SI SI (num <0) ENTONCES control = 3 FIN SI EN CASO DE (control) CASO 1: ESCRIBIR El número es igual a cero CASO 2: ESCRIBIR El número es mayor que cero CASO 3: ESCRIBIR El número es menor que cero EN OTRO CASO ESCRIBIR Tecla incorrecta FIN CASO FIN ALGORITMO 6−Realizar un pseudo código para obtener el factorial de un número. PROGRAMA: FACTORIAL ENTORNO: DECLARO num, fac., cont de tipo real 12 ALGORITMO: ESCRIBIR Introduce un número: LEER num fac. = 1 cont = 1 REPETIR fac. = fac. * cont cont = cont + 1 HASTA (cont > num) ESCRIBIR EL factorial es:, fac FIN ALGORITMO Ó PROGRAMA: FACTORIAL ENTRONO: DECLARO num, fact, de tipo entero ALGORITMO: ESCRIBIR: Introduce número: LEER num fact = 1 MIENTRAS (num <> 0) HACER fact = fact * num num = num − 1 FIN MIENTRAS ESCRIBIR El factorial es:, fact FIN ALGORITMO 7−Realizar un pseudo código que permita visualizar un mensaje dependiendo de la tecla que pulsemos: MENU PRINCIPAL 13 • PROCESADOR DE TEXTO • HOJA DE CALCULO • BASE DE DATOS Introduzca una opción: PROGRAMA: MENU DE SELECCIÓN ENTORNO: DECALRO opción de tipo entero ALGORITMO REPETIR ESCRIBIR MENU PRINCIPAL ESCRIBIR 1. PROCESADOR DE TEXO ESCRIBIR 2. HOJA DE CALCULO ESCRIBIR 3. BASE DE DATOS ESCRIBIR 4. SALIR ESCRIBIR Introduzca opción: LEER opción EN CASO DE (opción) CASO 1 ESCRIBIR PROCESADOR DE TEXTO CASO 2 ESCRIBIR HOJA DE CALCULO CASO 3 ESCRIBIR BASE DE DATOS CASO 4 SALIR EN OTRO CASO ESCRIBIR ERROR FIN CASO HASTA (opción = 4) FIN ALGORITMO Ó 14 PROGRAMA: MENU DE SELECCIÓN ENTORNO: DECALRO opción de tipo entero ALGORITMO opción = 0 MIENTRAS (opción ¡= 4) ESCRIBIR MENU PRINCIPAL ESCRIBIR 1. PROCESADOR DE TEXO ESCRIBIR 2. HOJA DE CALCULO ESCRIBIR 3. BASE DE DATOS ESCRIBIR 4. SALIR ESCRIBIR Introduzca opción: LEER opción EN CASO DE (opción) CASO 1 ESCRIBIR PROCESADOR DE TEXTO CASO 2 ESCRIBIR HOJA DE CALCULO CASO 3 ESCRIBIR BASE DE DATOS CASO 4 SALIR EN OTRO CASO ESCRIBIR ERROR FIN CASO FIN MIENTRAS FIN ALGORITMO 5. Diagrama de flujo Es una herramienta de la que dispone el analista para representar de forma clara y visual la secuencia de ejecución de un programa, así como el flujo de datos. Dependiendo de la fase de análisis en la que nos encontremos, el diagrama de flujo representará con más o 15 menos detalle la secuencia de acciones y elementos que intervienen. Hay por tanto dos tipos: 5.1. Diagrama de sistema (organigrama) Se representa en su parte central el programa o proceso que se describe. Este proceso estará rodeado en su parte superior por los soportes de entrada, y en la inferior por los de salida. A los lados puede tener soportes de entrada y de salida indistintamente. Algunos ejemplos de representación de elementos: ENTRADA SALIDA ENTRADA / SALIDA 5.2. Ordinograma. También llamados diagramas de flujo de programa, representan con mucho más detalle la secuencia de acciones a realizar con los datos. Sus características son las que siguen: • Se debe representar el inicio y el final del programa, y además deben ser únicos. • El flujo del programa debe ir de arriba hacia abajo y de izquierda a derecha. • Se deberá guardar, en la medida de lo posible, simetría en la representación. • Las líneas que se usen deben ser rectas. • No se deben interceptar las líneas de flujo. Cuando tengan que cruzarse se usaran conectores. Los símbolos característicos de los diagramas de flujo son: El tipo de diagrama aplicado a las distintas instrucciones tendría las siguientes formas: * ALTERNATIVA SIMPLE * ALTERNATIVA DOBLE * ALTERNATIVA MULTIPLE * REPETITIVA MIENTRAS * REPETITIVA REPETIR HASTA * REPETIRIVA PARA EJERCICIOS 8−Realizar un pseudo código y diagrama de flujo para obtener las notas de 50 alumnos y el número de aprobados. PROGRAMA: RELACION DE ALUMNOS APROBADOS ENTORNO: DECLARO alumno, aprobado de tipo entero 16 DECLARO nota de tipo real ALGORITMO: alumno = 0 aprobado = 0 MIENTRAS (alumno < 50) HACER ESCRIBIR Introduce la nota del alumno, alumno LEER nota SI (nota>= 5) ENTONCES aprobado = aprobado + 1 FIN SI alumno = alumno + 1 FIN MIENTRAS ESCRIBIR El número de aprobados es:, aprobado, alumnos FIN ALGORITMO Ó PROGRAMA: RELACION DE ALUMNOS APROBADOS ENTORNO: DECLARO alumno, aprobado de tipo entero DECLARO nota de tipo real ALGORITMO: aprobado = 0 alumno = 0 PARA alumno de 0 HASTA 49 HACER ESCRIBIR Introduce la nota del alumno, alumno LEER nota SI (nota>= 5) ENTONCES 17 aprobado = aprobado + 1 FIN SI FIN PARA ESCRIBIR El número de aprobados es:, aprobado, alumnos FIN ALGORITMO Ó PROGRAMA: RELACION DE ALUMNOS APROBADOS ENTORNO: DECLARO alumno, aprobado de tipo entero DECLARO nota de tipo real ALGORITMO: aprobado = 0 alumno = 0 REPETIR ESCRIBIR Introduce la nota del alumno, alumno LEER nota SI (nota>= 5) ENTONCES aprobado = aprobado + 1 FIN SI alumno = alumno +1 HASTA (alumno > 49) ESCRIBIR El número de aprobados es:, aprobado, alumnos FIN ALGORITMO 9. Realizar el pseudo código que permita obtener la suma y el producto de los 350 primeros números enteros. PROGRAMA: SUMA Y PRODUCTO DE LOS 350 PRIMEROS ENTORNO: 18 DECLARO suma, producto, i de tipo entero ALGORITMO: suma ! 0 producto ! 1 PARA i = 1 HASTA i = 350 HACER suma = suma + i producto = producto * i FIN PARA ESCRIBIR La suma de los números es:, suma ESCRIBIR El producto de los números es:, producto FIN ALGORITMO Ó PROGRAMA: SUMA Y PRODUCTO DE LOS 350 PRIMEROS ENTORNO: DECLARO suma, producto, i de tipo entero ALGORITMO: suma ! 0 producto ! 1 i! 1 MIENTRAS (i <= 350) suma! suma + i producto! producto +i i=i+1 FIN MIENTRAS ESCRIBIR La suma de los números es:, suma ESCRIBIR El producto de los números es:, producto 19 FIN ALGORITMO El diagrama de flujo es idéntico al del bucle PARA Ó PROGRAMA: SUMA Y PRODUCTO DE LOS 350 PRIMEROS ENTORNO: DECLARO suma, producto, i de tipo entero ALGORITMO: suma ! 0 producto ! 1 i! 1 REPETIR suma! suma + i producto! producto * i i! i + 1 HASTA (i > 350) ESCRIBIR La suma de los números es:, suma ESCRIBIR El producto de los números es:, producto 11. Realizar tres versiones de un pseudo código que describa la suma de los números pares comprendidos entre 2 y 200 PROGRAMA: SUMA DE PARES ENTRE 2 Y 200 ENTORNO: DECLARO suma, i de tipo entero ALGORITMO: suma ! 0 PARA i = 0 HASTA i =200 [INCREMENTO 2] HACER suma! suma + i FIN PARA 20 ESCRIBIR La suma de los pares es:, suma FIN ALGORITMO Ó PROGRAMA: SUMA DE PARES ENTRE 2 Y 200 ENTORNO: DECLARO suma, i de tipo entero ALGORITMO: suma ! 0 i! 0 MIENTRAS (i<= 200) HACER suma! suma + i i! i + 2 FIN MIENTRAS ESCRIBIR La suma de los pares es:, suma FIN ALGORITMO Ó PROGRAMA: SUMA DE PARES ENTRE 2 Y 200 ENTORNO: DECLARO suma, i de tipo entero ALGORITMO: suma ! 0 i! 0 REPETIR suma! suma + i i! i + 2 HASTA (i > 200) 21 ESCRIBIR La suma de los pares es:, suma FIN ALGORITMO 12. Realizar un pseudo código que dados dos números correspondientes a la base y al exponente, calcule la potencia asociada. PROGRAMA: POTENCIA ENTORNO: DECLARO base, exponente de tipo entero ALGORITMO: ESCRIBIR Introduce la base: LEER base ESCRIBIR Introduce el exponente: LEER exponente SI exponente = 0 HACER resultado! 1 SI NO exponente! 1 REPETIR resultado! base* resultado exponente! exponente − 1 HASTA (exponente = 0) FIN SI FIN ALGORITMO 14. Realizar un pseudo código que lea N números enteros introducidos por teclado e imprima: la suma de los pares, la cantidad de números pares y la media de los impares. PROGRAMA: CLASIFICACION DE NUMEROS ENTEROS ENTORNO: DECLARO N, num, suma _ pares, pares, suma_ impares de tipo entero 22 ALGORITMO: ESCRIBIR Cuantos números vas a introducir: LEER N num ! 0 suma _ pares ! 0 suma _ impares ! 0 PARA i = 1 HASTA i = N ESCRIBIR Introduce número, N, : LEER num SI (num MOD 2 = 0) ENTONCES suma _ pares ! suma _ pares + num num ! num + 1 SI NO suma _ impares ! suma- _ impares + num FIN SI FIN PARA ESCRIBIR La suma de los pares es:, suma _ pares ESCRIBIR El número de pares es:, pares ESCRIBIR La media de los impares es:, suma _ impares / (N − pares) FIN ALGORITMO EN LO SUCESIVO, LOS PROBLEMAS ESTARAN REFERIDOS A LA HOJA DE PROBLEMAS NUMERO 2. 1. Una empresa desea saber qué cantidad de dinero debe pagar a sus empleados, a los cuales paga a final de semana. La hora de trabajo es pagada a 594 pts. y a 1188 pts. todas aquellas horas que superen las 40 semanales. Haga un algoritmo en el que introduciendo el número de horas trabajadas por un empleado en una semana, nos diga cuál es su sueldo. PROGRAMA: SALARIOS ENTORNO: 23 DECLARO horas, extra, salario de tipo real ALGORITMO: ESCRIBIR Introduzca el número de horas trabajadas: LEER horas extra ! 0 SI (horas > 40) ENTONCES extra ! horas − 40 salario ! extra * 1188 + 40 * 594 ESCRIBIR El salario a pagar es:, salario SI NO salario ! horas * 594 ESCRIBIR El salario a pagar es:, salario FIN SI FIN ALGORITMO 2. Diseña un algoritmo que visualice en pantalla la tabla de multiplicar del 1 al 10 PROGRAMA: TABLA DE MULTIPLICAR DEL 1 AL 10 ENTORNO: DECLARO a, b de tipo entero ALGORITMO: PARA a = 1 HASTA a = 10 HACER ESCRIBIR Tabla del, a, : PARA b = 1 HASTA b = 10 HACER ESCRIBIR a * b =, a * b FIN PARA FIN PARA FIN ALGORITMO 24 Ó PROGRAMA: TABLA DE MULTIPLICAR ENTORNO: DECLARO a, b, de tipo entero ALGORITMO: a!1 b!1 MIENTRAS (a<=10) HACER ESCRIBIR La tabla del , a, es: MIENTRAS (b<= 10) HACER ESCRIBIR a, *, b, =, a * b b! b + 1 FIN MIENTRAS a!a+1 FIN MIENTRAS FIN ALGORITMO Ó PROGRAMA: TABLA DE MULTIPLICAR ENTORNO: DECLARO a, b, de tipo entero ALGORITMO: a! 1 b! 1 REPETIR ESCRIBIR La tabla del, a; es: REPETIR 25 ESCRIBIR a, *, b, =, a * b b!b+1 HASTA (b>10) a!a+1 HASTA (a>10) FIN ALGORITMO 3. Diseña un algoritmo en el que, dados dos números introducidos por el teclado, visualice los números comprendidos entre ambos (sin incluir los extremos), calcule la suma de los números pares e impares comprendidos entre ambos y los cuente. PROGRAMA: PROBLEMA 3 ENTORNO: DECLARO num1, num2, intervalo, suma _ pares, suma _ impares de tipo entero ALGORITMO: ESCRIBIR Introduce número menor: LEER num1 ESCRIBIR Introduce número mayor LEER num2 SI (num2 > num1) ENTONCES pares ! 0 suma _ pares ! 0 impares ! 0 suma _ impares ! 0 PARA (intervalo = num2 − 1) HASTA (intervalo = num1 +1) HACER ESCRIBIR intervalo SI (intervalo MOD 2 = 0) ENTONCES pares ! pares + 1 suma _ pares ! suma _ pares + intervalo 26 SI NO impares ! impares + 1 suma _ impares ! suma _ impares + intervalo FIN PARA FIN SI ESCRIBIR Los números comprendidos entre ambos son:, intervalo ESCRIBIR El número de pares es:, pares ESCRIBIR El número de impares es:, impares ESCRIBIR La suma de los pares es:, suma _ pares ESCRIBIR La suma de los impares es:, suma _ impares FIN ALGORITMO 6. Vectores y Arrays Son dos tipos de estructuras, de las llamadas estructuras estáticas lineales. El carácter de estática se lo da el hecho de que una vez introducidos los datos (cargados), no varían de forma o de posición, salvo que una nueva instrucción o bucle lo impongan. 6.1 Vectores Son estructuras estáticas de una dimensión. Se definen de la forma siguiente: nombre _ vector [dimensión] La dimensión determina el número de elementos que posee el vector. V.g.: DECLARO tabla [15] de tipo entero Sería un vector llamado tabla, que contiene 15 elementos. Por lo general, los vectores deben cargarse en algún momento del programa. Para ello, se suele utilizar un índice, que indicará la posición dentro del vector. Un bucle del tipo PARA es el más usado. V.g.: PARA i = 1 HASTA i = 15 ESCRIBIR Introduce elemento i, : LEER tabla [i] 27 FIN PARA 6.2 Arrays (matrices) Son estructuras estáticas de dos dimensiones. Se definen de la forma siguiente: nombre _ array [fila] [columna] V.g.: DECLARO array [15] [20] de tipo entero Sería una matriz llamada array, que contiene 15 filas y 20 columnas. Por lo general, las matrices deben cargarse en algún momento del programa. Para ello, se suelen utilizar dos índices, que indicarán las posiciones dentro de la matriz. Un bucle del tipo PARA es el más usado. V.g.: PARA i = 1 HASTA i = 15 PARA j = 1 HASTA j = 20 ESCRIBIR Introduce elemento i, ,, j, : LEER array [i] [j] FIN PARA FIN PARA EJERCICIOS 4. Cree Una tabla de 10 elementos. Se pide: − Contar los elementos positivos, negativos, ceros y visualizar el resultado − Visualizar los elementos, sus cuadrados y sus cubos − Contar y visualizar los elementos pares y los impares PROGRAMA: TABLA 10 Y OTROS ENTORNO: DECLARO tabla [10], i, positivos, negativos, ceros, pares, impares de tipo entero ALGORITMO: PARA i = 1 HASTA i = 10 HACER ESCRIBIR Introduce el valor, i, : 28 LEER tabla [i] FIN PARA ceros ! 0 positivo ! 0 negativo ! 0 PARA i = 1 HASTA i = 10 HACER SI (tabla [i] = 0) ENTONCES ceros ! ceros + 1 SI NO SI (tabla[i] > 0) ENTONCES positivo ! positivo + 1 SI NO negativo ! negativo + 1 FIN SI FIN SI FIN PARA ESCRIBIR La tabla tiene , positivos, elementos positivos ESCRIBIR La tabla tienen, negativos, elementos negativos ESCRIBIR La tabla tiene, ceros, elementos de valor cero PARA i =1 HASTA i = 10 HACER ESCRIBIR tabla[i] ESCRIBIR tabla [i] ^2 ESCRIBIR tabla [i] ^3 FIN PARA pares ! 0 impares ! 0 29 PARA i = 1 HASTA i = 10 HACER SI (tabla [i] MOD 2 = 0) ENTONCES ESCRIBIR Los pares son: ESCRIBIR tabla [i] pares ! pares + 1 SI NO ESCRIBIR Los impares son: ESCRIBIR tabla [i] impares ! impares + 1 FIN SI ESCRIBIR El número de elementos pares es:, pares ESCRIBIR El número de elementos impares es:, impares FIN PARA FIN ALGORITMO 5. Cree una tabla de 20 elementos. Se pide: − Cargar los elementos positivos sobre otra tabla, y los negativos sobre otra diferente. − Una vez cargadas las tablas anteriores, se desea saber cuál es el mayor de los positivos, el mayor de los negativos, y el índice que ocupa en cada tabla (ojo: no los estamos ordenando). PROGRAMA: PROBLEMA 5 ENTORNO: DECLARO principal [20], positiva [20], negativa [20] de tipo entero DECLARO i, j, k, mayor _ p, mayor _ n, de tipo entero ALGORITMO: PARA i = 1 HASTA i = 20 HACER ESCRIBIR Introduce elemento, i, : LEER principal [i] FIN PARA 30 j!0 k!0 PARA i = 1 HASTA i = 20 HACER SI principal [i] >= 0 ENTONCES positiva [j] = principal [i] j!j+1 SI NO negativa [k] ! principal [i] k!k+1 FIN SI mayor _ p ! positiva [1] PARA i = 1 HASTA i = 20 HACER SI positiva [i] > mayor _ p ENTONCES mayor _ p ! positiva [j] j!i FIN SI FIN PARA mayor _ n ! negativa [1] PARA i = 1 HASTA i = 20 HACER SI negativa [i] > mayor _ n ENTONCES mayor _ n ! negativa [k] k!i FIN SI FIN PARA ESCRIBIR El mayor de los positivos es el número, mayor _ p, y se encuentra en la posición, j ESCRIBIR El mayor de los negativos es el número, mayor _ n, y se encuentra en la posición, k 31 FIN ALGORITMO 6. Genere una tabla de 5 filas y ocho columnas, de forma que las filas pares se llenen de unos y las impares de ceros PROGRAMA: MATRIZ 5X8 ENTORNO: DECLARO i, j de tipo entero DECLARO tabla [5] [8] de tipo entero ALGORITMO: PARA i = 1 HASTA i = 5 HACER PARA j = 1 HASTA j = 8 HACER SI (i MOD 2 = 0) ENTONCES tabla [i] [j] ! 1 SI NO tabla [i] [j] ! 0 FIN SI FIN PARA FIN PARA FIN ALGORITMO 7. Rellene la matriz de la siguiente forma: 111111 232323 111111 232323 Hacer también el diagrama de flujo. PROGRAMA: MATRIZ PROBLEMA 7 ENTORNO: DECLARO i, j, tabla [4] [6] 32 ALGORITMO: PARA i = 1 HASTA i = 4 HACER PARA j = 1 HASTA j = 6 HACER SI (i MOD 2 = 1) ENTONCES tabla [i] [j] ! 1 SI NO SI (j MOD 2 = 0) ENTONCES tabla [i] [j] ! 3 SI NO tabla [i] [j] ! 2 FIN SI FIN SI FIN PARA FIN PARA FIN ALGORITMO 8. Crear una tabla de 4x6 de forma que calculemos la suma de cada fila y se visualice el resultado. Ídem para las columnas. PROGRAMA: TABLA 4X6 PROBLEMA 8 ENTORNO: DECLARO i, j, tabla [4] [6], suma _ fila, suma _ columna de tipo entero ALGORITMO: PARA i = 1 HASTA i = 4 HACER PARA j = 1 HASTA j = 6 HACER ESCRIBIR Introduce valor (, i, ,, j ): LEER tabla [i] [j] FIN PARA FIN PARA 33 PARA i = 1 HASTA i = 4 HACER suma _ fila ! 0 PARA j = 1 HASTA j = 6 HACER suma _ fila ! suma _ fila + tabla [i] [j] FIN PARA ESCRIBIR La suma de la fila, i, es:, suma _ fila FIN PARA PARA j = 1 HASTA j = 6 HACER suma _ columna ! 0 PARA i = 1 HASTA i = 4 HACER suma _ columna ! suma _ columna + tabla [i] [j] FIN PARA ESCRIBIR La suma de la columna , j, es:, suma _ columna FIN PARA FIN ALGORITMO 9. Cargar una matriz en memoria de 6x10 de forma que cada elemento de la tabla sea la suma de su posición en la fila y de su posición en la columna, para posteriormente visualizarla. PROGRAMA: MATRIZ 6X10 PROBLEMA 9 ENTORNO: DECLARO i, j, tabla [i] [j], de tipo entero ALGORITMO: PARA i = 1 HASTA i = 6 HACER PARA j = 1 HASTA j = 10 HACER tabla [i] [j] ! i + j ESCRIBIR El valor (, i, j, ) de la tabla es, tabla [i] [j] FIN PARA FIN PARA 34 FIN ALGORITMO 10. Cargar dos vectores (A y B) numéricos de 25 componentes cada uno. Visualizar los elementos comunes a los dos vectores, así como sus posiciones. PROGRAMA: PROBLEMA 10 ENTORNO: DECLARO A[25], B[25], i, j de tipo entero ALGORITMO: PARA i = 1 HASTA i = 25 HACER ESCRIBIR Introduzca elemento, i, del vector A[25] LEER A[i] ESCRIBIR Introduzca elemento, i, del vector B[25] LEER B[i] FIN PARA PARA i = 1 HASTA i = 25 HACER PARA j = 1 HASTA j = 25 HACER SI (A[i] = B[j]) ENTONCES ESCRIBIR Elemento coincidente: A[i] ESCRIBIR En la posición, i, j, respectivamente FIN SI FIN PARA FIN PARA FIN ALGORITMO 11. Realizar un programa que genere una tabla de 10x5 componentes enteras, de forma que el valor de los elementos de cada columna sean respectivamente tablas de multiplicar de los números 1, 3, 5, 7, 9. Visualizar la tabla. PROGRAMA: PROBLEMA 11 ENTORNO: DECLARO tabla[10] [5], i, j, de tipo entero ALGORITMO: PARA i = 1 HASTA i = 10 HACER 35 PARA j = 1 HASTA j = 5 HACER tabla [i] + [j] ! i * (j * 2 − 1) ESCRIBIR tabla [i] [j] FIN PARA FIN PARA FIN ALGORITMO 12. Cargar Un vector V de 18 componentes numéricas enteras. Crear a partir de él un vector Q, de modo que las componentes pares de V pasen a ser las impares de Q, y las impares de V sean las pares de Q. PROGRAMA: PROBLEMA 12 ENTORNO: DECLARO V[18],Q[18], i, de tipo entero ALGORITMO: PARA i = 1 HASTA i = 18 HACER ESCRIBIR Introduce elemento de posición, i, : LEER V[i] FIN PARA PARA i = 1 HASTA i = 18 HACER SI (i MOD2 = 0) ENTONCES Q[i − 1] = V[i] SI NO Q[i + 1] = V[i] FIN SI FIN PARA FIN ALGORITMO 13. Crear una tabla A de 10x5. Se desea crear a partir de ella una tabla B, de tal forma que la primera fila de B sea la última de A, la segunda fila de B sea la penúltima de A, y así sucesivamente hasta que la última fila de B sea la primera de A. PROGRAMA: PROBLEMA 13 ENTORNO: DECLARO A[10][5], B[10][5], i, j, de tipo entero 36 ALGORITMO: i! 1 MIENTRAS (i<10) j! 1 MIENTRAS (j<5) ESCRIBIR Introduce elemento, i, j, : LEER A[i][j] B[11 − i][j] ! A[i][j] j! j + 1 FIN MIENTRAS i!i+1 FIN MIENTRAS FIN ALGORITMO 14. Cargar un vector de 20 componentes numéricos. Se pide: − Calcular e imprimir el mayor valor, la última posición que ocupa y el número de veces que se repite − Desplazar todas las componentes del vector un lugar a la izquierda; la primera pasará a la última posición − Escribir la suma de los números que sean pares y que se encuentren en posiciones impares ¿Cuántos valores cumplen estas condiciones. PROGRAMA: PROBLEMA 14 ENTORNO: DECLARO Vector[20], i, aux, repv, suma, de tipo entero ALGORITMO: PARA i = 1 HASTA i = 20 HACER ESCRIBIR Introduce elemento de posición, i, : LEER Vector[i] FIN PARA mayor ! Vector [1] posición ! 1 37 repv ! 0 PARA i = 2 HASTA i = 20 HACER SI (Vector [i] > mayor) ENTONCES mayor ! Vector[i] posición ! i repv ! 0 FIN SI SI (Vector[i] = mayor) ENTONCES repv ! repv + 1 posición ! i FIN SI FIN PARA ESCRIBIR El valor mayor es:, mayor, y se repite, repv, veces, siendo la última posición la número, posición aux ! Vector[1] PARA i = 1 HASTA i = 20 HACER Vector[i] = Vector[i+1] FIN PARA Vector[20] ! aux suma ! 0 PARA i = 1 HASTA i = 19 [INCREMENTO 2] SI (Vector[i]MOD2 = 0) ENTONCES suma ! suma + Vector [i] FIN SI FIN PARA FIN ALGORITMO • Otras técnicas. • Diagrama de caja N−S (Nassi−Schneiderman) 38 Se basan en la representación de las distintas instrucciones utilizando cajas. La simbología es: ♦ Alternativas • Simple • Doble • Variable ♦ Repetitivas • Mientras • Repetir • Tablas de decisión Es una herramienta basada en la construcción de una tabla en la que se recojan las condiciones que pueden dar el problema y las acciones que se deben tomar cuando se cumplan las condiciones. • Diagramas estructurados • Técnicas de programación Existen tres tipos: • Técnica convencional Fueron el comienzo de la programación, pero con el desarrollo de la tecnología, presentaba muchos inconvenientes. Para superar estos inconvenientes, se desarrollaron las IPT (Técnicas para a mejora de la programación), dando como resultado las técnicas estructurada y modular. • Programación estructurada Deben cumplir las siguientes condiciones: • Debe ser un código comprensible sin necesidad de información adicional • Se puedan cambiar partes del programa sin que afecten al resto • El programa se implementa con partes fácilmente ensamblables Lo que diferencia a la programación estructurada de otra que no lo sea, son una serie de reglas que contienen los siguientes elementos: • Razonamiento deductivo (proceso descendente). Se define como el proceso mediante el cual un programa se resuelve en una serie de niveles de de arriba abajo, realizando refinamientos sucesivos (top−down). Adquiere una estructura jerárquica. • Recursos abstractos. La traducción de las ideas a las instrucciones no es directa. Para facilitar la utilización de los recursos abstractos se divide el problema en partes más pequeñas, lo que simplifica la concepción del mismo. • Estructuras básicas. Se basa en el teorema de la estructura, que dice que:cualquier programa con un punto de entrada, sin bucles infinitos, puede describirse utilizando solamente las estructuras de control alternativa, repetitiva y/o secuencial (primitiva). 39 • Programación modular Consiste en la descomposición del problema en trozos denominados módulos, cada uno de los cuales realiza una tarea concreta. Presentan la siguiente estructura: un módulo principal desde el que se llamará al resto de los módulos, devolviendo el control al módulo principal cuando finalice. La mayoría de los lenguajes de programación ponen a disposición del usuario mecanismos para usar la modularidad: en C las funciones, en BASIC las subrutinas, en PASCAL los procedimientos y funciones, en MODULA2 los módulos, etc. Existen dos tipos de módulos o subprogramas: ♦ Funciones Módulos que, recibiendo uno o varios datos de entrada, devuelven un único valor a la salida. No se permiten funciones que no devuelvan nada. La estructura es la que sigue: TIPO _FUNCION NOMBRE _FUNCION (tipo _nombre parámetro _formal1, tipo _nombre parámetro _formal2, ) INSTRUCCIONES DEVOLVER RESULTADO FIN DE FUNCION V.g: int suma (int num1, int num2) { int resultado resultado = num1 + num2 return resultado } ♦ Procedimientos Son módulos que tienen las siguientes diferencias con respecto a la función: • Puede devolver más de un valor • Pueden no devolver ningún valor • Al llamar al procedimiento no hay que hacerlo desde una expresión. Se utiliza como una instrucción concreta En la programación modular, hay que hacer referencia al concepto de AMBITO DE UN IDENTIFICADOR (o variable), que se define como la parte del programa donde puede ser utilizado porque se conoce su existencia. Atendiendo al ámbito, las variables se pueden clasificar en: 40 ♦ Locales Se definen dentro de un módulo, no pudiendo acceder a ella desde fuera de éste. Incluso se puede definir una variable con el mismo nombre fuera del módulo. Se crean en la llamada a la función y se destruyen cuando finaliza la ejecución. ♦ Globales Están definidas en el programa principal. Se puede acceder a ellas desde todos los módulos. En caso de que se declarase una variable local y global con el mismo nombre se accedería a la local por defecto, es decir, se accede siempre al ámbito más restringido. A continuación, se van a realizar una serie de clasificaciones de los parámetros formales, atendiendo a distintos criterios: a) Según sea su función − Parámetros de entrada: introducen datos del módulo. No modifican su valor. Lo utilizan las funciones. − Parámetros de salida: devuelven valores al exterior del módulo. − Parámetros de entrada/salida: introducen información al módulo y extraen información al exterior. El valor de entrada es distinto al de salida. b) Según se almacenen físicamente: − Paso de parámetro por copia: al realizar la llamada se copia el valor del parámetro real al formal, y pueden ocurrir los siguientes casos: − Por valor. Una vez que sea copiado el parámetro real al formal, al término de la ejecución del módulo, no se hace el inverso, es decir, no se copia el valor del parámetro formal a real (no se modifica el parámetro real). Es el que utilizan las funciones. − Por valor resultado. Al final de la ejecución se hace el inverso, es decir, se copia el valor del parámetro formal a real, variando su contenido. − Paso de parámetro por referencia: El parámetro real y formal tienen asociadas la misma dirección de memoria. Cuando se hace una llamada, la dirección de memoria del parámetro real se copia en el parámetro formal. Por tanto en la ejecución del módulo, al cambiar el contenido del parámetro formal se está cambiando el contenido del parámetro real. Es el método más utilizado con los procedimientos. ENTRADA / SALIDA ENTRADA / SALIDA SALIDA PROGRAMA ENTRADA TECLADO 41 GENERICO IMPRESORA PANTALLA DISQUETE DISCO DURO PROCESO ENTRADA / SALIDA INICIO / FIN NO SI SI NO N 3 2 1 SI NO SI NO INICIALIZAR CONDIC. INSTRUCCION CAMBIAR CONTADOR NO SI 42 FIN ESCRIBIR El.. es:, aprobado alumno = alumno + 1 aprobado =aprobado + 1 nota>=5 LEER nota ESCRIBIR Introduce alumno, alumno alumno<50 alumno =0 aprobado = 0 INI−CIO NO SI SI NO NO SI SI NO FIN ESCRIBIR El número de alumnos aprobados es:, aprobado aprobado = aprobado + 1 alumno = alumno + 1 nota>=5 LEER nota ESCRIBIR Introduce la nota del alumno, alumno 43 alumno<=49 alumno =0 aprobado = 0 INICIO NO SI SI NO FIN ESCRIBIR El número de alumnos aprobados es:, aprobado alumno = alumno + 1 aprobado =aprobado + 1 nota>=5 LEER nota ESCRIBIR Introduce la nota del alumno, alumno alumno = 49 alumno =0 aprobado = 0 INICIO INICIO i! 1 suma! 0 producto! 1 num<=350 suma!suma+i producto!producto*i 44 i!i+1 ESCRIBIR La suma e:, suma ESCRIBIR El producto es:, producto FIN NO SI INICIO i! 1 suma! 0 producto! 1 num>350 suma!suma+i producto!producto*i i!i+1 ESCRIBIR La suma e:, suma ESCRIBIR El producto es:, producto FIN NO SI INICIO ESCRIBIR Introduce base: LEER base ESCRIBIR Introduce exp: LEER exponente exponente =0 resultado! 1 45 resultado! resultado * base exponente! exponente − 1 exponente = 0 ESCRIBIR El resultado es 1 ESCRIBIR El resultado es:, resultado SI NO SI NO INICIO i!1 i <= 4 i!1 j<6 i MOD2 = 1 tabla [i] [j] = 2 tabla [i] [j] = 1 tabla [i] [j] = 3 j!j+1 i!i+1 FIN j MOD2 = 0 INICIO i!1 i < = 25 ESCRIBIR Introduzca elemento, i, del vector A[25] 46 LEER A[i] ESCRIBIR Introduzca elemento, i, del vector B[25] LEER B[i] i!i+1 SI NO i!1 i<=25 j!1 j<=25 A[i] = B[j] ESCRIBIR j!j+1 i!i+1 SI FIN NO NO SI SI NO INICIO i! 1 i<=18 ESCRIBIR LEER 47 i! i + 1 i!1 i <= 18 Q[i−1]=V[i] Q[i+1]=V[i] i! i+1 imod2=0 FIN INICIO i!1 i<= 10 j! 1 j<= 5 ESCRIBIR LEER B[11−i][j] ! A[i][j] j! j + 1 i! i + 1 FIN NO SI NO SI SI NO NO 48 SI NO SI CONDICION SI INSTRUCCIONES NO SI CONDICION INSTR.1 INSTR.2 VARIABLE VALOR1 VALOR2 ENOTROCASO INSTR.1 INSTR. 2 INSTR. N CONDICION INSTRUCCIONES INSTRUCCION CODICION 49