La MIS ne saurait omettre de remercier le
corps administratif et les enseignants de notre
formidable institut, l’INPHB pour les très bonnes
conditions de travail et d’épanouissement dans
lesquelles nous évoluons. A nos professeurs, pour
les conseils et cours qu’ils nous ont donnés et qu’ils
continuent de nous donner, à nos ainés en
entreprise, à nos familles, à nos amis à tous ceux
qui ont bien voulu assister à la Binary’s Day
première édition et à toutes les personnes qui de
loin ou de près ont contribué à la réussite de cette
journée carrière.
Créée le 02 Novembre 2001, la MIS (Manager of Information Systems) association est
l’association des ingénieurs et élèves ingénieurs informaticiens de l’Institut National
Polytechnique Houphouët Boigny. Le siège de l'association est à l'INP-HB centre. C'est une
association autonome, apolitique et non confessionnelle.
Les objectifs assignés à la MIS sont :
- De rassembler tous les élèves ingénieurs informaticiens de l'INP-HB Yamoussoukro pour
l’approfondissement de leurs connaissances et favoriser leur spécialisation dans les
différents domaines de l’informatique :
il s’agit d’accentuer les connaissances théoriques vues au cours,
de mettre en œuvre ces connaissances par des travaux pratiques et par la
réalisation de projets,
de participer à des sujets de recherches dans le domaine des mathématiques et de
l’informatique.
- De mener toute action pour faciliter l'accès de ses membres aux nouvelles technologies
de l'information et de la communication,
- De développer et entretenir un partenariat étroit d’une part avec les universités ou
instituts du domaine informatique pouvant aider l’association
à construire un label de haut niveau de l’ingénieur
informaticien de l’INP-HB et d’autre part avec
les entreprises leaders,
- Et enfin de faire participer les anciens à la
formation de leurs cadets par des conseils,
des apports financiers à l’association, des
stages et leurs suivis.
Ce document est un annale d’Algorithme basique qui
vise à aider les élèves en classes préparatoires à se préparer
efficacement aux concours d’entrée en cycles ingénieurs.
SOMMAIRE
Algos simples 4
Alternatives 5
Itératives 6
Tableaux 7
Fonctions 8
Procédures 9
Maîtres du monde 10
Corrections 11
Conseil d’usage 24
0001
1. Affichage
Ecrire un algorithme qui demande le nom de l’utilisateur et l’affiche à l’écran.
Correction.
2. Echanger
Ecrire un algorithme permettant d’échanger les valeurs de deux variables entières.
Correction.
3. Moyenne de trois notes
Écrire à un algorithme qui à partir de trois notes d’un étudiant et de trois coefficients calcule la
moyenne.
Correction.
4. Carré d’un nombre.
Ecrire un algorithme qui calcule le carré d’un nombre réel lu.
Correction.
5. Permutation circulaire
Écrire un algorithme qui permet d’effectuer une permutation circulaire des valeurs entières de
trois variables x, y, z (c’est-à-dire la valeur de y dans x, la valeur de z dans y et la valeur de x dans
z.
Correction
0010
6. Affichage2
Ecrire un algorithme qui permet à l’utilisateur de saisir son nom puis affiche « Bonjour Monsieur
XX » ou « Bonjour Mme » selon le sexe.
Correction.
7. Nombre de jours de congés
Dans une entreprise, le calcul des jours de congés payés s’effectue de la manière suivante : si une
personne est entrée dans l’entreprise depuis moins d’un an, elle a droit à deux jours de congés
par mois de présence, sinon à 28 jours au moins. Si c’est un cadre et s’il est âgé d’au moins 35 ans
et si son ancienneté est supérieure à 3 ans, il lui est accordé 2 jours supplémentaires. S’il est âgé
d’au moins 45 ans et si son ancienneté est supérieure à 5 ans, il lui est accordé 4 jours
supplémentaires, en plus des 2 accordés pour plus de 35 ans. Écrire un algorithme qui calcule le
nombre de jours de congés à partir de l’âge, l’ancienneté et l’appartenance ou non au collège
cadre d’un employé.
Correction.
8. Test final
Lors du concours d’entrée à l’école supérieur d’incertitude , le conseil désire calculer la
moyenne des candidats selon le modèle suivant :
La note du test léger est portée au coefficient 2
La note du test lourd a pour coefficient 3
La note de l’examen final a pour coefficient 4
Un élève est admis si et seulement si sa moyenne est supérieure ou égale à 12.00/20. Ainsi, dans
le but d’avoir plus d’admis à ce concours, le conseil décide de prendre la plus grande valeur entre
la note de l’examen final et la moyenne obtenue lors des tests et examens.
Ecrire un algorithme permettant de se prononcer sur l’admission ou non d’un candidat.
Correction.
9. Le temps plus une seconde
Écrire un algorithme qui pour un temps donné (représenté sous la forme : heure, minute,
seconde) retourne le temps (sous la même représentation) après avoir ajouté une seconde.
Correction.
0011
10. Décomposition d’une somme d’argent.
Écrire un algorithme qui à partir d’une somme d’argent donnée donne le nombre minimal de
billets de 500 F et le nombre de pièces de 200 F qui la compose. L’un des nombres de billets et de
pièces doit être non nul.
Corrigé.
11. Année bissextile
Ecrire un algorithme permettant de dire si une année est bissextile ou pas.
En déduire un algorithme qui affiche toute les années bissextiles avant 2014.
Astuce : On rappelle qu’une année est bissextile si l’année est divisible par 400 ou qu’elle est
divisible par 4 et non divisible par 100.
Corrigé.
12. A la recherche du maximum
Proposer un algorithme qui donne le maximum d’une liste de valeurs saisies par l’utilisateur et
qui en donne la moyenne.
NB : Utilisation du tableau proscrite.
Corrigé.
0100
A.1 Les itérations
13. Remplissage et affichage d’un tableau
Ecrire un algorithme qui permet de renseigner un tableau d’entier de taille n et d’afficher le
contenu tout en remettant les valeurs comprises entre 12 et 20 à zéro.
Corrigé.
14. Nombre d’occurrence
Ecrire un algorithme qui permet de dire combien de fois on retrouve chaque valeur entière dans
un tableau de n colonne.
Corrigé.
A.2. Les tris
15. Tri Trivial
Il s’agit de faire un tri dans un tableau pour ordonner celui-ci dans l’ordre décroissant des
valeurs numériques. Les données sont des nombres non signés, codés en hexadécimal et
compris entre 0 et 255.
Le tableau est en mémoire centrale à partir de l’adresse TAB. L’exploitation du tableau se fait
par l’examen de deux données successives comme suit :
Si les deux données sont rangés dans le bon ordre on continu l’exploitation.
Si les deux données ne sont pas rangées dans le bon ordre on permute et on continu
l’exploitation.
Lorsqu’on a terminé l’exploitation du tableau on recommence jusqu’à ce que lors d’une
exploitation complète l’on n’ait effectué aucune permutation.
Pour savoir quand arrêter le tri, on test l’indicateur binaire B contenu dans la position mémoire
MEM.
Donner l’algorithme de ce tri trivial
Astuce : n’oublie pas de rester collé aux données de l’énoncé.
Corrigé.
0101
16. Recherche de X
Définir une fonction qui retourne l'indice du premier réel supérieur à x d’un tableau tab, passés
en paramètres. Si x n'est pas présent, on retourne –1.
Corrigé.
17. Dernière occurrence de X
On donne un tableau de taille m en entrée. Définir une fonction qui retourne l’indice de la
dernière occurrence (dernière apparition) d’un nombre X. si ce nombre n’est pas dans le tableau
on retourne -1.
Corrigé.
18. Deuxième plus petit
Définir une fonction qui retourne le 2ème plus petit entier d’un tableau t.
Corrigé.
0110
19. Tri rapide
Le tri rapide fait partie des algorithmes de tri du type "diviser pour régner". C’est l’un des
algorithmes les plus utilisés et également celui qui présente certainement le plus grand nombre
de variantes.
Le tri rapide choisit un élément particulier de la liste de clés, appelé pivot. Il construit ensuite
deux sous-listes gauche et droite contenant respectivement les clés inférieures et supérieures au
pivot. Ainsi pour trier un sous-tableau A[p..r] du tableau initial A[1..n] on retrouve les 3 phases
suivantes :
Diviser : choisir le pivot d'indice q dans le tableau A[p..r]. Partitionner en 3 ce sous-tableau :
o A[p..q-1] contient les clés inférieures à A[q],
o A[q] le pivot
o A[q+1..r] contient les clés supérieures à A[q].
Les deux sous-tableaux gauche et droite peuvent éventuellement être vides.
Régner : les sous-tableaux A[p..q-1] et A[q+1..r] sont traités en appelant récursivement le tri
rapide. Combiner : cette phase est instantanée. Puisque les sous-tableaux sont triés sur place,
aucun travail n'est nécessaire pour les combiner.
Donner une procédure qui réalise ce tri
Corrigé.
20. Tri fusion
Le tri fusion fait également partie des algorithmes de tri du type "diviser pour régner". Cet
algorithme partage le tableau en deux sous-tableaux de taille n/2 qu'il trie. Il fusionne ensuite les
résultats des deux sous-tableaux. On retrouve alors les 3 phases suivantes :
diviser : partager le tableau en deux sous-tableaux de taille n/2. Cette phase est instantanée
puisqu'il suffit de calculer l'indice n/2.
régner : les sous-tableaux sont traités en appelant récursivement le tri fusion.
combiner : c'est cette phase qui contient toute la logique de l'algorithme. La fusion de deux sous-
tableaux déjà triés se fait en les parcourant en parallèle et en plaçant systématiquement
la plus petite clé dans le tableau résultat. Pour cela la procédure FUSION crée deux tableaux
temporaires pour stocker les deux sous-tableaux à fusionner. On utilise une sentinelle à la fin
de chacun de ces 2 tableaux temporaires pour éviter d'ajouter des tests supplémentaires pour
détecter la fin de l'un d'entre eux dans la procédure de fusion. Proposer une procédure pouvant
exécutée ce tri.
Corrigé.
21. Fusion de tableau
Soient deux tableaux A et B. on désire les fusionnés pour obtenir un tableau C trié par ordre
croissant. On n’effectuera aucun tri ou aucune opération sur le tableau C. Proposer un
algorithme.
Astuce Corrigé.
0111
1000
ALGOS SIMPLES Ecrire (‘’ Votre moyenne est ’’ moy)
1. Affichage. Fin.
Algorithme affichage 4. Carré
Var Algorithme carré
nom : chaine Var
Début nbre,carre :reel
Ecrire (‘’Entrez votre nom svp !’’) Début
Lire (nom) Ecrire (‘’Entrez un nombre svp’’)
Ecrire (‘’Votre nom est ’’ nom) Lire (nombre)
Fin. carre<- nbre*nbre
2. Echanger. Ecrire (‘’le carre demandé est :’’ carre)
Algorithme echanger Fin.
Var
a,b,temp : entier 5. Permutation circulaire
Début Même Algo que l’exo échanger (n°2) mais avec trois
variables… faites tourner vos neurones…
Lire (a,b)
temp<-a
ALTERNATIVES
a<-b
6. Affichage 2
b<-temp Algorithme affichage2
ecrire (a,b) Var
Fin. nom : chaine
3. Moyenne. sexe : char
Algorithme affichage
Début
Var
Ecrire (‘’Entrez votre nom et votre sexe svp’’)
note1, note2, note3, moy : Réel
Lire (nom,sexe)
coeff1, coeff2, coeff3 : entier
Si sexe = H alors
Début
Ecrire (‘’Bonjour Monsieur’’ nom)
Ecrire (‘’Entrez vos note svp !’’)
Sinon
Lire (note1, note2, note 3)
Ecrire (‘’Bonjour Madame’’ nom)
Ecrire (‘’ Entrez les coefficients respectifs svp‘’)
Lire (coeff1, coeff2, coeff3)
Fin.
moy<-((note1*coeff1)+(note2*coeff2) +
(note3*coeff3)) / (coeff1+coeff2+coeff3)
7. Nombre de jours congés
Variable
age, tempsEnSec ,anciennete , nbJourDeConge: Entier
cadre : Booleen
Debut
si anciennete<12 alors
nbJourDeConge ← anciennete*2
sinon
nbJourDeConge ← 28
si (cadre=Vrai) alors
Debut
si( age >=35 et anciennete >= 3*12 )alors
nbJourDeConge ← nbJourDeConge+2
si( age >= 45 et anciennete>= 5*12) alors
nbJourDeConge ← nbJourDeConge+4
Fin
Fin.
8. Test final
Variable
Rep, mou, testLeger, testLourd, Exam : Reel
Debut
Lire (testLeger,testLourd, Exam)
moy ← (testLeger*2+testLourd*3 + Exam*4)/7
Si (moy>Exam) Alors
Rep ←moy
Sinon
Rep←Exam
Ecrire (‘La moyenne est : ‘,Rep)
Fin.
9. Temps + une seconde
10. Décomposition d’argent
ALGORITHME argent
Const
BILLET = 500, PIECE =200
Variable
som, nbbillet, nbpiece :ENTIER
DEBUT
Repeter
Ecrire(‘Entre la somme : ‘)
Lire(som)
Jusqua (som>200)
nbbille←0
nbpiece←0
nbbillet←som div BILLET
som←som mod BILLET
nbpiece←som div PIECE
Ecrire(‘il y a ‘,nbbillet, ‘Billet(s) de 500 F et ‘, nbpiece,’ Pièce(s) de 200 F’)
Fin.
11. Année bissextile..
Variable
annee :Entier
Debut
Lire(annee)
Si(annee mod 400 =0 ou annee mod 4=0 ET annee mod 100 <>0) Alors
Ecrire(‘année bissextile’)
Sinon
Ecrire(‘année non bissextile’)
Fin.
ALGORITHME AnneeBissextileAvant2014
Const AN 2014
Variable annee, i :Entier
Debut
Pour annee←1 a AN Faire
Si(annee mod 400 =0 ou annee mod 4=0 ET annee mod 100 <>0) Alors
Ecrire(annee)
Fin.
12. A la recherche du maximum..
Algoruthme Alarecherche
Var
nbre, max : Entier
rep : chaine
Début
rep<- oui
max <- 0
tant que (rep=oui) alors
Ecrire (‘’Entrez un nombre svp’’)
Lire (nbre)
Si nombre>=max alors
max<-nbre
Ecrire (‘’Voulez-vous entrer un nouveau nombre ? ’’)
Lire (rep)
fin tan que
Ecrire (‘’le maximum est’’, max)
Fin.
13. Remplissage et affichage d’un tableau..
Algorithme remplissageetaffichage
Const
n : Entier
Var
nbre ,i :Entier
t : tableau de [1..n] de entier
Début
Pour i<-1,n faire *boucle de remplissage*
Début
Si ((i<12) ou (i>20)) alors
début
Lire (nbre)
t[i]<-nbre
Fin
Sinon
t(i)<-0
fin
Pour i<-1,n faire *boucle d’affichage*
Ecrire (t[i])
Fin.
14. Nombre d’occurrence..
Algorithme Nombreoc
Const
n : Entier
Var
i,j , occ : Entier
t ,N :tableau [1,,n] de entier
Début
Pour i<- 1,n faire
occ<- 0
Pour j<- 1,n faire
Si t[i]=t[j] alors
occ<- occ+1
N[i]<- occ
Fin.
15. Tri trivial
Trivial… faites retourner les méninges…
16. Recherche X
Fonction recherche(in( tab :tableau [1,,nde réel] ; X : Reel)) :Reel
Var
I : Entier
rep : Reel
bool : booléen
Début
rep<- -1
bool<-faux
Tant que ((bool=faux) et (i<=n)) faire
Début
Si tab[i]>X alors
Début
rep<- tab[i]
bool<-vrai
Fin
i<-i+1
Fin
Retourner(rep)
Fin.
17. Dernière occurrence
Fonction lastocc(in( X :reel ;tab :tableau [1..m] de reel)) :reel
Var
i,rep :Entier
Début
Rep<- -1
Pour i<-1,m faire
Si tab[i]=X alors
rep<-i
retourner(rep)
Fin.
18. Deuxième plus petit
Fonction 2min (in( tab :tableau [1..m] de entier)) :entier
Var
i,min,2min : Entier
Début
min<-tab[1]
2min<-tab[1]
Pour i<- 2,m faire
Début
Si tab[i] <= min alors
Début
2min<- min
min<- tab[i]
fin
Sinon
Si tab[i]<=2min alors
2min<-tab[i]
Fin
Retourner (2min)
Fin.
19. Tri rapide
Procedure PERMUTER(A :tableau[1..n]de Entier, i, j :Entier)
Variable temp :Entier
Debut
tmp ← A[i]
A[i] ← A[j]
A[j] ← tmp
Fin.
Fonction PARTITION(A :tableau[1..n] de Entier, p, r :Entier) Entier
Variable x,j,i :Entier
Debut
x ←A[r]
i←p-1
Pour (j ←p à r – 1) Faire
Si( A[j] <= x )Alors
Debut
i←i+1
PERMUTER(A, i, j)
Fin
PERMUTER(A, i + 1, r)
Retourner i + 1
Fin.
ALGORITHME TriRapide(A :tableau[1..n] de Entier, p, r :Entier)
Debut
Si( p < r) alors
Debut
q ←PARTITION(A, p, r)
TRI-RAPIDE(A, p, q - 1)
TriRapide(A, q + 1, r)
Fin
Fin.
20. Tri fusion
Procedure Fusion(A :tableau[1..n]de Entier, IndInf,IndSup,Milieu :Entier)
Variable i,j,k ,N1,N2 :Entier
G:tableau[1.. Milieu – IndInf+1] de Entier
D :tableau[1.. IndSup-Milieu ] de Entier
Debut
N1←Milieu – IndInf+1 //longeur du 1ier tab
N2←IndSup-Milieu // longueur du 2ième tab
Pour i←1 a N1 Faire
G[i] ←A[IndInf –i+1]
Pour i←1a N2 Faire
D[i] ←A[Milieu+i]
i←1
j← 1
Pour k← IndInf a IndSup Faire
Debut
Si(G[i]<R[i]) Alors
Debut
A[k] ←G[i]
i←i+1
Fin
Sinon
Debut
A[k] ←D[j]
j←j+1
Fin
Fin
Fin.
Procedure TriFusion(A :tableau[1..n]de Entier, IndInf,IndSup,Milieu :Entier)
Debut
Si(IndInf <IndSup) Alors
Debut
Milieu←(IndInf +IndSup) div 2
TriFusion(A,IndInf,Milieur)
TriFusion(A,Milieu+1,IndSup)
Fusion(A,IndInf,IndSup)
Fin
Fin.
21. Fusion de tableau
Astuce
On tri d’abord les deux tableaux A et B par ordre croissant puis on recopie les valeurs dans le tableau C tout en les
comparant. Le tableau C ne doit pas contenir des doublons. (Valeur double).
Ici nous choisissons le tri fusion dans l’ordre croissant.
Correction
Procedure FusionTab(A :tableau[1..n] de Entier, B :tableau[1..m]de Entier)
Variable C :tableau[1..m+n]de Entier
i,j,k,x :Entier
Debut
TriFusion(A,1,n) // Tri du tableau A dans l’ordre croissant
TriFusion(B,1,m)// Tri du tableau B dans l’ordre croissant
i←1
j←i
k←i
tailleC←m+n
Repeter
Si(A[i]< B[j])Alors
Debut
C[k] ←A[i]
i←i+1
Fin
Si(A[i] >B[j]) Alors
Debut
C[k] ←B[j]
j←j+1
Fin
Sinon // On élimine les doublons cas d’égalité
Debut // A[i] = B[j]
C[k] ←B[j]
j←j+1
i←i+1
tailleC←tailleC-1 // une case vide serait disponible dans le
Fin // tableau C
k←k+1
Jusqua(i >n OU j> m)
Si(i> n)Alors // on copie le reste des valeurs du tab B dans tab C
Pour x←k a tailleC Faire
Debut
C[x] ←B[j]
j←j+1
Fin
Si(j >m) Alors // on copie le reste des valeurs du tab A dans tab C
Pour x←k a tailleC Faire
Debut
C[x] ←A[i]
i←i+1
Fin
Si(tailleC<n+m)Alors // on remplit les cases vides restantes du tableau C avec des 0
Pour x←tailleC+1 a m+n)Faire
C[x] ←0
Fin.
CONSEIL D’USAGE
1) Révisez vos cours, maitrisez les algos basique de ce document ainsi que celui de votre cours et reprenez vos devoirs.
2) Dormez suffisamment car c’est dans le sommeil qu’on assimile.
3) Ne pas négliger les autres matières.
C’est tous ce qu’il faut pour faire de vous un potentiel MIS.. Bonne chance pour vos concours…
Baron et Kpo