Problem de trier un tableau en langage c

Fermé
soumia91 Messages postés 6 Date d'inscription jeudi 2 avril 2009 Statut Membre Dernière intervention 5 mars 2011 - 2 avril 2009 à 21:54
asrion Messages postés 4 Date d'inscription samedi 21 juin 2014 Statut Membre Dernière intervention 6 novembre 2015 - 6 nov. 2015 à 21:29
Bonjour,
j'ai un grande problème en langage c car je ne savais pas la méthode de trier un tableau et je vous donner l'énoncer de l'exercice telle qui les :
ecrire un programme qui ordonne(trie) les élément d'un tableau, en utilisant la méthode suivante:
-une première boucle parcourt le tableau et se positionne sur l'élément i de celui-ci .
-recherchez a partir de cet élément et jusqu'à la fin du tableau la plus petite valeur. échangez cette plus petite valeur avec la valeur a la position i.
-avancez d'une position dans votre première boucle. les éléments avant cette nouvelle position sont triés et vous ne devez plus y toucher.
s.v.p aidez moi car je suis très besoin de la solution.
merci avant tous.

6 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 avril 2009 à 21:57
Salut,
Donne le code que t'as fait pour qu'on puisse t'aider ;-)).
Cdlt
1
mais j'avais aucune idée pour trier un tableau si pour ça je vous de monder de me aider
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 avril 2009 à 22:26
Ben ton exercice donne la méthode pourtant. C'est quoi que tu ne comprends pas ?
0
vous pouvez me donner le programme correspondant a cet exercice
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835 > soumia91
2 avril 2009 à 22:50
donner le programme correspondant a cet exercice
Ce que tu demandes est hors-charte ;-)).
Dis-nous ce que tu ne comprends pas ou fais le début de programme, sinon on ne peut pas aider.
0
loupius > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
2 avril 2009 à 23:07
Depuis le début, je sentais qu'il voulait se coincer la bulle ;-)))
0
soumia91 > loupius
2 avril 2009 à 23:26
j'ai trouver le programme suivant:
#include<stdio.h>
main()
{
int n;
int tab[n];
int i,j,k,m;
printf("donner le nombre d'éléments de ce tableau\n");
scanf("%d",&n);
for(i=0;i<n;i++);
{
printf("donner une valeur \n");
scanf("%d",&tab[i]);
}
for(j=0;j<n;j++)
{
for(k=n;k<=j+1;k++)
{
if(tab[k-1]>tab[k])
{
m=tab[k-1];
tb[k-1]=tab[k]
tab[k]=m;
}
}
}
}
mais ça marche pas
aider mis s.v.p
0
Si tu vx la bonne reponse essaie ce code là

#include<stdio.h>
int n,echg,i,j;
char rep;
main()
{
do
{
system("cls");
printf("Entrez leNombre de case pour le tableau: ");
scanf("%d",&n);
printf("Entrez tous les elements du Tableau: \n");
int T[n];
for(i=0;i!=n;i++)
{
scanf("%d",&T[i]);
}
for(i=0;i!=n;i++)
{
for(j=0;j!=n;j++)
{
if (T[i]<T[j])
{
echg = T[j];
T[j] = T[i];
T[i] = echg;
}
}
}
system("cls");
printf("Les elements du tableau Sont comme suit: \n");
for(i=0;i!=n;i++)
{
printf("%d ",T[i]);
}
printf("\n\nVoulez-Vous Recommencer ?\n\n\t\t==> ");
scanf("%s",&rep);

}
while((rep=='o') || (rep=='O') || (rep=='y') || (rep=='Y'));

printf("\n\n\n\n\n\t\tA bientot ^^ !!\n");
getch();

}
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 avril 2009 à 23:36
Ce programme (copier de je ne sais où) ne respecte même pas la consigne et en plus il est faux ^^.

recherchez a partir de cet élément et jusqu'à la fin du tableau la plus petite valeur. échangez cette plus petite valeur avec la valeur a la position i.
Ta deuxième boucle for et ton if ne respecte donc pas la consigne.

De plus :

int n;
int tab[n];

n n'est pas initialisée lors de la déclaration du tableau. Il faut l'initialiser.
0
mais comment je peut chercher le plus petit élément d'ans un tableau et quel est le code correspondant?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
3 avril 2009 à 00:15
Salut,
Tu mémorises le premier élément dans une variable min. Tu parcours le tableau avec une boucle for. Si l'élément est plus petit que min, alors min devient l'élément en question.
A la fin de la boucle, la variable min est le minimum du tableau.
0
j'ai trouver sur un site le programme suivant:
#include <stdio.h>

/* La fonction de permutation
Arguments :
tab : le tableau dans lequel il faut permuter deux elements
i : l'indice du premier element a permuter
j : l'indice du deuxieme element a permuter
Resultats : aucun
La fonction est purement utilitaire et ne sert qu'a alleger le code du tri
*/
void permute (int tab[], int i, int j) {
int temp; /* un variable temporaire */

/* permutation des elements d'indices i et j */
temp = tab[i];
tab[i] = tab[j];
tab[j] = temp;
}

