C'è qualche esperto

Stato
Discussione chiusa ad ulteriori risposte.

Eliade

Super Zitella Acida
C'è qualche esperto

...di fortran90 in giro? :(

So che questo treddì diventerà uno spammone unico, ma ci ho provato... :D
 

Tubarao

Escluso
Esperto di Fortran90 no. Esperto di programmazione si.

Tu chiedi magari ci e ti dice culo e riesco a risponderti.

Ne approfitto per farti gli auguri bella tonna :D
 

Sbriciolata

Escluso
qual'è il problema, acidona?
 

Sbriciolata

Escluso

Eliade

Super Zitella Acida
Allora, premesso che il problema l'ho semi bypassato operando in matlab, ma ho necessità di scrivere la procedura anche con fortran90 (eventualmente anche il 77, ma sono più pratica col 90).
Il problema è questo, ho 3 matrice (array bidimensionale) (mooolto grandi), ho necessità di trasformare queste matrici in vettori (array monodimensionali) e di metterli l'uno di fianco l'altro...nonché di salvarli in un file .dat. :eek:
Cioè voglio che la prima riga diventi una colonna (ordinatamente), sotto ci venga la seconda riga, trasformata in colonna e così via. :eek:

Ho fatto delle prove inserendo una matrice piccola 4x3, usando sia un doppio o trilpo ciclo DO, sia con una iterazione/sommatoria semplice, sia col comando reshape (che in matlab fa un lavoro fantastico) ma a display il fortran mi copia esattamente la stessa matrice...
Senza contare che ho problemi con la scrittura nel file di destinazione (mi dice che è troppo piccolo), vabè in questo caso magari avrò sbagliato io qualcosa di logico...
:(
 

Lionel Hutz

Utente di lunga data
Premesso che non conosco per niente la sintassi del Fortran 90.

Questo primo pezzetto dovrebbe funzionare per la creazione del vettore. NB: Le dimensioni le ho messe fisse, non dovrebbe essere un problema renderle parametriche.

Codice:
PROGRAM Tonna
INTEGER :: r, c, i     ! Contatori per i cicli 
INTEGER, DIMENSION(90000) :: vet
INTEGER, DIMENSION(100, 100) :: mat1
INTEGER, DIMENSION(100, 100) :: mat2
INTEGER, DIMENSION(100, 100) :: mat3
r = 0
c = 0
i = 0 
DO r = LBOUND(mat1, 1), UBOUND(mat1, 1)    ! Ciclo sulle righe della prima matrice
 DO c LBOUND(mat1, 2), UBOUND(mat1, 2)  ! Ciclo sulle colonne della prima matrice
  i = i + 1
  vet(i) = mat1(r, c)
 END DO
END DO 
r = 0
c = 0
DO r = LBOUND(mat2, 1), UBOUND(mat2, 1)    ! Ciclo sulle righe della seconda matrice
 DO c LBOUND(mat2, 2), UBOUND(mat2, 2)  ! Ciclo sulle colonne della seconda matrice
  i = i + 1
  vet(i) = mat2(r, c)
 END DO
END DO 
r = 0
c = 0
DO r = LBOUND(mat3, 1), UBOUND(mat3, 1)    ! Ciclo sulle righe della terza matrice
 DO c LBOUND(mat3, 2), UBOUND(mat3, 2)  ! Ciclo sulle colonne della terza matrice
  i = i + 1
  vet(i) = mat3(r, c)
 END DO
END DO
Per la parte della scrittura su file....aspetta. :D
 

Eliade

Super Zitella Acida
Premesso che non conosco per niente la sintassi del Fortran 90.

Questo primo pezzetto dovrebbe funzionare per la creazione del vettore. NB: Le dimensioni le ho messe fisse, non dovrebbe essere un problema renderle parametriche.

Codice:
PROGRAM Tonna
INTEGER :: r, c, i     ! Contatori per i cicli 
INTEGER, DIMENSION(90000) :: vet
INTEGER, DIMENSION(100, 100) :: mat1
INTEGER, DIMENSION(100, 100) :: mat2
INTEGER, DIMENSION(100, 100) :: mat3
r = 0
c = 0
i = 0 
DO r = LBOUND(mat1, 1), UBOUND(mat1, 1)    ! Ciclo sulle righe della prima matrice
 DO c LBOUND(mat1, 2), UBOUND(mat1, 2)  ! Ciclo sulle colonne della prima matrice
  i = i + 1
  vet(i) = mat1(r, c)
 END DO
END DO 
r = 0
c = 0
DO r = LBOUND(mat2, 1), UBOUND(mat2, 1)    ! Ciclo sulle righe della seconda matrice
 DO c LBOUND(mat2, 2), UBOUND(mat2, 2)  ! Ciclo sulle colonne della seconda matrice
  i = i + 1
  vet(i) = mat2(r, c)
 END DO
END DO 
r = 0
c = 0
DO r = LBOUND(mat3, 1), UBOUND(mat3, 1)    ! Ciclo sulle righe della terza matrice
 DO c LBOUND(mat3, 2), UBOUND(mat3, 2)  ! Ciclo sulle colonne della terza matrice
  i = i + 1
  vet(i) = mat3(r, c)
 END DO
END DO
Per la parte della scrittura su file....aspetta. :D
Sei il mio salvatore! Ancora più prezioso del suntore!! :inlove:
Allora Program tonna ci sta tutto....me lo merito! :rotfl:
Dichirazioni variabili e array ci siamo quasi...anche i cicli do, devo solo vedere se questo LBOUND funziona su microsoft visual studio... :unhappy:
Grazie...lo devo provare!

:bacio:
 
Ultima modifica:

Simy

WWF
io non c'ho capito una cippa
 

Eliade

Super Zitella Acida
Allora...qualcosa ha fatto...perché a diplay vettore e matrice li porta in modo differente. Devo solo capire se lo ha fatto ordinatamente. Ma credo debba riuscire a scrivere il file per vedere...

Lionel Hutz for president

:inlove::up::up::up::up::up:​
 

Eliade

Super Zitella Acida
Provando a stampare in modo diverso durante le iterazioni, si...lo fa in maniera ordinata.
Mi ero io dimenticata che il fortran legge i dati immessi per colonne e non per righe.

Lionel Hutz rulez!!!
 

Lionel Hutz

Utente di lunga data
Asp. Rileggendo bene la tua richiesta si dovrebbero fare dei piccoli cambiamenti.

Attualmente così come ho fatto io crea un unico grande array, rileggendo meglio mi sembra di capire che a te ne servano tre, uno per matrice.
 

Eliade

Super Zitella Acida
Asp. Rileggendo bene la tua richiesta si dovrebbero fare dei piccoli cambiamenti.

Attualmente così come ho fatto io crea un unico grande array, rileggendo meglio mi sembra di capire che a te ne servano tre, uno per matrice.
Guarda io ne ho provato solo uno (la procedura con mat1), inserendo una matrice 2x3 (1,2,3,4,5,6) e lui restituisce un vettore (1,3,5,2,4,6)....
 
Stato
Discussione chiusa ad ulteriori risposte.
Top