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 „Danke Sehr! Ich habe wirklich im Moment erst mal nur rumprobiert. Wollte nur mal...“
Optionen

Wie ich bereits sagte, kann ich zwar programmieren,
kenne mich aber mit Fortran überhaupt nicht aus.

In C gibt jede Menge fertige Funktionen in den
Standard Bibliotheken wie z. B. fgets() zum Lesen einer
ganzen Dateizeile und atof() zum Umwandeln von ASCII nach Float.

Vermutlich gibt es was entsprechendes auch in Fortran,
das mußt Du eben in der Doku nachsehen.
Falls nicht, kann man sich diese Funktionen auch
selber bauen, ist eben etwas mehr Arbeit ....

Hier eine kleine Beschreibung der Funktionsprinzipien.

Das Umwandeln von Strings in Zahlen funktioniert ganz
grob beschrieben ungefähr so:

Computer speichern Informationen als Bits und Bytes.
1 Bit ist die kleinste Informationseinheit und kann
2 Zustände darstellen.
1 Byte ist die Zusammenfassung von 8 Bits und kann damit
2 ^ 8 = 256 Zustände darstellen.

ASCII = American Standards Committee for Information Interchange

Jedes ASCII Zeichen wird intern als eine Zahl gespeichert.
Der 8 Bit ASCII Code kann damit theoretisch 256 verschiedene
Zeichen darstellen.
In dieser Tabelle hat das Zeichen "0" den internen Wert von 48
und die "9" den internen Wert von 57.
Um den Ziffernwert aus einem Buchstaben zu errechnen,
brauchst Du also nur 48 vom ASCII Code abzuziehen und danach
prüfen, ob das Ergebnis zwischen 0 und 9 liegt.
(Ansonsten war es keine Zahl, sondern ein anderes Zeichen)

Beispiel:
Aus "123" machst Du damit 3 Werte 1, 2, 3.
Du musst dann die Stelle mitzählen, die Einzelziffern mit der
entsprechenden 10er Potenz multiplizieren und die
Teilergebnisse addieren.
1*100 + 2*10 + 3 = 123

Bei Kommazahlen oder Werten in Exponentialdarstellung
ist das Ganze natuerlich etwas komplizierter.


Das Lesen aus einer Datei kann z. B. ungefähr so aussehen:

Zuerst einen Lesepuffer vom Typ String / CHAR groß genug
zum Aufnehmen der längsten Zeile in der Eingabedatei deklarieren
und auf 0 initialisieren.
Dann eine CHAR Variable zum Lesen einzelner Buchstaben.
Mit dieser CHAR Variable Buchstabe für Buchstabe einlesen
und diesen Wert an den String anhängen.
Hat sie den Wert 10, ist es ein LineFeed (LF).
Hat sie den Wert 13, ist es ein Carriage Return (CR).
MS- DOS Dateien haben am Zeilenende ein CR/LF,
Unix Dateien nur ein LF.
Wenn Du ein Zeilenende gefunden hast,
musst Du den String nach Zahlen absuchen und konvertieren.
Danach den Puffer wieder auf 0 initialisieren und weiter einlesen.
Das Dateiende wird durch ASCII 26 (EOF) markiert.


Ich würde mich allerdings sehr wundern, wenn es keine
Standardfunktionen für die Aufgabenstellung gäbe.

Viel Spaß, vergisses

bei Antwort benachrichtigen