2017-05-27 6 views
0

Ich habe ein 10x10 Array mit zufälligen Werten gemacht. Fortran 90.Wie teilt man ein Array in Fortran?

bearbeiten Verwendung: fand ich eine Lösung für mein Problem, geht es hinzuzufügen, wenn es in einem vorzeigbaren Zustand befindet.

 real :: x 
     integer, dimension(10,10) :: matrix 
     integer d,f,j,sum 

     do d=1,10 
      do f=1,10 
       call RANDOM_NUMBER(x) 
       j = FLOOR(10*x) 
       matrix(d,f) = j 
       sum= sum + j 
       write(*,*)'RND number', matrix(d,f) 
      end do 
     end do 
     write(*,*)'Sum of all elements in the array: ', sum 

Nun, was ich tun möchte, ist - 2 neuen Arrays erstellen array1 und array2 genannt, würden sie beiden 5x10 und enthalten Spalten 1-5 und 6-10 der ursprünglichen Anordnung.

Dieses Problem, das ich habe, ist ein Schritt in einer größeren Aufgabe, die das Senden der neuen Arrays zu Slave-Knoten (mit MPI), einige Arbeit mit ihnen und Senden von Ergebnissen zurück zum Master-Knoten beinhaltet. Aber das ist für diese Frage nicht möglich.

+0

in der Stimmung Ich bin nicht für Sie Ihre Hausaufgaben tun, wenn Sie sich die Zeit nehmen zu Zeigen Sie ein Beispiel, in dem Sie versuchen, das Array auseinander zu brechen und stecken bleiben. – Holmz

+0

Ich entschied mich dagegen, weil keiner meiner Ansätze kompiliert wurde. Und ich fühlte mich von Fortran-Veteranen in Stücke gerissen. Ich habe eine einfache Lösung gefunden, ich verwende Array-Dimensionen als Parameter und einfach durch alle Elemente in den ersten 5 Spalten und dann die letzten 5 Spalten. Ich dachte, ich müsste separate Arrays erstellen, aber eigentlich nicht. Ich werde eine Antwort posten, wenn meine Lösung ein bisschen mehr poliert ist. – afaf12

+0

* "Ich entschied mich dagegen, weil keiner meiner Ansätze kompiliert wurde. Und ich fühlte mich von Fortran-Veteranen in Stücke gerissen." * Wir kommen hierher, weil wir Menschen mit ihrem Code wirklich helfen wollen. Wir wollen einfach nicht ihren Code für sie schreiben. Wenn Sie einfach unerwünschte Ratschläge über Ihren Codierungsstil vermeiden wollen (was ich eher nenne), können Sie das einfach sagen. –

Antwort

1

Das nächste Mal Post, was du getan hast ...

integer, dimension(10,10) :: matrix 
integer, dimension(10, 5) :: trunk 
integer, dimension(10, 5) :: tail 

... 
trunk = matrix(:, 1: 5) 
tail = matrix(:, 6:10) 

Oder ... vielleicht könnte EQUIVALENCE arbeiten, was würden Sie müssen versuchen, wie ich es falsch haben ...

EQUIVALENCE (Matrix,Trunk), (Tail,Matrix(6,1)) 

@Vladimir sagte: "Wenn Sie einfach unerwünschte Ratschläge über Ihren Programmierstil (den ich zu geben tendieren) vermeiden wollen, können Sie das einfach sagen." und ich kann dasselbe tun.

SUM ist definitiv entweder ein PURE oder PURE ELEMENTAL intrinsisch.
Ich bin nicht sicher RANDOM_NUMBER ...
Aber das kann mehr stylish sein, wie Sie die Schlaufen weglassen:

Matrix = RANDOM_NUMBER(x) 
WHERE (Matrix <= <somefloor>)... 
mySum = SUM(Matrix) 
+1

Ich bin nicht sicher, Äquivalenz ist immer eine gute Lösung für ein Fortran-Coding-Problem in diesen Tagen. Ich bin mir ziemlich sicher, dass es keine gute Lösung für diese Frage ist. –

+0

Ich markiere diesen Kommentar auf @HighPerformanceMark. ;) – Holmz

Verwandte Themen