/* La fonction de tri croissant
Arguments :
tab : le tableau a trier dans l'ordre croissant
taille : le nombre d'elements dans le tableau
Resultats : aucun
*/
void tritab (int tab[], int taille) {
int i; /* indice du premier element de la partie non encore triee du tableau */
int j; /* indice utilise pour parcourir la partie non triee a la recherche du plus petit element */
int min; /* indice du plus petit element dans la partie non triee */

/* tout le tableau doit etre trie
au depart, la partie triee est vide et la partie non triee couvre tout le tableau
le premier element de la partie non triee a donc l'indice 0
*/
for (i = 0; i < taille; i++) {

/* recherche du plus petit element de la partie non triee */
min = i;
for (j = i + 1; j < taille; j++) if (tab[j] < tab[min]) min = j;

/* s'il y a un element plus petit que le premier de la partie non triee, on permute */
if (i != min) permute(tab, i, min);
}
}

/* Le programme de test */
int main () {
int tab[10]; /* Un tableau utilise pour le test */
int i; /* Un indice utilise pour le parcours du tableau */

/* Demande et lecture des valeurs initiales des elements du tableau */
for (i = 0; i < 10; i++) {
printf("Introduire tab[%d] : ", i);
scanf("%d", &(tab[i]));
}

/* Affichage des valeurs des elements du tableau avant le tri */
printf("Avant le tri:\n");
for (i = 0; i < 10; i++) {
printf("tab[%d] : %d\n", i, tab[i]);
}

/* Tri du tableau */
tritab(tab, 10);

/* Affichage des valeurs des elements du tableau apres le tri */
printf("Apres le tri:\n");
for (i = 0; i < 10; i++) {
printf("tab[%d] : %d\n", i, tab[i]);
}
}
je pense que c'est la solution de mon exercice
0

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

Posez votre question
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
3 avril 2009 à 00:44
Effectivement et commenté en plus. T'as de la chance qu'internet soit riche d'information ;-))).
Il manque juste le petit return 0; dans le main et t'auras une bonne note sans avoir travaillé ^^.
0
qwemour Messages postés 8 Date d'inscription jeudi 11 juin 2009 Statut Membre Dernière intervention 19 octobre 2012
19 oct. 2012 à 01:59
voila un code qui trie un tableau de manière croissant en langage C:
---------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>

void trier(int table[],int taille);



int main(int argc, char *argv[])
{
long tab[6] = {150,-83,112,231,5,12};

int i=0;

trier(tab,6);

for(i=0; i<6; i++)
{
printf("%ld\n",tab[i]);
}
return 0;
}

void trier(int table[],int taille)
{
int i,j,min,d=0;
for(i=0;i<taille-1;i++)
{
min=table[i];
for(j=i+1;j<taille;j++)
{
if(table[j]<min)
{
min=table[j];
d=j;
}
}
if(table[i]!=min)
{
table[d]=table[i];
table[i]=min;
}

}
}
0
asrion Messages postés 4 Date d'inscription samedi 21 juin 2014 Statut Membre Dernière intervention 6 novembre 2015
Modifié par asrion le 3/11/2015 à 15:34
Bonjour Voici ma solution à vous proposer, avec un bloc de if en moins
et le tableau marche pour toutes sortes de tailles (dynamique)

int main(int argc, char *argv[]){

//Ordonner Tableau
//exemple
int tableau[] = {50, 75, 85, 98, 125, 15, 81, 22, 13 };
int tailleTableau= sizeof tableau / sizeof *tableau;

printf("\nApercu tableau initiale \n");
for(i=0; i < tailleTableau; i++){
printf(" %d ", tableau[i]);
}

ordonnerTableau(tableau, tailleTableau);
printf("\n Apercu tableau trié ou ordonné \n");
return 0;
}

void ordonnerTableau(int tableau[], int tailleTableau){
int i =0, j = i+1, min = 0, k = 0;
int limite = tailleTableau - 1;

for(i=0; i < limite; i++){
min = tableau[i];
for(j=i+1; j < tailleTableau; j++){
if(min > tableau[j]){
min = tableau[j];
k = j;
tableau[k] = tableau[i];
tableau[i] = min;
}
}
}
}
0
asrion Messages postés 4 Date d'inscription samedi 21 juin 2014 Statut Membre Dernière intervention 6 novembre 2015
3 nov. 2015 à 15:46
Même code presque pour le tri décroissant
en changeant cette ligne de code
if(min > tableau[j]){
et qui devient
if(min < tableau[j]){
et vous aurez le tri décroissant ,)
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
3 nov. 2015 à 21:19
Attention au déterrage de topic... Celui-ci date de 3 ans...
Sinon, lorsque tu postes un code, merci d'utiliser la balise <code c>.
Exemple :
<code c>
/*tu mets ton code ici*/
</code>
Ainsi, ça sera plus lisible.
0
asrion Messages postés 4 Date d'inscription samedi 21 juin 2014 Statut Membre Dernière intervention 6 novembre 2015 > fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022
6 nov. 2015 à 21:29
Merci fiddy pour le conseil sur les balises
et oui je n'avais pas remarqué la date du topic :p
0