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

Langage Pascal Discussion :

Les nombres complexes


Sujet :

Langage Pascal

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Les nombres complexes
    Bonjour ! Je suis débutant et j'ai quelques exercices à rendre dont un qui me cause quelques soucis !
    Il s'agit de résoudre un polynome du second degrés, jusqu'ici tout va bien, or il me faut également les solutions complexes et je commence à saturer d'idées !
    Voici mon travail :

    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
    program Exercice4;
            var A, B, C:Integer;
                Discriminant :real;
                Racine1, Racine2: real;
                Racine3, Racine4: real;
     
            Const i;
     
    begin
         Writeln('Saisir les valeurs de A,B,C (A est différent de 0) :');
         Readln (A,B,C);
         Discriminant:=(B*B)-(4*A*C);
     
         if Discriminant < 0
         then
              Begin
                  i*i=(-1);
                  Racine3:=((-B) - i*sqrt(abs(Discriminant)))/(2*A);
                  Racine4:=((-B) + i*sqrt(abs(Discriminant)))/(2*A);
                  Writeln ('Aucune racines dans R, mais deux racines dans C :', 'R1 =', Racine3, ' et ', 'R2=', Racine4);
              end;
     
         if Discriminant = 0
         then Writeln ('il y a une racine double dans R:', -B/2*A);
         if Discriminant >0
         then
             Begin
                  Racine1:=((-B) - sqrt(Discriminant))/(2*A);
                  Racine2:=((-B) + sqrt(Discriminant))/(2*A);
                  Writeln('il y a deux racines :', 'R1 =',Racine1, ' et ', 'R2 =',Racine2);
             End;
         readln;
     
    end.
    Une aide de votre part serait très plaisante ! Merci d'avance !

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    Par défaut
    Joa,

    Pour commencer, essaye d'expliquer pourquoi il t'est venu à l'idée d'écrire
    Le compilateur doit t'envoyer dans les choux.

    Sinon, contente-toi de faire un programme qui fait exactement ce que tu fais à la main, et tu auras quelque chose qui fonctionne.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Salut

    Une autre incohérence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Racine3=((-B) - i*sqrt(abs(Discriminant)))/(2*A);
    et Tu définis un réel et tu veux lui donner un complexe ... C'est qu'il n'existe pas de type complexe en programmation. Tu dois creer toi même ce type de donnée. Par exemple, un complexe correspond a 2 réels, un nombre réel et un nombre imaginaire.

    On peut donc définir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type
      Complexe = record
        Reel, Imaginaire : reals
      end
    Enfin, tu seras obligé de séparer tes calculs pour la partie réelle de ton nombre, et la partie imaginaire.

    Bonne chance

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci pour vos réponses !
    Droggo : C'était un essai, j'ai copié mon programme en laissant toute les erreurs comme telles, donc tu as raison le compilateur me le refusait. Comme j'ai dis je suis débutant, j'ai eu 3 séances sur la programmation et c'est vraiment pas mon point fort ! "Un programme qui fait exactement ce que je fais à la main " ? Je ne vois pas trop ce que tu veux dire.. J'essaye de faire le moins compliqué possible avec ce que j'ai appris !
    mick605 : Merci pour l'astuce ! Je me lance tout de suite..

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Désolé pour le double post..
    Voilà ce que j'obtient en modifiant légèrement ton astuce. (sachant que "record" n'a pas été employé lors de mes séances)
    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
            var A, B, C:Integer;
                Discriminant :real;
                Racine1, Racine2: real;
                Reel, Imaginaire1, Imaginaire2 : real;
     
     
    begin
         Writeln('Saisir les valeurs de A,B,C (A est différent de 0) :');
         Readln (A,B,C);
         Discriminant:=(B*B)-(4*A*C);
     
         if Discriminant < 0
         then
              Begin
                  Reel:=(-B)/(2*A);
                  Imaginaire1:=(-sqrt(abs(Discriminant))/2*A);
                  Imaginaire2:=(sqrt(abs(Discriminant))/2*A);
                  Writeln ('Aucune racines dans R, mais deux racines dans C :', 'R1 =',Reel, '+ i*',Imaginaire1, ' et ', 'R2=',Reel, '+ i*',Imaginaire2);
              end;
    etc...

    Pas d'erreurs détectées, et même si j'ai un peu "triché" j'obtient un résultat sous la forme R1=A+iB et R2=C+iD merci à vous !

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 941
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 941
    Points : 5 652
    Points
    5 652
    Par défaut
    Hia,
    Citation Envoyé par romain47 Voir le message
    "Un programme qui fait exactement ce que je fais à la main " ? Je ne vois pas trop ce que tu veux dire
    Quand tu résous l'équation à la main, tu fais les différents calculs en les notant sur une feuille, et pas superposés au même endroit si tu ne veux pas te trouver dans l'impossibilité de les relire.

    Pour ton programme, il faut une variable par valeur possible. Comme la solution ne peut mettre en jeu qu'un des cas, tu peux t'arranger pour en réutiliser certaines, pour ne pas en déclarer plus que nécessaire.

    Dans ton programme, une précaution élémentaire est de contrôler qu'on entre a différent de 0.

    Et n'oublie pas de rajouter le traitement des autres cas.
    Si les cons volaient, il ferait nuit à midi.

  7. #7
    Membre chevronné

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Points : 1 765
    Points
    1 765
    Par défaut
    Citation Envoyé par romain47 Voir le message
    Pas d'erreurs détectées, et même si j'ai un peu "triché" j'obtient un résultat sous la forme R1=A+iB et R2=C+iD merci à vous !
    Non, tu n'as pas triché ... Il n'existe pas d'autre manière de faire, en fait ...


    Tu peux économiser des calculs et de la mémoire en remarquant que Imaginaire1 = -Imaginaire2, donc tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Writeln ('Aucune racines dans R, mais deux racines dans C :', 'R1 =',Reel, '+ i*',Imaginaire1, ' et ', 'R2=',Reel, '+ i*',-Imaginaire1);
    Et si ton problème est résolu, clique sur Résolu en bas de la page ^^

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

Discussions similaires

  1. Les nombres complexes dans java
    Par gjava dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 01/03/2013, 15h50
  2. [TPW] Opérations sur les nombres complexes
    Par forum dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 04/12/2011, 12h48
  3. [TPW] Unité Complex2 : Opérations élémentaires sur les nombres complexes
    Par forum dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 04/12/2011, 12h44
  4. Les nombres complexe et delphi
    Par wikers dans le forum Langage
    Réponses: 3
    Dernier message: 04/08/2005, 12h47
  5. [LG]Nombres complexes et forme polaire
    Par chavernac dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2005, 19h36

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