Utilises le bouton code </> du forum pour poster ton code ! (tu peux modifier ton post, lien modifier en haut à droite du post).
Pour ton erreur c'est que tu utilises une variable sommeTableau qui n'existe pas ! Tu ne l'as pas déclarée !
Il n'y a pas que cela ! Ta fonction sommeTableau qui elle existe bien devrait retourner le résultat (un entier) Or elle ne retourne rien !
Ta fonction main retourne l'adresse de la fonction sommeTableau, ce n'est pas très utile (En général on lui fait retourner 0 pour dire que tout c'est bien passé).
Conclusion, tu as du aller un peu vite dans la lecture du cours, notamment au sujet des fonctions !
Salut, plusieurs problèmes : Dans ta fonction "sommeTableau" ne contient pas une variable mais l'adresse de la fonction; il faut déclarer une variable qui contiendra le résultat voulu.
Dans ton main tu renvoies l'adresse de ta fonction, il faut simplement écrire "return 0" pour indiquer à ton OS que le programme s'est terminé correctement.
Il y a confusion entre nom de variable et nom de fonction, je te conseille de donner un nom de type "calculSommeTableau" à ta fonction et "somme" à la variable qui contiendra le résultat.
>Et j'obtiens l'erreur de compilation suivante que je ne comprends pas: lvalue required as left operand of assignment|
Merci de prendre l'habitude d'indiquer à quelle ligne se rapporte chacun des messages.
Quelques éléments : sommeTableau est le nom d'une fonction. C'est très bien. Mais le nom d'une fonction, ce n'est pas quelque chose dont on peut se servir comme variable, pour y ranger quelques chose
void ma_fonction (int a, int b) {
...
ma_fonction = .....; // NON !!!!!
...
Si une fonction sert à déterminer une valeur en faisant un calcul, en général elle va RETOURNER cette valeur. le type du résultat sera indiqué dans le prototype, et il y aura une instruction return pour retourner la valeur
int somme_carres(int a, int b) { // type int
return a*a + b*b; // valeur retournée
}
// ou
int somme_carres(int a, int b) { // type int
int a2 = a * a;
int b2 = b * b;
int resultat = a2 + b2;
return resultat; // valeur retournée
Pour employer la valeur calculée par une fonction, il suffit de l'appeler
int carre(int n) { // n'hésitons pas à
return n * n; // écrire des fonctions
}
int somme_carres(int a, int b);
return carre(a) + carre(b); // c'est quand même plus clair
}
int main() {
printf("resultat = %d\n", somme_carres(2,3));
}
Pour le nom des fonctions
il y a celles qui sont là pour retourner un résultat. Une bonne convention est de les nommer en fonction de la signification du résultat. carre(2), ça retourne le carré de 2. C'est pas compliqué. Pas la peine d'y mettre un "calcul", un ordinateur, ça ne fait que calculer, ça ne veut rien dire.
il y a celle qui représentent plutôt des actions et qui ont un type de retour void. Utiliser un infinitif. lire_donnees, trier_tableau, afficher_resultats, etc.
Pas la peine d'y mettre un "calcul", un ordinateur, ça ne fait que calculer, ça ne veut rien dire.
Perso j'ai proposé "calculSommeTableau" car littéralement "sommeTableau" peut aussi bien signifier la somme en elle-même que la fonction renvoyant la somme
Perso j'ai proposé "calculSommeTableau" car littéralement "sommeTableau" peut aussi bien signifier la somme en elle-même que la fonction renvoyant la somme
Je pense que ce n'est pas une bonne idée :
Quand on écrit une fonction qui retourne la somme des éléments d'un tableau, on ne sait pas la signification du tableau et peu importe. Donc 'sommeTableau', c'est très bien, pour la raison indiquée par michelbillaud (la fonction 'sqrt' ne s'appelle pas 'computeSqrt').
Quand on utiliser une variable numérique destinée à recevoir la somme d'un tableau, elle a une signification. Par exemple ce tableau mémorise les dépenses pour chaque mois (de 0 à 11), et alors la somme des éléments du tableau représente la dépense annuelle. La variable ne doit donc pas se nommer 'sommeTableau' mais 'depenseAnnuelle'. Son nom doit refléter sa signification.
De même le tableau s'appellera 'Tableau' dans la liste des paramètres de la fonction, mais 'depensesMensuelles' dans le programme (toujours avec cet exemple).
Exemples de prototypes de fonction :
float sommeTableau(float tableau[], int taille);
float moyenneTableau(float tableau[], int taille);
Exemples d'appels à ces fonctions :
float notes[50]; // tableau des notes du contrôle
int nbEleves = 35;
float moyenneNotes = moyenneTableau(notes, nbEleves);
float depensesMensuelles[12] // dépenses par mois, janvier = 0
float depenseAnnuelle = sommeTableau(depensesMensuelles, 12);
Voici une version short and sweet Il n'est pas nécessaire d'avoir les même noms de variables dans le prototype et la définition de la fonction. Même chose pour les variable correspondantes dans la fonction appelante (ici le main). - #include <stdio.h>
int sommeTableau(int array[], int length);
int main() { int tab[4] = {1, 2, 3, 4}; int sum = sommeTableau(tab, 4); printf("somme = %d\n", sum); }
int sommeTableau(int tableau[], int taille) { int somme = 0; for(int i=0; i<taille; i++) somme += tableau[i]; return somme; }
Le Tout est souvent plus grand que la somme de ses parties.
Il n'est pas nécessaire d'avoir les même noms de variables dans le prototype et la définition de la fonction.
Je dirais même mieux, Les nom ne sont pas nécessaire dans la déclaration, seul les types suffisent !
Mais je ne suis pas certain que tout cela va aider le PO.
problème de compiltation
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Le Tout est souvent plus grand que la somme de ses parties.