Professional Documents
Culture Documents
2.- PROCEDIMIENTO:
Un bucle puede estar contenido completamente dentro de otro bucle. En este caso, se dice que ambos bucles estn anidados.
Cuando dos bucles estn anidados, el bucle interno se ejecuta completamente para cada iteracin del bucle externo. Es decir,
el ndice del bucle interno toma todos los valores posibles permitidos por su condicin de desigualdad para cada uno de los
valores posibles del ndice del bucle externo permitidos por su condicin de desigualdad.
Los bucles anidados se cierran en orden inverso a cmo se abren. As, cuando el compilador encuentra una sentencia END DO,
asocia esa sentencia con el bucle ms interno abierto.
Es conveniente asignar nombres a todos los bucles anidados para que sean ms fciles de comprender y de localizar los errores
de compilacin.
Los ndices de bucles anidados deben tener identificadores distintos.
Si aparecen sentencias CYCLE o EXIT sin nombre en bucles anidados, stas se asocian por defecto con el bucle ms interno
abierto. Para evitar asociaciones automticas no deseadas, es conveniente escribir las sentencias CYCLE o EXIT con nombre,
que ser el mismo que el dedicado al cabecero y fin del bucle involucrado.
Sintaxis general de dos bucles anidados DO general con nombre aadido y sin nombre:
[externo:] DO
bloque_de_sentencias1 DO
[IF (expresin_lgica) CYCLE [externo]] bloque_de_sentencias1
bloque_de_sentencias2 [IF (expresin_lgica) CYCLE]
IF (expresin_lgica) EXIT [externo] bloque_de_sentencias2
bloque_de_sentencias3 IF (expresin_lgica) EXIT o]
[interno:] DO bloque_de_sentencias3
bloque_de_sentencias4 [interno:] DO
[IF (expresin_lgica) CYCLE [interno]] bloque_de_sentencias4
bloque_de_sentencias5 [IF (expresin_lgica) CYCLE [interno]]
IF (expresin_lgica) EXIT [interno] bloque_de_sentencias5
bloque_de_sentencias6 IF (expresin_lgica) EXIT [interno]
END DO [interno] bloque_de_sentencias6
bloque_de_sentencias7 END DO [interno]
END DO [externo] bloque_de_sentencias7
END DO [externo]
Otras formas:
A.- Do estructurado: Cuando se conoce el numero de repeticiones de un proceso o procesos
DO indice1 = Valor_inicial_1, Valor_final_1, Paso1
DO indice2 = Valor_inicial_2, Valor_final_2, Paso2
Sentencia(s)
END DO
END DO
3.-Elaborar un programa que calcule la suma de la serie:
= para x=0.1,0.2,0.3,,1.0
!
Program ejemplo3
Implicit none 0.1000000 1.105171
Integer:: fact, n 0.2000000 1.221403
real::X, suma 0.3000000 1.349859
X=0.0 0.4000000 1.491825
Do while (X<=1.0) 0.5000000 1.648721
X=X+0.1 0.6000000 1.822119
Suma=1.0 0.7000000 2.013753
Fact=1 0.8000001 2.225541
N=1 0.9000001 2.459603
Do 1.000000 2.718282
Fact=Fact*N Press any key to continue
Suma=Suma+(x**N)/Fact
N=N+1
if (n>10) exit
end do
print*,x, suma
end do
end program ejemplo3
4.-Elabore un programa en Fortran que tabule la siguiente funcin usando sentencias Do, para controlar cualquier
( )
proceso iterativo. (, ) = , para x = 0, 1, 2, 3, 4 e y = 3, 5, 7, 9, 11 para cada valor de x,
( + )
5.-Escribir un programa para producir todos los tringulos rectngulos que tiene los tres lados de longitud enteras (y
cuyos permetros son menores que 100) adems visualice el total de triangulo.
Program ejemplo5
Integer::A, B, C, N !N variable que nos dar el total de tringulos rectngulos
Real::D
N=0
A=1
DO
B=A+1
2
DO
D=A**2+B**2
3 4 5
5 12 13
C=SQRT(D) 6 8 10
IF ((A+B+C)>100) EXIT 7 24 25
IF (C**2==A**2+B**2) THEN 8 15 17
PRINT*,A,B,C 9 12 15
N=N+1 9 40 41
10 24 26
END IF
12 16 20
B=B+1 12 35 37
IF (B>100) EXIT 15 20 25
END DO 15 36 39
A=A+1 16 30 34
IF (A>100) EXIT 18 24 30
END DO 20 21 29
PRINT*,"TOTAL DE TRIANGULOS RECTANGULOS= ", N 21 28 35
24 32 40
END PROGRAM ejemplo5
TOTAL DE TRIANGULOS RECTANGULOS= 17
Press any key to continue
6.- Calcular la siguiente funcin usando sentencias DO para controlar cualquier proceso iterativo: (, ) =
( ++ )
, para x = 3,4,5,6,7 e y=0,1,2,3,4,5 para cada valor de x.
(+)
Program ejemplo6
3.000000 0.0000000E+00 3.000000
Implicit none
3.000000 1.000000 4.750000
Real::x, y, z, fxy 3.000000 2.000000 11.00000
Integer::i,j 3.000000 4.000000 -17.00000
!Usando la sentencia Do estructurado 3.000000 5.000000 -10.75000
Do i=3,7 4.000000 0.0000000E+00 9.333333
x=i 4.000000 1.000000 14.50000
Do j=1,6 4.000000 2.000000 32.00000
4.000000 4.000000 -44.00000
y=j-1
4.000000 5.000000 -26.50000
!Asignando el valor del denominador a otra variable 6.000000 0.0000000E+00 -18.00000
z=x*y-5*y-3*x+15 6.000000 1.000000 -27.50000
if (z==0) cycle Evaluamos el denominador 6.000000 2.000000 -58.00000
fxy=(x**2+3*x+y**2)/z 6.000000 4.000000 70.00000
print*,x, y, fxy 6.000000 5.000000 39.50000
End Do 7.000000 0.0000000E+00 -11.66667
7.000000 1.000000 -17.75000
End Do
7.000000 2.000000 -37.00000
End Program ejemplo6 7.000000 4.000000 43.00000
7.000000 5.000000 23.75000
Press any key to continue
7.- Computar el nmero de puntos con coordenadas enteras contenidas dentro de la elipse: + =
Program ejemplo7
Implicit none -3.000000 -3.000000 0.0000000 1.000000
-3.000000 -2.000000 0.0000000 2.000000
Real::x,y !Coordenadas de los puntos -3.000000 -1.000000 0.0000000 3.000000
Integer::i, j, n -3.000000 0.0000000 0.0000000 4.000000
!Resolviendo la ecuacion de la elipse -3.000000 1.000000 1.000000 -4.000000
-3.000000 2.000000 1.000000 -3.000000
!observamos que x varia de -4 a 4 -3.000000 3.000000 1.000000 -2.000000
!y la ordenada y varia de -5 a 5 -2.000000 -4.000000 1.000000 -1.000000
n=0 -2.000000 -3.000000 1.000000 0.0000000
-2.000000 -2.000000 1.000000 1.000000
Do i=1,9 -2.000000 -1.000000 1.000000 2.000000
x=i-5 -2.000000 0.0000000 1.000000 3.000000
Do j=1,11 -2.000000 1.000000 1.000000 4.000000
-2.000000 2.000000 2.000000 -4.000000
y=j-6 -2.000000 3.000000 2.000000 -3.000000
if ((x**2/16.0+y**2/25.0)>=1.0) cycle -2.000000 4.000000 2.000000 -2.000000
n=n+1 -1.000000 -4.000000 2.000000 -1.000000
-1.000000 -3.000000 2.000000 0.0000000
Print*,x,y !Visualizamos las coordenadas -1.000000 -2.000000 2.000000 1.000000
End Do -1.000000 -1.000000 2.000000 2.000000
End Do -1.000000 0.0000000 2.000000 3.000000
-1.000000 1.000000 2.000000 4.000000
Print*,n !Total de puntos interiores de la elipse -1.000000 2.000000 3.000000 -3.000000
End Program ejemplo7 -1.000000 3.000000 3.000000 -2.000000
-1.000000 4.000000 3.000000 -1.000000
0.0000000 -4.000000 3.000000 0.0000000
0.0000000 -3.000000 3.000000 1.000000
0.0000000 -2.000000 3.000000 2.000000
0.0000000 -1.000000 3.000000 3.000000
0.0000000 0.0000000 59
Press any key to continue
3
PROBLEMAS DIVERSOS USANDO ESTRUCTURAS DE REPETICION
1.- Escriba un programa que permita la lectura de 6 nmeros enteros, calcule el promedio e imprima el promedio.
program promedios
Integer::I,A,S Ingrese 6 numeros enteros a promediar
Real::p 10
s=0 15
print*, "Ingrese 6 numeros enteros a promediar" 12
Do I=1,6 14
read*, a 13
s=s+a 11
End Do Promedio= 12.00000
p=s/6 Press any key to continue
print*, "Promedio= ", p
end program promedios
10. Elabore un programa que permita el ingreso de 6 nombres de personas y el sexo respectivo (.T. Para varn y .F. para mujer) y
visualice la cantidad de personas que corresponde a su respectivo sexo.
Program total
Character(len=8)::Nombre ingrese los 6 nombres con su respectivo sexo
Logical::Sexo "Maria" .F..
Integer::I "Pedro" .T.
integer::m=0, f=0 "Luis" .T.
print*, "Ingrese los 6 nombres con su respectivo sexo" "Rosa" .F.
Do i=1,6 "Juan" .T.
read*, nombre, sexo "Carlos" .T.
if(sexo) m= m+1 Total de personas de sexo masculino 4
if(.not.sexo) f=f+1 Total de personas de sexo femenino 2
End Do Press any key to continue
print*,"Total de personas de sexo masculino",m
print*,"Total de personas de sexo femenino",f
End program total
3.- Utilizando la sentencia DO, escriba un programa que imprima una tabla de cuadrados y cubos del 1 al 10 inclusive.
Program potencias
Integer::x=1, y, z NUMERO CUADRADO CUBO
Print*," NUMERO CUADRADO CUBO" 1 1 1
2 4 8
Do while(x<=10)
3 9 27
y=x**2 4 16 64
z=x**3 5 25 125
Print*,x, y, z 6 36 216
x=x+1 7 49 343
End do 8 64 512
End program potencias 9 81 729
10 100 1000
Press any key to continue
4.- Elabore un programa que utilizando la sentencia DO, imprima una tabla de cuadrados para los nmeros pares del 4 al 30, ambos
inclusive.
Program varios 4 16
6 36
Integer::x=4, y 8 64
Do 10 100
y=x**2 12 144
14 196
Print*,x,y 16 256
x=x+2 18 324
If(x>30) Exit 20 400
22 484
End do 24 576
End Program varios 26 676
28 784
30 900
Press any key to continue
5. Elaborar un programa que permita ingresar por teclado, el nombre y el turno de 10 alumnos (m=maana, t=tarde, n=noche) y luego
averiguar cuntos alumnos estudian en cada turno.
Ingrese los datos
Program N_turnos "Rosa Maria" "m"
Integer::a, b, c, i !a,b,c contabiliza el total de cada turno "Pedro Jos" "n"
Character (len=50)::nombre "Mario" "t"
"Elena" "m"
Character (len=1)::turno !m=maana, t=tarde, n=noche "Nelly" "n"
a=0; b=0; c=0 "Juan" "t"
Print*, "Ingrese los datos" "Rosario" "m"
"Carlota" "t"
Do i=1,10 "Maria Pia" "n"
Read*, nombre, turno "Saul" "m"
if(turno=="m") a=a+1 estudian en la maana: 4
estudian en la tarde: 3
estudian en la noche: 3 4
Press any key to continue
if(turno=="t") b= b+1
if(turno=="n") c=c+1
End Do
Print*,"estudian en la maana:",a
Print*,"estudian en la tarde:",b
Print*,"estudian en la noche:",c
End Program N_turnos
1 1 1 1
6.-. Escriba un programa que calcule la suma: =1+ + + +
2 3 4 50
Program suma_serie
Real::s
La suma de la serie = 4.499206
s=0
Press any key to continue
Do i=1,50
s=s + 1.0/i
End Do
Print*,"La suma de la serie = ", s
End Program suma_serie
7.- La suma de los cuadrados 1+4+9+16+25+ en cierto momento es arriba de 1000. Escriba un programa para encontrar un entero
cuyo cuadrado hace que la suma pase de 1000 y que despliegue la suma en ese momento.
Program suma_cuadrados
Integer::s, n, i la suma es: 1015
s=0 el ultimo numero es: 14
Do i=1,50 Press any key to continue
s=s+i**2
If(s>1000) then
n=i
exit
End If
End Do
print*,"la suma es:",s
print*,"el ultimo numero es:",n
End Program suma_cuadrados
1 2 3 4
8.- Elaborar un programa que calcule la suma de: = + + + +
2 22 23 24 2
Program suma
Integer::i, n Ingrese el valor de n
Real::s=0.0 30
Print*, "Ingrese el valor de n" la suma de la serie: 2.000000
Read*,n Press any key to continue
Do i=1, n
s=s+i*1.0/2**i
Ingrese el valor de n
End Do
32
Print*,"la suma de la serie: ",s
la suma de la serie: Infinity
End Program suma
Press any key to continue
9.-Elabore un programa que permita el ingreso de 5 numeros enteros positivos de tal forma que de acuerdo a la cantidad numrica
ingresada visualice si el numero es par o impar use do condicional
Program condicional
Visualizando si un numero es par o impar
Integer:: x
Ingrese un numero
print*, "Visualizando si un numero es par o impar" 10
i=0 x es par
Do Ingrese un numero
12
Print*, Ingrese un numero x es par
read*,x Ingrese un numero
if (mod(x,2)==0) print*, "x es par" 13
x es impar
if (mod(x,2) /=0) print*, "x es impar"
Ingrese un numero
i=i+1 14
If (i>=5) Exit x es par
End Do Ingrese un numero
1
End Program condicional x es impar
Press any key to continue
10.-Elaborar un programa que determine la cantidad de numeros pares e impares ingresados por teclado, el programa debe leer 6
numeros enteros positivos
Program n_pares_impares
integer::x, i, par, jimpar
i=0
jpar=0
5
jimpar=0
Do
Print*, "Ingrese un numero entero positivo"
read*,x
If (MOD(x,2)==0) Then Ingrese un numero entero positivo
jpar=jpar+1 3
Ingrese un numero entero positivo
End If
5
If (MOD(x,2)/=0) Then Ingrese un numero entero positivo
jimpar=jimpar+1 7
Endif Ingrese un numero entero positivo
i=i+1 1
If (i>=6) Exit Ingrese un numero entero positivo
End Do 2
Ingrese un numero entero positivo
Print*,"total de numero impares ingresados ",jimpar
4
Print*,"total de numero pares ingresado", jpar total de numero impares ingresados 4
End Program n_pares_impares total de numero pares ingresado 2
Press any key to continue
ESTRUCTURAS DE DATOS :
Finito: Siempre ser necesario especificar el nmero de elementos que tiene el arreglo.
Ordenado: Qu sea posible identificar el primero, segundo,..n-simo elemento del arreglo.
Homogneo: todos los elementos son del mismo tipo.
Se almacenan normalmente en posiciones contiguas de la memoria a partir de una direccin inicial.
X 1 2 3 4 N
Vector
Nombre
del Arreglo
1 2 3 4 5 n
Nora Pedro Mara Juan
Vector
Para referenciar a una celda, se usa el Nombre del arreglo y el ndice que indica su posicin relativa dentro del arreglo.
Ejemplo:
Primitivas:
o Creacin de un arreglo; normalmente todos los lenguajes poseen una instruccin que permite crear un arreglo,
en donde se indica:
- Nombre del arreglo
- Nmero de ndices
- Rango para cada ndice
o Se asume que al momento de la creacin los valores contenidos en el arreglo no estan definidos. Ejemplo
Arreglo Vector Dimension[1..20]
o La operacin de almacenamiento acepta un arreglo A un ndice i y un valor x . el resultado es que el valor x
queda almacenado en la posicin i del arreglo A
o Se realiza usando el operador de asignacin y entregando un valor que ser guardada en una posicin del
arreglo.
Ejemplo: x[10] 524, almacena el valor 524 en la posicin 10 del arreglo.
o Antes de asignar un valor a un elemento del arreglo, su valor no est definido.
o La extraccin es una funcin que acepta el nombre del arreglo A y un ndice i y retorna el valor contenido en la
posicin i del arreglo A
o Se realiza a travs de una asignacin de valores:
Ejemplo: Nueva = X[4], donde el contenido de la posicin 4 del arreglo
se extrae y se almacena en la variable Nueva
o Cuando se usan arreglos se deben tomar los siguientes cuidados:
Dar valor inicial a los elementos del arreglo.
Especificar siempre el valor del ndice
Cuidar que los ndices no tomen valores fuera de su rango.
Ejemplos:
Almacenar los nombres de los alumnos
Almacenar para cada da el total de ventas
Almacenar la temperatura ms alta/baja del da
Almacenar el men semanal (plato principal)
Almacenar el gasto diario
Para cada da del mes almacenar el da (lunes, martes, etc)
Para un da realizar levantamiento de temperatura cada hora y almacenar el valor. Determine la temperatura ms
alta y ms baja del da.
Almacenar cada alumno y su nota. Determine el nombre del alumno con la nota ms alta y la mas baja.
Igualmente determine el promedio de notas.
Sea la matriz B
B
1 2 3 4 .. N
1
2
3
.
. B(I,J)
.
M
Se puede considerar que un arreglo de dos dimensiones es un arreglo de una dimensin, en donde cada
elemento es a su vez otro arreglo.
Cada posicin en arreglo bidimensional pertenece a una fila y a una columna.
Para referenciar una posicin es un arreglo de dos dimensiones es necesario indicar adems del Nombre del
arreglo un ndice para la fila y otro para la columna.
Ejemplo: B[2,5]
PRIMITIVAS:
Creacin: se deber declarar el nombre del arreglo, y los rangos para las dos dimensiones.
Ejemplo: Arreglo B, Dimensin [1..10,1..20]
Almacenamiento se realiza asignando un valor a una determinada posicin del arreglo: B [5,8] Manuela
Es necesario tener la seguridad de que los valores usados para los ndices sean vlidos, es decir que estn entre
los valores lmites definidos para el arreglo.
7
Extraccin: Se realiza a travs del nombre del arreglo y entre parntesis el valor de los ndices, considerando que
el primero indica el nmero de fila y el segundo el nmero de columna del elemento. Ejemplo: VIEJA B[i,j]
Arreglo Multidimensional:
Plano 4
Plano 3
Plano 2
Plano 1
Fila 2
Fila 1
1 2 3 4 5 6 Columnas
Ejemplos:
Para usar un arreglo hay que declararlo en una sentencia DIMENSION, es necesario especificar:
El nombre del arreglo
El nmero de dimensiones
El rango (lmites) de cada dimensin
Sintaxis:
Ejemplo1:
Ejemplo2:
Ejemplo3
REAL A(3,3),B(3,3),C(89),R
B(2,2) = 4.5
R=7.0
C(INT( R )*2+1)=2.0 Elemento 15 de C = 2.0
A(1,2)=B(INT(C(15)),INT(SQRT(R)))
!Elemento A(1,2) = Elemento B(2,2) = 4.5
Ejemplo4
8
Plantear el pseudo cdigo para sumar dos matrices n X m
Dimension Nmat(1:10,1:20), Mmat(1:10,1:20), Nresult(1:10,1:20)
Read*, n,m
Do I = 1,n
Do J = 1,m
Nresult(I,J)=Nmat(I,J)+Nmat(I,J)
End do
End do
Expresiones Escalares:
Las expresiones pueden ser escalares o de arreglos. Son escalares si usan variables simples (no declaradas como arreglos)
Ejemplo5
Q + 2.3 + R, donde Q y R son variables simples.
Expresiones Arreglo:
Si tenemos:
DIMENSION A(10), B(10
Entonces:
A+B, C*D, son expresiones arreglo para sumar, multiplicar dos arreglos, siendo que ambos deben ser compatibles.
Si un operando es escalar, es tratado como un arreglo compatible, con cada uno de sus elementos igual al valor escalar: Ejemplo s: A+r
En este ejemplo si r es escalar su valor es sumado a cada elemento del arreglo A.
DECLARACION - Where
Ejemplo6:
El siguiente ejemplo usa dos mtodos diferentes para obtener el cuadrado de todos los elementos que son positivos:
Ejemplo7: 1
2
INTEGER, DIMENSION(100):: IN, OUT 15
DO I = 1,100 16
READ*, IN(I) 2
END DO 16
13
WHERE (IN<8)
15
OUT=0
18
ELSEWHERE
20
OUT=15 0
END WHERE 0
DO I = 1,100 15
PRINT*, OUT(I) 15
0
15
END DO
15
END
15
15
15 9
Press any key to continue
LECTURA DE ARREGLOS
10