Pages : 1
#1 Le 26/10/2019, à 09:51
- chris7522
pointeur de fonction (C)
Bonjour a toutes et a tous ,
Je souhaitais :
- Demander une serie de 5 chiffres et les placer dans un tableau
- Appeler la fonction "affiche" , lui passer mon tableau et l'adresse de la fonction tri , de sorte que la fonction "affiche" puisse appeler la fonction tri par la suite .
J'ai pas l'impression que se soit possible ou alors je m'y prend comme un manche , bref je patauge .
#include <stdio.h>
int tri(int *tab,int taille);
void affiche(int *tab,int(*pf)(int));
#define TAILLE 5
int main(void){
int i;
int tab[5];
printf("Entrez 5 chiffres:\n");
scanf("%d",&tab[i]);
affiche(tab,&tri);
int tri(int *tab,int taille){
int i,j,temp;
for(i=0;i<TAILLE;i++)
{
for(j=i+1;j<TAILLE;j++)
{
if(tab[j]<tab[i])
{temp=tab[i];
tab[i]=tab[j];
tab[j]=temp;
}
}
}
}
void(affiche(int*tab,int(*pf)(int){
printf("%d\n",(*pf)(tab[i]);
}
Hors ligne
#2 Le 26/10/2019, à 10:26
- pingouinux
Re : pointeur de fonction (C)
Bonjour,
Ton programme ne compile pas
Hors ligne
#3 Le 26/10/2019, à 11:19
- DonutMan75
Re : pointeur de fonction (C)
Bonjour,
Il manque déjà un for pour l'initialisation du tableau :
>>> for à ajouter ici <<<
printf("Entrez 5 chiffres:\n");
scanf("%d",&tab[i]);
Et dans la fonction affiche tout en bas, tu lui demandes d'afficher le retour de la fonction tri qui n'est même pas défini dans la fonction tri (il manque un return....).
par ailleurs toujours dans cette même fonction, le i de tab[ i ] n'est pas défini....
Il y a également les pointeurs de fonction qui sont incorrects...
Si l'objectif est de trier un tableau, il y a des fonctions de la glibc qui font ça très bien.
Si l'objectif est d'apprendre à manipuler les pointeurs et les pointeurs de fonction, je suggérerais de découper cet exercice en plusieurs morceaux de complexité croissante (et de valider par compilation chaque étape), parce que là y'a beaucoup de boulot... Par exemple :
- un premier programme qui lit 5 entiers, les stocke dans un tableau puis affiche le tableau
- un second programme qui ajoute la fonction de tri et qui affiche le tableau trié
- enfin l'introduction des pointeurs de fonction pour permettre d'indiquer à la fonction affiche() n'importe quelle fonction de pré-traitement avant affichage
Bon courage pour la suite
Donut
Hors ligne
#4 Le 26/10/2019, à 12:23
- chris7522
Re : pointeur de fonction (C)
Merci beaucoup a tous les deux . Je vais suivre tes conseils
Hors ligne
#5 Le 27/10/2019, à 14:22
- chris7522
Re : pointeur de fonction (C)
Je pense avoir fais un peu mieux mais c'est pas encore ca ...
#include <stdio.h>
#define TAILLE 5
void tri(int *tab,int tailletab);
void affiche(void(*pf)(int*,int);
int main(void)
{
int i;
int tab[5];
void(*pf)(int*,int);
pf=&tri;
printf("Entrez 5 chiffre:\n");
for(i=0;i<TAILLE;i++)
scanf("%d",&tab[i]);
printf("chiffres entré:\n");
for(i=0;i<TAILLE;i++)
printf("%d\n",tab[i]);
affiche(*pf)(tab,TAILLE_TAB);
return 0;
}
/*------------------------------*/
void tri(int *tab,int tailletab){
int i,j,temp;
for(i=0;i<TAILLE;i++)
{
for(j=i+1;j<TAILLE;j++)
{
if(tab[j]<tab[i])
{
temp=tab[i];
tab[i]=tab[j];
tab[j]=temp;
}
}
}
return void;
}
/*----------------------------*/
void affiche(void(*pf)(int*,int){
int i;
int tab1={0};
printf("Tableau apres classement:\n");
for(i=0;i<TAILLE;i++)
{
printf("%d\n",tab1[i]);
}
}
Hors ligne
#6 Le 27/10/2019, à 15:47
- grigouille
Re : pointeur de fonction (C)
Ton programme ne compile pas.
Debian (xfce) 12
HP LaserJet M1132 MFP
Hors ligne
#7 Le 28/10/2019, à 07:36
- DonutMan75
Re : pointeur de fonction (C)
je rejoins gribouille,
il y a déjà deux erreurs flagrantes qui empêchent le programme de compiler et qui sont situées dans les trois premières lignes du fichier...
On les détecte immédiatement lorsqu'on tente une compilation...
Donut
Hors ligne
#8 Le 28/10/2019, à 07:43
- DonutMan75
Re : pointeur de fonction (C)
Sinon rapidement :
dans la fonction main() :
void(*pf)(int*,int);
pf=&tri;
ce bout de code a une valeur uniquement didactique, car on aurait très bien pu utiliser directement tri..
affiche(*pf)(tab,TAILLE_TAB);
Cet appel est douteux, le (*pf) ne sert pas à grand chose.. que cherches-tu à faire ?
Par ailleurs, TAILLE_TAB est une constante de préprocesseur (définie via ton #define), elle est visible dans tout ton fichier .c donc également dans la fonction affiche. Pas la peine de la passer en argument.
Bon courage pour la suite et surtout si tu bloques de nouveau, propose-nous un code qui compile ou A MINIMA un code donc tu ne comprends pas les erreurs de compilation...
Dernière modification par DonutMan75 (Le 28/10/2019, à 07:44)
Hors ligne
Pages : 1