CLASE 11 -...

Preview:

Citation preview

CLASE 11

Computación 2018– FCAG-UNLP – Paula Benaglia

Bloque IFMás decisiones: con la sentencia ELSEIF

…....

if (<expr. lógica 1>) then

-----

elseif (<expr. lógica 2>) then

------

------

else

------

endif

….....

elseif (<expr. lógica 3>) then

Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios. Se registra cuántas transacciones produjeron un crédito (variable credit), y cuántas un débito (variable debito). Se guarda la información por producto (crédito o débito) en una variable transc. Si se acreditó saldo, entonces transc ≥ 0. Si se debitó, entonces transc < 0.

….. if (transc .ge. 0.0) then credit = credit + 1 else debito = debito + 1endif…..

0 transc

Ejemplos. a)

….. if (transc .ge. 0.0) then credit = credit + 1 else debito = debito + 1endif…..

0 transc

debi

tos

cred

itos

Sea un programa para llevar registro de movimientos bancarios. Se registra cuántas transacciones produjeron un crédito (variable credit), y cuántas un débito (variable debito). Se guarda la información por producto (crédito o débito) en una variable transc. Si se acreditó saldo, entonces transc ≥ 0. Si se debitó, entonces transc < 0.

)

b) Sea un programa para etiquetar el rango etario del usuario:

program edades integer edad write (*,*) ‘ Por favor ingrese su edad:’ read (*,*) edad if (edad .le. 10) then write(*,*) ‘Ud está en la niñez’ else if (edad .gt. 10 .and. edad .lt. 50) then write(*,*) ‘Ud está en tramo complicado’ else write(*,*) ‘Ud debería tener elementos para disfrutar de la vida’endifend

(0 10 50

c1) Literal, canónico:

Literal, sin else: (¿por qué?)c2)

if (x .gt. 0.) then write(*,*) ‘x es positivo’ y = sqrt(x) else if (x .lt. 0.) then write(*,*) ‘x es negativo’ y = sqrt(-x) else if (x .eq. 0.) write(*,*) ‘x es cero’ y = 0.endifwrite(*,*) y

Literal, con bloque if dentro de bloque if:c3)

if (x .gt. 0.) then if (x .ge. y) then write(*,*) ‘x es positivo, x >= y’ else write(*,*) ‘x es positivo pero x < y’ endif else if (x .lt. 0.) then write(*,*) ‘x es negativo’else write(*,*) ‘x es cero’endif

?

d) Programa clasificador de raíces de la ecuación de 2do grado (ax2 + bx +c =0)

if (a .ne. 0.) then disc = b**2 – 4 * a * c if (disc .gt. 0.0) then write(*,*) ‘ Las raices son reales y distintas’ else if (disc .lt. 0.) then write(*,*) ‘ Las raices son complejos conjugados’ else write(*,*) ‘Las raices son reales e identicas’ endif else write(*,*) ‘ La ecuacion no es cuadratica’ endif

Supongamos que a, b, y c tienen valores asignados.

e) Sobre años bisiestosSi se quiere testear si un año ingresado es bisiesto o no:

integer anio.....if (mod(anio, 400) .eq. 0) then write(*,*) anio, ‘ es un año bisiesto’else if (mod(anio, 100) .eq. 0) then write(*,*) anio, ‘ no es un año bisiesto’else if (mod(anio, 4) .eq. 0) then write(*,*) anio, ‘ es un año bisiesto’else write(*,*) anio, ‘ no es un año bisiesto’endif.....

Funcion intrínseca mod(argumento1, argumento2) da el resto de dividir: argumento1 / argumento2

[años bisiestos: divisibles por 4, menos los divisibles por 100 (excepto los divisibles por 400)]

f) Cálculo de días de mes

if (mes .eq. ‘ABRIL’ . or. mes .eq. ‘JUNIO’ .or. mes .eq. ‘SEPTIEMBRE’ .or. mes .eq. ‘NOVIEMBRE’) then ndias = 30 elseif (mes. eq. ‘FEBRERO’) then ndias = 28else ndias = 31endif

