IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Programmer d'un trait ou créer des sous-programmes ?


Sujet :

C

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut Programmer d'un trait ou créer des sous-programmes ?
    Bonjour tout le monde,

    Je suis entrain ou plutôt je compte créer un programme en C qui permet le calcul d'intérêts divers.
    Le programme dans un premier temps fonctionnera en console sous linux. Donc pas de boutons ou autres graphiques.
    Ce programme comprendra un menu principal qui indiquera par exemple :

    " Menu principal "
    " Calcul de l'intérêt simple = 1"
    " Calcul d'un intérêt proportionnel = 2"
    " Taux d'intérêt moyen = 3"
    " Indiquez votre choix : ""
    etc..

    Pour l'instant pas de problèmes particuliers...
    La question que je me pose :
    le programme comporte différents menu qui eux même peuvent comporter différents sous / menus..
    Vaut-il mieux créer le programme d'un bloc en utlisant des switch-case par rapport au choix du menu et ainsi créer un programme à rallonge qui peut comporter des centaines de lignes d'un bloc ?
    Ou vaut il mieux créer par exemple un : Menu.c qui comprends donc les lignes du menu principal cité si-dessus et qui lorsque l'on effectue un choix fait appel à des programmes c externe ?
    Un peu à la manière des classes externes en java à l'aide de import ?

    Et si oui vous auriez un exemple de ligne qui fait ce genre d'appel ?

    Merci d'avance
    a+

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Si le programme n'est pas trop long, un seul fichier source devrait suffire sinon rien ne t'empêche de l'organiser en plusieurs fichiers sources si tu le désires mais dans tous les cas, tu devras fournir au moins une fonction ou classe par problème. Sans classes cela s'écrit comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    int main()
    {
        int n;
     
        AfficherMenu();
        n = Choix();
     
        switch(n)
        {
        case INTERET_SIMPLE:
            GotoInteretSimple();
            break;
     
            ...
        }
     
        return 0;
    }
    Pareil pour GotoInteretSimple s'il y a des sous-menus.

    Le programme devra évidemment boucler ...

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut Nombre de menus? Comment tester?
    Bonsoir,

    Tu as deux aspects pour les fonctions:
    1 - comment tu vas tester qu'elles font bien ce que tu attends en dehors de ton programme?
    2 - coller aux actions que doivent déclencher les choix du menu.

    L'affichage des menus sont la dynamique de ton interface.
    Si tu as 50 fonctions qui font afficher menu, récuperer choix et aller au menu suivant,.... il va te falloir "compacter" cela avec des tables d'états, transitions.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Le programme sera effectivement très long, car non seulement je compte mettre tout ce qui concerne le calcul d'intérêts mais également d'autres calculs mathémathiques, style statistiques, nombres premiers , PGCD, etc.. M'enfin un programme de différentes sections de calcul mathématiques on va dire..
    Donc effectivement beaucoup de menus et sous-menus.. Le tout dans un premier temps en mode console..

    Si tu as 50 fonctions qui font afficher menu, récuperer choix et aller au menu suivant,.... il va te falloir "compacter" cela avec des tables d'états, transitions.
    C'est quoi compacter avec des tables d'états ?

    merci pour vos reply..
    a+

  5. #5
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 943
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 943
    Points : 5 655
    Points
    5 655
    Par défaut
    Gia,

    - Plusieurs fichiers sources, chacun traitant son domaine (intérêts, nombres premiers, stats...)

    - les tester sérieusement chacun tour à tour

    - et ensuite seulement faire le système de menu
    Si les cons volaient, il ferait nuit à midi.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Ok, mais comment à partir du menu principal je fait appel aux autres fichiers sources .?
    Tout simplement par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Interet.c
    int A;
    int B;
    int C;
     
    C=A+B;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MenuPrincipal.c
    cout "Intéret Simple = 1";
    cout "intéret composé = 2";
    
    getchar();
    if getchar = 1 {
    interet.c
    
    }
    
    etc..etc..

    Alors attention je précise qu'i est clair que je n'ai pas mis la syntaxe du C/C++ pour des raisons de lisibilité et de simplicité..et que présenté tel quel il est évident que le compilateur va générer des erreurs..
    Ce que je veuts juste comprendre c'est l'appel de ou la manière d'appeler la source externe.. Suffit - il juste de mettre le nom de la source à appeler ou quel mot clef faut il utliser pour appeler cette source ?
    -Call interêt.c
    -interet.c();
    -gosub interet.c;

    ou je ne sais ?
    Merci d'avance..
    a+

  7. #7
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 943
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 943
    Points : 5 655
    Points
    5 655
    Par défaut
    Kei,

    Aïe, Aïe.

    Je crois que tu as intérêt à revoir le C basique d'une part, et d'autre part la programmation modulaire.

    On n'inclut jamais de fichier .c, mais le .h (ou mieux, le .h correspondant), etc.

    Petit exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    /* fichier contenant une fonction, son .h, et son .c */
     
    /* ------------- fonc.h */
    #include tout ce qu'il faut
     
      // déclaration de la fonction
      int maFonction (int x);
     
    /* ------------- fonc.c */
    #include tout ce qu'il faut
    #include "fonc.h"
     
      // implémentation de la fonction
      int maFonction (int x)
      {
        return 2*x;
      }
     
    /* --------- fichier programme principal */
     
    #include tout ce qu'il faut en standard
    #include "fonc.h"
     
    int main ()
    {
      /* utilisation de la fonction */
      int z =5;
      int n = maFonction(z);
     
    ...
     
      return 0;
    }
    Si les cons volaient, il ferait nuit à midi.

  8. #8
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Salut,

    Citation Envoyé par Telemak
    Ok, mais comment à partir du menu principal je fait appel aux autres fichiers sources .?
    Je te conseil la lecture de ce tutoriel :
    http://melem.developpez.com/langagec/objc/

    Le lien fournit concerne le langage C puisqu'on est sur le forum C ,mais le principe reste le même pour le C++ si je ne me trompe pas ...
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  9. #9
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par Telemak
    Ok, mais comment à partir du menu principal je fait appel aux autres fichiers sources ? ... Ce que je veux juste comprendre c'est l'appel de ou la manière d'appeler la source externe. Suffit - il juste de mettre le nom de la source à appeler ou quel mot clef faut il utiliser pour appeler cette source ?
    On n'appelle pas un fichier source mais une fonction définie dans un fichier source ou un module objet (un fichier source déjà compilé) par exemple. Le lien que t'as donné ssmario2 est conduit à un tutoriel sur la manière d'effectuer ces appels.

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Oui d'accord pour le tutoriel...
    Mais je vais vous sembler " lourd"..
    Si je prends le début de ce tutoriel, celui - ci nous indiques comment définir le programme et les fonctions (somme et produit) dans deux fichiers différents.
    Il s'agit de fonctions, oui ..pourquoi pas ...
    Les séparer par rapport au programme principal permet d'en alléger la lecture et la programmation..surtout lorsque certaines fonctions doivent être réutilisés avec différentes formules mathématiques, je prends pour exemple ( pour faire simple..) le calcul d'un pourcentage, donc X/100.. qui peut servir dans diverses formules de calcul..
    Mais n'est t'il pas possible en C d'effectuer comme par exemple en java des imports de class ?

    En java, j'avais crée un menu pincipal, qui lorsque que l'on choisis par exemple le calcul d'intérêts, va aller à la class "Calcul_Interet".
    Cette classe "Calcul_Interet" dans son code intègre la création d'une fenêtre avec différents boutons et menus.Si je clique sur le bouton de fermeture de la fenêtre de calcul d'intérêts, le programme revient à la class du menu principal de départ..
    La création de différents classes me permet de gagner en lisibilité au niveau du programme .


    Pour illustrer :
    -> avoir un programme de menu principal.
    -> celui ci possède différents choix de menus.
    -> lorsque l'on prend le choix "x", quitter temporairement le fichier source "programme de menu principal " et aller au fichier source"programme de calcul d'intérets".

    -> dans le fichier source " programme de calcul d'intérêts" effectuer toutes les saisies nécessaires, afficher le résultats du calcul. S'il y a saisie de la touche "quitter", quitter le " programme de calcul d'intérêts " et retourner au fichier source " programme de menu principal "

    et non par exemple :
    -> avoir un fichier de programme de menu principal.
    -> celui ci possèdes différents choix de menus.
    -> lorsque l'on prend le choix "x", de rester dans le même fichier source du programme int_main() à l'aide d'un switch - case aller à l'instruction concernée..
    -> effectuer l'instruction du switch -case de calcul d'intérêts, instruction qui elle même fait appel à la fonction de pourcentage qui se trouve dans un fichier source différent..

    Tout ce que je veuts ce n'est pas un deuxième fichier source externe de fonctions qui retourne le résultat à un premier fichier source principal.

    Mais un deuxième fichier source qui travaille ( bon travailler n'est pas vraiment le mot exact..mais je n'ai rien d'autre qui me vient spontanément à l'esprit .. ) de manière autonome, c'est qui à dire qui oublie le premier fichier source tant qu'on ne lui a pas dit , d'y retourner..

    ?

    a+

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut ouch
    Bonsoir,
    On pourrait le faire par exemple en aillant autant de programme que de menus.
    L'enchainement des choix appelle un programme approprié.
    C'est ce qu'on faisait avec COBOL et FORTRAN lorsqu'on n'avait pas beaucoup de mémoire.
    -W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  12. #12
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Oui, c'est ce que je souhaite faire...

  13. #13
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 943
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 943
    Points : 5 655
    Points
    5 655
    Par défaut
    Hie,
    Citation Envoyé par Telemak Voir le message
    Oui, c'est ce que je souhaite faire...
    Mauvaise idée, à mon avis.

    Prends la peine d'apprendre ce dont tu as besoin (voir plus haut), et tu verras que ça ira mieux.
    Si les cons volaient, il ferait nuit à midi.

  14. #14
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Telemak Voir le message
    En java, j'avais crée un menu pincipal, qui lorsque que l'on choisis par exemple le calcul d'intérêts, va aller à la class "Calcul_Interet".
    Cette classe "Calcul_Interet" dans son code intègre la création d'une fenêtre avec différents boutons et menus.Si je clique sur le bouton de fermeture de la fenêtre de calcul d'intérêts, le programme revient à la class du menu principal de départ..
    La création de différents classes me permet de gagner en lisibilité au niveau du programme .
    Petit rappel : il n'y a pas de classe en C tout comme il n'existe pas de langage C/C++ mais un langage C et un langage C++.

    Citation Envoyé par Telemak Voir le message
    Pour illustrer :
    -> avoir un programme de menu principal.
    -> celui ci possède différents choix de menus.
    -> lorsque l'on prend le choix "x", quitter temporairement le fichier source "programme de menu principal " et aller au fichier source"programme de calcul d'intérets".

    -> dans le fichier source " programme de calcul d'intérêts" effectuer toutes les saisies nécessaires, afficher le résultats du calcul. S'il y a saisie de la touche "quitter", quitter le " programme de calcul d'intérêts " et retourner au fichier source " programme de menu principal "

    et non par exemple :
    -> avoir un fichier de programme de menu principal.
    -> celui ci possèdes différents choix de menus.
    -> lorsque l'on prend le choix "x", de rester dans le même fichier source du programme int_main() à l'aide d'un switch - case aller à l'instruction concernée..
    -> effectuer l'instruction du switch -case de calcul d'intérêts, instruction qui elle même fait appel à la fonction de pourcentage qui se trouve dans un fichier source différent..
    Il est possible de créer des programmes indépendants qui réalise l'opération et de les appeler depuis le programme principal (qui contient le menu) via system(), popen(), fork()/exec(), etc.

    Mais, sauf cas très particulier, ce n'est franchement pas la meilleure chose à faire.

    Il me semble largement préférable de créer différentes fonctions et d'appeler directement ces fonctions depuis le menu.
    Si ton objectif est d'avoir des fonctions réutilisables par d'autres applications ou qui puisse être modifiées sans recompiler le programme, il est possible de créer une bibliothèque partagée (dll sous windows ou .so sous Linux) contenant ces fonctions

  15. #15
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Telemak Voir le message
    Je suis entrain ou plutôt je compte créer un programme en C++
    alors tu t'es trompé de forum. Je déplace ?
    Pas de Wi-Fi à la maison : CPL

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 465
    Points : 241
    Points
    241
    Par défaut
    Citation:
    Envoyé par Telemak Voir le message
    Je suis entrain ou plutôt je compte créer un programme en C++
    alors tu t'es trompé de forum. Je déplace ?
    Non tu peuts laisser...c'est moi lorsque j'écris, erreur de transposition, dans ma tête celà voulait signifier passer C vers C++ par la suite avec utilisation d'une interface graphique style QT ou GTK, pour l'instant il ne s'agit que de faire celà en mode console.
    J'ai conscience qu'il ne s'agit pas de la même chose.
    J'ai réedité mes posts pour les corriger..en espérant ne pas en avoir oublié.

    Effectivement les classes n'existent pas en C.
    Je pensait qu'il existait une méthode ou une manière de procéder sur ce même shéma...Mais je me voits mal faire le programme comprenant des multitudes de lignes basé sur du switch - case, et celà malgré l'utilisation de fonctions, rien que pour accéder à différentes méthodes de calculs.

    Celà étant avec vos réponses vous m'avez déjà apporté pas mal d'aide quand à l'approche de l'utilisation du C.
    Comme cité plus haut , je ne vais pas alourdir le sujet du post.
    Aussi, je met le tag " résolu " en place en attendant éventuellement de nouvelles questions que le forum.

    Si, je n'arrive pas, ou disons, que vous ne voyez plus de réponses de ma part, celà est dû à ma ligne qui me crée quelques problèmes depuis quelques jours. Je perds à tout bout de champ le fixe auprès du FAI. D'aileurs pour cette réponse j'ai du mal à poster...


    Encore merci à tous..
    a+

  17. #17
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Telemak Voir le message
    Non tu peuts laisser...c'est moi lorsque j'écris, erreur de transposition, dans ma tête celà voulait signifier passer C vers C++ par la suite avec utilisation d'une interface graphique style QT ou GTK, pour l'instant il ne s'agit que de faire celà en mode console.
    J'ai conscience qu'il ne s'agit pas de la même chose.
    J'ai réedité mes posts pour les corriger..en espérant ne pas en avoir oublié.
    Alors les fichiers, c'est .c et non .cpp. Je corrige.
    Pas de Wi-Fi à la maison : CPL

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer des sous-tables
    Par corbel88 dans le forum Débuter
    Réponses: 1
    Dernier message: 28/04/2008, 19h32
  2. Créer des sous-sous menus?
    Par kate1980 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 20/02/2008, 19h11
  3. créer des sous dossier en java
    Par nikolanta dans le forum Langage
    Réponses: 4
    Dernier message: 11/01/2008, 15h23
  4. [Débutant] Comment créer des sous Form ?
    Par Hokage dans le forum Débuter
    Réponses: 2
    Dernier message: 27/09/2007, 10h55
  5. Réponses: 7
    Dernier message: 27/10/2005, 19h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo