Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

FORTRAN: Maximalwert auslesen lassen... Anfänger!

Koch79 / 3 Antworten / Flachansicht Nickles

Hallo zusammen,


ich muss in Fortran 77 ein Programm schreiben, dass aus 2 Spalten eines Textdokumets die Maximlawerte ausließt. Die Spalten sind nur mit (3) Leerzeichen getrennt. Kann mir jemand eine Anweisung geben wie ich das angehen soll? ich bin ziemlicher Anfänger und habe mich gerade in die verschiedenen Datentypen eingearbeitet.


Desweiteren habe ich ein Programm geschrieben zum üben, dass ein Textdokument mit 4 Zahlen drin öffnet und die dann in einer neuen Datei abspeichert. Nur die Formatierung klappt nicht. Aus Zahlen werden immer seltsame Zeichen. 


z.BSP: àý à0   àý à0   àý à0   àý à0


Das Programm sieht so aus: (habe mal alle mir bekannten Datentypen getestet...)


CHARACTER DRU*10
 REAL A(150), B(150)
 INTEGER I,N
 PARAMETER (PAR=1)
 
 N=30
 
 OPEN(1,FILE='DRU_01.txt',STATUS='OLD')
 OPEN(2,FILE='aus.txt',STATUS='UNKNOWN') 
 OPEN(3,FILE='char.txt',STATUS='UNKNOWN')
 OPEN(4,FILE='par.txt',STATUS='UNKNOWN')
  
  DO  I=0,N
  
   READ(1) A(I)
   B(I)=A(I)
   WRITE(2) B(I)
   WRITE(3) DRU
   WRITE(4) PAR
  ENDDO
  
 CLOSE(1)
 CLOSE(2)
 CLOSE(3)
 
 END


 


Hier ein Auszug was in der DRU_01 Datei steht:


0.0000E+00  0.1624E+01
0.1000E+00  0.1576E+01
0.2000E+00  0.1624E+01
0.3000E+00  0.1624E+01
0.4000E+00  0.1576E+01


Könnt ihr mir helfen?????? BITTEEEEE


DANKE


 


 

bei Antwort benachrichtigen
vergisses Koch79 „FORTRAN: Maximalwert auslesen lassen... Anfänger!“
Optionen

Hallo koch79,

ich habe zwar noch nie in Fortran programmiert,
aber ein paar Tips kann ich Dir dennoch geben.

Erst mal eine Kurzanalyse Deines Programms:

Hier definierst Du ein paar Variablen
CHARACTER DRU*10
REAL A(150), B(150)
INTEGER I,N
PARAMETER (PAR=1)

Warum der String DRU 10 Zeichen lang ist und
warum die Arrays A und B auf 150 Einträge dimensioniert
sind, kann ich hier nicht nachvollziehen.
Vermutlich hast Du irgendwelche Größen genommen,
von denen Du annimmst, dass es damit funktioniert.

OPEN(1,FILE='DRU_01.txt',STATUS='OLD')
OPEN(2,FILE='aus.txt',STATUS='UNKNOWN')
OPEN(3,FILE='char.txt',STATUS='UNKNOWN')
OPEN(4,FILE='par.txt',STATUS='UNKNOWN')

Hier öffnest Du ein paar Files, erst mal
kein weiterer Kommentar.

N=30
DO I=0,N

READ(1) A(I)
B(I)=A(I)
WRITE(2) B(I)
WRITE(3) DRU
WRITE(4) PAR
ENDDO

Es wird 30 (oder 31) Mal eine Schleife durchlaufen.
Innerhalb der Schleife wird zunächst aus der Datei 'DRU_01.txt'
ein Wert in die REAL Variable A(I) gelesen,
an B(I) zugewiesen und in die Datei 'aus.txt'
geschrieben.

Die Schleife wird doch nur 30 Mal durchlaufen,
größer brauchen auch die Arrays nicht sein.

Warum verwendest Du überhaupt Arrays.
Hier würde eine einzige normale Variable REAL A ausreichen.

Änderst Du eigentlich jedesmal das Programm ab,
wenn die zu lesende Datei mehr bzw. weniger als 30 Zeilen hat ?

Anschließend schreibst Du, immer noch innerhalb der Schleife,
den Inhalt von DRU in die Datei 'char.txt'.
Die Variable DRU ist aber nur definiert worden und
ihr wurde niemals ein Inhalt/Wert zugewiesen.
Deshalb ist ihr Inhalt entweder zufällig
(Was eben vorher mal im RAM Chip an dieser Speicherfläche gestanden hat)
oder durch die Laufzeitumgebung auf logisch 0 gesetzt worden.
Jedenfalls schreibst Du 30 Mal einen nicht definierten Inhalt
nach 'char.txt', was so wie Dein Beispiel aus der Anfrage
aussehen könnte.

Vermutlich ist PAR der von der Kommandozeile übergebene
Parameter mit Default Wert 1, falls kein Parameter übergeben wurde.
Diesen Wert schreibst Du ebenfalls 30 Mal nach 'par.txt'.

CLOSE(1)
CLOSE(2)
CLOSE(3)

END

Am Schluss schließt Du die Dateien
(warum eigentlich nicht die 4. auch ?)
und beendest das Programm.

Noch eine Anmerkung zu Dateiinhalten.
Nach Deiner Beschreibung sind die Daten in 'DRU_01.txt'
im ASCII Format als String und nicht binär abgespeichert.
Deshalb mußt Du die Werte vermutlich auch als String
in eine String Variable einlesen, wobei der READ Befehl
wahrscheinlich immer nur ein Zeichen liest.
Wenn Du mit den Werten rechnen willst, mußt Du den String anschliessend
mit einer entsprechenden Funktion in REAL Zahlen konvertieren
und an eine REAL Variable zuweisen.


Fazit
Du solltest Dich nochmals mit den Datentypen, deren Verwendung
und Konvertierung auseinandersetzten.

Auch Deine Vorgehensweise bei der Problemanalyse und
Definition von Lösungsalgorythmen ist stark verbesserungswürdig.
Man bekommt den Eindruck, daß Du relativ ziellos mit den Dir bekannten
Sprachmitteln ausprobierst in der Hoffnung, irgendwann nach
X Versuchen auf eine halbwegs praktikable Lösung zu stoßen.
(Evolutionsprinzip durch zufällige Mutation).

Diese Anmerkungen sind wirklich nicht böse gemeint
und ich will hier auch niemanden "niedermachen".
Der Einstieg in die Programmierung ist nunmal nicht leicht.
Das Thema ist für viele Anfänger erst mal sehr abstrakt
und schwer zu packen.
Ich wollte Dir nur mal die Tatsachen vor Augen führen
und ein paar kleine Hinweise geben, die Dich evtl.
auf den richtigen Weg führen.

Gruss, vergisses

bei Antwort benachrichtigen