Programme tableau
Résolu/Fermé
el_clapotis
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
el_clapotis Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
el_clapotis Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
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
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??
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??
A voir également:
- Programme tableau
- Tableau word - Guide
- Tableau ascii - Guide
- Trier un tableau excel - Guide
- Tableau croisé dynamique - Guide
- Programme demarrage windows - Guide
5 réponses
Regarde ceci. Il y a plein d'améliorations à faire et de tests à effectuer.
Testé sous p2c (Pascal to C), fpc (FreePascal), BorlandPascal7.
Gates gave ^W sold you the windows.
GNU gave us the whole house.(Alexandrin)
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)
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
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
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.
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.
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).
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).
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
le x c'est comme une corbeille mais enfin il ne sert à rien
je vais essayez plus ,