pdf - e-book - archive - github.com

2.2  Traitements conditionnels

2.2.1  Prise en main

Exercice 1 Majorité

Saisir l’âge de l’utilisateur et lui dire s’il est majeur.

Exercice 2 Valeur Absolue

Saisir une valeur, afficher sa valeur absolue.

Exercice 3 Admissions

Saisir une note, afficher "ajourné" si la note est inférieure à 8, "rattrapage" entre 8 et 10, "admis" dessus de 10.

Exercice 4 Assurances

Une compagnie d’assurance effectue des remboursements sur lesquels est ponctionnée une franchise correspondant à 10 % du montant à rembourser. Cependant, cette franchise ne doit pas excéder 4000 euros. Demander à l’utilisateur de saisir le montant des dommages, afficher ensuite le montant qui sera remboursé ainsi que la franchise.

Exercice 5 Valeurs distinctes parmi 2

Afficher sur deux valeurs saisies le nombre de valeurs disctinctes.

Exercice 6 Plus petite valeur parmi 3

Afficher sur trois valeurs saisies la plus petite.

Exercice 7 Recherche de doublons

Ecrire un algorithme qui demande à l’utilisateur de saisir trois valeurs et qui lui dit s’il s’y trouve un doublon.

Exercice 8 Valeurs distinctes parmi 3

Afficher sur trois valeurs saisies le nombre de valeurs disctinctes.

Exercice 9 ax + b = 0

Saisir les coefficients a et b et afficher la solution de l’équation ax + b = 0.

Exercice 10 ax2 + bx + c = 0

Saisir les coefficients a, b et c, afficher la solution de l’équation ax2 + bx + c = 0.

2.2.2  Switch

Dans le problème suivant, vous serez confronté au problème dit de saisie bufferisée (ce néologisme est très vilain). Explication : lorsque vous saisissez des valeurs au clavier, elles sont placées dans le tampon de saisie (buffer). Une fois que vous avez saisi <entrée>, (le caractère '$\setminus$n'), les données sont lues directement dans le buffer par scanf. Mais cette fonction ne lira que le caractère qui a été saisi, et le '$\setminus$n' qui a validé la saisie restera dans le buffer jusqu’à la prochaine saisie d’un caractère. L’instruction getchar(); lit un octet dans le buffer. Donc, à chaque fois que vous avez placé un '$\setminus$n' dans le buffer, pensez à le vider avec un getchar();.

Exercice 11 Calculatrice

Ecrire un programme demandant à l’utilisateur de saisir

Puis affichez le résultat de l’opération a op b.

2.2.3  L’échiquier

On indice les cases d’un échiquer avec deux indices i et j variant tous deux de 1 à 8. La case (i, j) est sur la ligne i et la colonne j. Par convention, la case (1, 1) est noire.

Exercice 12 Couleurs

Ecrire un programme demandant à l’utilisateur de saisir les deux coordonnées i et j d’une case, et lui disant s’il s’agit d’une case blanche ou noire.

Exercice 13 Cavaliers

Ecrire un programme demandant à l’utilisateur de saisir les coordonnées (i, j) d’une première case et les coordonnées (i, j) d’une deuxième case. Dites-lui ensuite s’il est possible de déplacer un cavalier de (i, j) à (i, j).

Exercice 14 Autres pièces

Même exercice avec la tour, le fou, la dame et le roi. Utilisez un switch et présentez le programme de la sorte :

Quelle piece souhaitez-vous deplacer ?
0 = Cavalier
1 = Tour
2 = Fou
3 = Dame
4 = Roi
3
Saisissez les coordonnees de la case de depart :
A = 2
A = 1
Saisissez les coordonnees de la case d'arrivee :
A = 6
A = 5
Le mouvement (2, 1) -> (6, 5) est valide.

2.2.4  Heures et dates

Exercice 15 Opérations sur les heures

Ecrire un programme qui demande à l’utilisateur de saisir une heure de début (heures + minutes) et une heure de fin (heures + minutes aussi). Ce programme doit ensuite calculer en heures + minutes le temps écoulé entre l’heure de début et l’heure de fin. Si l’utilisateur saisit 10h30 et 12h15, le programme doit lui afficher que le temps écoulé entre l’heure de début et celle de fin est 1h45. On suppose que les deux heures se trouvent dans la même journée, si celle de début se trouve après celle de fin, un message d’erreur doit s’afficher. Lors la saisie des heures, séparez les heures des minutes en demandant à l’utilisateur de saisir :

Exercice 16 Le jour d’après

Ecrire un programme permettant de saisir une date (jour, mois, année), et affichant la date du lendemain. Saisissez les trois données séparément (comme dans l’exercice précédent). Prenez garde aux nombre de jours que comporte chaque mois, et au fait que le mois de février comporte 29 jours les années bissextiles. Allez sur http://fr.wikipedia.org/wiki/Ann\%C3\%A9e_bissextile pour connaître les règles exactes, je vous avais dit que les années étaient bissextiles si et seulement si elles étaient divisible par 4, après vérification, j’ai constaté que c’était légèrement plus complexe. Je vous laisse vous documenter et retranscrire ces règles de la façon la plus simple possible.

