F90: Forca Cortante/Momento Fletor

From AdonaiMedrado.Pro.Br
Jump to: navigation, search

Este código foi desenvolvido pelos alunos Guilherme Piropo, Flávia Magali e Tácia Luciana durante a disciplina Processamento de Dados (UFBA 2008.2). Data da apresentação: 25/11/2008.

Para saber mais sobre Força Cortante e Momento Fletor:

PROGRAM Viga
  REAL:: L,q,X,X1,L1,q1 
  INTEGER:: N, M, ERRO
  CHARACTER(LEN=256):: documento
  CHARACTER(LEN=10):: vigas
  WRITE(*,*) "Digite:" 
  WRITE(*,*) "1: se deseja informar os dados através de um arquivo" 
  WRITE(*,*) "2: se deseja digitar os dados"
  READ(*,*) M
  SELECT CASE (M)
    CASE (1)
	WRITE(*,*) "O arquivo deve conter o nome da viga (com 10 caracteres), &
                   &seu comprimento(com 4 casa sendo 1 decimal),"
	WRITE(*,*) "a carga (com 4 casa sendo um decimal) e o ponto onde deve &
                   &ser calculada a força e o momento (com 4 casa sendo um decimal)"
	WRITE(*,*) "Informe o nome do arquivo"
	READ(*,*) documento
	OPEN(UNIT=10, FILE= documento)
	OPEN(UNIT=11, FILE="saida.txt", ACCESS="APPEND")
	DO
	  READ(10,"(A,F4.1,F4.1,F4.1)", IOSTAT=ERRO) vigas, L1, q1, X1 	
          IF(ERRO/=0) EXIT
          WRITE(11,*) vigas, forca_cortante(X1,L1,q1), momento_fletor(X1,L1,q1)
	END DO
	CLOSE(10)
	CLOSE(11)
    CASE (2)
	WRITE(*,*) "Informe o comprimento da viga (em metros):"
	READ(*,*) L
	WRITE(*,*) "Informe a carga (em kN/m):"
	READ(*,*) q
	DO
  	  WRITE(*,*) "Digite:" 
          WRITE(*,*) "1: obter a força cortante em um ponto x" 
    	  WRITE(*,*) "2: obter o momento fletor em um ponto x" 
    	  WRITE(*,*) "3: sair do programa"
    	  READ(*,*) N
    	  IF (N>=1 .AND. N<=2) THEN
      		WRITE(*,*) "Informe o ponto:"
      		READ(*,*) X
      		IF (N==1) THEN
			WRITE(*,"(A,F10.3)") "A força vale:", forca_cortante(X,L,q)
      		ELSE IF (N==2) THEN
			WRITE(*,"(A,F10.3)") "O momento vale:", momento_fletor(X,L,q)
      		END IF
    	  ELSE IF (N==3) THEN
      		EXIT
    	  END IF
  	END DO
    CASE DEFAULT
	WRITE(*,*)"Opcao inválida: o programa será abortado"
  END SELECT
 
CONTAINS
  REAL FUNCTION forca_cortante (Y,L2,q2)
    REAL, INTENT(IN):: Y, L2,q2
    IF (Y>L2) THEN
	WRITE(*,*) "Esse ponto não pertence a viga."
    ELSE
	forca_cortante= (q2*L2/2 - q2*Y)
    END IF
  END FUNCTION forca_cortante
 
  REAL FUNCTION momento_fletor (Y,L2,q2)
    REAL, INTENT(IN):: Y, L2, q2
    IF (Y>L2) THEN
	WRITE(*,*) "Esse ponto não pertence a viga."
    ELSE
	momento_fletor= (q2*L2*Y/2 - q2*Y*Y/2)
    END IF
  END FUNCTION momento_fletor
END PROGRAM Viga