21
CLASE 11 Computación 2018– FCAG-UNLP – Paula Benaglia

CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

CLASE 11

Computación 2018– FCAG-UNLP – Paula Benaglia

Page 2: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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

Page 3: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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

Page 4: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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.

Page 5: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

)

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

Page 6: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

c1) Literal, canónico:

Page 7: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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

Page 8: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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

?

Page 9: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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.

Page 10: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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)]

Page 11: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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

*

Page 12: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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

Page 13: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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

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

Page 14: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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

Page 15: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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

Page 16: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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

Page 17: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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

Page 18: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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 = …. )

Page 19: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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

Page 20: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

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

Page 21: CLASE 11 - valhalla.fcaglp.unlp.edu.arvalhalla.fcaglp.unlp.edu.ar/computacion/Teorias/Clase-11-Computaci… · Ejemplos: a) Sea un programa para llevar registro de movimientos bancarios

FIN CLASE 11