PROBLEMAS A DESARROLLAR EL LUNES 1.- Programa que calcula el producto de dos matrices de 2 x 2 utilizando la función MATMUL y utilizando un programa logico ingrese la matriz a 2x 2 program multi 33 integer,dimension(2,2)::a,b,c,d 44 ingrese la matriz b 2x 2 print*,"ingrese la matriz a 2x 2" 55 read*,((a(i,j),j=1,2),i=1,2) 66 print*,"ingrese la matriz b 2x 2" 33 33 read*,((b(i,j),j=1,2),i=1,2) 44 44 !usando la funcion matmul d 33 33 c=matmul(a,b) 44 44 do i=1,2 Press any key to continue print*,(c(i,j),j=1,2) end do !multiplicando do i=1,2 do j=1,2 d(i,j)=0 do k=1,2 d(i,j)=d(i,j)+a(i,k)*b(k,j) end do end do end do print*,"d" do i=1,2 print*,(d(i,j),j=1,2) end do end 2.- Elaborar un programa que lea dos matrices de 3x3 y obtenga el producto de estas dos matrices 3.- Pograma que calcula el producto de dos matrices una de 3 x y la otra de 2 x 3 program multi ingrese la matriz a 3 x 2 integer,dimension(3,2)::a 11 integer,dimension(2,3)::b 11 integer,dimension(3,3)::c,d 11 print*,"ingrese la matriz a 3 x 2" ingrese la matriz b 2x3 222 read*,((a(i,j),j=1,2),i=1,3) 333 print*,"ingrese la matriz b 2x3" 5 5 5 read*,((b(i,j),j=1,3),i=1,2) 5 5 5 !usando la funcion matmul 5 5 5 c=matmul(a,b) d 5 5 5 do i=1,3 5 5 5 print*,(c(i,j),j=1,3) 5 5 5 end do Press any key to continue !multiplicando 1
do i=1,3 do j=1,3 d(i,j)=0 do k=1,2 d(i,j)=d(i,j)+a(i,k)*b(k,j) end do end do end do print*,"d" do i=1,3 print*,(d(i,j),j=1,3) end do end 4.- PROGRAMA que nos permite multiplicar dos matrices teniendo en cuenta el tamaño de ambas si son cuadradas o no CASO PARA MATRICES DE IGUAL TAMAÑO program multi ingrese tamano de la matriz A integer,dimension(100,100)::a 33 integer,dimension(100,100)::b ingrese tamano de la matriz B integer,dimension(100,100)::c,d,E 33 integer::m,n,p,q La matriz resultante es cuadrada ingrese la matriz A print*,"ingrese tamano de la matriz A" 123 Read*,m,n 456 print*,"ingrese tamano de la matriz B" 789 Read*,P,Q ingrese la matriz B if (m==n .and. p==q) then Print*,"La matriz resultante es cuadrada" Else if (n==p) then print*,"Matriz resultante sera del tamaño",m,q else if(n/=p) then print*, "no existe matriz" stop end if
111 222 333 14 32 50
14 32 50
14 32 50
d 14 14 14 32 32 32 50 50 50 Press any key to continue
print*,"ingrese la matriz A" read*,((a(i,j),j=1,N),i=1,M) print*,"ingrese la matriz B" read*,((b(i,j),j=1,Q),i=1,P) !usando la funcion matmul IF (m==n .AND. P==Q) then c=matmul(a,b) do i=1,M print*,(c(i,j),j=1,N) end do do i=1,M do j=1,N 2
d(i,j)=0 do k=1,N d(i,j)=d(i,j)+a(i,k)*b(k,j) end do end do end do print*,"d" do i=1,M print*,(d(i,j),j=1,N) end do ENDIF IF (M/=P) then c=matmul(a,b) do i=1,M print*,(c(i,j),j=1,Q) end do do i=1,M do j=1,Q E(i,j)=0 do k=1,M-1 E(i,j)=E(i,j)+a(i,k)*b(k,j) end do end do end do print*,"E" do i=1,M print*,(E(i,j),j=1,Q) end do ENDIF End
CASO – MATRICES DE DIFERENTES TAMAÑOS ingrese tamano de la matriz A 43 ingrese tamano de la matriz B 28 no existe matriz Stop - Program terminated. Press any key to continue
CASO PARA MATRICES CON UN INDICE IGUAL ingrese tamano de la matriz A 32 ingrese tamano de la matriz B 24 Matriz resultante sera del tama±o 3 4 ingrese la matriz A 12 23 45 ingrese la matriz B 1234 5678 11 14 17 20 17 22 27 32 29 38 47 56 E 11 14 17 20 17 22 27 32 29 38 47 56 Press any key to continue
3
CLASE MARTES 28 DE NOVIEMBRE PROGRAMA PARA CALCULAR LA TRANSPUESTA DE UNA MATRIZ program tranposa Ingrese tama±o de la matriz integer::A(30,30),TA(30,30),tamp(30,30) 3 3 Print*,"Ingrese tamaño de la matriz" Ingrese datos a la matriz A 1 2 23 read*,m,n 456 PRINT*,"Ingrese datos a la matriz A" 789 read*,((a(i,j),j=1,n),i=1,m) 1 4 7 tamp=transpose(a) do i=1,N print*,(tamp(i,j),j=1,M) end do PRINT* do i=1,m do j=1,n ta(j,i)=a(i,j) end do end do do i=1,N print*,(ta(i,j),j=1,M) end do end
2 23
5 6
8 9
1 4 7 2 5 8 23 6 9 Press any key to continue
Ingrese tama±o de la matriz 32 Ingrese datos a la matriz A 12 23 45 1 2 4 2 3 5 1 2 4 2 3 5 Press any key to continue
Ingrese tama±o de la matriz 23 Ingrese datos a la matriz A 123 456 1 4 2 5 3 6 1 4 2 5 3 6 Press any key to continue
Problema de asignaciones integer A(10) A(1:5:2) = 3 ! Sets elements A(1), A(3), A(5) to 3.0. print*,(A(i),i=1,10) print* A(:5:2) = 3 ! Same as the previous statement print*,(A(i),i=1,10) print* A(2::3) = 3 ! Sets elements A(2), A(5), A(8) to 3.0. print*,(A(i),i=1,10) ! The upper bound defaults to 10. print* A(7:9) = 3 ! Sets elements A(7), A(8), A(9) to 3.0. print*,(A(i),i=1,10) ! The stride defaults to 1. print* A(:) = 3 ! Same as A = 3.0; sets all elements of print*,(A(i),i=1,10) ! A to 3.0. END 4
!supongamos que B es un arreglo lineal con M elementos !escribir un programa que encuentre la localizacion J, tal !que B(j) contenga el mayor valor absoluto de B integer::x(100) print*,"ingrese el tamno del vector" read*,m print*,"ingrese los datos" ingrese el tamno del vector read*,(x(i),i=1,m) 5 j=1 ingrese los datos grande=abs(x(1)) 5 100 12 3 1 do k=1,m indice del mayor 2 if(grande
5