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

Autres IDE Pascal Discussion :

[Débutant] Réalisation d'une calculatrice


Sujet :

Autres IDE Pascal

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [Débutant] Réalisation d'une calculatrice
    Bonjour !

    Je débute en Pascal, et je me suis lancé dans l'écriture de Pasculatrice (notez la finesse du jeu de mots), une calculatrice traitant les 5 opérations.
    Pourriez-vous m'aider à rendre ce code correct s'il vous plaît ? M'expliquer mes erreurs.
    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    program calculator (output);
    var op1 : integer; {On définit les variables. op1=opération, nbr1=premier nombre à opérer, nbr2: 2e nombre à opérer}
        nbr1: real;
        nbr2: real;
     
    begin
     
    writeln ('Bonjour. Bienvenue dans Pasculatrice ALPHA par Bam. Veuillez choisir une opération');
            writeln ('Multiplication, tapez 1.');
            writeln ('Division tombant juste, tapez 2');
            writeln ('Division donnant un nombre à virgule, tapez 3');
            writeln ('Modulo, tapez 4');
            writeln ('Addition, tapez 5');
            writeln ('Soustraction, tapez 6');  {On dit à l'user les opérations disponibles}
            writeln ('Appuyez sur ENTREE pour confirmer');
    readln (op1); {On demande à remplir la variable de l'opération. Jusque là rien de compliqué}
     
    end.
     
    if op1=1 {si l'user tape 1}
       then {On lui demande de choisir les deux nombres à multiplier}
    begin
     
         writeln ('Choisissez le premier réel à multiplier');
            readln (nbr1);
         writeln ('Choisissez le deuxième réel à multiplier');
            readln (nbr2);
         writeln (' ',nbr1,'*',nbr2,'=');         {On effectue l'opération}
     
    end.
     
    if op1=2 {si l'user tape 2}
       then
    begin
     
    writeln ('Choisissez le premier réel à diviser');
            readln (nbr1);
    writeln ('Choisissez le deuxième réel à diviser');
            readln (nbr2);
    write (' ',nbr1,'div',nbr2,'=');         {On effectue l'opération}
     
    end.
     
    if op1=3 {si l'user tape 3}
       then
    begin
     
    writeln ('Choisissez le premier réel à diviser');
            readln (nbr1);
    writeln ('Choisissez le deuxième réel à diviser');
            readln (nbr2);
    write (' ',nbr1,'/',nbr2,'=');         {On effectue l'opération}
     
    end.
     
    if op1=4 {si l'user tape 4}
       then
    begin
     
    writeln ('Choisissez le premier réel pour le modulo');
            readln (nbr1);
    writeln ('Choisissez le deuxième réel pour le modulo');
            readln (nbr2);
    write (' ',nbr1,'mod',nbr2,'=');         {On effectue l'opération}
     
    end.
     
    if op1=5 {si l'user tape 5}
       then
    begin
     
    writeln ('Choisissez le premier réel pour l''addition');
            readln (nbr1);
    writeln ('Choisissez le deuxième réel pour l''addition');
            readln (nbr2);
    write (' ',nbr1,'+',nbr2,'=');         {On effectue l'opération}
     
    end.
     
    if op1=6 {si l'user tape 6}
       then
    begin
     
    writeln ('Choisissez le premier réel pour la soustraction');
            readln (nbr1);
    writeln ('Choisissez le deuxième réel pour la soustraction');
            readln (nbr2);
    write (' ',nbr1,'-',nbr2,'=');         {On effectue l'opération}
     
    end.
     
    {Faut que je trouve une formule pour qu'une fois ENTREE pressé, on retourne au début}
    Merci d'avance.

    Cordialement,

    Bam'

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Jai,

    La première chose à faire est de diviser tout ça en fonctions (au sens large : fonctions ou procédures).
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    1) Tes "end" sont terminés par des points, ça ne peut pas compiler. Seul le "end" principal, donc le dernier qui correspond au "BEGIN" du programme doit comporter un point. Les autres doivent se terminer par ';'

    2) Il est plus logique de remplacer tes 'IF' par un 'CASE' dans ce type de conditions.

    3) Fais ce que te dit Droggo.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  4. #4
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour

    Des réponses précédentes auxquelles j'ajoute :
    1.Que tu ne fais aucune opération du tout ( c'est juste un simple affichage de l'opération à faire, il y a pas de calcul)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     writeln (' ',nbr1,'*',nbr2,'=');  {On effectue l'opération}
     write (' ',nbr1,'div',nbr2,'=');
     write (' ',nbr1,'/',nbr2,'=');
     ......
    2.Que tu peux utiliser un char plutôt qu'un entier pour op1
    3.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {Faut que je trouve une formule pour qu'une fois ENTREE pressé, on retourne au début}
    Il s'agit de mettre tout ça dans une boucle

    Bon courage
    Cordialement
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Désolé de mon noobisme mais je ne vois pas à quoi les procédures peuvent servir là dedans.

    Cordialement,

    Bam

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Gao,
    Citation Envoyé par bababam Voir le message
    Désolé de mon noobisme mais je ne vois pas à quoi les procédures peuvent servir là dedans.
    Elles servent comme de partout, c'est à dire à découper le problème en sous-problèmes.

    Cela amène à avoir un code plus clair, plus lisible, plus compréhensible ...

    Si chaque fois que tu veux calculer disons .... un sinus, serais-tu d'accord pour écrire le code du calcul effectif de la valeur correcte ?
    Si les cons volaient, il ferait nuit à midi.

  7. #7
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Même réponse et j'ajoute en sus qu'elles permettent d'éviter au maximum les variables globales donc un certain nombre de bugs.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  8. #8
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Gao,
    Citation Envoyé par richard Voir le message
    Même réponse et j'ajoute en sus qu'elles permettent d'éviter au maximum les variables globales donc un certain nombre de bugs.
    S'il n'y a pas de procédures ou fonctions, alors il n'y a pas de variables globales.
    Si les cons volaient, il ferait nuit à midi.

  9. #9
    Membre éclairé
    Avatar de richard
    Homme Profil pro
    Inscrit en
    Avril 2002
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations forums :
    Inscription : Avril 2002
    Messages : 474
    Points : 772
    Points
    772
    Par défaut
    Exact ; il eût été plus exact de dire que les procédures et les fonctions permettent une localité plus importante à la fois pour le code et les données.
    "Software is getting slower more rapidly than hardware becomes faster." Niklaus Wirth
    https://pharo.org/web
    https://faust.grame.fr/

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2003
    Messages : 59
    Points : 39
    Points
    39
    Par défaut
    Je sais que le sujet date d'un ans mais je voudrais contribuer à la survie de ce langage.
    Donc je met ce code que j'ai réaliser y a pas longtemps pour les personnes qui comme moi débute, ça peux servir de base.
    J'ai pas mis la soustraction, c'est le même principe que les autres.

    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
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    Program calculer;
     
    uses crt;
     
    procedure addition;
     
    var
     
    a,b,somme : integer;
     
    begin
     
    writeln;
    write('1er nombre : ');
    readln(a);
    write('2eme nombre : ');
    readln(b);
    somme := a+b;
    writeln;
    writeln('resultat : ',a,' + ',b,' = ',somme);
     
    end;
     
    procedure multi;
     
    var
     
    a,b,somme : integer;
     
    begin
     
    writeln;
    write('1er nombre : ');
    readln(a);
    write('2eme nombre : ');
    readln(b);
    somme := a*b;
    writeln;
    writeln('resultat : ',a,' * ',b,' = ',somme)
     
    end;
     
    procedure division;
     
    var
     
    a,b,somme : real;
     
    begin
     
    writeln;
    write('1er nombre : ');
    readln(a);
    write('2eme nombre : ');
    readln(b);
    somme := a/b;
    writeln;
    writeln('resultat : ',a:2:2,' / ',b:2:2,' = ',somme:2:2);
     
    end;
     
     
    var
     
    choix : char;
    ok : boolean;
     
    BEGIN
     
     
    clrscr;
    writeln('[A]dditionner , [M]ultiplier , [D]iviser');
    writeln;
    ok := false;
     
    readln(choix);
     
    repeat
    if (choix = 'a') OR (choix='m') OR (choix = 'd') then ok := true
    else if ok = false then
    begin
    writeln('mauvais choix, recommencer');
    readln(choix);
    end;
    until ok;
     
     
    case choix of
     
    'a' : addition;
    'm' : multi;
    'd' : division;
     
    end;
     
    writeln(' ');
    writeln('Merci, appuyez sur Entree pour continuer...');
    readln;
     
    END.

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Boe,
    Citation Envoyé par Mercenaire Voir le message
    Je sais que le sujet date d'un ans mais je voudrais contribuer à la survie de ce langage.
    Donc je met ce code que j'ai réaliser y a pas longtemps pour les personnes qui comme moi débute, ça peux servir de base.
    J'ai pas mis la soustraction, c'est le même principe que les autres.
    Ton programme est assez mal conçu : tu vois bien que tu as du code très répétitif (lecture des données à gérer), et d'autre part, au lieu de procédures, tu devrais utiliser des fonctions, qui retourneront le résultat de l'opération désirés.
    Si les cons volaient, il ferait nuit à midi.

  12. #12
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par droggo Voir le message
    Boe,

    Ton programme est assez mal conçu : tu vois bien que tu as du code très répétitif (lecture des données à gérer), et d'autre part, au lieu de procédures, tu devrais utiliser des fonctions, qui retourneront le résultat de l'opération désirés.
    Aussi, il faudra gérer les erreurs pouvant survenir dans les calculs telles que division par 0.

  13. #13
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Hei,
    Citation Envoyé par darrylsite Voir le message
    Aussi, il faudra gérer les erreurs pouvant survenir dans les calculs telles que division par 0.
    Bien entendu, mais ça fait partie du travail de base : un programme bien conçu et bien réalisé se doit de résister aux erreurs de l'utilisateur, ainsi qu'à tous les problèmes prévisibles, et aux autres ...
    Si les cons volaient, il ferait nuit à midi.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2003
    Messages : 59
    Points : 39
    Points
    39
    Par défaut
    Moi qui pensait que j'ai enfin pu réaliser quelque chose de correct

    Merci pour vos remarques

  15. #15
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Goe,
    Citation Envoyé par Mercenaire Voir le message
    Moi qui pensait que j'ai enfin pu réaliser quelque chose de correct

    Merci pour vos remarques
    Ne t'en fais pas, nous sommes tous passés par là.

    Ce qui compte, c'est progresser, et prendre de bonnes habitudes dès le début.
    Si les cons volaient, il ferait nuit à midi.

Discussions similaires

  1. Réalisation d'une calculatrice graphique en assembleur IA32
    Par yagami-psychiatre dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 02/08/2013, 02h04
  2. [Débutant] Réalisation d'une intégrale
    Par RomainD2 dans le forum LabVIEW
    Réponses: 2
    Dernier message: 29/03/2009, 21h49
  3. [Débutant]réalisation d 'une applet ,voir sujet.
    Par racoboss dans le forum Applets
    Réponses: 3
    Dernier message: 06/11/2007, 18h03
  4. Réalisation d'une calculatrice scientifique
    Par diden138 dans le forum Pascal
    Réponses: 7
    Dernier message: 22/05/2006, 11h45
  5. Aide à la réalisation d'une calculatrice en C
    Par Premium dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 17/11/2005, 16h52

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