PROBLEMAS PROPUESTOS DE DATOS ESTRUCTURADOS ARREGLOS (ARRAYS) Autor: Ing. William Chauca Nolasco 1.- Responda a las siguientes preguntas: . Diga que otros nombres reciben los arreglos. . Explique que es un arreglo. . De un ejemplo de un arreglo uni dimensional (vector). . De un ejemplo de un arreglo bi dimensional (matriz). . De un ejemplo de un arreglo tridimensional (cubo). . ¿Pueden existir arreglos de más de tres dimensiones (polidimensionales ) ? . Si tenemos un arreglo uni dimensional de cinco elementos ¿Cómo localiza el contenido de la tercera unidad? . ¿Qué son los subíndices en un arreglo? . ¿Un subíndice puede llegar a ser no entero, si, no por que? . ¿Se puede tener como subíndice una expresión matemática?; si, no y ¿Cómo deberá de ser el resultado? . ¿Puede el número de subíndice ser menor a lo declarado? . ¿Puede ser el numero de subíndice ser mayor a lo declarado, porque? . ¿A que se le denomina arreglo estático? . ¿A que se le llama arreglo dinámico? . ¿Es posible que los subíndices sea negativos? . ¿Cuántos subíndices utiliza un arreglo matricial? . ¿Cuántos subíndices utiliza un arreglo cúbico? . ¿Qué principal ventaja puede presentar el uso de arreglos?
2.-Elaborar un programa que pida el grado de un polinomio (menor a diez), sus coeficientes y un valor de x para evaluar el polinomio.
3.-Elaborar un programa que pida los grados de dos polinomios (inferior a diez y no tienen porqué ser iguales), sus coeficientes y muestre por pantalla el polinomio suma.
4.- Elaborar un programa que pida los grados de dos polinomios (inferior a diez y no tienen porqué ser iguales), sus coeficientes y muestre el polinomio producto.
5.-Elaborar un programa que pida las coordenadas cartesianas de los extremos de dos vectores, escriba el ángulo que forman (en grados) y su producto escalar utilizand o el coseno del ángulo comprendido entre ambos.
6.-Elabore un programa que pida las temperaturas de los días de la semana. Posteriormente escribirá los números de los días que superen la temperatura media.
7.-Elabore un programa que calcule el máximo y el mínimo de un vector de 10 elemento s de tipo real.
8.-Elabore un programa que lea un número natural por teclado, almacenando cada dígit o del mismo en un elemento de un vector y compruebe si es narcisista. A saber: un número de n dígitos es narcisista si coincide con la suma de las potencias de orden n de sus
dígitos. Ejemplo: 153, pues 13+53+33= 1+125+27=153. Los números 370 y 371 son también narcisistas. ¿Cómo buscarías todos los números narcisistas de dos y de 4 dígitos?
9.-Elabore un programa que lea por teclado una matriz 3x3 y muestre su matriz traspuesta.
10.-Elabore un programa que obtenga la recta de regresión y=mx+b de n parejas de valores (x,y) y el coeficiente de correlación lineal r.
11.-Elabore un programa que lea por teclado una matriz M(3x3) y muestre las matr ices M+M y MxM.
12.-Elabore un programa que calcule el máximo de cada columna par y el mínimo de cada columna impar de una matriz de 5 filas por 6 columnas.
13.- Desarrolle un programa que permita el ingreso de una serie de números enteros en forma dinámica en un vector y determine el numero mayor y menor. Deberá visualizar e l vector entero y los numero mayor y menor.
14.- El siguiente programa esta incompleto, escriba las sentencias que faltan pa ra que ordene una serie de números en forma ascendente. (Realice un rastreo manual), La asignación es dinámica Program ascendente .. ...
Print*,Ingrese cantidad de números que tendrá el vector
Allocate(.) Print*, Ingrese Datos al vector .
¡Localizando los elementos Do j=1, n
Do k=j, n If (vector(j) . Vector(k) then Temp=vector(j) Vector(j)=Vector(k) Vector(k)=Temp .. ..
Print*,Vector ordenado en forma ascendente .
End Program ascendente
15.- El siguiente programa esta incompleto, escriba las sentencias que faltan pa ra que ordene una serie de números en forma ascendente. La asignación es dinámica. El programa utiliza el método de mínimos. (Realice un rastreo manual) Método de mínimo: Consiste en buscar el numero mínimo y situarlo como primer elemento de la lista, luego buscara el mínimo de la lista(vector) que resta y colocarlo como segundo elemento, y asi suce sivamente. Program Metodo_minimo .. ...
Print*,Ingrese cantidad de números que tendrá el vector
Allocate(.) Print*, Ingrese Datos al vector .
¡Búsqueda de mínimos Do i = 1, n Temp = vector(i) ..
Do j = i, n If (vector(j) . temp) then k = j Temp=vector(k) End If
vector(...) = vector(i) vector(i) = temp print*,vector(i) ..
End Program Metodo_minimo
16.- El siguiente programa esta incompleto, escriba las sentencias que faltan pa
ra que ordene una serie de números en forma ascendente. El vector tiene 5 elementos. El programa utiliza el método de la burbuja. (Realice un rastreo manual) El método de la burbuja consiste en recorrer sucesivamente el vector comparando lo s elementos consecutivos e intercambiándolos cuando este descolocados. Este método va colocando en cada pasada el mayor elemento de los tratados en la ultima posición quedando colocado y por lo tanto excluido de los el ementos a tratar en la siguiente pasada. Program Burbuja .. ...
Print*, Ingrese Datos al vector .
¡Búsqueda por el método de la burbuja Do i = 5, 2, .. Do j = 1, i-1 If (vector(j) . vector(j+1)) .. temp = vector(j) = vector(j+1) vector(j+) = temp End If
End do !imprimir el vector ordenado en forma ascendente ..
End Program Metodo_minimo
A continuación, se presenta un conjunto de programas que no tienen un enunciado co mo los vistos en los problemas anteriores, copie cada programa en un proyecto nuevo , compile, ejecútelo y según lo que resulte escriba correctamente el enunciado.
17.PROGRAM SumaMat IMPLICIT NONE INTEGER, PARAMETER :: fil=4, col=4 INTEGER, DIMENSION(fil,col) :: a,b,c INTEGER :: i, j ! Leemos las matrices PRINT*, "Dime la matriz A:" DO i=1,fil DO j=1,col PRINT*, "Elemento (", i, ",", j, ")" READ*, a(i,j) ENDDO ENDDO PRINT*, "Dime la matriz B:" DO i=1,fil DO j=1,col PRINT*, "Elemento (", i, ",", j, ")" READ*, b(i,j) ENDDO ENDDO ! Calculamos la suma elemento a elemento DO i=1,fil DO j=1,col c(i,j) = a(i,j) + b(i,j) ENDDO
ENDDO ! Imprimimos el resultado DO i=1,fil DO j=1,col PRINT*, "C(",i,",",j,") = ",c(i,j) ENDDO ENDDO END PROGRAM SumaMat
18.PROGRAM SumaMat IMPLICIT NONE INTEGER, PARAMETER :: fil=4, col=4 INTEGER, DIMENSION(fil,col) :: a,b,c INTEGER :: i, j ! Lo hacemos todo elemento a elemento con dos únicos bucles DO i=1,fil DO j=1,col ! Leemos el elemento de A PRINT*, "Dime el elemento (", i, ",", j, ") de A" READ*, a(i,j) ! Leemos el elemento de B PRINT*, "Dime el elemento (", i, ",", j, ") de B" READ*, b(i,j)
! Sumamos los dos elementos c(i,j) = a(i,j) + b(i,j) ! Mostramos el resultado PRINT*, "C(",i,",",j,") = ",c(i,j) ENDDO ENDDO END PROGRAM SumaMat
19.PROGRAM MediaVector IMPLICIT NONE ! Lectura de un vector de 10 elementos y cálculo de la media ! Declaración de constantes INTEGER, PARAMETER :: NumElementos=10 ! Declaración de variables REAL, DIMENSION(NumElementos) :: vector INTEGER :: i REAL :: media ! Leemos el vector PRINT*, "Dime ",NumElementos," números" DO i=1,NumElementos READ*, vector(i) ENDDO ! Calculamos la media media=0 DO i=1,NumElementos media = media + vector(i) ENDDO media = media / NumElementos ! Mostramos el resultado
PRINT*, "La media es ",media END PROGRAM MediaVector
20.PROGRAM LeeMatriz IMPLICIT NONE INTEGER, DIMENSION(10,12) :: a INTEGER :: i ! Leemos las matrices por filas PRINT*, "Dime la matriz A (por filas)" DO i=1,10 READ*, a(i,1:12) ENDDO PRINT*, "El orden de los elementos almacenados es:" PRINT*, a PRINT*, "La matriz, escrita por filas, es:" DO i=1,10 PRINT*, a(i,1:12) ENDDO END PROGRAM LeeMatriz
21.PROGRAM CopiaSeccion IMPLICIT NONE INTEGER, DIMENSION(10,12) :: a INTEGER, DIMENSION(4,8) :: b INTEGER :: i, j ! Leemos las matrices por columnas PRINT*, "Dime la matriz A (por columnas)" READ*, a PRINT*, "Dime la matriz B (por columnas)" READ*, b ! Solución 1: DO i=4,7 DO j=3,10 a(i,j) = b(i-3,j-2) ENDDO ENDDO ! Solución 2: a(4:7,3:10) = b ! Imprimimos el resultado (por filas y una fila por línea) DO i=1,10 PRINT*, (a(i,j),j=1,12) ENDDO END PROGRAM CopiaSeccion
22.PROGRAM MultMat IMPLICIT NONE INTEGER, DIMENSION(2,4) :: m1 INTEGER, DIMENSION(4,2) :: m2
INTEGER, DIMENSION(2,2) :: r INTEGER :: i ! Leemos la matriz PRINT*, "Dime los elementos de la matriz:" DO i=1,2 PRINT*, "Fila = ",i READ*, m1(i,:) ENDDO ! Calculamos la traspuesta y la ponemos en m2 m2 = TRANSPOSE(m1) PRINT*, "Su traspuesta es:" DO i=1,4 PRINT*, m2(i,:) ENDDO ! Multiplicamos m1 y m2 y ponemos el resultado en r r = MATMUL(m1,m2) PRINT*, "Su producto es:" DO i=1,2 PRINT*, r(i,:) ENDDO END PROGRAM MultMat
23.PROGRAM MaximoMatriz IMPLICIT NONE INTEGER, DIMENSION(3,4) :: mat INTEGER :: maximo,i INTEGER, DIMENSION(2) :: posi INTEGER, DIMENSION(2) :: dimensiones ! Preguntamos las dimensiones de la matriz dimensiones = SHAPE(mat) ! Leemos la matriz PRINT*, "Dime los elementos de la matriz:" DO i=1,dimensiones(1) PRINT*, "Fila = ",i READ*, mat(i,1:dimensiones(2)) ENDDO ! Calculamos el máximo y su posición posi = MAXLOC(mat) maximo = mat(posi(1),posi(2)) ! Mostramos los resultados PRINT*, "El máximo es: ", maximo PRINT*, "Está en la fila ", posi(1), " y columna ", posi(2) END PROGRAM MaximoMatriz
24.PROGRAM EjemploAlloc IMPLICIT NONE INTEGER, DIMENSION(:), ALLOCATABLE :: mat IF (ALLOCATED(mat)) THEN PRINT*, "Ya tenemos memoria" ELSE
PRINT*, "Aún no tenemos memoria" ENDIF ALLOCATE(mat(10)) IF (ALLOCATED(mat)) THEN PRINT*, "Ya tenemos memoria" ELSE PRINT*, "Aún no tenemos memoria" ENDIF DEALLOCATE(mat) IF (ALLOCATED(mat)) THEN PRINT*, "Ya tenemos memoria" ELSE PRINT*, "Aún no tenemos memoria" ENDIF END PROGRAM EjemploAlloc