FORTRAN:Erreur de segmentation

Résolu
imen -  
 Tsubi -
Bonjour,
En fait j'ai à programmer en fortran un programme pour extraire une partie d'une matrice de taille (1440,400)
voici mon programme

PROGRAM MAIN
DOUBLE PRECISION :: tab(400,1440)
DOUBLE PRECISION ::trmm(68,210)
integer:: i,j,k,n
open(unit=29,file='input',STATUS='old')
DO j=1,1440
READ(29,*)(tab(i,j),i=1,400)
ENDDO
close(unit=29)
n=0
k=1
do j=680,890
do i=322,390
n=n+1
trmm(n,k)=tab(i,j)
enddo
n=1
k=k+1
enddo
OPEN(UNIT=1,FILE='output')
do j=1,210
write(1,*)(trmm(i,j),i=1,68)
enddo
END

Je pense que l'erreur est à ce niveau là
n=0
k=1
do j=680,890
do i=322,390
n=n+1
trmm(n,k)=tab(i,j)
enddo
n=1
k=k+1
enddo
Je recois l'errur lors de l'exécution "Erreur de segmentation"
SVP c trèèèèèèèèèèèès urgent vous pouvez m'aider à résoudre ce problème surtout que si je teste ce même programme pour une petite matice ça marche normalement!!!!
merci bcp
Configuration: Linux Fedora / Firefox 2.0.0.19

6 réponses

  1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    do j=680,890
    do i=322,390
    n=n+1
    trmm(n,k)=tab(i,j)
    enddo
    n=0
    k=k+1
    enddo

    Je pense. n doit prendre la valeur 69 à la fin de la deuxième boucle.
    Pour débuguuer, il faut imprimer tes valeurs d'indice et voir celle qui merde.
    2
  2. tsubi
     
    Bonjour,

    J'ai également une erreur de segmentation dans mon code fortran. Lors de l'exécution j'ai le message d'erreur "erreur de segmentation". J'en suis désespéré. C'est pourtant un code simple, je commence seulement à coder pour mes cours.

    program main
    implicit none

    integer tau,pc1,pc2,dc,t,dt,n
    real v(0:1),db,ve(0:1),pd(0:1000),pe(0:1000),pdo

    pc1=270
    pc2=370
    dc=pc2-pc1
    tau=5
    dt=1
    db=150
    pdo=200
    T=3000
    t=100

    OPEN(10,file='sahara.dat')
    v(0)=1.0
    n=0

    DO n=0,t
    pd(n)=pdo*(1-n/T)
    pe(n)=pd(n)+db*v(n)

    if (pe(n).GE.pc2) then
    ve(n)=1.0
    else if (pe(n).LE.pc1) then
    ve(n)=0.0
    else
    ve(n)=(pe(n)-pc1)/dc
    end if

    v(n+1)=(ve(n)-v(n))/tau+v(n)

    write(10,*)t,ve(n)

    END DO
    CLOSE(10)

    end program

    Je crois qu'il y a bcp de superflux, mais si dans tout ce superflux vous saviez au moins m'indiquer où se situe le problème, je vous serais vraiment reconnaissant.

    Merci
    0
  3. Hajer
     
    Pour commencer... Fortran ne fait pas la différence entre la majuscule et la miniscule !! Vous mettez deux variables différentes T et t mais vous êtes en train d'ecraser la 1 ère. Du coup la variable t a pour valeur 100 dans la suite de votre programme !!
    Vous pouvez voir ça (mettre deux noms différents) ! j'espère que ça marchera :)
    0
  4. tsubi
     
    Merci de me venir en aide. :)

    Malheureusement cela n'a rien changé... Mais je prends note du conseil pour mes futures applications.

    Je le compares à d'autres programe d'autres personnes et je ne vois pas dans ma structure où se situe le problème :s N'est-ce pas en rapport avec le tableau? Ou que le "t" est trop grand?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Imen
     
    Les deux tableau v et ve sont définis de dimension 2 alors qu'ils prennent des indices n>2 dans la boucle DO n=0,t
    v(0:1),ve(0:1),pd(0:1000),pe(0:1000),pdo

    J'ai essayé de mettre v(0,1000) et ve (0:1000) comme les autres déclarations au début du programme ... et ça tournait mais je ne sais pas trop pour votre calcul !
    0
  7. Tsubi
     
    Super! Merci! Ca a fonctionné. j'avais mal compris le concept :) maintenant c'est rectifié. Un grand merci!
    0