Rechercher : dans
Par :

Tableau de fonctions en C

Dernière réponse le 22 déc 2008 à 20:47:24 UNIX/VI/SHELL, le 22 déc 2008 à 16:36:59 
 Signaler ce message aux modérateurs

Bonjour,

Je voudrais réaliser un programme; Dans ce programme il faudrait appeler des fonctions en fonction d'une autre variable, en utilisant un tableau de fonctions.

Comment feriez-vous ? Avec un peu de code.

Configuration: Mac OS X
Safari 523.12.2

Meilleures réponses pour « Tableau de fonctions en C » dans :
Trier un tableau sans utiliser la fonction sort VoirTrier un tableau sans utiliser la fonction sort D'abord on initialise une variable $max avec la 1ère valeur de tableau. Ensuite on va faire une boucle tant que le tableau contient encore des éléments. C'est avec la fonction splice qui a le rôle...
Google - Fonction calculatrice VoirGoogle dispose d'une calculatrice intégrée. Pour l'utiliser, il suffit simplemement d'entrer une expression dans le champ de saisie et de lancer la recherche ! Cette fonction est aussi accessible à partir de la barre Google ou des navigateurs...
VBScript - Les fonctions de chaînes de caractères VoirLes fonctions de chaînes de caractères Fonction Description Filter(InputStrings, Value[, Include[, Compare]]) Sélectionne des chaînes de caractères parmi un tableau de chaînes...
Langage C - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
Langage C++ - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...

1

kilian, le 22 déc 2008 à 16:45:13
  • +1

Salut,

Exemple, on a deux nombres (3 et 5), si l'utilisateur rentre +, on fait l'addition, s'il rentre *, on fait la multiplication:

#include <stdio.h>


typedef int (*op)(int, int); // Type pointeur vers fonction qui prend deux entiers en paramètres et retourne un entier

int addition(int a, int b)
{
    return a + b;
}

int multiplication(int a, int b)
{
    return a * b;
}

//Tableau de pointeur de fonctions avec nos deux fonctions:
op tab_op[] = {
    addition,
    multiplication
};

int main()
{
    int a = 3, b = 5;
    char c = getchar();

    switch (c) {
    case '+':
        printf("%d\n", tab_op[0](a, b));
        break;

    case '*':
        printf("%d\n", tab_op[1](a, b));
        break;

     default:
        printf("%c toi même!\n", c);
        break;
     }
     return 0;
}
Le gâteau est un mensonge!

Répondre à kilian

2

kilian, le 22 déc 2008 à 16:47:58

Le même sans typedef:

#include <stdio.h>

int addition(int a, int b)
{
    return a + b;
}

int multiplication(int a, int b)
{
    return a * b;
}

//Tableau de pointeur de fonctions avec nos deux fonctions:
int (*tab_op)(int, int) [] = { //Etrange hein?
    addition,
    multiplication
};

int main()
{
    int a = 3, b = 5;
    char c = getchar();

    switch (c) {
    case '+':
        printf("%d\n", tab_op[0](a, b));
        break;

    case '*':
        printf("%d\n", tab_op[1](a, b));
        break;

     default:
        printf("%c toi même!\n", c);
        break;
     }
     return 0;
}
Le gâteau est un mensonge!

Répondre à kilian

3

UNIX/VI/SHELL, le 22 déc 2008 à 16:49:01

Mais supposons que cela soit dans un jeu en mode texte. Comment vais-je faire ? Puisque il s'agit de déplacement. Il n'y aurait en plus, aucun intéret de code les possibilités de déplacement dans chaque salle.

Répondre à UNIX/VI/SHELL

4

kilian, le 22 déc 2008 à 16:50:50

Euh...ça y est je comprends plus... Le gâteau est un mensonge!

Répondre à kilian

5

UNIX/VI/SHELL, le 22 déc 2008 à 16:57:27

En fait ton programme et code est impecc. Merci !

Répondre à UNIX/VI/SHELL

6

UNIX/VI/SHELL, le 22 déc 2008 à 17:02:21

En fait non. Si je veut appeler une fonction (quelque soit la contenance), comment faire ?

Répondre à UNIX/VI/SHELL

7

kilian, le 22 déc 2008 à 17:03:28

Comment ça? Le gâteau est un mensonge!

Répondre à kilian

8

UNIX/VI/SHELL, le 22 déc 2008 à 17:21:42

Si je veut qu'une fonction qui ne contienne que du texte s'affiche, je fais comment, puisque dans ton code, le programme n'affiche que des valeurs numériques.

Répondre à UNIX/VI/SHELL

9

kilian, le 22 déc 2008 à 17:58:27

En ce tu retournes un char:

(char *)(*op)(void);
Le gâteau est un mensonge!

Répondre à kilian

10

UNIX/VI/SHELL, le 22 déc 2008 à 18:32:45

Ca marche pas avec typedef. je comprend pas.

Répondre à UNIX/VI/SHELL

11

kilian, le 22 déc 2008 à 18:57:45

#include <stdio.h>

const char* addition(void)
{
    return "Je suis une addition";
}

const char* multiplication(void)
{
    return "Je suis une multiplication;
}

//Tableau de pointeur de fonctions avec nos deux fonctions:
typedef (const char *) (*op)(void);

op myops[] = {
    addition,
    multiplication
};

int main()
{
    char c = getchar();

    switch (c) {
    case '+':
        printf(tab_op[0]());
        break;

    case '*':
        printf(tab_op[1]());
        break;

     default:
        printf("%c toi même!\n", c);
        break;
     }
     return 0;
}
Le gâteau est un mensonge!

Répondre à kilian

12

UNIX/VI/SHELL, le 22 déc 2008 à 19:08:45

Rahhhhhhhhhh, c'est à devenir fou, ca marche pas non plus. Et sans typedef ?

Répondre à UNIX/VI/SHELL

13

kilian, le 22 déc 2008 à 19:20:26

Pardon, j'aurais du tester, correction:

#include <stdio.h>

const char* addition(void)
{
    return "Je suis une addition";
}

const char* multiplication(void)
{
    return "Je suis une multiplication";
}

//Tableau de pointeur de fonctions avec nos deux fonctions:
typedef const char * (*op)(void);

op myops[] = {
    addition,
    multiplication
};

int main()
{
    char c = getchar();

    switch (c) {
    case '+':
        printf(myops[0]());
        break;

    case '*':
        printf(myops[1]());
        break;

     default:
        printf("%c toi même!\n", c);
        break;
     }
     return 0;
}
Le gâteau est un mensonge!

Répondre à kilian

14

 UNIX/VI/SHELL, le 22 déc 2008 à 20:47:24

Ca marche enfin ! Merci killan.

Bonne nuit !

Répondre à UNIX/VI/SHELL