Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
0% ont trouvé ce document utile (0 vote)
33 vues30 pages

Receuil D'exercices

Télécharger au format doc, pdf ou txt
Télécharger au format doc, pdf ou txt
Télécharger au format doc, pdf ou txt
Vous êtes sur la page 1/ 30

2022 - 2023

Introduction aux Algorithmes et au Langage C


BAC1 TOUS

SUPPORT DE COURS

Introduction aux Algorithmes et au Langage C

Luc LUMANJI MBUNGA

Concepteur des systèmes d’information

Chef de Travaux

Institut Supérieur des Techniques Appliquées

Luc LUMANJI Page 1


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

1.0 Développement d’un programme :

Pour pouvoir exécuter un programme sur un ordinateur, on doit généralement passer au travers des
étapes de développement suivantes :

0) Conception Écrire la structure générale du programme sur papier. Ceci inclus

l’énumération des variables et des constantes nécessaires. Cette structure de


départ s’appelle l’algorithme numérique.

1) Édition Taper le programme grâce à un éditeur de texte. On appelle ce

programme (lisible à l’humain), le programme source. On lui donnera


l’extension *.c ou *.cpp (fichier en C ou en C++). On va sauvegarder ce
programme sur disque (fichier source).

2) Traduction Compiler le programme grâce au compilateur disponible avec le logiciel

de développement (Visual C++). Corriger les erreurs de syntaxe si


nécessaire. Recompiler et répéter. Une fois compilé correctement, le
programme traduit (illisible à l’humain) est généré dans un nouveau

fichier. On l’appelle le programme objet ou le programme exécutable (avec


extension *.obj ou *.exe). Il peut aussi être sauvegardé sur disque.

3) Exécution Exécuter le programme. Corriger les erreurs de logique et recommencer.

Luc LUMANJI Page 2


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Taper le programme grâce à un éditeur de


texte

Sauvegarder le programme « source »

Programme source *.c Programme corrigé

compilation Erreurs de syntaxe corrections

Programme objet *.obj

*.obj
liaison avec autres programmes
objets, si nécessaire

Programme exécutable *.exe

exécution Erreurs de logique

Utilisation du programme

Luc LUMANJI Page 3


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

1.1 Exemples de représentations d’algorithmes numériques :

Énoncé du problème : Demander un nom et compter combien de fois il apparaît dans une liste.

2 façons d’illustrer l’algorithme du programme-solution ;

avec du PSEUDO-CODE (en Français ou Fran-C)

Lire la liste des noms

Lire/demander le nom à trouver  nom

compteur  0

membre  1ier élément de la liste

Pour chaque membre de la liste, faire :

Comparer le membre actuel avec le nom

Si les deux sont les mêmes, compteur  compteur + 1

6. Une fois la liste terminée, afficher la valeur du compteur

B) avec un ORDINOGRAMME (flowchart)

Luc LUMANJI Page 4


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

1.2 Règles de construction d’un algorithme numérique :

Définition : Un algorithme numérique est une séquence finie d’étapes -- où l’ordre des
instructions est essentiel -- menant invariablement à l’obtention d’un résultat précis. Chaque étape
est construite en évaluant une condition ou une expression entière ou réelle.

Tout algorithme numérique -- peu importe la langue de programmation utilisée -- peut être totalement
déterminé avec quatre règles très simples.

Règle #1 : On peut déclarer des variables avec un nom et possiblement une valeur initiale.

Toute variable doit être déclarée avant d’être utilisée dans une expression. Voici trois exemples de
déclarations -- avec et sans initialisation --. Je me sers ici de l’opérateur = pour réaliser l’initialisation :
Soit un réel x

Luc LUMANJI Page 5


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Soit un réel y = 3.1415

Soit un entier n = 36777112

Une instruction d’assignation -- distincte de la déclaration -- permet de donner une valeur à une
variable. Par exemple :
x  2 * sin(3.89) //version pseudo-code

n = 5; //version langage C

Règle #2 : Toute expression construite avec des fonctions, des variables et des valeurs littérales
sera évaluée pour donner une valeur réelle ou entière.

Cette règle cache une profonde réalité : Les langues informatiques les plus utilisées sont régulées par
des standards nationaux (ANSI) ou internationaux (ISO) qui forcent la présence :
d’opérations naturelles sur les entiers et sur les réels. Pensons à +, – , * , / ,modulo, etc. ;

d’une priorité des opérations bien définie ;

de librairies de fonctions naturelles -- comme sinus, log ou valeur absolue, etc.

