Vous êtes sur la page 1sur 9

Université IBN ZOHR Année Universitaire 2019-2020

Faculté des Sciences Filière SMI / Semestre 4


Département d'Informatique Programmation II

SERIE 2 - Solutions

Exercice 1 :
#include<stdio.h>
#include<conio.h>
#include<string.h>
#define NMAX 10

int dim_t()
{
int i;
do
{
printf(" Donner le nombre de pharmacies : ");
scanf("%d",&i);
}
while(i<=0||i>NMAX);
return i;
}

typedef struct
{
char pha[20],pat[10];
int dis;
} pharmacie;

/******* Lecture des informations du tableau *****/

void lireInfos(pharmacie *t_ph, int N)


{
int i;
for(i=0; i<N; i++)
{
printf("PHARMACIE %d \n",i+1);
printf("Nom : ");
scanf("%s", (t_ph+i)->pha);
printf("Patente : ");
scanf("%s",(t_ph+i)->pat);
printf("Distance au CHU ");
scanf("%d",&(t_ph+i)->dis);

1
}
}

void recherche(pharmacie *t_ph, int N)


{
int i;
pharmacie *k = t_ph;
for(i=1; i<N; i++)
if((t_ph+i)->dis < k->dis)
k = (t_ph+i);

printf("\n La pharmacie la plus proche est %s, sa distance au CHU = %d ",k->pha,k->dis);


}

void affichage(pharmacie liste[],int n)


{
int i;
printf("\n|Nom Pharmacie | Num Patente |Distance au CHU |\n");
printf("|---------------------------------------------|\n");
for( i=0; i<n; i++)
printf("|%12s |%11s |%14d |\n",liste[i].pha,liste[i].pat,liste[i].dis);
printf("|---------------------------------------------|\n");
}

/****************ROGRAMME PRINCIPAL***************/
int main()
{
pharmacie ph[NMAX];
int N;
N=dim_t();
lireInfos(ph,N);
affichage(ph,N);
recherche(ph,N);
getch();
}

2
Exercice 2 :
#include <stdio.h>
#include<stdlib.h>
#define MAX_P 30

typedef struct
{
char nom[20];
char prenom[30];
int dejeuner; //0=non, 1=oui
int diner; //0=non, 1=oui
int hotel; //1=pas d'hotel, 2=2etoiles, 3=3etoiles
int seul; //0=non, 1=oui
} participant;

typedef participant tabPart[MAX_P];

void Nb2Etoiles(tabPart tab, int n)


{
int i;
for (i=0; i<n; i++)
{
if(tab[i].hotel==2)
printf("nom: %s, prenom: %s \n", tab[i].nom, tab[i].prenom);
}
}

int nbDej(tabPart tab, int n)


{
int nb=0, i;
for(i=0; i<n; i++)
{
if (tab[i].dejeuner==1)
{
nb+=1;
if(tab[i].seul==0)
nb+=1;
}
}
return nb;
}

int montant(participant p)
{

3
int total=0;
if(p.dejeuner==1)
total +=50;
if(p.diner==1)
total +=80;
if(p.seul==0)
total*=2;
if(p.hotel==2)
total+=150;
if(p.hotel==3)
total+=200;
return total;
}
main()
{
int montTot=0, nP; //montant total
tabPart tabp;
printf("Donnez le nombre des participants \n");
scanf("%d", &nP);

for(int i=0; i<nP; i++)


{
printf("\n ----- Participant %d ----- \n",i+1);
printf("nom du participant : ");
scanf("%s", tabp[i].nom);
printf("prenom du participant : ");
scanf("%s", tabp[i].prenom);
printf("dejeuner du participant (1|0) : ");
scanf("%d", &tabp[i].dejeuner);
printf("diner du participant (1|0) : ");
scanf("%d", &tabp[i].diner);
printf("hotel du participant (1|2|3) : ");
scanf("%d", &tabp[i].hotel);
printf("seul participant (1|0) : ");
scanf("%d", &tabp[i].seul);
printf("\n=> Le montant total que ce participant doit payer est %d \n", montant(tabp[i]));
montTot += montant(tabp[i]);
}
printf("\n- Le nombre total de dejeuner est : %d\n", nbDej(tabp,nP));
printf("- Le montant total a payer par tous les participants est : %d Dh\n",montTot);
printf("- Les personnes qui ont reserve un hotel 2 etoiles sont : \n");
Nb2Etoiles(tabp,nP);

system("pause");
}

4
Exercice 3 :
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct {
int code;
char nom[20];
float prix;
} Article;

void lireArticle(Article articles [], int n) {


int i;
for(i=0; i<n; i++){

printf("Article %d : \n", i+1);


printf("Entrer le code : ");
scanf("%d", &articles[i].code);
printf("Entrer le nom : ");
scanf("%s", articles[i].nom);
printf("Entrer le prix : ");
scanf("%f", &articles[i].prix);
}
}

