Question sur exemple de la leçon découvrir arduino

créer une fonction pour trouver la meilleur note dans un tableau

a marqué ce sujet comme résolu.

Bonjour tous le monde, dans l’exemple ci-dessous je ne comprend pas pourquoi on n’assigne pas de valeur à la variable "nombreEleve" pour moi sans elle ce n’est pas possible de faire marcher la fonction vu que dans la condition de la boucle for il est dit que tant que i est inférieur à nombreEleve incrémenté i de 1 et vu que nombreEleve n’est pas défini?

"

float meilleurNote(float tableau[], int nombreEleve) { int i = 0; int max = 0; // variable contenant la future meilleure note

for(i=0; i<nombreEleve, i++)
{
    // si la note lue est meilleure que la meilleure actuelle
    if(tableau[i] > max)
    {
        // alors on l'enregistre
        max = tableau[i];
    }
}
// on retourne la meilleure note
return max;

}

Recherche de la note maximale Ce que l’on fait, pour lire un tableau, est exactement la même chose que lorsqu’on l’initialise avec une boucle for. Il est tout à fait possible de mettre la valeur de la case recherché dans une variable : int valeur = tableau[5]; // on enregistre la valeur de la case 6 du tableau dans une variable

"

+0 -0
float meilleurNote(float tableau[], int nombreEleve) { 

int i = 0; int max = 0; // variable contenant la future meilleure note

for(i=0; i<nombreEleve, i++)
{
    // si la note lue est meilleure que la meilleure actuelle
    if(tableau[i] > max)
    {
        // alors on l'enregistre
        max = tableau[i];
    }
}
// on retourne la meilleure note
return max;

}

?

Tu as oublié de te présenter ainsi que ton problème. Sinon, difficile de t’aider.

+0 -0

Salut, Il me semble (et je reste prudent parce que je suis en cours d' apprentissage de la programmation) que la variable nombreEleve a bien une valeur, passée en paramètre de la fonction. Par contre pour moi elle correspond au nombre d’éléments du tableau parcouru, donc elle est bizarrement nommée.

@L##, es-tu familier avec le concept de fonction ?

Dans ton code :

float meilleurNote(float tableau[], int nombreEleve) {

Là on définit une fonction. Entre les accolades, on définit le corps de la fonction. Une fonction est un bout de code qu’on peut réutilisé.

Une fonction à un nom (en C toutes les fonctions ont des noms, dans d’autres langages ce n’est pas forcément le cas) et peut prendre des paramètres. Ici la fonction prend 2 paramètres. Un pointeur sur un float et un entier.

Ici, l’entier est la taille du tableau et le pointeur pointe vers un tableau. Vu que la taille du tableau n’évolue pas, on ne devrait pas modifier cette variable.

Pour appeler cette fonction on fait :

meilleurNote(tableau, tailleDuTableau);

Ainsi, on définit les variables tableau et nombreEleve lors de l’appelle de la fonction. C’est l’ordre des paramètres qui nous permet de définir les arguments.

+0 -0

Merci à tous pour votre aide, j’ai oublié de dire que le code est en langage arduino au cas ou ça changerai quelque chose..

Donc pour créer un tableau il faut toujours procédé de cette manière :

laFonction(le type du parametre & le parametre tableau,le type du parametre & le parametre étant la valeur qui définira le nombre de case du tableau)

Enfin pour être sur d’avoir bien compris le code présenter au début, si par exemple j’avais utilisée la fonction de la manière suivante :

meilleurNote(tableau,10);

le résultat que l’on m’aurai retourné serai : 9 ?

Donc pour créer un tableau il faut toujours procédé de cette manière :

Non, non. Pour créer un tableau on fait comme ceci :

   int tableau[10] = {1, 5, 20, 12, 18, 18, 16, 10, 19, 14};

On indique le type des valeurs du tableau (ici int) ensuite le nom du tableau. Puis on ouvre les crochets (c’est ça qui fait que c’est un tableau), on indique la taille du tableau une constante, on ferme les crochets. Puis on initialise.

Il existe des tableaux un peu particuliers où on ne mets pas de taille entre les crochets (juste []) ou encore où on mets une variable entre les crochets (par exemple [n]) mais tu verras ça plus tard.

Enfin pour être sur d’avoir bien compris le code présenter au début, si par exemple j’avais utilisée la fonction de la manière suivante :

meilleurNote(tableau,10);

le résultat que l’on m’aurai retourné serai : 9 ?

L##

Pas forcément. Si le tableau avait été :

  // Je déclare un tableau à 10 éléments dont les 4 premiers sont 1, 5, 18.5 et 6.
  // Le reste est à 0
  float tab[10] = {1., 5., 18.5, 6.};
  printf("%f", meilleurNote(tableau,10));

Alors, ça aurait afficher 18.5. Par-contre pour :

  float tab[10] = {1., 5., 2., 6., 5., 9.};
  printf("%f", meilleurNote(tableau,10));

Effectivement, ça aurait afficher 9.

Le C (et le C++) sont des langages un peu compliqué au premier abord, c’est normal d’avoir des questions. Ça vient petit à petit. L’arduino est un langage inspiré du C et du C++. Plus proche du C de manière générale.

+0 -0

Merci encore ! je viens de comprendre mon erreur arf, en faite je ne comprenais pas que for(i=0; i<nombreEleve, i++) me permettait de parcourir les cases de mon tableau… c’est bien ça ?, mais je ne suis pas encore sur d’avoir compris le reste non plus :

" if(tableau[i] > max) { // alors on l’enregistre max = tableau[i]; } } // on retourne la meilleure note return max;

"

Est ce que cette partie du code ce traduit ainsi :

Si la variable i correspondant à chaque valeur des cases du tableau par défaut Egale à 0 est Supérieure à Max qui par défaut est Egale à 0)

alors on écrase la valeur de Max à chaque fois que l’on trouve une valeur qui lui est Supérieur dans le tableau.

Donc si le tableau a été défini de la manière suivante :

meilleurNote(tableau,10){

float tab[10] = {1., 2., 3., 4., 5., 6.,7.,8.,9.,10.}

} Grace à l’incrémentation on parcours chaque case jusqu’à [9] qui à comme valeur "10"

On commence par la première case [0] max vaudra alors 1 car [0] = 1 et que (max = 0)

Et tant que i<nombreEleve on avance dans le tableau

Donc si l’on passe à la seconde case qui est [1] max vaudra 2 car [1] = 2 la valeur précédente est écrasée car la valeur max précédemment enregistrée est 1 et comme ça jusqu’à la case [9] = 10

On aura alors max = 10

C’est bien ça ?

C’est bien ça ?

Oui. Bravo ! ^^

Est ce que cette partie du code ce traduit ainsi :

Si la variable i correspondant à chaque valeur des cases du tableau par défaut Egale à 0 est Supérieure à Max qui par défaut est Egale à 0)

