Dark-Boy
-
20 juin 2010 à 21:34
timike972
Messages postés19Date d'inscriptionmercredi 16 juin 2010StatutMembreDernière intervention 1 octobre 2011
-
21 juin 2010 à 09:58
Bonjour,
Bojour j'ai cree un programme qui marche mais le probleme c'est que je n'arrive pas a faire une recherche correcte des moyenne .
Lorsque que je saisie par exemple les moyenne 14, 15, 9 etc .... , cela marche , mon programme me donne la liste des eleve ayant eu cette moyenne mais lorsque que je saisie par exemple un nombre a virgule , qui correspon a un eleve donne la moyenne comporte des chiffre apres la virgule par exemple 10.33 , 10.5 etc.... cela ne marche pas .
J'aimerai obtenir de l'aide, un indice , j'ai cherché de partout mais je ne trouve l'origine de ce problème.
Voici mon code ci-dessu
/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/*Déclaration de la structure eleve*/
struct eleve{
double n1;
double n2;
double n3;
double moyenne;
char nom[600];
};
/* element du tableau (trait,lignes, colonnes)*/
typedef struct eleve eleve;
void element_tablo(){
printf("\n_____________________________________\n");
printf("Nom |note1|note2|note3|Moyenne|");
printf("\n_____________________________________\n");
}
void element_tablo1(){
printf("\n___________________\n");
printf("Nom |Moyenne|");
printf("\n___________________\n");
}
void element_tablo2(){
printf("-------------------------------------\n");
}
void element_tablo3(){
printf("--------------------\n");
}
void presentation_menu()
{
/* === Menu ====*/
printf("\n\n ==== Menu ==== \n\n");
printf("\n Voulez vous : \n");
printf("\n 1. Afficher le tableau par ordre alphabetique ");
printf("\n 2. Afficher le tableau par ordre de merite (moyenne) ");
printf("\n 3. Afficher la meilleur moyenne ainsi que la plus mauvaise ainsi que l'eleve concerne ");
printf("\n 4. Afficher le tableau qui elimine les moyenne inférieur a 3 ");
printf("\n 5. Chercher une moyenne donnée et afficher tous les élèves ayant cette moyenne ");
printf("\n 6. Chercher un élève donné et afficher ses notes ");
printf("\nVeuillez saisir le nombre correspondant a votre choix puis appuyez sur la touche 'ENTREE' ou quitter en appuyant sur d'autres touches'\n\n ");
}
int main(void){
/*Declaration de variable*/
int i,k,a,j,choix,b;
double moyennes;
/*appel de la structure*/
eleve tablo[600];
eleve echange;
/* Message du commencement de la saisie */
printf("\nVous allez saisir un tableau contenant des noms d'eleves ainsi que leurs 3 notes.\n\n");
printf("Saisissez le nombre d'elève qu'il y'aura dans le tableau:\n");
/* Saisie du tableau */
scanf("%d",&k);
for (i=0;i<k;i++){
a=i+1;
printf("\n Tapez le nom de l'eleve n° %d :",a);
scanf("%s",tablo[i].nom);
printf("\n Saisissez la premiere note (n1) de l'eleve %s: ",tablo[i].nom);
scanf("%lf",&tablo[i].n1);
printf("\n Saisissez la deuxieme note (n2) de l'eleve %s: ",tablo[i].nom);
scanf("%lf",&tablo[i].n2);
printf("\n Saisissez la troisieme note (n3) de l'eleve %s: ",tablo[i].nom);
scanf("%lf",&tablo[i].n3);
tablo[i].moyenne = (tablo[i].n1+tablo[i].n2+tablo[i].n3)/3 ;
}
/* Affichage du tableau saisie*/
printf("\n == saisie du tableau == \n");
element_tablo();
for(i=0;i<k;i++){
printf("%10s|",tablo[i].nom);
printf("%5.2lf|%5.2lf|%5.2lf|%5.2lf |\n",tablo[i].n1,tablo[i].n2,tablo[i].n3,tablo[i].moyenne);
}
element_tablo2();
/*presentation du menu*/
presentation_menu();
/* fonction menu*/
int menu(){
char compar_nom;
scanf("%d",&choix);
switch(choix){
case 1:
/* tableau trié par ordre alphabetique (choix 1)*/
/* tri par ordre par ordre alpahabetique*/
for(i=0;i<k;i++)
{
for(j=k-1;j>i;j--)
{
if(strcmp(tablo[j].nom,tablo[j-1].nom)<0)
{
/* echange=tablo[j].nom;
tablo[j].moyenne=tablo[j-1].nom;
tablo[j-1].moyenne=nom;*/
memcpy(&echange,&tablo[j],sizeof(echange));
memcpy(&tablo[j],&tablo[j-1],sizeof(echange));
memcpy(&tablo[j-1],&echange,sizeof(echange));
}
}
}
/*Affichage du tableau trié par ordre alphabetique*/
printf("\n * tableau trié par ordre alphabetique *");
element_tablo();
for(i=0;i<k;i++){
printf("%10s|",tablo[i].nom);
printf("%5.2lf|%5.2lf|%5.2lf|%5.2f |\n",tablo[i].n1,tablo[i].n2,tablo[i].n3,tablo[i].moyenne);
}
element_tablo2();
presentation_menu();
menu();
break;
case 2:
/* tableau trié par ordre de merite (choix2)*/
/* trie par ordre de merite*/
for(i=0;i<k;i++)
{
for(j=k-1;j>i;j--)
{
if(tablo[j].moyenne>tablo[j-1].moyenne)
{
memcpy(&echange,&tablo[j],sizeof(echange));
memcpy(&tablo[j],&tablo[j-1],sizeof(echange));
memcpy(&tablo[j-1],&echange,sizeof(echange));
}
}
}
/*Affichage du tableau trié par ordre du merite*/
printf("\n* tableau par ordre de merite*");
element_tablo();
for(i=0;i<k;i++){
printf("%10s|",tablo[i].nom);
printf("%5.2lf|%5.2lf|%5.2f|%5.2lf |\n",tablo[i].n1,tablo[i].n2,tablo[i].n3,tablo[i].moyenne);
}
element_tablo2();
presentation_menu();
menu();
break;
case 3:
/* Affichage de la meilleur moyenne et de la plus mauvaise (choix 3)*/
/* tri de la moyenne*/
for(i=0;i<k;i++)
{
for(j=k-1;j>i;j--)
{
if(tablo[j].moyenne>tablo[j-1].moyenne)
{
memcpy(&echange,&tablo[j],sizeof(echange));
memcpy(&tablo[j],&tablo[j-1],sizeof(echange));
memcpy(&tablo[j-1],&echange,sizeof(echange));
}
}
}
/* Affichage de la meilleur moyenne (tablo[0]).moyenne*/
printf("\n == moyenne la plus haute == ");
element_tablo1();
for(i=0;i<k;i++)
{
if(tablo[i].moyenne==tablo[0].moyenne)
{
printf("%10s |",tablo[i].nom);
printf("%5.2f |\n",tablo[i].moyenne);
}
}
element_tablo3();
/*Affichage de la plus mauvaise moyenne*/
/* tri des moyennes ( de la plus basse a la plus haute) */
for(i=0;i<k;i++){
for(j=k-1;j>i;j--)
{
if(tablo[j].moyenne<tablo[j-1].moyenne)
{
memcpy(&echange,&tablo[j],sizeof(echange));
memcpy(&tablo[j],&tablo[j-1],sizeof(echange));
memcpy(&tablo[j-1],&echange,sizeof(echange));
}
}
}
/* Affichage de la plus basse moyenne (tablo[0].moyenne)*/
printf("\n== moyenne la plus basse ==");
element_tablo1();
for(i=0;i<k;i++)
{
if(tablo[i].moyenne==tablo[0].moyenne)
{
printf("%10s |",tablo[i].nom);
printf("%5.2f |\n",tablo[i].moyenne);
}
}
element_tablo3();
presentation_menu();
menu();
break;
case 4:
/* Eliminer les moyennes inferieure a 3 et egale (choix 4) */
printf("\nDans ce tableau les eleves ayant une moyenne inferieur a 3 ne sont pas represente\n");
element_tablo1();
for(i=0;i<k;i++)
{
if(tablo[i].moyenne >3)
{
printf("%10s |",tablo[i].nom);
printf("%5.2f |\n",tablo[i].moyenne);
}
}
element_tablo3();
presentation_menu();
menu();
break;
case 5:
/* Rechercher une moyenne et afficher les eleves ayant cette moyenne (choix 5)*/
printf( "\n recherche moyenne \n");
printf(" Veuillez saisir la moyenne recherche et appuyez sur ' Entree ': ");
scanf("%lf",&moyennes);
printf("\nvoici les eleves ayant la moyennes que vous recherchiez\n");
element_tablo1();
for(i=0;i<k;i++){
if(tablo[i].moyenne == moyennes)
{
printf("%10s |",tablo[i].nom);
printf("%5.2lf |\n",tablo[i].moyenne);
}
}
element_tablo3();
presentation_menu();
menu();
break;
case 6:
/* Rechercher un eleve donné et afficher ses notes*/
printf( "\n rechercher un nom et afficher ses notes \n");
printf(" Veuillez saisir le nom recherche et appuyez sur ' Entree ': ");
scanf("%s",&compar_nom);
element_tablo();
for(i=0;i<k;i++){
if(strcmp(&compar_nom,tablo[i].nom) == 0)
{
printf("%10s |",tablo[i].nom);
printf("%5.2lf|%5.2lf|%5.2lf|%5.2lf |\n",tablo[i].n1,tablo[i].n2,tablo[i].n3,tablo[i].moyenne);
}
}
element_tablo2();
presentation_menu();
menu();
break;
default:
printf("\n A bientot \n\n");
break;
}
}
/* Appel de la fonction menu()*/
menu();
}
le probleme se situe a ce niveau:
case 5:
/* Rechercher une moyenne et afficher les eleves ayant cette moyenne (choix 5)*/
printf( "\n recherche moyenne \n");
printf(" Veuillez saisir la moyenne recherche et appuyez sur ' Entree ': ");
scanf("%lf",&moyennes);
printf("\nvoici les eleves ayant la moyennes que vous recherchiez\n");
element_tablo1();
for(i=0;i<k;i++){
if(tablo[i].moyenne == moyennes)
{
printf("%10s |",tablo[i].nom);
printf("%5.2lf |\n",tablo[i].moyenne);
}
}
element_tablo3();
presentation_menu();
menu();
break;
je vous remerci d'avance pour votre aide, la compilation marche .