void afficherArticle(Article articles [], int n) {


int i;
for(i=0; i<n; i++){
printf("Article %d : \n", i+1);
printf("Code : %d | ", articles[i].code);
printf("Nom : %s | ", articles[i].nom);
printf("Prix : %.2f\n\n", articles[i].prix);
}
}

void supprimerArticle (Article articles [], int * n, int code) {


int i, j;
//On suppose que le code est unique
for(i=0; i<*n; i++){
if(articles[i].code == code){
for(j=i; j<(*n)-1; j++){
articles[j] = articles[j+1];
}

5
(*n)--;
//i--; si le code n'est pas unique
}
}
}

void triByPrix (Article articles [], int n){


int i, j;
Article a;
for(i=0; i<n; i++){
for(j=i;j<n;j++){
if(articles[i].prix < articles[j].prix)
{
a = articles[i];
articles[i] = articles[j];
articles[j] = a;
}
}
}
puts("Liste des articles tries par prix :");
afficherArticle(articles, n);
}

main(){

Article t[30], * a;
int n, choix, code;
do{
//Menu
puts("-------------Menu-------------");
puts("1: Lire les articles");
puts("2: Afficher les articles ");
puts("3: Trier les articles du plus cher au moins cher");
puts("4: Supprimer un article");
puts("5: Quitter le programme");
puts("Tapez votre choix :");
scanf("%d", &choix);

switch(choix){
case 1:
printf("Donner le nombre d'articles: ");
scanf("%d", &n);
lireArticle(t, n);
break;

6
case 2:
afficherArticle(t,n);
break;
case 3:
triByPrix(t,n);
break;

case 4:
printf("Entrer le code de l'article a supprime: ");
scanf("%d", &code);
supprimerArticle(t, &n, code);
printf("Liste des articles apres suppression de l'article %d :
\n", code);
afficherArticle(t, n);
break;
case 5:
printf("Fin du programme\n");
break;
default:
printf("Choix invalid!\n");

}
}while(choix != 5);
}

Exercice 4 :
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAXNOTES 10

typedef struct
{
int jour;
char mois[10];
int annee;
} DATE;

typedef struct
{
char nom[10];
char prenom[10];
DATE date_naissance;
char formation[3];

7
float notes[MAXNOTES];
int nbnotes;
} FICHE;

void RemplirFiche(FICHE *fiche);


void AfficherFiche(FICHE *fiche);
void AjouterNote(FICHE *fiche, int n);
float moyenne(FICHE *fiche);

int main(void)
{
int nbNotes;
FICHE *etd_fiche;
etd_fiche = (FICHE *) malloc(sizeof(FICHE));
RemplirFiche(etd_fiche);
printf("Quel est le nombre de notes que vous souhaitez ajouter : ");
scanf("%d",&nbNotes);
AjouterNote(etd_fiche, nbNotes);
AfficherFiche(etd_fiche);
printf("\n La moyenne est : %f",moyenne(etd_fiche));
return 0;
}

void RemplirFiche (FICHE *fiche)


{
printf("Le nom de l'etudiant : ");
scanf("%s", fiche->nom);
printf("Son prenom ? ");
scanf("%s", fiche->prenom);
printf("Sa formation ? ");
scanf("%s", fiche->formation);
printf("Sa date de Naissance: (dd mm yyyy) ? ");
scanf("%d %s %d", &fiche->date_naissance.jour, fiche->date_naissance.mois, &fiche-
>date_naissance.annee);
fiche->nbnotes=0;

void AjouterNote(FICHE *fiche, int n)


{
int i;
if (fiche->nbnotes < MAXNOTES)
{
for (i=0; i<n; i++)
{

8
printf("Entrez la note %d : ",i);
scanf("%f", &fiche->notes[i]);
fiche->nbnotes++;
}

}
else
printf("\n <---- Impossible d'ajouter une note ---->\n");

void AfficherFiche(FICHE *fiche)


{
int i;
printf("L'etudiant %s %s : \n", fiche->nom, fiche->prenom);
printf("\tSa date de Naissance est le %d %s %d\n", fiche->date_naissance.jour, fiche-
>date_naissance.mois, fiche->date_naissance.annee);
printf("\tSa formation : %s\n", fiche->formation);
printf("\nSes notes : \n");
printf("\t Notes\n");
printf("\t---------\n");
for (i=0; i<fiche->nbnotes; i++)
printf("\t %f\n", fiche->notes[i]);
}

float moyenne(FICHE *fiche)


{
int i; float som=0;
for (i=0;i<fiche->nbnotes;i++)
{
som += fiche->notes[i];
}

return som/fiche->nbnotes;
}

Vous aimerez peut-être aussi