IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

Fortran 77 :Plusieurs variables dans le read


Sujet :

Fortran

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Par défaut Fortran 77 :Plusieurs variables dans le read
    Bonjour à toutes et a tous ou plutot bonsoir, je suis débutant dans la programmation. Mon professeur m'a demandé de faire un programme excel simplifié en fortran 77.
    Et j'aimerais vous poser quelques petites questions
    Il faut en fait effectuer des opérations entre cellules et aussi placer des valeurs dans le tableau grace a une commande du type :

    TABLEUR> E6 = 4

    Jai essayé de faire un
    read(*,*) LIGNE,COLONNE = VALEUR
    mais jai un message d erreur...
    Jaimerai savoir comment placer plusieurs variables a la suite de mon read en fait.
    En espérant une réponse de votre part je retourne coder!
    Bonne soirée

  2. #2
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    Cà n'est pas très clair, ce que tu veux faire. Ce que je crois avoir compris :

    Tu définis un tableau de taille ligne x colonne, puis tu peux écrire une boucle de lecture. Quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
          INTEGER LIGNE, COLONNE, I, J
          PARAMETER (LIGNE = ce que tu veux)
          PARAMETER (COLONNE = ce que tu veux)
          INTEGER TABLEAU (LIGNE,COLONNE)
    ou    REAL TABLEAU (LIGNE,COLONNE)
          INTEGER I, J
     
          DO 10 I=1,LIGNE
          DO 10 J=1,COLONNE
            READ (*,*) TABLEAU(I,J)
    10    CONTINUE

    Si tu veux davantage d'aide, essaie de préciser un peu plus ce que tu veux.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Par défaut
    Tout d'abord merci de l'intérêt que vous avez bien vous voulu porter à ma question.
    Le but est, en fait, d'afficher cela à l'écran :

    TABLEUR>

    Ensuite si l'on veut effectuer une opération sur les cellules, il faut écrire par exemple :

    TABLEUR> E4 = 8
    Ce qui effectuerait le remplissage de la cellule E4 par un 8.

    J aurais bien fait un read(*,*) LIGNE,COLONNE, = VALEUR

    mais je crois que c'est impossible de mettre un signe = dans un read...
    J'ai fait autrement avec un format dans lequel j'ai écrit
    read(*,10) LIGNE, COLONNE, VALEUR
    10 format(X,I2,I2,X,'=',I2)

    T(LIGNE,COLONNE)=VALEUR
    les integer correspondant à LIGNE COLONNE et VALEUR
    Ca compile mais j ai une erreur de format quand j'écris dans mon read E4 = 8

    ca lance le tableau avec que des zéros dedans...
    Bonne soirée et joyeux noël à vous.

  4. #4
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    J'ai fait autrement avec un format dans lequel j'ai écrit
    read(*,10) LIGNE, COLONNE, VALEUR
    10 format(X,I2,I2,X,'=',I2)

    T(LIGNE,COLONNE)=VALEUR
    les integer correspondant à LIGNE COLONNE et VALEUR
    Ca compile mais j ai une erreur de format quand j'écris dans mon read E4 = 8
    Ben forcément.
    1) tu écris dans un read (=)
    2) E n'est pas un entier
    3) Il semble me souvenir que sous Excel la lettre correspond à la colonne et le chiffre à la ligne, donc il faut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    T(COLONNE,LIGNE)=VALEUR
    Je crois que si tu veux vraiment pouvoir entrer quelque chose comme :
    E4 = 8
    tu n'as pas d'autre choix que de lire une chaine de caractère "E4 = 8"
    puis d'extraire les caractères dont tu as besoin (E, 4 et 8) et de les
    convertir en entiers par ICHAR

    Quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
          . . .
          CHARACTER*6 C
          . . .
          READ (*,10) C           
    10    FORMAT (A)
          COLONNE = ICHAR (C(1:1)) - 64
          LIGNE = ICHAR (C(2:2)) - 48
          T(COLONNE,LIGNE) = ICHAR (C(6:6)) - 48 
          . . .
    Evidemment, c'est plus compliqué si tes valeurs ne sont pas des entiers positifs.

    Bon courage et joyeux Noël à toi aussi

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Par défaut
    Merci!! Ca marche super bien! J'aurais une autre question par contre !
    Etant donné que l'on doit simuler un tableur, on doit effectuer plusieurs opérations comme copier le contenu d une cellule et le coller dans une autre,
    additionner les données de plusieurs cellules, etc...
    Grace a vos conseils je vais pouvoir m en sortir je pense, mais je voudrais savoir autre chose.
    Le but c'est de réaliser une opération quand on le désire, vu que les commandes sont réalisées avec une chaine de caractere, comment je dois faire pour qu il effectue une opération et pas l autre.
    Je m'explique :
    TABLEUR>
    TABLEUR> E4 = 9
    Quand je fais ca il me met 9 dans la cellule E4
    mais si je définis la fonction copier par exemple et que j'écris :
    TABLEUR> COPIER A2
    Il faut que je définisse une autre chaine de caractere, CH2 et faire de meme que plus haut mais comment va-t-il reconnaitre la fonction COPIER ?
    Encore merci pour tous vos conseils, je vous souhaite de passer un joyeux noel et de bonnes fetes !

  6. #6
    Membre expérimenté Avatar de Grame
    Profil pro
    Inscrit en
    Août 2007
    Messages
    148
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Août 2007
    Messages : 148
    Par défaut
    Merci!! Ca marche super bien! J'aurais une autre question par contre !
    Bon, on avance.

    TABLEUR> COPIER A2
    Il faut que je définisse une autre chaine de caractere, CH2 et faire de meme que plus haut mais comment va-t-il reconnaitre la fonction COPIER ?
    Le principe est de simuler une (petite) analyse de la chaîne de caractères.
    Comme c'est Noël, je t'ai écrit un petit programme pour que tu comprennes bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
         PROGRAM EXCEL
          INTEGER MAXCOL, MAXLIG
          PARAMETER (MAXCOL = 2)
          PARAMETER (MAXLIG = 3) 
          INTEGER T(MAXCOL,MAXLIG)
          CHARACTER*255 OPERA
          CHARACTER*2 SOURCE,CIBLE
     
    C Initialisation du tableau avec n'importe quoi
          DATA T / 1, 0, 2, 0, 0, 0 /
     
          WRITE (*,*) 'TABLEAU INITIAL'
          CALL LIRET (T,MAXCOL,MAXLIG)
     
          WRITE (*,*) 'ENTRER L''OPERATION : '
          READ (*,'(A)') OPERA
          IF (OPERA(1:6) .EQ. 'COPIER') THEN
            SOURCE = OPERA(8:9)
            CIBLE = OPERA(11:12)
            CALL COPIET (T,MAXCOL,MAXLIG,SOURCE,CIBLE)
            CALL LIRET (T,MAXCOL,MAXLIG)
          END IF
     
          END
     
    C-----------------------------------------------------------------------
     
          SUBROUTINE INDCEL(I,J,C)
    C Convertit les indices I,J vers une cellule C
          INTEGER I,J
          CHARACTER*2 C
     
          C(1:1) = CHAR (I + 64) 
          C(2:2) = CHAR (J + 48)
     
          END      
     
    C-----------------------------------------------------------------------
     
          SUBROUTINE CELIND(C,I,J)
    C Convertit la cellule C en indices I,J      
          CHARACTER*2 C
          INTEGER I,J
     
          I = ICHAR (C(1:1)) - 64
          J = ICHAR (C(2:2)) - 48
     
          END
     
    C-----------------------------------------------------------------------
     
          SUBROUTINE LIRET (T,MAXCOL,MAXLIG)
    C Affiche le contenu du tableau
          INTEGER T(MAXCOL,MAXLIG), I, J
          CHARACTER*2 C
     
          DO 10 I=1,MAXCOL
          DO 10 J=1,MAXLIG
            CALL INDCEL(I,J,C)
            WRITE (*,11) C,T(I,J)
    10    CONTINUE
    11    FORMAT (T2,'Cellule ',A2,' = ',I1)
     
          END             
     
    C-----------------------------------------------------------------------
     
          SUBROUTINE COPIET (T,MAXCOL,MAXLIG,SOURCE,CIBLE)
    C Copie la valeur de la cellule SOURCE dans la cellule CIBLE
          INTEGER MAXCOL,MAXLIG,I1,I2,J1,J2
          INTEGER T(MAXCOL,MAXLIG)
          CHARACTER*2 SOURCE, CIBLE
     
          CALL CELIND (SOURCE,I1,J1)
          CALL CELIND (CIBLE,I2,J2)
          T(I2,J2) = T(I1,J1)
     
          END
    A l'exécution, ça donne :
    TABLEAU INITIAL
    Cellule A1 = 1
    Cellule A2 = 2
    Cellule A3 = 0
    Cellule B1 = 0
    Cellule B2 = 0
    Cellule B3 = 0
    ENTRER L'OPERATION :
    COPIER A1 B1
    Cellule A1 = 1
    Cellule A2 = 2
    Cellule A3 = 0
    Cellule B1 = 1
    Cellule B2 = 0
    Cellule B3 = 0
    Voili, voilà.

  7. #7
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    Mon professeur m'a demandé de faire un programme excel simplifié en fortran 77.
    Qu'est-ce que ça veut dire? A la limite, si c'est ton prof qui t'a demandé ça, change de prof!
    Jean-Marc Blanc

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 58
    Par défaut
    OK!! Merci beaucoup. En fait les subroutines permettent de renouveler les opérations et de réécrire le tableau des qu'une opération est effectuée. Je vais tester comme ca. Merci beaucoup, en effet c'est un joli cadeau de noel !!

Discussions similaires

  1. plusieurs variable dans une 'case'
    Par vanilla94 dans le forum Langage
    Réponses: 18
    Dernier message: 30/11/2006, 09h55
  2. [SQL] calcul de plusieurs variables dans une table
    Par guillaumeIOB dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 12/03/2006, 21h53
  3. [debutant]gérer plusieurs variables dans un for ?
    Par Merfolk dans le forum Débuter
    Réponses: 5
    Dernier message: 09/03/2006, 21h01
  4. Plusieurs variables dans Dim et Case??
    Par samlepiratepaddy dans le forum Access
    Réponses: 2
    Dernier message: 02/10/2005, 18h04
  5. envoyer plusieurs variables dans l'url?
    Par brgui dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/08/2005, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo