A voir également:
- Algorithme tri croissant
- Excel trier par ordre croissant chiffre - Guide
- Logiciel tri photo gratuit - Guide
- Logiciel algorithme gratuit - Télécharger - Édition & Programmation
- Vba trier colonne par ordre croissant - Forum VB / VBA
- Algorithme euromillion excel gratuit - Forum Logiciels
14 réponses
sebsauvage
Messages postés
32893
Date d'inscription
mercredi 29 août 2001
Statut
Modérateur
Dernière intervention
21 octobre 2019
15 659
9 août 2006 à 22:48
9 août 2006 à 22:48
Il existe plusieurs algo (tri à bulle, quicksort, etc.)
Tu n'as pas une idée sur la façon de faire ?
Essai d'imaginer comment tu ferais.
Et même sans ça, tu ne crois pas que tu pourrais chercher un peu sur Google ?
Tu n'as pas une idée sur la façon de faire ?
Essai d'imaginer comment tu ferais.
Et même sans ça, tu ne crois pas que tu pourrais chercher un peu sur Google ?
Bonjour,
essaie ceci
#include <stdio.h>
#include <conio.h>
#define LG 128
main()
{
int x[100]; /* tableau d'entiers */
int i = 0; /* variable de controle */
int last; /* Index de la derniere valeur saisie */
int d; /* nombre de passages de tri */
int k,j,z,ok; /*k,z et ok sont des variables de controles,et j un cpteur*/
int temp; /* variable auxiliaire pour permutation */
char reply; /* variable de contr0le */
char ligne[LG+1]; /*tabeau recevant la saisie de l'utilisateur au clavier*/
printf("Le programme saisit jusqu'à 100 entiers positifs compris entre \n"
"0 et 30000 et les trie en ordre croissant ou décroissant (au choix).\n"
"Fin par -1.\n\n");
printf("Entrez les nombres positifs :\n\n");
do
{
/*ici on controle si la valeur saisie est entiere et appatient à l'inteval
voulu,sinon on genère un message d'erreur*/ do{ ok=0;
gets(ligne);
for(j=0;j<strlen(ligne);j++)
/*ceci protège contre la saisie des valeurs réelles*/
if(ligne[j]=='.'){ok=1;printf("Saisie incorrecte!Recommencer SVP:\n");}
k=sscanf(ligne,"%d", &x[ i ]);
/*ceci protège contre une touche inattendue ou une valeur
non compris dans l'interval voulu*/ if(k!=1) {printf("Saisie incorrecte!Recommencer SVP:\n");ok=1;}
else if(!(x[ i ]>=-1&&x[ i ]<=30000)){printf("Saisie incorrecte!Recommencer SVP:\n"); ok=1;}
/*c'est le dernier test contre les données superflues du genre 25ff ou 2f*/
if(ok==0)for (j=0;j<strlen(ligne);j++){z=ligne[j]-'1';
if(!(z>=0&&z<10)&&x[i]!=-1&&ligne[j]!=32&&ligne[j]!='0')
{ok=1;
/*on vide*/
for (j=0;j<strlen(ligne);j++)ligne[j]=' ';
printf("Des données superflues saisies!\n");
printf("Recommencer la précédente saisie\n");}
}
}while(ok);
i++;
} while (x[i-1] != -1 && i < 100);
/*Rien n'est changé à ce niveau sauf le message sur le nombre des valeurs saisies*/
if(i==100) printf("\nvous avez saisie %d valeurs",i);
else printf("\nvous avez saisie %d valeurs",i-1);
if (i == 100)
last = i-1;
else
last = i-2;
if (i == 2)
printf("\n\nLe tableau ne contient que la valeur : %d\n\n", x[i-2]);
else if (i > 2)
{
printf("\n\nLe tableau contient les valeurs :\n\n");
for (i = 0; i <= last; i++)
{
printf("%d\t", x[ i ]);
if (i && (!(i % 8)))
printf("\n");
}
/*test de selection de choix*/
do{ ok=0;
printf("\n\nTri du tableau ?\n"
"Ascendant = a Descendant = d Non = n : ");
reply = getche();
k=reply;
if(k!='a'&&k!='d'&&k!='n'){ok=1;printf("\n\nchoix incorrect\n");}
if(k=='n')printf("\n\nFIN DU PROGRAMME,Merçi :p).");
}while(ok);
switch (reply)
{
case 'a': for (d = last; d != 0; d--)
for (i = 0; i < d; i++)
if (x[ i ] > x[i+1])
{ /* on permute */
temp = x[ i ];
x[ i ] = x[i+1];
x[i+1] = temp;
}
printf("\n\nLe tableau a été trié en ordre ascendant :\n\n");
for (i = 0; i <= last; i++)
{
printf("%d\t", x[ i ]);
if (i && (!(i % 8)))
printf("\n");
}
break;
case 'd': for (d = last; d != 0; d--)
for (i = 0; i < d; i++)
if (x[ i ] < x[i+1])
{
temp = x[ i ];
x[ i ] = x[i+1];
x[i+1] = temp;
}
printf("\n\nLe tableau a été trié en ordre descendant :\n\n");
for (i = 0; i <= last; i++)
{
printf("%d\t", x[ i ]);
if (i && (!(i % 8)))
printf("\n");
}
}
}
}
essaie ceci
#include <stdio.h>
#include <conio.h>
#define LG 128
main()
{
int x[100]; /* tableau d'entiers */
int i = 0; /* variable de controle */
int last; /* Index de la derniere valeur saisie */
int d; /* nombre de passages de tri */
int k,j,z,ok; /*k,z et ok sont des variables de controles,et j un cpteur*/
int temp; /* variable auxiliaire pour permutation */
char reply; /* variable de contr0le */
char ligne[LG+1]; /*tabeau recevant la saisie de l'utilisateur au clavier*/
printf("Le programme saisit jusqu'à 100 entiers positifs compris entre \n"
"0 et 30000 et les trie en ordre croissant ou décroissant (au choix).\n"
"Fin par -1.\n\n");
printf("Entrez les nombres positifs :\n\n");
do
{
/*ici on controle si la valeur saisie est entiere et appatient à l'inteval
voulu,sinon on genère un message d'erreur*/ do{ ok=0;
gets(ligne);
for(j=0;j<strlen(ligne);j++)
/*ceci protège contre la saisie des valeurs réelles*/
if(ligne[j]=='.'){ok=1;printf("Saisie incorrecte!Recommencer SVP:\n");}
k=sscanf(ligne,"%d", &x[ i ]);
/*ceci protège contre une touche inattendue ou une valeur
non compris dans l'interval voulu*/ if(k!=1) {printf("Saisie incorrecte!Recommencer SVP:\n");ok=1;}
else if(!(x[ i ]>=-1&&x[ i ]<=30000)){printf("Saisie incorrecte!Recommencer SVP:\n"); ok=1;}
/*c'est le dernier test contre les données superflues du genre 25ff ou 2f*/
if(ok==0)for (j=0;j<strlen(ligne);j++){z=ligne[j]-'1';
if(!(z>=0&&z<10)&&x[i]!=-1&&ligne[j]!=32&&ligne[j]!='0')
{ok=1;
/*on vide*/
for (j=0;j<strlen(ligne);j++)ligne[j]=' ';
printf("Des données superflues saisies!\n");
printf("Recommencer la précédente saisie\n");}
}
}while(ok);
i++;
} while (x[i-1] != -1 && i < 100);
/*Rien n'est changé à ce niveau sauf le message sur le nombre des valeurs saisies*/
if(i==100) printf("\nvous avez saisie %d valeurs",i);
else printf("\nvous avez saisie %d valeurs",i-1);
if (i == 100)
last = i-1;
else
last = i-2;
if (i == 2)
printf("\n\nLe tableau ne contient que la valeur : %d\n\n", x[i-2]);
else if (i > 2)
{
printf("\n\nLe tableau contient les valeurs :\n\n");
for (i = 0; i <= last; i++)
{
printf("%d\t", x[ i ]);
if (i && (!(i % 8)))
printf("\n");
}
/*test de selection de choix*/
do{ ok=0;
printf("\n\nTri du tableau ?\n"
"Ascendant = a Descendant = d Non = n : ");
reply = getche();
k=reply;
if(k!='a'&&k!='d'&&k!='n'){ok=1;printf("\n\nchoix incorrect\n");}
if(k=='n')printf("\n\nFIN DU PROGRAMME,Merçi :p).");
}while(ok);
switch (reply)
{
case 'a': for (d = last; d != 0; d--)
for (i = 0; i < d; i++)
if (x[ i ] > x[i+1])
{ /* on permute */
temp = x[ i ];
x[ i ] = x[i+1];
x[i+1] = temp;
}
printf("\n\nLe tableau a été trié en ordre ascendant :\n\n");
for (i = 0; i <= last; i++)
{
printf("%d\t", x[ i ]);
if (i && (!(i % 8)))
printf("\n");
}
break;
case 'd': for (d = last; d != 0; d--)
for (i = 0; i < d; i++)
if (x[ i ] < x[i+1])
{
temp = x[ i ];
x[ i ] = x[i+1];
x[i+1] = temp;
}
printf("\n\nLe tableau a été trié en ordre descendant :\n\n");
for (i = 0; i <= last; i++)
{
printf("%d\t", x[ i ]);
if (i && (!(i % 8)))
printf("\n");
}
}
}
}
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
15 déc. 2007 à 15:10
15 déc. 2007 à 15:10
bonjour ... mdrrr x 10 ... vous avez vu la date du 1er post ..
tahtouha, un conseil ouvre un autre post
;o)
Polux
tahtouha, un conseil ouvre un autre post
;o)
Polux
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut Julie,
Je ne suis pas expert en informatique mais je pense que tu peut t'inspirer des algo de tri du site suivant.
www.greyc.ensicaen.fr/ensicaen/CoursEnLigne/AlgoTri.pdf
Si vraiment tu n'y arrives pas recontact moi en me donnant ton language de programmation.
Je ne suis pas expert en informatique mais je pense que tu peut t'inspirer des algo de tri du site suivant.
www.greyc.ensicaen.fr/ensicaen/CoursEnLigne/AlgoTri.pdf
Si vraiment tu n'y arrives pas recontact moi en me donnant ton language de programmation.
w1sm3rhi11
Messages postés
372
Date d'inscription
jeudi 20 septembre 2007
Statut
Membre
Dernière intervention
30 mars 2009
53
3 oct. 2007 à 16:53
3 oct. 2007 à 16:53
Salut,
Je te mets ici le lien vers une de mes sources si jamais ca peut te servir : https://codes-sources.commentcamarche.net/
Je te mets ici le lien vers une de mes sources si jamais ca peut te servir : https://codes-sources.commentcamarche.net/
slt tt le monde chui tahtouha etudiante (bac informatique )
j'ai un prb avec l'algorithme offf é surtout tri shell j'ai rien comprie :'(
j'ai un prb avec l'algorithme offf é surtout tri shell j'ai rien comprie :'(
coucou_hb21
Messages postés
33
Date d'inscription
lundi 8 octobre 2007
Statut
Membre
Dernière intervention
21 janvier 2008
15 déc. 2007 à 21:59
15 déc. 2007 à 21:59
moi aussi je suis en bac info :
pour le tri shell cé facile mais il faut juste la concentration :
tous d'abord on dois chercher le "pas" et d'aprés le pas on peut trier le tableau et a un certain moment le tri shell va étre eliminer et on va terminer avec le tri par insertion
(je sais que tu n'a pas compris mais essaye)
conclusion: le tri shell est un moyen de tri mais ce n'est pas un tri total, il permet juste d'avoir un demi tri c'est à dire un tri qui permet de mettre les entiers les plus petites ensembles (si on a le pas=4 alors les quatres premiers nombres sont les plus petits et les quatres suivants sont les plus grands ......................)
il ya une formule que tu dois l'apprendre et c'est la plus courament utilisée pour calculer la valeur des pas succesives :
Un+1 = 3* Un +1
avec U1= 0
la version qui est proposé dans ce cours prefert calcluer, à l'aide de la formule donnée si dessus, la plus grande pas p ( tels que p< n) .
pour trouver les autres valeurs succesives de p, il suffit à chaque étape de diviser p par 3 ( division entiére)
RP: le p c'est le pas.
exemple: chercher les grandes successives de p pour n=100.
* calcul du plus grande valeur de P tels que (P<100)
U1 =0
U2= 3*U1 +1 = 1
U3= 3* U2 +1 = 4
U4= 3*U +1 = 13
U5 = 3*U4 +1 = 40
U6 = 3* U5 +1 =121 ( elliminer car on on p<100)
donc notre p est le 40.
maintenant on va chercher le nombre de p :
p1= 40
p2 = 40 div 3 =13
p3 = 13 div3 =4
p4= 4 div 3 =1
p5 il n'ya pas .
(compris ou non ?)
maintenant on va trier un tableau à l'aide de tri schell:
prenons un tableau de10 cases portant des différents valeurs ( tableau non trié)
d'abord on va comparer t[1] avec t[5] car on a le pas = 4 et notre tableau de 10 élements
ok
si on trouve que t[5] est plus petit que t[1] on permute
sinon on passe dans la deuxiéme case : la méme chose
jusqu'à arriver à la derniere case c'est à dire t[10]
enfin si on a arrivé à la case 10, on aura pas besoin de tri shell mais le tri par insertion pour pouvoir terminer le tri.
espérant que tu a compris : cé facil concentre toi
prenez un tableau est essayé tu va le comprendre.
ok
si tu as besoin d'autre choise demande la.
coucou_hb20@hotmail.com
a++++++++++
pour le tri shell cé facile mais il faut juste la concentration :
tous d'abord on dois chercher le "pas" et d'aprés le pas on peut trier le tableau et a un certain moment le tri shell va étre eliminer et on va terminer avec le tri par insertion
(je sais que tu n'a pas compris mais essaye)
conclusion: le tri shell est un moyen de tri mais ce n'est pas un tri total, il permet juste d'avoir un demi tri c'est à dire un tri qui permet de mettre les entiers les plus petites ensembles (si on a le pas=4 alors les quatres premiers nombres sont les plus petits et les quatres suivants sont les plus grands ......................)
il ya une formule que tu dois l'apprendre et c'est la plus courament utilisée pour calculer la valeur des pas succesives :
Un+1 = 3* Un +1
avec U1= 0
la version qui est proposé dans ce cours prefert calcluer, à l'aide de la formule donnée si dessus, la plus grande pas p ( tels que p< n) .
pour trouver les autres valeurs succesives de p, il suffit à chaque étape de diviser p par 3 ( division entiére)
RP: le p c'est le pas.
exemple: chercher les grandes successives de p pour n=100.
* calcul du plus grande valeur de P tels que (P<100)
U1 =0
U2= 3*U1 +1 = 1
U3= 3* U2 +1 = 4
U4= 3*U +1 = 13
U5 = 3*U4 +1 = 40
U6 = 3* U5 +1 =121 ( elliminer car on on p<100)
donc notre p est le 40.
maintenant on va chercher le nombre de p :
p1= 40
p2 = 40 div 3 =13
p3 = 13 div3 =4
p4= 4 div 3 =1
p5 il n'ya pas .
(compris ou non ?)
maintenant on va trier un tableau à l'aide de tri schell:
prenons un tableau de10 cases portant des différents valeurs ( tableau non trié)
d'abord on va comparer t[1] avec t[5] car on a le pas = 4 et notre tableau de 10 élements
ok
si on trouve que t[5] est plus petit que t[1] on permute
sinon on passe dans la deuxiéme case : la méme chose
jusqu'à arriver à la derniere case c'est à dire t[10]
enfin si on a arrivé à la case 10, on aura pas besoin de tri shell mais le tri par insertion pour pouvoir terminer le tri.
espérant que tu a compris : cé facil concentre toi
prenez un tableau est essayé tu va le comprendre.
ok
si tu as besoin d'autre choise demande la.
coucou_hb20@hotmail.com
a++++++++++
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
15 déc. 2007 à 15:15
15 déc. 2007 à 15:15
pour rien :os
Qwerti
Messages postés
166
Date d'inscription
dimanche 2 septembre 2007
Statut
Membre
Dernière intervention
28 octobre 2008
85
15 déc. 2007 à 15:15
15 déc. 2007 à 15:15
vous avez vu la date du 1er post ..
Indiana Jones is back.
:-D
Indiana Jones is back.
:-D
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
15 janv. 2008 à 00:27
15 janv. 2008 à 00:27
enchanté ... moi polux ... toi asma ?
:o)
:o)
info_dridi
Messages postés
4
Date d'inscription
jeudi 14 février 2008
Statut
Membre
Dernière intervention
21 février 2008
21 févr. 2008 à 16:54
21 févr. 2008 à 16:54
ce programme permet de trié un tableau croissonte avec le tri insertion version récursif
PROGRAM TRI;
USES WINCRT ;
TYPE
TAB=array[1..100]of integer;
var
n,i:integer;
t:tab;
procedure insert( a:integer;var t:tab; m:integer);
begin
while((a< t[m] )and (m >= 1) )do
begin
t[m+1]:= t[m];
m:=m-1;
end;
t[m+1]:=a;
end;
procedure trinsert( var t:tab;n:integer);
begin
if n>1 then
begin
trinsert( t,n-1);
insert(t[n],t,n-1);
end;
end;
begin
writeln(' donner le nbr delement du tableau ');
read(n);
for i:=1 to n do
begin
writeln(' dooner le vleur de ',i,':');
read(t[i]);
end;
trinsert(t,n);
for i:=1 to n do
writeln( t[i]);
end.
PROGRAM TRI;
USES WINCRT ;
TYPE
TAB=array[1..100]of integer;
var
n,i:integer;
t:tab;
procedure insert( a:integer;var t:tab; m:integer);
begin
while((a< t[m] )and (m >= 1) )do
begin
t[m+1]:= t[m];
m:=m-1;
end;
t[m+1]:=a;
end;
procedure trinsert( var t:tab;n:integer);
begin
if n>1 then
begin
trinsert( t,n-1);
insert(t[n],t,n-1);
end;
end;
begin
writeln(' donner le nbr delement du tableau ');
read(n);
for i:=1 to n do
begin
writeln(' dooner le vleur de ',i,':');
read(t[i]);
end;
trinsert(t,n);
for i:=1 to n do
writeln( t[i]);
end.