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 :

problème en program Fortran


Sujet :

Fortran

  1. #1
    Membre à l'essai
    Homme Profil pro
    information
    Inscrit en
    Décembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : information
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 17
    Points : 19
    Points
    19
    Par défaut problème en program Fortran
    bonjour tout le monde ....
    ils nous ont demandé d'écrire un programme en langage FORTRAN, recueille deux grands nombres atteignent leur paroxysme à 50 mots signifie ceci:
    111111111111111111111111111111 1111111111 ..... 11111111111
    S'il vous plaît noter que j'ai pour la première fois que j'écris un programme dans un langage FORTRAN (programmes très simples .. Tyro)
    Eh bien pensé programme saisir des numéros longs sous la forme d'un script (string) dans le sens .. Caractère (LEN = 50) :: a
    alors l'utilisateur met le numéro dans un: un 11111111111111 = ....
    Puis strabisme (transfert), ce chiffre par un code ASCII tableau des numéros
    Donc je fais avec l'autre numéro, puis se réunissent (Collecte) par les'' Boucle DO''
    Voici la tentative dans le programme ......... dans cette tentative j'utilise LEN = 2, mais ce programme ne fonctionne pas comme il le devrait parce que je n'ai aucune expérience Au fortron .. Je ne comprenais pas très bien le problème


    PROGRAMME TP
    caractère (LEN = 2) :: Nombre1
    caractère (LEN = 2) :: Nombre2
    caractère (LEN = 3) :: Nombre3
    entier n1, n2, RES1, RES2

    C
    read (*, *) nombre1
    read (*, *) nombre2
    res2 = 0

    faire i = 2, 1, -1
    n1 = Ichar (Nombre1 (i: i)) -48
    n2 = Ichar (Nombre2 (i: i)) -48

    RES1 = n1 + n2 + res2
    res2 = res1/10

    res1 = mod (res1, 10)
    nombre3 (i: i) = char (res1 + 48)
    enddo

    nombre3 (1:1) = char (res2 + 48)
    print *, "voila"
    write (*, *) nombre3


    PROGRAMME DE FIN TP

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Bonjour.
    La correction sur nombre3 après la boucle est de trop.
    Le programme fonctionne alors correctement avec 2 nombres de 2 chiffres.
    Ma proposition (en format fixe) :
    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
          PROGRAM TP
          character(LEN=2) :: Nombre1, Nombre2
          character(LEN=3) :: Nombre3
          integer :: n1, n2, res1, res2 = 0
     
          print '(a$)', "Entrez les 2 nombres : "
          read(*,*) nombre1, nombre2
     
          do i = 2, 1, -1
            n1 = Ichar(Nombre1(i: i)) - 48
            n2 = Ichar(Nombre2(i: i)) - 48
            res1 = n1 + n2 + res2
            res2 = res1 / 10
            res1 = mod(res1,10)
            nombre3(i:i) = char(res1+48)
          enddo
     
    c      nombre3(1:1) = char(res2+48)
          print *, "voila : ", nombre3
     
          end program tp

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Excuse-moi. Je me suis trompé.
    Il y avait un décalage d'indice sur nombre3 dans la boucle.
    Ma solution :
    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
          PROGRAM TP
          character(LEN=2) :: Nombre1, Nombre2
          character(LEN=3) :: Nombre3
          integer :: n1, n2, res1, res2 = 0
     
          print '(a$)', "Entrez les 2 nombres : "
          read(*,*) nombre1, nombre2
     
          do i = 2, 1, -1
            n1 = Ichar(Nombre1(i: i)) - 48
            n2 = Ichar(Nombre2(i: i)) - 48
            res1 = n1 + n2 + res2
            res2 = res1 / 10
            res1 = mod(res1,10)
            nombre3(i+1:i+1) = char(res1+48)
          enddo
     
          nombre3(1:1) = char(res2+48)
          print *, "voila : ", nombre3
     
          end program tp

  4. #4
    Membre à l'essai
    Homme Profil pro
    information
    Inscrit en
    Décembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : information
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 17
    Points : 19
    Points
    19
    Par défaut merci beaucoup!!
    Je vous remercie, mon frère, de l'aide, mais il ya un problème, lors de la collecte deux questions de forme, par exemple,
    11111 + 22222222, le programme donne le résultat: 33333222
    Signifie que le programme donne le résultat à l'envers, seulement dans ce cas lorsque la longueur des deux nombres est différent, mais si les nombres même longueur le programme donne le résultat correct..
    ce ma tentative
    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
          PROGRAM TP
          character(LEN=8) :: Nb1, Nb2
          character(LEN=9) :: Resultat
          integer :: n1, n2, res1, res2 = 0
     
          print '(a$)', "Entrez les  nombres : "
          read(*,*) Nb1, Nb2
     
          do i = 8, 1, -1
            n1 = Ichar(Nb1(i: i)) - 48
            n2 = Ichar(Nb2(i: i)) - 48
          Select case(n1)
          case(1:9)
             n1 = Ichar(Nb1(i: i)) - 48
            case default
            n1=0   
            End Select
           Select case(n2)
           case(1:9)
           n2 = Ichar(Nb2(i: i)) - 48
           case default
            n2=0   
            End Select
     
            res1 = n1 + n2 + res2
            res2 = res1 / 10
            res1 = mod(res1,10)
            Resultat(i+1:i+1) = char(res1+48)
          enddo
     
          Resultat(1:1) = char(res2+48)
          print *, "voila : ", Resultat
     
          end program tp

  5. #5
    Membre à l'essai
    Homme Profil pro
    information
    Inscrit en
    Décembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : information
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 17
    Points : 19
    Points
    19
    Par défaut
    Après cela, je vais essayer d'écrire un programme pour multiplier deux nombres en meme idea

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Bonjour Youcef.

    Une astuce consiste à remplir les chaines de caractères zéro.
    Ma solution est en FORTRAN 90, au format libre :
    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
    program tp
        implicit none
        integer, parameter :: taille = 100
        integer :: i, l1, l2
        character(len=taille)   :: nombre1, nombre2, nb1, nb2
        character(len=taille+1) :: nombre3, nb3
        integer :: n1, n2, res1, res2 = 0
     
        print '(a$)', "Entrez les 2 nombres : "
        read(*,*) nombre1, nombre2
     
        do i = 1, taille
            nb1(i:i) = "0"; nb2(i:i) = "0"; nb3(i:i) = "0"
        enddo
        l1 = len_trim(nombre1); nb1(taille-l1+1:) = nombre1(:)
        l2 = len_trim(nombre2); nb2(taille-l2+1:) = nombre2(:)
     
        do i = taille, 1, -1
            n1 = ichar(nb1(i:i)) - 48
            n2 = ichar(nb2(i:i)) - 48
            res1 = n1 + n2 + res2
            res2 = res1 / 10
            res1 = mod(res1,10)
            nb3(i+1:i+1) = char(res1+48)
        enddo
        nb3(1:1) = char(res2+48)
     
        i = 1
        do
            l1 = index( nb3(i:i), "0")
            if (l1==0) exit
            i = i + 1
        enddo
        nombre3(1:) = nb3(i:)
     
        print '(2a)', "voila : ", nombre3
     
    end program tp
    La multiplication se fait suivant le même principe.

  7. #7
    Membre à l'essai
    Homme Profil pro
    information
    Inscrit en
    Décembre 2012
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : information
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2012
    Messages : 17
    Points : 19
    Points
    19
    Par défaut thank's
    Merci beaucoup .....Je vais essayer dans l'autre programme(multiplication)

Discussions similaires

  1. Problème adresse Program Files (x86)
    Par fourmizen dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 10/03/2011, 11h15
  2. Problème CGNS et Fortran
    Par manaliac dans le forum Fortran
    Réponses: 0
    Dernier message: 23/04/2010, 10h20
  3. probléme de programation
    Par laposte dans le forum JDBC
    Réponses: 24
    Dernier message: 02/04/2009, 23h07
  4. [Interopérabilité] Problème d'interfaçage fortran/C
    Par afrancisco dans le forum Fortran
    Réponses: 0
    Dernier message: 18/10/2007, 11h07

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