Fortran - consulta variable dinamica usando archivos

 
Vista:
sin imagen de perfil

consulta variable dinamica usando archivos

Publicado por Gee (1 intervención) el 12/06/2015 01:39:43
Hola a todos, estoy aprendiendo a usa Fortran 95, y tengo un problemilla.

Es un programa sencillo en el que tengo que usar archivos de un vector y calcular la media y desviación estándar. usando subroutines, leyendo el archivo e imprimir los datos del vector... la cuestión es que antes he usado variable dinámica (la sentencia ALLOCATE) para una cantidad "N" de datos y normal no había problemas, solo que no sé cómo hacerlo ahora usando archivos porque si tuviese un fichero del cual no sé la cantidad de elementos que tiene, entonces cómo haría para abrirlo y hacer los cálculos. Les dejo mi código:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
PROGRAM Media_Desv_Archivos
IMPLICIT NONE
INTEGER::N
REAL,DIMENSION(20)::X !El vector tiene menos de 20 archivos
REAL::med,desvi
CALL Leer(X,N)
PRINT 10,N
10 FORMAT(1X,"Numero de datos:",I3)
PRINT*,""
PRINT*,"Datos:"
PRINT*,""
CALL Imprimir(X,N)
PRINT*,""
CALL Med_Desv(X,N,med,desvi)
PRINT*,""
PRINT 20,med
20 FORMAT(1x,"Media=",1x,F8.6)
PRINT*,""
PRINT 30,desvi
30 FORMAT(1x,"Desviacion Estandar=",1x,F8.6)
CONTAINS
SUBROUTINE Leer(x,n)
REAL,DIMENSION(20),INTENT(OUT)::x
INTEGER,INTENT(OUT)::n
INTEGER::i=1,istat
OPEN(UNIT=1,FILE="vector1.txt",STATUS="old",IOSTAT=istat)
DO
READ(1,*,IOSTAT=istat)x(i)
IF(istat/=0)EXIT
i=i+1
END DO
n=i-1
END SUBROUTINE Leer
SUBROUTINE Imprimir(x,n)
REAL,DIMENSION(N),INTENT(IN)::x
INTEGER,INTENT(IN)::n
INTEGER::i
DO i=1,n
WRITE(*,40)x(i)
END DO
40 FORMAT(3x,F8.6)
END SUBROUTINE Imprimir
SUBROUTINE MED_DESV(X,N,med,desvi)
REAL,DIMENSION(N),INTENT(in)::X
INTEGER,INTENT(IN)::N
REAL,INTENT(OUT)::med,desvi
INTEGER::I
REAL::s=0,d=0
DO I=1,N
S=S+X(I)
END DO
med=S/N
DO I=1,N
d=d+(med-X(I))**2
END DO
desvi=SQRT(d/N)
END SUBROUTINE
END PROGRAM
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder