Structure etudiant

Discutez d'informatique ici !
samirou
Membre Relatif
Messages: 166
Enregistré le: 06 Fév 2012, 22:55

structure etudiant

par samirou » 26 Oct 2014, 18:43

Bonjour, j'ai un programme en langage C dont voici l'énoncé:

Ecrire un programme en langage C qui contient les opérations suivantes:
1. Définir un type structure appelé étudiant permettant de représenter un étudiant avec les champs nom, prénom, numéro (de type chaine de caractères) et note de type réel;
2. Remplir un tableau de 10 étudiants d'une classe avec des informations données par l'utilisateur
3. Afficher les noms, prénoms, numéros et notes des 10 étudiants de la classe.
4. Chercher et afficher la plus grande note de la classe
5. Chercher et afficher le nombre d'étudiants qui ont une note supérieure ou égale à 10.
6. Chercher et afficher la moyenne des notes des étudiants de la classe.

Actuellement j'ai ceci et je voudrais de l'aide pour le reste 4. et 5. et 6

#include
#include
struct Etudiant
{
char nom[20];
char prenom[20];
char numero[20];
float note[10];
float moyenne;

};
main()
{
struct Etudiant etd[10];
int i;
for(i = 0; i<10; i++)
{
printf ("...... Veillez saisir les informations du %d etudiant .....\n" , i+1);
printf ("Entrer le nom \n" );
scanf ("%s" ,&etd[i].nom );
printf ("Entrer le prenom \n" );
scanf ("%s" ,&etd[i].prenom );
printf ("Entrer la note %d \n" );
scanf ("%f" ,&etd[i].note);
};
for(i = 0; i<10; i++)
{
printf ("votre nom est : %s:\n",etd[i].nom );
printf ("votre prenom est : %s:\n",etd[i].prenom );
printf ("votre nom est : %f:\n",etd[i].note );
}
getch ();
}



Avatar de l’utilisateur
ampholyte
Membre Transcendant
Messages: 3940
Enregistré le: 21 Juil 2012, 07:03

par ampholyte » 27 Oct 2014, 09:00

Bonjour,

Qu'est-ce qui te pose problème ?

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 17:04

par barbu23 » 27 Oct 2014, 12:49

Bonjour,

Pour le , il me semble qu'il faut créer une fonction Max qui reçoit un tableau de type : int, de cases, qui contient les notes des étudiants de la classe, et qui renvoie une valeur de type : int aussi. Cette valeur représente le maximum des nombres contenus dans le tableau.
Je te laisse réfléchir sur la manière de construire cette fonction. Moi aussi, je ne suis pas en mesure de réaliser cette fonction. :hum: :ptdr:

Cordialement.

Edit : Voiçi les instructions que doit contenir la fonction :
int Max ( int tableau[] ).
{
int y = 0;
for ( i=0 , i<10 , i++ )
{
if ( tableau[i] <= tableau[i+1] )
{
y = tableau[i+1];
}
else
{
y = tableau[i]
}
}
return y ;
}

Quelqu'un peut-il corriger ou améliorer le code source de ma fonction ?

Merci d'avance. :happy3:

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 27 Oct 2014, 13:48

barbu23 a écrit:Bonjour,

Pour le , il me semble qu'il faut créer une fonction Max qui reçoit un tableau de type : int, de cases, qui contient les notes des étudiants de la classe, et qui renvoie une valeur de type : int aussi. Cette valeur représente le maximum des nombres contenus dans le tableau.
Je te laisse réfléchir sur la manière de construire cette fonction. Moi aussi, je ne suis pas en mesure de réaliser cette fonction. :hum: :ptdr:

Cordialement.

Edit : Voiçi les instructions que doit contenir la fonction :
int Max ( int tableau[] ).
{
int y = 0;
for ( i=0 , i<10 , i++ )
{
if ( tableau[i] <= tableau[i+1] )
{
y = tableau[i+1];
}
else
{
y = tableau[i]
}
}
return y ;
}

Quelqu'un peut-il corriger ou améliorer le code source de ma fonction ?

Merci d'avance. :happy3:



Le soucis avec ton code ici c'est qu'est ce qu'il se passe si par malheur l'utilisateur entre un tableau plus petit ou plus grand que 10 ?

Qui plus est ton algo n’est pas bon car en fait tu vas sauvegarder le max des deux dernières valeurs du tableau^^


Tu as besoin d'une variable max et à chaque nouvelle case du tableau tu devras la comparer avec ton ancien max.
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 17:04

par barbu23 » 27 Oct 2014, 13:57

Rockleader a écrit:Le soucis avec ton code ici c'est qu'est ce qu'il se passe si par malheur l'utilisateur entre un tableau plus petit ou plus grand que 10 ?

Qui plus est ton algo n’est pas bon car en fait tu vas sauvegarder le max des deux dernières valeurs du tableau^^


Tu as besoin d'une variable max et à chaque nouvelle case du tableau tu devras la comparer avec ton ancien max.


Peux tu écrire le code source de Max qui correspond à ce que tu affirmes ?
Merci d'avance. :happy3:

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 27 Oct 2014, 14:26

bonjour,

