Pb de compilation

Fermé
yedez Messages postés 69 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 28 avril 2015 - Modifié par BunoCS le 4/11/2013 à 20:08
to_char Messages postés 13 Date d'inscription lundi 4 novembre 2013 Statut Membre Dernière intervention 5 novembre 2013 - 5 nov. 2013 à 02:20
slt tout le monde :pouvez vous m'aide et me chercher l erreur de l execution de ma fonction "seek_valeurs" qui fait une recherche dichotomique d'un tableau trie et renvois\t son occurence !!!
le probleme C qu'elle renvoie toujours 0
aidez moi s'il vous plait et merci d'avance :)


int seek_valeurs(int t[],int n,int v)
{
int deb,fin,m,k;
k=0;
deb=0;
fin=n-1;

while (deb<fin)
{
m=(deb+fin)/2;
if (t[m]>v)
fin=m-1;
else if (t[m]<v)
deb=m+1;
else
{
k=k+1;
m=m+1;
}
}
return (k);
}

12 réponses

nar6du14 Messages postés 459 Date d'inscription dimanche 27 décembre 2009 Statut Membre Dernière intervention 7 décembre 2013 64
4 nov. 2013 à 18:29
pourquoi utilises tu les "int" n'aurait il pas été préférable d'utiliser les "float" ??

sinon deb doit conter jusqu'à n-1 c'est à dire jusqu'à fin

while (deb <= fin ) et non while( deb < fin )

pour le else de la fin, je ne vois pas trop à quoi il sert vu que ici t[m] == v
suffit de retourner "m" qui sera la place de "v" dans le tableau
1
to_char Messages postés 13 Date d'inscription lundi 4 novembre 2013 Statut Membre Dernière intervention 5 novembre 2013 2
5 nov. 2013 à 01:50
voici un lien qui explique comment tu peux traiter des tableaux 3 dimentions:
https://openclassrooms.com/forum/sujet/tableau-a-3-dimension-31672

essaye de créer un autre programme ou tu essayera ce code et après retourne à exercice comme ca tu saura tres bien comment faire :)
1
yedez Messages postés 69 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 28 avril 2015 2
Modifié par yedez le 5/11/2013 à 01:54
 est'Ce que j'ai fait une grande erreur dans mon programme ou vous ne avez pas saisie mon programme car mon tableau est a une dimension! :p


ps: merci pr le lien car j'en ai besoin aussi :)
    
0
yedez Messages postés 69 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 28 avril 2015 2
4 nov. 2013 à 17:58
quelqu'un peut m'aider s'il vous plait !! :(
0
BunoCS Messages postés 15496 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 24 décembre 2024 3 912
4 nov. 2013 à 20:09
Hello,
Je me suis permis d'éditer ton message pour rajouter les balises code (4e icone au-dessus de la zone de texte) afin de gagner en lisibilité.
Merci d'y penser la prochaine fois ;)
0

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

Posez votre question
yedez Messages postés 69 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 28 avril 2015 2
4 nov. 2013 à 22:42
merci :)

                
0
to_char Messages postés 13 Date d'inscription lundi 4 novembre 2013 Statut Membre Dernière intervention 5 novembre 2013 2
5 nov. 2013 à 01:08
re Bonjour yedez ,
est ce que je peux avoir l'erreur envoyer par ton compilateur;
0
yedez Messages postés 69 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 28 avril 2015 2
5 nov. 2013 à 01:31
bon en faite les en tetes font partie de l enonce je ne peut pas mettre float ni rien d'autre

de plus le probleme qui s 'affiche windows a arrete de fonctionner et va chercher le probleme!!! bon j'ai fait quelque modification au niveau cette fonction mai el meme probleme s'affiche au niveau d'une autre fonction C'est la suppression dun elemet de tableau voila tout mon programme et je note bien que le probleme est au niveau ma derniere fonction la suppression
#include <stdio.h>



int get_option();
int lire_valeurs(int t[]);
void tri_insertion(int t[],int n);
void view(int t[],int n);
int seek_valeurs(int t[],int n,int v );
void delete_element(int t[],int *n, int v);

void main()
{
int t[100],option,n,v,k;

while ( (option=get_option())!=-1)

{
switch(option)
{
case 0:
n=lire_valeurs(t);
break;


case 1:
tri_insertion(t,n);
break;

case 2:
view(t,n);
break;

case 3:
printf("\nValeur Cherchee:\n");
scanf("%d",&v);
k=seek_valeurs(t,n,v);
printf( "nombre de Repetition de %d:%d",v,k);
break;

case 4:
printf("\nValeurs A supprimer:'\n");
scanf ("%d",&v);
delete_element(t,&n,v);

break;


}
}
}
int get_option()
{
int p;
printf("donner la valeur de p\n");
scanf("%d",&p);


if (p==0)
printf ("remplir le tableau\n");

else
if (p==1)
printf("Trier le tableau\n");
else
if (p==2)
printf ("afficher le tableau\n");
else
if (p==3)
printf ("cherchez la valeur demandee \n ");
else
if (p==4)
printf (" supprine la valeur demandee \n ");


return(p);


}

