Auteur: Mohamed Messabihi
Matière: Programmation et structures de données Date08 Juin 2015
Durée1h30
Université Abou Bakr Belkaïd - Tlemcen Faculté des Sciences 1èreAnnée MI Semestre 2
Examen de rattrapage
Aucun document n'est autorisé Les solutions doivent être rédigées en C
Tout appareil électronique doit être éteint (téléphone, ordinateur, tablette,...)
1 Contenu d’un fichier 6 pts. U 15’
Montrer le contenu du fichier"resultat.txt"après l’exécution du programme suivant :
1 int main(){
2 FILE *f ; char s[10] = " 123456789 "; int i = 0, L;
3 f = fopen(" resultat . txt ", "w+");
4 L = strlen(s);
5 if (f != NULL){
6 while(i < L) {fputc(s[L-i-1] , f); i++; } 7 fseek(f, 0, SEEK_END); fputs(s, f);
8 }
Solution
2 Billets de train 14 pts. U 1h15
La société nationale du transport ferroviaire SNTF souhaite réaliser un programme permettant de gérer la réservation des billets de train.
Un billet de train est défini par un numéro, une date, une ville et une heure de départ ainsi qu’une ville et une heure d’arrivée, et enfin, un prix. Par exemple, le trainTlemcen-Orana le numéro1104, il part à09h55 de Tlemcen et arrive à12h22à Oran, son prix est de 455 DA.
1. Proposer une structure de données permettant de stocker un billet de train.
Solution
Bon Courage !
1 typedef struct Date Date ; 2 struct Date {
3 int jour;
4 int mois;
5 int annee; 6 };
7 typedef struct Heure Heure ; 8 struct Heure {
9 int heure; 10 int minute; 11 };
12 typedef struct Billet Billet ; 13 struct Billet {
14 int numero; 15 Date date; 16 char villeD[30];
17 Heure depart; 18 char villeA[30];
19 Heure arrivee; 20 double prix; 21 };
2. Écrire une fonctionestValidequi prend comme paramètre un billet de train et vérifie sa validité. Un billet de train est valide lorsque :
– la date de départ est ultérieur à la date courante (prenez ici la date de cet examen).
– et si c’est le même jour, alors l’heure de départ est également ultérieur à l’heure courante (prenez ici l’heure du début de cet examen).
Solution
1 int estAnterieur (Date d1, Date d2) 2 {
3 int b=0;
4 b= (d1.annee < d2.annee) || ((d1.annee == d2.annee) && (d1.mois
< d2.mois)) ||
5 (((d1.annee == d2.annee) && (d1.mois == d2.mois)) && d1.jour <d2 .jour);
6 return b;
7 }
8 int estEgale (Date d1, Date d2) 9 {
10 return (d1.annee == d2.annee) && (d1.mois == d2.mois) && (d1. jour == d2.jour);
11 }
12 int estValide (Billet b) 13 {
14 int nombreMinutesDepart = 0;
15 int valide=0 ;
16 Date d = {8, 6, 2015};
17 nombreMinutesDepart = b.depart.heure*60 + b.depart.minute; 18 valide = estAnterieur(d, b.date) || estEgale(b.date, d) &&
nombreMinutesDepart > 9*60 ; 19 return valide;
20 }
3. Écrire une fonctioncalculerDureequi prend en entrée un billet de train et qui renvoie sa durée sous le format- -h- -. Par exemple, la durée du trajet du train ci-dessus est 2h27.
Solution
Bon Courage !
1 Heure calculerDuree (Billet b) 2 {
3 Heure D; 4 int duree;
5 int nombreMinutesDepart = 0, nombreMinutesArrivee = 0 ; 6 nombreMinutesDepart = b.depart.heure *60 + b.depart.minute; 7 nombreMinutesArrivee = b.arrivee.heure *60+ b.arrivee.minute; 8 duree = nombreMinutesArrivee - nombreMinutesDepart ;
9 D.heure = duree/60 ; 10 D.minute = duree % 60 ; 11 return D;
12 }
4. Écrire une fonctionrechercherqui prend en entrée un numéro de billet et qui envoie le billet cor- respondant. Cette fonction effectue sa recherche dans un ensemble de billets de train passé lui aussi comme paramètre d’entrée.
Solution
1 Billet rechercher(Billet A[5] , int numero) 2 {
3 int i = 0;
4 while (A[i].numero != numero) i++;
5 return A[i];
6 }
5. La SNTF offre une réduction de 25% à ses clients âgés de moins de 25 ans et une autre de 30% pour ceux qui ont plus de 65 ans. Écrire un programme permettant de demander le numéro du billet d’un client ainsi que sa date de naissance puis recherche son billet à travers le numéro saisi, vérifie si son billet est valide ou non, puis affiche la durée de son trajet, et enfin, calculer le prix de son billet après remise.
Solution
1 void main() 2 {
3 int numero; 4 Billet b;
5 Billet Tab[100]; // Attention ce tableau doit etre rempli 6 Date DateN, DJ, DS;
7 Heure d;
8 puts(" Donnez le numero de votre billet :");
9 scanf("%d", &numero);
10 puts(" Donnez votre date de naissance :");
11 saisie_Date(&DateN);
12 b= rechercher(Tab, numero);
13 if (estValide(b)) puts(" Votre billet est valide ");
14 else puts(" Votre billet n'est pas valide ");
15 d = calculerDuree(b);
16 printf("la duree de votre trajet est de : %dh%d\n", d.heure, d.minute );
17 DJ = b.date;
18 DJ.annee = b.date.annee-25;
19 DS = b.date;
20 DS.annee = b.date.annee-65;
21 if (estAnterieur(DJ, DateN)) printf("Le prix de votre billet est : %f\n", b.prix
*0.75) ;
22 else if (estAnterieur(DateN, DS)) printf("Le prix de votre billet est : %f\n", b.
prix*0.6) ;
23 else printf("Le prix de votre billet est : %f\n", b.prix);
24 }
Bon Courage !