Sei sulla pagina 1di 5

1.- Se requiere obtener la suma de las cantidades contenidas en un arreglo de 10 elementos.

Program array1
integer,dimension(10)::x
integer::i,suma
suma=0
Print*,"Ingrese 10 valores"
Do i=1,10
read*,x(i)
suma=suma+x(i)
end do
Print*,"La suma = ",suma
end program array1

2.- Se tienen los nombres de los N alumnos de una escuela, adems de su promedio general. Realice un
algoritmo para capturar esta informacin, la cual se debe almacenar en arreglos, un vector para el nombre y
otro para el promedio, despus de capturar la informacin se debe ordenar con base en su promedio, de
mayor a menor, los nombres deben corresponder con los promedios.
program array2
real,dimension(100)::pro
character(len=12),dimension(100)::nombre
integer::i,j,n
real::pa !variable auxiliar
character(len=12)::na !variable auxiliar
Print*,"Ingrese cantidad de alumnos de la escuela"
read*,n
Print*,"Ingrese el nombre y su nota promedio"
do i=1,n
read*,nombre(i),pro(i)
end do
!ordenando en base a su promedio
do i=1,n !Desde I = 1 hasta I = A
do j=1,n !Desde J = 1 hasta J = A
if (pro(i)>pro(j)) then !Si P [J] > P [I]
!Entonces
pa=pro(i) !Hacer PA = P [I]
na=nombre(i) !Hacer NA = N [I]
pro(i)=pro(j) !Hacer P [I] = P [J]
nombre(i)=nombre(j) !Hacer N [I] = N [J]
pro(j)=pa !Hacer P [J] = PA
nombre(j)=na !Hacer N [J] = NA
end if !Fin compara
end do !Fin desde
end do !Fin desde
!mostrando los vectores ordenados
do i=1,n !Desde I = 1 hasta I = A
print*, nombre(i),pro(i) !Escribir N [I], P [I]
end do !Fin desde
end program array2

3.- Cierta empresa requiere controlar la existencia de diez productos, los cuales se almacenan en un vector
A, mientras que los pedidos de los clientes de estos productos se almacenan en un vector B. Se requiere
generar un tercer vector C con base en los anteriores que represente lo que se requiere comprar para
mantener el stock de inventario, para esto se considera lo siguiente:
si los valores correspondientes de los vectores A y B son iguales se almacena el mismo valor de A, si el valor
de B es mayor que el de A se almacena el doble de la diferencia entre B y A, si se da el caso de que A es
mayor que B, se almacena B, que indica lo que se requiere comprar para mantener el stock de inventario.
Realice el programa
Program array3
integer,dimension(:),allocatable::A,B,C
integer::i,n
print*,"Ingrese cantidad de productos"
read*,n
allocate(A(n),B(n),C(n))
Print*,"Ingrese cantidad de existencia y pedidos"
Do i=1,n
Read*,A(i),B(i)
End Do
!proceso de calculo
Do i=1,n
if (A(i)==B(i)) then
C(i)=A(i)
elseif (A(i)<B(i)) then
C(i)=2*(B(i)-A(i))
elseif (A(i)>B(i)) then
C(i)=B(i)
end if
End Do
!Mostrando los vectores de Productos Pedidos y Stock
print 10
10 format(3x,"CANTIDAD",5X,"CANTIDAD",7X,"STOCK",/,3X,"PRODUCTOS", &
& 5X,"PEDIDOS")
DO i=1,n
print 11,A(i),B(i),C(i)
End Do
11 format(3x,I5,8x,I5,8x,I5)
End program array3

4.- Realice un algoritmo que lea un vector de seis elementos e intercambie las posiciones de sus elementos,
de tal forma que el primer elemento pase a ser el ltimo y el ltimo el primero, el segundo el penltimo y as
sucesivamente, e imprima ese vector.
Program array4
integer,dimension(6)::V
integer::aux
integer::i,j
Print*,"Ingrese 6 valores"
Do i=1,6
read*,V(i)
End Do
j=0
Do i=1,3
aux=v(i)
V(i)=V(6-j)
V(6-j)=AUx
J=j+1
End do

Do i=1,6
print*,V(i)
End Do
End Program array4

