Sunteți pe pagina 1din 5

/*PROGRAMA ELABORADO POR: BRYAN DAVID SIERA MURILLO

/*FI-UNAM
/*PROGRAMACION AVANZADA

PROGRAM NEWTON
IMPLICIT NONE
INTEGER::I,J,N,OP /*DECLARACION DE ARIABLES ENTERAS
REAL(KIND=2)::TOL,VSUP,SUMX,SUMY,SUMDF,SUMF,SUMZ,A,C,TOL,VAP,LIQ /*DECLARACION DE
VARIABLES DE TIPO REAL
CHARACTER(LEN=30),ALLOCATABLE,DIMENSION(:)::COMP /*DECLARACION DE VECTOR QUE GUARDA
CARACTERES
REAL(KIND=2),ALLOCATABLE,DIMENSION(:,:)::TABL /*DECLARACION DE LA MATRIZ QUE
ALMACENARA LAS OPERACIONES

/*INICIALIZACION DE LAS VARIABLES


SUMZ=0
SUMDF=0
SUMF=0
SUMX=0
SUMY=0

OP=1 /*INICIALIZACION DE LA VARIABLE OP PARA QUE ENTRE AL CICLO

DO WHILE(OP==1) /*COMIENZO EL PRIMER CICLO HACER-MIENTRAS

/*MENSAJE EN PANTALLA
WRITE(*,*)"*******************************************************"
WRITE(*,*)"* PROGRAMA ELABORADO POR SIERRA MURILLO BRYAN DAVID *"
WRITE(*,*)"*******************************************************"
WRITE(*,*)
WRITE(*,*)"ESTE PROGRAMA CALCULA EL EQUILIBRIO LIQUIDO-VAPOR DE LA SIGUIENTE
MEZCLA"
WRITE(*,*)"APLICANDO EL METODO DE NEWTHON-RHAPSON"
WRITE(*,*)
WRITE(*,*)"**** NOTA:SI EL NOMBRE DE TUS COMPONENTES REQUIERE DE 2 O MAS PALABRAS"
WRITE(*,*)"PONER DICHO NOMBRE ENTRE COMILLAS SIMPLE ' ' PARA NO PROVOCAR ERROR EN
EL"
WRITE(*,*)"PROGRAMA ****"
WRITE(*,*)
WRITE(*,*)"CUANTOS COMPONENTES SON: "
READ(*,*)N
WRITE(*,*)"------------------------------------------------"
ALLOCATE(COMP(N)) /*ALMACENA N Y LE DA EL TAMA�O AL VECTOR Y A LA MATRIZ
ALLOCATE(TABL(N,7))

CALL SYSTEM('CLS') /*BORRA PANTALLA

DO I=1,N /*SEGUNDO CICLO PIDE Y ALMACENA EL NOMBRE DE LOS COMPONENTES

WRITE(*,*)"DAME EL NOMBRE DE TU COMPONENTE : ",I


WRITE(*,*)"------------------------------------------------"
READ(*,*)COMP(I)
WRITE(*,*)"------------------------------------------------"
END DO/* FIN DEL SEGUNDO CICLO

CALL SYSTEM('CLS')/*BORRA PANTALLA

/*INICIO DEL TERCER CICLO PIDE Y ALMACENA LOS VALOS DE Z Y K


DO I=1,N
WRITE(*,*)"------------------------------------------------"
WRITE(*,*)COMP(I)
WRITE(*,*)"------------------------------------------------"
WRITE(*,*)"DAME EL VALOR Z: "
READ(*,*)TABL(I,1)
WRITE(*,*)"------------------------------------------------"
WRITE(*,*)"DAME EL VALOR K DE TU COMPONENTE: "
READ(*,*)TABL(I,2)
SUMZ=SUMZ+TABL(I,1) /*REALIZA LA SUMA DE N FILA PRIMERA COLUMNA Y LO GUARDA EN
SUMZ
CALL SYSTEM('CLS')
END DO /*FIN DEL TERCE CICLO

/*PIDE AL USUARIO UNA V SUPUESTA Y UNA TOLERANCIA


WRITE(*,*)"DAME EL VALOR DE TU V (SUPUESTA): "
READ(*,*)VSUP
TABL(1,5)=VSUP
WRITE(*,*)"------------------------------------------------"
WRITE(*,*)"DAME EL VALOR DE TU TOLERANCIA: "
READ(*,*)TOL

CALL SYSTEM('CLS') /*BORRA PANTALLA

C=N /*ASIGNAMOS VALOR A C PARA QUE ENTRE AL CICLO

/*SEGUNDO DO WHILE
DO WHILE(C>TOL)

DO I=1,N /*PRIMER CICLO

/*OPERACIONES A REALIZAR
TABL(I,3)=(TABL(I,1)*(TABL(I,2)-1))/(1+((TABL(I,2)-1)*TABL(1,5))) /* f(V)
TABL(I,4)=(TABL(I,1)*((TABL(I,2)-1)**2))/(1+((TABL(I,2)-1)*TABL(1,5)))**2 /*F(V)
SUMDF=SUMDF+TABL(I,4)
SUMF=SUMF+TABL(I,3)
END DO /*FIN DEL PRIMER CICLO

/*VALORES QUE QUEDAN FUERA DEL PRIMER CICLO PARA NO GENERAR VALORES ERRONEOS TRAS
SU OPERACION
A=TABL(1,5)
TABL(1,5)=TABL(1,5)-(SUMF/(-SUMDF))
C=ABS(TABL(1,5)-A)

DO I=1,N /*INICIO DEL SEGUNDO CICLO

/*OPERACIONES A REALIZAR
TABL(I,6)=TABL(I,1)/(1+(TABL(I,2)-1)*TABL(1,5)) /*Xi
TABL(I,7)=(TABL(I,2)*TABL(I,1))/(1+((TABL(I,2)-1)*TABL(1,5))) /*Yi

END DO /*FIN DEL SEGUNDO CICLO

/* SE INICIALIZA LOS VALORES DE NUEVO PARA QUE REALIZE LA NUEVA SUMA DE LA


SIGUIENTE ITERACION
SUMDF=0
SUMF=0

END DO /*FIN DEL SEGUNDO DO WHILE

CALL SYSTEM('CLS') /*BORRA PANTALLA


/*ASIGNA LOS VALORES FINALES DESPUES DE TERMINAR LAS ITERACIONES
VAP=TABL(1,5)
LIQ=1-VAP

/*INICIO DEL TERCE DO-WHILE


DO WHILE (OP==1)

/*MANDA MENSAJE EN PANTALLA "MENU DE OPCIONES"


WRITE(*,*)"*******************************************************"
WRITE(*,*)"* PROGRAMA ELABORADO POR SIERRA MURILLO BRYAN DAVID *"
WRITE(*,*)"*******************************************************"
WRITE(*,*)
WRITE(*,*)"DIGITA EL NUMERO DE LA OPCION QUE QUIERES QUE SE TE MUESTRE"
WRITE(*,*)"1) MOSTRAR LOS VALORES DE f(v)"
WRITE(*,*)"2) MOSTRAR LOS VALORES DE f'(V)"
WRITE(*,*)"3) MOSTRAR Xi"
WRITE(*,*)"4) MOSTRAR Yi"
WRITE(*,*)"5) MOSTRAR %VAPOR Y %LIQUIDO"
WRITE(*,*)"6) MOSTRAR SUMA Z"
WRITE(*,*)
WRITE(*,*)"RESPUESTA: "
READ(*,*)OP
CALL SYSTEM('CLS')

/*SEGUN SEA EL VALOR INGRESADO REALIZARA DICHAS INSTRUCCIONES


SELECT CASE(OP)

CASE(1) /*CASO 1
SUMF=0 /*SE ASIGNA EL VALOR A SUM=0 POR SI EL USUARIO DESEA REIMPRIMIR EL
VALOR
WRITE(*,*)"VALORES DE f(v)"

DO I=1,N /*CICLO DO
WRITE(*,*)"------------------------------------------------"
/*IMPRIME EL NOMBRE DE LOS COMPONENTES GUARDADOS EL VECTOR DE CARACTERES
WRITE(*,*)COMP(I)
/*SUMA E IMPRIME LOS ULTIMOS VALORES OBTENIDOS TRAS EL FIN DE LAS ITERACIONES
SUMF=SUMF+TABL(I,3)
WRITE(*,*)TABL(I,3)
END DO
WRITE(*,*)"------------------------------------------------"
WRITE(*,*)"LA SUMA DE f(v): ",SUMF

CASE(2) /*CASO 2
/*ASIGNAMOS VALOR EN CASO DE QUE EL USUARIO DESEE REIMPRIMIR DICHO VALOR
SUMDF=0
WRITE(*,*)"VALORES DE f'(v)"

DO I=1,N /*CICLO DO
WRITE(*,*)"------------------------------------------------"
/*IMPRIME EL NOMBRE DE LOS COMPONENTES
WRITE(*,*)COMP(I)
/*SUMA E IMPRIME LOS ULTIMOS VALORES OBTENIDOS TRAS EL FIN DE LAS ITERACIONES
SUMDF=SUMDF+TABL(I,4)
WRITE(*,*)TABL(I,4)

END DO/* FIN DEL CICLO


WRITE(*,*)"------------------------------------------------"
WRITE(*,*)"LA SUMA DE f'(v): ",-SUMDF /*IMPRIME SUMA

CASE(3) /*CASO 3
/*ASIGNA EL VALOR EN CASO DE QUE EL USUARIO QUIERA REIMPRIMIR EL VALOR
SUMX=0
WRITE(*,*)"VALORES DE Xi"

DO I=1,N /*INICIO DE CICLO


WRITE(*,*)"------------------------------------------------"
/*IMPRIME LOS NOMBRES DE LOS COMPONENTES
WRITE(*,*)COMP(I)
/*SUMA E IMPRIME LOS ULTIMOS VALORES OBTENIDOS TRAS EL FIN DE LAS ITERACIONES
SUMX=SUMX+TABL(I,6)
WRITE(*,*)TABL(I,6)

END DO
WRITE(*,*)"------------------------------------------------"
WRITE(*,*)"LA SUMA DE X: ",SUMX /*IMPRIME SUMX

CASE(4) /*CASO 4
/*ASIGNA EL VALOR EN CASO DE QUE EL USUARIO QUIERA REIMPRIMIR EL VALOR
SUMY=0
WRITE(*,*)"VALORES DE Yi"

DO I=1,N
WRITE(*,*)"------------------------------------------------"
/*IMPRIME EL NOMBRE DE LOS COMPONENTES
WRITE(*,*)COMP(I)
/*SUMA E IMPRIME LOS ULTIMOS VALORES OBTENIDOS TRAS EL FIN DE LAS ITERACIONES
SUMY=SUMY+TABL(I,7)
WRITE(*,*)TABL(I,7)

END DO
WRITE(*,*)"------------------------------------------------"
WRITE(*,*)"LA SUMA DE Y: ",SUMY /*IMPRIME SUMY

CASE(5) /*CASO 5
/*IMPRIME LOS VALORES FINALES DE FRACCION DE VAPOR Y LIQUIDO
WRITE(*,*)"EL VALOR DEL % DE VAPOR ES: ",VAP
WRITE(*,*)"------------------------------------------------"
WRITE (*,*)"EL VALOR DEL % DE LIQUIDO ES: ",LIQ

CASE(6) /*CASO 6

WRITE(*,*)"------------------------------------------------"
WRITE(*,*)"LA SUMA DE Z ES: ",SUMZ

END SELECT /* FIN DE SELECCION DE CASOS

/*IMPRIME MENSAJE EN PANTALLA

WRITE(*,*)"------------------------------------------------"
WRITE(*,*)
WRITE(*,*)"DESEAS IMPRIMIR OTRO VALOR (DIGITA EL NUMERO)"
WRITE(*,*)"1) SI"
WRITE(*,*)"2) NO"
WRITE(*,*)"RESPUESTA: "
READ(*,*)OP
CALL SYSTEM('CLS')

END DO /* FIN DEL TERCER DO-WHILE

/*IMPRIME MENSAJE EN PANTALLA


WRITE(*,*)"------------------------------------------------"
WRITE(*,*)
WRITE(*,*)"DESEAS REPETIR EL PROGRAMA (DIGITA EL NUMERO)"
WRITE(*,*)"1) SI"
WRITE(*,*)"2) NO"
WRITE(*,*)"RESPUESTA: "
READ(*,*)OP
CALL SYSTEM('CLS')

DEALLOCATE(TABL) /*BORRA LO DATOS ALMACENADOS EN EL ARREGLO

END DO /*FIN DEL PRIMER DO-WHILE

END PROGRAM /*FIN DEL PROGRAMA

S-ar putea să vă placă și