SOS! Erreur sur un programme C inconnu
TheMoonkey
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
TheMoonkey Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
TheMoonkey Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
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; }
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:
- SOS! Erreur sur un programme C inconnu
- Numero inconnu - Guide
- Programme demarrage windows - Guide
- Mettre en veille un programme - Guide
- Desinstaller un programme sur windows - Guide
- Forcer la fermeture d'un programme - Guide
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.