1.- Se requiere obtener la suma de las 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, además de su promedio general. Realice un algoritmo para capturar esta información, la cual se debe almacenar en arreglos, un vector para el nombre y otro para el promedio, después de capturar la información 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 c lientes 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)=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 penúltimo 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 número de filas y columnas de dos matrices A y B (iguales para ambas) y sus componentes. Dimensiona dinámicamente las matrices. A continuación, 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 número en un vector de seis componentes desordenado. Introduce el vector en la propia sentencia de declaración 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 E l bucle DO iterativo permite recorrer todas las componentes del vector y mostrar todas las posi ciones del mis mo en que encuentra el valor bus cado X, s i las hay. Cuando el valor bus cado no coincide con ning una componente del vector, la variable interr uptor o swi tch tendrá el valor cero y s irv e para conocer es te hecho. −
−
7.- Realizar la búsqueda de un número en un vector. Reducir la búsqueda a encontrar la primera posición 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 búsqueda a la primera coincidencia en el vector. 8.- Buscar un número en un vector de siete componentes ordenado ascendentemente. Introduce el vector en la propia sentencia de declaración 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 bus cado es i nferi or a alg ún elemento del vector ( pues es tá ordenado). E l prog rama encuentra únic amente la pri mera pos ición del vector en que s e halla el valor bus cado, aunque és te aparezca repetido en varias posi ciones del mis mo. −
−
9.- Buscar un número en un vector de siete componentes ordenado ascendentemente. Introduce el vector en la propia sentencia de declaración de tipo. Usa el algoritmo de la búsqueda binaria o dicotómica. 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.izqv(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 búsqueda dicotómica es un algoritmo más eficiente que el anterior. Aquí la búsqueda se realiza siempre en la componente central de un vector cuya longitud se va reduciendo a la mitad izquierda o derecha del centro (según sea el número) sucesivamente hasta que, o bien encontramos el valor buscado, o bien el intervalo de bús queda se ha reduci do a una componente. −