F90: Programa do momento
From AdonaiMedrado.Pro.Br
Este programa foi desenvolvido pelos alunos Pedro Moreira e Raimundo Cunha durante a disciplina Processamento de Dados (UFBA 2008.2). Data da apresentação: 02/12/2008.
Este programa calcula o momento ou torque de “n” forças em relação a um eixo qualquer no espaço utilizando as coordenadas (x,y,z).
PROGRAM momento IMPLICIT NONE REAL :: TR=0 REAL, DIMENSION(:,:,:), ALLOCATABLE :: M REAL, DIMENSION(:),ALLOCATABLE :: TORQUE INTEGER:: i,j,N,Z,OPCAO,ERRO=0 WRITE(*,*) "CALCULA O MOMENTO DE UMA FORCA EM REALACAO A UM EIXO" WRITE(*,*) "QUAL UNIDADE VOCE DESEJA TRABALHAR" WRITE(*,*) "DIGITE 1 PARA TRABALHAR COM NEWTON*METRO" WRITE(*,*) "DIGITE 2 PARA TRABALHAR COM LIBRAFORCA*PE" WRITE(*,*) "PRECIONE QUALQUER TECLA PARA SAIR" READ(*,*,IOSTAT=ERRO) OPCAO IF (ERRO<=0) THEN SELECT CASE (OPCAO) CASE(1) WRITE(*,*) "DIGITE O NUMERO N DE FORCAS" DO READ(*,*,IOSTAT=ERRO) N IF (ERRO>0) THEN WRITE(*,*) "DIGITE UM NUMERO INTEIRO" ELSE EXIT END IF END DO ALLOCATE (M(1:N,1:3,1:3)) ALLOCATE (TORQUE(1:N)) WRITE(*,*) "DIGITE AS COORDENADAS DO EIXO" DO READ(*,*,IOSTAT=ERRO) (M(1,1,j), j=1,3) IF (ERRO>0) THEN WRITE(*,*) "COODENEDAS INCORRETAS" ELSE EXIT END IF END DO DO Z=1,N WRITE(*,"(A,I2,A10)") "DIGITE AS COORDENADAS DO PONTO DE APLICACAO DA FORCA",Z,"EM METROS" DO READ(*,*,IOSTAT=ERRO) (M(Z,2,j), j=1,3) IF (ERRO>0) THEN WRITE(*,*) "COODENEDAS INCORRETAS" ELSE EXIT END IF END DO WRITE(*,"(A,I2,A10)") "DIGITE O VETOR FORCA",Z,"EM NEWTON" DO READ(*,*,IOSTAT=ERRO) (M(Z,3,j),j=1,3) IF (ERRO>0) THEN WRITE(*,*) "COODENEDAS INCORRETAS" ELSE EXIT END IF END DO END DO WRITE(*,*) "AS MATRIZES SAO" DO Z=1,N WRITE (*,"(/3(F10.2))") (M(1,1,j), j=1,3) DO i=2,3 WRITE (*,"(3(F10.2))") (M(Z,i,j), j=1,3) END DO END DO DO Z=1,N TORQUE(Z)=M(1,1,1)*M(Z,2,2)*M(Z,3,3)+M(1,1,2)*M(Z,2,3)*& M(Z,3,1)+M(1,1,3)*M(Z,2,1)*M(Z,3,2)-(M(Z,3,1)*M(Z,2,2)*& M(1,1,3))-M(Z,3,2)*M(Z,2,3)*M(1,1,1)-(M(Z,3,3)*M(Z,2,1)*M(1,1,2)) TR=TR+TORQUE(Z) END DO IF (TR>0) THEN WRITE(*,"(A,F10.2,A2)") "O TORQUE RESULTANTE EM NM E",TR WRITE(*,"(A,F10.2,A3)") "OU EM Lbf*ft",TR/1.36 WRITE(*,*)"O CORPO GIRA NO SENTIDO ANTI-HORARIO" ELSE IF (TR<0) THEN WRITE(*,"(A,F10.2,A2)") "O TORQUE RESULTANTE EM NM E",TR WRITE(*,"(A,F10.2,A3)") "OU EM Lbf*ft",TR/1.36 WRITE(*,*)"O CORPO GIRA NO SENTIDO HORARIO" ELSE WRITE(*,"(A,F5.2,A2)") "O TORQUE RESULTANTE EM NM E",TR WRITE(*,"(A,F5.2,A6)") "OU EM Lbf*ft",TR/1.36 WRITE(*,*)"O CORPO NAO GIRA" END IF DEALLOCATE (M) DEALLOCATE (TORQUE) CASE (2) WRITE(*,*) "DIGITE O NUMERO N DE FORCAS" DO READ(*,*,IOSTAT=ERRO) N IF (ERRO>0) THEN WRITE(*,*) "DIGITE UM NUMERO INTEIRO" ELSE EXIT END IF END DO ALLOCATE (M(1:N,1:3,1:3)) ALLOCATE (TORQUE(1:N)) WRITE(*,*) "DIGITE AS COORDENADAS DO EIXO" DO READ(*,*,IOSTAT=ERRO) (M(1,1,j), j=1,3) IF (ERRO>0) THEN WRITE(*,*) "COODENEDAS INCORRETAS" ELSE EXIT END IF END DO DO Z=1,N WRITE(*,"(A,I2,A7)") "DIGITE AS COORDENADAS DO PONTO DE APLICACAO DA FORCA",Z,"EM PES" DO READ(*,*,IOSTAT=ERRO) (M(Z,2,j), j=1,3) IF (ERRO>0) THEN WRITE(*,*) "COODENEDAS INCORRETAS" ELSE EXIT END IF END DO WRITE(*,"(A,I2,A9)") "DIGITE O VETOR FORCA",Z,"EM LIBRA" DO READ(*,*,IOSTAT=ERRO) (M(Z,3,j),j=1,3) IF (ERRO>0) THEN WRITE(*,*) "COODENEDAS INCORRETAS" ELSE EXIT END IF END DO END DO WRITE(*,*) "AS MATRIZES SAO" DO Z=1,N WRITE (*,"(/3(F10.2))") (M(1,1,j), j=1,3) DO i=2,3 WRITE (*,"(3(F10.2))") (M(Z,i,j), j=1,3) END DO END DO DO Z=1,N TORQUE(Z)=M(1,1,1)*M(Z,2,2)*M(Z,3,3)+M(1,1,2)*M(Z,2,3)*M(Z,3,1)+& M(1,1,3)*M(Z,2,1)*M(Z,3,2)-(M(Z,3,1)*M(Z,2,2)*M(1,1,3))-& M(Z,3,2)*M(Z,2,3)*M(1,1,1)-(M(Z,3,3)*M(Z,2,1)*M(1,1,2)) TR=TR+TORQUE(Z) END DO IF (TR>0) THEN WRITE(*,"(A,F10.2,A2)") "O TORQUE RESULTANTE EM Lbf*ft E",TR WRITE(*,"(A,F10.2,A3)") "OU EM N*M",TR*1.36 WRITE(*,*)"O CORPO GIRA NO SENTIDO ANTI-HORARIO" ELSE IF (TR<0) THEN WRITE(*,"(A,F10.2,A2)") "O TORQUE RESULTANTE EM Lbf*ft E",TR WRITE(*,"(A,F10.2,A3)") "OU EM N*M",TR*1.36 WRITE(*,*)"O CORPO GIRA NO SENTIDO HORARIO" ELSE WRITE(*,"(A,F5.2,A6)") "O TORQUE RESULTANTE EM Lbf*ft E",TR WRITE(*,"(A,F5.2,A3)") "OU EM N*M",TR*1.36 WRITE(*,*)"O CORPO NAO GIRA" END IF DEALLOCATE (M) DEALLOCATE (TORQUE) END SELECT END IF END PROGRAM momento