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 :

Multiplication matricielle


Sujet :

Autres IDE Pascal

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Multiplication matricielle
    Bonjour tout le monde,

    Voilà, je butte sur un problème matriciel : je voudrais que les H soient correctement multipliés pour obtenir une matrice H2. (H*H), les entiers i et j et K sont les variables qui vont servir à effectuer l'opération.

    Je devrais avoir comme solution idéale, 5 lignes soigneusement affichées :
    true true true false false
    false false true false false
    false false false true false
    false false false false true
    false false false false false
    N'hésitez pas à me demander des précisions si je n'ai pas été claire, voici mon code.
    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
    program graphe_clement_gildas;
     
    const n=5 ;
    var
    H,H2 : array[1..n, 1..n] of boolean ;
    i,j,k : integer;
     
     
    begin
     
    H[1,1]:= true;
    H[1,2]:= true;
    H[1,3]:= true;
    H[2,3]:= true;
    H[3,4]:= true;
    H[4,5]:= true;
     
    for i := 1 to n do
    begin
        for j := 1 to n do
        begin
             for k:= 1 to n do
             begin
           H2[i,j]:=H[i,k]and H[k,j] or H2[i,j];
             end;
             write(H2[i,j],' ');
        end;
        readln  ;
    end;
     
    end.

  2. #2
    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
    Si ton problème concerne uniquement l'affichage, je pense que tu peux remplacer le readln que tu as mis dans la boucle par writeln pour avoir le résultat voulu.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Un problème de compilation:
    Rebonjour a tous

    Phénomène bizarre : mon code a fonctionné 2 fois puis d'un seul coup il a buggé et pas moyen de lui faire passer l'étape: 'Entre le nombre de nœuds'.
    Je ne vois même pas ce que j'ai pu modifier, mon programme compila correctement 2 minutes puis *pouf*.

    Voilà le code en question :

    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
     
     
    program graphe_clement_gildas;
     
    const n=100 ;
    var
    H,H2 : array[1..n, 1..n] of boolean ;
    i,j,k,nb,a,b,c: integer;
    F : text ;
     
    begin
    writeln('Entre le nombre de noeuds');
    readln(nb);
    Assign (F,'C:\serve_bulletin0.txt');
    Reset(F);
     
    while not eof(F) do
    begin
    readln(F,i,j);
    H[i,j]:= true;
    end;
     
    writeln('entrez les valeurs des deux noeuds');
    readln(a,b);
    c := 1;
    H2 := H;
    while (H2[a,b] = false) and (c <= nb) do
    begin
     
    for i := 1 to nb do
    begin
        for j := 1 to nb do
        begin
             for k:= 1 to nb do
             begin
           H2[i,j]:=H[i,k]and H[k,j] or H2[i,j];
             end;
     
        end;
     
    end;
    H := H2;
    c := c+1;
    end;
    if c > nb then c:= 0;
    writeln('le nombre d arcs entre ',a,' et ',b,' est egal a ',c);
    for i := 1 to nb do
    begin
        for j := 1 to nb do
        begin
             write(H2[i,j],' ');
        end;
        writeln;
    end;
    readln  ;
    end
    Notez le chemin d'accès en dur, il fait référence au fichier contenant les valeurs suivantes :

    1 1
    1 2
    1 3
    1 4


    Il s'agit d'un fichier texte.

    Est-ce que quelqu'un sur le forum pourrait essayer mon code sur son compilateur pascale et me dire si il marche pour lui? Car là je vois vraiment pas ce qui en va pas :/, mais alors pas du tout .

    Merci beaucoup pour votre aide.

    Gildas.

  4. #4
    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 Gildas777 Voir le message
    Rebonjour a tous
    Je ne vois même pas ce que j'ai pu modifier, mon programme compila correctement 2 minutes puis *pouf*.
    Que dit le compilateur? sur quelle ligne?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    ben justement : le programme compile sans problème!

    Il m'affiche: entrez le nombre de nœuds, je tape le chiffre, j'appuie sur entré et POUF! plus rien :/ !

    Essaye sur ton compilateur, tu verras c bizarre et là je vois pas ou est le problème car selon le compilateur tout va bien .

  6. #6
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 937
    Points : 59 417
    Points
    59 417
    Billets dans le blog
    2
    Par défaut
    Bonjour,

    Alors il faut lancer ton programme en mode débogage.
    Les principes expliqués dans la FAQ sont pour Turbo Pascal mais, grosso modo, c'est similaire pour tous les EDI : http://pascal.developpez.com/faq/?pa...amme-pas-a-pas

    Petite remarque en passant : tu oublies de fermer ton fichier après l'avoir lu.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  7. #7
    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
    Joe,
    Citation Envoyé par Gildas777 Voir le message
    ben justement : le programme compile sans problème!

    Il m'affiche: entrez le nombre de nœuds, je tape le chiffre, j'appuie sur entré et POUF! plus rien :/ !

    Essaye sur ton compilateur, tu verras c bizarre et là je vois pas ou est le problème car selon le compilateur tout va bien .
    Une compilation sans erreur n'est pas synonyme de programme sans erreur !

    Tout ce que ça te dit, c'est qu'il n'y a pas d'erreur de syntaxe.
    Si les cons volaient, il ferait nuit à midi.

  8. #8
    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
    Citation Envoyé par Gildas777 Voir le message
    ben justement : le programme compile sans problème!

    Il m'affiche: entrez le nombre de nœuds, je tape le chiffre, j'appuie sur entré et POUF! plus rien :/ !

    Essaye sur ton compilateur, tu verras c bizarre et là je vois pas ou est le problème car selon le compilateur tout va bien .
    Quel compilateur utilises-tu?
    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

  9. #9
    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
    Je n'ai pas cherché à résoudre ton problème, mais pour que ton code soit un peu correcte, il faudrait initialiser les variables avant de les utiliser (ne jamais laisser de place au hasard ).
    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
     
    program graphe_clement_gildas;
     
     const
              n = 100;
     type
             Graphe = array[1..n, 1..n] of boolean;
     
     
     var
            H, H2 : Graphe;
            i, j, k, nb, a, b, c : integer;
            F : text ;
     
     procedure initialiser(var tab : Graphe);
      var
           i, j : integer;
     begin
      for i:=1 to n do
       for j:=1 to n do
         tab[i, j]:=false;
     end;
     
    Begin
      initialiser(H);
     {...}
    End;
    Pense à faire une identation régulière de ton code, et à mettre les taches répétitives dans des fonctions.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Février 2010
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    J'utilise le compilateur : Dev-Pascal1.9.2.

Discussions similaires

  1. [Threads] Multiplications matricielles
    Par Jo8192 dans le forum Débuter
    Réponses: 31
    Dernier message: 13/04/2012, 18h34
  2. Réponses: 1
    Dernier message: 21/07/2011, 17h23
  3. Multiplication matricielle refusée
    Par PlapPlop dans le forum MATLAB
    Réponses: 3
    Dernier message: 07/03/2011, 07h28
  4. multiplication matricielle de matrice carre de taille 2^n
    Par ghassenus dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 07/11/2010, 05h26
  5. Complexité de l'algorithme de multiplication matricielle de strassen
    Par judge06 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 09/07/2007, 07h27

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