A voir également:
- Importation de matrice sous fortran
- Echec d'importation story instagram ✓ - Forum Samsung
- Diagonale secondaire d'une matrice - Forum C
- Exemple matrice de flux firewall excel - Forum Réseau
- Vous ne pouvez pas modifier une partie de matrice ✓ - Forum Excel
- Pas modifier une partie de matrice - Forum Excel
6 réponses
DIMENSION MATR(3,3)
IUNIT = 10
OPEN(IUNIT,NAME='truc.txt',ERR=label1)
C --- Remplissage par ligne (1,1), (1,2), (1,3), (2,1), (2,2), ...
READ(IUNIT,*[,ERR=label]) (((MATR(I,J),J=1,3),I=1,3)
où "*" = format automatique (valeurs séparées par un espace au moins,
sinon format en "Iw","Fw.d","Ew.d" avec facteur de multiplication, comme indiqué dans tout bon manuel
IUNIT = 10
OPEN(IUNIT,NAME='truc.txt',ERR=label1)
C --- Remplissage par ligne (1,1), (1,2), (1,3), (2,1), (2,2), ...
READ(IUNIT,*[,ERR=label]) (((MATR(I,J),J=1,3),I=1,3)
où "*" = format automatique (valeurs séparées par un espace au moins,
sinon format en "Iw","Fw.d","Ew.d" avec facteur de multiplication, comme indiqué dans tout bon manuel
Bonjour,
Je débute en fortran 77 et je rencontre quelques problèmes. Je souhaite écrire un matrice de zéro de plusieurs lignes et de 32 colonnes dans un fichier texte mais je n'y arrive pas. J'ai essayé plusieurs techniques mais rien y fait.
J'ai d'abors écrit:
parameter (NBLIG=10,NBCOL=32)
real*8 matrice(NBLIG,NBCOL)
IL=0
IC=0
open(unit=1,file='matrice.dat',status='new')
6 write(1,2) (matrice(IL,1:NBCOL))
2 format(32(x,F8.5))
IL=IL+1
IF(IL.EQ.NBLIG) GOTO 3
GOTO 6
3 close (unit=1)
end
mais j'ai ce message d'erreur "Output statement overflows record". J'ai essayé d'utilisé iunit mais sans plus de succès.
Si quelqu'un sait comment je peux faire, pourrait-il m'envoyer quelque éléments de réponse....
merci d'avance
Je débute en fortran 77 et je rencontre quelques problèmes. Je souhaite écrire un matrice de zéro de plusieurs lignes et de 32 colonnes dans un fichier texte mais je n'y arrive pas. J'ai essayé plusieurs techniques mais rien y fait.
J'ai d'abors écrit:
parameter (NBLIG=10,NBCOL=32)
real*8 matrice(NBLIG,NBCOL)
IL=0
IC=0
open(unit=1,file='matrice.dat',status='new')
6 write(1,2) (matrice(IL,1:NBCOL))
2 format(32(x,F8.5))
IL=IL+1
IF(IL.EQ.NBLIG) GOTO 3
GOTO 6
3 close (unit=1)
end
mais j'ai ce message d'erreur "Output statement overflows record". J'ai essayé d'utilisé iunit mais sans plus de succès.
Si quelqu'un sait comment je peux faire, pourrait-il m'envoyer quelque éléments de réponse....
merci d'avance
En Fortran, par défaut, les tableaux ou les matrices ont des indices commençant à 1.
Dans tes ordres d'écriture, tu utilises l'indice IL, initialisé à 0, ce qui cherche à accéder à une zone mémoire hors de la matrice. Si cette zone est protégée, il appaîtra un message du style "access violation". Sinon, le résultat sera n'importe quoi, mais sans rien qui le signale !
Chaque enregistrement en sortie occupe 32 x 9 octets soit 288 octets. Il faut sans doute préciser une taille d'enregistrement logique dans l'ordre OPEN (vérifier dans le manuel, si cette taille n'est pas limitée à 256).
Voilà un peu comment j'aurais écrit ce bout de code (tout en majuscules, ajout de commentaires, alignement et/ou indentation, ...) ... bien que n'ayant pas touché au Fortran depuis plus de 10 ans :
NB : le forum permet de "conserver la mise en forme du texte sélectionné".
Dans tes ordres d'écriture, tu utilises l'indice IL, initialisé à 0, ce qui cherche à accéder à une zone mémoire hors de la matrice. Si cette zone est protégée, il appaîtra un message du style "access violation". Sinon, le résultat sera n'importe quoi, mais sans rien qui le signale !
Chaque enregistrement en sortie occupe 32 x 9 octets soit 288 octets. Il faut sans doute préciser une taille d'enregistrement logique dans l'ordre OPEN (vérifier dans le manuel, si cette taille n'est pas limitée à 256).
Voilà un peu comment j'aurais écrit ce bout de code (tout en majuscules, ajout de commentaires, alignement et/ou indentation, ...) ... bien que n'ayant pas touché au Fortran depuis plus de 10 ans :
PARAMETER (NBLIG=10,NBCOL=32) REAL*8 MATRICE(NBLIG,NBCOL) C --- Remplissage de la matrice C (ne pas compter sur le chargement du programme par la machine) DO 20 IL = 1, NBLIGN DO 10 IC = 1, NBCOL MATRICE(IL,IC) = 0. 10 CONTINUE 20 CONTINUE C --- Sauvegarde sur fichier : OPEN(UNIT=1,FILE='matrice.dat',STATUS='new') C DO 100 IL = 1,NBLIGN C WRITE(1,2) (MATRICE(IL,IC),IC=1,NBCOL)) C 100 CONTINUE C --- la même chose que ci-dessus en plus compact : WRITE(1,2) ((MATRICE(IL,IC),IC=1,NBCOL),IL=1,NBLIG) CLOSE (UNIT=1) 2 FORMAT(32(X,F8.5)) END
NB : le forum permet de "conserver la mise en forme du texte sélectionné".
Merci pour ces informations et le code que tu m'a fourni est très bien mais il ne résout pas le problème car j'ai le même message d'erreur. Comme tu l'as dit, c'est la taille des données en sortie qui pose un problème. Malheureusement, je suis obligé d'utiliser ce format de sortie. Sais-tu si il existe un moyen d'augmenter la taille d'enregistrement logique dans l'ordre OPEN?
Merci d'avance
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Si le langage est à peu près universel, il n'en est pas de même de l'implémentation des fichiers et de leurs fonctions d'accès depuis un langage évolué (non visibles du programmeur), qui dépendent de chaque machine ("machine dependant").
Il faut donc consulter le "Programmer's guide" correspondant, et notamment les chapitres récapitulant les messages d'erreur.
A défaut d'en avoir sous la main, on peut en trouver sur Internet, avec les mots-clés "programmer's guide" Fortran {type-de-machine}...
Exemple de paramètres de la directive "OPEN" :
où
* RECL permet d'introduire la taille de l'enregistrement.
* FORM permet d'indiquer que le fichier contiendra de l'ASCII (ou autre), sinon ce sera du "binaire" (= image mémoire des nombres). double précision)
Il faut donc consulter le "Programmer's guide" correspondant, et notamment les chapitres récapitulant les messages d'erreur.
A défaut d'en avoir sous la main, on peut en trouver sur Internet, avec les mots-clés "programmer's guide" Fortran {type-de-machine}...
Exemple de paramètres de la directive "OPEN" :
OPEN( 21, ..., RECL={en octets}, FORM='FORMATTED')
où
* RECL permet d'introduire la taille de l'enregistrement.
* FORM permet d'indiquer que le fichier contiendra de l'ASCII (ou autre), sinon ce sera du "binaire" (= image mémoire des nombres). double précision)
23 avril 2002 à 09:01