Règle #3 : On possède une structure conditionnelle.

SI (expression conditionnelle) ALORS


FAIRE (bloc d’instructions VRAI)
[ SINON FAIRE (bloc d’instructions FAUX)]
FINSI

Si l’expression conditionnelle est vraie, alors le bloc d’instructions VRAI est exécuté. Sinon, le bloc
d’instructions FAUX est exécuté (ou rien n’est exécuté en absence de la clause SINON). Il est donc
impossible que le bloc d’instructions VRAI et le bloc d’instructions FAUX soient exécutés
simultanément. Le programme continue ensuite avec l’instruction suivant le FINSI. Prenez note que
la partie SINON est facultative -- donc traditionnellement mise entre crochets dans les diagrammes
syntaxiques de l’informatique -- et n’est utilisée par le programmeur qu’au besoin de l’algorithme.

Règle #4 : On possède une structure itérative.

TANTQUE (expression conditionnelle)


FAIRE (bloc d’instructions TANTQUE)
FINTANTQUE

Luc LUMANJI Page 6


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

L’expression conditionnelle est évaluée. Si elle est vraie alors le bloc d’instructions TANTQUE est
exécuté et on retourne à l’évaluation de l’expression conditionnelle. Sinon, le programme continue
avec l’instruction suivant le FINTANTQUE.

Donc pour qu’un algorithme -- qui doit se faire avec un nombre fini d’opérations -- puisse contenir un
TANTQUE et exécuter son groupe d’instructions, ce groupe d’instructions doit pouvoir ramener
ultimement à FAUX la valeur de vérité de l’expression conditionnelle. Sinon on obtient une itération
sans fin (boucle infinie) : rappelez-vous le à chaque écriture de boucle !

1.3 Le langage « C » :

Exemple de premier programme en C :

#include<stdio.h>

void main(void)

printf("Il fait beau au Québec.\n");

Dissection du programme :

#include<stdio.h> Directive de pré-compilation. Commencent avec un « # ». Indique au


compilateur d’inclure une copie du fichier standard stdio.h dans le
haut du programme. Les parenthèses <, > indiquent que ce fichier se
trouve dans le répertoire habituel des librairies du Visual C++.

void main(void) En-tête de fonction. Tous les programmes en C doivent avoir

une fonction principale nommée main(void) c’est le début d’exécution


du programme. Le type void (vide, nul), indique que la fonction
main(void) ne renvoie pas de valeur à la fin de son exécution (C++
seulement).

Luc LUMANJI Page 7


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

{…} Bloc de code. Début et fin du code de la fonction main.

printf("………\n"); Appel de la fonction printf(). Imprime le message inclus

entre les guillemets à l’écran. Le code \n signifie un retour de chariot


(return). NOTE : printf() est une fonction incluse dans la librairie
<stdio.h>.

1.4 Structure Générale d’un Programme en C :

#include< … >

... directives de pré-compilation

#define … …

void main(void)

Déclaration des variables;

Instructions exécutables;

EXEMPLE1.CPP

#include <stdio.h>
#include <stdlib.h> /* pour la fonction system() */

void main(void)
{ int a,
b,
somme;

system("cls"); /* effacer l'écran */

Luc LUMANJI Page 8


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

printf("Entrez deux nombres : ");


scanf("%d", &a);
scanf("%d", &b);
somme = a + b;
printf("La somme de %d + %d = %d\n", a, b, somme);

system("pause"); /* attendre qu'une touche soit pesé */


}

1.5 Traduction des 4 règles en C :


Voici la traduction en C des quatre règles de base à la construction d’algorithmes numériques.

Règle #1 : On peut déclarer des variables avec un nom et possiblement une valeur initiale.

Toutes les variables du programme doivent être déclarées dans ce même programme. Les déclarations
de variables doivent venir en début de tout bloc de code avant les instructions. Une variable est
normalement accessible à partir de sa déclaration jusqu’à la fin du bloc contenant cette déclaration.
On peut donner une valeur initiale correcte à la variable lors de sa déclaration, ceci s’appelle
l’initialisation de la variable (on se sert de l’opérateur = ). On peut ensuite donner à la variable une
nouvelle valeur dans une instruction nommée l’assignation (en utilisant toujours l’opérateur = ).

Voici un exemple de déclaration et d’assignation d’entiers :


