Fortran 77 Aufgabe - help needed.. - post aufs wesentliche gekürzt
-
Guten Tag,
folgende Programmieraufgabe:
--------------------------------------------------
Zwei Realzahlen A und B werden eingelesen.
Bilden sie n-mal den Quotienten A/B. Das Ergebnis wird nun n-mal mit B multipliziert, so dass sich wieder das Ergebnis A ergibt.Steigern Sie n von 1 bis nmax, wobei nmax die Anzahl der Divisionen/Multiplikationen ist, bei der sich eine Differenz zwischen dem ursprünglichen und neuem Wert von A ergibt.
Verhindern Die die Division durch 0 und A=B. In diesen Fällen soll erneut B eingegeben werden. Negative Vorzeichen bei der Eingabe sollen ignoriert werden.
Begrenzen sie nmax (z.B. < 1200) --> kontrollierter Abbruch mit entsprechender MeldungAusgabe: nmax, Aalt, Aneu (entsprechend kommentiert), Abschied mit "GOOD-BYE"
Probieren Sie mit dem Programm z.B. die Divisionen 1/3, 5/3, 10/2.
Erläutern Sie die Ergebnisse und erklären Sie die unterschiedlichen Resultate bei Verwendung der Datentypen Real*4 bzw. Real*8.--------------------------------------------------
Wenn ich die Aufgabe richtig verstehe muss ich solange hintereinander dividieren und später genauso oft dividieren bis sich die Variable A verändert ?
Wie realisiere ich dies in Fortran 77 ?
Wie lasse ich ihn immer wieder dividieren (bis maximal 1200 mal bzw. bis A einen anderen Wert hat) dann wieder multiplizierien (genauso oft) und jedesmal prüfen ? Das muss ja quasi so aussehen:(A /
* B
Prüfen ob a sich verändert hat
(A / B /* B * B
Prüfen ob a sich verändert hat
(A / B / B /* B * B * B
Prüfen ob a sich verändert hat
....
bis 1200 mal oder bis die Prüfung anschlägtWie krieg ich das in ne Fortran Schleife ?
--------------------
EDIT: Post reduziert auf das wesentliche
-
kein fortran77 progger mehr hier ?
warum muss ich mich auch mit sonem alten scheiss rumschlagen -.-
-
Vielleicht würden sich mehr Leute deinen Thread ansehen, wenn du ihn lesbarer formatieren würdest. Das Stichwort des Tages ist "Code-Tags"! Schließe deinen Code in [code ] und [/code ] (ohne Leerzeichen) ein. Sinnvoll fände ich auch eine Reduktion deines Beitrags auf das Wesentliche. Das ist schon recht viel zu lesen...
-
ok hab den post aufs wesentliche reduziert.
code ist nicht enhalten nur ne idee wie ich mir vorstelle wie er sein müsste...
daher auch nix im codeblock.mfg philipp
-
So hab grad eben mal etwas mit if und goto rumgespielt - mein Fortran 77 quellcode sieht momentan so aus:
C Name des Programms Program Ungenau C Automatische Variablendeklaration deaktivieren IMPLICIT NONE C Variablen deklarieren INTEGER n, nmax, X, Y REAL A,B,Aneu C Variablen initialisieren A = 0 B = 0 X = 0 Y = 0 Aneu = 0 n = 1 nmax = 1200 C Benutzereingabe anfordern WRITE (*,*) 'Bitte Variable A eingeben:' C Benutzereingabe als Variable a speichern READ (*,*) A C Benutzereingabe anfordern 10 WRITE (*,*) 'Bitte Variable B eingeben:' C Benutzereingabe als Variable b speichern READ (*,*) B C Fehlerkontrolle, falls Variable B der Zahl Null entspricht IF (B .EQ. 0) THEN C Textausgabe WRITE (*,*) 'B darf nicht Null oder A entsprechen- Wiederholung' C Sprung zurck zur Eingabe von Variable B GOTO 10 ELSE C Falls Variable A gleich Variable B ist IF (A .EQ. B) THEN C Textausgabe WRITE (*,*) 'B darf nicht Null oder A entsprechen- Wiederholung' C Spung zurck zur Eingabe von Variable B GOTO 10 ENDIF ENDIF C Den Wert der Variable A auf Aneu zuweisen Aneu = A C Solange n nicht nmax erreicht hat zu 200 springen 100 IF (n .LT. nmax) THEN GOTO 200 ELSE C Ausgabe der 3 Variablen falls Bedingung nicht erfllt WRITE (*,*) 'Variable nmax:',n WRITE (*,*) 'Variable Aalt:',A WRITE (*,*) 'Variable Aneu',Aneu C Sprung zum GOOD-BYE und Programmende GOTO 999 ENDIF C Zwei reele Zahlen auf gleichheit Prfen 200 IF (A .EQ. Aneu) THEN C Variable n bei jedem Durchlauf inkrementieren n = n + 1 GOTO 300 ELSE WRITE (*,*) 'Variable nmax:',n WRITE (*,*) 'Variable Aalt:',A WRITE (*,*) 'Variable Aneu',Aneu GOTO 999 ENDIF 300 IF (X .LT. n) THEN Aneu = Aneu / B X = X + 1 GOTO 300 ELSE GOTO 400 ENDIF 400 IF (Y .LT. n) THEN Aneu = Aneu * B Y = Y + 1 GOTO 400 ELSE GOTO 100 ENDIF 999 WRITE (*,*) '' WRITE (*,*) 'GOOD-BYE' C Programmende END
Kein schöner Programmierstil, aber scheint zu funktionieren..
Ich frage mich allerdings wie ich die Minuszeichen abfange ?
Noch ne IF Abfrage wo er nach dem minus fragt ?