Vous êtes sur la page 1sur 16

TD I1 - Correction

1 Conversion de base
1.1 Binaire vers dcimale
125
980

1.2 Dcimale vers binaire


1100002
10111011112

1.3 Dcimale vers Octale


608
13578

1.4 Dcimale vers Hexadcimale


3030
2EF16

2 Commandes UNIX
Imaginons que dans le rperoire /tmp/test, on ait les fichiers suivants :

/tmp/test$ ls
a11.txt a1b.doc f11.txt f1.txt fa.txt b.txt
a1a.doc a1c.doc f1.doc f2.txt fb.txt

1. ls *txt
2. ls a*
3. ls ?[1-9]*
4. ls [af][1-9]*doc

1
3 Expression
3.1 Donner le type et la valeur des expressions suivantes :
2 + 3 * 4 : 14 entier
2.0 + 3 * 4 : 14 rel
vrai et (faux ou vrai) : vrai boolen
(2 < 3) et (4 > 5) : faux boolen
abc + def : abcdef chane de caractres
def + abc : defabc chane de caractres

3.2 Donner le table de vrit des expressions boolennes suivantes :


(a et non b) ou c
a b c non b a et non b (a et non b) ou c
V V V F F V
V V F F F F
V F V V V V
V F F V V V
F V V F F V
F V F F F F
F F V V F V
F F F V F F
(a et non b) ou (non a et b)
a b non a non b a et non b b et non a (a et non b) ou (non a et b)
V V F F F F F
V F F V V F V
F V V F F V V
F F V V F F F

3.3 Expressions mathmatiques


Traduire les expressions mathmatiques suivantes en pseudo-code algorithmique :
bc 2d 2a3
+4
x= z= 2
3a d
x (b*c-2*d)/(3*a) z (2*a-3)/(2)+4
42
y = 2a +4 w = b2 4ac
a
y 2*a-42/a+4 w b2-4*a*c

3.4 Expressions boolennes


Soient x,y,z,t quatre variables numriques dun environnement donn. Chacune des questions
suivantes caractrise une situation de cet environnement. Exprim les exprssions boolennes cor-
respondant ces situations :
Les valeurs de x et de y sont toutes les deux suprieures 3
(x>3) et (y>3)

2
Les variables x,y et z sont identiques
(x=y) et (y=z) A
Les valeurs de x,y et z sont identiques mais diffrentes de celle de t
(x=y) et (y=z) et (x6=t)
Les valeurs de x est strictement comprise entre les valeurs de y et t
(x>t et x<y) ou (x>y et x<t)
Les valeurs de x est strictement comprise entre les valeurs de y et t et la valeur de y est infreiure
celle de t
(x>y et x<t)
Parmi les valeurs de x,y et z, deux valeurs au moins sont identiques
(x=y) ou (y=z) ou (x=z) B
Parmi les valeurs de x,y et z, deux valeurs et seulement deux sont identiques
B et non A
Parmi les valeurs de x,y et z, deux valeurs au plus sont identiques
non A

4 Schma squentiel / Affectation


4.1 Comprhension
1. Quelles seront les valeurs des variables a et b aprs excution des instructions suivantes :
a1
b a+1
a3
a=3, b=2
2. Quelles seront les valeurs des variables a,b et c aprs excution des instructions suivantes :
a1
b5
c a-b
a2
c a+b
a=2, b=5, c=7

4.2 changer
Ecrire un algorithme qui permet dchanger les valeurs de deux variables entires.
Nom: echanger
Role: permet de permutter les valeurs de 2 variables entires
Entre: a,b : Entier
Sortie: a,b : Entier
Dclaration: temp : Entier
dbut
temp a
ab
b temp
fin

3
4.3 Moyenne de trois notes
crire un algorithme qui partir de trois notes dun tudiant et de trois coefficients calcule la
moyenne.
Nom: calculerMoyenne
Role: calcule la moyenne de 3 notes avec coefficient (<1 et somme=1)
Entre: note1,note2,note3,coef1,coef2,coef3 : Rel
Sortie: moyenne : Entier
Dclaration:
dbut
moyenne note1*coef1+note2*coef2+note3*coef3
fin