alors on écrase la valeur de Max à chaque fois que l’on trouve une valeur qui lui est Supérieur dans le tableau.

Alors non pas tout à fait. i varie entre 0 et nombreEleve. C’est tableau[i] pour i variant de 0 à nombreEleve qui correspond à chaque valeur des cases du tableau.

Je pense que tu devrais certainement étudier ce tutoriel sur le langage C. Étant donné que tu codes sur Arduino, tu n’as pas besoin d’installer Code::blocks.

La grande différence entre C et Arduino. C’est que en Arduino, on commence par la fonction setup et ensuite on appelle la fonction loop en boucle. Alors qu’en C, on appelle simplement une fois la fonction main. En quelque sorte, main correspond à la fonction setup d’arduino, et on n’appelle jamais la fonction loop.

Appart ça, les différences sont minimes et tu apprendras beaucoup de choses en apprenant le C.

Tu peux également simplement te servir du tutoriels pour comprendre certaines notions. En effet, comme je te l’ai dis Arduino ~= C donc le chapitre sur les tableaux par exemple pourrait être un cours d’Arduino sans problème.

+0 -0

Ok j’ai encore pas mal de boulot ^^ j’ose quand même une question car je t’avoue ne pas être sur de ce que j’ai compris :

Alors non pas tout à fait. i varie entre 0 et nombreEleve. C’est tableau[i] pour i variant de 0 à nombreEleve qui correspond à chaque valeur des cases du tableau.

Quand tu me dis (varie entre 0 et nombre élève tu site la condition du for) et pour (tableau[i]) c’est pour -> {1., 2., 3., 4., 5., 6.,7.,8.,9.,10.}

Je penses avoir compris dans l’ensemble merci encore pour toutes ces précisions et conseils donc je me met au C !

Quand tu me dis (varie entre 0 et nombre élève tu site la condition du for) et pour (tableau[i]) c’est pour -> {1., 2., 3., 4., 5., 6.,7.,8.,9.,10.}

L##

Oui si j’ai bien compris ce que tu as dis.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte