Initiation à l'informatique
1) Informatique
- C'est le traitement automatique de l'information sur un
ordinateur.
- aspect scientifique, outil, technique
*info théo -> langages...
*info méthodo -> analyse, programmation structurée...
*info techno -> composants, mémoires...
*info syst -> architecture, réseaux...
2) Ordinateur
Repère historique :
1945 : Premier calculateur, Leniac
1947 : Première mise en oeuvre des travaux de VAN NEUMAN
1950 : Apparition de Bimac conçu à partir de l'architecture
de VAN....
* Microprocesseur (CPU:Central Processus Unit)
* Mémoire centrale (Central Memory) : endroit où est stockée
l'information en cours de traitement.
* périphériques : - d'entrée (input) : exemple : le
clavier (keyboard)
- de sortie (output) : exemple : écran, robot
- d'entrée/sortie : dispositif de mémoire externe (disque
dur)
Hardware (matériel) /= Software (logiciel)
TD : Informatique : Représentation
de données en machine
1 - Introduction
Les informations stockées ou circulant dans la machine
sont toujours physiquement binaires (présences ou absences de charges
électriques)
Une position binaire est notée logiquement "0" ou "1"
Usuellement, la valeur représentée sur la position binaire
contigue est notée par un chiffre base 16. 8 bits (positions binaires)
contigus constituent un octet (byte).
* Ko = 1024 octets = 2^(10)
2- Les numériques
2-1- Système binaire
Dans une base b, si un nombre est représenté par W,X,Y,Z,
sa valeur est :
wb^3+xb^2+yb^1+zb^0 = wb^3+xb²+yb+z
base 10 : 1435
1*10^3+4*10^2+3*10+5
base 3 : 120
1*3²+2*3+0
base 2 : 10110
1*2^4+2^2+2
-> Passage d'une base x à une base 10
Exemple :
120 en base 3 = 15 en base 10
1*3²+2*3=15
10110 en base 2 = 22
1*2^4+2^2+2 = 22
-> Passage d'une base 10 à une base x
Exemple : 847 base 10 en base 3
847=282*3 + 1
282=94*3 + 0
94=31*3 + 1
31=10*3 + 1
10=3*3 + 1
3=1*3 + 0
1=0*3 + 1
On obtient 1011101
* Attention on prend ces chiffres (qui correspondent au reste) dans l'ordre
inverse des opérations.
Exemple : 847 base 10 en base 2
847=423*2 + 1
423=211*2 + 1
211=105*2 + 1
105=52*2 + 1
52=26*2 + 0
26=13*2 + 0
13=6*2 + 1
6=3*2 + 0
3=1*2 + 1
1=0*2 + 1
On obtient 1101001111
On peut alors dresser le tableau suivant :
___________________
|base 10|base 16|base 2 |
-------------------------
| 0 | 0 |
0 |
-------------------------
| 1 | 1
| 1 |
-------------------------
| 2 | 2
| 10 |
-------------------------
| 3 | 3
| 11 |
-------------------------
| 4 | 4 |
100 |
-------------------------
| 5 | 5
| 101 |
-------------------------
| 6 | 6
| 110 |
-------------------------
| 7 | 7
| 111 |
-------------------------
| 8 | 8
| 1000 |
-------------------------
| 9 | 9
| 1001 |
-------------------------
| 10 | A
| 1010 |
-------------------------
| 11 | B
| 1011 |
-------------------------
| 12 | C
| 1100 |
-------------------------
| 13 | D
| 1101 |
-------------------------
| 14 | E
| 1110 |
-------------------------
| 15 | F
| 1111 |
-------------------------
2-2- Entiers : N
- Nombre de positions fixes
- Problème des nombres négatifs
Représentation en complément à 2 :
Exemple : +5 +5 =10
Base 10 : -6 est le nombre tel que en le retranchant de la base, on obtienne
son complément.
3-(-7)=10 4-(-6)=10
On a 5 base 2 = 0101 donc -5 base 2 = 1011
car 0101 + 1011 = 0000
Exemple :
01011000 * En partant de la droite, on remarque que les
+ 10101000 * chiffres sont identiques jusqu'au premier 1
--------------- * puis sont tous inversés.
1)00000000
On a :
|base 10|base 2| |base 2|base10|
| 0 | 0000 | | 1111 | -1
|
| 1 | 0001 | | 1110 | -2
|
| 2 | 0010 | | 1101 | -3
|
| 3 | 0011 | | 1100 | -4
|
| 4 | 0100 | | 1011 | -5
|
| 5 | 0101 | | 1010 | -6
|
| 6 | 0110 | | 1001 | -7
|
| 7 | 0111 | | 1000 | -8
|
Table d'addition binaire :
0+0=0 0+1=1 1+1=0(avec 1 en retenue)
Exemple d'addition de deux nombres représentés en complément
à deux.
2 -> 0010
+3 -> +0010
--- --------
5 -> 0101
+3 -> 0011
+-4 -> +1100
---- -------
-1 -> 1111
-1 -> 1111
+-3 -> +1101
---- -------
-4 ->1)1100
7 -> 0111
++2 -> 0010
---- ------
9 1001
or, 1001 correspond à -7
-3 -> 1101
+-7 -> 1001
---- -----
-10 1)0110
or, 0110 correspond à 6
Erreur si le ou exclusif entre le bit de debordement et la retenue precedente
(3ieme position -> 4ieme) prend la valeur 1.
ou exclusif -> 1 si ils sont differents.
Exemple : + 0 1
0
0 1
1
1 0
Exemple : 11011011 = -37
+00011101
= 29
---------------------
11111000
-8
complement a 2 11011011
00100101
<- complement.
2^6+2^3+1 = 37
En turbo-pascal, max+ = 2^15-1 = 32768
max- = -32768
Complexité de l'addition
Algo addition
Variable a,b,r : entier
sa,sb,sr : signe
Début
Ecrire ('Donnez a')
Lire (a)
Ecrire ('Donnez b')
Lire (b)
Si sa=sb alors
r <- |a| + |b|
sr <- sa
sinon
si |a| > |b| alors
r <- |a| - |b|
sr <- sa
sinon
si |a|=|b| alors
r <- 0
sr <- 0
sinon
r <- |b|-|a|
sr <- sb
fin si
fin si
fin si
Ecrire ('Le résultat de l'additiion est : ', sr,r)
fin
2-3- Les réels :
base b : v,w,x,y,z
= vb²+wb+x+yb^-1+zb^-2
Seul un sous-ensemble fini des rationnels sera représenté,
ce sous-ensemble ne coïncide pas avec un sous-ensemble des décimaux.
Exemple : 12,25
En base 2 : 1100,01
Notation scientifique : 1225 * 10^-2
Mantisse -> signes significatifs et exposant.
Le separateur decimal est toujours place au même endroit (avant le
premier chiffre 1) et sa position est indique par un exposant.
0,110001*2^4
Mantisse binaire signee, exposant binaire signe.
Exemple : mantisse sur trois octets et exposant sur un.
0|11000100...0 0|0000100
24 bits exposant
En Turbo Pascal -> 6 octets (5 pour la mantisse et 1 pour l'exposant)
Onze chiffres significatifs.
Remarques : Depassement de capacite sur l'exposant pour une valeur absolue
superieure a l'intervalle.
=> Erreur : floating point overflow.
=> Valeur trop petite alors la valeur est remplacee par 0.
3- Caractères (=1 octet)
Les deux normes les plus utilisées pour les micro-ordinateur
sont : ASCII et ANSI.
Elles sont d'accord sur les sept premières positions.
Respect de l'ordre alphabètiquel, l'espace est situé avant
le A, les majuscules sont placés avant les minuscules.
Désaccord sur l'extension du huitième bit.
=> caractères spéciaux (accents).
Les PC/DOS : ASCII
Macintosh : ANSI
Windows : ANSI
4- Instructions
code operations adresse
|-------------------|----------|
n bits p
bits
Algorithmes
On pratique une analyse descendante.
Problème
ANALYSE
Algorithme
TRADUCTION
Programme Pascal
On part du problème global que l'on simplifie par raffinage successif
en détails.
Algorithme est en trois parties :
i) Acquisition des données.
ii) Traitement sur ces données.
iii) Communication des résultats.
Algo surface cercle
{Algo de calcul de la surface d'un cercle}
Constante pi=3,14
Variables rayon, surface : réel
Début
{saisie de donnée}
Ecrire ('Ce programme calcule la surface d'un cercle')
Ecrire ('Donnez le rayon du cercle en cm')
Lire (rayon)
{calcul}
surface <- rayon * rayon * pi
{résultat}
Ecrire ('La surface d'un cercle de rayon ',rayon,'est ',surface,' cm²')
Fin
Algo moyenne
{algo de calcul de la moyenne d'un étudiant ayant passé trois
épreuves : A de coef 1, M de coef 4 et I de coef 3.}
variables utilisées : nom :chaîne
NotA,NotM,NotI,moyenne : réel
Debut
{saisie de données}
Ecrire('Ce programme calcule la moyenne')
Ecrire('Donner le nom de l'élève :')
Lire (nom)
Ecrire('Donner la note d'anglais')
Lire (NotA)
Ecrire('La note de math : ')
Lire (NotM)
Ecrire('La note d'informatique : ')
Lire (NotI)
moyenne <- (NotA + 4*NotM + 3*NotI)
{résultat}
Ecrire ('La moyenne de ',nom,' est ',moyenne)
Fin
L'algorithme se construit avec trois structures :
- séquences (exemples : écrire, lire...)
- altrenative
- répétitive
Pb : Résolution d'une équation du second degré : ax²+bx+c=0
Début
Ecrire ('Résolution d'une équation....')
Ecrire ('Donner A')
Lire (A)
Ecrire ('Donner B')
Lire (B)
Ecrire ('Donner C')
Lire (C)
discr = b²-4ac
si discr = 0
alors
Ecrire ('Solution : ',-b/2a)
sinon
si discr < 0
alors
Ecrire ('Pas de solution')
sinon
Ecrire ('Les solutions sont : ',(-b-sqr(discr))/2a),'
et ',(-b+sqr(discr))/2a))
fin si
fin si
fin
{Ce programme est incomplet car il ne prend pas en compte le cas où
a=0 (ce qui fera bloquer la machine)}
* Si condition alors.... sinon....
Le condition est une expression booléenne (Vrai/Faux)
Algo test1
Variable A:entier
Début
Ecrire ("Donnez un entier")
Lire (A)
Si A>1
Alors
si A<5
alors
Ecrire (A," compris entre
1 et 5")
sinon
Ecrire (A," est > 5")
fin si
fin si
fin
Algo test2
Variable A:entier
Début
Ecrire ("Donnez un entier")
Lire (A)
Si A>1
Alors
si A<5
alors
Ecrire (A, "compris entre 1 et 5")
fin si
sinon
Ecrire (A, " est <= 1")
fin si
fin
Algo Ordre Croissant
Variable X, Y, Z: réel
Début
Ecrire ("Donner X")
Lire (X)
Ecrire ("Donner Y")
Lire (Y)
Ecrire ("Donner Z")
Lire (Z)
Si X>Y
alors
si Y>Z
alors
Ecrire ("X:",X,"Y:",Y,"Z:",Z)
sinon {Z>Y}
si X>Z
alors
Ecrire ("X:",X,"Y:",Z,"Z:",Y)
sinon
Ecrire ("X:",Z,"Y:",X,"Z:",Y)
fin si
fin si
sinon {Y>X}
si X>Z
alors
Ecrire ("X:",Y,"Y:",X,"Z",Z)
sinon
si Y>Z
alors
Ecrire ("X:",Y,"Y:",Z,"Z:",X)
sinon
Ecrire ("X:",Z,"Y:",Y,"Z:",X)
fin si
fin si
fin si
fin
* classer A et B
Si B < A alors {permutation}
D <- B
B <- A
A <- D
Fin si
Algo Classer 3 valeurs
variables A,B,C,D : réels
Début
Ecrire ('Valeur de a')
Lire (A)
Ecrire ('Valeur de b')
Lire (B)
Ecrire ('Valeur de c')
Lire (C)
si B < A alors
D <- B
B <- A
A <- D
fin si {A et B classés}
si C < A alors
D <- A
A <- C
C <- B
B <- D
sinon {classer B et C}
si B>C
alors
D <- B
B <- C
C <- D
fin si
fin si
Ecrire ("a,b,c sont classés dans l'ordre croissant")
fin
Les répétitions :
On connaît le nombre de répétition =>
on va les compter pour savoir si ce nombre est atteint.
Pour c cr de vd à vf faire
{instruction}
Fin pour
avec c:compteur, vd:valeur de départ et vf:valeur de fin
Exercices :
1) Demander N (compris entre 1 et 10) et afficher sa table de multiplication.
Algo Table de N
variables : N,c : entiers
Début
Ecrire ('Donner N')
Lire (N)
Pour c cr de 1 à 10 faire
Ecrire (N,' * ',c,' = ',N*c)
Fin pour
Fin
2) Calcul de n factoriel
Algo n!
Variables : N,r,i : entiers
Début
Ecrire ('Donnez la valeur N de l'opération N factoriel dont vous
souhaitez le résultat')
Lire (N)
r <- 1
Pour i cr de 2 à N faire
r <- i * r
Ecrire (N,'! = ',r)
fin
3) X^n
Algo X^n
variables N,i : entiers
x,r : réels
Début
Ecrire ("Calcul de x^n")
Ecrire ("Donnez la valeur de x")
Lire (x)
Ecrire ("Valeur de N")
Lire (N)
r <- 1
Pour i cr de 1 à N faire
r <- x * r
Fin pour
Ecrire (x," exp",N," = ",r)
Fin
4) Nième terme de la suite de Fibonacci
Algo Fib
{calcul du nième terme de Fibonacci définie par F0=0, F1=1,
Fn=Fn-1+Fn-2}
Variable F,n, prec1,prec2 : entiers
Début
Ecrire ("Entrez la valeur de n")
Lire (n)
{calcul}
prec1 = 1
prec2 = 0
pour i cr de 2 à n faire
F <- prec1 + prec2
prec2 <- prec1
prec1 <- F
fin pour
Ecrire ("Le ",n," ième terme de Fibonnaci est ",F)
Fin
5) Afficher la plus grande valeur parmi N
Algo Nmax
{Afficher la plus grande valeur parmi N}
variables : N,i,max,VL : entiers
Début
Ecrire ("Donner N le nombre de valeurs")
Lire (N)
Ecrire ("Donner la première valeur")
Lire (max)
Pour i cr 2 à N faire
Ecrire ("Donnez une valeur")
Lire (VL)
Si VL > max
alors max <- VL
Fin si
Fin pour
Ecrire ("La plus grande valeur est : ",max)
Fin
Algo plus petite valeur
variables : A,B,C : réels
Début
Ecrire ("Donnez votre premier entier : ")
Lire (A)
Ecrire ("Donnez votre second entier : ")
Lire (B)
Ecrire ("Donnez votre dernier entier : ")
Lire (C)
Si A>B
alors
si C>B
alors
Ecrire (B," est la plus petite
valeur")
sinon
Ecrire (C," est la plus petite
valeur")
fin si
sinon {A < B}
si A < C alors
Ecrire (A," est la plus petite
valeur")
sinon
Ecrire (C," est la plus petite valeur")
fin si
fin si
fin
Lorsque plusieurs valeurs sont de même type et de même utilisation
dans l'algorithme, on peut utiliser un tableau.
Une valeur est repérée par le nom du tableau et un indice
(n° de la case).
Exemple: la troisième valeur T[3]
Exercice : l'horoscope chinois
Afficher le signe correspondant à une année de naissance.
Douze signes possibles.
Rat : 1900 1912 1924 ...
Boeuf : 1901 1913 1925 ...
....
Sanglier : 1911 1923 1935 ...
Algo horoscope
{Afficher le signe d'une personne suivant son année de naissance}
Type Tab = tableau [0...11] de chaînes
{En pascal : array [0..11] of string;}
Variable
Signe : tab
Année : entier
Début
signe [0] <- "Rat"
signe [1] <- "Boeuf"
....
signe [11] <- "Sanglier"
{recherche du signe}
Ecrire ("Donnez votre année de naissance")
Lire (Année)
Ecrire ("Votre signe est ",Signe[(Année-1900)mod 12]
Fin
Algo moyenne
{Trouver la moyenne d'une série statistique}
Constante : Nmax=50 {taille maximale des entiers}
Type tab1 = tableau [1..Nmax] d'entiers
tab2 = tableau [1..Nmax] de réels
Variable : somme_xini,moyenne : réels
tabni:tab1
tabxi:tab2
n,i,somme_ni : entiers
Début
Ecrire ("Donner n")
Lire (n)
{lecture du tableau}
Pour i cr de 1 à n faire
Ecrire ("Donnez la valeur n°",i)
Lire (tabxi[i])
Ecrire ("Donnez l'effectif n° ",i)
Lire (tabni[i])
Fin pour
{calcul en somme}
somme_xini <- 0
Pour i cr de 1 à n faire
somme_xini <- somme_xini + tabxi[i]*tabni[i]
somme_ni <- somme_ni + tabni[i]
Fin pour
{calcul de la moyenne}
moyenne <- somme_xini/somme_ni
{résultat}
Ecrire ("La moyenne est ",moyenne)
Fin
Les sous-programmes :
déclare 1 s.p -> indiquer la liste des paramètres
formels.
Il y a deux sortes de sous-programmes :
- les procédures : 0 ou plusieurs paramètres qui pourront
être des données modifiées ou des résultats.
- les fonctions : 1 seul résultat (1 seule valeur). 1 ou plusieurs
paramètres donnés
L'appel d'une procédure est une instruction.
L'appel d'une fonction se fait dans une expression.
Exemple : Sp factorielle
. Premier cas : procédure
déclaration : procédure factorielle (donnée n:entier,résultat
f:entier)
application : factorielle (n,x)
Ecrire (n,"!=",x)
. Deuxième cas : fonction
déclaration : fonction factorielle (donnée n:entier):entier
application : Ecrire (n,"!=",factorielle (n))
On va maintenant faire un programme sur les matrices avec :
-s.p de lecture d'une matrice (remplissage)
-s.p d'écriture d'une matrice (affichage des valeurs de la matrice)
-s.p de somme de deux matrices
-s.p de produit de deux matrices.
-p.p qui demande la dimension des matrices, les lit, les écrit,
demande si on veut effectuer la somme ou le produit, effectue le travail
correspondant au choix et écrit la matrice résultat.
Algo calcul_matriciel
{effectue l'addition ou la multiplication de deux matrices à la
demande}
Constante
nmax=20 {maximum matrice 20*20}
type
matrice=tableau [1..nmax,1..nmax] de réels
{déclaration des sous-programmes}
Procedure lire_mat (donnees NL,NC:entier, résultat M:matrice)
Variables locales
i,j:entiers
Début
Pour i cr de 1 à NL faire {pour chaque ligne}
Pour j cr de 1 à NC faire {pour chaque colonne}
Ecrire ("Donnez le ",j,"ème
élément de le ligne ",i)
Lire (M[i,j])
Fin pour
Fin pour
Fin {procedure lire_mat}
Procedure ecrire_mat (donnees NL,NC:eniers, M:matrice)
Variables locales
i,j : entiers
Début
Pour i cr de 1 à NL faire
Pour j cr de 1 à NC faire
Ecrire (M[i,j])
Fin pour
Fin pour
Fin
Procedure somme (donnees A,B:matrice, donnees NL,NC:entier, C:matrice)
Variables locales
i,j : entiers
Début
Pour i cr de 1 à NL faire
Pour j cr de 1 à NC faire
C[i,j] <- A[i,j] + B[i,j]
Fin pour
Fin pour
Fin {procédure}
Procedure produit (donnees NL,NC,NLC:entiers, A,B,C:matrice)
Variables locales :
i,j,k : entiers
s : réel
Début
s <- 0
Pour i cr de 1 à NL faire
Pour j cr de 1 à NC faire
Pour k cr de 1 à NLC faire
s <- s + A[i,k] + B[k,j]
C[i,j] <- s
Fin pour
Fin pour
Fin pour
Fin
{PP}
Variables
NL1,NC1,NL2,NC2 : entier {dimension des deux matrices}
M1,M2,MR : matrice
choix : entier {somme ou produit}
Début
{lecture des dimensions}
Ecrire ("Donnez nb lignes matrice1")
Lire (NL1)
Ecrire ("Donnez nb colonnes matrice1")
Lire (NC1)
Ecrire ("Donnez nb lignes matrice1")
Lire (NL2)
Ecrire ("Donnez nb colonnes matrice1")
Lire (NC2)
{Appel lecture matrice1}
lire_mat (NL1,NC1,M1)
{Appel lecture matrice2}
lire_mat (NL2,NC2,M2)
{Appel écriture matrice1}
ecrire_mat (NL1,NC1,M1)
{Appel écriture matrice2}
ecrire_mat (NL2,NC2,M2)
{choix}
Ecrire ("Voulez-vous additionner (1) ou multiplier (2)")
Lire (choix)
Si choix = 1
alors {somme}
si NL1=NL2 et NC1=NC2
alors
somme (M1,M2,NL1,NC1,MR)
ecrire_mat (NL1,NC1,MR)
sinon
Ecrire ("Somme impossible !")
fin si
sinon {produit}
si NC1=NL2
alors
produit (NL1,NC2,NC1,M1,M2,MR)
ecrire_mat (NL1,NC2,MR)
sinon
Ecrire ("Produit impossible !")
fin si
fin si
fin
Rappel :
Lorsque l'on utilise la boucle pour, le nombre de répétition
est connu à priori. On compte le nombre d'exécution des corps
de la boucle (variable compteur).
Problème : si on ne connaît pas le nombre d'exécutions.
On utilisera alors une boucle tant que. Tant que condition
....
....
Fin tant que
* Le pour est un cas particulier de tant que.
Exemple : calcul du pgcd de deux entiers > 0
Variables : A,B,D : entiers
Début
Ecrire ("Donnez A")
Lire (A)
Ecrire ("Donnez B")
Lire (B)
D <- A mod B
Tant que D <> 0 faire
A <- B
B <- D
D <- A mod B
Fin tant que
Ecrire ("Le pgcd est ",B)
Fin
Exemple : calculer la moyenne d'une liste de nombre >= 0 terminé
par un nombre négatif
Algo moyenne
Variable : s,n,nb : entier
Début
nb <- 0
s <- 0
n <- 1
Tant que n > 0 faire
{dans ce cas, une valeur est nécessaire}
Ecrire ("Donnez la valeur : ")
Lire (n)
s <- s+n
nb <- nb + 1
Fin tant que
Ecrire ("La moyenne est : ",s/nb)
Fin
Algo polynôme
Type tab=tableau [0..100] d'entiers
Variables : i,puis,n,x,s : entier
d : tab
Début
Ecrire ("Polynôme du type a0+a1x+a2x²...")
{Ce programme calcule la valeur d'un polynôme}
Ecrire ("Donnez le degré du polynôme : ")
Lire (n)
Pour i cr de 0 à n faire
Ecrire ("Donnez le a correspondant au degré ",i,
": ")
Lire (d[i])
Fin pour
Ecrire ("Donnez la valeur de x:")
Lire (x)
s <- 0
puis <- 1
Pour i cr de 0 à n faire
s <- d[i]*puis + s
puis <- puis * x
Fin pour
Ecrire ("Le résultat du polynôme de degré ",n,"
et ayant pour valeur x : ",x," est ",s)
Fin
Exercice : Nous allons de nouveau calculer la valeur d'un
polynôme en utilisant cette fois des sous-programmes et en proposant
deux méthodes de calcul (classique ou Horner).
procédure affich_poly (donnees dg:entier, P:polynome)
{affichage d'un polynôme}
Variable i:entier
Début
Ecrire (P[dg],"x^",dg)
Pour i de dg-1 à 2 faire
si P[i] <> 0
alors
si P[i] > 0
alors
Ecrire ("+")
fin si
Ecrire (P[i],"x^",i)
fin si
Fin pour
si P[1] <> 0
alors
si P[1] > 0
alors
Ecrire ("+")
fin si
Ecrire (P[1],"x^")
fin si
si P[0] <> 0
alors
si P[0] > 0
alors
Ecrire ("+")
fin si
Ecrire (P[0])
fin si
fin
Procédure saisie_poly (résultat n:entier, TC:tab1,TExp:tab2)
constante : nbmax=20
type
tab1=tableau[1...nbmax] de réel
tab2=tableau[1...nbmax] d'entier
Variables locales : coef : réel
exp : entier
Début
Ecrire ("Donnez le premier coef")
Lire (coef)
si coef <> 0
alors
TC[1] <- coef
Ecrire ("Donnez le premier exposant")
Lire Texp[1]
Ecrire ("Donnez le deuxième coefficient")
Lire (coef)
n <- 1
x <- 0
Tant que coef <> 0 faire
n <- n+1
TC[n] <- coef
Ecrire ("Donnez votre exposant")
Lire (exp)
Tant que exp <= Texp [n-1] faire
Ecrire ("Exposant décroissant,
redonnez l'exposant")
Lire (exp)
Fin tant que
Texp[n] <- exp
Ecrire ("Donnez coef suivant (0 pour
arrêter")
Lire (coef)
Fin tant que
Fin si
Fin
Fonction classique (donnée dg:entier, x:réel, P:polynôme):réel
Variables locales : s:réel
i:entier
Début
s <- 0
puis <- 1
Pour i cr de 0 à dg faire
s <- d[i] * puis + s
puis <- puis * x
Fin pour
classique <- s
Fin
Fonction Horner (donnée dg:entier, x:réel,P:polynôme):réel
Variables locales : s:réel
i:entier
Début
s <- P[dg]
Pour i decr de dg-1 à 0 faire
s <- s * x + P[i]
Fin pour
Horner <- s
Fin
Programme principal
Variables : P:polynôme
dg:entier
x:réel
Début
Ecrire ("Donnez le degré du polynôme")
Lire (dg)
Saisie_poly (dg,P)
Ecrire ("P(x)=")
affich_poly (dg,P)
Ecrire ("Valeur de x : ")
Lire (x)
Ecrire("P(",x,")= ",classique (dg,x,P))
Ecrire("P(",x,")= ",Horner (dg,x,p))
Fin
Exercice 5p8
Constante N=10
Type
tab=tableau[1..N,1..N] de réels
fonction dominante (donnée D:entier;M:tab):booléen
Variable
i,j : entier
somme : réel
down : booléen
Début
i <- 1
down <- vrai
Tant que (i<=D) et down faire
{calcul somme ligne}
somme <- 0
Pour j cr de 1 à D faire
somme <- somme + abs (T[i,j])
Fin pour
si abs (T[i,j] <= somme - abs (T[i,j])
alors
down <- faux
fin si
{passage à la ligne suivante}
i <- i + 1
Fin tant que
dominante <- down
Fin
Programme principal
Début
Si dominante (D,M)
alors
Ecrire ("La matrice est à diagonale strictement
dominante.")
sinon
Ecrire ("La matrice n'est pas à diagonale
strictement dominante.")
fin si
fin
Exercice 8p9:
Constante nmax=20
Type
tab=tableau [1..nmax,1..nmax] de réel
Fonction nbzéro (donnée i,p:entier,M:tab):entier
Variable
j,nbz : entier
Début
nbz <- 0
Pour j cr de 1 à p faire
si M[i,j]=0
alors
nbz <- nbz + 1
fin si
fin pour
nbzero <- nbz
fin
Procedure echange_ligne (donnees i,j,p:entier;donnees modifiees M:tab)
{i,j=n° des lignes à permuter, pp nombre de colonnes de M}
Variable
k:entier
inter:réel
Début
Pour k cr de 1 à p faire
inter <- M[i,k]
M[i,k] <- M[j,k]
M[j,k] <- inter
fin pour
fin
fonction num_ligne (donnees n,p:entier,M:tab):entier
{retourne le n° de la ligne de la matrice M ayant le plus de zero}
Variables
i,max,no,nbz:entier
Début
max <- nbzero (1,p,M)
no <- 1
Pour i cr de 2 à n faire
nbz <- nbzero (i,p,M)
si nbz > max
alors
max <- nbz
no <- i
fin si
fin pour
num_ligne <- no
fin
procedure reorganiser (donnees n,p:entier;donnees modifiées M:tab)
{réorganise M(n*p) suivant le nombre de zero dans la ligne}
Variable
i:entier
Début
Pour i decr de n à 2 faire
echangeligne (i,num_ligne(i,p,M),p,M)
finpour
fin
Exercice 1p7
Constante nmax = 15
Type tab = tableau [0..nmax] d'entier
Procédure conversion_pos (donnée N:entier; résultat
T:tab)
Variable
i:entier
Début
pour i cr de 0 à nmax faire
T[i] <- N mod 2
N <- N div 2
fin pour
fin
Procédure c2 (donnée modifiée T:tab)
Variable
i,j:entier
Début
i <- 0
Tant que T[i]=0 faire
i <- i+1
Fin tant que
{i pointe sur le ième 1}
Pour j cr de i+1à nmax faire
si T[j]=0
alors
T[j] <- 1
sinon
T[j] <- 0
fin si
fin pour
fin
Procédure conversion (donnée N:entier;résultat T:tab)
Début
Si N<0
alors
conversion_pos (-N,T)
c2(T)
sinon
conversion_pos (N,T)
fin si
fin
Procédure affiche_bin (donnée T:tab)
Variable
i:entier
Début
Pour i decr de nmax à 0 faire
Ecrire (T[i])
fin pour
fin
Procédure calcul (données A,b:tab;résultat S:tab)
Variables
i,R : entier
Début
R <- 0
Pour i cr de 0 à nmax faire
S[i] <- (A[i]+B[i]+R) mod 2
R <- (A[i]+B[i]+R) div 2
Fin pour
Fin
Fonction conversion_dec_pos (donnée T:tab):entier
Variable
i,somme,puis2:entier
Début
somme <- 0
puis2 <- 1
pour i cr de 0 à nmax faire
somme <- somme + T[i]*puis2
puis2 <- puis2*2
fin pour
conversion_dec_pos <- somme
fin
Fonction conv_dec (donnée T:tab):entier
Début
Si T[nmax]=1
alors
c2(T)
conv_dec <- -1*conv_dec_pos (T)
sinon
conv_dec <- conv_dec_pos (T)
Programme principal
Variable
n1,n2 : entier
T1,T2,s : tab
Début
Ecrire ("Donner premier nombre : ")
Lire (n1)
Ecrire ("Donner deuxième nombre : ")
Lire (n2)
conversion (n1,T1)
conversion (n2,T2)
Ecrire ("Conversion de ",n1," = ")
affich_bin (T1)
Ecrire ("Conversion de ",n2," = ")
affich_bin (T2)
calcul (T1,T2,s)
Ecrire ("Somme = ")
affich_bin (s)
Ecrire ("Somme en base 10 = ",conv_dec(S))
Fin
Les TP en cliquant ici...