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

 

  1. #1
    Nouveau membre du Club Avatar de toinexplore
    Homme Profil pro
    Etudiant/Passionné SQL-C
    Inscrit en
    décembre 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant/Passionné SQL-C
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2017
    Messages : 29
    Points : 26
    Points
    26

    Par défaut Appel de mes procédures et fonctions

    Je cherche à faire un petit programme qui traite un nombre de notes saisies au clavier par l'utilisateur.
    L'utilisateur saisie d'abord le nombre de notes qu'il veut saisir et définis ainsi la taille d'un tableau.
    Une foi le nombres de notes à saisir et les notes saisies;
    le programme affiche le menu avec la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     switch (nbentre) {
                              case1:
                              break;
                              default:
                              break;
                              }
    (je recopie pour un bref rappelle aux néophytes comme moi)

    (Les concepts de tableaux, fonctions et procédures étant en cours d'apprentissage, je viens à vous pour m'enrichir de vos conseils expérimentés.)

    Voici mon code


    Code c : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    #include <stdio.h>
    #include <stdlib.h>
     
     
     
     
                //case1 : Affichage des données//                                               //case1//
                                                                        /*Affichage des donne&#769;es du tableau sera
                                                                        traite&#769; par une proce&#769;dure*/
     
                void Affichage(float tab[n])
     
                {
                    int i,n;
     
     
                    for (i=0 ; i<n ; i++)
     
                    {
                        printf("\n %f",tab[i]);
                    }
     
                }
     
     
     
                //case2 : Saisie des donne&#769;es.//                         //case2 //
                                                                        /*La saisie au clavier des donne&#769;es du tableau et
                                                                        leur insertion dans le tableau se fera par une proce&#769;dure.
                                                                        Dans cette proce&#769;dure on demandera le nombre d’e&#769;le&#769;ments a&#768; saisir,
                                                                        puis on demandera a&#768; l'utilisateur de saisir les diffe&#769;rentes notes.*/
     
     
     
                void Saisie(float tab[])
                {
                    int nbelement, i;
     
     
                    printf("Combien d'elements souhaitez-vous saisir ?\n");
                    scanf("%d",&nbelement);
                    printf("Vous allez saisir %d elements.\n",nbelement);
     
                    for(i=0 ; i<nbelement ; i++)
     
                    {
                        printf("La note %d ?",i);
                        scanf("%f",&tab[nbelement]);
                    }
     
                }
     
     
     
     
     
     
        int main(){
     
     
     
                //Initialisation des notes du tableau//
     
                int n, i, choix;
                float note, tab[n];
     
                //Premier message//
     
                printf("\nSaisir un nombre de notes que vous souhaitez gerer : ");
                scanf("%d",&n);
                tab[i]=note;
     
     
                        for(i=1;i<n+1;i++)
     
                    {
                        printf("\n\nQuelle est la note n° %d : ",i);
                        scanf("%f",&note);
                    }
     
     
     
     
     
                if (0<=tab[i]<=20)
            {
     
                //message confirmant l'inititalisation du tableau//
     
                printf("\n********** LE TABLEAU DE %d NOTES A ETE INITIALISE **********",n);
                printf("\n------------------------------------------------------------");
                printf("\n******************** GESTION DES NOTES *********************");
                printf("\n------------------------------------------------------------");
     
                //Affichage du MENU//
     
     
     
                printf("\n1 - Affichage des notes du tableau.");
                printf("\n2 - Reinitialisation des notes du tableau.");
                printf("\n3 - Affichage de la moyenne des notes du tableau.");
                printf("\n4 - Affichage de la plus grande note du tableau.");
                printf("\n5 - Affichage de la plus petite note du tableau.");
                printf("\n6 - Rechercher une note dans le tableau.");
                printf("\n7 - Affichage du nombre de notes >10.");
                printf("\n8 - Affichage du nombre de notes > à la moyenne de la classe.");
                printf("\n9 - Trier par ordre croissant puis afficher les notes du tableau.");
                printf("\n10- Modifier une note du tableau de rang i (a saisir).");
                printf("\n11- Affiche les statistiques sur les notes.");
                printf("\n 0- Quitter.");
                printf("\n------------------------------------------------------------");
     
                printf("\n\n**** ATTENTION, on suppose que vous avez initialise le tableau");
     
                printf("\n\nVotre choix : ");
     
                scanf("%d",&choix);
     
            }
     
     
     
                //Choix MENU //
     
                switch(choix)
                {
     
                                case 1: printf("\nVous avez choisi d'afficher les donnees du tableau.");
                                        /*printf(void Affichage(float tab[]));*/
                                        break;
     
     
                                case 2: printf("\nVous avez choisi de réinitialiser les notes du tableau.");
                                        /*printf(void Saisie(void));*/
                                        break;
     
                                case 3: printf("\nVous avez choisi d'afficher la moyenne des notes du tableau.\n");
     
                                        break;
     
     
                                case 4: printf("\nVous avez choisi d'afficher la plus grande note du tableau.");
     
                                        break;
     
                                case 5: printf("\n\nVous avez choisi d'afficher la plus petite note du tableau.\n");
     
                                        break;
     
                                case 6: printf("\nVous souhaitez rechercher une note dans le tableau.");
                                        break;
     
     
                                case 7: printf("\nVous souhaitez afficher le nombre de notes superieures a 10.");
                                        break;
     
                                case 8: printf("\nVous avez choisi l'affichage des notes superieures a la moyenne.");
                                        break;
     
                                case 9: printf("\n\nVous avez choisi le tri par ordre croissant en affichant les notes du tableau.");
                                        break;
     
                                case 10: printf("\nVous avez choisi de modifier une note du tableau de rang i. ");
                                         break;
     
                                case 11: printf("\nVous avez choisi d'afficher les statistiques sur les notes.");
                                         break;
     
                                case 0:  printf("\nVous avez quitte le programme");
                                         break;
     
     
                                default: printf("\n\nMauvais choix, recommencez...");
                                         break;
     
     
    return 0;
    }
     
        }

    Je n'arrive pas à appeler mes procédure dans le switch, j'ai l'impression d'avoir mal défini mes variables de tableau

    Qu'en pensez vous ?

    Merci

  2. #2
    Membre expert
    Inscrit en
    mars 2005
    Messages
    1 320
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 1 320
    Points : 3 878
    Points
    3 878

    Par défaut

    printf(void Affichage(float tab[])); : ce n'est pas de cette manière que l'on réalise un appel de fonction. Si tu as écrit un programme de plus de 150 lignes sans avoir assimilé cela c'est que tu mets probablement la charrue avant les bœufs.

    Relis le cours, réalise des petits exercices pas à pas, puis implémente chaque fonctionnalité de ton programme de manière modulaire : indépendamment du reste, autant que faire se peut. Avant de tracer un cercle par exemple, on va s'assurer de disposer de fonctions trigonométriques (ou d'une fonction racine carrée..) qui sont justes.

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    5 375
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 5 375
    Points : 23 170
    Points
    23 170

    Par défaut

    Salut,

    ton code est faux dès les premières lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
                int n, i, choix;
                float note, tab[n];
    tab est un VLA, est-ce autorisé par ta version de C ?
    Quand bien même c'est autorisé, que vaut n ? Aucune idée, donc quelle taille a tab ? Aucune idée.

    Ensuite, void Affichage(float tab[n]) avec n non défini, ça ne devrait même pas compiler..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for(i=1;i<n+1;i++)
    {
      printf("\n\nQuelle est la note n° %d : ",i);
      scanf("%f",&note);
    }
    Donc tu enregistres une entrée dans note et... n'en fais absolument rien ?

    if (0<=tab[i]<=20) avec i qui vaut n+1 de la boucle précédente, tu tiens un gros panneau "WELCOME" aux crashs et autres comportements indéterminés.
    Ensuite ce check permet de lancer l'affichage et la sélection du menu, pourtant le switch est en dehors de sa portée...

    Globalement, y'a pas grand chose à garder. Tu as des lacunes dans les bases, en C et algorithmie.
    Ton code est indenté aléatoirement, ce qui n'aide surement pas à sa (re)lecture. Mais tu as des problèmes bien plus importants que ce switch qui ne fonctionne pas (ou fonctionnera par hasard certaines fois). Ton programme ne semble pas avoir de logique et on dirait des morceaux assemblés au petit bonheur.

    L'exercice de saisie de notes est un (trop) grand classique, tu trouveras surement d'autres discussions ici-même qui en parlent.
    Mais il n'a rien de compliqué, et le programme devrait avoir cette forme de base
    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
    int main()
    {
      int nbNotes;
      float* notes;
      int i;
      nbNotes = getNbNotes(); // demander à l'utilisateur combien de notes il veut entrer
      notes = malloc(nbNotes * sizeof(float));
      for (int i = 0; i < nbNotes; ++i)
      {
        printf("Saisir note n°%d", (i+1));
        notes[i] = saisirNote(); // demander à l'utilisateur une note
      }
      free(notes);
      return 0;
    }
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Nouveau membre du Club Avatar de toinexplore
    Homme Profil pro
    Etudiant/Passionné SQL-C
    Inscrit en
    décembre 2017
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Etudiant/Passionné SQL-C
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2017
    Messages : 29
    Points : 26
    Points
    26

    Par défaut

    Wow mais on a pas encore vu les pointeurs...

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    6 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 6 412
    Points : 17 924
    Points
    17 924
    Billets dans le blog
    1

    Par défaut

    Bonjour
    Citation Envoyé par toinexplore Voir le message
    Wow mais on a pas encore vu les pointeurs...
    Pas grave. Tu remplaces float* notes; notes = malloc(nbNotes * sizeof(float)) par float notes[100] (en considérant que tu n'atteindras jamais ce cap de 100 notes), tu supprimes le free(notes) et tu ne changes rien au reste du code de Bousk.
    Mais la vraie interrogation c'est de savoir si (mis à part ce float *notes) tu comprends son code et sa façon de faire...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

Discussions similaires

  1. [Free Pascal] Problème pour mettre en lien mes fonctions et mes procédures
    Par HughJack dans le forum Free Pascal
    Réponses: 1
    Dernier message: 14/12/2014, 16h10
  2. Appel de procédure ou fonction dans Case Of
    Par CyberHack6666 dans le forum Débutant
    Réponses: 9
    Dernier message: 29/10/2012, 11h07
  3. Réponses: 6
    Dernier message: 30/04/2010, 12h54
  4. Appel dynamique de procédure et fonction
    Par QAYS dans le forum Langage
    Réponses: 16
    Dernier message: 27/07/2007, 19h30
  5. Appel d'une procédure stockée par un vbscript
    Par NicoNours dans le forum MS SQL-Server
    Réponses: 2
    Dernier message: 08/10/2004, 13h53

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