IPN

IPN
IPN-ESIQIE

lunes, 7 de junio de 2010

PROYECTO 2
CALCULADORA DE MATRICES Y VECTORES

program vectores y mattrices
IMPLICIT NONE
INTEGER,ALLOCATABLE,DIMENSION(:) ::vector1,vector2,suma,resta,multiplicacion
INTEGER,ALLOCATABLE,DIMENSION (:,:)::mat1,mat2,sumam,restam,multiplicacionm
INTEGER :: ERROR,i,j,op,op2,op3
integer::n,m
REAL mult
PRINT*,"calculadora de vectores y matrices"
PRINT*,"presiona 1 para trabajar con vectores y 2 para trabajr con matrices"
READ*,op
select case (op)
case (1)

write(*,*)"Dame el tamaño de los vectores"
read*,n
allocate(vector1( n ),vector2( n ),suma( n ),resta( n ),multiplicacion( n ),STAT=error)
IF (error /= 0) THEN
WRITE(*,*) 'NO SUFICIENTE ESPACIO MEMORIA'
STOP
END IF
!LECTURA DE VECTORES
PRINT*,"DAME LOS VALORES DE EL VECTOR"
DO i=1,n
PRINT*, 'ELEMENTO',i,' DE VECTOR 1'
READ(*,*) vector1(i)
END DO

PRINT*,"DAME LOS VALORES DEL VECTOR 2"
DO i=1,n
PRINT*, 'ELEMENTO',i,' DE VECTOR 2'
READ(*,*) vector2(i)
END DO

PRINT*,"QUE OPERACION DECEAS HACER???"
PRINT*,"presiona 1 para sumar vectores"
PRINT*,"presiona 2 para restar (se resta el segndo al primero)"
PRINT*,"presiona 3 para multiplicar (producto punto)"
READ*,op2
select case (op2)
case (1)

!realizalas operaciones entre vectores
DO i=1,n

suma(i)=vector1(i)+vector2(i)
END DO


WRITE(*,*) 'VECTORES SUMADOS'
PRINT*,suma

case (2)
DO i=1,n

resta(i)=vector1(i)-vector2(i)
END DO


WRITE(*,*) 'VECTORES RESTADOS'
PRINT*,resta

case (3)



multiplicacion(i)=DOT_PRODUCT(vector1,vector2)


WRITE(*,*) 'VECTORES MULTIPLICADOS'
PRINT*,multiplicacion


deallocate(vector1,vector2,suma,resta,multiplicacion,STAT=error)
IF (error /= 0) THEN
WRITE(*,*) 'ERROR AL LIBERAR LA MEMORIA'
STOP
END IF

case default
PRINT*,"ERROR... ESTE VALOR NO ESTA EN EL MENU"
end select




!MATRICES



case (2)





write(*,*)"DAME EL TAMAÑO DE LAS MATRICES RECUERDA QUE SERAN DEL MISMO TAMAÑO"
PRINT*,"tamaño de n"
read*,n
PRINT*,"tamaño de m"
READ*,m



allocate(mat1( n,m ),mat2( n,m ),sumam( n,m ),restam( n,m ),multiplicacionm( n,m ),STAT=error)
IF (error /= 0) THEN
WRITE(*,*) 'NO SUFICIENTE ESPACIO MEMORIA'
STOP
END IF

!LECTURA DE MATRICES
PRINT*,"DAME LOS VALORES DE LA MATRIZ 1"
DO i=1,n
do J=1,m

PRINT*, 'ELEMENTO',i,j,' DE MATRIZ 1 '
READ(*,*) mat1(i,j)

end do
END DO

PRINT*,"DAME LOS VALORES DE LA MATRIZ 2"
DO i=1,n
do j=1,m

PRINT*, 'ELEMENTO',i,j,' DE MATRIZ 2'
READ(*,*) mat2(i,j)
end do
END DO





PRINT*,"QUE OPERACION DECEAS HACER???"
PRINT*,"presiona 1 para sumar vectores"
PRINT*,"presiona 2 para restar (se resta el segndo al primero)"
PRINT*,"presiona 3 para multiplicar "
READ*,op3
select case (op3)




!realizalas operaciones entre matrices
case (1)
DO i=1,n
do j=1,m

sumam(i,j)=mat1(i,j)+mat2(i,j)
END DO
end do


WRITE(*,*) 'MATRICES SUMADAS'
PRINT*,SUMAM

case (2)

DO i=1,n
do j=1,m

RESTAM(i,j)=mat1(i,j)-mat2(i,j)
END DO
end do


WRITE(*,*) 'MATRICES RESTADAS'
PRINT*,RESTAM

case (3)


multiplicacionm=matmul(mat1,mat2)



WRITE(*,*) 'MATRICES MULTIPLICADAS'
PRINT*,multiplicacionm


deallocate(mat1,mat2,sumam,restam,multiplicacionm,STAT=error)
IF (error /= 0) THEN
WRITE(*,*) 'ERROR AL LIBERAR LA MEMORIA'
STOP
END IF
case default
PRINT*,'NO EXISTE ESTA OPCION DEL MENU -.-"'
end select
case default
PRINT*,"SOLO HAY DOS OPCIONES ESTA NO EXISTE"
end select
end program vectores y mattrices

No hay comentarios:

Publicar un comentario