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] Liste de noms (characters)


Sujet :

Fortran

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Points : 26
    Points
    26
    Par défaut [Fortran 77] Liste de noms (characters)
    Bonjour à tous,

    voici une question surement très bête mais sur laquelle je bute.

    J'illustre mon problème par un exemple. Je demande à un client combien de parfums, il veut pour sa glace. Il veut N parfums. N varie selon le client.

    Je veux donc créer une liste avec les N parfums que le client va me demander.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    do i=1,N
    print *,'Quel est votre parfum numéro ',i
    read *, ?????
    end
    Que dois-je mettre après mon read ?

    Ou plus simplement, comment définit-on une liste de noms (characters) dont le nombre d'éléments varie (c'est une fonction de N).

    En espérant avoir été assez clair...

    Cordialement,

    RM

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    98
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 98
    Points : 107
    Points
    107
    Par défaut
    salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    character(len=256), allocatable :: parfum(:)
    integer :: i, n
     
    write(*,*) 'nombre de parfums maxi ?'
    read(*,*) n
    allocate (parfums(n))
    do i=1,n
    write(*,*) 'quel est ton parfum n°',i
    repeat(' ',len(parfums(i))
    read(*,*) parfums(i)
    enddo
     
    deallocate (parfums)
    c'est dans ce goût là (ou parfum ...)

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Août 2006
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Août 2006
    Messages : 974
    Points : 1 346
    Points
    1 346
    Par défaut
    Si tu tiens à te limiter à F77, tu ne peux pas utiliser les allocatables. Tu devras donc déclarer Parfums à la longueur maximale que tu voudras supporter...

  4. #4
    Membre éclairé Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Points : 825
    Points
    825
    Par défaut
    je te conseil tout d'abord d'utiliser (comme afrancisco) les read(*,*) et write(*,*) plutôt que print *, et read *, car tu peux avec les write et read complet choisir et le fichier de destination/source et le format voulu (pratique quandd on fait du 77 un peu trop fixe.... comme tu n'a pas le droit à l'alocatable, tu doit définir un nombre max de parfums pour la glace (par exemple 255 (ça fait déjà pas mal)) donc tu définit un truc genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    parameter MaxParfum=255
    character*25 LstParfum
    dimension LstParfum(MaxParfum)
    (il me semble qu'en 77 t'as pas le droit au len=25, mais à vérifié) du coup tu définit un parfin de fin genre 'fin' puis:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    600    write(6,'(a40,$)')'combien de parfum voulez-vous (Max=255)? '
             read(5,i3) NbParfum
             if ((NbParfum<MaxParfum).and.(NbParfum>0))then
               do i=1,NbParfum
                  write(6,'(a21,i3,a2,$)')'quel est le parfum n°',i,'? '
                  read(5,'a25') LstParfum(i)                                    !tu peux placer une gestion des erreurs avec....
               endif
             else
               write(6,'a26')'nombre de parfum incorrect'
               goto 600
             endif
    voilà, je te conseil également de bien gérer les erreurs genre, si l'utilisateur saisi un chiffre à la place du texte ou ce genre de connerie... le fait de mettre des formats dans les read et write impose à l'ordi d'interprété les champ saisis comme des caractère ou des entier ...etc... du coup tu as moins ce genre d'erreur, mais la conversion caractère => entier est pas top....
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

Discussions similaires

  1. fonction qui met en liste les noms des fichiers
    Par aliassaf dans le forum Général Python
    Réponses: 2
    Dernier message: 22/06/2006, 12h50
  2. récupérer la liste des noms des champs d'une table
    Par la_didise dans le forum Access
    Réponses: 2
    Dernier message: 29/05/2006, 17h55
  3. obtenir une liste des noms de session d'un ordinateur
    Par Raylemon dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 09/03/2006, 20h12
  4. [C#] Liste des noms des jours
    Par Oberown dans le forum C#
    Réponses: 9
    Dernier message: 07/11/2005, 12h38
  5. Comment obtenir la liste des noms des ordinateurs du réseau ?
    Par da_latifa dans le forum Web & réseau
    Réponses: 2
    Dernier message: 17/08/2005, 12h58

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