0% ont trouvé ce document utile (0 vote)
8 vues21 pages

Annales d'Algorithmes pour Ingénieurs

Transféré par

Traore Inoussa
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
8 vues21 pages

Annales d'Algorithmes pour Ingénieurs

Transféré par

Traore Inoussa
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi