Partage
  • Partager sur Facebook
  • Partager sur Twitter

"URGENT" : Examen de programmation (mardi)

merci

2 septembre 2007 à 20:01:48

Bonjour à tous, voilà je m'entraine pour mon examen et j'ai rencontré quelques problèmes en créant un programme pour m'exercer:

1. Lors de la saisie, je ne peut introduire de "t[i].nom" qui contient un espace (ex: Jean Jacques ;-))
2. Lors du tri, les éléments sont triés uniquement par code. En théorie, il devrait d'abord se trier dans l'ordre alphabétique et ensuite par code.
3. J'ai constaté que ma suppression fonctionne pour retirer 1 nom, mais ensuite c'est la galère pour en retirer un deuxième.
4. Pour la sauvegarde, la question du prof est "On demande à l'utilisateur d'introduire un seuil(int) (>0 && <100) (avec test). Pour chaque 'element", si la somme de ses cotes est supérieure au seuil, on l'enregistrera dans un fichier "Fich.txt".

Voilà pour conclure je dirais juste que si quelqu'un sait résoudre l'une ou l'autre chose (de manière simple, nous n'avons pas vu bcp d'outils au cours), qu'il se manifeste. Je vous remercie tous d'avance! A++

---------------------------------------------------------------------------------------------------------
code
---------------------------------------------------------------------------------------------------------
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
const int NE_MAX=20;
const int NC_MAX=5;
const int MAX=30;

struct element{
char nom[MAX];
char code;
int cotes[NC_MAX];
};

void menu(int &choix){
cout<<"\n1. Saisie et Affichage du tableau"<<endl;
cout<<"2. Tri par ordre alphabetique par nom et code"<<endl;
cout<<"3. Suppression d'un element apres localisation"<<endl;
cout<<"4. Sauvergarde"<<endl;
cout<<"5. Arret du programme"<<endl<<endl;
cout<<"Entrez votre CHOIX : ";
cin>>choix;
}

void saisie (element t[], int &NE, int &NC){
int i,j;

do{
cout<<"\nEntrez le nombre d'etudiants : "<<endl;
cin>>NE;
}while(NE<1||NE>NE_MAX);

do{
cout<<"\nEntrer le nombre de cotes : "<<endl;
cin>>NC;
}while(NC<1||NC>NC_MAX);

for(i=0; i<NE; i++){
cout<<"\nEntrer le nom de l'etudiant "<<i+1<<" : ";
cin>>t[i].nom;
cout<<"\nEntrer son code : ";
cin>>t[i].code;
for(j=0; j<NC; j++){
cout<<"\nEntrer la cote "<<j+1<<" : ";
cin>>t[i].cotes[j];
}
}

}

void affiche (element t[], int NE, int NC){
int i,j;
cout<<"\nLe tableau est le suivant : "<<endl;
for(i=0;i<NE;i++){
cout<<"Nom "<<i+1<<" : "<<t[i].nom<<endl;
cout<<"Code : "<<t[i].code<<endl;
for(j=0;j<NC;j++){
cout<<"Cote "<<j+1<<" : "<<t[i].cotes[j]<<endl;
}
}
}
void tri(element t[], int NE){
bool fin, fini;
int i;
element temp, tmp;

do{
fin=true;
for(i=0;i<NE-1;i++){
if(t[i].nom>t[i+1].nom){
tmp=t[i];
t[i]=t[i+1];
t[i+1]=tmp;
fin=false;
}
}
}while(fin==false);

do{
fini=true;
for(i=0;i<NE-1;i++){
if(t[i].code>t[i+1].code){
tmp=t[i];
t[i]=t[i+1];
t[i+1]=tmp;
fini=false;
}
}
}while(fini==false);

}
void dico(element t[], int NE, string delnom, int&pos, bool &trouve){
int fin=NE-1, deb=0, mil;
trouve=false;
while(deb<=fin && trouve==false){
mil=(fin + deb)/2;
if(delnom==t[mil].nom){
trouve=true;
}
else if(t[mil].nom<delnom){
deb=mil+1;
}
else{
fin=mil-1;
}
}
pos=mil;
}
void supp(element t[], int&NE, int pos){
int i;
for(i=pos; i<NE; i++){
t[i]=t[i+1];
}
NE=NE-1;
}
void save(element t[], int NE, int NC){
ofstream save;
save.open("fichier.txt");
if(save){
cout<<"No error!"<<endl;
int i,j;
save<<NE<<endl;
save<<NC<<endl;
for(i=0;i<NE;i++){
save<<t[i].nom<<endl;
save<<t[i].code<<endl;
for(j=0;j<NC;j++){
save<<t[i].cotes[j]<<endl;
}
}
save.close();
}
else{
cout<<"Error!"<<endl;
}
}
void main(){
element t[NE_MAX];
int choix=0;
int NE, NC;
int a=0;
bool trouve=false;
int pos=0;
string delnom;

while(a==0){
do{
menu(choix);
}while(choix<1||choix>5);

switch (choix){
case 1:
saisie (t,NE,NC);
affiche (t,NE,NC);
break;

case 2:
tri(t,NE);
affiche (t,NE,NC);
break;

case 3:
cout<<"Entrer le nom a supprimer : ";
cin>>delnom;
dico(t,NE,delnom,pos,trouve);
if(trouve==true){
supp(t,NE,pos);
}
affiche(t,NE,NC);
break;

case 4:
save(t,NE,NC);
break;

case 5:
a=a+1;
break;
}
};
}





  • Partager sur Facebook
  • Partager sur Twitter
2 septembre 2007 à 20:15:37

il faut utiliser la balise <code> et rechercher un peu plus/mieux
  • Partager sur Facebook
  • Partager sur Twitter