int lire_valeurs(int t[])
{
int i;
i=0;


while ((t[i]=lire_val())!=-1)
i++;

return(i);
}
int lire_val()
{
int val;
scanf("%d",&val);
return(val);
}
void tri_insertion(int t[],int n)

{
int i,X,j;
for (i=1;i<n;i++)
{
X=t[i];
j=i;
while ((X<t[j-1])&&(j>0))
{
t[j]=t[j-1];
j=j-1;
}
t[j]=X;
}
}

void view(int t[],int n)
{
int i;
for (i=0;i<n;i++)
printf (" %d",t[i]);

}
int seek_valeurs(int t[],int n,int v)
{
int deb,fin,m,k;
k=0;
deb=0;
fin=n-1;
m=(deb+fin)/2;

while (deb<fin)
{

if (t[m]>v)
{
fin=m-1;
m=(deb+fin)/2;

}
else if (t[m]<v)
{
deb=m+1;
m=(deb+fin)/2;
}
else
{k=k+1;
m=m+1;
}
}
return (k);
}

void delete_element(int t[],int *n, int v)

{
int i;
i=1;
while (i<*n)
{
if (t[i]==v)
{
decalage (t,*n,i);
i++;

}
else

i++;

}
}




int decalage (int t[],int *n, int p)
{
int i;
for (i=p;i<=*n-1;i++)
{
t[i]=t[i+1];


}
*n=*n-1;
return (*n);



}

                
0
to_char Messages postés 13 Date d'inscription lundi 4 novembre 2013 Statut Membre Dernière intervention 5 novembre 2013 2
5 nov. 2013 à 01:36
re bonjour yedez :)
premièrement je ne crois pas que c'est la bonne manière de traiter un tableau tri
deuxièmement il faut bien indenter le code pour qu'on puisse tous le lire parce que désolé de te le dire mais ça c'est de la torture :)
0
yedez Messages postés 69 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 28 avril 2015 2
5 nov. 2013 à 01:40
d'accord je suis desole je vais seulement copier la fonction qui contient l'erreur

qqe chose de plus je ne comprends pas ce que vous voulez dire par "C pa la bonen maniere de traiter un tableau trie"
void delete_element(int t[],int *n, int v)

{
int i;
i=1;
while (i<*n)
{
if (t[i]==v)
{
decalage (t,*n,i);
i++;

}
else

i++;

}
}




int decalage (int t[],int *n, int p)
{
int i;
for (i=p;i<=*n-1;i++)
{
t[i]=t[i+1];


}
*n=*n-1;
return (*n);



}


    
0
to_char Messages postés 13 Date d'inscription lundi 4 novembre 2013 Statut Membre Dernière intervention 5 novembre 2013 2
5 nov. 2013 à 01:58
si c'est un tableau à une dimension je crois que ça a l'air correcte mais je ne peux pas juger plus car je n'est pas l'a fonction main et je ne sais pas ce que le programme dois faire ni ce que le compilateur a afficher comme erreur :)
0
yedez Messages postés 69 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 28 avril 2015 2
5 nov. 2013 à 02:07
bon le programme a b1 fait la compilation j ai entre les valeurs de tableau ensuite il ya  le tri de tableau, son affichage,apres le pg a renvoye l occurence d un entier que j ai saisi et ainsi s'affiche le probleme quand je demande au pg de supprimer un element de tableau une alerte s'annonece et m'avertit que le fichie a arreter de fonctionner et windows essayera de trouver l'erreur et voila 

et MerCi d'avance :)

                
0
to_char Messages postés 13 Date d'inscription lundi 4 novembre 2013 Statut Membre Dernière intervention 5 novembre 2013 2
5 nov. 2013 à 02:12
ah ben l'a t'es plus claire :) :)
le programme s'arrête parce qu'il essaye d'accéder à une case de mémoire qui n'est lui pas attribuer donc le système d'exploitation est obliger d'arrêter le programme
CAD que quelque pars dans ton code il y a une erreur que je peux malheureusement pas identifier :)
0
yedez Messages postés 69 Date d'inscription dimanche 3 novembre 2013 Statut Membre Dernière intervention 28 avril 2015 2
5 nov. 2013 à 02:14
oui d'accord je vais chercher Ce pb et MERCIIIII :))
0
to_char Messages postés 13 Date d'inscription lundi 4 novembre 2013 Statut Membre Dernière intervention 5 novembre 2013 2
5 nov. 2013 à 02:20
:)
0