Tableau avec nom étudiant et moyenne !

Résolu
TheRogerFederer
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
- Modifié par TheRogerFederer le 7/10/2015 à 11:43
TheRogerFederer
Messages postés
256
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
10 mars 2016
- 27 nov. 2015 à 09:07
Bonjour, je reviens vers vous, car cela faisait un petit moment ! Voici l'énoncé de mon problème :

"Saisir les noms des étudiants et, pour chaque étudiant, sa moyenne. Afficher les noms
des étudiants qui sont au dessus de la moyenne de la classe. Il n'y a pas plus de 40
étudiants et on arrêtera la saisie en posant la question à l'utilisateur."

l'algo qui était attendue suite a mes essais était le suivant :

programme moyennesup
s_etudiants : structure
nom : chaine
moy : réel
finstructure
t_etudiant[1..40] : s_etudiant
moyenne : réel
rep : caractere
nb, k : entier
debut
nb <- 0 // compteur d'étudiants
moyenne <- 0 // cumul des moyennes
//--- saisie des informations ---
repeter
nb <- nb + 1
afficher "nom de l'étudiant = "
saisir t_etudiant[nb].nom
afficher "moyenne de l'étudiant = "
saisir t_etudiant[nb].moy
moyenne <- moyenne + t_etudiant[nb].moy
afficher "voulez-vous continuer ? (O/N) "
saisir rep
jusqu'à rep = "N" ou nb = 40
//--- calcul de la moyenne ---
moyenne <- moyenne / nb
//--- affichage des étudiants au dessus de la moyenne ---
pour k de 1 à nb
si t_etudiant[k].moy > moyenne alors
afficher t_etudiant[k].nom
finsi
finpour
fin


et j'ai codé cela :
#include <stdio.h>
#include <conio.h>
#include <string>

// -- Programme Principal --
void clear (void) {
 while (getchar () != '\n') ;
}

int main() 
{
 // -- Déclarations --
 struct s_etudiants {
  const char nom ;
  double moyenne ;
 };
 char rep = 'n' ;
 double moyenne = 0 ; // Cumul des moyennes
 int nbre = 0 ; // Compteurs d'étudiants
 int k ;
 t_etudiant[40] = s_etudiants ;
 
 // -- Saisie des informations --
 do 
 {
  printf(" Nom de l'\x85tudiant = ") ;
  scanf("%c",&t_etudiant[nbre].nom) ;
  printf(" Moyenne de l'\x85tudiant = %lf ", moyenne) ;
  scanf("%lf",&t_etudiant[nbre].moyenne) ;
  moyenne = moyenne + t_etudiant[nbre].moyenne ;
  printf(" Voulez-vous continuez ? (O/n) ") ;
  clear () ;
  scanf("%c",&rep) ;
  nbre ++ ;
 }
 
 while(rep == 'n' || nbre = 40) ;
  // -- Calcul de la moyenne --
  moyenne = (moyenne / nbre) ;
 
 // -- Affichage des étudiants au dessus de la moyenne --
 for (k = 1; k <= nbre; nbre++) 
 {
  if (t_etudiant[k].moyenne > moyenne) 
  {
   printf(" Afficher t_\x85tudiant = ", t_etudiant) ;
  }
 }
 
getch() ;
return 0 ;

}

j'ai dessus 3 erreurs en supposant biensure que le programme fasse bien ce qui est attendu :

lvalue required as left operand of assignment - line 44

expected primary-expression before ';' token - line 28

't_etudiant' was not declared in this scope - line 28

J'en avais bcp plus a la base, j'espère en avoir résolu certaine sans modifier le but final biensure !

35 réponses

cptpingu
Messages postés
3834
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
20 octobre 2021
124
7 oct. 2015 à 13:43
Bonjour.

Plusieurs erreurs:
  • l14: Si le champ est constant, comment vas-tu faire pour le modifier ?
  • l14: On s'attend à une chaîne de caractères (plusieurs caractères, donc), et tu indiques un seul caractère.
  • l21: D'où sort "t_etudiant" ? Où est-il déclaré ?
  • l37: Tu confonds encore affectation et comparaison.
  • l42: Un tableau, en C, commence à 0. Donc un tableau de taille 40 va de 0 à 39 compris.
  • l46: Un printf ne peut pas afficher un type personnalisé (une structure). C'est à toi d'afficher ses membres un à un (ou juste le membre qui t'intéresse, en l'occurence, ici, le nom).


PS: Je t'invite une fois de plus à "perdre du temps", pour en gagner. C'est-à-dire, à lire et faire tous les tutoriel que je t'ai proposé dans un précédent post. Ça se sent immédiatemment que ça n'a pas été fait, et que tu ne t'es toujours pas amélioré. Bien évidemment, libre à toi de faire ce que tu veux (scolairement faire tes devoirs, sans plus, et ne pas t'améliorer, ou bien ne pas hésiter à prendre les devants et drastiquement progresser).
0