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 :

[TP] Calculatrice complexe : quelle erreur ai-je faite ?


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Par défaut [TP] Calculatrice complexe : quelle erreur ai-je faite ?
    Bonjour à tous, j'ai à effectuer un programme simulant une calculatrice à nombres complexes. En compilant, j'ai un message d'erreur "unknown identifiant" que je ne comprends pas. Quelqu'un saurait me dire ce qui cloche svp?

    Cette erreur est située dans la procedure "menu_calculatrice", lorsque j'appelle la procedure "multiplication"

    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    program calc_complexe;
    uses crt;
     
     
     
     
     
     
    procedure transformation_complexe (var a,b,r,t : real; choix2 : integer);
    begin
      writeln;
      writeln('Menu');
      writeln('****');
      writeln;
      writeln('1- forme cartesienne -> forme polaire');
      writeln('2- forme polaire -> forme cartesienne');
      writeln('-------------------------------------');
      writeln;
      readln(choix2);
      case choix2 of
       1 : begin
            writeln('Veuillez entrer les valeurs de a et de b (complexe de la forme a+b.i)');
            writeln('Valeur de a = ');
            read(a);
            writeln('Valeur de b = ');
            read(b);
            writeln;
            r:=sqrt(sqr(a)+sqr(b));
            t:=arctan(b/a);
            writeln('Voici le complexe sous la forme polaire');
            writeln(r,'cis',t);
            writeln;
           end;
       2 : begin
            writeln('Veuillez entrer les valeurs de r et de t (complexe de la forme rcis(t))');
            writeln('Valeur de r = ');
            read(r);
            writeln('Valeur de t (en radian)= ');
            read(t);
            writeln;
            b:=r*sin(t);
            a:=r*cos(t);
            writeln('Voici le complexe sous la forme cartesienne');
            writeln(a,'+',b,'i');
            writeln;
           end;
      end;
    end;
     
    procedure multiplication (var a1,b1,a2,b2,x,y : real);
    begin
      writeln;
      writeln('Veuillez entrer les deux complexes a multiplier');
      writeln('Complexe nø1 : a = ');
      read(a1);
      writeln('Complexe nø1 : b = ');
      read(b1);
      writeln;
      writeln('Complexe nø2 : a = ');
      read(a2);
      writeln('Complexe nø2 : b = ');
      read(b2);
      writeln;
      x:=(a1*a2-b1*b2);
      y:=(a1*b2+a2*b1);
      writeln('Resultat = ',x,'+',y,'i');
    end;
     
    procedure somme (var a1,a2,b1,b2,x,y : real);
    begin
      writeln;
      writeln('Veuillez entrer les deux complexes a multiplier');
      writeln('Complexe nø1 : a = ');
      read(a1);
      writeln('Complexe nø1 : b = ');
      read(b1);
      writeln;
      writeln('Complexe nø2 : a = ');
      read(a2);
      writeln('Complexe nø2 : b = ');
      read(b2);
      writeln;
      x:=(a1+a2);
      y:=(b1+b2);
      writeln('Resultat = ',x,'+',y,'i');
    end;
     
    procedure menu_calculatrice (var choix3 : integer);
    begin
      writeln;
      writeln('Menu');
      writeln('****');
      writeln;
      writeln(' 1 - Multiplication');
      writeln(' 2 - Somme');
      readln(choix3);
      case choix3 of
      1 : multiplication(a1,b1,a2,b2,x,y);
      2 : somme(a1,b1,a2,b2,x,y);
      end;
    end;
     
     
    procedure menu (var choix : integer);
    begin
      writeln;
      writeln('Menu');
      writeln('****');
      writeln;
      writeln('1- Changer la forme d ecriture d un complexe');
      writeln('2- Effectuer une operation sur deux complexes');
      writeln;
      readln(choix);
      case choix of
        1 : transformation_complexe (a,b,r,t,choix2);
        2 : menu_calculatrice (choix3);
      end;
    end;
     
     
    begin
    menu(choix);
    end;
    end.
    Merci d'avance

  2. #2
    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
    Fio,

    Il manque la définition des variables que tu utilises pour l'appel.

  3. #3
    Membre averti
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Par défaut
    Concrètement, je dois définir mes variables avant toutes mes procédures? (juste après "uses crt" donc)


    En fait le prof nous a dit qu'il ne voulait pas de variable générale. J'ai pas vraiment compris ce qu'il a voulu dire par là mais bon..

  4. #4
    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
    Fio,

    Ton prof a raison de ne pas vouloir de variables globales, mais il en faut bien quelque part tout de même, et tu n'en définis aucune.

    - la procédure menu n'a pas besoin de paramètre, la variable choix devrait être locale à cette procédure.

    - comme c'est la procédure qui pilote le tout, les variables qui servent à appeler les autres procédures doivent également être déclarées là.

    Plus global : pour poser un tel exercice, ton prof a déjà dû vous parler des types personnalisés, en particulier des enregistrements (record).

    Un nombre complexe étant composé de données obligatoirement liées, il est "nécessaire" de définir un type pour les gérer.
    Comme en plus tu veux gérer les 2 formes cartésienne et polaire, il faut que les procédures sachent comment est représenté le complexe dans son type, ce qui amène à l'ajout d'un champ pour le dire.

    On en arrive à quelque chose comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    type
     
      cpx_CartPol = (cpx_Cart, cpx_Pol);
     
      cpx_Type = record
        re, im : real;  { parties réelle et imaginaire }
        cp : cpx_CartPol;
      end;
    Reprends ton code en utilisant ce genre de truc, et tu y verras des avantages.

  5. #5
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Pour ne pas avoir de variable globales, tu peux les déclarer juste avant le corps de ton programme principal et non en entête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure menu (var choix : integer);
    begin
    { ... }
    end;
     
    var
      choix : integer;
    begin
    menu(choix);
    end; (* ATTENTION : Ce 'end;' que tu as mis ici est FAUX ! A enlever donc. *)
    end.

  6. #6
    Membre averti
    Inscrit en
    Février 2008
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 21
    Par défaut
    Merci pour vos réponses; mais non, notre prof ne nous a pas encore parlé des "record" ni même des "type". Il suit la même structure de cours qu'ici

    http://cyberzoide.developpez.com/info/turbo/

    Et pour l'instant on en est au chapitre 8: fonctions. On a pas encore vu plus loin que ça, donc droggo, je n'ai hélas rien compris du morceau de code que tu as fait :/ mais les deux premiers conseils sont utiles, merci

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

Discussions similaires

  1. Erreur quand on fait un double clique
    Par ArnaudDev dans le forum Applets
    Réponses: 0
    Dernier message: 19/03/2009, 15h26
  2. Dimension temps : quelle clé dans les faits et sur quelle base ?
    Par mederik dans le forum Conception/Modélisation
    Réponses: 15
    Dernier message: 26/09/2008, 14h02
  3. erreur hibernate qui fait ch**
    Par mouss4rs dans le forum Hibernate
    Réponses: 1
    Dernier message: 28/05/2008, 06h22
  4. [POO] erreur ? mais quelle erreur ?
    Par Will Fou dans le forum Langage
    Réponses: 3
    Dernier message: 28/07/2007, 19h20
  5. [Sondage] Sur quelle machine avez vous fait vos débuts ?
    Par Muesko dans le forum La taverne du Club : Humour et divers
    Réponses: 107
    Dernier message: 15/05/2007, 10h06

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