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 :

Programme qui calcule et affiche le produit vectoriel de deux vecteurs


Sujet :

Turbo Pascal

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Programme qui calcule et affiche le produit vectoriel de deux vecteurs
    Salut les ami(e)s, je suis nouveau au forum et j'ai un travail qui me casse la tête. Je suis en 1er Maintenance et j'ai un petit projet sur le calcul de vectoriel.
    Jusque là je me débrouille pas mal, mais ce point de la mise en chaîne de caractère me prend la tête.
    On nous a demandé d'écrire un programme qui calcul et affiche le produit vectoriel de deux vecteurs; après que l'utilisateur ait saisi les deux vecteurs en chaîne de caractère.
    Voici ce que j'ai fait jusque là.
    Est-ce que quelqu'un peut m'aider en me montrant comment est-ce qu'on fait ?

    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
    program vectoriel;
    uses crt;
    var
       A, B, V, ai, aj, ak, bi, bj, bk, vi, vj, vk: integer;
    BEGIN
     
           clrscr;
           writeln('Entrez les composantes du 1er vectoriel :');
           readln(ai, aj, ak);
           writeln('Le 1er vecteur est donc : A= ',ai,'i+',aj,'j+',ak,'k');
           writeln('Entrez les composantes du 2nd vecteur :');
           readln(bi, bj, bk);
           writeln('Le 2nd vecteur est donc : B= ',bi,'i+',bj,'j+',bk,'k');
     
           (* Formules *)
           vi:= ((aj*bk)-(ak*bj));
           vj:= ((ak*bi)-(ai*bk));
           vk:= ((ai*bj)-(aj*bi));
     
           writeln('Le produit vectoriel est : V= ',vi,'i+',vj,'j+',vk,'k');
           readln
    END.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 404
    Points : 5 790
    Points
    5 790
    Par défaut
    salut

    Pour afficher ton résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       writeln(Format('Le produit vectoriel est : V= %d*i+%d*j+%d*k',[vi,vj,vk]));
      readln
    la fonction format est extrêmement utile
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Mais si la fonction format est utile, alors comment faire ?
    Parce que les valeurs que doit saisir l'utilisateur doivent êtres en toute lettre, qui seront stockées dans une variable de type String et après ces variables seront effectuées à leurs équivalent en Integer; (donc une sorte de conversion de valeur String en Integer) qui seront ensuite stockées à leurs tour dans leurs variables respectives ai, aj et ak. Donc ça fait appel à des fonctions et procédures que je ne maîtrise pas encore.

  4. #4
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 329
    Points : 2 562
    Points
    2 562
    Billets dans le blog
    9
    Par défaut [Turbo Pascal] Programme qui calcule et affiche le produit vectoriel de deux vecteurs
    Bonjour,

    J'ai l'impression qu'il te faut saisir les six composantes sous forme de chaînes de caractères,

    Citation Envoyé par Chuck Talboth Voir le message
    ... On nous a demandé d'écrire un programme qui calcul et affiche le produit vectoriel de deux vecteurs; après que l'utilisateur ait saisi les deux vecteurs en chaîne de caractère ... [/CODE]
    puis les transformer en données numériques à l'aide de la procédure Val:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      PROCEDURE Val(s: String; VAR Nombre; VAR CodeE: LongInt);
    donc déclarer plus ou moins:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      VAR ai, aj, ak, bi, bj, bk, vi, vj, vk: String
    Cela implique le transtypage inverse, en ayant recours à la procedure Str ...
    et sur la lancée, définir les vecteurs (A, B, C) comme des variables structurées de type RECORD ou ARRAY (un peu spécial, comme énoncé ! mais un très bon entraînement).

    Cela peut se traduire par des instructions comme:
    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
     
    TYPE Trip_S = RECORD  i, j, k: String  END;             // Triplet de chaîne de caractères
    VAR A, B, C: Trip_S;
     
    PROCEDURE ProdVect(Ta, Tb: Trip_S; VAR Tc: Trip_S);
      CONST m = 10;
      TYPE Vect = RECORD  x, y, z: LongInt  END;            // Il est plus prudent d'utiliser des entiers longs 
      VAR p, q, CodeE: LongInt; U, V, W: Vect; Tab: Trip_S;
      BEGIN
        Val(Ta.i, U.x, CodeE);  Val(Ta.j, U.y, CodeE); Val(Ta.k, U.z, CodeE);
        Val(Tb.i, V.x, CodeE);  Val(Tb.j, V.y, CodeE); Val(Tb.k, V.z, CodeE);
        p:= U.y * V.z;          q:= U.z * V.y;         W.x:= p - q;    // il vaut mieux affecter les résultats intermédiaires à des variables locales
        ...    
        Str(W.x:m, Tab.i);      Str(W.y:m, Tab.j);     Str(W.z:m, Tab.k); Tc:= Tab
      END;
    Instructions à vérifier dans le détail; j'utilise peu ces procédures.
    Tu parais capable de rédiger le programme.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  5. #5
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 329
    Points : 2 562
    Points
    2 562
    Billets dans le blog
    9
    Par défaut [Turbo Pascal] Programme qui calcule et affiche le produit vectoriel de deux vecteurs
    Citation Envoyé par anapurna Voir le message
    ... Pour afficher ton résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       writeln(Format('Le produit vectoriel est : V= %d*i+%d*j+%d*k',[vi,vj,vk]));
      readln
    la fonction format est extrêmement utile
    Réponse intéressante - je ne connaissais pas cette fonction, et les paramètres qui s'y rattachent; elle est présente dans le répertoire de Virtual Pascal (publicité gratuite).
    Je doute qu'elle figure dans celui de Turbo Pascal 7: je n'ai rien trouvé dans mes bouquins.
    Cela a été cependant l'occasion de revoir ce sujet, et tout ce qui s'y rapporte sur la Toile.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    OMG... Là je suis plus que perdu ! Je me demande comment l'intégré dans mon programme.

    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 vectoriel;
    uses crt;
    VAR
       A, B, V, ai, aj, ak, bi, bj, bk, vi, vj, vk: Integer;
    rept: String;
    BEGIN
           rept:='r';
           while(rept='r') do begin
     
           clrscr;       
           writeln('Entrez les composantes du 1er vecteur :');
           writeln('');
           readln(ai, aj, ak);
           writeln('Le 1er vecteur est donc: A= ',ai,'i+',aj,'j+',ak,'k');
           writeln('');
           writeln('Entrez les composantes du 2nd vecteur :');
           readln(bi, bj, bk);
           writeln('Le 2nd vecteur est donc: B= ',bi,'i+',bj,'j+',bk,'k');
     
           (* Formules *)
           vi:= ((aj*bk)-(ak*bj));
           vj:= ((ak*bi)-(ai*bk));
           vk:= ((ai*bj)-(aj*bi));
     
           writeln('');
           writeln('Le produit vectoriel est: V= ',vi,'i+',vj,'j+',vk,'k');
     
           writeln('');
           writeln('Appuyez sur [ R ] pour recommencer ou sur n''importe quelle touche pour quitter');
           read(rept);
           readln
           end;
    END.
    Mais merci quand même.



    Citation Envoyé par wiwaxia Voir le message
    Bonjour,

    J'ai l'impression qu'il te faut saisir les six composantes sous forme de chaînes de caractères,



    puis les transformer en données numériques à l'aide de la procédure Val:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      PROCEDURE Val(s: String; VAR Nombre; VAR CodeE: LongInt);
    donc déclarer plus ou moins:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      VAR ai, aj, ak, bi, bj, bk, vi, vj, vk: String
    Cela implique le transtypage inverse, en ayant recours à la procedure Str ...
    et sur la lancée, définir les vecteurs (A, B, C) comme des variables structurées de type RECORD ou ARRAY (un peu spécial, comme énoncé ! mais un très bon entraînement).

    Cela peut se traduire par des instructions comme:
    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
     
    TYPE Trip_S = RECORD  i, j, k: String  END;             // Triplet de chaîne de caractères
    VAR A, B, C: Trip_S;
     
    PROCEDURE ProdVect(Ta, Tb: Trip_S; VAR Tc: Trip_S);
      CONST m = 10;
      TYPE Vect = RECORD  x, y, z: LongInt  END;            // Il est plus prudent d'utiliser des entiers longs 
      VAR p, q, CodeE: LongInt; U, V, W: Vect; Tab: Trip_S;
      BEGIN
        Val(Ta.i, U.x, CodeE);  Val(Ta.j, U.y, CodeE); Val(Ta.k, U.z, CodeE);
        Val(Tb.i, V.x, CodeE);  Val(Tb.j, V.y, CodeE); Val(Tb.k, V.z, CodeE);
        p:= U.y * V.z;          q:= U.z * V.y;         W.x:= p - q;    // il vaut mieux affecter les résultats intermédiaires à des variables locales
        ...    
        Str(W.x:m, Tab.i);      Str(W.y:m, Tab.j);     Str(W.z:m, Tab.k); Tc:= Tab
      END;
    Instructions à vérifier dans le détail; j'utilise peu ces procédures.
    Tu parais capable de rédiger le programme.

  7. #7
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 329
    Points : 2 562
    Points
    2 562
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Citation Envoyé par Chuck Talboth Voir le message
    ... Là je suis plus que perdu ! Je me demande comment l'intégrer dans mon programme ...
    Ce que j'ai posté correspond au coeur de programme: le calcul du produit vectoriel à partir des données au format String; il ne reste plus qu'à l'insérer entre la saisie des composantes des deux premiers vecteurs (A et B), et l'affichage de celles du troisième (C).

    Le programme principal pourra se présenter ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    TYPE Trip_S = RECORD  i, j, k: String  END;             // Triplet de chaîne de caractères
    VAR A, B, C: Trip_S;
     
    ...
     
    BEGIN
      Saisie(A, B);
      ProdVect(A, B, C);
      Aff
    END.
    et ne devrait pas présenter de problème d'écriture - je me suis efforcé de conserver ta notation. La seule contrainte est le recours à l'instruction With, spécifique des enregistrements; ce n'est pas difficile: il suffit d'adapter ce que tu as déjà écrit.

    Je tâcherai d'y revenir dès que possible. Peux-tu rédiger le contenu des deux nouvelles procédures citées ?


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  8. #8
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 329
    Points : 2 562
    Points
    2 562
    Billets dans le blog
    9
    Par défaut [Turbo Pascal] Programme qui calcule et affiche le produit vectoriel de deux vecteurs
    Voilà ce qui est apparu sur l'écran en reprenant ta mise en page, et le plan proposé:

    Nom : Im Ecran [2017-04-11].jpg
