cs_TWITTI
Messages postés2Date d'inscriptionmercredi 8 décembre 2004StatutMembreDernière intervention 9 décembre 2004
-
8 déc. 2004 à 19:54
cs_TWITTI
Messages postés2Date d'inscriptionmercredi 8 décembre 2004StatutMembreDernière intervention 9 décembre 2004
-
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);
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 9 déc. 2004 à 09:07
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;
}
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 8 déc. 2004 à 21:19
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
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 9 déc. 2004 à 09:06
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;
}
cs_TWITTI
Messages postés2Date d'inscriptionmercredi 8 décembre 2004StatutMembreDernière intervention 9 décembre 2004 9 déc. 2004 à 13:40
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