clase 10 -...

Post on 22-Jul-2020

3 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

CLASE 10

Computación 2016– FCAG-UNLP – Paula Benaglia

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

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’

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.

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 .....

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

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

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

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

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

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

• 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

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 ......

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

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

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 ?

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

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

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.

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

FIN CLASE 10

top related