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:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
|
PROGRAM avg
IMPLICIT NONE
INTEGER :: i, anzahl = 0, zahl_kleiner, zahl_groesser, zahl_aus, IO_ERROR
REAL :: minimum_wert, maximum_wert, mittelwert, standardabweichung
REAL :: ausreisser_u, ausreisser_o
INTEGER, DIMENSION(1) :: minimum_ort, maximum_ort
CHARACTER (LEN = 50) :: infile
REAL :: x
REAL, ALLOCATABLE, DIMENSION(:) :: wert
write(*,*) 'Welche Datei soll geoeffnet werden?'
READ (*,*) infile
OPEN (UNIT = 30, FILE = infile, STATUS = 'OLD', ACTION = 'READ', IOSTAT = IO_ERROR)
IF (IO_ERROR /= 0) THEN
WRITE (*,*) 'Konnte ', TRIM(infile), 'nicht oeffnen.'
STOP
END IF
DO
READ (Unit = 30, FMT = *, IOSTAT = IO_ERROR) x
IF (IO_ERROR /= 0) EXIT
anzahl = anzahl + 1
END DO
write (*,*) 'Zahl der Werte in der Datei:', anzahl
ALLOCATE (wert(anzahl), STAT= IO_ERROR)
IF (IO_ERROR /= 0) THEN
WRITE(*,*) 'Konnte Wert(:) nicht alloziieren'
STOP
END IF
REWIND (UNIT = 30)
DO i = 1, anzahl
READ(UNIT = 30, FMT = *) x
wert(i) = x
END DO
minimum_wert = MINVAL(wert)
minimum_ort = MINLOC(wert)
maximum_wert = MAXVAL(wert)
maximum_ort = MAXLOC(wert)
mittelwert = SUM(wert)/anzahl
standardabweichung = sqrt(1.0/(anzahl-1.0)*SUM((wert-mittelwert)**2))
zahl_kleiner = COUNT(wert < mittelwert)
zahl_groesser = COUNT(wert > mittelwert)
ausreisser_u = mittelwert - 3.0* standardabweichung
ausreisser_o = mittelwert + 3.0* standardabweichung
zahl_aus = COUNT(wert < ausreisser_u) + COUNT(wert > ausreisser_o)
WRITE(*,*) 'Das Minimum ist:', minimum_wert
WRITE(*,*) 'Das Ort des Minimums ist:', minimum_ort
WRITE(*,*) 'Das Maximum ist:', maximum_wert
WRITE(*,*) 'Der Ort des Maximums ist:', maximum_ort
WRITE(*,*) 'Der Mittelwert ist:', mittelwert
WRITE(*,*) 'Die Standardabweichung ist:', standardabweichung
WRITE(*,*) 'Anzahl der Werte kleiner als der Mittelwert:', zahl_kleiner
WRITE(*,*) 'Anzahl der Werte groesser als der Mittelwert:', zahl_groesser
WRITE(*,*) 'Anzahl der Ausreisser:', zahl_aus
CLOSE(UNIT=30)
DEALLOCATE(wert)
STOP
END PROGRAM avg
|