{

int cpt; /* Sans initialisation. */

int nb_fourmies = 32766; /* Avec initialisation. */

cpt = nb_fourmies + 1; /* Exemple d’assignation. */

Déclaration de 3 variables dans le programme EXEMPLE1.CPP :

int a, b, somme;

noms des 3 variables

Luc LUMANJI Page 9


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

type des 3 variables

Le type standard int (integer) indique que a, b, et somme peuvent seulement contenir des valeurs
numériques entières (0, 1, 2, 4, -1, -10, etc.). Pour la déclaration de réels, remplacez int par le type
double.

Déclaration de variables avec initialisation :

char c = ’A’; /* variable de type caractère */

int i = 1;

int pouces, pieds, verges = i+4; /* ici, verges = 5 */

 Les variables pouces, pieds n’ont pas été initialisées, leurs valeurs sont inconnues.

Règle #2 : Toute expression construite avec des fonctions, des variables et des valeurs littérales
sera évaluée pour donner une valeur réelle ou entière.

Avec les entiers et les réels, on construit des expressions en utilisant le groupe des opérateurs naturels
( + , - , * , /, etc. ) qui correspondent à votre intuition. Mais en C, la division / de deux entiers donne la
division entière et le modulo de deux entiers s’obtient avec l’opérateur %. Les opérateurs binaires de
comparaisons ( < , > , <= , >= , == , != ) donnent des valeurs booléennes (vrai/faux). Un groupe de
fonctions naturelles mathématiques (sin(), cos(), etc.) est disponibles à partir de la librairie standard
math.h.

Règle #3 : On possède une structure conditionnelle.

SI (expression) ALORS if (condition) {


FAIRE (bloc d’instructions) devient instructions;
FINSI
}

SI (expression) ALORS devient if (condition) {


FAIRE (bloc d’instructions)

Luc LUMANJI Page 10


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

SINON instructions_V;
FAIRE (bloc d’instructions) }
FINSI
else {

instructions_F;

Prenez note que :


La condition doit être entre parenthèses ;

Si la condition donne VRAI (ou ≠ 0), alors le bloc instructions_V sera exécuté ;

Si la condition donne FAUX (ou = 0), alors le bloc instructions_F sera exécuté ;

Ne jamais mettre un « ; » juste avant un « else » !!

L’indentation -- décalage vers la droite -- est obligatoire dans le cadre de notre cours.

Règle #4 : On possède une structure itérative.

TANTQUE (expression) while (condition) {


FAIRE (bloc d’instructions) instructions;
FINTANTQUE devient
}

Prenez note que :


La condition doit être entre parenthèses ;

L’indentation -- décalage vers la droite -- est obligatoire dans le cadre de notre cours.

1.6 Affichage à l’écran :


L’affichage à l’écran se fait à l’aide de la fonction printf de stdio.h. Celle-ci possède comme premier
paramètre une chaîne de contrôle. Ce sont des caractères entre guillemets qui seront pour la plupart
directement affichés à l’écran. Vous saurez rapidement l’effet d’un \n (return) ou d’un \t (tab) dans la
chaîne de contrôle. Selon les codes de contrôle inscrits dans la chaîne de contrôle, vous pouvez
afficher soit du texte, un entier ou un réel.

Luc LUMANJI Page 11


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Syntaxe générale :
printf("chaîne de contrôle", arguments);

La chaîne de contrôle indique quoi écrire à l’écran et avec quel « format ». Les arguments sont les
valeurs qui seront affichées avec la chaîne de contrôle.
Exemple :

printf("Prêt: %s %d %f %c%c\n", "un", 2, 3.5, ’G’, ’O’);

arguments de la chaîne

 affichera : Prêt: un 2 3.500000 GO

La chaîne de contrôle utilise les 5 arguments (un, 2, 3.5, G, O) pour compléter le message.

Symboles et ponctuations :

"..." Début et fin d’une chaîne de caractères (ou string).

’?’ Pour indiquer un caractère simple.

, Virgules pour séparer chaque argument.

\? Indique un caractère spécial à afficher (\n  return).

%x Indique un endroit dans la chaîne de contrôle où l’on placera un des arguments.

Le code de format ‘x’ indique le type de la valeur ou variable à afficher.

Codes de format pour le printf :

Code Comment sera affichée la valeur

%c comme un caractère simple

%d, %i comme un entier décimal (base 10)

%f comme un réel (type float) avec un point décimal (eg. 10.000000)

%e comme un réel avec notation scientifique (eg. 1.000000e+01)

%lf comme un réel (type double) avec un point décimal (eg. 10.000000)

%s comme une chaîne de caractères (ou string)


Luc LUMANJI Page 12
Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

En plaçant un chiffre entre le % et le code de format, on peut indiquer la largeur en caractères de


l’affichage.

Ex. printf("%c%3c%7c", ’A’, ’B’, ’C’);


Écran : A__B______C /* les espaces sont indiqués en rouge */

Exemples d’utilisations :

Affichage de texte.
Pour afficher un texte, il suffit de l’écrire entre guillemets dans le premier paramètre.

Voici un exemple :
printf("Mon premier affichage!");

Affichage d’un entier.


Si le couple de caractères %d ou %i (format entier ou integer) apparaît dans la chaîne de contrôle,
la fonction printf évalue l’expression de son second paramètre et l’affiche comme un entier.

Voici quelques exemples :


printf("%d", 5); /* affichera : 5 */

printf("Le total est : %d", total);

/* si total = 10 affichera : Le total est : 10 */

printf("1 + 2 = %d", 1 + 2); /* affichera : 1 + 2 = 3 */

Affichage d’un réel.


Si le couple de caractères %f (format réel ou float) apparaît dans la chaîne de contrôle, la fonction
printf évalue l’expression de son second paramètre et l’affiche comme un réel.

Voici quelques exemples :

Luc LUMANJI Page 13


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

printf("%f", 5.0); /* 5.000000 */

printf("Le total est : %f", total);

/* avec total = 3.1234 : Le total est : 3.123400 */

printf("1.5 + 0.2 = %d", 1.5 + 0.2);

/* 1.5 + 0.2 = 858993459 (Pourquoi ???) */

Prenez note que c’est à vous qu’incombe la responsabilité de donner le bon format, sinon le
résultat risque d’être surprenant -- testez-le vous verrez.

Mise en forme des réels (avec %f et %lf) :

Pour indiquer le nombre de décimales à afficher, insérer un .n entre le % et le code f.

Ex. printf("Valeurs:_%.1f_%.2f_%.3f", 1.0, 2.0, 3.0);

Écran : Valeurs:_1.0_2.00_3.000

Ensuite, si on veut indiquer le nombre de décimales et la largeur d’affichage totale :

printf("Valeurs:%7.1f%7.2f%7.3f", 4.0, 5.0, 6.0);

Écran : Valeurs:____4.0___5.00__6.000

NOTE IMPORTANTE : Si la valeur réelle à afficher contient plus de décimales que le nombre
demandé, le format %f va arrondir à la dernière décimale affichée.
Donc, printf("%.3f", 3.56789); Affichera 3.568

Valeur de Retour du printf :

Luc LUMANJI Page 14


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Vous en serez surpris, mais la fonction printf retourne un entier correspondant au nombre de caractères
effectivement imprimés -- vous pourrez récupérer ce nombre dans une variable si vous le désirez.

Ex. int nb;

nb = printf("Mon premier affichage!\n");

/* ici la variable nb va recevoir la valeur 23 (22 plus le caractère ’\n’ ). */

1.7 La fonction de lecture scanf():


La fonction scanf de <stdio.h> est utilisée pour faire des lectures à partir du clavier :

Syntaxe générale :
scanf("chaîne de contrôle", variables);

La chaîne de contrôle contient seulement des codes de formats. Les autres arguments doivent être que
des noms de variables précédées de l’opérateur d’adresse &.

Ex. int x; /* déclaration de la variable */

scanf("%d", &x); /* lecture d’une valeur dans « x » */

 Va lire une valeur entière décimale à partir du clavier, et va placer la valeur dans la variable x.

Ex. char lettre_nom, lettre_prenom; int age; /* variables */

scanf("%c%c%d", &lettre_prenom, &lettre_nom, &age);

 Va lire 1 seul caractère dans lettre_prenom, 1 caractère dans lettre_nom, et un entier dans age.
L’entrée de l’âge devra être précédée d’un espace, comme ceci ; ET_33

Codes de format pour le scanf :

Code Interprétation des Entrées


%c lire comme un caractère simple

%d, %i lire comme un entier décimal (base 10)

%f lire comme un réel avec un point décimal de type float

%lf lire comme un réel avec un point décimal de type double

%s lire comme une chaîne de caractères (ou string) jusqu’au premier espace

Luc LUMANJI Page 15


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Valeur de Retour du scanf :

La fonction scanf renvoie un entier qui indique le nombre de lectures qui ont été effectuées avec
succès. Ceci permet de valider si les lectures de données ont été effectuées sans erreur.

Ex. int nb; /* variable pour valider le nombre de saisies */

nb = scanf("%c%c%d", &lettre_prenom, &lettre_nom, &age);

Si l’utilisateur tape ; ETqwe33 /* la valeur pour age ne sera pas saisie! */


La valeur renvoyée dans nb sera 2, car seulement les 2 premières lectures ont été bonnes.

Si l’utilisateur tape ; ET 33
La valeur renvoyée dans nb sera 3, car les 3 lectures ont été bonnes (la saisie est valide).

1.8 Exemples et Programmes :


CERCLE .CPP :
#include <stdio.h>

#include <stdlib.h>

#define PI 3.141592653589793 /* Définir une constante */


void main(void)

{ double rayon; /* type réel double-précision */

system("cls"); /* effacer l'écran */


printf("\n%s\n\n%s",

"Ce programme calcule la surface d'un cercle.",

"Entrez le rayon du cercle: ");

scanf("%lf", &rayon);

printf("\n%s\n%s %.2f %s %.2f %s %.2f\n%s %.5f\n\n",

"Surface = PI * rayon * rayon",

" =", PI, "*", rayon, "*", rayon,

" =", PI * rayon * rayon);

Luc LUMANJI Page 16


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

system("pause"); /* pause-écran */

PAYES.CPP :
#include <stdio.h>

#include <stdlib.h>

void main(void)

{ float heures, /* heures travaillés (réel simple-précision) */

taux, /* le taux horaire */

brut; /* le salaire brut */

system("cls"); /* effacer l'écran */


printf("\nHeures travaillées: ");

scanf("%f", &heures);

printf("\nTaux horaire : ");

scanf("%f", &taux);

if (heures <= 40) /* on vérifie si il y a eu des heures supplémentaires */

brut = heures * taux;

else

brut = taux*(40 + 1.5*(heures-40)); /* taux pour les hrs. supp. */

printf("\nSalaire brut : %.2f%c\n", brut, '$');

system("pause"); /* pause-écran */

GRADE.C :
/*

* The complete grading program.

Luc LUMANJI Page 17


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

*/

#include <stdio.h>

#include <stdlib.h>

#define PASSING_SCORE 70

int main()

int next_score; /* current input value */

int n; /* input values read with last scanf */

int score_count; /* count of scores read */

int pass_count; /* count of passing scores */

int fail_count; /* count of failing scores */

int avg_score; /* average score */

int total_score; /* total score */

score_count = 0; pass_count = 0; fail_count = 0; total_score = 0;

printf("Score? ");

n = scanf("%i", &next_score);

while (n == 1)

score_count = score_count + 1;

total_score = total_score + next_score;

if (next_score >= PASSING_SCORE)

printf("%i - Passes\n", next_score);

Luc LUMANJI Page 18


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

pass_count = pass_count + 1;

else

printf("%i - Fails\n", next_score);

fail_count = fail_count + 1;

printf("Score? ");

n = scanf("%i", &next_score);

if (score_count == 0)

avg_score = 0;

else

avg_score = total_score / score_count;

printf("\n%i scores entered, %i pass, %i fail.\n",

score_count, pass_count, fail_count);

printf("Average: %i\n", avg_score);

return EXIT_SUCCESS;

Luc LUMANJI Page 19


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

RECEUIL D’EXERCICES
1. Les Variables
Exercice 1.1
Quelles seront les valeurs des variables A et B, après exécution des instructions suivantes ?
Variables A, B en Entier
Début
A←1
B←A+3
A←3
Fin
Exercice 1.2

Luc LUMANJI Page 20


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Quelles seront les valeurs des variables A, B et C après exécution des instructions suivantes ?
Variables A, B, C en Entier
Début
A←5
B←3
C←A+B
A←2
C←B–A
Fin
Exercice 1.3
Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?
Variables A, B en Entier
Début
A←5
B←A+4
A←A+1
B←A–4
Fin
Exercice 1.4
Quelles seront les valeurs des variables A, B et C après exécution des instructions suivantes ?
Variables A, B, C en Entier
Début
A←3
B ← 10
C←A+B
B←A+B
A←C
Fin
Luc LUMANJI Page 21
Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Exercice 1.5
Quelles seront les valeurs des variables A et B après exécution des instructions suivantes ?
Variables A, B en Entier
Début
A←5
B←2
A←B
B←A
Fin
Moralité : les deux dernières instructions permettent-elles d’échanger les deux valeurs de B et
A ? Si l’on inverse les deux dernières instructions, cela change-t-il quelque chose ?
Exercice 1.6
Plus difficile, mais c’est un classique absolu, qu’il faut absolument maîtriser : écrire un
algorithme permettant d’échanger les valeurs de deux variables A et B, et ce quel que soit leur
contenu préalable.
Exercice 1.7
Une variante du précédent : on dispose de trois variables A, B et C. Ecrivez un algorithme
transférant à B la valeur de A, à C la valeur de B et à A la valeur de C (toujours quels que
soient les contenus préalables de ces variables).
Exercice 1.8
Que produit l’algorithme suivant ?
Variables A, B, C en Caractères
Début
A ← "423"
B ← "12"
C←A+B
Fin
Exercice 1.9
Que produit l’algorithme suivant ?
Variables A, B, C en Caractères

Luc LUMANJI Page 22


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Début
A ← "423"
B ← "12"
C←A&B
Fin
2. Lecture et Ecriture
Exercice 2.1
Quel résultat produit le programme suivant ?
Variables val, double numériques
Début
Val ← 231
Double ← Val * 2
Ecrire Val
Ecrire Double
Fin
Exercice 2.2
Ecrire un programme qui demande un nombre à l’utilisateur, puis qui calcule et affiche le
carré de ce nombre.
Exercice 2.3
Ecrire un programme qui lit le prix HT d’un article, le nombre d’articles et le taux de TVA, et
qui fournit le prix total TTC correspondant. Faire en sorte que des libellés apparaissent
clairement.
Exercice 2.4
Ecrire un algorithme utilisant des variables de type chaîne de caractères, et affichant quatre
variantes possibles de la célèbre « belle marquise, vos beaux yeux me font mourir d’amour ».
On ne se soucie pas de la ponctuation, ni des majuscules.
3. Les Tests
Exercice 3.1
Ecrire un algorithme qui demande un nombre à l’utilisateur, et l’informe ensuite si ce nombre
est positif ou négatif (on laisse de côté le cas où le nombre vaut zéro).

Luc LUMANJI Page 23


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Corrigé - retour au cours


Exercice 3.2
Ecrire un algorithme qui demande deux nombres à l’utilisateur et l’informe ensuite si leur
produit est négatif ou positif (on laisse de côté le cas où le produit est nul). Attention toutefois
: on ne doit pas calculer le produit des deux nombres.
Exercice 3.3
Ecrire un algorithme qui demande trois noms à l’utilisateur et l’informe ensuite s’ils sont
rangés ou non dans l’ordre alphabétique.
Exercice 3.4
Ecrire un algorithme qui demande un nombre à l’utilisateur, et l’informe ensuite si ce nombre
est positif ou négatif (on inclut cette fois le traitement du cas où le nombre vaut zéro).
Exercice 3.5
Ecrire un algorithme qui demande deux nombres à l’utilisateur et l’informe ensuite si le
produit est négatif ou positif (on inclut cette fois le traitement du cas où le produit peut être
nul). Attention toutefois, on ne doit pas calculer le produit !
Exercice 3.6
Ecrire un algorithme qui demande l’âge d’un enfant à l’utilisateur. Ensuite, il l’informe de sa
catégorie :
"Poussin" de 6 à 7 ans
"Pupille" de 8 à 9 ans
"Minime" de 10 à 11 ans
"Cadet" après 12 ans
Peut-on concevoir plusieurs algorithmes équivalents menant à ce résultat ?
4. Encore de la Logique
Exercice 4.1
Formulez un algorithme équivalent à l’algorithme suivant :
Si Tutu > Toto + 4 OU Tata = "OK" Alors
Tutu ← Tutu + 1
Sinon
Tutu ← Tutu – 1
Fin si
Luc LUMANJI Page 24
Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Exercice 4.2
Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible !
Il lira au clavier l’heure et les minutes, et il affichera l’heure qu’il sera une minute plus tard.
Par exemple, si l'utilisateur tape 21 puis 32, l'algorithme doit répondre :
"Dans une minute, il sera 21 heure(s) 33".
NB : on suppose que l'utilisateur entre une heure valide. Pas besoin donc de la vérifier.
Exercice 4.3
De même que le précédent, cet algorithme doit demander une heure et en afficher une autre.
Mais cette fois, il doit gérer également les secondes, et afficher l'heure qu'il sera une seconde
plus tard.
Par exemple, si l'utilisateur tape 21, puis 32, puis 8, l'algorithme doit répondre : "Dans une
seconde, il sera 21 heure(s), 32 minute(s) et 9 seconde(s)".
NB : là encore, on suppose que l'utilisateur entre une date valide.
Exercice 4.4
Un magasin de reprographie facture 0,10 E les dix premières photocopies, 0,09 E les vingt
suivantes et 0,08 E au-delà. Ecrivez un algorithme qui demande à l’utilisateur le nombre de
photocopies effectuées et qui affiche la facture correspondante.
Exercice 4.5
Les habitants de Zorglub paient l’impôt selon les règles suivantes :
les hommes de plus de 20 ans paient l’impôt
les femmes paient l’impôt si elles ont entre 18 et 35 ans
les autres ne paient pas d’impôt
Le programme demandera donc l’âge et le sexe du Zorglubien, et se prononcera donc ensuite
sur le fait que l’habitant est imposable.
Exercice 4.6
Les élections législatives, en Guignolerie Septentrionale, obéissent à la règle suivante :
lorsque l'un des candidats obtient plus de 50% des suffrages, il est élu dès le premier tour.
En cas de deuxième tour, peuvent participer uniquement les candidats ayant obtenu au moins
12,5% des voix au premier tour.
Vous devez écrire un algorithme qui permet la saisie des scores de quatre candidats au
premier tour. Cet algorithme traitera ensuite le candidat numéro 1 (et uniquement lui) : il dira
s'il est élu, battu, s'il se trouve en ballottage favorable (il participe au second tour en étant

Luc LUMANJI Page 25


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

arrivé en tête à l'issue du premier tour) ou défavorable (il participe au second tour sans avoir
été en tête au premier tour).
Exercice 4.7
Une compagnie d'assurance automobile propose à ses clients quatre familles de tarifs
identifiables par une couleur, du moins au plus onéreux : tarifs bleu, vert, orange et rouge. Le
tarif dépend de la situation du conducteur :
Un conducteur de moins de 25 ans et titulaire du permis depuis moins de deux ans, se voit
attribuer le tarif rouge, si toutefois il n'a jamais été responsable d'accident. Sinon, la
compagnie refuse de l'assurer.
Un conducteur de moins de 25 ans et titulaire du permis depuis plus de deux ans, ou de plus
de 25 ans mais titulaire du permis depuis moins de deux ans a le droit au tarif orange s'il n'a
jamais provoqué d'accident, au tarif rouge pour un accident, sinon il est refusé.
Un conducteur de plus de 25 ans titulaire du permis depuis plus de deux ans bénéficie du tarif
vert s'il n'est à l'origine d'aucun accident et du tarif orange pour un accident, du tarif rouge
pour deux accidents, et refusé au-delà.
De plus, pour encourager la fidélité des clients acceptés, la compagnie propose un contrat de
la couleur immédiatement la plus avantageuse s'il est entré dans la maison depuis plus de cinq
ans. Ainsi, s'il satisfait à cette exigence, un client normalement "vert" devient "bleu", un client
normalement "orange" devient "vert", et le "rouge" devient orange.
Ecrire l'algorithme permettant de saisir les données nécessaires (sans contrôle de saisie) et de
traiter ce problème. Avant de se lancer à corps perdu dans cet exercice, on pourra réfléchir un
peu et s'apercevoir qu'il est plus simple qu'il n'en a l'air (cela s'appelle faire une analyse !)
Exercice 4.8
Ecrivez un algorithme qui a près avoir demandé un numéro de jour, de mois et d'année à
l'utilisateur, renvoie s'il s'agit ou non d'une date valide.
Cet exercice est certes d’un manque d’originalité affligeant, mais après tout, en algorithmique
comme ailleurs, il faut connaître ses classiques ! Et quand on a fait cela une fois dans sa vie,
on apprécie pleinement l’existence d’un type numérique « date » dans certains langages…).
Il n'est sans doute pas inutile de rappeler rapidement que le mois de février compte 28 jours,
sauf si l’année est bissextile, auquel cas il en compte 29. L’année est bissextile si elle est
divisible par quatre. Toutefois, les années divisibles par 100 ne sont pas bissextiles, mais les
années divisibles par 400 le sont. Ouf !
Un dernier petit détail : vous ne savez pas, pour l’instant, exprimer correctement en pseudo-
code l’idée qu’un nombre A est divisible par un nombre B. Aussi, vous vous contenterez
d’écrire en bons télégraphistes que A divisible par B se dit « A dp B ».
5. Les Boucles
Exercice 5.1

Luc LUMANJI Page 26


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Ecrire un algorithme qui demande à l’utilisateur un nombre compris entre 1 et 3 jusqu’à ce


que la réponse convienne.
Exercice 5.2
Ecrire un algorithme qui demande un nombre compris entre 10 et 20, jusqu’à ce que la
réponse convienne. En cas de réponse supérieure à 20, on fera apparaître un message : « Plus
petit ! », et inversement, « Plus grand ! » si le nombre est inférieur à 10.

Exercice 5.3
Ecrire un algorithme qui demande un nombre de départ, et qui ensuite affiche les dix
nombres suivants. Par exemple, si l'utilisateur entre le nombre 17, le programme affichera les
nombres de 18 à 27.
Exercice 5.4
Ecrire un algorithme qui demande un nombre de départ, et qui ensuite écrit la table de
multiplication de ce nombre, présentée comme suit (cas où l'utilisateur entre le nombre 7) :
Table de 7 :
7x1=7
7 x 2 = 14
7 x 3 = 21

7 x 10 = 70
Exercice 5.5
Ecrire un algorithme qui demande un nombre de départ, et qui calcule la somme des entiers
jusqu’à ce nombre. Par exemple, si l’on entre 5, le programme doit calculer :
1 + 2 + 3 + 4 + 5 = 15
NB : on souhaite afficher uniquement le résultat, pas la décomposition du calcul.
Exercice 5.6
Ecrire un algorithme qui demande un nombre de départ, et qui calcule sa factorielle.
NB : la factorielle de 8, notée 8 !, vaut
1x2x3x4x5x6x7x8
Exercice 5.7

Luc LUMANJI Page 27


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Ecrire un algorithme qui demande successivement 20 nombres à l’utilisateur, et qui lui dise
ensuite quel était le plus grand parmi ces 20 nombres :
Entrez le nombre numéro 1 : 12
Entrez le nombre numéro 2 : 14
Etc.
Entrez le nombre numéro 20 : 6
Le plus grand de ces nombres est : 14
Modifiez ensuite l’algorithme pour que le programme affiche de surcroît en quelle position
avait été saisie ce nombre :
C’était le nombre numéro 2
Exercice 5.8
Réécrire l’algorithme précédent, mais cette fois-ci on ne connaît pas d’avance combien
l’utilisateur souhaite saisir de nombres. La saisie des nombres s’arrête lorsque l’utilisateur
entre un zéro.
Exercice 5.9
Lire la suite des prix (en euros entiers et terminée par zéro) des achats d’un client. Calculer la
somme qu’il doit, lire la somme qu’il paye, et simuler la remise de la monnaie en affichant les
textes "10 Euros", "5 Euros" et "1 Euro" autant de fois qu’il y a de coupures de chaque sorte à
rendre.
Exercice 5.10
Écrire un algorithme qui permette de connaître ses chances de gagner au tiercé, quarté, quinté
et autres impôts volontaires.
On demande à l’utilisateur le nombre de chevaux partants, et le nombre de chevaux joués.
Les deux messages affichés devront être :

Dans l’ordre : une chance sur X de gagner

Dans le désordre : une chance sur Y de gagner

X et Y nous sont donnés par la formule suivante, si n est le nombre de chevaux partants et p
le nombre de chevaux joués (on rappelle que le signe ! signifie "factorielle", comme dans
l'exercice 5.6 ci-dessus) :

X = n ! / (n - p) !

Luc LUMANJI Page 28


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Y = n ! / (p ! * (n – p) !)

NB : cet algorithme peut être écrit d’une manière simple, mais relativement peu performante.
Ses performances peuvent être singulièrement augmentées par une petite astuce. Vous
commencerez par écrire la manière la plus simple, puis vous identifierez le problème, et
écrirez une deuxième version permettant de le résoudre.

Bibliographie
[1] Jean-Jacques Girardot et Marc Roelens. Structures de données et Algorithmes en C.
Accessible par la page http://kiwi.emse.fr/POLE/SDA/, septembre 2005.

[2] Christian Rolland. LATEX 2", guide pratique. Addison-Wesley, France, Juin 1995.

[3] J-P. Ramis et A. Warusfel, Mathématiques tout-en-un pour la licence, niveau L1, Dunod,
2006

[4] M. Marchand, Outils mathématiques pour l’informaticien, De Boeck, 2005 (2e édition)

[5] J. Vélu, Méthodes mathématiques pour l’informatique, Dunod, 2005 (4e édition)

[6] LyX-Team. Implémentation de LyX. http://www.lyx.org.

Luc LUMANJI Page 29


Concepteur de système d’information
Chef de Travaux
2022 - 2023
Introduction aux Algorithmes et au Langage C
BAC1 TOUS

Luc LUMANJI Page 30


Concepteur de système d’information
Chef de Travaux

Vous aimerez peut-être aussi