Tri tableau en ligne [Résolu]

cs_TWITTI 2 Messages postés mercredi 8 décembre 2004Date d'inscription 9 décembre 2004 Dernière intervention - 8 déc. 2004 à 19:54 - Dernière réponse : cs_TWITTI 2 Messages postés mercredi 8 décembre 2004Date d'inscription 9 décembre 2004 Dernière intervention
- 9 déc. 2004 à 13:40
bonjour , je suis etudiant en mécanique et la programmtion c est embetant pour moi.
J ai un probleme sur mon programme main().
Je n arrive pas a faire au fur et à mesure pouvez vous m aider s il vous plait merci d'avance

Voila l'enonce

On désire construire un tableau d’au plus MAX entiers triés à partir d’un dialogue avec l’utilisateur.
La particularité de ce tri est qu’il va se faire au fur et à mesure de la saisie des valeurs.

Exemple : l’utilisateur rentre 24, le tableau vide devient : 24 puis l’utilisateur rentre 20, le tableau devient : 20 24 puis l’utilisateur rentre 22, le tableau devient : 20 22 24 etc… 1)

Ecrire la fonction recherchePosition() qui retourne la position que doit prendre l’entier dans le tableau (le tableau est trié mais partiellement rempli). Exemple : pour le tableau : 20 22 24 et l’entier 21, la fonction recherchePosition retourne la valeur 1 2)

Ecrire la fonction insereEntier() qui insère un entier dans le tableau à la position spécifiée. Exemple: insérer l’entier 21 à la position 1 dans le tableau : 20 22 24 modifie le tableau de la façon suivante : 20 21 22 24 3)

Ecrire la fonction principale main() qui invite l’utilisateur à saisir les nombres entiers, construit et affiche le tableau trié au fur et à mesure de la lecture des nombres. On veillera a ne pas dépasser la capacité maximale du tableau.

Voila mon programme

#define MAX 10
#include <stdio.h>

int recherchePosition(int tab[],int n ) /* n est le nombre de valeurs entrées dans le tab */

{
int i=0;
while (n<=tab[i] && i<MAX)
i++;

printf("%d", i);
return i;
}

void afficherTableau(int tab[]) /* y est le nombre de valeurs entrées dans le tab u*/

{
int i=0;
for (i = 0; i<MAX; i++) {
printf("tab[%d]=%d\n",i,tab[i]);
}
}

void insereEntier ( int tab[],int n, int p) // p position (i de rech) , n nombre qu'on veut insérer
{
int pos ;
pos=recherchePosition ( tab, n) ;
for(p=pos;p<MAX;p++)
tab[p]=tab[p-1];
tab[pos]=n;
}

void main ()
{

int tab[MAX];/*tableau*/
int n; /*valeur du tableau*/
int p;/*incrementation*/
int i ;/*adresse du tableau*/
char r;
int pos;
int recherchePosition(int tab[],int n );

for(i=0;i<MAX;i++) /*on initialise le tableau*/
tab[i]=0;
afficherTableau(tab);

do {
printf(" entrez une valeur:");
scanf("%d",&n);
pos=recherchePosition (tab, n);

insereEntier (tab, n,pos);
for (p=0;p<n;p++){
printf ("%d\n",tab[p]);}
printf("voulez vous continuer o ou n");
scanf("%c",&r);

}

while (r=='o');
}
Afficher la suite 

4 réponses

Répondre au sujet
ymca2003 2070 Messages postés mardi 22 avril 2003Date d'inscription 3 juillet 2006 Dernière intervention - 9 déc. 2004 à 09:07
+3
Utile
Erreur, il faut placer le nombre APREs le dacalage

void insereEntier ( int val, int tab[],int n) 
{
// placement du nombre
int pos ;
pos=recherchePosition(val, tab, n) ;

// décalage du tableau (à partir de la fin)
for(int i = n-1; i >= pos; i--)
tab[i+1] = tab[i];

// placement valeur
tab[pos] = val;
}
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de ymca2003
coucou747 12336 Messages postés mardi 10 février 2004Date d'inscription 30 juillet 2012 Dernière intervention - 8 déc. 2004 à 21:19
0
Utile
Oulala...

Bon moi je te donnes un QSORT
for (i=0;i<nombre-1;i++){
for j=i+1;j<nombre;j++){
if (tab[i]>tab[j]){
a=tab[i];
tab[i]=tab[j];
tab[j]=a;
}
}
}

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy
C'est vrai que dans ton cas garder un tableau trié c'est plus efficace, masi je suposes que tu ne voudras pas toujours

http://coucou747.hopto.org
Commenter la réponse de coucou747
ymca2003 2070 Messages postés mardi 22 avril 2003Date d'inscription 3 juillet 2006 Dernière intervention - 9 déc. 2004 à 09:06
0
Utile
pour rechercher la position, il te faut :
- le nombre à placer (val).
- le tableau (tab)
- le nombre de valeurs valides dedans (n)

int recherchePosition(int val, int tab[],int n ) 
{
int i=0;
while (val<=tab[i] && i<n)
i++;
printf("%d", i);
return i; 
}



Pour insérer une valeur, il te faut les même params
void insereEntier ( int val, int tab[],int n) 
{
// placement du nombre
int pos ;
pos=recherchePosition(val, tab, n) ;
tab[pos] = val;

// décalage du tableau (à partir de la fin)
for(int i = n-1; i >= pos; i--)
tab[i+1] = tab[i];

// placement valeur
tab[pos] = val;
}
Commenter la réponse de ymca2003
cs_TWITTI 2 Messages postés mercredi 8 décembre 2004Date d'inscription 9 décembre 2004 Dernière intervention - 9 déc. 2004 à 13:40
0
Utile
merci pour c reponse il y avait une petit erreur dans recherce de position si ca marche
val>=tab[i] pour avoir le tableau dans l odre croissant
encore merci à vous deux
Commenter la réponse de cs_TWITTI

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.