Programme tableau

Résolu/Fermé
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016 - 13 mars 2016 à 16:28
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016 - 18 mars 2016 à 21:39
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

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
13 mars 2016 à 16:34
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
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016
13 mars 2016 à 16:52
merci pour ta réponse mais rien n'a changé
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
13 mars 2016 à 17:11
Montre ton nouveau code, comment tu as géré l'imbrication du coup ?
0
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016 > KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024
Modifié par KX le 13/03/2016 à 18:43
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
Yoda > el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016
13 mars 2016 à 18:33
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
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016 > Yoda
13 mars 2016 à 19:46
merci pour ton aide ^^
le x c'est comme une corbeille mais enfin il ne sert à rien
je vais essayez plus ,
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
Modifié par jisisv le 13/03/2016 à 19:03
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
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016
Modifié par el_clapotis le 13/03/2016 à 19:50
merci beaucoup pour l'aide et pour ton temps;
je vais essayez de le comprendre et améliorer
c'est intéressant
0
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016
Modifié par el_clapotis le 14/03/2016 à 16:15
ça marche c génialll;;; j'ai compris mes fautes
mais c trop sympa merci beaucoup
je souhaite me développer
0
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016
14 mars 2016 à 19:13
Pourquoi t'as rempli le tableau au début par des zéros ?
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
Modifié par jisisv le 14/03/2016 à 19:48
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
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
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016
14 mars 2016 à 19:46
Je te remercie pour ton grand aide
T'as m'a donné une autre idée très intéressante
:)
0
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
Profil bloqué
18 mars 2016 à 20:46
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
?

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
Profil bloqué
18 mars 2016 à 21:08
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
el_clapotis Messages postés 11 Date d'inscription lundi 7 décembre 2015 Statut Membre Dernière intervention 26 avril 2016
18 mars 2016 à 21:39
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