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

Pascal Discussion :

Trouver le prix total de tous les billets réservés


Sujet :

Pascal

  1. #1
    Futur Membre du Club
    Homme Profil pro
    informatitien
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : informatitien

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 5
    Points
    5
    Par défaut Trouver le prix total de tous les billets réservés
    Salut tous le monde

    Je suis débutant et cherche quelqu'un pour m'aider à résoudre ce problème, svp, qui consiste à trouver le prix total de tous les billets réservés. Et voilà ce que j'ai déduit :

    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
    program aviation_tassili;
    uses crt;
    var
    nom,prenom,distination:string;
    age,nb,i:integer;
    prix,prixt:real;
    sex:char;
    begin 
     
    			writeln('wolcome');
    			write ('entrer votre nombre de place =>  :');
    			readln(nb);
    			for i:=1 to nb do
    			begin
    			write ('entrer votre nom =>  :');
                readln(nom); 
                write ('entrer votre prenom =>  :');
                 readln (prenom);
                      if (sex<> 'h') or  (sex<>'f') then repeat
    			write ('entrer votre sex H / F =>  :');
    			readln(sex);
    			until    (sex= 'h') or  (sex='f') ;
    			write ('entrer votre age =>  :');
    			readln(age);
                      if (distination<> 'alger') or  (distination<>'anaba') then repeat
                          write ('entrer votre distination ALGER / ANABA =>  :');
                        readln(distination);
                        until (distination= 'alger')  or  (distination='anaba') ;    
                        if (distination= 'alger')and (age>16)then prix:=490;
                        if (distination='alger')and (age<16)then prix:=490*0.30;
                        if (distination='alger')and (age<2)then prix:=490*0.70;
                        if (distination='anaba')and (age>16)then prix:=420;
                        if (distination='anaba')and (age<16)then prix:=420*0.30;
                        if (distination='anaba')and (age<2)then prix:=420*0.70;  
     
    writeln ('monsieu  : ',nom, '  ',prenom,  ' votre distination est : ' ,distination, ' est de prix de:  ',prix:0:2,' da');
    end;
    prixt := prixt+prix;
    writeln ('la somme total est de => : ' ,prixt:0:2,' da');
    writeln ('merci de votre visite');
     
    end.

  2. #2
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 335
    Points : 4 158
    Points
    4 158
    Par défaut
    Bonjour,

    Quelques conseils :
    • Mettre les balises de code pour qu'il soit plus lisible : sélectionner le code er appuyer sur l'icone #
    • Indenter le code : retraits identiques vers la droite du code qui appartient au même bloc (entre begin et end, repeat et until, etc.)
    • Il est inutile de faire des tests sur des variable non initialisées.
    • La personne qui entre les données n'est pas, a priori, le bénéficiaire puisqu'il peut y en avoir beaucoup (nb). Il faut donc éviter les expression personnalisantes comme "votre nom" etc.
    • Pour comparer des chaînes de caractères, il faut s'assurer qu'elles sont de la même casse (majuscule/minuscules) ou utiliser une fonction de comparaison qui n'y est pas sensible.
    • Le prix total doit être initialisé à 0 (même si la déclaration globale le fait implicitement, c'est une bonne habitude).
    • Il est plus simple de calculer le prix de base puis les réductions éventuelles.
    • L'incrémentation du prix total se fait dans la boucle (ce qui se voit bien si les indentations sont bien faites ). Ici le total était simplement égal au dernier montant.
    • On peut utiliser la variable sex pour ne pas mettre Monsieur pour une femme.

    Proposition de code modifié (non testé) :
    Code PASCAL : 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
    program aviation_tassili;
    uses crt, sysutils;                              // sysutils pour la fonction lowercase
    var
       nom, prenom, destination : string;
       age, nb, i  : integer;
       prix, total : real;
       sex         : char;
    begin
       writeln('Welcome');
       write('Entrez votre nombre de places => : ');
       readln(nb);
       total := 0.0;
       for i := 1 to nb do begin
          write('Entrez le nom n°', i,' => :');
          readln(nom);
          write('Entrez le prenom => :');
          readln(prenom);
          repeat
             write ('Sexe H/F ? ');
             readln(sex);
             sex := LowerCase(sex);                  // Mettre en minuscules
          until (sex = 'h') or (sex = 'f') ;
          write('Entrez l''age => : ');
          readln(age);                               // Normalement il faudrait vérifier > 0 et < 120
          // Destination ?
          repeat
             write('Entrez la destination ALGER / ANABA => : ');
             readln(destination);
             destination := UpperCase(destination);  // Mettre en majuscules
          until (destination = 'ALGER') or (destination = 'ANABA') ;
          if destination = 'ALGER'                   // Prix de base
          then prix := 490 
          else prix := 420;
          // Calcul de réduction
          if      age <  2 then prix := prix*0.70    // Un bébé paye plus cher qu'un ado ?
          else if age < 16 then prix := prix*0.30;
          if sex = 'h' then write('Monsieur ') else  write('Madame ') 
          writeln(nom, ' ', prenom, ', destination : ', destination, ', prix : ', prix:0:2, ' da');
          total := total + prix;
          end;
       writeln ('La somme totale est de : ', total:0:2, ' da');
       writeln ('Merci de votre visite');
    end.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    informatitien
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : informatitien

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 5
    Points
    5
    Par défaut merci
    Je ne sais pas comment vous remercier.
    Je vais essayer de suivre vos conseils.
    Un grand merci pour votre aide.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    informatitien
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : informatitien

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    pourriez vous me dire ou es que je me suis planter svp ?

  5. #5
    Expert confirmé

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 335
    Points : 4 158
    Points
    4 158
    Par défaut
    Bonjour,

    Si le programme que je vous ai proposé fonctionne correctement, je vous conseille de le regarder, ligne par ligne, côte à côte avec votre code d'origine et vous demander pourquoi il y a des différences. Comme j'ai gardé la logique initiale cela ne devrait pas être trop difficile.

    Le deux erreurs principales étaient sur le calcul de la somme totale qui se faisait hors boucle et n'accumulait donc pas les sommes par billet (seul le dernier était pris en compte) et le fait de faire des tests (de plus inutiles) sur des variables non initialisées, c'est à dire dont on ne peut connaître la valeur a priori.

    Les autres modifications sont plus secondaires même si s'assurer que le traitement ne soit pas sensible à la casse (majuscule/minuscules) n'est pas inutile. Par exemple, demander que l'utilisateur tape 'H' ou 'F' n'était pas très cohérent avec le test qui vérifiait qu'il avait bien tapé 'h' ou 'f'.

    Salutations
    Ever tried. Ever failed. No matter. Try Again. Fail again. Fail better. (Samuel Beckett)

  6. #6
    Futur Membre du Club
    Homme Profil pro
    informatitien
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : informatitien

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 5
    Points
    5
    Par défaut
    Un grand merci, je suis désolé.
    Mais j'aime comprendre ce que je fais.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/07/2018, 11h04
  2. Réponses: 10
    Dernier message: 15/01/2009, 21h36
  3. Requête des meilleurs prix sur pour tous les produit
    Par Baathor dans le forum Développement
    Réponses: 4
    Dernier message: 07/10/2007, 20h28
  4. Requête des meilleurs prix sur pour tous les produit
    Par Baathor dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/10/2007, 20h28
  5. Trouver tous les objets d'un certain type dans un document?
    Par kobe dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 03/11/2005, 17h07

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