clase 10 -...

21
CLASE 10 Computación 2016– FCAG-UNLP – Paula Benaglia

Upload: others

Post on 22-Jul-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

CLASE 10

Computación 2016– FCAG-UNLP – Paula Benaglia

Page 2: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

Existe una sentencia específica para preguntar sobre el valor de verdad de una expresión lógica. Se denomina sentencia IF. Tiene dos formas más usadas:

Sentencia IF

IF lógico (o de una sentencia) IF en bloque

Page 3: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

IF lógico

Forma general: IF (<expresión lógica>) sentencia ejecutable

if (x.ne.0) z = 1 / x

if (preg.eq.’n’) stop

if (x.gt.0.or.y.lt.0) write ‘Caso 3’

Page 4: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

IF en bloque Sirve para ejecutar varias acciones, si una expresión lógica es verdadera. Forma general:

IF (<expresión lógica [es V]>) THEN -------- -------- ENDIF

El programa encuentra la sentencia IF, y evalúa el valor de verdad de la expresión lógica. Si este valor es verdadero, entonces ejecutará las sentencias interiores al bloque IF. Si es falso, saltará a la sentencia siguiente al ENDIF.

Page 5: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

IF en bloque If (discri.ge.0) then if (a.ne.0) then x1 = -b +…. z = b / a x2 = -b -.... q = 1 / a / a endif endif

¿ Y si a= 0 ? à cartel; ¿dos Ifs? Podemos agregarle otra opción, con la sentencia ELSE. Si la expresión lógica es V, se ejecutan las sentencias entre el IF y el ELSE, y luego la sentencia siguiente al ENDIF. Si es F, se ejecutan las sentencias entre el ELSE y el ENDIF, y luego se ejecuta la sentencia siguiente al ENDIF.

….. If (<expr. lóg.>) then x1 = … x2 = .... else write(*,*) ‘ Sin raíces reales’ endif .....

Page 6: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

IF en bloque Más decisiones: con la sentencia ELSEIF

….... if (<expr. lóg. 1> then ----- elseif (<expr. lóg. 2> then ------ ------ else ------ endif ….....

elseif (<expr. lóg. 3> then

Page 7: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

Ejemplos • Calcular el número de día del año, dependiendo del mes

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

Page 8: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

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 9: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

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 10: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

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 11: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

• Supongamos querer construir un programa y que corra tantas veces como se quiera, sin volver a llamarlo

character preg preg = ‘S’ do while (preg.eq.’S’) …. write(*,*)’ Continúa? (S o N): ‘ read(*,*) preg enddo stop ‘ Programa terminado –’ end

Page 12: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

Ejemplos ….. character sname*15 real x(1000) write(*,*) ‘ Archivo de lectura: ‘ read(*,*) sname open(1, file=sname, status=‘old’, access=‘append’) sum = 0. do i = 1, 1000 read(1,’(F7.2)’) (x(i), i=1,1000)

read(1,’(F7.2)’) x(i) do i=1, 1000 sum = sum + x(i) sum = sum + x(i)

enddo enddo ......

Page 13: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

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 14: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

Program matris 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 15: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

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 16: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

u  Encontrar la de máximo valor entre las componentes de un vector T(n)

real t(100)

real maximo maximo = t(1) do i= 2, 100 maximo = max( t(i), maximo )

enddo

write(*,*) ‘ El máximo es: ‘, maximo end

u  ¿Y si se quiere también identificar el elemento ?

Page 17: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

u  Ordenar los elementos de un vector de menor a mayor

v1 v2 v3 … V:

program orden v(i) parameter (n = 33) v(j) real v(n) do i =1, …..... ?

.... aux

Page 18: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

u  Ordenar los elementos de un vector de menor a mayor

parameter (n = 33) real v(n) do i =1, n-1 do j= i+1, n

if (v(j) .ge. V(i) then aux = v(i) v(i) = v(j) v(j) = aux endif enddo enddo end

Page 19: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

u  Ejemplo de función intrínseca INDEX character*20 deletr deletr = ‘birlibirloque’ k = index (deletr, ‘bir’) write (*,*) k

Problema: Escribir las líneas de código Fortran de un programa que permita contar la cantidad de consonantes de una palabra.

Page 20: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

Problema: Construir un código que permita resolver sistemas de n ecuaciones (triangulares) con n incógnitas de las formas:

Page 21: CLASE 10 - carina.fcaglp.unlp.edu.arcarina.fcaglp.unlp.edu.ar/~rodolfo/Teorias/Clase-10-Computacion.pdf · Existe una sentencia específica para preguntar sobre el valor de verdad

FIN CLASE 10