4.4 Dcomposition dune somme dargent


crire un algorithme qui partir dune somme dargent donne (entier), donne le nombre minimal
de billets de 5 et 10 et le nombre de pices de 2, 1 qui la compose.
Nom: decomposerSommeArgent
Role: calcule la moyenne de 3 notes avec coefficient (<1 et somme=1)
Entre: somme : Entier
Sortie: nbBilletDe10, nbBilletDe5, nbPieceDe2, nbPieceDe1 : Entier
Dclaration: temp : Entier
dbut
nbBilletDe10 somme div 10
somme somme mod nbBilletDe10
nbBilletDe5 somme div 5
somme somme mod nbBilletDe5
nbPieceDe2 somme div 2
nbPieceDe1 somme mod 2
fin

4.5 Permutation circulaire


crire un algorithme qui permet daffectuer une permutation circulaire des valeurs entires de
trois variables x, y, z (cest--dire la valeur de y dans x, la valeur de z dans y et la valeur de x dans z.
Nom: permutter
Role: permet de permutter les valeurs de 3 variables entires
Entre: a,b,c : Entier
Sortie: a,b,c : Entier
Dclaration: temp : Entier
dbut
temp a
ab
bc
c temp
fin

4.6 Date valide


Ecrivez un algorithme qui pour un numro de jour, de mois et danne donns, dtermine sil
sagit ou non dune date valide.

4
Nom: estDivisble
Role: permet de savoir si un entier est divisble par un autre entier
Entre: diviseur, dividende : Entier
Sortie: estDivible : Boolen
Dclaration:
dbut
estDivisible diviseur div dividende=0
fin
Nom: estUneDateValide
Role: permet de savoir si une date donne a pu (ou pourra) exist
Entre: jour, mois, annee : Entier
Sortie: estValide : Boolen
Dclaration: anneeBissextile,moisA31Jours, moisA30Jours, moisDeFevrier : Boolen
dbut
anneeBissextile (estDivisible(annee,4) et non estDivisible(annee,100)) ou estDivisble(annee,400)
moisA31Jours (mois=1 ou mois=3 ou mois=5 ou mois=7 ou mois=8 ou mois=10 ou mois=12) et (jour1
et jour 31)
moisA30Jours (mois=4 ou mois=6 ou mois=9 ou mois=11) et (jour1 et jour 30)
moisDeFevrier mois=2 et jour1 et ((jour29 et anneeBissextile) ou (jour28 et non anneeBissextile))
estValide moisA31Jours ou moisA30Jours ou moisDeFevrier
fin

5 Schma de choix
5.1 Tri de trois entiers
crire un algorithme qui prend en entre trois entiers et qui les retourne tris par ordre croissant.
Nom: trier
Role: permet de trier les valeurs de 3 variables entires
Entre: a,b,c : Entier
Sortie: a,b,c : Entier
Dclaration: temp : Entier
dbut
si a>b alors
echanger(a,b)
finsi
si b>c alors
echanger(b,c)
finsi
si a>b alors
echanger(a,b)
finsi
fin

5.2 Le temps plus une seconde


crire un algorithme qui pour un temps donn (reprsent sous la forme : heure, minute, seconde)
retourne le temps (sous la mme reprsentation) aprs avoir ajout une seconde.
Nom: incrementerTemps
Role: permet dajouter 1 seconde a un temps donn
Entre: heure,minute,seconde : Entier

5
Sortie: heure,minute,seconde : Entier
Dclaration: tempsEnSec : Entier
dbut
tempEnSec heure*3600+minute*60+seconde
tempsEnSec tempsEnSec+1
si tempsEnSec 6= 24*3600 alors
heure tempEnSec div 3600
tempsEnSec tempsEnSec mod 3600
minute tempEnSec div 60
seconde tempEnSec mod 60
sinon
heure 0
minute 0
seconde 0
finsi
fin

5.3 Nombre de jours de congs


Dans une entreprise, le calcul des jours de congs pays seffectue de la manire suivante : si une
personne est entre dans lentreprise depuis moins dun an, elle a droit deux jours de congs par
mois de prsence, sinon 28 jours au moins. si cest un cadre et sil est g dau moins 35 ans et si
son anciennet est suprieure 3 ans, il lui est accord 2 jours supplmentaires. Sil g dau moins
45 ans et si son anciennet est suprieure 5 ans, il lui est accord 4 jours supplmentaires, en plus
des 2 accords pour plus de 35 ans. crire un algorithme qui calcule le nombre de jours de congs
partir de lge, lanciennet et lappartenance au collge cadre dun employ.
Nom: calculerNbJourConge
Role: permet de calculer le nb de jours de conge dun emplye en fonction de son age, son anciennet et de son
statut
Entre: age, anciennete : Entier
cadre : Boolen
Sortie: nbJourDeConge : Entier
Dclaration: tempsEnSec : Entier
dbut
si anciennete<12 alors
nbJourDeConge anciennete*2
sinon
nbJourDeConge 28
finsi
si cadre alors
si age 35 et anciennete 3*12 alors
nbJourDeConge nbJourDeConge+2
finsi
si age 45 et anciennete 5*12 alors
nbJourDeConge nbJourDeConge+4
finsi
finsi
fin

6
6 Schma itratif
6.1 Partie entire infrieure de la racine carre dun Entier
crire un algorithme qui retourne la partie entire infrieure de la racine carre dun entier donn
n.
Nom: calculerRacineEntiere
Role: permet de calculer la racine entiere dun naturel
Entre: n : Naturel
Sortie: racine : Entier
Dclaration:
dbut
racine 1
tant que racine*racinen faire
racine racine+1
fintantque
fin

6.2 La multiplication
crire un algorithme effectue la multiplication de deux entiers positifs (nots x et y) donns en
utilisant uniquement laddition entire.
Nom: multiplier
Role: permet de calculer x*y avec uniquement loprateur daddition
Entre: x,y : Naturel
Sortie: produit : Entier
Dclaration: i : Naturel
dbut
produit 0
pour i 1 x faire
produit produit+y
finpour
fin

6.3 Calcul de factorielle n


crire un algorithme qui calcule pour un entier positif donn n la valeur de n !.
Nom: factorielle
Role: permet de calculer n !
Entre: n : Naturel
Sortie: fact : Entier
Dclaration: i : Naturel
dbut
fact 1
pour i 1 n faire
fact fact*i
finpour
fin

7
6.4 X puissance n
crire un algorithme qui partir dun rel, appel x et dune valeur entire positive appele n,
retourne x la puissance n.
Nom: xPuissanceN
Role: permet de calculer xn
Entre: n : Naturel ; x : Rel
Sortie: p : Rel
Dclaration: i : Naturel
dbut
p1
pour i 1 n faire
p p*x
finpour
fin

6.5 Intgration par la mthode des trapzes


crire un algorithme qui retourne la valeur de lintgrale dune fonction f relle continue sur
lintervalle sur [a, b]. Soit f(x) une fonction continue sur lintervalle [a, b]. Lintgration consiste
dcouper cet intervalle, en n sous-intervalles de longueur . Lintgrale dun sous-intervalle [x, x + ]
est approxime au trapze de base et de cts f(x) et f(x + ).
Remarque (valable aussi pour les autres exercices) : la communication de f entre lappelant et la
fonction appele, est ralise de manire implicite (opration transparente pour vous).
Nom: integral
Rb
Role: permet de calculer a f (x)dx par la mthode des trapzes (avec un nb dintervalles = n)
Entre: a,b : Rel ; n : Entier
Sortie: somme : Rel
Dclaration: x1,x2, : Rel
dbut
somme 0
x1 a
(b-a)/n
pour i 1 n faire
x2 x1+
somme somme+(f(x1)+f(x2))/2
x1 x2
finpour
somme somme*
fin

6.6 Quotient et reste dune division entire


crire un algorithme qui effectue en mme temps les fonctions division entire et modulo laide
de soustractions successives partir dun nombre entier positif et dun deuxime (le diviseur) entier
strictement positif donns.
Nom: divMod
Role: permet de calculer le quotient et le reste dune division entire
Entre: dividende,diviseur : Entier
Sortie: quotient,reste : Entier
Dclaration:

8
dbut
reste dividende
quotien
tant que reste diviseur faire
reste reste-diviseur
quotient quotient+1
fintantque
fin

6.7 Nombres premiers


crire un algorithme qui partir dun entier strictement positif donn, retourne le rsultat boolen
VRAI ou FAUX selon que le nombre est premier ou non. Pour mmoire, voici la liste des nombres
premiers infrieurs 100 : 1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
73, 79, 83, 89, 97.
Nom: estPremier
Role: permet de csavoir si un naturel n est premier
Entre: n : Naturel
Sortie: premier : Boolen
Dclaration: i : Naturel
dbut
premier Vrai
i2
tant que premier et i n faire
si n mod i=0 alors
premier Faux
finsi
i i+1
fintantque
fin

6.8 Recherche du zro dune fonction par dichotomie


crire un algorithme qui calcule le zro dune fonction f(x) sur lintervalle [a, b], avec une prci-
sion epsilon. La fonction f et les rels a, b et epsilon sont donns. Soit f(x) une fonction continue sur
lintervalle [a, b], o elle ne sannule quune seule et unique fois. Pour trouver ce zro, on procde
par dichotomie, cest--dire que lon divise lintervalle de recherche par deux chaque tape. Soit m
le milieu de [a, b]. Si f(m) et f(a) sont de mme signe, le zro recherch est dans lintervalle [m, b],
sinon il est dans lintervalle [a, m].
Nom: rechercheZero
Role: permet de connaitre la racine dune fonction compris entre a et b (b>a) prs
Entre: a,b, : Rel
Sortie: x : Rel
Dclaration: m : Rel
dbut
m (a+b)/2
tant que (b-a)> faire
si (f(a)*f(m)>0 alors
am
sinon
bm

9
finsi
m (a+b)/2
fintantque
fin

6.9 Suite de Fibonacci


crire un algorithme qui calcule la valeur u et le rang k du premier terme de la suite de Fibonacci
dpassant une borne entire positive donne p.
Nom: termeDeFibonacci
Role: determine k et Uk telque Uk est le premier terme de la suite de fibbonacci telque Uk >p
Entre: p : Naturel
Sortie: uk,k : Naturel
Dclaration: ukMoins1,temp : Naturel
dbut
ukMoins1 1
uk 1
k1
tant que uk<p faire
temp uk
uk uk+ukMoins1
ukMoins1 temp
fintantque
fin

7 Procdures / Fonctions
Attention avant dexpliciter les fonctions et procdures demander, donner une analyse descendante
de votre problme.

7.1 Nombres parfaits


crire une procdure qui affiche la suite de tous les nombres parfaits infrieurs ou gaux un
nombre, entier positif donn not n. Un nombre est dit parfait sil est gal la somme de ses diviseurs
stricts. Exemple : 28 = 1 + 2 + 4 + 7 + 14 Voici la liste des nombres parfaits infrieurs 10000 : 6, 28,
496, 8128.
procdure afficherNombreParfait ( E n : Naturel )
Dclaration i : Naturel
dbut
pour i 1 n faire
si estParfait(i) alors
crire(i)
finsi
finpour
fin
fonction estParfait (n : Naturel) : parfait : Boolen
Dclaration somme,diviseur : Naturel
dbut

10
somme 0
pour diviseur 1 n div 2 faire
si nombre mod diviseur = 0 alors
somme somme+diviseur
finsi
finpour
si somme=n alors
parfait Vrai
sinon
parfait Faux
finsi
fin

7.2 Changement de base


1. crire un procdure qui affiche la reprsentation binaire dun naturel
2. crire un procdure qui affiche la reprsentation octale dun naturel
3. crire un procdure qui affiche la reprsentation hexadcimale dun naturel
fonction obtenirChiffre (nombre : Naturel, base : Naturel) : Caractre
Dclaration chiffre : Caractre, i : Naturel
dbut
chiffre 0
pour i 0 nombre faire
si chiffre=9 alors
chiffre A
sinon
chiffre succ(chiffre)
finsi
finpour
retourner chiffre
fin
fonction obtenirRepresentationNAire (nombre : Naturel, base : Naturel) : Chane de caractres
Dclaration representation : Chane de caractres, i : Naturel
dbut
representation ""
tant que nombre 6= 0 faire
representation representation+obtenirChiffre(nombre mod base,base)
nombre nombre div base
fintantque
retourner representation
fin
procdure afficherRepresentationBinaire ( E n : Naturel )
dbut
crire(obtenirRepresentationNAire(n,2))
fin
procdure afficherRepresentationOctale ( E n : Naturel )

11
dbut
crire(obtenirRepresentationNAire(n,8))
fin
procdure afficherRepresentationHexadecimale ( E n : Naturel )
dbut
crire(obtenirRepresentationNAire(n,16))
fin

7.3 Dveloppement
1. crire un procdure qui affiche le dveloppement de (a + b) n pour n donn.
2. crire un procdure qui affiche le dveloppement de (a b) n pour n donn.
fonction obtenirMonome (inconnue : Chane de caractres, puissanceDeLInconnue : Naturel) :
Chane de caractres
Dclaration resultat : Chane de caractres
dbut
cas o puissanceDeLInconnue vaut
0resultat "" 1 resultat inconnue resultat inconnue+" "+obtenirRepresentation-
NAire(n,10)
fincas
retourner resultat
fin
fonction obtenirMonomeAB (coef, puissanceDeA, puissanceDeB : Naturel) : Chane de caractres
Dclaration temp : Chane de caractres
dbut
si coef=1 alors
temp ""
sinon
temp obtenirRepresentationNAire(coef,10)
finsi
retourner temp+obtenirMonome("a",puissanceDeA)+obtenirMonome("b",puissanceDeB)
fin
fonction combinaison (n,p : Naturel) : Naturel
dbut
retourner fact(n)/(fact(p)*fact(n-p))
fin
fonction obtenirPlusOuMoins (esposantB : Naturel, avecSigneMoins : Boolen) : Chane de carac-
tres
dbut
si exposantB mod 2 6= 0 et avecSigneMoins alors
retourner "-"
sinon
retourner "+"
finsi
fin
procdure afficherAPlusOuMoinsBExposantN ( E n : Naturel, avecSigneMoins : Boolen )

12
Dclaration i : Naturel, chaine1,chaine2 : Chane de caractres, coef : Naturel
dbut
chaine1 ""
chaine2 ""
pour i 0 n div 2 faire
coef combinaison(n,n-i)
chaine1 chaine1+obtenirPlusOuMoins(i,avecSigneMoins)+obtenirMonomeAB(coef,n-i,j)
chaine2 obtenirPlusOuMoins(n-i,avecSigneMoins)+obtenirMonomeAB(coef,i,n-i)+chaine2

finpour
si n mod 2=0 alors
crire(chaine1+chaine2)
sinon
coef combinaison(n,n-i)
crire(chaine1+obtenirPlusOuMoins(n div 2,avecSigneMoins)+obtenirMonomeAB(coef,n div
2,n div 2)+chaine2)
finsi
fin
procdure afficherAPlusBExposantN ( E n : Naturel )
dbut
afficherAPlusOuMoinsBExposantN(n,Faux)
fin
procdure afficherAPlusBExposantN ( E n : Naturel )
dbut
afficherAPlusOuMoinsBExposantN(n,Vrai)
fin

7.4 Dessin
1. crire une procdure qui affiche laide du signe + un carr de ct n.
procdure afficherCarree ( E n : Naturel )
Dclaration ligne,colonne : Naturel
dbut
pour ligne 1 n faire
pour colonne 1 n faire
si ligne=1 ou ligne=n ou colonne=1 ou colonne=n alors
crire("+")
sinon
crire("-")
finsi
finpour
retournerALaLigne()
finpour
fin
2. crire une procdure qui affiche laide du signe + un triangle de hauteur n.
procdure afficherTriangle ( E n : Naturel )

13
Dclaration ligne,colonne : Naturel
dbut
pour ligne 1 n faire
pour colonne 1 2*n-1 faire
si ligne=n ou (colonne=n-ligne+1 ou colonne=n+ligne-1) alors
crire("+")
sinon
crire("-")
finsi
finpour
retournerALaLigne()
finpour
fin
3. crire une procdure qui affiche laide du signe + un losange de cot n.
procdure afficherLosange ( E n : Naturel )
Dclaration ligne,colonne,colonneGauche,colonneDroite : Naturel
dbut
colonneGauche n
colonneDroite n
pour ligne 1 2*n-1 faire
pour colonne 1 2*n-1 faire
si colonne=colonneGauche ou colonne=colonneDroite alors
crire("+")
sinon
crire("-")
finsi
finpour
retournerALaLigne()
si ligne n alors
colonneGauche colonneGauche-1
colonneDroite colonneDroite+1
sinon
colonneGauche colonneGauche+1
colonneDroite colonneDroite-1
finsi
finpour
fin

7.5 Chane de caractres


En supposant que lon possde les fonctions suivantes :
fonction longueurChaine (laChaine : Chane de caractres) : Naturel
fonction nIemeCaractere (laChaine : Chane de caractres, n : Naturel) : Caractre
fonction sousChaine (laChaine : Chane de caractres, indiceDebut : Naturel, longueur : Na-
turel) : Chane de caractres
fonction decodeASCII (caractere : Caractre) : Naturel
fonction encodeASCII (code : Naturel) : Caractre

14
1. crire une fonction qui compte le nombre doccurence dun caractre
2. crire une fonction qui permet de savoir si une chane de caracres est un palindrome
3. crire une fonction qui permet de savoir si une chane de caractres reprsente un nombre dans
une base donne
4. crire une fonction qui permet de convertir la reprsentation dun nombre, donn sous forme
de chane de caractres dans une base de dpart, dans une base darrive.
fonction chiffreEnNombre (chiffre : Caractre) : Naturel
dbut
si chiffre0 et chiffre9 alors
retourner decodeASCII(chiffre)-decodeASCII(0)
sinon
retourner decodeASCII(chiffre)-decodeASCII(A)+10
finsi
fin
fonction nombreEnChiffre (nb : Naturel) : Caractre
dbut
si nb0 et nb9 alors
retourner encodeASCII(nb+decodeASCII(0))
sinon
retourner encodeASCII(chiffre-10+decodeASCII(A))
finsi
fin
fonction decoder (nb : Chane de caractres, base : Naturel) : Naturel
Dclaration resultat : Naturel
puissance : Naturel
i : Naturel
dbut
resultat 0
puissance 1
pour i longueurChaine(nb) 1 pas de -1 faire
resultat chiffreEnNombre(nIemeCaractere(nb,i))*puissance+resultat
puissance puissance*base
finpour
retourner resultat
fin
fonction encoder (nb : Naturel, base : Naturel) : Chane de caractres
Dclaration resultat : Chane de caractres
puissance : Naturel
i : Naturel
dbut
resultat ""
tant que nbbase faire
resultat nombreEnChiffre(nb mod base)+resultat
nb nb div base
fintantque

15
si nb>0 alors
resultat nombreEnChiffre(nb)+resultat
finsi
retourner resultat
fin
fonction convertirNombre (nbDepart : Chane de caractres, baseDepart : Naturel, baseAr-
rivee : Naturel) : Chane de caractres
dbut
retourner encoder(decoder(nbDepart,baseDepart),baseArrivee)
fin

16