Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
De ellas, slo se abordar la descripcin de las dos primeras. 5.1.1 Diagramas de Flujo Se basan en la utilizacin de diversos smbolos para representar operaciones especficas. Se les llama diagramas de flujo porque los smbolos utilizados se conectan por medio de flechas para indicar la secuencia de operacin. La simbologa utilizada para la elaboracin de diagramas de flujo es variable y debe ajustarse a un patrn definido previamente, se muestra en la Tabla 5.1. Ejemplo 1: Calcular el salario neto de un trabajador en funcin del nmero de horas trabajadas, precio de la hora de trabajo y considerando los descuentos fijos al salario bruto en concepto de impuestos a una tasa de 20%. Solucin: El problema se puede dividir en un conjunto de pasos (contables) y secuencialmente lgicos para resolver el problema. Primero es necesario identificar las etapas del proceso y enseguida, asociarlas con smbolos de diagrama de flujo, por ejemplo: 1. Entrada de datos 2. Clculo de parmetros 3. Salida del resultado La representacin en diagrama de flujo se muestra en la figura 5.1
92
FIME
93
FIME
Ejemplo 2: Realizar un diagrama de flujo que permita mostrar en pantalla un mensaje de mayora o minora de edad segn sea el caso para un nombre especfico. Solucin: se muestra en la figura 5.2
94
FIME
Figura 5.1 Representacin en diagrama de flujo del ejemplo 1 y su cifrado en Matlab 5.1.2 Pseudocdigo Es un lenguaje de especificacin de algoritmos. El uso de tal lenguaje hace el paso de codificacin final (esto es, la traduccin a un lenguaje de programacin) relativamente fcil. El pseudocdigo naci como un lenguaje similar al ingls y era un medio representar bsicamente las estructuras de control de programacin estructurada. Se considera un primer borrador, dado que el pseudocdigo tiene que traducirse posteriormente a un lenguaje de programacin. Cabe sealar que el pseudocdigo no puede ser ejecutado por una computadora. La ventaja del pseudocdigo es que en su uso en la planificacin de un programa, el programador se puede concentrar en la lgica y en las estructuras de control y no preocuparse de las reglas de un lenguaje especfico. Es tambin fcil modificar el pseudocdigo si se descubren errores o anomalas en la lgica del programa.
95
FIME
El pseudocdigo utiliza para representar las acciones sucesivas palabras reservadas en ingls (similares a sus homnimos en los lenguajes de programacin), tales como star,begin, end, stop, if-then-else, while, repeat-until.etc
96
FIME
Secuencia
Inicio accin1 accin2 : accin n Fin
Decisin
Simple accin1 accin2 : accin n Doble accin1 accin2: en caso contrario accin1 acci2 si condicin entonces
si condicin then
Iteracin
Fija para var. Entera inicial hasta final accin1 accin2: accin n Condicional al inicio mientras condicin accin1 accin2: accin n hacer hacer
97
FIME
Condicional al final Repetir accin1 accin2: accin n Hasta que condicin
Seleccin
casos selector de valor1 : accin1 accin2 valor2 : accin1 accin n valor n : accin1 accin2 Ejercicio 3: Se requiere preguntar dos valores, y a continuacin ofrecer un men con las operaciones bsicas (+, -, *, /). Despus de presentar el resultado se ofrecer la posibilidad de una nueva operacin. Solucin: Declaracin de variables : Real : X, Y, RESPUESTA Entero : OPCION Carcter : OP Inicio Repetir escribir(Primer valor : ) leer(X) escribir(Segundo valor : ) leer(Y) escribir(1) Suma ) escribir(2) Resta ) escribir(3) Multiplicacin )
98
FIME
escribir(4) Divisin ) escribir(Qu operacin deseas realizar ? : ) leer(OPCION) casos OPCION de 1 : RESULTADO = X+Y 2 : RESULTADO = X-Y 3 : RESULTADO = X*Y 4 : si Y=0 entonces escribir( Error ) RESULTADO = 0 en caso contrario RESULTADO = X/Y escribir (Resultado : ,RESULTADO) escribir(Deseas otro clculo : [S/N] ) leer(OP) Hasta que RES = N Fin
Ejercicio 4: Preguntar un nombre y repetirse en pantalla tantas veces como se desee (preguntar cantidad de repeticiones), indicando el nmero de repeticin. Solucin: Declaracin de variables Cadena : nom entero : x, n Inicio escribir(Nombre : ) leer(nom) escribir(Cuntas veces quieres repetirlo ? : ) leer(n)
99
Las presentes notas son un resumen especial para el curso de Introduccin a Matlab, el resumen est basado fundamentalmente en el libro Fundamentos de Programacin de Luis Joyanes Aguilar, editado por McGraw Hill en 1996, pero adecuado a las necesidades del programa. 5.2.1 Introduccin a la Programacin estructurada Ante la complejidad de los programas necesarios para resolver problemas usando una computadora el estilo de escritura de los programas se vuelve una de las caractersticas ms sobresalientes en las tcnicas de programacin. La programacin modular ensear la descomposicin de un programa en mdulos ms simples de programar, y la programacin estructurada permitir la escritura de programas fciles de leer y modificar, por ejemplo la suma de dos nmeros cualesquiera, como se muestra en la figura 5.3
SX+Y
ESCRIBIR S
INICIO
La codificacin en Matlab es:
FIME y = 5 S = 8 La suma de 3 y 5 es 8
Pero un proceso puede contener decisiones, para ejecutar un conjunto de instrucciones u otro, dependiendo de la seleccin. La llamada selectiva o condicional puede ser simple o compuesta. Se usan para tomar decisiones lgicas, mediante la evaluacin de una condicin y en funcin del resultado de la misma se realiza una accin. Las estructuras de decisin se pueden anidar una dentro de otra, pero no se pueden traslapar, es decir que una estructura de decisin se puede ejecutar en el interior de otra, pero el bucle anidado debe concluir antes que el bucle que lo contiene. Las estructuras condicionales simples o selectivas son: IF, ELSE-IF WHILE y SWITCH 5.2.2 Estructuras selectivas y repetitivas IF Con la estructura IF se ejecuta una accin cuando se cumple una condicin dada, as si la condicin establecida se cumple se ejecuta una accin y si la condicin no se satisface, la accin que se ejecuta ser otra diferente por defecto. Un ejemplo de es leer un nmero y escribirlo si es positivo, como se muestra en la figura 5.4.
INICIO
ESCRIBIR N
101
FIME
Dame N: 6 N = 6 6.000000 es positivo
ELSE-IF Con la estructura ELSE - IF se ejecuta una accin cuando se cumple una condicin dada, as si la condicin establecida se cumple se ejecuta una accin y si la condicin no se satisface, la accin que se ejecuta ser otra diferente tambin preestablecida. Un ejemplo de es leer nmeros, si son positivos se suman, pero si lee un nmero que no es positivo se escribe la SUMA, como se muestra en la figura 5.5.
Enseguida se muestra el algoritmo representado en pseudocdigo: inicio 1 CONT 0, SUMA0, K, BANDERA = 0 2. SI BANDERA= 0 LEER N 3. MIENTRAS (CONT < K) SUMA SUMA + N CONT CONT +1 4. BANDERA = 1 5. ESCRIBIR (SUMA) fin La codificacin en Matlab es:
102
while bandera==0 suma=suma+contador fprintf('La suma de 0 hasta k=%d es %d',contador,suma) bandera=input('Desea hacer otro calculo? si=0, no cualquier otro') end
Que produce el siguiente resultado:
Dame el valor limite k: 6 k = 6 suma = 1 La suma de 0 hasta k=1 es 1Desea hacer otro calculo? si=0, no cualquier otro1 bandera = 1
SWITCH La estructura SWITCH tambin se llama conmutador o interruptor, y es una estructura selectiva mltiple. Basa su funcionamiento en el uso de una variable que puede tomar diversos valores a lo largo de la ejecucin del programa, permitiendo comunicar informacin de una parte a otra del programa. Esta variable puede tomar dos valores diferentes: 0 y 1, por ejemplo. En la figura 5.6 se muestra un ejemplo del uso de este tipo de estructura. El ejemplo muestra un proceso para sumar o multiplicar un nmero que se da por teclado, dependiendo de la eleccin del usuario, el nmero de entrada se guarda en las variables suma o multiplica, dependiendo de la operacin elegida. La codificacin en Matlab es:
103
FIME k=input('Dame el numero de elementos k: ') while contador<k n=input('\nDame el numero: ')
op=input('\nDame la operacion (suma o multiplica)') switch(op) case{suma} disp('\nEstoy sumando ...') suma=suma+n; contador=contador+1; case{multiplica} disp('\nEstoy multiplicando ...') multiplica=multiplica*n contador=contador+1; otherwise %condicion por defecto disp('\nNo estoy trabajando') end fprintf('\nLa suma guarda %d',suma) fprintf('\nLa multiplicacion guarda %d',multiplica) end
El resultado de la corrida es:
Dame el numero de elementos k: 3 Dame el numero: 1 Dame la operacion (suma o multiplica)'suma' op = suma \nNo estoy trabajando La suma guarda 0 La multiplicacion guarda 1 MIA Rosario Aldana Franco
104
FIME Dame el numero: 4 Dame la operacion (suma o multiplica)suma op = suma \nEstoy sumando ... La suma guarda 4 La multiplicacion guarda 1 Dame el numero: 5
Dame la operacion (suma o multiplica)multiplica op = 1 \nEstoy multiplicando ... La suma guarda 4 La multiplicacion guarda 5 INICIO
Figura 5.6 Ejemplo de uso de la estructura switch
Op
Suma Suma + n
Multiplica Multiplica * n
A 105
FIME
Estructuras repetitivas
Las computadoras estn especialmente diseadas para todas aquellas aplicaciones en las cuales una operacin o conjunto de ellas deben repetirse muchas veces, por ello las estructuras repetitivas son ampliamente utilizadas. Las estructuras repetitivas se valen de bucles o lazos, en los que una o varias acciones se repiten (iteracin) dependiendo de Qu contiene el bucle? Y Cuntas veces se debe repetir?, el bucle termina mediante la evaluacin de una condicin de parada, que se define al principio o final del bucle. Tambin las estructuras repetitivas pueden anidarse, cuidando de no traslapar la ejecucin de los bucles. Las estructuras repetitivas son: WHILE (mientras) y FOR (desde y hasta). WHILE El cuerpo del bucle se repite mientras se cumple una condicin, grficamente se muestra en la figura 5.7
condicin
no si
acciones
Pseudocdigo Mientras condicion hacer Accin S1 Accin S2 . . . Accin Sn Fin_mientras Cuando se ejecuta la instruccin mientras, se evala la condicin (expresin booleana), si se evala falsa ninguna accin se lleva a cabo y el programa prosigue en la siguiente instruccin despus del bucle, pero si la expresin booleana se evala verdadera, se ejecuta el cuerpo del bucle y al final se vuelve a evaluar la condicin de ejecucin del bucle, repitindose este proceso en tanto la expresin booleana, que constituye la condicin, sea evaluada como verdadera. Existen 4 mtodos para terminar un bucle:
106
FIME
1. 2. 3. 4.
Ejemplo Para calcular una tabla de multiplicar se pueden usar dos ciclos while anidados, como por ejemplo:
r=1; while r==1 t=input('Que tabla desea calcular?' ); li=input('Desde donde?'); ls=input('Hasta donde?'); in=input('Con que incremento?'); while li<=ls m=t*li; fprintf('El resultado de multiplicar %d por %d es %d\n',t,li,m) li=li+1; end r=input('Desea hacer otro calculo? si=1, no cualquier otro numero'); end
Que presenta los siguientes resultados:
Que tabla desea calcular? 5 Desde donde? 1 Hasta donde? 20 Con que incremento? 2 El resultado de multiplicar 5 El resultado de multiplicar 5 El resultado de multiplicar 5 El resultado de multiplicar 5 El resultado de multiplicar 5 El resultado de multiplicar 5 El resultado de multiplicar 5 El resultado de multiplicar 5 El resultado de multiplicar 5 El resultado de multiplicar 5 El resultado de multiplicar 5 El resultado de multiplicar 5 MIA Rosario Aldana Franco
por por por por por por por por por por por por
1 es 5 2 es 10 3 es 15 4 es 20 5 es 25 6 es 30 7 es 35 8 es 40 9 es 45 10 es 50 11 es 55 12 es 60 107
FIME El resultado El resultado El resultado El resultado El resultado El resultado El resultado El resultado Desea hacer
Manual bsico de MatLab de multiplicar 5 por 13 es 65 de multiplicar 5 por 14 es 70 de multiplicar 5 por 15 es 75 de multiplicar 5 por 16 es 80 de multiplicar 5 por 17 es 85 de multiplicar 5 por 18 es 90 de multiplicar 5 por 19 es 95 de multiplicar 5 por 20 es 100 otro calculo? si=1, no cualquier otro numero 3
FOR En muchas ocasiones se conoce de antemano el nmero de veces que se desean ejecutar las acciones de un bucle. Entonces cuando el nmero de iteraciones es fijo y conocido se debe usar una estructura FOR (o desde/para). La estructura FOR ejecuta las acciones del cuerpo del bucle un nmero especificado de veces y de modo automtico controla el nmero de iteraciones o pasos a travs del cuerpo del bucle. La estructura FOR comienza con un valor inicial de la variable ndice y las acciones especificadas se ejecutan a menos que el valor inicial sea mayor que el valor final. La variable ndice se incrementa o de manera constante y si este valor no excede el valor final, se ejecutan de nuevo las acciones. Por consiguiente, las acciones especficas en el bucle se ejecutan para cada valor de la variable ndice se incrementa de acuerdo a la constante definida. El incremento en la variable ndice siempre es 1 si no se indica expresamente otra cosa, esta variable es generalmente del tipo entero, positivo o negativo. En la figura 5.8 se muestra un ejemplo (sumar los primeros 100 nmeros enteros positivos) donde se usa una estructura de este tipo. El programa en Matlab sera:
108
FIME INICIO
SUMA 0 N1
Figura 5.8 Ejemplo de uso de Estructura FOR La representacin del algoritmo en seudocdigo es: inicio 1. SUMA0, N 1 2. MIENTRAS (N < = 100) SUMA SUMA + N N N +1 3. ESCRIBIR (SUMA) fin Tambin es posible sustituir una estructura FOR por una WHILE, usando incrementos o decrementos.
109
FIME
END Cuando se cumple una condicin la ejecucin del bucle termina, as como la ejecucin del programa, como se puede apreciar en el ejemplo de sumar 100 nmeros positivos, que se muestra en al figura 5.9.
INICIO
SUMA 0 K0
LEER N
inicio 1. SUMA0, K 1 2. LEER N 3. IF N < = 0 4. MIENTRAS (K < = 100) SUMA SUMA + N K K +1 5. ESCRIBIR (SUMA) FIN DE MIENTRAS FIN DE IF fin
N<=0 no
si FIN
ESCRIBIR SUMA
Figura 5.9 Ejemplo de uso de Estructura END En Matlab la estructura end forma parte de la sintaxis de las estructuras while, for e if, por lo que no es necesario implementarla en el cdigo. BREAK Cuando se cumple una condicin la ejecucin del bucle se interrumpe, y la ejecucin del programa continua despus del bucle, como se puede apreciar en el ejemplo de sumar 100 nmeros positivos, que se muestra en al figura 5.10. Las caractersticas se pueden listas como: Es un segmento de un algoritmo o programa, cuyas instrucciones se repiten un nmero determinado de veces mientras se cumple una condicin. La condicin puede ser verdadera o falsa. La condicin se prueba una vez a cada paso o iteracin del bucle.
110
FIME
5.10