Vous êtes sur la page 1sur 2

Anne 2011-2012

Examen de Langage C
Vendredi 2 Dcembre 2011

Promotion Guichet
1i`ere anne
. Salvat

Modalits :
 Dure : 2 heures
 Seul document autoris : carte de rfrence du C, pas de machine calculer, ni de tlphone.
 Toute sortie est dnitive !
 Le barme est donn titre indicatif.

(Le sudoku - 5 points).


Dans cet exercice on se propose d'crire deux fonctions qui permettent de tester partiellement une grille
de sudoku. Une grille de sudoku sera reprsente par un tableau d'entiers de 9 par 9. Une case de la grille
contient un nombre compris entre 1 et 9 ou bien un 0 pour indiquer que la case est vide.
1. dnir la fonction VerifieValeurs qui prend en paramtre une grille de sudoku et qui renvoie 0
si toutes les cases ont des valeurs correctes ou bien 1 si une case contient une mauvaise valeur.
Il ne s'agit pas ici de savoir si la grille est bien remplie en respectant les rgles du sudoku, mais
simplement de vrier qu'il n'y a pas dans la grille de valeur suprieure 9 ou infrieure 0.
2. dnir la fonction ControleLigne qui prend en paramtre une grille de sudoku et un numro de
ligne et qui vrie que la ligne en question est correctement remplie : les chires entre 1 et 9
n'apparaissent au plus qu'une fois chacun sur la ligne.

Exercice 1

(Les accolades - 4 points).


Une des contrainte syntaxique d'un programme crit en langage C est de respecter les dlimiteurs de
blocs : chaque accolade ouvrante ({) doit correspondre une accolade fermante (}). On ne s'intressera
dans cet exercice qu'aux seules accolades.
1. Ecrire un programme en C qui prend en paramtre le nom d'un chier source et qui vrie que les
accolades sont correctement positionnes dans ce chier.
Pour ce faire vous devez lire le chier ligne par ligne, pour chaque ligne vous devrez parcourir la
ligne la recherche des accolades. Il sut de compter les accolades en incrmentant un compteur
chaque fois que l'on trouve une accolade ouvrante, et en dcrmentant ce mme compteur chaque
fois que l'on trouve une accolade fermante. Ainsi, on peut distinguer trois cas de gures :
 si le compteur passe en dessous de 0, on a un problme : il y a plus d'accolades fermantes que
d'accolades ouvrantes rencontres jusqu' prsent. On peut donc arrter l'analyse et renvoyer
une erreur.
 si la n du chier le compteur est strictement suprieur 0 : il y a aussi un problme, on a
ouvert plus d'accolades que ce que l'on en a ferm. Il faut alors renvoyer une erreur.
 Enn, la n du chier le compteur est 0 : les accolades sont correctement positionnes. La
fonction renvoie le code de succs.

Exercice 2

(Le compte en banque - 11 points).


Le programme informatique d'une banque, repose sur la structure suivante pour reprsenter les comptes
de ses clients.

Exercice 3

typedef struct cpte{


int num;
char nom[30];
char adresse[100];
float solde;
ope* operations;
} compte;

/*
/*
/*
/*
/*

numro du compte*/
nom du propritaire du compte */
adresse du propritaire */
le solde du compte au dbut du mois en cours*/
les oprations du mois en cours */

Le champ operations de la structure permet d'enregistrer les oprations en cours de mois an de calculer
le nouveau solde du compte lorsque l'on change de mois. L'ensemble des oprations sera reprsent par
une liste chane.
1

1. Donnez la structure du type ope qui permet d'enregistrer une opration et qui est donc un lment
de la liste chane. Chaque opration contiendra les champs suivants :
 libelle : une chane contenant le libell de l'opration
 date : la date de l'opration. On utilisera le type tDate que l'on suppose dnit ailleurs.
 type : un caractre, d si l'opration est un dbit, et c si il s'agit d'un crdit.
 montant : le montant de l'opration un nombre virgule positif qui sera ajouter au solde si
l'opration est un crdit et retrancher si il s'agit d'un dbit.
2. Donnez la dnition de la fonction NouveauSolde qui prend en paramtre un compte et qui renvoie
le nouveau solde du compte en fonction des oprations qu'il contient.
3. Dnir la fonction NouvelleOperation qui prend en paramtre toutes les informations d'une opration et renvoie un pointeur sur un nouveau ope dont les dirents champs ont t correctement
aects.
4. En utilisant la fonction prcdente crire la fonction AjouteOperation qui prend en paramtre un
pointeur sur un compte et toutes les informations d'une opration et qui ajoute l'opration dans
la liste des oprations du compte.
Les oprations doivent tre par ordre chronologique. L'ajout doit donc se faire au bon endroit.
Pour cela on supposera que l'on dispose de la fonction CompareDates(tDate d1, tDate d2) qui
compare deux dates, et renvoie 1 si d1 est antrieure d2, 0 si d1 et d2 sont les mme dates, et
1 si d1 est postrieure d2.