Problemas del libro Introducción al Fortran 77 y la PC:
Problemas
Problema 6-24 y 4-7
6-24. Revise el problema 4-7 de modo que si puede formarse un triángulo, el programa determine si es escaleno, isósceles, equilátero o recto. Ya que un triángulo isóceles puede ser tambien un triángulo recto, incluya este caso en la prueba para triángulos isósceles. Agregue la previsión de que con triángulos rectos, la prueba sea limitada a una precisión de 0.001. Use los datos que se listan abajo.
4-7. Haga un programa para leer tres valores arbitrarios que representan tres longitudes y determine si pueden formar un triángulo; si lo hacen, diga si el triángulo es recto. Deben imprimirse mensajes adecuados, junto con los valores de cada uno de los tres lados. El programa debe ser capaz de manejar cualquier número de triángulos. Pruebe el programa con datos adecuados.
MEDTRIAN.DAT
-----------------------
10.0000 7.0711 7.0711
10.5000 3.5250 6.3330
8.6603 10.0000 5.0000
9.6750 8.1250 14.3750
4.0000 10.0000 10.0000
5.5000 5.5000 5.5000
-------------------------
PROGRAM ISSOCC
IMPLICIT NONE
REAL :: A,B,C,ALFA,BETA,GAMA,RELA,RELB,RELC
INTEGER :: CONT,DECIS
REAL,PARAMETER :: RADI=57.2958
CHARACTER(11) :: ESCA="Escaleno",ISOC="Isósceles",EQUI="Equilátero",&
RECT="Rectángulo"
CHARACTER(19) :: NOGE=" No genera"
CHARACTER(5) :: NONEE=" - "
OPEN(74,FILE='MEDTRIAN.DAT')
OPEN(97,FILE='RESULTA.DAT')
WRITE(*,*)" ------------Triángulos-----------"
WRITE(*,*)""
PRINT *,'1: Leer desde archivo con medidas'
PRINT *,'2: Introducir medidas en pantalla'
76 READ (*,*) DECIS
IF (DECIS.NE.1 .AND. DECIS.NE.2) THEN
GOTO 76
ENDIF
454 CONT=1
DO
IF (DECIS.EQ.1) THEN
READ(74,*,END=778) A,B,C
ENDIF
IF (DECIS.EQ.2) THEN
READ(*,*) A,B,C
ENDIF
ALFA=ACOS(((C**2)+(B**2)-(A**2))/(2*B*C))
BETA=ACOS(((A**2)+(C**2)-(B**2))/(2*A*C))
GAMA=ACOS(((A**2)+(B**2)-(C**2))/(2*A*B))
RELA=A/(SIN(ALFA))
RELB=B/(SIN(BETA))
RELC=C/(SIN(GAMA))
ALFA=ALFA*RADI
BETA=BETA*RADI
GAMA=GAMA*RADI
IF ((RELA-RELB).LT.0.000001 .AND. (RELA-RELC).LT.0.000001) THEN
GOTO 200
ELSE
WRITE(*,111) NOGE,NONEE,NONEE,NONEE,A,B,C
WRITE(97,111) NOGE,NONEE,NONEE,NONEE,A,B,C
111 FORMAT(A10,4X,A9,A9,A9,F9.3,F9.3,F9.3)
GOTO 454
ENDIF
200 IF (ALFA.GT.(90-0.01) .AND. ALFA.LT.(90+0.01) .OR. BETA.GT.(90-0.01)&
.AND. BETA.LT.(90+0.01) .OR. GAMA.GT.(90-0.001) .AND. &
GAMA.LT.(90+0.001)) THEN
WRITE(*,175) RECT,A,B,C,ALFA,BETA,GAMA
WRITE(97,175) RECT,A,B,C,ALFA,BETA,GAMA
GOTO 777
ENDIF
IF (A.EQ.B .AND. B.EQ.C .AND. C.EQ.A) THEN
WRITE(*,175) EQUI,A,B,C,ALFA,BETA,GAMA
WRITE(97,175) EQUI,A,B,C,ALFA,BETA,GAMA
GOTO 777
ENDIF
IF(A.EQ.B .OR. A.EQ.C .OR. C.EQ.B) THEN
WRITE(*,175) ISOC,A,B,C,ALFA,BETA,GAMA
WRITE(97,175) ISOC,A,B,C,ALFA,BETA,GAMA
GOTO 777
ENDIF
IF(A.NE.B .AND. A.NE.C .AND. B.NE.C) THEN
WRITE(*,175) ESCA,A,B,C,ALFA,BETA,GAMA
WRITE(97,175) ESCA,A,B,C,ALFA,BETA,GAMA
GOTO 777
ENDIF
777 ENDDO
175 FORMAT(A12,F10.3,F10.3,F10.3,F9.3,F9.3,F9.3)
778 END PROGRAM
Problema 6-16
6-16. Los distribuidores de gas natural planean utilizar una computadora para preparar recibos. Las cuotas son
| CONSUMO |
CUOTAS POR 100 FT**3 |
| PRIMEROS 3000 |
5.00 |
| SEGUNDOS 3000 |
0.15 |
| SIGUIENTES 20000 |
0.13 |
| PRÓXIMOS 150000 |
0.10 |
| TODOS LOS RESTANTES |
0.055 |
Cada registro del archivo de datos contiene la identificación del cliente (registro nacional de identidad 10 dígitos) y el consumo de gas en pies cúbicos. Escriba un programa que determine el cargo para cualquier cantidad de gas consumido. La salida debe mostrar el registro nacional de identidad, el consumo y el cargo. Prepare los datos como desee.
PROGRAM GASNAT
CHARACTER(10) :: REGUSUR
REAL :: CONS
OPEN(45,FILE='CLIENTES1.DAT')
WRITE(*,*)"INTRODUZCA EL REGISTRO NACIONAL DE IDENTIDAD"
READ(*,*) REGUSUR
WRITE(*,*)"INTRODUZCA EL CONSUMO DEL CLIENTE"
READ(*,*) CONS
CONS1=CONS/100
IF (CONS.LE.3000) THEN
CARGO=CONS1*5
ENDIF
IF(CONS.GT.3000 .AND. CONS.LE.6000) THEN
CARGO=30*5+(CONS1-30)*0.15
ENDIF
IF(CONS.GT.6000.AND.CONS.LE.26000) THEN
CARGO=(30)*5+(30)*0.15+(CONS1-60)*0.13
ENDIF
IF (CONS.GT.26000.AND.CONS.LE.176000) THEN
CARGO=30*5+(30)*0.15+(200)*0.13+(CONS1-260)*0.10
ENDIF
IF (CONS.GT.176000) THEN
CARGO=30*5+(30)*0.15+(200)*0.13+(150)*0.10+(CONS1-410)*0.055
ENDIF
WRITE(*,*)" CLAVE DE REGISTRO | CONSUMO | CARGO"
WRITE(45,12) REGUSUR,CONS,CARGO
WRITE(*,*) REGUSUR,CONS,CARGO
12 FORMAT(A10,F12.4,F12.4)
END PROGRAM
Uncategorized
Nuevos comentarios