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] Intersection de deux tableaux à mettre dans un troisième tableau


Sujet :

Turbo Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut [TP] Intersection de deux tableaux à mettre dans un troisième tableau
    voila mon code,il est juste?
    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
    procedure intersection(a1,b1:tab;n1:integer;var inter1:tab;var s1:integer);
    var i,j:integer;
    begin
    s1:=0; 
     for i:=1 to n1 do
      begin
      for j:=1 to n1 do
       begin
       if a1[i]=b1[j] then
        begin
        inter1[i]:=a1[i] ;
        s1:=s1+1; {pour determiner la taille du nouveau tableau inter}
        end;
       end;
      end;
    end;

  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
    Fie,

    Non, et en testant, tu as bien dû t'en apercevoir.

    1) Les 2 tableaux a1 et b1 ont-ils forcément la même taille n1 ?

    2) quand tu as trouvé une valeur présente dans les 2 tableaux, et donc correspondant bien à l'intersection des 2 tableaux, tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        inter1[i]:=a1[i] ;
        s1:=s1+1; {pour determiner la taille du nouveau tableau inter}
    ce qui contient 2 erreurs :

    a) i est l'indice de déplacement dans le tableau a1, et n'a pas à servir pour mettre une valeur dans le tableau inter

    b) comme tu as initialisé s1 à 0, et que manifestement tes tableaux commencent à l'indice 1, il fait incrémenter s1 avant de s'en servir pour mettre une valeur dans inter.

    il faut donc remplacer tes 2 lignes par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        s1:=s1+1; {pour determiner la taille du nouveau tableau inter}
        inter1[s1]:=a1[i] ;
    D'autre part, je l'ai dit assez souvent, quand on passe des données de taille importante à une fonction/procédure, il faut éviter de faire une copie locale, comme cela se fait avec la déclaration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure intersection(a1,b1:tab;n1:integer;var inter1:tab;var s1:integer);
    Il faut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure intersection(const a1,b1:tab;n1:integer;var inter1:tab;var s1:integer);
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    1) c'est l'énoncé du probleme qui demande a ce que les deux tableaux soient de meme taille.
    2) comme je l'ai précisé dans un sujet précédent,l'expression const n'est pas dans les outils qui sont a ma disposition pour résoudre les problemes de cette année,donc je suis obligé de faire cette copie locale,a moins qu'il y est une autre solution.
    Sinon voila ce que j'ai modifié,aprés tes dernieres explications
    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
    procedure det(a1,b1:tab;n1:integer;var inter1:tab;var s1:integer);
    var i,j:integer;
    begin
    s1:=0; 
     for i:=1 to n1 do
      begin
      for j:=1 to n1 do
       begin
       if a1[i]=b1[j] then
        begin
        s1:=s1+1;
        inter1[s1]:=a1[i] ;
        end;
       end;
      end;
    end;

  4. #4
    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
    Joa,
    Citation Envoyé par mah00
    1) c'est l'énoncé du probleme qui demande a ce que les deux tableaux soient de meme taille.
    Ok
    Citation Envoyé par mah00
    2) comme je l'ai précisé dans un sujet précédent,l'expression const n'est pas dans les outils qui sont a ma disposition pour résoudre les problemes de cette année,donc je suis obligé de faire cette copie locale,a moins qu'il y est une autre solution.
    ok, et désolé, je ne relis pas tous les sujets tous les jours.
    Comme je l'avais déjà probablement précisé, si tu ne dois pas utiliser const, utilise var pour éviter une copie locale.
    Passer par var autorise la modification de l'original, mais cela n'oblige pas à le faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure det(var a1,b1:tab;n1:integer;var inter1:tab;var s1:integer);
    A part cela, le code est bon à une condition : que les 2 tableaux ne contiennent pas de valeurs en double (ou plus), sinon tu vas les ajouter plusieurs fois dans le tableau inter1.
    Mais je suppose que ton autre post sur la manière de n'entrer que des valeurs différentes dans un tableau est plus ou moins lié à ça ?
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 57
    Points : 20
    Points
    20
    Par défaut
    exactement
    Sauf que je ne voulais pas que ca fasse deux problemes a traiter dans le meme post!!
    Merci pour ton aide!

Discussions similaires

  1. Intersection de deux tableaux
    Par Imène_23 dans le forum Images
    Réponses: 1
    Dernier message: 13/01/2013, 11h56
  2. addition de deux tableaux stockés dans des fichiers
    Par M77ATTAR dans le forum Débuter
    Réponses: 2
    Dernier message: 27/11/2012, 17h48
  3. intersection de deux tableaux
    Par bobemile dans le forum 4D
    Réponses: 4
    Dernier message: 25/10/2012, 02h01
  4. Réponses: 2
    Dernier message: 13/07/2009, 02h42
  5. Réponses: 2
    Dernier message: 29/05/2008, 21h18

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