2017-08-16 2 views
1

Ich versuche, einen Datenblock zugreifen zu können, so wie es ist, definieren, wieDatenbaustein Fortran 77 Klärung

 DATA NAME /'X1','X2','X3','X4','X5','X6','X7','X8','X9','10','11',00028650 
    1'12','13','14','15','16','17','18','19','20','21','22','23','24'/ 00028660 

folgt Der Code auf dem Papier. Beachten Sie, dass dies ein alter Code ist. Ich versuche nur zu verstehen, wie das Array indiziert wird. Ich versuche nicht, es zu kompilieren.

Die Art und Weise zugegriffen wird, ist wie folgt

I = 0 
Loop 
    I = I + 1 
    write (06,77) (NAME(J,I),J=1,4) //this is inside a write statement. 
end loop       //77 is a format statement. 

nicht sicher, wie es indiziert wird, wenn ihr könnt etwas Licht, das wäre toll.

+0

Sie müssen die Deklaration von 'name' anzeigen, damit wir dies vollständig verstehen und vollständigen Code und nicht Pseudocode angeben. Ich vermute jedoch, dass Sie eine _IO implizierte do loop_ haben. – francescalus

+0

@francescalus Ich habe den Code so gut wie möglich bearbeitet. Bitte sieh es dir an. Die Namen für Gespräche werden zwei Charaktere sein. Das ist, was ich im Code habe, ich habe es nur in Zahlen für den Zweck dieser Frage geändert. – LionsFan

+0

Haben Sie etwas wie 'Charakter * 2 Name (4,6)'? – francescalus

Antwort

1

Die Syntax (expr, intvar=int1,int2[,int3]) bezieht sich weithin auf eine implizierte DO-Schleife. Es gibt mehrere Orte, an denen so etwas passieren kann, und eine Eingabe/Ausgabe-Anweisung ist ein solcher Ort.

Eine implizierte DO-Schleife, die Expression expr mit der steuere ganzzahlige Variable intvar sequentiell die die Werte zunächst in Schritten von int1int3, bis der Wert erreicht ist int2/weitergegeben auswertet. Diese Schleifensteuerung ist genau so, wie man sie in einer do-Schleifenanweisung finden würde.

Bei der Frage, der Ausdruck name(j,i), die ganzzahlige Variable j ist die Schleifenvariable, die Werte zwischen den Grenzen 14 und nehmen. [Das Schrittweite wird int3 nicht so vorgesehen ist, wie 1 behandelt.] Die OUTPUT-Anweisung ist also genau wie

write(6,77) name(1,i), name(2,i), name(3,i), name(4,i) 

wie wir darauf hingewiesen, dass Elemente der implizierten Schleife um erweitert werden. i selbst stammt aus der Schleife, die diese Ausgabeanweisung enthält.

name hier auf eine Funktion beziehen, aber das Vorhandensein einer data Anweisung initialisiert es, muss es irgendwie als Rang-2 (Zeichen) Array deklariert werden gegeben. Die Initialisierung ist ansonsten nicht wichtig.

+0

können Sie im Fall von i = 1 weiter erklären, was wäre der Name (1, i) gleich und so weiter und warum? Was mich abschreckt ist, dass es wie ein 2D-Array aussieht. – LionsFan

Verwandte Themen