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...
Générer des nombres aléatoires efficacement avec rand() VoirGénérer des nombres aléatoires efficacement avec rand() Vous avez peut-être remarqué qu'en C, en utilisant la fonction rand() de la bibliothèque standard, vous obtenez des résultats décevants, trop souvent les mêmes. Prenons un exemple, vous...
Interfacer du code assembleur et du C VoirInterfacer du code assembleur et du C Introduction Appeler du code assembleur écrit dans un fichier source externe Avec Nasm (x86 uniquement) Compilation/Exécution sous Linux Avec Gcc (multiplateforme) Introduction Si, à tout hasard,...
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...
Les structures en langage C++ VoirDifférence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...

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