@barbu23 ton code est pas ok et en plus inutilement compliqué.
utilises la balise code.

l'algorithme classique est le suivant:
Code: Tout sélectionner
element = tableau[0]
pour chaque element du tableau
 si element > max
  max = element
 finsi
finpour
la vie est une fête :)

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 27 Oct 2014, 14:34

L'idée c'est:
Code: Tout sélectionner
Max = Tab[0]

Pour k = 1 à n
   Si Tab[k] > max
           max = tab[k]
   FinSi
FinPour



Dans ton cas n = 10, mais vu que tu ne passes pas directement un int tab[10] tu ne peux pas être sur de la taille.


Je suis plus sur de la méthode, tu peux tester avec sizeof(nomTableau)/sizeof(typeTableau) pour avoir la taille mais je suis pas sur que ça marche toujours.
Autrement, il suffit de tester jusqu'à ce que l'on tombe sur null
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 17:04

par barbu23 » 27 Oct 2014, 14:38

fatal_error a écrit:bonjour,

@barbu23 ton code est pas ok et en plus inutilement compliqué.
utilises la balise code.

l'algorithme classique est le suivant:
Code: Tout sélectionner
element = tableau[0]
pour chaque element du tableau
 si element > max
  max = element
 finsi
finpour

Merci, donc, le code est :
Code: Tout sélectionner
int Max ( int tableau[] ).
{
int element = tableau[0];
for ( i=0 , i Max )
{
Max = element ;

}
return max ;
}

non ?

Edit
: Merci à toi aussi pour tes indications @Rockleader. :happy3:

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 27 Oct 2014, 14:49

Code: Tout sélectionner
int Max ( int tableau[] ).
{
int element = tableau[0];
for ( i=0 , i max )
{
max = element ;

}
return max ;
}



Tu n'initialise pas ton maximum ou plutôt tu l'appelle element.

Donc en fait tu fais max > max ce qui n'a pas de sens, d'autant plus que tu ne connais pas max au premier tour de boucle.

Par élément il faut comprendre l'élément courant du tableau tab[k].
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 17:04

par barbu23 » 27 Oct 2014, 15:00

@Rockleader :
Je suis perdu entre les notations de @fatal_error, et les miens. Je ne sais pas comment @fatal_error a introduit sa fonction : max, ou plutôt sa variable : max. Regarde son code source pour comprendre. :happy3:
ET merci à vous deux pour votre aide. :happy3:

Avatar de l’utilisateur
Rockleader
Habitué(e)
Messages: 2126
Enregistré le: 11 Oct 2011, 18:42

par Rockleader » 27 Oct 2014, 15:10

Fatal t'a donné un algorithme pas le code dans le détail.


Regarde plutot par rapport à ce que j'ai mis

Code: Tout sélectionner
max = Tab[0]

Pour k = 1 à n
   Si Tab[k] > max
           max = tab[k]
   FinSi
FinPour


Pour faire le rapprochement avec ce que Fatal a écrit
Code: Tout sélectionner
max = Tab[0]

Pour k = 1 à n
element=tab[k]
   Si element > max
           max = element
   FinSi
FinPour
Cette histoire est entièrement vraie puisque je l'ai inventé du début à la fin !

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 17:04

par barbu23 » 27 Oct 2014, 15:17

Ah d'accord, j'ai compris, merci. Pour rendre n quelconque, j'introduis quel code ?
Pour votre information, je n'apprends pas par cœur les prototypes des fonctions des bibliothèques disponibles dans C. Parce que, je suis encore un béotien dans le domaine. :triste:
Merci d'avance.

barbu23
Membre Transcendant
Messages: 5466
Enregistré le: 18 Fév 2007, 17:04

par barbu23 » 27 Oct 2014, 15:37

On s'occupe un petit peu, de ce qui est dit ici :
Rockleader a écrit:
Code: Tout sélectionner
int Max ( int tableau[] ).
{
int y = 0;
for ( i=0 , i<10 , i++ )
{
if ( tableau[i] <= tableau[i+1] )
{
y = tableau[i+1];
}
else
{
y = tableau[i]
}
}
return y ;
}

... Qui plus est ton algo n’est pas bon car en fait tu vas sauvegarder le max des deux dernières valeurs du tableau^^

Oui, j'ai oublié ça. Lorsqu'on un code qui n'est pas encadré par une fonction, on travaille à l'aide de variables ordinaires. Lorsqu'un code est encadré par une fonction, à ce moment là, il faut utiliser les pointeurs, pour que les variables locales ne se détruisent pas à la fin de l’exécution de la fonction, non ? Mais, ici, un tableau est un pointeur, non ? donc, les variables locales du genre : tableau, avec variant entre , et , ne se détruisent pas à la fin de l’exécution de la fonction, non ? :hein:

Edit :
Je propose une amélioration à mon code source çi-dessus :
Code: Tout sélectionner
int Max ( int *tableau , int Tailledutableau ).
{
int y = 0;
int i ;
for ( i=0 , i < Tailledu tableau , i++ )
{
if ( tableau[i] <= tableau[i+1] )
{
y = tableau[i+1];
}
else
{
y = tableau[i]
}
}
return y ;
}

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 4 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite