Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/10/2019, à 10: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, à 11:26

pingouinux

Re : pointeur de fonction (C)

Bonjour,
Ton programme ne compile pas

Hors ligne

#3 Le 26/10/2019, à 12: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 smile

Donut

Hors ligne

#4 Le 26/10/2019, à 13: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, à 15: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, à 16: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, à 08: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, à 08: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, à 08:44)

Hors ligne