Tri par insertion d'une liste
braham2
Messages postés
87
Date d'inscription
Statut
Membre
Dernière intervention
-
braham2 Messages postés 87 Date d'inscription Statut Membre Dernière intervention -
braham2 Messages postés 87 Date d'inscription Statut Membre Dernière intervention -
Bonjour, comment allez vous mes amis alors j'ai probleme j'arrive pas a trouvé une solution bien définie et voici l'énoncé de mon probleme:
1.
le tri pr insertion dans une liste linéaire chainé de n elements peut etre formulé comme suit :
pour p allant de 1 a n-1
considérer la sous liste triée formé des p premier elements
supprimé le p-1 iéme élément
l'insérer dans cette sous liste a a bonne place sn créer un nouveau maillon
donner le programme en pascale .
2.
dans 1 la recherche de la position dans laquelle l'élément est insérer se fait ordinairement à partir du premier élément. on désire maintenant que cette recherch se fasse par rapport au dernier élément insérer. c'st a dire i l'élément à inserer est superieur ou égal au dernier élément insérer la recherche de sa position se fait a partir de cet élément autrement à partir du début.
refaire l'algorithme précédent en rajoutant t en mettant en relief les opérations rajouté pour le but désiré.
3.
afin d'amelioré la variante 1. l'insertion d'un élément dans une sous liste se fera par rapport à un élément déja insérer qui soit le plus proche de la position du milieu.donc quand un nouvel élément est insérer dans une sous liste on choisira entre cet élément et le dernier insérer celui qui est le plus proche du mileu .
reprendre l'algorithme précédent en rjoutant et en mettant en relif les opérations rajoutées pour l'objectif désiré.
aidez moi s'il vous plait urgent please.
1.
le tri pr insertion dans une liste linéaire chainé de n elements peut etre formulé comme suit :
pour p allant de 1 a n-1
considérer la sous liste triée formé des p premier elements
supprimé le p-1 iéme élément
l'insérer dans cette sous liste a a bonne place sn créer un nouveau maillon
donner le programme en pascale .
2.
dans 1 la recherche de la position dans laquelle l'élément est insérer se fait ordinairement à partir du premier élément. on désire maintenant que cette recherch se fasse par rapport au dernier élément insérer. c'st a dire i l'élément à inserer est superieur ou égal au dernier élément insérer la recherche de sa position se fait a partir de cet élément autrement à partir du début.
refaire l'algorithme précédent en rajoutant t en mettant en relief les opérations rajouté pour le but désiré.
3.
afin d'amelioré la variante 1. l'insertion d'un élément dans une sous liste se fera par rapport à un élément déja insérer qui soit le plus proche de la position du milieu.donc quand un nouvel élément est insérer dans une sous liste on choisira entre cet élément et le dernier insérer celui qui est le plus proche du mileu .
reprendre l'algorithme précédent en rjoutant et en mettant en relif les opérations rajoutées pour l'objectif désiré.
aidez moi s'il vous plait urgent please.
A voir également:
- Tri par insertion d'une liste
- Liste déroulante excel - Guide
- Excel trier par ordre croissant chiffre - Guide
- Logiciel tri photo - Guide
- Liste déroulante en cascade - Guide
- Touche insertion clavier - Guide
2 réponses
salut et bjr j'ai fais deux algorithme un est marche très bien mais avec d'autre methode et le deuxiéme non
voila le premier programme qui n'est pas marché :
program ansire;
type pnt=^element;
element=record
val:integer;
suiv:pnt;
end;
var
n,v:integer;
l,r,k:pnt;
procedure creation(var l:pnt ;var c:integer);
var
p:pnt;
bool:boolean;
v:integer;
begin
l:=nil;
c:=0;
bool:=true;
writeln;
writeln(' entre la list lorsque vous avez termine tape sur 0');
while bool=true do
begin
c:=c+1;
write(' ');
readln(v);
if v=0 then begin
bool:=false
end
else begin
new(p);
p^.val:=v;
p^.suiv:=l;
l:=p;
end;
end;
end;
procedure affiche(l:pnt);
var
p:pnt;
begin
writeln(' la liste est le suivant');
p:=l;
while p<>nil do
begin
writeln(' ',p^.val);
p:=p^.suiv;
end;
end;
begin
creation(l,n);
writeln('donne la val de pnt qui v.ins ');
readln(v);
new(k);
k^.val:=v;
r:=l;
if( r^.suiv=l) then
begin
r^.suiv:=k;
end
else begin
l:=k;
end;
k^.suiv:=r^.suiv;
affiche(l);
readln;
end.
et voila le deuxiéme qu'il fonctionne :
Program Inserer_Un_Element_Liste_Contigue;
Const N=10;
Type Element = Integer;
Tableau = Array[1 ..N] of Element;
Var Liste : Tableau;
Elt : Element;
{Procédure de création de la liste}
Procedure Creation (Var L: Tableau);
Var J : Integer;
Begin
For J:=1 to N-1 do
Begin
Writeln;
Write(' Elément n? ', J,' : ');
readln(L[J]);
While L[J] = 0 do
Begin
Write(' L"élément doit être supérieur à zéro (0) : ');
Readln(L[J]);
End;
End;
End;
{Procédure qui trie la liste}
Procedure Tri(var L3:Tableau);
Var A,B:Integer;
Trouve: Boolean;
Begin
A:=1;
While A <= N-1 do
Begin
B := A + 1;
While B <= N-1 do
Begin
If L3[A] > L3[B] then
Begin
Elt := L3[A];
L3[A] := L3[B];
L3[B] := Elt;
B := B + 1;
End
Else
Begin
B := B + 1;
End;
End;
A := A + 1;
End;
End;
{Procédure qui affiche la liste après le tri}
Procedure Affiche (L2: Tableau);
Var I, K: Integer;
Begin
Write(' ');
For I:=1 to N do
Begin
Write(L2[I],' | ');
End;
End;
{Procédure qui insère un élément en respectant l’ordre de la liste}
Procedure Insertion (var L1: Tableau);
Var I : Integer;
Tete, Elem : Element;
Trouve : Boolean;
{Procédure qui crée un espace vide pour l’insertion d’un élément}
Procedure Espacement(I: integer);
Var H: Integer;
Begin
For H:= N Downto I+1 do
Begin
L1[H] := L1[H-1];
End;
End;
Begin
Writeln; Writeln; Writeln;
Write(' Donner l"élément à insérer dans la liste: ');
Readln(Elem);
I:=1;
While (I <= N) and (Trouve = False) do
Begin
If (Elem > L1[I]) and (L1[I] <> 0)then
Begin
Trouve:=False;
I := I + 1;
End
Else
Begin
Trouve:= true;
If I = 1 then
Begin
Espacement(I);
L1[I]:=Elem;
End
Else
If I = N then
Begin
L1[I]:= Elem;
End
Else
Begin
Espacement(I);
L1[I]:=Elem;
End;
End;
End;
End;
BEGIN { PROGRAMME PRINCIPAL }
Creation (Liste);
Writeln; Writeln; Writeln;
Writeln(' LES ELEMENTS DE LA LISTE AVANT L"INSERTION');
Writeln;
Tri(Liste);
Affiche(Liste);
Insertion(Liste);
Writeln;
Writeln(' LES ELEMENTS DE LA LISTE APRES L"INSERTION ');
Writeln;
Affiche (Liste);
Readln;
END.
voila le premier programme qui n'est pas marché :
program ansire;
type pnt=^element;
element=record
val:integer;
suiv:pnt;
end;
var
n,v:integer;
l,r,k:pnt;
procedure creation(var l:pnt ;var c:integer);
var
p:pnt;
bool:boolean;
v:integer;
begin
l:=nil;
c:=0;
bool:=true;
writeln;
writeln(' entre la list lorsque vous avez termine tape sur 0');
while bool=true do
begin
c:=c+1;
write(' ');
readln(v);
if v=0 then begin
bool:=false
end
else begin
new(p);
p^.val:=v;
p^.suiv:=l;
l:=p;
end;
end;
end;
procedure affiche(l:pnt);
var
p:pnt;
begin
writeln(' la liste est le suivant');
p:=l;
while p<>nil do
begin
writeln(' ',p^.val);
p:=p^.suiv;
end;
end;
begin
creation(l,n);
writeln('donne la val de pnt qui v.ins ');
readln(v);
new(k);
k^.val:=v;
r:=l;
if( r^.suiv=l) then
begin
r^.suiv:=k;
end
else begin
l:=k;
end;
k^.suiv:=r^.suiv;
affiche(l);
readln;
end.
et voila le deuxiéme qu'il fonctionne :
Program Inserer_Un_Element_Liste_Contigue;
Const N=10;
Type Element = Integer;
Tableau = Array[1 ..N] of Element;
Var Liste : Tableau;
Elt : Element;
{Procédure de création de la liste}
Procedure Creation (Var L: Tableau);
Var J : Integer;
Begin
For J:=1 to N-1 do
Begin
Writeln;
Write(' Elément n? ', J,' : ');
readln(L[J]);
While L[J] = 0 do
Begin
Write(' L"élément doit être supérieur à zéro (0) : ');
Readln(L[J]);
End;
End;
End;
{Procédure qui trie la liste}
Procedure Tri(var L3:Tableau);
Var A,B:Integer;
Trouve: Boolean;
Begin
A:=1;
While A <= N-1 do
Begin
B := A + 1;
While B <= N-1 do
Begin
If L3[A] > L3[B] then
Begin
Elt := L3[A];
L3[A] := L3[B];
L3[B] := Elt;
B := B + 1;
End
Else
Begin
B := B + 1;
End;
End;
A := A + 1;
End;
End;
{Procédure qui affiche la liste après le tri}
Procedure Affiche (L2: Tableau);
Var I, K: Integer;
Begin
Write(' ');
For I:=1 to N do
Begin
Write(L2[I],' | ');
End;
End;
{Procédure qui insère un élément en respectant l’ordre de la liste}
Procedure Insertion (var L1: Tableau);
Var I : Integer;
Tete, Elem : Element;
Trouve : Boolean;
{Procédure qui crée un espace vide pour l’insertion d’un élément}
Procedure Espacement(I: integer);
Var H: Integer;
Begin
For H:= N Downto I+1 do
Begin
L1[H] := L1[H-1];
End;
End;
Begin
Writeln; Writeln; Writeln;
Write(' Donner l"élément à insérer dans la liste: ');
Readln(Elem);
I:=1;
While (I <= N) and (Trouve = False) do
Begin
If (Elem > L1[I]) and (L1[I] <> 0)then
Begin
Trouve:=False;
I := I + 1;
End
Else
Begin
Trouve:= true;
If I = 1 then
Begin
Espacement(I);
L1[I]:=Elem;
End
Else
If I = N then
Begin
L1[I]:= Elem;
End
Else
Begin
Espacement(I);
L1[I]:=Elem;
End;
End;
End;
End;
BEGIN { PROGRAMME PRINCIPAL }
Creation (Liste);
Writeln; Writeln; Writeln;
Writeln(' LES ELEMENTS DE LA LISTE AVANT L"INSERTION');
Writeln;
Tri(Liste);
Affiche(Liste);
Insertion(Liste);
Writeln;
Writeln(' LES ELEMENTS DE LA LISTE APRES L"INSERTION ');
Writeln;
Affiche (Liste);
Readln;
END.
Ben montres-nous déjà ce que tu as fait...