Programme tableau

Résolu/Fermé
el_clapotis Messages postés 15 Statut Membre -  
el_clapotis Messages postés 15 Statut Membre -
Bonjour,
voici l'exercice
ecrire un algorithme qui lit un tableau de taille N et élimine la redondance sur place (sans utiliser un tableau d'aide)
example: pour N=6
tableau avant 12 4 8 4 12 4
tableau après 12 4 8 et N=3

j'ai essayer et voilà ma solution

program redondance;
var t:array[1..100] of real; i,n,d,cpt:integer; x,v,p:real;
begin
writeln('donnez la taille du tableau');
readln(n);
writeln('donnez la premiere valeur');
readln(p);
t[1]:=p; cpt:=0;
for i:=2 to n do
begin
writeln('donnez la valeur suivante');
readln(v);
d:=i;
for i:=1 to d-1 do
begin
if (v=t[i]) then
begin
x:=v; cpt:=cpt+1;
end;
end;
t[i]:=v;
i:=i+1;
end;

for i:=1 to n-cpt do
writeln(t[i]);

readln;


mais quand je l’exécute il m'affiche les cases similaires
je ne sais pas j'ai besoin de votre aide

ou est la faute??

5 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Je n'ai pas regardé en détail, mais il y a une erreur flagrante, c'est que tes deux boucles imbriquées utilisent la même variable i...
    0
    1. el_clapotis Messages postés 15 Statut Membre
       
      merci pour ta réponse mais rien n'a changé
      0
    2. KX Messages postés 19031 Statut Modérateur 3 020
       
      Montre ton nouveau code, comment tu as géré l'imbrication du coup ?
      0
      1. el_clapotis Messages postés 15 Statut Membre > KX Messages postés 19031 Statut Modérateur
         
        for i:=2 to n do
        begin
        writeln('donnez la valeur suivante');
        readln(v);
        d:=i;
        for j:=1 to d-1 do
        begin
        if (v=t[j]) then
        begin
        x:=v; cpt:=cpt+1;
        end;
        end;
        t[i]:=v;
        i:=i+1;
        end;

        for i:=1 to n-cpt do
        writeln(t[i]);

        readln;
        end.
        0
      2. Yoda > el_clapotis Messages postés 15 Statut Membre
         
        Bonjour,

        A quoi sert la variable x?
        Ce que tu dois faire dans la 2ème boucle, c'est comparer chaque élément du tableau à v.
        Si tu trouve une égalité, tu ne fais rien, sinon tu ajoute v au tableau et incrémente cpt.
        Tu dois aussi initialiser cpt à 1 car il y a au moins un élément.
        Enfin tu affiche le tableau (for i:=1 to cpt do). A toi de jouer.
        0
      3. el_clapotis Messages postés 15 Statut Membre > Yoda
         
        merci pour ton aide ^^
        le x c'est comme une corbeille mais enfin il ne sert à rien
        je vais essayez plus ,
        0
  2. jisisv Messages postés 3678 Statut Modérateur 936
     
    Regarde ceci. Il y a plein d'améliorations à faire et de tests à effectuer.
    program redondance;
    var t:array[1..100] of real;
       n, cnt, i , j:integer;
       val      :real;
    begin
    
       writeln('donnez la taille du tableau');
       readln(n);
    
       for i:=1 to n do
          t[i] := 0 ;
    
       cnt := 1;
    
       for i:=1 to n do
       begin
          write('donnez la valeur (' , i:2 , '/', n:2, ') suivante:');
          readln(val);
    
          j := 1;
    
          while ( ( j < cnt ) and ( t[j] <> val ) ) do
          begin
    	 j := j + 1;
          end;
          if (( j = cnt ) or ( cnt =1 )) then
          begin
    	 t[cnt] := val;
    	 cnt := cnt + 1 ;
          end;
       end;
    
       cnt := cnt - 1;
    
       for i:= 1 to cnt  do
          writeln(t[i]);
    
    end.
    


    Testé sous p2c (Pascal to C), fpc (FreePascal), BorlandPascal7.

    Gates gave ^W  sold  you the windows.
    GNU gave us the whole house.(Alexandrin)
    0
    1. el_clapotis Messages postés 15 Statut Membre
       
      merci beaucoup pour l'aide et pour ton temps;
      je vais essayez de le comprendre et améliorer
      c'est intéressant
      0
    2. el_clapotis Messages postés 15 Statut Membre
       
      ça marche c génialll;;; j'ai compris mes fautes
      mais c trop sympa merci beaucoup
      je souhaite me développer
      0
    3. el_clapotis Messages postés 15 Statut Membre
       
      Pourquoi t'as rempli le tableau au début par des zéros ?
      0
    4. jisisv Messages postés 3678 Statut Modérateur 936
       
      Il est vrai que dans la forme actuelle, c'est superflu.
      Sans doute la boone habitude d'initialiser toutes les variables.

      Par contre , il faudrait trouver une combine pour simplifier la condition
      if (( j = cnt ) or ( cnt =1 )) then : supprimer le OU.
      Si le compilateur est optimisé, ie code généré n'évaluera cependant le second derme du OU que si le premier terme est false
      0
  3. Profil bloqué
     
    Un traitement en temps réel; exclusion des éléments redondants et mise à jour du curseur de remplissage.

    Une autre version consiste à saisir les éléments du tableau en vrac et effectuer des collisions sur les éléments redondants par décalage à gauche.

    program Redondance;
    
    const Max = 100;
    type Tableau = array[1 .. Max] of Real;
    
    procedure Curseur(var N : Integer);
    begin
    Write('Donnez le nombre d''elements a saisir : N <= ', Max, ' : ');
    Readln(N);
    end;
    
    procedure Alimentation(var T : Tableau; var N : Integer);
    var I, J, sentinelle : Integer;
    EnCours : Real;
    Negatif : Boolean;
    
    begin
    
    Write('Donnez le premier element du Tableau : ');
    Readln(T[1]);
    
    Sentinelle := 1;
    Negatif := True;
    I := 2;
    while I <= N do begin
    Write('Donnez l''lement ', I, ' : ');
    ReadLn(EnCours);
    
    for J := 1 to Sentinelle do begin
    if Encours = T[J] then begin
    Negatif := False;
    Break;
    end;
    end;
    
    if Negatif then begin
    Sentinelle := sentinelle + 1;
    T[Sentinelle] := EnCours;
    end;
    
    Negatif := True;
    I := I + 1;
    end;
    N := Sentinelle;
    end;
    
    var T : Tableau;
    N, I : integer;
    
    begin
    
    Curseur(N);
    Writeln;
    Writeln('Alimenter les ', N, ' elements du tableau');
    Writeln;
    Writeln('Exclusion des elements redondants');
    Writeln('et affichage des elements distincts');
    Writeln;
    Alimentation(T, N);
    Writeln;
    
    for I := 1 to N do
    Write(T[I]:6:2);
    
    ReadLn;
    
    end.
    0
    1. el_clapotis Messages postés 15 Statut Membre
       
      Je te remercie pour ton grand aide
      T'as m'a donné une autre idée très intéressante
      :)
      0
  4. Utilisateur anonyme
     
    Salut,

    Suite à ton alerte (la 3e). CCM ne supprime pas les topics à la demande et sans raisons valables (hors charte). Nous supprimons seulement lorsque des infos personnelles sont mentionnées, ce qui n'est pas le cas ici et contrairement à ce que tu dis dans ton alerte.

    Le but d'un forum d'entraide (entre autres) c'est que les sujets résolus servent à d'autres avec un problème similaire.

    @+

    "Pouvoir du prisme lunaire transforme moi"
    (Sailormoon - 1992-1997 - RIP).
    0
    1. Profil bloqué
       
      Le code que j'ai posté ne tente rien supprimer et comme je demeure son auteur, j'en ai rien tenter de supprimer, apparemment tu as appris beaucoup de choses en si peu de temps sur ce plateau sauf que ton post s'est trompé de destinataire et de fait tombé en rebut .
      0
    2. Utilisateur anonyme
       
      ?

      Je parle à l'auteur du topic et à la personne qui a fait le signalement (el_clapotis). Mon post est donc bien au bon endroit. Merci, je sais donc beaucoup de choses, oufff.
      0
    3. Profil bloqué
       
      Moi, je ne l'ai pas signalé et j'en ai jamais signalé quelqu'un, quand il s'agit de privé, Commentcamarche offre une fenêtre pour messages en privé .
      0
    4. Utilisateur anonyme
       
      Je ne te parle pas à toi (bis). Je parle à l'auteur du topic (bis).
      Celui qui a signalé (bis). C'est pas toi (bis), donc merci, passe ton chemin --->.
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. el_clapotis Messages postés 15 Statut Membre
     
    OK Rossi j'ai tout compris.
    et ce message est passé pour moi Metaref pas pour toi c'est moi qui a lancé l'alerte.

    --
    0