*

f) Cálculo de días de mes

if (mes .eq. ‘ABRIL’ .or. mes .eq. ‘JUNIO’ .or. mes .eq. ‘SEPTIEMBRE’ .or. mes .eq. ‘NOVIEMBRE’) then ndias = 30 elseif (mes. eq. ‘FEBRERO’) then ndias = 28endif

*

ndias = 31

Más ejemplos• Calcular el número de día del año, dependiendo del mes

y día-del-mes que se ingrese.

Sentencia go to (en desuso)• Supongamos querer construir un programa y que corra

tantas veces como se quiera, sin volver a llamarlo

character preg

preg = ‘S’

10 if (preg.eq.’S’) then

….

write(*,*)’ Continúa? (S o N): ‘

read(*,*) preg

goto 10

else

stop ‘ Programa terminado –’

endif

end

Sentencia goto (en desuso)• Supongamos querer construir un programa y que corra

tantas veces como se quiera, sin volver a llamarlo

character preg

preg = ‘S’

10 if (preg.eq.’S’) then

….

write(*,*)’ Continúa? (S o N): ‘

read(*,*) preg

goto 10

else

stop ‘ Programa terminado –’

endif

end

IF aritmético (en desuso)

Forma general:

if (<expresión aritmética EA>) n1, n2, n3

n1: etiqueta de sentencia a la que va el programa si EA < 0

n2: etiqueta de sentencia a la que va el programa si EA = 0

n3: etiqueta de sentencia a la que va el programa si EA > 0

IF aritmético (en desuso)discri = b**2 – 4 * a * c

if (discri) 50, 60, 70

[ sentencias de cálculo de raíces complejas]

[ sentencias de cálculo de raíz real doble ]

[ sentencias de cálculo de raíces reales ]

write (*,*) < resultados >

50

60

70

go to 1000

go to 1000

1000

Con matrices

Escribir un código para realizar operaciones con matrices (suma, multiplicación por un escalar, trasposición y producto) de acuerdo a opción ingresada por el usuario.

Sean A(n x m), B(n x m), C(m x l) y k

• Suma: A + B = D; dij = aij + bij

• Multiplicación por escalar: k . A = kA; kaij = k . aij

• Trasposición: At = AT; atij = aji

• Producto: A . C = E; eij = ??

(obtener el elemento genérico cij = …. )

program matrop

parameter (n=5, m=4, l=6)

real A(n,m), B(n,m), C(m,l) , … , ...

write(*,*) ‘ Programa para realizar operaciones con matrices’

write(*,*) ‘ 0 : Terminar’

write(*,*) ’ 1 : Suma de dos matrices’

write(*,*) ’ 2 : Trasposición’

write(*,*) ’ 3 : Multiplicación de matriz por escalar’

write(*,*) ‘ 4 : Producto de dos matrices’

iopcion=0

dowhile (iopcion.ge.0.and.iopcion.le.4)

write(*,*) ‘ Ingrese opcion (0 a 4)’

read(*,*) iopcion

If (iopcion.eq.1) then

[ Lectura de elementos de A y B ]

do i= 1, n

do j= 1, m

d(i,j) = a(i,j) + b(i,j)

enddo

enddo

elseif (iopcion.eq.2) then

[ Lectura de elementos de A ]

do i= 1, n

do j=1, m

ta (j,i) = a (i,j)

enddo

enddo

elseif (iopcion.eq.3) then

[ Lectura de A y k ]

….... ka(i,j) = k * a(i,j)

elseif(iopcion.eq.4) then

[ Lectura de elementos de A y C ]

do i= 1, n

do k= 1, l

e(i,k) = 0.

do j = 1, m

e(i,k) = e(i,k) + a(i,j) * c(j,k)

enddo

enddo

enddo

else

stop ‘ Programa terminado –’

endif

enddo

write(*,*) ‘ Opción inválida.’

end

FIN CLASE 11

Recommended