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

Turbo Pascal Discussion :

Calculer la réduction et le montant à payer [Turbo Pascal]


Sujet :

Turbo Pascal

  1. #1
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut Calculer la réduction et le montant à payer
    Voilà l'exercice

    Elaborer un programme qui permet de lire pour un client d'une agence de location de voitures le nom, la nationalité (marocaine ou etrangère), la
    durée de location et le prix unitaire, ensuite de calculer et afficher le prix
    total, la réduction et le montant à payer.
    * La réduction est 15% du prix total pour les marocains et 500 DHs pour chaque semaine complète pour les étrangers.
    Et mon travail le voici
    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
    ses crt;
     
    var   d,reste:byte;
          n,na,m,e:string;
          pu,pt,ru,nap:real;
     
     
    begin
    clrscr;
    write('Donner le nom du client:                ');readln(n);
    write('Donner la nationalit‚ du client:        ');readln(na);
    write('saiser la dur‚e du jour:                ');readln(d);
    write('saiser le prix unitaire du chaque jour: ');readln(d);
     
    if n='m' then
    ru:=pu*d*0.15
    nap:=(pu*d)-ru
     
     
     
    else if (n='e') and (d<7) then
     
           ru:=0
     
           else   if (n='e') and (d=7) then
     
           ru:=pu*d-500
     
                 else   if (n='e') and (d>7) then
     
                        reste:= d mod 7
     
                        ru:=( (d mod 7) - 500 ) + (reste * pu)
     
                        pt:=pu*d
     
                        nap:=pu*d-ru;
     
    writeln('le prix total est:     ',pt:4:2);
    writeln('la r‚duction est :     ',ru:4:2);
    writeln('le montant … payer est:',map:4:2);
    readln;
    end.
    Je demande une aide S.V.P

  2. #2
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    Mon problème dans ce cas c'est le reste de la division

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Hia,

    Conseil : donner des noms explicites aux variables, constantes, fonctions, procédures, types...

    Cela t'aurait peut-être évité ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    write('saiser la dur‚e du jour:                ');readln(d);
    write('saiser le prix unitaire du chaque jour: ');readln(d);
    Du coup, je n'ai pas vérifié le reste, sauf : pourquoi se limiter à un type byte pour les variables d et reste ?

  4. #4
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    Du coup, je n''ai pas vérifié le reste, sauf :
    pourquoi se limiter à un type byte pour
    les variables d et reste ?
    Parce que la durée ne peut pas dépasser 250 et également le reste.

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Hei,
    Citation Envoyé par agan2012 Voir le message
    parce que la duré ne peut pas dépasser 250 et également le reste
    Ok, mais ça pose un problème, dans cette ligne par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                        ru:=( (d mod 7) - 500 ) + (reste * pu)
    d étant du type byte, d mod 7 l'est également. Et quand tu lui enlève 500, ça risque d'entraîner un dépassement (ou même, ça entraîne un dépassement, je ne sais plus avec TP).

  6. #6
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    d étant du type byte, d mod 7 l'est également.
    Et quand tu lui enlève 500, ça risque d'entraîner un dépassement (ou même, ça entraîne un dépassement, je ne sais plus avec TP).
    Oui vous avez raison

  7. #7
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    voilà après les modifications
    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
    uses crt;
     
    var   d,reste:byte;
          n,na,m,e:string;
          pu,pt,ru,nap:real;
    begin
    clrscr;
    write('Donner le nom du client:                ');readln(n);
    write('Donner la nationalit‚ du client:        ');readln(na);
    write('saiser la dur‚e du jour:                ');readln(d);
    write('saiser le prix unitaire du chaque jour: ');readln(pu);
     
    if n='m' then
    ru:=(pu*d)*0.15
     
     
     
    else if (n='e') and (d<7) then
            ru:=0
         else   if (n='e') and (d=7) then
     
           ru:=(pu*d)-500
     
               else   if (n='e') and (d>7) then
     
                        reste:= (d mod 7 );
     
                        ru:=( (d div 7) * 500 ) ;
     
                        pt:=pu*d ;
     
     nap:=pu*d-ru;
     
    writeln('le prix total est:     ',pt:4:2);
    writeln('la r‚duction est :     ',ru:4:2);
    writeln('le montant … payer est:',nap:4:2);
    readln;
    end.
    mais il y a quelque chose qui cloche

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Hie,
    Citation Envoyé par agan2012 Voir le message
    voilà après les modifications
    Quelles modifications ?

    À part la ligne
    qui a changé de place, d'ailleurs sans conséquence sur les calculs, et quelques lignes vides supprimées, je n'en vois aucune.

  9. #9
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    si bien regarder le premier code et le dérnier
    il y a énormément des fautes
    mais maintenent mon problème c'est
    si je choisis la nationalité 'm' il calcule la réduction du nationalité 'e'
    alors comment faire-je pour le résoudre?

  10. #10
    Membre chevronné

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Par défaut
    Voici un cas typique de problème lié à l'utilisation de noms de variables insuffisamment clairs!

    En lisant ton code je me rends compte que tu calcules la remise par rapport au nom du client (string n), ce qui ne risque pas de marcher!!

    Choisis des noms de variables plus explicites, ton code sera plus lisible et facile à corriger, y compris pour toi.

    Bonne continuation.

  11. #11
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    Citation Envoyé par Clandestino Voir le message
    Voici un cas typique de problème lié à l'utilisation de noms de variables insuffisamment clairs!

    En lisant ton code je me rends compte que tu calcules la remise par
    rapport au nom du client (string n), ce qui ne risque pas de marcher!!

    Choisis des noms de variables plus explicites, ton code sera plus lisible et facile à corriger, y compris pour toi.

    Bonne continuation.
    a votre avis comment sera le code de ce TP?

  12. #12
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Gei,
    Citation Envoyé par agan2012 Voir le message
    a votre avis comment sera le code de ce TP?
    Compte tenu des réponses précédentes, solution basique et drastique (et généralement efficace) : tu oublies ce que tu as déjà fait, et tu reprends à zéro, en utilisant des noms de variables, etc. explicites.

  13. #13
    Membre averti
    Inscrit en
    Novembre 2008
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 55
    Par défaut
    Citation Envoyé par droggo Voir le message
    Gei,

    Compte tenu des réponses précédentes, solution basique et drastique (et généralement efficace) : tu oublies ce que tu as déjà fait, et tu reprends à zéro, en utilisant des noms de variables, etc. explicites.
    oui c'est vrai
    merci de votre aide droggo
    voilà mon travail est achevé
    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
    uses crt;
     
    var   d:integer;
          n,na,m,e:string;
          pu,pt,ru,nap:real;
    begin
    clrscr;
    write('Donner le nom du client:                ');readln(n);
    write('Donner la nationalit‚ du client:        ');readln(na);
    write('saiser la dur‚e du jour:                ');readln(d);
    write('saiser le prix unitaire du chaque jour: ');readln(pu);
     
    if na='m' then
    ru:=(pu*d)*0.15
     
     
     
    else if (na='e') and (d<7) then
            ru:=0
         else   if (na='e') and (d>7) then
     
     
     
     
                        ru:=( (d div 7) * 500 ) ;
     
                        pt:=pu*d ;
     
     nap:=pu*d-ru;
    writeln('le prix total est:     ',pt:4:2,' ','DHs');
    writeln('la r‚duction est :     ',ru:4:2 ,' ','DHs');
    writeln('le montant … payer est:',nap:4:2 ,' ','DHs');
    readln;
    end.

  14. #14
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 971
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 971
    Par défaut
    Kai,

    On a parfois l'impression de parler à des murs. Des murs qui, par exception, n'ont pas d'oreilles.

    Utiliser des noms de variables explicites. Est-ce trop dur à faire ?

    Côté code, on y revient encore et toujours : soigner la présentation, par exemple
    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
    program hello;
     
    uses crt;
     
    var   
      d : integer;
      n, na, m, e : string;
      pu, pt, ru, nap : real;
    begin
      clrscr;
      Write('Donner le nom du client:                ');
      Readln(n);
     
      Write('Donner la nationalit‚ du client:        ');
      Readln(na);
     
      Write('saiser la dur‚e du jour:                ');
      Readln(d);
     
      Write('saiser le prix unitaire du chaque jour: ');
      Readln(pu);
     
      if na = 'm' then
        ru := (pu * d) * 0.15
      else if (na = 'e') and (d < 7) then
        ru := 0
      else if (na = 'e') and (d > 7) then
        ru := ((d div 7) * 500);
     
      pt := pu * d;
      nap := pu * d - ru;
      Writeln('le prix total est:     ', pt: 4: 2,' ', 'DHs');
      Writeln('la r‚duction est :     ', ru: 4: 2, ' ', 'DHs');
      Writeln('le montant … payer est:', nap: 4: 2, ' ', 'DHs');
      Readln;
    end.
    Tout de suite plus lisible, Non ? Ou alors il faut être de mauvaise foi.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 11/03/2014, 10h56
  2. Calcul durée entre 2 front montant.
    Par Olivier6464 dans le forum LabVIEW
    Réponses: 0
    Dernier message: 24/07/2013, 14h11
  3. Calculer les réductions
    Par stinisma dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 10/10/2012, 21h38
  4. Transfert d'un montant calculé ds une table
    Par MSI260951 dans le forum Access
    Réponses: 1
    Dernier message: 18/12/2006, 11h11
  5. Fonction : calculer le dividende net à payer
    Par Bernard123 dans le forum Access
    Réponses: 5
    Dernier message: 27/10/2005, 14h45

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