Affichages : 5074
Taille : 17,7 Ko

    Le recours aux enregistrements permet de manipuler les composantes par groupes de trois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     PROCEDURE Saisie(VAR A1, B1: Trip_S);
       VAR Vab: Trip_S;
       BEGIN
         TextBackGround(0); ClrScr; TextColor(15);
         WriteLn('Composantes du premier vecteur:');
         WITH Vab DO BEGIN
                       Write('Ai = '); ReadLn(i);
                       Write('Aj = '); ReadLn(j);
                       Write('Ak = '); ReadLn(k)
                     END;
         A1:= Vab;
         ... / ...
       END;
    La dernière procédure contient les instructions les plus simples, pour l'affichage à l'écran des résultats:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     PROCEDURE Aff;
       BEGIN
         WriteLn('Produit vectoriel C = A × B :');
         WriteLn('Ci = ', C.i);                                  // Variante possible:  WriteLn('Ci = ' + C.i); 
         ... / ...
       END;
    Elle pourrait être remplacée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     PROCEDURE AffC(C1: Trip_S);
       BEGIN
         WriteLn('Produit vectoriel C = A × B :');
         WITH C1 DO BEGIN
                      WriteLn('Ci = ' + i);
                      ... / ...
                    END;
         ReadLn
       END;
    le programme principal se terminant alors par
    PS: # Pour éviter tout débordement d'intervalle, il faut que les données ne dépassent pas 46340 = Trunc(231/2), les résultats intermédiaires (p, q) ou définitifs (C.i, ...) pouvant atteindre ± 463402 = ± 2 147 395 600 .
    # Cela conduira dans les cas extrêmes à représenter 10 chiffres, soit 11 caractères s'il y a le signe "moins"; donc pour toujours préserver l'alignement des colonnes, prendre la valeur m = 11 (au lieu de 10) dans la procédure ProdVect.


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Si j'ai bien compris, je dois insérer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WriteLn ('Entrez ...');
    ReadLn (ai, ... );
    Les composantes de tout les deux vecteurs et leurs instructions de lecture là où il y'a ...


    Citation Envoyé par wiwaxia Voir le message
    Bonjour,


    ...il ne reste plus qu'à l'insérer entre la saisie des composantes des deux premiers vecteurs (A et B), et l'affichage de celles du troisième (C).

    Le programme principal pourra se présenter ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    TYPE Trip_S = RECORD  i, j, k: String  END;             // Triplet de chaîne de caractères
    VAR A, B, C: Trip_S;
     
    ...
     
    BEGIN
      Saisie(A, B);
      ProdVect(A, B, C);
      Aff
    END.
    ...Peux-tu rédiger le contenu des deux nouvelles procédures citées ?
    Je crois ouais :-/

  10. #10
    Membre émérite

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 329
    Points : 2 562
    Points
    2 562
    Billets dans le blog
    9
    Par défaut [Turbo Pascal] Programme qui calcule et affiche le produit vectoriel de deux vecteurs
    Le plan de ce programme est, d'une façon tout-à-fait classique: Entrées / Calcul / Sortie , d'où les trois procédures successives:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    BEGIN
      Saisie(A, B);
      ProdVect(A, B, C);
      Aff                       // ou AffC(C)
    END.
    Il te suffit donc de reprendre, au niveau des pointillés, l'instruction (ou les instructions) précédente(s) en modifiant certains termes: une lecture attentive permet de voir ce qu'il faut écrire. Et rien ne t'empêche de t'inspirer de la capture d'écran précédente (#8).
    Je ne peux sinon t'en donner plus, ce qui reviendrait à te livrer un code que tu n'aurais pas compris, et cela n'aurait pas de sens.

    # Dans ton projet initial, tu mets sur le même plan les vecteurs (A, B, C) et leurs composantes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     VAR A, B, V, ai, aj, ak, bi, bj, bk, vi, vj, vk: Integer;
    Or les premiers sont des triplets de composantes (enregistrements ou tableaux), inassimilables aux autres variables; il faut donc choisir entre deux sortes de déclarations:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     VAR A, B, V: Type_Vecteur;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     VAR ai, aj, ak, bi, bj, bk, vi, vj, vk: Type_Composante;
    option nettement plus lourde, comme cela a déjà été indiqué:
    Le recours aux enregistrements permet de manipuler les composantes par groupes de trois.
    # L'emploi du type Record te donne-t-il des difficultés ? Cela vaut le coup de t'y mettre, car il s'agit ici du cas le plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TYPE Trip_S = RECORD  i, j, k: String  END; 
     
    TYPE Vect = RECORD  x, y, z: LongInt  END;
    comportant 3 données de même type (String ou LongInt).
    Les instructions qui leur sont spécifiques figurent dans les messages précédents - il suffit d'en écrire de nouvelles, en remplaçant certains noms de variables par d'autres (on en revient à ce qui a été dit plus haut).


    Le français, notre affaire à tous
    Grand Dictionnaire Terminologique

Discussions similaires

  1. Réponses: 16
    Dernier message: 13/01/2008, 22h28
  2. comment faire un programme qui calcul la somme ?
    Par jahjouna dans le forum C++
    Réponses: 18
    Dernier message: 13/12/2006, 01h33

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