SOS! Erreur sur un programme C inconnu

Fermé
TheMoonkey Messages postés 3 Date d'inscription vendredi 19 décembre 2014 Statut Membre Dernière intervention 19 décembre 2014 - 19 déc. 2014 à 13:41
TheMoonkey Messages postés 3 Date d'inscription vendredi 19 décembre 2014 Statut Membre Dernière intervention 19 décembre 2014 - 19 déc. 2014 à 21:21
Bonjour, je suis assez débutant dans la programmation, je dois en ce moment réaliser une partition stable d'un tableau par rapport a une valeur pivot.

Mon programme est compilable, mais la fonction pivot ne réalise rien. J'essaye de beaucoup de choses. Mais je ne comprends pas mon erreur. Le reste du programme marche sans problème.



#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
//taille du tableau
int taille=100;
//Nombre d'indice du tableau
int dp=0;
//tableau
int tab[100];


void pivot(){
int p=5;
int k;
int z;
int tmp=0;
for (k=0; k>dp; k++)
{
while ( tab[k]>p && tab [k+1]<p )
{
tmp=tab[k];
tab[k]=tab[k+1];
tab[k+1]=tmp;

}
while (tab[k]<p && tab[k-1]>p )
{
tmp=tab[k];
tab[k]=tab[k-1];
tab[k-1]=tmp;
}

k=0;

/*for (z=dp; z<0; z--)
{ while (tab[z]<p && tab[z-1]>p )
{
tmp=tab[z];
tab[z]=tab[z-1];
tab[z-1]=tmp;
}
z=dp;
} */
}}
/*ce sous programme sert à récupérer l'indice d'une valeur
Une variable parcours le tableau en effectuant une condition qui cherche la valeur demandé dans le tableau, dès que la variable est égale à la valeur demandée,
elle change une valeur booléenne et affiche son indice */
void getIndex(int v){
int i=0;
//bool trouve = false;
while(i<dp){

if(i==tab[v])
{
printf("elle est placée a:");
printf("%d", i);
}
i++;

}


}

/* le but de celui-ci est de trier les valeurs, une variable parcours le tableau.
tant que une valeur est plus grande qu'une autre, on remplace leurs valeurs. La variable tmp permet de donner
la valeur de tab[j] a tab[j+1]
et on remet j a 0 afin de recommencer la boucle jusqu'a qu'il soit entièrement trié */
void trierTabLineaire(){

int tmp=0;
int j;
for (j=0; j<dp-1; j++){
while(tab[j]>tab[j+1]){
tmp=tab[j];
tab[j]=tab[j+1];
tab[j+1]=tmp;
j=0;
}

}


}

/*
int affichePosition(int v){
getIndex(v);
return v;

}*/
/* Ce programme permet de supprimer une valeur d'un tableau, en déplaçant une valeur jusqu'a la fin du tableau
et ensuite décrémenter le tableau */

void supprimerValeur(int ind){
scanf ("%d", &ind);
int i;
for(i=ind;i<dp;i++)
{
tab[i-1]=tab[i];
}
dp--;

}
/* ce programme incrémente le tableau en donnant une valeur */
void ajouterValeur(int ajout){
printf("Quel valeur ? ");
scanf ("%d", &ajout);
tab[dp]=ajout;
dp++;
}

int main()
{int fini = 0;
do
{ // affichage du tableau après chaque action
printf("\n_contenu du tableau : ");
int i;
for (i = 0 ; i < dp ; ++i){

printf(" %d",tab[i]);
printf("\n");
}
//les choix a effectuer dans le tableau
printf("0: quitter\n");
printf("1: ajouter une valeur a la fin du tableau\n");
printf("2: supprimer la derniere valeur du tableau\n");
printf("3: Trier les valeurs\n");
printf("4: cherchez une valeur\n ");
printf("5: pivot\n ");
printf("que voulez-vous faire ? ");
int choix;
scanf("%d", &choix);

if (choix == 0){fini = 1;}
//on ajoute des valeurs
else if (choix == 1) {int ajout;
ajouterValeur(ajout);}

// on supprime la valeur 1
else if (choix == 2) {
int r;
supprimerValeur(r);}

//on tri
else if (choix == 3) {trierTabLineaire();}

//on affiche la position de 3
else if (choix == 4) {int v;
printf("Quel valeurs cherchez vous ? ");
scanf ("%d",&v);
getIndex(v);
}
else if (choix == 5) { int o;
printf("choisissez votre valeur pivot ");
scanf ("%d",&o);
pivot();
}
//autres choix non disponible
else {printf("ce n'est choix n'est pas valable");
}


}

while (!fini);
return 0; }
A voir également:

2 réponses

Utilisateur anonyme
19 déc. 2014 à 16:31
Bonjour

J'ai parcouru rapidement, mais :
for (k=0; k>dp; k++) 
, tu es sûr du sens du test
k>dp
?
0
TheMoonkey Messages postés 3 Date d'inscription vendredi 19 décembre 2014 Statut Membre Dernière intervention 19 décembre 2014
19 déc. 2014 à 18:00
En faite, dp s'accrémente à chaque valeur ajouté dans le tableau.
Donc en ajoutant avec le premier programme, dp deviens d'indice du tableau.
Mais ceci a déjà été utilisé sur les autres programme et marchais très bien.
0
Utilisateur anonyme
19 déc. 2014 à 21:00
Si dp est positif, tu n'entreras jamais dans la boucle 'for'.
Je ne sais pas ce qui a déjà marché dans d'autres programmes, mais sûrement pas ça.
0
TheMoonkey Messages postés 3 Date d'inscription vendredi 19 décembre 2014 Statut Membre Dernière intervention 19 décembre 2014
19 déc. 2014 à 21:21
Exact ! j'avais pas pensé comme ça, je sais pas à quoi je pensais ! Merci pour l'info !

Maintenant le programme effectue quelque chose une bouche infinie. mais maintenant je vais pourvoir avancer
0