Ciclos Loops Repeticiones Permiten ejecutar una secuencia de

  • Slides: 16
Download presentation
Ciclos (Loops, Repeticiones) Permiten ejecutar una secuencia de sentencias mas de una vez. Hay

Ciclos (Loops, Repeticiones) Permiten ejecutar una secuencia de sentencias mas de una vez. Hay 2 tipos de loops: ØWHILE repite la acción un número indefinido de veces hasta que se cumpla una condición determinada Ø ITERACTIVE repite la acción un número indefinido de veces conocido antes que las repeticiones comiencen WHILE Repite un bloque de sentencias hasta que se cumple una determinada condición. DO Sentencia 1 ……… IF(exp_logica) EXIT ……. . END DO

Sentencia 1 Sentencia i Exp. lógica EXIT falso Sentencia j Sentencia l El bloque

Sentencia 1 Sentencia i Exp. lógica EXIT falso Sentencia j Sentencia l El bloque de sentencias entre DO y END DO se ejecuta hasta que la expresión lógica resulta verdad y sale del ciclo y ejecuta la sentencia inmediatamente siguiente al END DO. Cada ciclo while debe tener un solo EXIT

Calcular la media y la desviación estándar de unas serie de T (K). El

Calcular la media y la desviación estándar de unas serie de T (K). El fin de archivo está indicado con un valor negativo. 1 Problema Calcular la media y la desviación estándar de una serie de la cual desconocemos el número de datos, pero sabemos que el fin de archivo viene marcado por un número negativo. 2 Entradas y Salidas Entrada: número desconocido de datos reales. Salida: media, desviación estándar número de datos. Diseño del algoritmo Leer, contar y acumular los datos de entrada de dos formas x y x 2 Imprimir los resultados

comenzar Leo T si T<o no N =N+1 s. T= s. T+T s. T

comenzar Leo T si T<o no N =N+1 s. T= s. T+T s. T 2=s. T 2+ T 2 Aplico ec 1 y ec 2 imprimo fin

4 En lenguaje FORTRAN PROGRAM media_dstand ! Propósito: Calcular la media y la desviación

4 En lenguaje FORTRAN PROGRAM media_dstand ! Propósito: Calcular la media y la desviación estándar de una serie de datos positivos que finaliza con un valor negativo ! IMPLICIT NONE ! Diccionario INTEGER : : n=0 ! Número de datos REAL : : T ! Datos REAL : : s. T = 0 ! Suma los datos REAL : : s. T 2 = 0 ! Suma los datos elevados al cuadrado REAL : : Tm =0 ! Valor medio REAL : : DS=0 ! desviación estándar ! DO ! Ciclo leo el próximo numero WRITE(*, *) “Entre el dato” READ(*, *) T WRITE(*, *) “ el dato es: ”, T ! Pregunto si es negativo para saber si es el ultimo IF(T<0. ) EXIT ! Acumulo los valores n=n+1 s. T = s. T+ T s. T 2= s. T 2 + T**2

