Académique Documents
Professionnel Documents
Culture Documents
php
http://www.ltam.lu/cours-c//prg-c_c.htm
http://lecompagnon.info/access/formulaires.htm
http://examencorrige.net23.net/search.php?search=td+corrige+algorithme&button=Rechercher
852654
http://files.xoom.it/
exercice : permuter circulairement les valeurs de trois variables vers la gauche (solution)
Ecrire un algorithme qui effectue une permutation circulaire des valeurs de trois variables x, y et z.
Par exemple, si x contient la valeur 3, y contient la valeur 2 et z la valeur 1, alors on souhaite obtenir
2 dans x, 1 dans y et 3 dans z.
x y z
3 2 1
2 1 3
exercice : Ecrire l'algorithme de permutation circulaire qui demande la valeur des 3 variables
à permuter et affiche le contenu des variables à chaque étape (solution)
exercice : Ecrire un algorithme qui lit deux nombres au clavier et qui effectue la division du
premier nombre par le second si celui-ci est non nul. Cet algorithme affichera soit le résultat
de la division, soit un message pour prévenir que la division par zéro est interdite (solution).
exercice : Ecrire un algorithme qui lit deux nombres au clavier et qui affiche le plus grand
nombre lu (solution).
exercice : sachant qu'un étudiant est admis lorsqu'il a 10 de moyenne, qu'il a la mention passable si
sa note est inférieure à 12, la mention assez bien si sa note est inférieure à 14, la mention bien si sa
note est inférieure à 16, la mention très bien si sa note est inférieure à 18 et les félicitations du jury à
partir de 18, écrivez l'algorithme qui affiche si l'étudiant est admis, ainsi que sa mention éventuelle.
(solution)
exercice : écrivez l'algorithme qui donne la mention d'un étudiant admis en utilisant uniquement des
et. (solution)
exercice : écrire l'algorithme qui décide du comportement d'un automobiliste à l'approche d'un feu
(rouge, orange, vert). (solution)
Négation dans le si
si non (x >= 0 et x <= 100) alors {
Ecrire ("la valeur n'est pas comprise entre 0 et 100");
}
sinon {
Ecrire ("la valeur est comprise entre 0 et 100");
exercice : écrivez un algorithme qui donne le plus grand de trois nombres lus au clavier
(solution)
exercice : écrivez un algorithme qui classe par ordre croissant trois nombres lus au clavier. A
la fin de l'algorithme c'est l'instruction :
Ecrire (nombre_1, " ", nombre_2, " ", nombre_3);
qui affichera les 3 nombres classés.
exercice : écrire un algorithme qui permet au robot de se rendre au troisième étage, sachant
qu'un étage comporte toujours 20 marches.
(solution)
exercice : modifiez l'algorithme qui permet au robot de se rendre à un étage afin que le
nombre de marches d'un étage soit entré au clavier et que l'étage à atteindre soit lui aussi entré
au clavier. (solution)
exercice : écrivez l'algorithme du robot qui monte à un étage quelconque avec deux structures
répétitives. (solution)
nombre_etages_montes <- 0;
tant que nombre_etages_montes < etage répéter {
nombre_marches_montees <- 0;
tant que nombre_marches_montees < nombre_marches_etage répéter {
monter_une_marche();
nombre_marches_montees <- nombre_marches_montees + 1;
}
nombre_etages_montes <- nombre_etages_montes + 1;
}
exercice : écrivez un algorithme qui calcule la moyenne d'un nombre quelconque de notes.
L'utilisateur peut en entrer autant qu'il le souhaite et indique qu'il ne veut plus entrer de notes
en tapant au clavier -1.
(solution)
Add_2_notes(note_1, note_2)
{
somme_note <- note_1 + note_2;
retourner somme_note;
}
// initialisation
somme_des_notes <- 0;
note_lue <- 0;
nb_etudiants <- 0;
// boucle
tant que note_lue != -1 répéter {
Ecrire("Entrez une note (-1 pour obtenir la moyenne)");
Lire(note_lue);
si note_lue != -1 alors {
somme_des_notes <- Add_2_notes (note_lue, somme_des_notes);
nb_etudiants <- nb_etudiants + 1;
}
}
initialisation 0 0 0 0
itération 1 : 0 != -1 ? oui 0 10 0 0
10 10 0
10 10 1
itération 2 : 10 != -1 ? oui 10 12 1 0
22 12 1
22 12 2
itération 3 : 12 != -1 ? oui 22 16 2 0
38 16 2
38 16 3
itération 4 : 16 != -1 ? oui 38 14 3 0
52 14 3
52 14 4
itération 5 : 14 != -1 ? oui 52 -1 4 0
note_lue != -1 ? non
calcul de la moyenne 52 -1 4 13
exercice : écrivez une fonction fact(nombre) qui calcule la factorielle d'un nombre (utilisez
une boucle).
Rappel n ! = n * (n-1) * (n-2) * (n-3) * ... * 1
exemples :
5 ! = 5 * 4 * 3 * 2 * 1 = 120
4 ! = 4 * 3 * 2 * 1 = 24
3!=3*2*1=6
2!=2*1=2
1!=1
0 ! = 1 (cas particulier à ne pas oublier)
fact (nombre) {
Tests
fact(5)
nombre factorielle indice
factorielle <- 1 5 1
5 = 0 ? non 5 1
itération 1
5 > 0 ? oui
factorielle <- factorielle * indice 5 5 5
indice <- indice - 1 5 5 4
itération 2
4 > 0 ? oui
factorielle <- factorielle * indice 5 20 4
indice <- indice - 1 5 20 3
itération 3
3 > 0 ? oui
factorielle <- factorielle * indice 5 60 3
indice <- indice - 1 5 60 2
itération 4
2 > 0 ? oui
factorielle <- factorielle * indice 5 120 2
indice <- indice - 1 5 120 1
itération 5
1 > 0 ? oui
factorielle <- factorielle * indice 5 120 1
indice <- indice - 1 5 120 0
itération 6 5 120 0
0 > 0 ? non
retourne 120
fact(1)
nombre factorielle indice
factorielle <- 1 1 1
1 = 0 ? non 1 1
itération 1
1 > 0 ? oui
factorielle <- factorielle * indice 1 1 1
indice <- indice - 1 1 1 0
itération 2 1 1 0
0 > 0 ? non
retourne 1
fact(0)
nombre factorielle indice
factorielle <- 1 0 1
0 = 0 ? oui 0 1
retourne 1
num_colonne ->
012 3 4 5 67
num_ligne
0 1
1 11
2 121
3 133 1
4 146 4 1
5 1 5 10 10 5 1
6 1 6 15 20 15 6 1
7 1 7 21 35 35 21 7 1
Chaque case du triangle est obtenue en appliquant une formule simple qui utilise la factorielle :
La formule ci-dessus donne le chiffre à afficher pour une ligne et une colonne donnée, par exemple
pour la ligne 5, colonne 2, on obtient 10, pour la ligne 6, colonne 3 on obtient 20.
Donnez un algorithme qui utilise deux boucles imbriquées pour afficher tout le triangle lorsqu'il y a 8
lignes (de 0 à 7) (solution)
Triangle de Pascal
l <- 0;
tant que l <= 7 répéter { // pour chaque ligne
c <- 0;
tant que c <= l répéter { // pour chaque colonne de la ligne
nombre_a_afficher <- fact(l) / (fact(c) * fact(l - c)) ;
Ecrire(nombre_a_afficher," ");
c <- c + 1;
}
Ecrire("\n"); // saut de ligne
l <- l + 1;
}
exercice : écrivez un algorithme qui affiche cette pyramide en utilisant des boucles. Chaque
ligne comporte 19 caractères (espaces ou x), les lignes sont numérotées de 0 à 9.
xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxx
xxxxxxxxx
xxxxxxx
xxxxx
xxx
x
indications :
la ligne 0 comporte 0 espace puis 19 x puis 0 espace,
la ligne 1 comporte 1 espace puis 17 x puis 1 espace,
la ligne 2 comporte 2 espaces puis 15 x puis 2 espaces
...
la ligne 9 comporte 9 espaces puis 1 x puis 9 espaces
(solution)
Pyramide inversée
la ligne 0 comporte 0 espace puis 19 x puis 0 espace,
la ligne 1 comporte 1 espace puis 17 x puis 1 espace,
la ligne 2 comporte 2 espaces puis 15 x puis 2 espaces
...
la ligne 9 comporte 9 espaces puis 1 x puis 9 espaces
Nous traiterons l'affichage des espaces à droite (même si ce n'est pas nécessaire puisque l'espace
n'est pas visible à l'écran).
nb_l <- 0;
exercice : écrivez un algorithme qui affiche cette pyramide en utilisant des boucles.
x
xxx
xxxxx
xxxxxxx
xxxxxxxxx
xxxxxxxxxxx
xxxxxxxxxxxxx
xxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
(solution)
Pyramide
Nous traiterons l'affichage des espaces à droite (même si ce n'est pas nécessaire puisque l'espace
n'est pas visible à l'écran).
nb_l <- 0;
exercice : écrivez un algorithme qui calcule le modulo (le reste de la division entière) des 10
premiers nombres entiers, en fonction du modulo lu au clavier. On dispose d'un opérateur
mod qui produit le reste de la division entière.
exemple :
Entrez le modulo : 4
0 modulo 4 = 0
1 modulo 4 = 1
2 modulo 4 = 2
3 modulo 4 = 3
4 modulo 4 = 0
5 modulo 4 = 1
6 modulo 4 = 2
7 modulo 4 = 3
8 modulo 4 = 0
9 modulo 4 = 1
10 modulo 4 = 2
(solution)
indice <- 0;
exercice : écrivez un algorithme qui affiche cette pyramide de nombres en utilisant des
boucles (utilisez l'exercice qui affiche la pyramide de x et le modulo).
1
232
34543
4567654
567898765
67890109876
7890123210987
890123454321098
90123456765432109
0123456789876543210
TP 1
1. Écrivez un programme qui permute les valeurs de deux variables lues au clavier
2. Écrivez un programme qui effectue une permutation circulaire vers la droite de 4 variables
lues au clavier
3. Écrivez un programme qui donne le maximum de 3 nombres lus au clavier et effectuez des
tests pour :
258
420
8 -6 1
4. Écrivez un programme qui calcule la moyenne de 4 nombres lus au clavier et donne le
minimum
5. Écrivez un programme qui calcule le prix TTC d'un prix HT entré au clavier
6. Écrivez un programme qui calcule le pourcentage d'un nombre, ce nombre ainsi que le
pourcentage sont entrés au clavier
7. Écrivez un programme qui fournit une valeur en francs à partir d'un prix entré en euros
8. Écrivez un programme qui donne une température en degrés celsius à partir d'une
température Fahrenheit (C = (5/9) * (F - 32))
9. Écrivez un programme qui donne la mention d'un étudiant en fonction de sa note entrée au
clavier
TP 2
1. Écrivez le programme qui affiche chaque numéro de marche montée par un robot qui se
rend au 3ème étage, sachant qu'un étage comporte 20 marches
2. Écrivez un programme qui calcule la moyenne des notes entrées itérativement au clavier et
qui affiche la moyenne quand l'utilisateur entre -1
3. Écrivez un programme qui calcule la factorielle d'un nombre entré au clavier
4. Modifiez ce programme pour qu'il demande le nombre dont on souhaite calculer la
factorielle jusqu'à ce que l'utilisateur entre -1
5. Donnez le programme qui affiche le nombre de marches et le numéro de l'étage montés,
sachant que le nombre de marches par étage et le nombre d'étages à monter sont entrés au
clavier. Utilisez deux boucles while.
Qu'est-ce qui sera affiché sur la console si on entre au clavier 2 pour l'étage et 0 pour le
nombre de marches par étage ?
Qu'est-ce qui sera affiché sur la console si on entre au clavier 0 pour l'étage et 0 pour le
nombre de marches par étage ?
6. Écrivez un programme qui affiche un rectangle du nombre de lignes par le nombre de
colonnes donné par l'utilisateur.
ex :
7. > entrez la largeur et la hauteur : 4 6
8. +--+
9. | |
10. | |
11. | |
12. | |
13. +--+
>
TP 3
1 2 3
A . . .
B . . .
C . . .
joueur 1 : A 2
1 2 3
A . x .
B . . .
C . . .
joueur 2 : A 1
1 2 3
A * x .
B . . .
C . . .
joueur 1 : B 2
1 2 3
A * x .
B . x .
C . . .
joueur 2 : C 2
1 2 3
A * x .
B . x .
C . * .
joueur 1 : B 1
1 2 3
A * x .
B x x .
C . * .
joueur 2 : B 3
1 2 3
A * x .
B x x *
C . * .
joueur 1 : A 3
1 2 3
A * x x
B x x *
C . * .
joueur 2 : C 3
1 2 3
A * x x
B x x *
C . * *
joueur 1 : C 1
1 2 3
A * x x
B x x *
C x * *
Le joueur 1 a gagné
TP 4
TP 5
1. Modifiez le programme qui affiche un rectangle en fonction d'une largeur et une longueur
donnée afin qu'il affiche des rectangles pour le fichier de test suivant :
2. 5 8
3. 8 5
4. 0 3
5. 1 3
6. 2 3
7. 3 3
8. 4 0
9. 15 1
10. 1 9
1 1
11. Écrivez un programme qui prend en entrée le nom du fichier contenant l'annuaire, ainsi que
le nom, prénom, numéro de téléphone et l'e-mail d'une personne et qui génère un autre
fichier annuaire en classant alphabétiquement la personne. NB : on suppose que les entrées
de l'annuaire sont classées alphabétiquement.
> more annuaire.txt
Alessandra Denis 04 91 11 36 13 alessand@club-internet.fr
Contensin Magali 04 91 11 36 13 contensin@cmi.univ-mrs.fr
Ifrah Sandrine 04 91 11 35 21 ifrah@cmi.univ-mrs.fr
> ./ajouter annuaire.txt Dupont Georges 04 91 22 43 44
dupont@bidule.fr
> more annuaire2.txt
Alessandra Denis 04 91 11 36 13 alessand@club-internet.fr
Contensin Magali 04 91 11 36 13 contensin@cmi.univ-mrs.fr
Dupont Georges 04 91 22 43 44 dupont@bidule.fr
Ifrah Sandrine 04 91 11 35 21 ifrah@cmi.univ-mrs.fr
>
12. Modifiez le programme qui affiche toutes les lignes de l'annuaire afin qu'il affiche le numéro
de téléphone du nom d'une personne passé sur la ligne de commande. Si ce nom n'existe pas
dans l'annuaire, il affichera un message d'erreur.
13. Écrivez un programme qui classe les entrées d'un annuaire alphabétiquement (par rapport
uniquement au nom) et stocke l'annuaire trié dans un fichier annuaire_trie.txt
TP 6 : le black jack
But du jeu
Vous allez écrire un programme qui permet à un joueur de faire une partie de Black Jack.
L'objectif principal de ce jeu de cartes est d'avoir une main qui vaut plus que celle de la
banque, sans toutefois dépasser la valeur 21.
Lorsque le jeu commence, l'ordinateur distribue deux cartes au joueur ainsi qu'à lui-même.
Une des deux cartes de l'ordinateur est visible pour le joueur. Le joueur peut demander une
nouvelle carte ou s'abstenir. Au coup suivant, l'ordinateur peut lui-même décider de prendre
une nouvelle carte ou de s'abstenir.
Le jeu cesse lorsque le joueur ou l'ordinateur ont dépassé 21, ou s'ils ont atteint 21 ou encore
s'ils ont passé tous les deux leur tour.
Les cartes marquées de 2 à 10 gardent leur valeur, les figures (reines, rois, et valets) valent 10
points, l'as vaut 11 points ou 1 point. L'as prend la valeur 1 lorsque le score est supérieur à 21
et qu'il avait la valeur 11. ex : 3 de coeur + As de pique + 10 de carreau = 3 + 11 + 10 = 24
lorsque l'as vaut 11 et prend en fait la valeur 14 puisqu'on a dépassé 21 avec la valeur 11.
short cartes[52];
short nb_as_joueur;
short nb_as_banque;
cartes est un tableau qui représente les 52 cartes du jeu, si la carte n'a pas encore été tirée la
valeur dans la case correspondante est 0, si elle a été tirée par le joueur, la valeur est 2, et la
valeur est 1 lorsque c'est la banque et que la carte est visible, 3 si c'est la carte cachée de la
banque. Nous avons donc les constantes suivantes :
#define LIBRE 0
#define BANQUE 1
#define JOUEUR 2
#define BANQUE_CACHEE 3
Pour s'y retrouver dans le tableau contenant toutes les cartes on définit des constantes qui
donnent le début et la fin de chaque couleur. Les cartes sont classées dans l'ordre as, 2, 3,
4, ..., 10, valet, dame, roi pour chaque couleur, et les couleurs sont dans l'ordre coeur, carreau,
pique, trèfle
#define DEB_COEURS 0
#define FIN_COEURS 12
#define DEB_CARREAUX 13
#define FIN_CARREAUX 25
#define DEB_PIQUES 26
#define FIN_PIQUES 38
#define DEB_TREFLES 39
#define FIN_TREFLES 51
Fonctions
écrivez la fonction short tirer_carte(short joueur) qui tire aléatoirement une carte
entre 0 et 51 (52 cartes dans le jeu) et associe le joueur passé en paramètre (banque, banque
cachee ou joueur) à cette carte dans le tableau cartes.
écrivez la fonction void afficher_carte(short num) qui affiche la carte num (donne la
valeur et la couleur). Cette fonction affichera par exemple : 3 de coeur lorsqu'elle recevra le
numero 2.
La fonction principale
Lorsque le jeu commence, 2 cartes sont attribuées à la banque, la première étant cachée, et 2 cartes
sont attribuées au joueur. Le joueur peut, une fois les cartes distribuées, soit demander une carte,
soit décider de s'arrêter (par ex. si son score est 20, il s'arrêtera). L'ordinateur qui représente la
banque, peut lui aussi demander une carte ( une fois que le joueur a fait son choix) ou s'arrêter. La
banque demandera une carte si son score est inférieur à 17. Si le joueur a décidé ne plus demander
de carte et que la banque a un score supérieur au joueur, la banque décidera de s'arrêter. La partie
se poursuit jusqu'à ce qu'un des joueurs réalise un black jack (21), ou dépasse 21, ou que les deux
joueurs aient décidé de s'arrêter.
1. commencez par distribuer 2 cartes à la banque, et au joueur, affichez les mains et le score.
2. Puis écrivez la partie qui dit si quelqu'un a gagné et qui affiche la main de la banque avec la
carte cachée.
3. Lorsque ces deux étapes fonctionnent écrivez une boucle qui tire une carte une fois pour le
joueur, une fois pour la banque et s'arrête lorsqu'il y a un black jack ou que le score est
dépassé.
4. Ajoutez des instructions pour demander au joueur s'il souhaite tirer une carte ou arrêter,
l'ordinateur continue à jouer jusqu'à ce qu'il dépasse le score
5. Ajoutez les instructions pour que l'ordinateur décide s'il tire une carte ou s'il s'arrête.
Exercice1 :
Ecrire une application qui permet d’afficher les tringles d’étoiles suivantes : exemple (n=4)
* ******* * ****
*** ***** ** ***
***** *** *** **
******* * **** *
Exercice2 :
Soit deux suites récurrentes U et V :
V0=0 Vn+1= SQRT ((1+Vn)/2)
U0=2 Un+1=Un/ (Vn+1)
Ecrire un programme qui affiche les n termes de Un avec n>=15
Exercice3 :
Ecrire une analyse, un algorithme qui permet de calculer un terme d’indice n
De la suite ROBINSON Définie par :
Ui=a alors Ui+1= apparition de chaque chiffre dans apparaît dans Ui
Exemple
Si U0=1 alors
U1 = 11 ‘’1 Se répète 1 fois dans U0’’
U2=21 ‘’1 Se répète 2 fois dans U1’’
U3=1211 ’2 Se répète 1 fois et 1 se répète 1 fois dans U2’’
U4=3112 etc-----------------------------------------
U5=132112 ---------------------------------------------
Exercice4 :
Ecrire un programme pascal qui permettant de calculer la somme suivante :
i=n
∑ (-1)i x2i / 2i!
i=1
Exercice5 :
Ecrire une analyse, un algorithme qui permet de saisir un entier N>0 remplir une matrice M par des
entiers calculer la somme des éléments paires de M.
Exercice6 :
On se propose de remplir une matrice M sous la forme d’une pyramide d’entier de la manière
suivante
Exemple : n=5
1
232
34543
4567654
567898765
1-Réaliser un algorithme qui permet d'introduire le nom est le prénom d'un étudiant par
clavier puis de le sortir sur écran
2- Réaliser un algorithme qui permet de chercher le nom est le compte bancaire d'un client
puis de l'imprimé
3- Réaliser un algorithme qui permet d'introduire le nom est le groupe d'un étudiant depuis le
clavier puis de les imprimés
4- Réaliser un algorithme qui permet de saisir le code du client est la raison sociale puis les
écrire sur le disque est les imprimés
5- Réaliser un algorithme qui permet d'introduire la CIN par clavier puis de ramener le nom
du disque puis les affiché sue écran est de les imprimé
6- Réaliser un algorithme qui permet d'introduire le code de l'étudiant de ramener le nom est
la moyenne du disque puis de les affiché tous est imprimé le nom est la moyenne
8- Réaliser un algorithme qui permet d'introduire 2 nombres par clavier de calculer leurs
sommes puis sortir par écran les résultats
Série N°2
4- Réaliser un algorithme qui permet de calculer le total à partir de la quantité est le prix
6- Réaliser un algorithme qui permet de calculer le total de trois notes à partir notes est
confissions
Série N°3
1- Réaliser un algorithme qui permet de calculer le net a partir d'in prix HT est d'un quantité,
le taux de TVA est de 20% en applique une réduction sur le prix HT de 2% si la quantité est
inférieur a 10% autrement en applique une réduction de 5%
2- ONCF désire appliqué une réduction sue ses tarifs, 20% pour le jour est 45% pour la nuit,
déterminez le nouveau tarif
3- Réaliser un algorithme qui permet de calculer le prix de transport des marchandises a partir
du nombre du Km est de Prix/Km, une majoration est appliqué d'après le poids de la
marchandises, si elle est inférieur a 10 000, le taux de 3% autrement il est de 7%.
4- Réaliser un algorithme qui permet de calculer le net a partir d'un total HT la TVA est
déterminez suivant les cas : Local ; Export, pour le local la TVA est de 20% pour l'export
14%
5- Réaliser un algorithme qui permet de calculer le salaire a partir du nombre d'heure est le
prix par heure eh lui ajoute un prime qui est de 5% de chiffre d'affaire si le salaire calculer est
supérieure a 5000 autrement 3%.
6- Réaliser un algorithme qui permet de calculer le salaire a partir du nombre d'heure (DH) est
le prix d'heure (PH), une prime est ajouté d'après l'enceinté il est de 10% si plus de 5 ans
autrement de 5%.