5. Programa que pida al usuario por teclado el nmero de filas y columnas de dos matrices A y B (iguales
para ambas) y sus componentes. Dimensiona dinmicamente las matrices. A continuacin, el programa
presentara estas opciones:
1. Mostrar por monitor la matriz A
2. Mostrar por monitor la matriz B
3. Mostrar por monitor la transpuesta de la matriz A
4. Mostrar por monitor la transpuesta de la matriz A
5. Salir
Program array5
Integer,dimension(:,:),allocatable::A,B
Integer,dimension(:,:),allocatable::At,Bt
!Integer,dimension(:,:),allocatable::As,Bs
Integer::i,j
Integer::m,n,opcion
Character(Len=1)::op
Print*,"Ingrese valores a m(filas)y n(columnas)"
Print*,"Preferencia matrices cuadradas"
Read*,m,n
allocate(A(m,n),B(m,n),At(m,n),Bt(m,n)) !,As(m,n),Bs(m,n))
Print*,"Ingrese datos a la matriz A"
Read*,((A(i,j),j=1,n),i=1,m)
Print*
Print*,"Ingrese datos a la matriz B"
Read*,((B(i,j),j=1,n),i=1,m)
Print*
op="s"
Do while (op=="s" .or. op=="S")
Print*,"OPERACIONES CON MATRICES CUADRADAS"
Print*,"1.-Mostrar la matriz A"
Print*,"2.-Mostrar la matriz B"
Print*,"3.-Mostrar la transpuesta de la matriz A"
Print*,"4.-Mostrar la transpuesta de la matriz B"
Print*,"Seleccione una opcion:"
Read*,opcion
if (opcion==1) then
PRINT*,"LA PRIMERA MATRIZ A "
DO i=1,m
PRINT*,(A(i,j),j=1,n)
END DO
elseif (opcion==2) then
PRINT*,"LA SEGUNDA MATRIZ B "
DO i=1,m
PRINT*,(B(i,j),j=1,n)
END DO
elseif (opcion==3) then
PRINT*,"LA TRANSPUESTA DE LA MATRIZ A "
Do i=1,m
Do j=1,n
At(i,j)=A(j,i)
End Do
End Do
DO i=1,m
PRINT*,(At(i,j),j=1,n)
END DO
elseif (opcion==4) then
PRINT*,"LA TRANSPUESTA DE LA MATRIZ B "
Do i=1,m
Do j=1,n
Bt(i,j)=B(j,i)
End Do
End Do
DO i=1,m
PRINT*,(Bt(i,j),j=1,n)
END DO
elseif (opcion==5) then
Stop "Good Bye"
end if
Print*
Print*,"Nueva operacion s(Si) o cualquier tecla para terminar"
read*,op
end do
End Program Array5

6.- Buscar un nmero en un vector de seis componentes desordenado. Introduce el vector en la propia
sentencia de declaracin de tipo
PROGRAM cap4_3
INTEGER::x,switch=0,i
INTEGER,DIMENSION(6)::v=(/17,3,22,11,33,19/)
print*,'DAME UN NUMERO'
READ*,x
DO i=1,6
IF (x==v(i)) THEN
print*,'ENCONTRADO EN POSICION',i
switch=1
END IF
END DO
IF (switch==0) THEN
print*,'NO ENCONTRADO'
END IF
END PROGRAM cap4_3
El bucle DO iterativo permite recorrer todas las componentes del vector y mostrar todas las posiciones del
mismo en que encuentra el valor buscado X, si las hay.
Cuando el valor buscado no coincide con ninguna componente del vector, la variable interruptor o switch tendr
el valor cero y sirve para conocer este hecho.

7.- Realizar la bsqueda de un nmero en un vector. Reducir la bsqueda a encontrar la primera posicin del
array en que se encuentra coincidencia. Si no existe el n en el array, mostrar un mensaje en consecuencia.
PROGRAM cap4_4
INTEGER::num,i,flag=0
INTEGER,PARAMETER::NC=5
INTEGER,DIMENSION(NC)::vec=(/1,1,6,6,7/)
print*,'DAME UN NUMERO'
READ*,num
DO i=1,NC
IF (vec(i)==num) THEN
print*,'PRIMERA COINCIDENCIA EN POSICION ',i,' DEL VECTOR'
flag=1
EXIT
END IF
END DO
IF (flag==0) THEN
print*,'NO EXISTE EL NUMERO EN EL VECTOR'
END IF
END PROGRAM cap4_4

La sentencia EXIT del bucle WHILE permite reducir la bsqueda a la primera coincidencia en el vector.

8.- Buscar un nmero en un vector de siete componentes ordenado ascendentemente. Introduce el vector en
la propia sentencia de declaracin de tipo.
PROGRAM cap4_5
INTEGER::x,i=0
INTEGER,DIMENSION(7)::v=(/0,3,5,7,11,11,23/)
print*,'DAME UN NUMERO'
READ*,x
DO
i=i+1
IF (i==7 .OR. v(i)>=x) EXIT
END DO
IF (x==v(i)) THEN
print*,'ENCONTRADO EN POSICION',i
ELSE
print*,'NO ENCONTRADO'
END IF
END PROGRAM cap4_5

Este algoritmo recorre todas las componentes del vector de izquierda a derecha hasta que, o bien llegamos a
la ltima componente, o bien el valor buscado es inferior a algn elemento del vector (pues est ordenado).
El programa encuentra nicamente la primera posicin del vector en que se halla el valor buscado, aunque ste
aparezca repetido en varias posiciones del mismo.
9.- Buscar un nmero en un vector de siete componentes ordenado ascendentemente. Introduce el vector en
la propia sentencia de declaracin de tipo. Usa el algoritmo de la bsqueda binaria o dicotmica.

PROGRAM cap4_6
INTEGER:: x,izq=1,der=7,cen
INTEGER,DIMENSION(7)::v=(/-2,0,4,6,8,19,23/)
print*,'DAME UN NUMERO'
READ*,x
cen=(izq+der)/2
print*,'CENTRO',cen
DO WHILE (x/=v(cen).AND.izq<der)
IF (x>v(cen)) THEN
izq=cen+1
ELSE
der=cen-1
END IF
cen=(izq+der)/2
print*,'CENTRO',cen
END DO
IF (x==v(cen)) THEN
print*,'ENCONTRADO EN POSICION',cen
ELSE
print*,'NO EXISTE EL VALOR BUSCADO'
END IF
END PROGRAM cap4_6

La bsqueda dicotmica es un algoritmo ms eficiente que el anterior. Aqu la bsqueda se realiza siempre en
la componente central de un vector cuya longitud se va reduciendo a la mitad izquierda o derecha del centro
(segn sea el nmero) sucesivamente hasta que, o bien encontramos el valor buscado, o bien el intervalo de
bsqueda se ha reducido a una componente.