Professional Documents
Culture Documents
UNIVERSITE DE THIES
UFR DES SCIENCES ECONOMIQUES ET SOCIALES
DEPARTEMENT DE MANAGEMENT DES ORGANISATIONS
C 3
A L G O
1 1 2 1
S 1 D 2
E 1 T 1 E 1
U 1
C 3
E 1
PREFACE PAGE 3
STRUCTURE GENERALE D’UN ALGORITHME PAGE 5
DECLARATION DE VARIABLES ET AFFECTATION PAGE 8
LECTURE ET ECRITURE PAGE 11
STRUCTURES CONDITIONNELLES (SI…ALORS) PAGE 14
STRUCTURES ITERATIVES (BOUCLES) PAGE 18
TABLEAUX PAGE 21
TRAITEMENT SUR LES CHAINES DE CARACTERES PAGE 24
PROPOSITION DE SOLUTIONS AUX EXERCICES PAGE 27
PROBLEMES DE RECHERCHE PAGE 44
Mentions utiles
Les solutions, aux exercices proposés ont été intégralement vérifiées avec les logiciels
Algobox et LARP
Vous pourriez les télécharger et apprendre les tutoriaux d’utilisation depuis leurs sites web.
- ALGOBOX - http://www.xm1math.net/algobox/
- LARP (Logiciel d’Algorithmes et de Résolution de Problèmes) - http://larp.marcolavoie.ca/fr/
Pour vos problèmes sur les logigrammes et algorigrammes rendez-vous sur ce site
http://openclassrooms.com/courses/introduction-aux-algorigrammes
*************************
PREFACE
Actuellement, nous évoluons dans un système ou presque tout est traduit selon un langage
numérique, en ce sens être néophyte ou plus pire encore être ignorant des TIC s’avère très grave.
C’est ce qui a inspiré d’ailleurs le nouveau contexte socio professionnel, ou maintenant tout est
automatisé afin de permettre une meilleure rentabilité des activités. Et cette donne est allée
jusqu’à conditionner les modalités de formations délivrées au sein même de nos universités ou
dorénavant on forme un nouveau type de manager, qui malgré une bonne maitrise des techniques
de gestions aura une main mise entière, sur les principes de traitement automatique et infaillible
de l’information. Sur cette veine, on ne peut pas parler d’informatique sans pour autant aborder
l’algorithmique, qui est une des bases fondamentales de celle-ci.
D’où la mise au point de ce chef d’œuvre.
ALGO, ASTUCE ET CODE pourquoi ce nom ? Parce que nous avons jugé utile et
nécessaire d’offrir un précepte d’auto apprentissage simple du langage algorithmique, via une voie
de raisonnement canalisée.
L’objectif principal de ce recueil est d’accompagner l’étudiant qui vient juste de débuter, une
carrière en informatique notamment le nouveau bachelier, mais surtout à l’aider au moins à
démystifier la première impression qu’il se fait de l’algorithmique, c’est à dire une discipline
complexe et très difficile à appréhender. En lui donnant la possibilité de se familiariser à une
méthode de travail, par l’intermédiaire d’exercices classiques corrigés, précédés par un bref
rappel des concepts déjà énoncés en cours magistral en guise de rafraichissement de la mémoire.
REMERCIEMENT
Nous tenons à remercier très solennellement.
M. Papa Mamour DIOUF (MIO promo 2014) et Mlle Fatoumata Néné DIA (SEG promo 2014)
Pour leurs soutiens logistique (ordinateur, logiciel…) lors de la conception.
M. Saliou CISSE (MIO promo 2015) et Mlle Mayrame Maya DIALLO (LEA promo 2015)
M. Baba DIAW, M. Libasse DIOP et Babacar NDIAYE (MIO promo 2015)
Pour leurs collaborations au projet et leurs disponibilités.
M. Insa DIOP (MIO promo 2014) et M. Jean Marie Samba FAYE (MIO promo 2013)
Pour leurs conseils et orientations lors de la conception.
Pour leurs états d’esprits, en ayant acceptés et appréciés notre volonté et le dévouement
qu’ils ont manifesté à bien vouloir nous accompagner et nous épauler sans demie mesure en
terme de remarques, critiques et contributions…
Tout au long du projet, nous leurs en sommes redevables.
********
Structure
Générale
D’UN
ALGORITHME
" On peut apprendre à un ordinateur à dire : "Je t'aime",
mais on ne peut pas lui apprendre à aimer. "
Albert JACQUARD
L’écriture d’un programme* est une opération complexe qui requiert de nombreuses étapes.
Le plus important est de comprendre l’objectif final et de le respecter. Pour cela, il est souvent préférable de
décomposer le traitement souhaité en une succession d’opérations plus petites et plus simples.
En ce sens un algorithme est constitué de la suite de ces opérations élémentaires.
Elles devront être décrites avec précision, dans un ordre cohérent.
Ainsi pour pouvoir représenter cette suite d’opération, nous allons introduire ce qu’est un langage algorithmique.
Un algorithme est la description des étapes à suivre pour résoudre un problème en un nombre fini d’étapes.
Il décrit un traitement sur un certain nombre de données (éventuellement aucune).
Donc ils peuvent s’utiliser dans plusieurs domaines et même de la vie quotidienne.
Par exemple le fait de cuisiner, prendre un itinéraire de voyage, mission…
C’est une partie de traitement d’un algorithme, constituée d’opérations élémentaires situées entre
DEBUT et FIN.
EXEMPLE
Algorithme nom_algo
Début_algo
- Bloc d’instructions
Fin_algo
Les ordinateurs, quels qu’ils soient, ne sont fondamentalement capables de comprendre que quatre familles
d'instructions.
Ces quatre familles d'instructions sont :
* Programme : C’est une suite d’instructions exécutées sur un ordinateur ou toute machine programmable.
* Langage de programmation : C’est une notation conventionnelle destinée à formuler des algorithmes et de produire des
programmes informatiques, qui les appliquent.
INSTRUCTION REPRESENTATION
- AFFECTATION A←B
- SI (N > 0) ALORS
DEBUT_SI N>0
VRAIE
Valeur
Positive
V
Condition
- BOUCLE TANT QUE
F
Valeur
Négative
V
Condition Instruction i←i+1
- BOUCLE POUR
F
Instruction
PREMIERE PARTIE
VARIABLES
ET
AFFECTATION
" N’attribuez jamais à la malveillance, ce qui s’explique très bien par l’incompétence. "
Napoléon BONAPARTE
Bizzaaarrr…
Qu’est ce que Napoléon a
voulu dire par là ?
ATTENTION : Une affectation ne se note, jamais au plus grand jamais comme suit ( → )
Exemple à éviter : A → P
UN PEU DE PEDAGOGIE
Une variable pourrait être assimilée si c’était dans la vie réelle, à une bouteille qui permet de prendre exclusivement
un contenu.
Et la nature du contenu pourrait bien représenter le type.
Par exemple :
Supposons que vous ayez deux bouteilles A et B
- Une bouteille A qui ne doit contenir que de l’eau
- Une bouteille B qui ne doit contenir que de l’essence
Donc imaginez-vous les dégâts que ça produirez, si vous vous aventuriez à confondre le contenu à remplir dans
chacune de ces deux bouteilles !
C’est pareil en Algo !!! Donc de la rigueur s’impose lors de la déclaration de celle-ci.
EXERCICE 1
CAS 1
Soient les variables suivantes :
A : entier ; B : réel ; C : chaine de caractère ; D : booléenne
Les affectations ci-dessous sont-elles valables ? Justifier
1) A ← 1,5
2) B ← 1
3) C ← salut
4) D ← A + 3
CAS 2
Répondez par oui ou non si les écritures suivantes sont-elles correctes, justifier :
5) Constante A = 3 : entier
6) Ecrire ("La somme est de : ", S)
7) Ecrire (313)
8) Variable Ex10 : booléenne
9) A + 1 ← A
CAS 3
Donnez les valeurs de A, B, C en fin d’exécution
Variables A, B, C: Entier;
Début
A ← 3;
B ← 2 * A;
A ← B;
B ← A - 2;
C ← A + B + 3;
C ← A – B;
Fin
Deuxième PARTIE
Lecture
ET
Écriture
" Il est assez difficile de trouver une erreur dans son code quand on la cherche.
C’est encore bien plus dur quand on est convaincu que le code est juste."
Steve McCONNELL
Ok Man, je te passe le
relais… Les variables à elles
seules ne suffisent pas !
LECTURE ET ECRITURE
PREMIERE APPROCHE
Pour vous donner un simple aperçu de ce qu’est la notion de lecture et écriture, référez-vous sur votre machine à
calculer que vous utilisez quotidiennement, en fait elle est bâtit exclusivement sur le principe de lecture et d’écriture.
C’est-à-dire ; la valeur que vous saisissez via le clavier après traitement s’affiche spontanément sur le petit écran de
votre calculatrice. En ce sens nous aborderons ces deux éléments.
LECTURE
Cette instruction permet de saisir des donnés à partir d’un périphérique d’entrée.
En algorithme on utilisera la codification suivante LIRE (Variable) pour désigner une opération de saisie de donnée.
Une fois l’algorithme implémenté, dès que le programme rencontre une instruction LIRE,
l’exécution s’interrompt, en attendant la saisie d’une valeur.
EXEMPLE
Variable N : entier * Ce bloc d’instructions une fois exécutée
Début permet juste à l’utilisateur de saisir une valeur
Lire (N) de type entier dans la variable N
Fin
ECRITURE
Cette instruction permet d'afficher des résultats sur un périphérique de sortie.
En algorithme on utilisera le mot ECRIRE ("Information") pour conditionner,
par exemple l’affichage d’une information.
EXEMPLE
Début * Une fois exécuté, ce bloc d’instructions permettra
Ecrire ("Bonjour") simplement d’afficher le message " Bonjour ".
Fin
Tout aussi l’instruction ECRITURE peut être utilisée pour afficher le contenu d’une variable.
EXEMPLE
Début * Ce bloc d’instructions stipule que :
N ← 20 D’abord la variable N prend la valeur 20
Ecrire ("La valeur de N est : ", N) Ensuite afficher cette information :
Fin La valeur de N est 20
ATTENTION
Pour afficher le contenu d’une variable en utilisant l’instruction Ecrire,
il ne faut jamais mettre le nom de la variable entre les guillemets du message annonce.
EXEMPLE * A l’exécution de
Variable N : entier l’algorithme, l’utilisateur aura
Début
la latitude de comprendre
Ecrire ("Veuillez saisir un nombre entier à afficher")
Lire (N) réellement ce qu’il devra
Ecrire ("La valeur de N est : N") saisir dans la variable,
Fin notamment un nombre entier.
EXERCICE 7 EXERCICE 14
Ecrire un algorithme qui demande un nombre Ecrire un algorithme qui fait lire les données
entier à l'utilisateur, puis qui calcule et affiche le nécessaires calcule et affiche le taux de
double de ce nombre. consommation d’un véhicule aux 100km.
EXERCICE 15
EXERCICE 8 : RACINE CARREE
Ecrire un algorithme qui à partir du prix hors taxe
Ecrire un algorithme qui permet de calculer la
PHT, d’un produit et du taux de TVA, calcule et
racine carrée d’un nombre quelconque fourni.
affiche le prix toute taxe comprise PTTC.
EXERCICE 9
EXERCICE 16 : CONSTANTE
Ecrire un algorithme qui lit les dimensions d’une
Ecrire un algorithme qui lit une température en
piscine et affiche la quantité d’eau nécessaire
degré Celsius et qui affiche son équivalence en
pour la remplir. Supposons que la piscine est
Kelvin. Rappel : 1°C = 273,16 K
parallélépipédique. Rappel : V = L * l * h
TROISIEME PARTIE
TESTS
Ou
Structures
Conditionnelles
Ou
Structures
Alternatives
" Si on ment à un compilateur alors il prendra sa revanche. "
Henry SPENCER
- CONDITIONS SIMPLES
Exemple : (x >0) ; (Delta=0)…
- CONDITIONS COMPOSEES
Une condition composée est une condition formée de plusieurs conditions simples reliées par des opérateurs
logiques: ET, OU et NON
Exemples :
- x compris entre 2 et 6 s’exprime par la condition composée (x > 2) ET (x < 6)
- n divisible par 3 ou par 2 : (n%3=0) OU (n%2=0)
Certains algorithmes exigent parfois de formuler des conditions qui ne peuvent pas être exprimées sous la forme
simple exposée ci-dessus. Prenons le cas " n est compris entre 2 et 6 ". En fait cette phrase cache non une, mais
deux conditions. Car elle revient à dire que " n est supérieur à 2 et n est inférieur à 6 ". Il y a donc bien là deux
conditions, reliées par ce qu’on appelle un opérateur logique, le mot ET. Comme on l’a évoqué plus haut,
l’informatique met à notre disposition trois opérateurs logiques : ET, OU, et NON. Le ET a le même sens en
informatique que dans le langage courant.
- Pour que C1 ET C2 soit VRAI, il faut impérativement que C1 soit VRAIE et que C2 soit VRAIE.
- Il faut se méfier un peu plus du OU. Pour que C1 OU C2 soit VRAI, il suffit que C1 soit VRAIE ou que C2 soit VRAIE.
- Le point important est que si C1 est VRAIE et C2 est VRAIE, alors C1 OU C2 est VRAIE.
- Le OU informatique ne veut donc pas dire " ou bien ".
- VRAI ⇔ NON FAUX
On représente tout ceci dans des tables de vérité
C1 C2 C1 ET C2 C1 OU C2
STRUCTURE SI
La structure SI permet de conditionner l’exécution d’un ensemble d'instructions à la valeur d’une condition,
La syntaxe générale de cette structure est la suivante:
SI (condition) ALORS
Traitement 1
FIN SI
SINON
Traitement 2
FIN SINON
Les traitements apparaissant après les mots Alors et Sinon peuvent être constitués d'une instruction simple ou d'un
ensemble d'instructions (bloc d'instructions). La condition est d'abord évaluée.
Si elle est vraie, traitement1 est exécuté puis le contrôle passe à l’instruction suivante.
Si elle est fausse, traitement2 est exécuté puis le contrôle passe à l’instruction qui suit le Fin Si.
Rappel : La phrase débutée par les symboles // indique ce qu’on appelle en algorithme un commentaire, c’est juste
une phrase indicative permettant de dire ce que l’algorithme exécutera, mais il ne participera pas à l’exécution du
code. Donc c’est juste optionnel…
- Si condition est vraie, le traitement est exécuté puis le contrôle passe à l’instruction qui suit le Fin Si.
- Si condition est fausse, le traitement n'est pas exécuté et le contrôle passe à l’instruction qui suit le Fin Si.
Comprenez que le SINON permet juste d’exprimer la condition qui est contraire à celle fixée dans le bloc SI.
STRUCTURE SELON
La structure SELON permet de choisir le traitement à effectuer en fonction de la valeur d'une variable,
ou d'une expression. Cette structure permet parfois de remplacer avantageusement une structure SI.
EXEMPLE : Programme qui affiche le genre en toute lettre selon son numéro.
Le numéro du genre est mémorisé dans la variable genre.
Ecrire (" Donner le numéro du genre : 1 pour masculin / 2 pour féminin !")
Selon (genre) Faire
1 : Ecrire (" Masculin")
2 : Ecrire (" Féminin")
Sinon
Ecrire (" Un numéro de genre doit être compris entre 1 et 2 ")
Fin_Sinon
Fin_Selon
EXERCICE 23
Écrire un algorithme qui demande deux nombres
EXERCICE 17 : CLASSEMENT
à l’utilisateur et l’informe ensuite si le produit est
Ecrire un algorithme qui affiche le plus petit ou le
négatif, positif ou nul.
plus grand de deux nombres.
Toutefois, on ne doit pas faire le calcul du produit.
EXERCICE 24
EXERCICE 18 Ecrire un algorithme qui fait résoudre dans R
Ecrire un algorithme qui permet d’obtenir le l’équation 𝑎𝑥 + 𝑏 = 0 pour tout couple réels
maximum de trois réels donnés. (a, b) donné.
EXERCICE 25
EXERCICE 19
Ecrire un algorithme qui fait résoudre dans R une
Ecrire un algorithme qui permet de déterminer et
l’équation 𝑎𝑥² + 𝑏𝑥 + 𝑐 = 0 pour tout triplet
d’afficher la valeur absolue de (A - B).
(a, b, c) donné par l’utilisateur.
EXERCICE 27
Ecrire un algorithme qui permet de saisir la
EXERCICE 22 : VARIABLE BOOLEENNE
moyenne d’un élève et affiche la décision du
Dans une ville le paiement d’impôts se base sur
conseil de classe sur la base d’une mention.
les critères suivants :
Intervalle (s) – Mention
- Homme, âgé à partir de 18 ans
18 <= Moyenne – Excellent
- Femme, âgée de 20 à 45 ans
16 <= Moyenne < 18 – Très Bien
Ecrire l’algorithme qui te permet de saisir un âge
14 <= Moyenne < 16 – Bien
et un sexe quelconque ensuite qui t’informe si
12 <= Moyenne < 14 – Assez Bien
l’individu doit payer l’impôt ou pas.
10 <= Moyenne < 12 – Passable
Moyenne < 10 – Redouble
****************************
EXERCICE 28 (PROBLEME)
Ecrire un algorithme qui te demande de saisir une date quelconque et d’afficher la date du lendemain.
.
Quatrième PARTIE
Boucles
Ou
Structures
Itératives
" Informatique : alliance d’une science inexacte et d’une activité humaine faillible. "
Luc FAYARD
Si, dès le début, la condition est fausse, alors le traitement ne sera pas exécuté.
Syntaxe
EXEMPLE
Ecrire un algorithme qui affiche 5 fois " Bienvenue en LMIO "
Variable i : entier
Début_algo
I←1
Tant que (i<5) faire
Début_tant que
Ecrire (" Bienvenu en LMIO ")
I←i+1
Fin_tant que
Fin_algo
UN PEU DE PEDAGOGIE
La notion de boucle Tant que peut être assimilé au scénario suivant :
Un maitre interroge un élève et lui demande de lui donner le résultat de 2x5.
L’élève par malchance fourni un résultat différent de 10 !
Le maitre tellement furieux prend la chicotte et décide de le bastonné.
Dans cette éventualité, le maitre continuera à le bastonner à chaque mauvaise réponse.
Il n’arrêtera que lorsque l’élève donne la vraie réponse notamment 10.
EXEMPLE : Ecrire un algorithme qui affiche 5 fois " Bienvenue en LMIO "
Variable i : entier
Début
Pour i allant de 1 à 5 Faire
Début_pour
Ecrire (" Bienvenu en LMIO ")
Fin_pour
Fin_algo
EXERCICE 29 EXERCICE 35
Ecrire un algorithme qui affiche la table de Ecrire un algorithme qui permet d’afficher tous les
multiplication de 1 à 12 de n’importe quel entier. entiers positifs pairs inférieurs à 100.
EXERCICE 36
EXERCICE 30
Ecrire un algorithme qui permet d’afficher tous les
Ecrire un algorithme qui calcule et affiche la
entiers positifs impairs inférieurs à 100 en
somme et le produit des 20 premiers entiers.
omettant tous ceux qui sont divisibles par 7.
EXERCICE 31 EXERCICE 37
Soit la suite définie par : 𝑈0 = 5 de r = 2 Ecrire un algorithme qui permet d’effectuer cette
On veut calculer la somme des 10 premiers somme avec x une valeur fournie.
termes de cette suite.
𝑥2 𝑥3 𝑥4 𝑥5
𝑆= − 3! + 4! − 5!
2!
EXERCICE 32 : CONTROLE DE SAISIE EXERCICE 38 : PRODUIT SANS
Ecrire l’algorithme qui permet de saisir puis MULTIPLICATION
d’afficher une valeur comprise entre 1 et 31 ; Ecrire un algorithme qui permet de faire le produit
on recommencera la saisie jusqu’à ce que la de deux entiers A et B sans utiliser la
valeur soit bien dans les bornes imposées. multiplication uniquement l’addition.
Exemple : Valeur saisie 43
Résultat affiché : Non comprise entre 1 et 31 EXERCICE 39 : CALCUL DE PUISSANCE
Valeur saisie 15 Ecrire un algorithme qui permet de calculer et
Résultat affiché : 15, ok ! d’afficher un entier x fourni et son exposant n.
EXERCICE 40
EXERCICE 33 : FACTORIEL D’UN NOMBRE Ecrire un algorithme qui permet de saisir un entier
Ecrire un algorithme qui fait le calcul et l’affichage et de déterminer tous ses diviseurs
du factoriel d’un entier N donné.
EXERCICE 41
EXERCICE 34 Ecrire un algorithme qui permet,
Ecrire un algorithme qui permet de calculer et de vérifier si un nombre est parfait.
afficher la moyenne de notes fournies au clavier. Rappel : Un nombre est parfait s’il est égal à la
Le dialogue se présentera comme suit : somme de ses diviseurs, respectifs
Combien de notes : 4 excepté lui-même.
Note 1 : 12
Note 2 : 15.25 EXERCICE 42 ; QUOTIENT ET RESTE
Note 3 : 13.5 SANS DIVISION
Note 4 : 8.5 Ecrire un algorithme permettant de donner le
Moyenne de ces 4 notes : 12.31 quotient et le reste de la division entière
NB : Tenez compte du fait qu’une note est de deux entiers a et b.
comprise entre 0 et 20 ! Rappel : Vous ne devrez utiliser en aucun cas les
opérateurs / et %
*************************
EXERCICE 43 (PROBLEME)
Ecrire un algorithme qui permet d’afficher la liste des nombres premiers
d’un intervalle donné.
Cinquième PARTIE
LES TABLEAUX
" La question de savoir si un ordinateur peut penser n’est pas plus intéressante,
que celle de savoir si un sous-marin peut nager. "
Edgar W. DIJKSTRA
LES TABLEAUX
PREMIERE APPROCHE
Imaginons que dans un algorithme, nous ayons besoin simultanément de 12 valeurs,
(Par exemple, des notes pour calculer une moyenne).
Evidemment, la seule solution dont nous disposons à l’heure actuelle consiste à déclarer douze variables, appelées
par exemple Note1, Note2, Note3, etc. Bien sûr, on peut opter pour une notation un peu simplifiée, par exemple N1,
N2, N3, etc. Mais cela ne change pas fondamentalement notre problème, car arrivé au calcul, et après une
succession de douze instructions « Lire » distinctes, cela donnera obligatoirement une atrocité du genre :
Moy ← (N1+N2+N3+N4+N5+N6+N7+N8+N9+N10+N11+N12)/12
C’est pourquoi la programmation nous permet de rassembler toutes ces variables en une seule en utilisant un
nouveau type de variable notamment "Tableau".
A 10
* On peut préconiser cette possibilité
B 15 en déclarant 3 variables distinctes
ensuite les utiliser.
C 20
L’avantage d’un tableau sera de déclarer uniquement une seule variable et d’y stocker les 3 valeurs.
• Les « cases » sont numérotées à partir de zéro, autrement dit que le plus petit indice est zéro.
• Lors de la déclaration d’un tableau, on précise la plus grande valeur de l’indice (différente, donc, du nombre de
cases du tableau, puisque si on veut 12 emplacements, le plus grand indice sera 11).
- On peut créer des tableaux contenant des variables de tous types : tableaux de numériques, bien sûr, mais aussi
tableaux de caractères, tableaux de booléens, tableaux de tout ce qui existe comme type de variables.
- On ne peut pas faire un mixage de types différents de valeurs au sein d’un même tableau.
EXEMPLE : Ecrire un algorithme qui te permet de calculer la moyenne de 12 notes saisies au clavier.
Exercice 44 Exercice 49
Ecrire un algorithme qui déclare et remplisse un
Que produit l’algorithme suivant ? tableau de 7 valeurs numériques en les mettant
toutes à zéro.
Tableau Nb(5) en Entier
Exercice 53
Exercice 46
Ecrire un algorithme qui déclare et remplisse un
Proposez un algorithme qui permet de déterminer et
tableau contenant les six voyelles de l’alphabet.
d’afficher le rang de chaque élève.
Exercice 54
Exercice 47 Ecrire un algorithme qui fait le remplissage d’un
Ecrire un algorithme qui permet de créer un tableau tableau par N entiers compris entre 1 et 20.
V3 d’entiers croissants à partir de deux tableaux V1 Ensuite il fait calculer et afficher la somme, le produit
et V2 d’entiers. et la moyenne des éléments du tableau.
N (5<n<=10)
Exercice 48
Exercice 55
Ecrire un algorithme permettant de déclarer un
Ecrire un algorithme qui fait remplir un tableau T par
tableau de 20 entiers (0 à 19) et de vérifier si un
N lettres. Ensuite il fait afficher sans redondance les
entier s’y trouve.
éléments de T.
******************************
Weah j’ai enfin relevé le défi !
Sixième PARTIE
TRAITEMENT
SUR LES CHAINES
DE
CARACTERES
" Le vrai problème n’est pas de savoir si les machines pensent,
mais de savoir si les hommes pensent. "
B.F. SKINNER
Une catégorie privilégiée de fonctions est celle qui nous permet de manipuler des chaînes de caractères.
Nous avons déjà vu qu’on pouvait facilement « coller » deux chaînes l’une à l’autre avec l’opérateur de
concaténation « & ».Mais ce que nous ne pouvions pas faire, et qui va être maintenant possible, c’est
pratiquer des extractions de chaîne ou autres.
En algorithme on utilisera des fonctions spéciales pour faire ces opérations indispensables et classiques.
• Len (chaîne)
Qui renvoie le nombre de caractères contenus dans une chaîne.
Cependant, pour vous épargner des algorithmes fastidieux, vous avez également :
• Left (chaîne, n)
Qui renvoie les n caractères les plus à gauche dans chaîne.
• Right (chaîne, n)
Qui renvoie les n caractères les plus à droite dans chaîne.
EXEMPLES :
Exercice 57
Exercice 64
Ecrire un algorithme qui décompte le nombre de
Ecrire un algorithme qui permet d’inverser une
voyelles contenu dans une quelconque chaine de
chaine de caractères.
caractères (phrase ou mot)
Exercice 65
Ecrire un algorithme qui saisit une phrase et
Exercice 58
l’affiche renversée.
Ecrire un algorithme permettant de supprimer les
Exemple :
espaces superflus dans une chaine de
SOLUTION A VIE
caractères.
VIE A SOLUTION
Exercice 66
Exercice 59
Ecrire un algorithme permettant de lire deux mots
Ecrire un algorithme qui vérifie si un mot saisi au
et d’afficher tous les caractères qui apparaissent
clavier est un palindrome ou pas.
dans les deux caractères sans redondance.
Exercice 60
Exercice 67
Ecrire un algorithme qui permet de tester si deux
Ecrire un algorithme permettant de déterminer la
chaines de caractères représentent des
première position d’une chaine ch1 dans une
anagrammes.
autre ch2.
Exercice 61
Ecrire un algorithme qui permet de chercher er
d’afficher le plus long palindrome contenu dans
une quelconque chaine de caractère.
Exercice 62
Ecrire un algorithme qui permet de vérifier si une
phrase est un totalogramme.
Exercice 63
Ecrire un algorithme qui permet de convertir une
chaine de caractère soit en minuscule ou
majuscule
REMARQUE
Ne vous focalisez pas exclusivement sur ce que nous allons vous proposez comme vrai,
Car un algorithme peut se résoudre de diverses manières cohérentes.
S’il vous plait, merci d’essayer avant de regarder les solutions proposées.
PROPOSITION
DE
Solutions
AUX
Exercices
" L’algorithme, c’est comme un jeu où les règles sont édictées par des normes logiques ! "
Donc ne vous cassez pas la tête, soyez juste réfléchit et vous gagnerez beaucoup de parties…
Club LMIO
Rappel – Pour la partie sur les TABLEAUX seul l’exercice 48 est résolu.
Pour la partie TRAITEMENT SUR LES CHAINES DE CARACTERES seul l’exercice 57 est résolu.
ANALYSE ALGO
Comprenez juste que tout algorithme obéi à un principe universel selon ce schéma :
- DONNEE , - RESULTAT
- ENTREE
- TRAITEMENT - SORTIE
C’est-à-dire tout algorithme a pour vocation de prendre des données (entrée), de faire
leur traitement par une méthode bien définie, en vue de les diffuser en un résultat (sortie).
De ce fait :
- Tout ce qui représentera DONNEE ou ENTREE correspondra à LIRE (Variable)
- Tout ce qui représentera RESULTAT ou SORTIE correspondra à ECRIRE (Variable ou information)
- Enfin tout ce qui représentera les opérations de TRAITEMENT correspondra aux structures :
AFFECTATION ; TESTS (SI… SINON) ; BOUCLES (TANT QUE ; POUR)…
Le tableau suivant représente un aide-mémoire qui vous permettra de mieux aborder les
exercices. La plus part du temps, ces mots clés correspondent aux instructions suivantes :
En Mathématique = ≠ ≥ ≤ √x π
En Algorithmique
== != ou <> >= <= x ^ 0.5 pi = 3.15
ou Programmation
EXERCICE 1
CAS 1
1) 1,5 est une valeur décimale alors que A est du type entier
2) 1 appartient à l’ensemble des entiers naturels
3) Le mot ‘salut’ devait être mis entre les guillemets " "
4) L’expression A+3 doit être vérifiée
CAS 2
5) NON, car lors de la déclaration d’une constante on n’a pas besoin de type
6) OUI, car le programme affichera la valeur de S
7) NON, car on ne sait pas si l’on doit afficher un message ou une variable
8) OUI, car même si la variable est booléenne elle respecte toutes les normes (nom, type…)
9) NON, on devrait écrire l’inverse c’est à dire A ← A + 1
Instructions A B C
A ← 3; 3 0 0
B ← 2 * A; 3 6 0
A ← B; 6 6 0
B ← A - 2; 6 4 0
C ← A + B + 3; 6 4 13
C ← A – B; 6 4 2
Une variable déclarée sans initialisation ou lecture aura une valeur nulle.
EXERCICE 2 EXERCICE 3
ASTUCE – Cet exercice n’a rien de spécial, c’est ASTUCE - Ici il fallait juste chercher un moyen
juste l’approche classique de la complémentarité de garder la valeur de l’une des variables
des notions de LECTURE et ECRITURE, quelque part provisoirement, afin de la réutiliser
c'est-à-dire on saisit une valeur puis on l’affiche. après. Raison pour laquelle on a fait appel à une
Algorithme_lecture_affichage autre variable C, pour y stocker la valeur de A.
VARIABLE A, B, C : REEL Ce principe très utilisé en informatique s’intitule
DEBUT_ALGO permutation circulaire.
er
ECRIRE ("Saisir le 1 réel")
LIRE (A) A B
nd
ECRIRE ("Saisir le 2 réel")
LIRE (B)
ECRIRE ("Saisir le 3
éme
réel") C
LIRE (C)
ECRIRE (A) Algorithme_permutation_circulaire
ECRIRE (B) VARIABLE A, B, C : REEL
ECRIRE (C) DEBUT_ALGO
FIN_ALGO ECRIRE ("Veuillez saisir une première valeur")
LIRE (A)
ECRIRE ("Tapez une deuxième valeur")
LIRE (B)
C←A
A←B
B←C
ECRIRE ("La valeur de A devient: ", A)
ECRIRE ("Celle de B devient maintenant: ", B)
FIN_ALGO
EXERCICE 4 EXERCICE 8
ASTUCE – En fait l’exercice consiste ASTUCE - Ce qu’il faut comprendre c’est
simplement à trouver une méthode adéquate, qu’en mathématique le symbole √ (racine)
pour accoler le nom et le prénom afin que ça est certes permis mais pas en algorithmique,
donne le nom complet de l’individu d’où l’usage de ce fait il faut juste penser à appliquer cette
du et commercial (&) afin de permette la correspondance universelle √x = 𝒙𝟎,𝟓
concaténation des chaines de caractères. (racine de x est équivalente à x exposant 0,5)
avec exposant qui se note par le symbole ^.
Algorithme_nom_complet Algorithme_racine_carrée
VARIBALE prenom, nom : CHAINE DE CARACTERE VARIABLE N, R : REEL
nom_complet : CHAINE DE CARACTERE DEBUT_ALGO
DEBUT_ALGO LIRE (N)
LIRE (prenom) R ← (N^0,5)
LIRE (nom) ECRIRE (R)
nom_complet ← prenom & nom FIN_ALGO
ECRIRE (nom_complet)
FIN_ALGO EXERCICE 9
ASTUCE – V = L * l * h ou V = S * h
EXERCICE 5 Avec S = L * l
Algorithme_conjugaison_verbe_au_futur
Algorithme_volume_piscine
VARIABLE Verbe : CHAINE DE CARACTERE
VARIABLE L, l, H, S, V: REEL
DÉBUT_ALGO
er DÉBUT_ALGO
ECRIRE ("Saisir un verbe du 1 groupe")
ECRIRE ("Saisir la longueur")
LIRE (Verbe)
LIRE (L)
ECRIRE ("Je" & " " & Verbe & "ai")
ECRIRE ("Saisir la largeur")
ECRIRE ("Tu" & " " & Verbe & "as")
LIRE (l)
ECRIRE ("Il" & " " & Verbe & "a")
ECRIRE ("Saisir la hauteur")
ECRIRE ("Nous" & " " & Verbe & "ons")
LIRE (h)
ECRIRE ("Vous" & " " & Verbe & "ez")
S ← L*l
ECRIRE ("Ils" & " " & Verbe & "ont")
V ← S*h
FIN_ALGO
ECRIRE ("le volume nécessaire est : ", V)
FIN_ALGO
EXERCICE 6
Algorithme_calcul_simple
EXERCICE 10
VARIABLE A, B, S, P, M: REEL
ASTUCE – Dans un algorithme, chaque fois
DÉBUT
que vous aurez besoin de connaitre le reste
ECRIRE ("Saisir la première valeur")
de la division de deux entiers, utiliser
LIRE (A)
simplement le symbole % (Modulo)
ECRIRE ("Saisir une deuxième valeur")
LIRE (B) Algorithme_calcul_reste_division
S ← A+B VARIABLE A ; B ; R : ENTIER
ECRIRE ("La somme est :", S) DEBUT_ALGO
P ← A*B LIRE (A)
ECRIRE ("Le produit est :", P) LIRE (B)
M ← S/2 R ← (A%B)
ECRIRE ("La moyenne est :", M) ECRIRE (R)
FIN FIN_ALGO
EXERCICE 7 EXERCICE 11
ASTUCE – 4 = 2 * 2 ; 18 = 9 * 2 Algorithme_calcul_resistance_équivalente
VARIABLE R_equ, R1, R2, R3 : REEL
Algorithme_calcul_double_d’un_entier
DEBUT_ALGO
VARIABLE N, D : ENTIER
LIRE (R1)
DÉBUT_ALGO
LIRE (R2)
ECRIRE ("Saisir une valeur")
LIRE (R3)
LIRE (N)
R_equ ← ((1/R1)+(1/R2)+(1/R3))
D ← (N*2)
ECRIRE (R_equ)
ECRIRE ("Le double du nombre est ", D)
FIN_ALGO
FIN_ALGO
EXERCICE 12 EXERCICE 14
Algorithme_calcul_de_surface ASTUCE – Règle de trois : classe de CM1
VARIABLE larg, long, S : REEL 1km → Ckm
DEBUT_ALGO 100 km → ?
ECRIRE ("Saisir la longueur") Produit des moyens = Produit des extrêmes
LIRE (long) La valeur inconnue à trouver correspondra à la
ECRIRE ("Saisir la largeur") valeur contenue dans la variable C100.
LIRE (larg)
S ← (long*larg) 100 ∗ 𝐶𝑘𝑚
C100 =
ECRIRE ("le rectangle de la longueur : ", long) 1
ECRIRE ("Et de largeur : ", larg)
ECRIRE ("à une surface égale à : ", S) Algorithme_calcul_de_consommation
FIN_ALGO VARIABLE Ckm, C100 : REEL
DÉBUT_ALGO
EXERCICE 13 LIRE (Ckm)
ASTUCE – Soit un rectangle C100 ← (100*Ckm)
ECRIRE (C100)
FIN_ALGO
H
l EXERCICE 15
ASTUCE – 1°C = 273,16 K
Algorithme_conversion_de_degré
L VARIABLE C, K, Conv : REEL
DEBUT_ALGO
Un rectangle est formé par deux triangles. En LIRE (C)
observant la figure, on peut appliquer directement K ← 273,16
le théorème de Pythagore pour trouver la valeur Conv ← (C*K)
de l’hypoténuse (H) de notre triangle choisi et ECRIRE (Conv)
cette valeur correspondra à celle de la diagonale FIN_ALGO
de notre rectangle à trouver au préalable.
Soit la formule à utiliser : EXERCICE 16
H² = L*L + l*l ↔ H = √(𝑳 ∗ 𝑳 ) + (𝒍 ∗ 𝒍 ) ASTUCE – L’exercice 15 nous a déjà donné
une première approche de la notion de
Algorithme_calcul_de_diagonale constante, seulement là-bas l’utilisation n’était
VARIABLE L ; l ; H ; D : REEL pas si commode, car on avait initialisé une
DÉBUT_ALGO variable avec laquelle on devait travailler pour
ECRIRE ("Saisir la longueur") le restant de l’algorithme.
LIRE (L) Cette fois si on fera l’usage d’une constante.
ECRIRE ("Saisir la largeur") ______________________________________
LIRE (l) Algorithme_calcul_du_PTTC
H ← (l*l + L*L) CONSTANTE TVA = 0,18
D ← (H^0,5) VARIABLE PHT, PTTC : REEL
ECRIRE ("le diagonale sera :", D) DEBUT
FIN_ALGO LIRE(PHT)
PTTC ← (1 + TVA) * PHT
ECRIRE (PTTC)
FIN
*************************
- L'évaluation de l'expression fournit une valeur unique qui est le résultat de l'opération
Une expression est évaluée de gauche à droite mais en tenant compte de priorités
Pour les opérateurs arithmétiques donnés ci-dessus, l'ordre de priorité est le suivant,
^ (Élévation à la puissance)
*, / (multiplication, division)
% (modulo)
+, - (addition, soustraction)
EXEMPLE : 2 + 3 * 7 valent 23
3 * 7 = 21 ensuite 2 + 21 = 23
(La multiplication est prioritaire)
EXEMPLE : (2 + 3) * 7 vaut 35
(2 + 3) = 5 ensuite 5 * 7 = 35
La maitrise de ce tableau s’avère intéressante, dans la mesure où il peut s’utiliser dans les structures
alternatives pour faire, le contrôle d’une condition et son inverse (SI… SINON).
Mais aussi dans la partie qui suit sur les structures itératives,
car on l’exploitera pour établir, les conditions d’arrêt et de continuité des boucles.
EXERCICE 17 EXERCICE 19
ASTUCE – Il faut juste faire une simple opération ASTUCE – La valeur absolue d’un nombre est
de comparaison des deux réels. toujours positive. En ce sens, en faisant un test
Et procéder à l’affichage de la plus grande ou de on arrivera à connaitre le signe de la différence
la plus petite valeur selon votre choix. des valeurs fournies. De ce fait, on posera deux
conditions afin de rétablir la nature préalable du
Algorithme_comparaison_simple nombre. C’est-à-dire si la différence de A et de B
VARIABLE A, B : REEL stockée sur R est positive on laisse comme ça
DEBUT_ALGO sinon on multiplie la différence par -1 pour avoir
LIRE (A) une valeur positive.
LIRE (B) Algorithme_valeur_absolue
SI (A>B) ALORS VARIABLE A, B, R, Vabs : REEL
DEBUT_ALORS DEBUT_ALGO
ECRIRE (A) LIRE (A)
FIN_ALORS LIRE (B)
FIN_ALGO R ← (A - B)
SI (R>0) ALORS
EXERCICE 18 DEBUT_ALORS
ASTUCE – Ici on a juste utilisé le principe de Vabs ← R
croissance comparée c’est-à-dire sur les trois ECRIRE (Vabs)
variables utilisées, on prendra la première que FIN_ALORS
l’on va comparer avec les deux autres, prendre le SI (R<0) ALORS
deuxième en faire de même ainsi de suite. DEBUT_ALORS
Juste une remarque l’équivalence n’est pas prise Vabs ← - (R)
en compte. ECRIRE (Vabs)
FIN_ALORS
Algorithme_comparaison_complexe FIN_ALGO
VARIABLE A, B, C : REEL
DEBUT_ALGO EXERCICE 20
LIRE (A) ASTUCE – Un nombre est pair s’il est divisible
LIRE (B) par 2 ou écrit sous la forme 2n, un nombre est
LIRE (C) impair, si le reste de sa division par 2 donne 1 ou
SI (A>B et B>C) ALORS il s’écrit sous la forme 2𝑛 + 1
DEBUT_ ALORS
ECRIRE (A) Algorithme_parité_d’un_nombre
FIN_ ALORS VARIABLE n, Pair, Impair: REEL
SI (B>A et A>C) ALORS DEBUT_ALGO
DEBUT_ ALORS LIRE (n)
ECRIRE (B) SI (n%2=0) ALORS
FIN_ ALORS DEBUT_ ALORS
SI (C>A et A>B) ALORS ECRIRE ("Pair")
DEBUT_ ALORS FIN_ ALORS
ECRIRE (C) SI (n%2=1) ALORS
FIN_ ALORS DEBUT_ ALORS
FIN_ ALGO ECRIRE ("Impair")
FIN_ ALORS
FIN_ALGO
EXERCICE 21 EXERCICE 23
ASTUCE – Dans cet exercice, nous allons juste ASTUCE –
utiliser la concaténation et sur la base des titres
fournis, l’algorithme conditionnera le résultat à Signe A Signe B Signe de A * B
afficher selon le genre (Mr ou Mme). + + +
- - +
Algorithme_titre - + -
VARIABLE P, N, Nom_C, Titre : CHAINE + - -
DEBUT_ALGO
LIRE (Titre)
Souvenez-vous en classe de 5éme :
LIRE (P)
L’ami de mon ami est mon ami
LIRE (N)
L’ennemi de mon ennemi est mon ami
Nom_C ← P &" " & N
SI (Titre = "Mr") ALORS
L’ennemie de mon ami est mon ennemi
DEBUT_ ALORS
L’ami de mon ennemie est mon ennemi
ECRIRE ("Mr " & Nom_C &" soyez le bienvenu")
Le reste n’est que de la logique!
FIN_ ALORS
SI (Titre = "Mme") ALORS Algorithme_signe_d’un_produit
DEBUT_ ALORS VARIABLE A, B : REEL
ECRIRE ("Mr " & Nom_C &" soyez la bienvenue") DEBUT_ALGO
FIN_ ALORS LIRE(A)
FIN_ALGO LIRE (B)
SI ((A>0 et B>0) ou (A<0 et B<0)) ALORS
EXERCICE 22 DEBUT_ ALORS
ASTUCE – Dans cet exercice il fallait juste savoir ECRIRE ("Le produit sera positif")
comment transcrire une valeur comprise dans un FIN_ ALORS
intervalle en algorithme. En ce sens, là où l’on a SI ((A>0 et B<0) ou (A<0 et B>0)) ALORS
Age appartient à [20 ; 45] va se traduire par une DEBUT_ ALORS
expression composée du genre, ECRIRE ("Le produit sera négatif")
(Age ≥ 20 et Age ≤ 45) pour symboliser l’aspect FIN_ ALORS
d’encadrement. Après cela faire usage d’une SI (A=0 ou B=0) ALORS
variable booléenne pour y stocker l’expression DEBUT_ ALORS
composée suivi de l’autre variable notamment ECRIRE ("Le produit sera nul")
sexe, afin d’éviter d’avoir des conditions longues FIN_ ALORS
lors de l’écriture de la structure alternative. Enfin FIN_ALGO
dans cet algorithme, deux cas étaient juste de Remarque - Une solution, plus commode est
prévalence le cas où l’on paie l’impôt et le cas envisageable en utilisant les variables
contraire. booléennes.
Pensez également aux tables de vérité !
EXERCICE 24
Algorithme_paiement_impot
ASTUCE – Soient les équations suivantes :
VARIABLE Age : ENTIER
2x + 3 = 0
Sexe : CHAINE DE CARACTERE
2x = -3
C1, C2 : BOOLÉENNE
x = -3/2
DEBUT_ALGO
LIRE (Age)
0x + 3 = 0
LIRE (Sexe)
0x = -3
C1 ← (Age ≥ 18 et Sexe = ‘M’)
x = - 3 / 0 (impossible)
C2 ← ((Age ≥ 20 et Age ≤ 45) et Sexe = ‘F’) er
SI (C1 ou C2) ALORS Algorithme_equation_du_1 _degré
DEBUT_ALORS VARIABLE a, b, x : REEL
ECRIRE ("Paie l’impôt") DEBUT_ALGO
FIN_ ALORS LIRE (a)
SINON LIRE (b)
DEBUT_SINON SI (a = 0) ALORS
ECRIRE ("Ne paie pas l’impôt") DEBUT_ ALORS
FIN_SINON ECRIRE ("Impossible")
FIN_ALGO FIN_ ALORS
SI (a!=0) ALORS
DEBUT_ ALORS
x← b/a
ECRIRE (x)
FIN_ ALORS
FIN_ALGO
EXERCICE 25 EXERCICE 26
nd
ASTUCE – Soit une équation du 2 degré de la ASTUCE – Cet exercice nous donne un aperçu
forme : (E) : 𝑎𝑥² + 𝑏𝑥 + 𝑐 = 0 du principe de base de la réalisation, de toute
Avec a, b et c des réels calculatrice. Vous tapez un premier opérande
Si a = 0 alors suivi d’un opérateur ensuite d’un autre opérande,
nd
(E) n’est pas du 2 degré. Maintenant le calcul consigné sera conditionné
par le signe précisé donc si c’est (+) l’algorithme
Si a ≠ 0 alors exécutera le bloc d’addition ainsi de suite. En fin
Calcul du delta (𝐷) = 𝑏² − 4 ∗ 𝑎 ∗ 𝑐 d’exécution il affichera le résultat stocké dans la
- Si (D<0) alors variable (R). Si un problème de compréhension
(E) n’admet aucune racine. se pose, observez votre machine à calculer.
- Si (D=0) alors Algorithme_calculatrice_simple
(E) admet une racine double. VARIABLE A, B, R : REEL
- Si (D>0) alors Signe : CHAINE DE CARACTERE
(E) admet deux racines. DEBUT_ALGO
nd
Algorithme_equation_du_2 _degré LIRE (A)
VARIABLE a, b, c, x1, x2, x0, D : réel LIRE (Signe)
DEBUT_ALGO LIRE (B)
LIRE (a) SELON (Signe)
LIRE (b) DEBUT_SELON
LIRE (c) + : R ← (A + B)
SI (a = 0) ALORS - : R ← (A – B)
DEBUT_ ALORS * : R ← (A * B)
nd
ECRIRE ("L’équation n’est pas du 2 degré") / : R ← (A / B) // Pensez au cas où B = 0
FIN_ ALORS FIN_SELON
SINON ECRIRE (R)
DEBUT_SINON FIN_ALGO
D ← (b^2) - (4*a*c)
SI (D<0) ALORS EXERCICE 31
DEBUT_ ALORS ASTUCE – Cet exercice nous donne un aperçu
ECRIRE ("Pas de solution possible") de ce qu’est l’appréciation automatique. Fallait
FIN_ ALORS juste comprendre comment définir les intervalles
SI (D=0) ALORS de notes donnés selon le libellé de l’exercice et
DEBUT_ ALORS sur cette base conditionnée la mention ou
x0 ← −
b l’appréciation à afficher via un message.
2∗a
ECRIRE (x0) Algorithme_appréciation
VARIABLE Note : réel
FIN_ ALORS
Mention : CHAINE DE CARACTERE
SI (D>0) ALORS
DEBUT_ ALORS DEBUT_ALGO
LIRE (Note)
−b − D^0,5 SI (Note < 10) ALORS
x1 ← DEBUT_ ALORS
2∗a
Mention ← "Redouble"
−b + D^0,5 FIN_ ALORS
x2 ←
2∗a SI ((Moy>=10) et (Moy<12)) ALORS
ECRIRE (x1 ; x2) DEBUT_ ALORS
FIN_ ALORS Mention ← "Passable"
FIN_SINON FIN_ ALORS
FIN_ALGO SI ((Moy>=12) et (Moy<14)) ALORS
DEBUT_ ALORS
Mention ← "Assez Bien"
FIN_ ALORS
SI ((Moy>=14) et (Moy<16)) ALORS
DEBUT_ ALORS
Mention ← "Bien"
FIN_ ALORS
SI ((Moy>=16) et (Moy<18)) ALORS
DEBUT_ ALORS
Mention ← "Très Bien"
FIN_ ALORS
SI (Moy>=18) ALORS
DEBUT_ ALORS
Mention ← "Excellent"
FIN_ ALORS
ECRIRE (Mention)
FIN_ALGO
Algorithme_date_du_lendemain
VARIABLE J, M, A, B, C, D: ENTIER
B1, B2, B3, B4, B5, B6: BOOLÉENNE
DEBUT_ALGO Une fois la partie sur les boucles maitrisées pensez
LIRE J après à améliorer l’algorithme, en apposant des
LIRE M contrôles de saisie au niveau de la lecture des
LIRE A variables J, M, A.
B ← A/100
C ← A%4
D ← A%100
B1 cas de la fin d’année
B1 ← (J=31 ET M=12)
B2 cas des autres mois sauf Février
B2 ← (J>=1 ET J<=29 ET M!=2)
B3 ← (J=28 ET M=2) B3 cas du mois de Février
B4 ← (C=0 ET D!=0) OU (D=0 ET B=0) B4 c’est pour gérer l’année bissextile
B5 ← (J=29 ET M=2) B5 cas du mois de Février à année bissextile
B6 ← (J=30 ET (M=4 ou M=6 ou M=9 ou M=11) B6 cas des mois à 30 jours
B7 ← (J=31 ET (M=3 ou M=5 ou M=7 ou M=8 ou M=10) B7 cas des mois à 31 jours, excepté Décembre
//
SI (B1) ALORS
DEBUT_ALORS Par principe, ce bloc correspondra au cas où la
J←1 date du lendemain vire au premier jour de l’an
M←1 raison pour laquelle sur la base de la condition
A←A+1 fixée,
ECRIRE ("Demain votre date sera: ", J, M, A)
J sera égal à 1, M = 1 et pour l’année y ajoutera + 1 .
FIN_ALORS
//
SINON
DEBUT_SINON Le bloc suivant quant à lui correspondra au cas
SI (B2 OU (B3 ET B4)) ALORS générique de changement quotidien de la date
DEBUT_ALORS raison pour laquelle, la date du lendemain sera la
J←J+1 valeur du jour d’hier sur laquelle on ajoute 1,
ECRIRE ("Demain votre date sera: ", J, M, A) J sera égal à J (jour précédent) + 1
FIN_ALORS
//
SINON
DEBUT_SINON Ce cas correspondra à la situation ou le virement
SI ((B5 ET B4) OU (B6) OU (B3) OU (B7)) ALORS de date coïncidera avec un changement de mois, la
DEBUT_ALORS date du lendemain sera une réinitialisation du jour à
J←1 1 avec un changement de mois. Alors le piège à
M ← M+1 prévoir sera le cas du mois à 30 jr ou 31 jr, le cas
ECRIRE ("Demain votre date sera: ", J, M, A) d’un février lequel son année est bissextile,
FIN_ALORS J = 1, M=M+1
FIN_SINON
FIN_SINON
FIN_ALGO
EXERCICE 29 Algorithme_suite_géométrique
ASTUCE – La table de multiplication obéie à un principe CONSTANTE : r = 2
unanime selon lequel, on répète n fois l’entier n à VARIABLE U, S : ENTIER
multiplier par une série de valeur admettant une suite DEBUT_ALGO
consécutive allant de 1 à 12 par exemple. Chaque U←5
multiplication de l’entier n et d’un élément de la série, POUR i ALLANT DE 0 à 9
correspondra a un produit. DEBUT_POUR
U←U*r
Algorithme_table_de_multiplication S←S+U
VARIABLE n, i : ENTIER FIN_POUR
DEBUT_ALGO ECRIRE (S)
LIRE (n) FIN_ALGO
POUR i ALLANT DE 1 à 12
DEBUT_POUR EXERCICE 32
ECRIRE (n,"x", i,= n*i) ASTUCE – Juste qu’ici fallait seulement créer un
FIN_POUR principe de rejet de la valeur non comprise sur
FIN_ALGO l’intervalle fixé. En ce sens l’usage d’une boucle,
tant que s’avère nécessaire, avec une condition de
EXERCICE 30 rejet qui sera l’inverse de l‘assertion donné dans le
ASTUCE – Le principe est juste que l’algorithme va libellé. C’est-à-dire dans l’exercice on a dit :
parcourir la liste des entiers consécutifs allant de 1 à 20, n doit appartenir [1 ; 31]
maintenant il va faire leur somme à part ensuite donc l’inverse sera n ne doit pas appartenir [1 ; 31]
enchainé par leur produit. Seulement la spécificité de Voir le tableau de correspondance à la page 27
cet exercice est que la variable qui doit stocker le Algorithme_rejet_fausse_valeur
produit des entiers doit être initialisé tout à fait au début VARIABLE n : ENTIER
à 1 sinon vous aurez jamais votre produit car n’oubliez DEBUT_ALGO
pas qu’une variable déclarée, sans initialisation aura LIRE (n)
comme valeur par défaut 0 et 0 multiplié par un nombra TANT QUE (n<1 et n>31) FAIRE
à l’infini donnera toujours 0. DEBUT_TANT QUE
LIRE (n)
Algorithme_somme_et_produit_sur_intervalle FIN_TANT QUE
VARIABLE n, Prod, Som, i, j : ENTIER ECRIRE ("Ok")
DEBUT_ALGO FIN_ALGO
Som ← 0
POUR i ALLANT DE 1 à 20 REMARQUE : Ce morceau de code assez simple est
DEBUT_POUR très important en programmation, il représente ce
Som ← Som+i qu’on appelle la notion de CONTROLE DE SAISIE,
FIN_POUR très utilisé dans beaucoup de domaine en
Prod ← 1 informatique…
POUR j ALLANT DE 1 à 20
DEBUT_POUR EXERCICE 33
Prod ← Prod*i ASTUCE – Le factoriel d’un entier n c’est seulement
FIN_POUR le produit enchainé et cumulé des entiers consécutif
FIN_ALGO allant de 1 à n, on sait que le calcul du factoriel de 5
donne 120, donc voici le principe :
EXERCICE 31 5!=1x2x3x4x5
ASTUCE – Une suite c’est juste une somme ou 1 x 2 = 2 ; 2 x 3 = 6 ; 6 x 4 = 24 ; 24 x 5 = 120
l’obtention d’une valeur se base sur une valeur Donc on voit nettement que le produit déjà calculé
er
précédente en y adjoignant une raison, si c’est une suite représentera le 1 membre du prochain produit et le
nd
arithmétique on additionne la raison au cas d’une suite 2 membre, l’entier qui suit ainsi de suite jusqu’au
géométrique on la multiplie. dernier entier.
Pour notre exemple nous avons le calcul de la suite Algorithme_calcul_factoriel
géométrique des 10 premiers termes de : VARIABLE n, F, i : ENTIER
U0 = 5 et de r = 2 DEBUT_ALGO
La logique se passera comme suit : LIRE (n)
U0 = 5 F← 1
U1 = 5 * 2 = 10 POUR i ← 1 à n // Cette notation a un même sens
S = 10 que " POUR i ALLANT DE 1 à n "
U2 = 10 * 2 = 20 DEBUT_POUR
S = 10 + 20 = 30 F ← F*i
Ainsi de suite jusqu’à atteindre les 10 termes. FIN_POUR
ECRIRE (F)
FIN_ALGO
© Mars 2015, Tous droits réservés. Club LMIO
Université de Thiès, UFR SES ALGO, ASTUCE ET CODE | 39
EXERCICE 34 EXERCICE 36
ASTUCE – Dans cet exercice trois aspects ASTUCE – On appliquera le même principe que celui
interviennent. Le premier c’est de saisir un nombre de de l’exercice précédent seulement ici il faut modifier
fois bien défini une série de notes ou le calcul de la la condition en faisant la recherche des nombres
somme de ces dernières s’effectuera simultanément. impairs, en excluant tous ceux qui sont divisibles par
Le second sera le contrôle de saisie c’est-à-dire qu’une 7.
note doit être comprise entre [0 et 20]. __________________________________________
Enfin le calcul final de la moyenne du nombre de note Algorithme_recherche_de_nombre_impair
saisie. VARIABLE i : ENTIER
DEBUT_ALGO
Algorithme_calcul_limité_de_la_moyenne POUR i ALLANT DE1 à 100
VARIABLE Note, i, n, S, M : RÉEL DEBUT_POUR
DEBUT_ALGO SI (i%2=1 et i%7≠0) ALORS
S←0 DEBUT_ALORS
LIRE (n) ECRIRE (i)
POUR i ALLANT DE 1 à n FIN_ALORS
DEBUT_POUR FIN_POUR
LIRE (note) FIN_ALGO
TANT QUE (note>20 ou note<0) FAIRE
DEBUT_TANT QUE EXERCICE 37
LIRE (note) ASTUCE - Cet algorithme nous demande de faire le
FIN_TANT QUE calcul d’une somme mais une somme assez
S ← S + note complexe car pour l’avoir, faudra faire le calcul d’un
FIN_POUR ensemble de puissance, ainsi que leur factoriel
M ← S/n respectif, faire leur division en tenant compte de la
ECRIRE (M) variation des signes.
FIN_ALGO Donc quatre éléments interviennent calcul de la
puissance et du factoriel et variation du signe enfin
EXERCICE 35 faire la somme.
ASTUCE – Un nombre est pair s’il est divisible par 2,
cette condition s’incrustera dans une boucle qui se Algorithme_calcul_somme_complexe
chargera de faire la vérification sur 100 entiers VARIABLE x, F, P, S, i, a : REEL
consécutifs et une fois cette condition respectée DEBUT_ALGO
l’algorithme affichera le nombre. LIRE (x)
POUR i ALLANT DE 1 à 5
Algorithme_recherche_de_nombres_pairs DEBUT_POUR
VARIABLE i, P : ENTIER SI (i%2=0) ALORS
DEBUT_ALGO DEBUT_ALORS
POUR i allant de 1 à 100 P ←1
DEBUT_POUR P ← -1 * (P*x)
SI (i%2=0) ALORS FIN_ALORS
DEBUT_ALORS SI (i % 2 =1) ALORS
ECRIRE (i) DEBUT_ ALORS
FIN_ALORS P ←1
FIN_POUR P ← (P*x)
FIN_ALGO FIN_ ALORS
POUR a ALLANT_DE 1 à i
DEBUT_POUR
F←F*a
FIN_POUR
S ← S + (P/F)
FIN_POUR
FIN_ALGO
EXERCICE 38 EXERCICE 39
ASTUCE – A chaque fois qu’on demande à un élève de ASTUCE – En mathématique quand on nous demande
CE1 4 x 3 sans réfléchir il dira 12. En fait ce résultat si 2 ² automatiquement nous répondons par 4.
simple est basé sur une logique intéressante. Ça parait simple, oui en mathématique mais en
Tout produit est en réalité une suite d’addition limitée. algorithme ce résultat obéi à un processus cohérent le
A chaque fois que nous avons a x b en fait c’est faire quel est le suivant : 2² = 2 x 2
n
l’addition par cumul de a, b fois. Donc soit l’écriture générique de la puissance x ceci
Donc 4 x 3 sera 4 + 4 + 4 veut dire qu’il faut multiplier par cumul x, n fois.
Algorithme_produit_sans_multiplication Algorithme_calcul_puissance
VARIABLE A, B, P, i : ENTIER VARIABLE x, n, Puiss, i : ENTIER
DEBUT_ALGO DEBUT_ALGO
P←1 LIRE (x)
LIRE (A) LIRE (n)
LIRE (B) Puiss ← 1
POUR i ALLANT DE 1 à B POUR i ALLANT DE 1 à n
DEBUT_POUR DEBUT_POUR
P←P+A Puiss ← Puiss * x
ECRIRE (P) FIN_POUR
FIN_POUR ECRIRE (Puiss)
FIN_ALGO FIN_ALGO
EXERCICE 40 EXERCICE 41
ASTUCE – Un nombre est divisible par un entier si le reste ASTUCE – Un nombre est parfait s’il est égal à la
de leur division donne 0. Donc fallait juste chercher à somme de ses diviseurs respectifs excepté lui-même.
poser cette divisibilité comme condition et le souscrire 6 admet comme diviseur 1 ; 2 ; 3
dans une boucle qui se chargera d’afficher le quelconque Maintenant 1 + 2 + 3 = 6, donc il est parfait
diviseur si cette condition est vérifiée. Algorithme_nombre_parfait
VARIABLE n, i, S : ENTIER
Algorithme_recherhce_de_diviseur DEBUT_ALGO
VARIABLE n, i : ENTIER LIRE (n)
DEBUT_ALGO POUR i ALLANT DE 1 à n/2
LIRE (n) DEBUT_POUR
POUR i ALLANT DE 1 à n SI (n%i=0) ALORS
DEBUT DEBUT_ ALORS
SI (n%i=0) ALORS S←S+i
DEBUT_ALORS FIN_ ALORS
ECRIRE (i) FIN_POUR
FIN_ALORS SI (S=n) ALORS
FIN_POUR DEBUT_ALORS
FIN_ALGO ECRIRE (n,"est un nombre parfait")
FIN_ ALORS
EXERCICE 42 FIN_ALGO
ASTUCE- La division de 24 par 3 donne 8 et il reste 1.
Comprenez qu’en fait une division n’est rien d’autre qu’une (Suite exercice 42)
soustraction cumulée répétitive de a sur b. Algorithme_quotient_et_reste_sans_division
En ce sens tant que b est plus petit que a donc une VARIABLE a, b, R, Q : ENTIER
soustraction de la valeur de a déjà calculée sur b est DEBUT_ALGO
possible. Le quotient représentera le nombre de fois ou la LIRE (a)
soustraction est effectuée et le reste la dernière valeur LIRE (b)
trouvée. TANT QUE (a >= b) FAIRE
Exemple : 24 / 3 = 8 et il reste 1 DEBUT_TANT QUE
En fait le principe de calcul est le suivant : a←a–b
Q←Q+1
24 – 3 = 22 FIN_TANT QUE
22 – 3 = 19 R←a
19 – 3 = 16 ECRIRE (Q)
16 – 3 = 13 ECRIRE (R)
13 – 3 = 10 FIN_ALGO
10 – 3 = 7
7–3=4
4–3=1
Donc le principe de résolution est le suivant, c’est qu’à chaque fois que l’on fournit un intervalle de valeur,
l’algorithme part de l’entier le plus petit vers le plus grand en prenant entier par entier. En faisant un étalage
des entiers consécutifs de chacun de ces derniers, puis faire une vérification des diviseurs adéquats en
même temps. Et pour chaque entier, dont le nombre totalisé de diviseur est égale à 2 (1 et l’entier lui-
même) alors l’algorithme le retient comme nombre premier.
Exemple : Soit l’intervalle suivant [5 ; 6]
Sur ce, 5 sera retenu comme nombre premier car il admet deux diviseurs 1 et 5 (lui-même)
Algorithme_recherhce_de_nombres_premiers
VARIABLE n, m, i, j, nbdiv : ENTIER
DEBUT_ALGO
LIRE (n)
LIRE (m)
//
TANT QUE (n > m) FAIRE Le contrôle de saisi est placé ici, pour
DEBUT_TANT QUE
permettre de faire une vérification des
ECRIRE (n, "doit être plus petit que m !")
LIRE (m)
deux entiers fournis car le 1er doit être
FIN_TANT QUE toujours inférieur au 2nd.
//
POUR i ALLANT DE n à m Ici la boucle imbriquée nous permet à
DEBUT_POUR priori de copter un entier, en suite de
POUR j ALLANT DE 1 à i faire l’étalage de ses valeurs
DEBUT_POUR consécutives.
SI (i % j = 0) ALORS Maintenant la structure conditionnelle
DEBUT_ALORS (SI) nous permettra de faire le décompte
nbdiv ← nbdiv + 1
FIN_SI
des nombres de diviseurs sur la base de
FIN_POUR la condition posée.
//
SI (nbdiv = 2) ALORS Enfin cette structure conditionnelle nous
DEBUT_ALORS permettra réellement de savoir, si oui ou
ECRIRE (i) non l’entier à vérifier est effectivement un
FIN_SI nombre premier, sur la base du
FIN_POUR décompte du nombre de diviseur. Qui
FIN_ALGO
doit être 2.
TABLEAUX
EXERCICE 48
ASTUCE – Le principe est qu’il faudra déclarer un tableau à 20 valeurs sur ce, l’algorithme se chargera de les étalées
de manière consécutive. En ce sens quand nous aurions besoin de rechercher une valeur, on le saisie. De ce fait
l’algorithme va initialiser une variable booléenne en l’attribuant FAUX, avant de parcourir toutes les valeurs du
tableau. Une fois qu’il trouve la valeur recherchée, la variable Ok change de valeur pour devenir VRAIE et la
vérification de ce changement conditionnera l’affichage de la valeur à rechercher.
Algorithme_recherche_entier_dans_un_tableau
TABLEAU TAB (19) : ENTIER
VARIABLE N, i : ENTIER
Ok : BOOLEENNE
DEBUT_ALGO
ECRIRE ("Entrez la valeur à rechercher")
LIRE (N)
Ok ← Faux
POUR i ← 0 à 19
DEBUT_POUR
SI (N = Tab(i)) ALORS
DEBUT_ALORS
Ok ← Vraie
FIN_ALORS
FIN_POUR
SI (Ok) ALORS
DEBUT_ALORS
ECRIRE (N, " fait partie du tableau")
FIN_ALORS
SINON
DEBUT_SINON
ECRIRE (N, " ne fait pas partie du tableau")
FIN_SINON
FIN_ALGO
EXERCICE 57
ASTUCE – A chaque fois que l’on fournit une phrase, le programme utilisera d’abord la fonction len pour faire le
décompte complet du nombre de caractères de la phrase, ensuite avec l’aide d’une boucle il utilisera une condition
d’extraction générale des voyelles. Et à chaque fois que cette condition est satisfaite alors le programme rajoute +1
au compteur de voyelles jusqu'à la fin.
Algorithme_décompte_nombre_de_voyelles
VARIABLE Phrase : CHAINE DE CARACTERE
VARIABLE Nb, i, j : ENTIER
DEBUT_ALGO
ECRIRE ("Entrez une phrase : ")
LIRE (Phrase)
Nb ← 0
POUR i ← 0 à Len (Phrase)
DEBUT_POUR
//
SI (Mid (Phrase, i, 1) = "a" OU Mid (Phrase, i, 1) = "e" OU Mid (Phrase, i, 1) = "i" OU
Mid (Phrase, i, 1) = "o" OU Mid (Phrase, i, 1) = "u" OU Mid (Phrase, i, 1) = "y") ALORS
//
DEBUT_ALORS
Nb ← Nb + 1
FIN_ALORS
//
FIN_POUR
ECRIRE ("Cette phrase compte ", Nb, " voyelles")
FIN_ALGO
PROBLEMES
De
Recherche
" Les premiers 90% du code prennent les premiers 90% du temps de développement.
Les 10% restants prennent les autres 90% du temps de développement "
Tom CARGILL
PAS D’EBAUCHE DE SOLUTIONS POUR CETTE PARTIE, A VOUS D’ALLER LES CHERCHER.
MERCI
PROBLEMES DE RECHERCHE
Comprenez juste qu’un problème algorithmique est formé d’un ensemble de petits exercices.
Donc basez-vous simplement sur ce que vous avez déjà traité sur les parties précédentes,
accompagné d’un peu de réflexion.
Remarque : Un contrôle de saisie est recommandé, pour chaque cas de saisie de données.
PROBLEME 1
Ecrire un algorithme qui permet de calculer le développement limité,
de la fonction exponentielle et celle logarithmique de x à l’ordre n.
x et n doivent être fournis par l’utilisateur.
PROBLEME 2
Ecrire un algorithme qui permet à l’utilisateur de saisir un jour, un mois, une année et qui affiche :
- 1 Si la date est valide et 0 sinon
- Si l’année est bissextile ou pas
- Le nombre de jour du mois de cette année
PROBLEME 3
Ecrire un algorithme qui demande à l’utilisateur de saisir une série de nombre
et qui affiche le plus grand et le plus petit élément.
PROBLEME 4
Ecrire un algorithme qui demande à l’utilisateur de saisir une série de nombre positif ou nul
représentant le nombre de buts marqué par journée dans un championnat de Football de N
journées. L’algorithme calcule et affiche le nombre de buts marqués en moyenne et le nombre de
journées ou cette moyenne a été dépassée.
PROBLEME 5
Ecrire un algorithme qui te demande un nombre et qui t’affiche son plus grand diviseur (PGD), son
plus grand diviseur premier (PGDP) et son plus petit diviseur premier (PPDP).
PROBLEME 6
M. Bousso veut utiliser l’ordinateur pour faire le classement semestriel de ses étudiants de la
LMIO sur la base de leur moyenne. Sachant que sa classe contient 15 étudiants
M. Bousso veut afficher les résultats comme suit, soit l’exemple :
N° Nom Prénom (s) Note 1 Note 2 Moyenne Décision Rang
1 Nom 1 Prénom 1 10 10 10 Passable 1
2 Nom 2 Prénom 2 5 5 5 Faible 2
Veuillez lui proposer une méthode lui permettant de faire cette opération fastidieuse.
*************************
CASSE - TETE
PROBLEME 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 d'un an.
*********************