Μονοδιάστατοι πίνακες (συνέχεια)
Άσκηση Να γράψετε πρόγραμμα που θα διαβάζει 5 πραγματικούς αριθμούς και θα τους τοποθετεί σε ένα μονοδιάστατο πίνακα 5 θέσεων και στη συνέχεια θα εκτυπώνει το ελάχιστο και το μέγιστο στοιχείο του πίνακα.
Α I=1(1)5 Διάβασε τα Α(Ι) MIN=A(1) MAX=A(1) I=2(1)5 A Αληθές ( I ) MAX MAX=A(I) Ψευδές A Αληθές ( I ) MIN MIN=A(I) Ψευδές Εμφάνισε τα ΜΙΝ, MAX T
PROGRAM MAXMIN IMPLICIT NONE INTEGER I REAL A(5),MAXT,MINT PRINT*, "ASSIGN NUMBERS FOR MATRIX : " READ*,(A(I),I=1,5)! Create matrix A(I)!------------------------------------------ MAXT=A(1) MINT=A(1)!------------------------------------------ DO I=2,5 IF (A(I)>MAXT) MAXT=A(I) IF (A(I)<MINT) MINT=A(I) END DO PRINT*,"Maximum=",MAXT,"func. Lib.=",MAXVAL(A) PRINT*,"Minimum=",MINT,"fun. Lib.=",MINVAL(A) END PROGRAM MAXMIN
Όνομα Συναρτήσεις του compiler Περιγραφή MAXLOC(όνομα πίνακα) MINLOC(όνομα πίνακα) MAXVAL(όνομα πίνακα) MINVAL(όνομα πίνακα) Υπολογίζει τη θέση του μέγιστου στοιχείου ενός πίνακα, πρδ. MAXLOC(A) υπολογίζει τη θέση του μέγιστου στοιχείου στον πίνακα Α. Υπολογίζει τη θέση του ελάχιστου στοιχείου ενός πίνακα, πρδ. MINLOC(A) υπολογίζει τη θέση του ελάχιστου στοιχείου στον πίνακα Α. Υπολογίζει το μέγιστο στοιχείο ενός πίνακα, πρδ. MAXVAL(A) υπολογίζει το μέγιστο στοιχείο του πίνακα Α. Υπολογίζει το ελάχιστο στοιχείο ενός πίνακα, πρδ. MINVAL(A) υπολογίζει το ελάχιστο στοιχείο του πίνακα Α.
Ταξινόμηση μονοδιάστατου πίνακα με τον αλγόριθμο Bubble Sort (ταξινόμηση) (ταξινομήσει τον πίνακα σε αύξουσα σειρά.)
Άσκηση Να γράψετε πρόγραμμα που θα διαβάζει μονοδιάστατο πίνακα 10 θέσεων. Στη συνέχεια θα τυπώνει αυτόν πίνακα καθώς και τον πίνακα που προκύπτει μετά την ταξινομήσει του σε αύξουσα σειρά.
program bubblesort implicit none integer I,J real A(10),temp print*,"assign value to the array A: " DO I=1,10 print*,"assign value to the ",I," element & & of the array" read*,a(i) END DO! Print numbers of matrix before bubble sort print*,(a(i),i=1,10) print*
! bubble sort DO I=1,9 DO J=I+1,10 IF (A(I)>A(J)) THEN! Se thfinousa sira IF(A(I)<A(J)) THEN temp=a(i) A(I)=A(J) A(J)=temp END IF END DO END DO! Print numbers of matrix after bubble sort print*,(a(i),i=1,10) end program bubblesort
Πίνακες δύο διαστάσεων
Δήλωση Τύπος μεταβλητής Όνομα Πίνακα(πλήθος στοιχείων, πλήθος στοιχείων) Παράδειγμα INTEGER I(3,3),J(0:2,0:2),K(-1:1,-1:1) REAL A(3,3),B(0:2,0:2) DOUBLE PRECISION A(3,3) INTEGER,DIMENSION(3,3)::I INTEGER,DIMENSION(0:2,0:2)::J INTEGER,DIMENSION(-1:1,-1:1)::K REAL,DIMENSION(3,3)::A REAL,DIMENSION(0:2,0:2)::B
Εισαγωγή δεδομένων σε πίνακα δύο διαστάσεων 1 ος Τρόπος με χρήση της εντολής DO-END Εισαγωγή κατά γραμμές REAL A(4,4) DO I=1,4 DO J=1,4 READ*,A(I,J) END DO END DO Εισαγωγή κατά στήλες REAL A(4,4) DO J=1,4 DO I=1,4 READ*,A(I,J) END DO END DO
2 ος Τρόπος REAL, DIMENSION(4,4) :: A READ*,((A(I,J),J=1,4),I=1,4)!Εισαγωγή κατά της γραμμής READ*,((A(I,J),I=1,4),J=1,4)!Εισαγωγή κατά της στήλης!read*,((a(i,j),j=1,3,2),i=1,2)!input data in A(1,1),A(1,3),A(2,1),A(2,3)!READ *,((A(I),J=2,0,-2),I=1,2)! Input data in A(1,2),A(1,0),A(2,2),A(2,0)
3 ος Τρόπος τοποθέτηση τιμών μέσα του προγράμματος DATA λίστα μεταβλητών /λίστα σταθερών/ INTEGER A(2,2) DATA A /1,2,3,4/ ή INTEGER A(2,2) DATA ((Α(Ι,J),J=1,2),I=1,2) /1,2,3,4/
Εκτύπωση των στοιχείων ενός δισδιάστατου πίνακα 1 ος Τρόπος με χρήση της εντολής DO-END Εκτ. κατά της γραμμής REAL A(4,4) DO I=1,4 DO J=1,4 PRINT*,A(I,J)! or WRITE(*,*) A(I,J) END DO END DO Εκτ. κατά της στήλης REAL A(4,4) DO J=1,4 DO I=1,4 PRINT*,A(I,J)! or WRITE(*,*) A(I,J) END DO END DO
2 ος Τρόπος PRINT*,((A(I,J),J=1,4),I=1,4)!Εκτύπ. κατά της γραμμής PRINT*,((A(I,J),I=1,4),J=1,4)!Εκτύπ. κατά της στήλης ή WRITE(*,*)((A(I,J),J=1,4),I=1,4)!Εκτ. κατά της γραμμής WRITE(*,*) ((A(I,J),I=1,4),J=1,4)!Εκτ. κατά της στήλης
Εισαγωγή και Εκτύπωση των στοιχείων ενός δισδιάστατου πίνακα program readprint2dim implicit none integer:: i,j real a(4,4)
do i=1,4 do j=1,4 print*,"assign value to the ",i,",",j,"element of the array" read*,a(i,j) do i=1,4 print* print*,(a(i,j),j=1,4) end program readprint2dim
Άσκηση Να γράψετε πρόγραμμα που θα διαβάζει δύο πίνακες Α και Β πραγματικών αριθμών, 3x2 και 2x3 αντίστοιχα, και θα υπολογίζει το γινόμενό (dot) τους. Το πρόγραμμα θα εκτυπώνει και τους τρείς πίνακες.
program AdotB implicit none integer::i,j,k real a(3,2),b(2,3),c(3,3) do i=1,3 do j=1,2 print*,"assign value to the ",i,",",j,"element of a:" read*,a(i,j)
do i=1,2 do j=1,3 print*,"assign value to the ",i,",",j,"element of the matrix b:" read*,b(i,j) do i=1,3 do j=1,3 c(i,j)=0.0 do k=1,2 c(i,j)=c(i,j)+a(i,k)*b(k,j)
! print*,"matrix a=" do i=1,3 print* print*,(a(i,j),j=1,2) print*,"matrix b=" do i=1,2 print* print*,(b(i,j),j=1,3)
!! print*,"matrix c=a.b= " do i=1,3 print* print*,(c(i,j),j=1,3) end program AdotB