2.2.5  Intervalles et rectangles

Exercice 17 Intervalles bien formés

Demandez à l’utilisateur de saisir les deux bornes a et b d’un intervalle [a, b]. Contrôler les valeurs saisies.

Exercice 18 Appartenance

Demandez-lui ensuite de saisir une valeur x, dites-lui si x ∈ [a, b]

Exercice 19 Intersections

Demandez-lui ensuite de saisir les bornes d’un autre intervalle [a, b]. Contrôlez la saisie. Dites-lui ensuite si

Exercice 20 Rectangles

Nous représenterons un rectangle R aux cotés parallèles aux axes des abscisses et ordonnées à l’aide des coordonnées de deux points diamétralement opposés, le point en haut à gauche, de coordonnées (xHautGauche, yHautGauche), et le point en bas à droite, de coordonnées (xBasDroite, yBasDroite). Demander à l’utilisateur de saisir ces 4 valeurs, contrôlez la saisie.

Exercice 21 Appartenance

Demandez à l’utilisateur de saisir les 2 coordonnées d’un point (x, y) et dites à l’utilisateur si ce point se trouve dans le rectangle R.

Exercice 22 Intersection

Demandez à l’utilisateur de saisir les 4 valeurs

(xHautGaucheyHautGauchexBasDroiteyBasDroite)

permettant de spécifier un deuxième rectangle R. Précisez ensuite si

2.2.6  Préprocesseur

Exercice 23 L’échiquer

Même exercice mais en utilisant le plus possible les spécifications suivantes :

#include<stdio.h>
#include<stdlib.h>

/*-----------------------------------------------*/

#define CAVALIER 0
#define TOUR 1
#define FOU 2
#define DAME 3
#define ROI 4

/*-----------------------------------------------*/

#define MAIN int main() \
  {

/*-----------------------------------------------*/

#define FINMAIN return 0;\
  }
/*-----------------------------------------------*/

#define SI if(

/*-----------------------------------------------*/

#define ALORS ){

/*-----------------------------------------------*/

#define SINON } else {

/*-----------------------------------------------*/

#define FINSI }

/*-----------------------------------------------*/

#define SUIVANT(var) switch(var) {

/*-----------------------------------------------*/

#define FINSUIVANT(def) default: def }

/*-----------------------------------------------*/

#define CAS(valeur, instructions) case valeur : instructions \
    break;

/*-----------------------------------------------*/

#define PIECES_LIST   \
printf("%hu = Cavalier\n", CAVALIER); \
printf("%hu = Tour\n", TOUR); \
printf("%hu = Fou\n", FOU); \
printf("%hu = Dame\n", DAME); \
printf("%hu = Roi\n", ROI)

/*-----------------------------------------------*/

#define CHECK_COORD(i) \
SI i<1 || i>8 ALORS \
 printf("coordonnee invalide\n"); \
 return 1; \
FINSI

/*-----------------------------------------------*/

#define GET_VAR(A, B) \
  printf("A = "); \
  scanf("%hu", &B); \
  CHECK_COORD(B);

/*-----------------------------------------------*/

#define PRINT_VALID printf("valide")

/*-----------------------------------------------*/

#define PRINT_INVALID printf("invalide")

/*-----------------------------------------------*/

#define FATAL_ERROR printf("System Error. It is recommended that " \
  "you format your hard disk."); \
  return 1;

/*-----------------------------------------------*/

#define CONDITIONAL_PRINT(cond) \
SI cond ALORS \
  PRINT_VALID; \
SINON \
  PRINT_INVALID; \
FINSI

Télécharger le fichier

2.2.7  Nombres et lettres

Exercice 24 Conversion numérique → français (très difficile)

Ecrire un programme saisissant un unsigned long et affichant sa valeur en toutes lettres. Rappelons que 20 et 100 s’accordent en nombre s’ils ne sont pas suivis d’un autre mot (ex. : quatre-vingts, quatre-vingt-un). Mille est invariable (ex. : dix mille) mais pas million (ex. : deux millions) et milliard (ex. : deux milliards). Depuis 1990, tous les mots sont séparés de traits d’union (ex. : quatre-vingt-quatre), sauf autour des mots mille, millions et milliard (ex. : deux mille deux-cent-quarante-quatre, deux millions quatre-cent mille deux-cents). (source : http://www.leconjugueur.com/frlesnombres.php). Par exemple,

Saisissez un nombre = 1034002054
1034002054 : un milliard trente-quatre millions deux mille cinquante-quatre

Vous prendrez soin de respecter les espacements, les tirets, et de ne pas faire de fautes d’orthographe. Vous userez et abuserez de macros-instructions pour simplifier le plus possible votre code.