! Calculo la media y la desviación estándar Tm=s. T/real(n) DS=sqrt( (real(n)* s. T

! Calculo la media y la desviación estándar Tm=s. T/real(n) DS=sqrt( (real(n)* s. T 2 - s. T**2)/(real(n)*real(n-1))) ! Write (*, *) “la media de la serie es: ”, Tm Write (*, *) “la desviación estándar de la serie es: ”, DS Write (*, *) “el número de datos de la serie es: ”, n ! END PROGRAM media_dstand 5 Verificación (prueba de escritorio) Si realizamos las cuentas para 3 valores 3, 4 y 5 Xm = 4 S=1 Introducir estos valores en la computadora y compara con los calculados previamente

DO WHILE DO while ( exp_logica) Sentencia 1 Sentencia 2 …… Sentencia n END

DO WHILE DO while ( exp_logica) Sentencia 1 Sentencia 2 …… Sentencia n END DO Si la sentencia es lógica es verdad se ejecutan las sentencias 1 a n. Si es falsa se ejecuta la primer sentencia debajo del END DO La principal diferencia con el ciclo WHILE es que la salida puede estar en cualquier lugar del ciclo. LOOP ITERATIVO El DO ITERATIVO ejecute un bloque de sentencias un numero especificado de veces. DO indice= icomienzo, ifin, incremento Sentencia 1 Sentencia 2 CUERPO …… Sentencia n END DO

Índice→ es una variable entera usada como contador Icomienzo, ifin e incremento → parámetros

Índice→ es una variable entera usada como contador Icomienzo, ifin e incremento → parámetros enteros usados por el contador. Incremento es opcional y si no se lo pone se supone que es 1 ØNO SE PUEDE MODIFICAR EL INDICE DENTRO DEL CUERPO DEL DO ØSe pueden realizar DO contadores descendentes Ej DO i=10, 1, -1 …………. END DO Ø Es posible incluir IF dentro del cuerpo del DO Ej DO i=1, 10, 1 ………… IF(ipo>=5) EXIT …………. END DO WRITE (*, *) i Ø En muchas computadoras cuando el DO se completa el valor del índice queda indefinido. Sin embargo en otras adquiere el ifin + 1

CYCLE y EXIT Si CYCLE se ejecuta en el cuerpo de un DO la

CYCLE y EXIT Si CYCLE se ejecuta en el cuerpo de un DO la ejecución de esa iteración se interrumpe y regresa a la principio de cuerpo del DO con el valor siguiente del índice. Ej PROGRAM ver_CYCLE DO i=1, 5 IF(i==3) CYCLE WRITE(*, *) i END DO WRITE(*, *) “Fin del ciclo” END PROGRAM ver_CYCLE La impresión es la siguiente: 1 2 4 5 Fin del ciclo

Si EXIT se ejecuta en el cuerpo de un DO, la ejecución de esa

Si EXIT se ejecuta en el cuerpo de un DO, la ejecución de esa iteración se interrumpe y ejecuta la primer sentencia despues del END DO. Ej PROGRAM ver_EXIT DO i=1, 5 IF(i==3) EXIT WRITE(*, *) i END DO WRITE(*, *) “Fin del ciclo” END PROGRAM ver_EXIT La impresión es la siguiente: 1 2 Fin del ciclo

Nombre de los Ciclos [nombre: ] DO sentencia 1 sentencia 2 … IF(logical_exp 1)

Nombre de los Ciclos [nombre: ] DO sentencia 1 sentencia 2 … IF(logical_exp 1) CYCLE [nombre] sentencia 3 sentencia 4 … IF(logical_exp 2) EXIT [nombre] sentencia 5 sentencia 6 … END DO [nombre]

Ciclos anidados PROGRAM DO_anidado INTEGER : : i, j, producto DO i= 1, 3

Ciclos anidados PROGRAM DO_anidado INTEGER : : i, j, producto DO i= 1, 3 DO j=1, 3 producto=i*j WRITE(*, *) i, ”*”, j, “=“, producto END DO END PROGRAM DO_anidado La impresión es la siguiente: 1*1=1 1*2=2 1*3=3 2*1=2 2*2=4 2*3=6 3*1=3 3*2=6 3*3=9

DO E IF ANIDADOS Es posible anidar un DO dentro de un bloque IF

DO E IF ANIDADOS Es posible anidar un DO dentro de un bloque IF o viceversa. PERO si el DO esta contenido en el IF debe estar totalmente contenido enteramente en una opción del IF ERROR Externo: IF(a<b) THEN …… Interno: DO I=1, 3 ………. ELSE. . . END DO Interno ……. END IF Externo CORRECTO Externo: IF(a<b) THEN …… Interno: DO I=1, 3 ………. END DO Interno. . . ELSE ……. END IF Externo

ASIGNACIONES CHARACTER Una expresión character puede ser asignada a una variable character Con una

ASIGNACIONES CHARACTER Una expresión character puede ser asignada a una variable character Con una sentencia de asignación. Si la expresión es mas corta que la longitud de la variable character a la que fue asignada entonces la variable será completada con espacios en blanco (b) CHARACTER (len=3) long = ‘p’ La variable long almacenará fbb Cuando la expresión es mas larga que la longitud asignada a la variable character entonces se descartara el excedente. CHARACTER (len=3) long 2 = ‘pepe’ La variable long 2 almacenara pep

“SUBTEXTOS” Para seleccionar una porción de una variable character y tratar la porción como

“SUBTEXTOS” Para seleccionar una porción de una variable character y tratar la porción como si fuera independiente. Si var tiene una longitud de 6 caracteres ‘abcdef’ podemos utilizar solo un parte var(2: 4), hacemos referencia las posiciones 2 a 4 de var es decir ‘bcd’. ¿Cuál será el contenido de las variables a b c cuando se ejecute el siguiente programa? ØLínea 3: se le asignan a a=‘ABCDEFGHIJ’ y solamente tiene 8 lugares por lo tanto a=‘ABCDEFGH’ ØLínea 4: b=‘ 12345678’ ØLínea 5: c=a(5: 7) ⇨ c= ‘EFGbbbbb’ ØLínea 6: b(7: 8)=a(2: 6) ⇨ b=‘ 123456 BC'

OPERADOR DE CONCATENACIÓN (//) Es posible combinar dos o mas textos (concatenación) esto se

OPERADOR DE CONCATENACIÓN (//) Es posible combinar dos o mas textos (concatenación) esto se realiza usando / / ( doble barra co un espacio entre ambas) C= ‘ABC 45 FGH’