0% ont trouvé ce document utile (0 vote)
156 vues25 pages

Pascal

Ce document introduit la notion d'algorithme et décrit comment écrire un algorithme pour calculer les racines d'un polynôme du second ordre. Il présente également le langage de programmation Pascal et donne un exemple d'algorithme écrit en pseudo-code puis traduit en Pascal.

Transféré par

Angélica DEKE
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)
156 vues25 pages

Pascal

Ce document introduit la notion d'algorithme et décrit comment écrire un algorithme pour calculer les racines d'un polynôme du second ordre. Il présente également le langage de programmation Pascal et donne un exemple d'algorithme écrit en pseudo-code puis traduit en Pascal.

Transféré par

Angélica DEKE
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

Introduction à l'algorithmique ...

... Application au langage Pascal

(c) F. Bonnardot, Février 2005


Qu'est ce qu'un algorithme ?
Définition :
Ensemble d'instructions qui permettent à une personne
ou à une machine d'obtenir à partir de données la solution
d'un problème en un nombre fini d'étapes.

Exemple :
Calcul des racines x1 et x2 d'un polynôme du second
ordre : ax2+bx+c dans R.

Algorithme : Racines
Coefficients
Calcul des racines d'un x et x
a, b et c
polynôme du 2nd ordre 1 2
Comment obtenir les données ?
Indiquer les résultats ?
Algorithme : Racines
Coefficients
Calcul des racines d'un x et x
a, b et c
polynôme du 2nd ordre 1 2

Sorties :
Entrées :
Écran, Haut-parleur,
Clavier, Micro, Scanner,
Fichier sur disque,
Webcam, Fichier sur disque,
Imprimante, Variable en
Variable en mémoire, ... Ecran, clavier,
souris mémoire, ...
Unités de
Scanner stockage

Unité centrale
Imprimante
Comment décrire l'algorithme ?
(1/2)
Langage machine :
Suite de nombres directement compréhensibles par l'ordinateur.
Assembleur :
Suite de commandes qui seront directement traduites en langage
machine.
program_init:
pushl %ebp Problèmes :
movl %esp,%ebp
subl $4,%esp Jeu d'instruction de l'ordinateur limité
movb
call
$1,U_SYSWIN32_ISCONSOLE
FPC_INITIALIZEUNITS
(beaucoup de texte à écrire)
.L4:
leal U_SYSWIN32_OUTPUT,%edi
movl %edi,-4(%ebp)
Instructions différentes d'un µP à l'autre
pushl .L9 (re-écrire pour chaque µP)
pushl -4(%ebp)
pushl $0
call FPC_WRITE_TEXT_ANSISTR Code difficile à lire
pushl -4(%ebp)
call FPC_WRITE_END
pushl
call
$.L4
FPC_IOCHECK
Avantage : rapidité, ...
Comment décrire l'algorithme ?
(2/2)
Langages de haut niveau :
Langage proche du langage parlé (par les anglophones).
Program Chiffre;
{ Demande de saisir un chiffre et
Avantages :
recopie ce chiffre } Indépendant de l'ordinateur (+ ou -)
Var
(fonctionne sur PC, Mac, Unix, ...)
a : integer; { Chiffre lu }

Begin Lisibilité accrue


{ Demande du chiffre }
write ('Entrez un chiffre : ');
readln (a); Instructions « assez performantes »
{ Recopie le chiffre }
writeln ('Vous avez tapé ',a);
écriture sur l'écran, lecture de
End. texte, ...
On utilise un compilateur pour traduire le programme en langage machine.
Langage de Langage
Compilateur Exécutable
haut niveau machine
Quel langage ?
Beaucoup de langages de programmation (Grafcet, Calculatrice, C++, ...)

On étudiera ici le Pascal


N.B. : Delphi permet de programmer windows en Pascal

Méthode :
1°) On écrit d'abord l'algorithme en Français (pseudo-langage)
=> On réfléchit (étape d'analyse)
2°) On le traduit ensuite en Pascal
=> On adapte pour un ordinateur et un langage

L'étape 1 est la plus difficile... => livres d'algorithmie


L'étape 2 est la plus facile => Livres d'apprentissage de Pascal, C++, ...
Exemple : Racines d'un polynôme
du second ordre dans R (1/4)
Algorithme : Racines
Coefficients
Calcul des racines d'un x et x
a, b et c
polynôme du 2nd ordre 1 2

Analyse :
D'après le cours de maths de 1ère Étape 1 : Demander à l'utilisateur
de saisir a, b et c
On calcule ∆=b²-4ac
Étape 2 : Calcul de ∆
Si ∆<0 alors pas de racine dans R
Si ∆=0 alors racine double x=-b/(2a) Étape 3 : Selon ∆ calcul et affichage
Si ∆>0 alors deux racines : des racines
x1=-[b-sqrt(delta)]/(2a)
x2=-[b+sqrt(delta)]/(2a)
Forme simplifiée d'un programme
Remplacer les < >
Programme <nom du programme>

Variables utilisées :
<nom de la variable 1> : <type>;
<nom de la variable 2>,<nom de la variable 3> : <type>
<etc...>

Début du programme
<Instruction 1>
<Instruction 2>
<etc ...>
Fin du programme
Program <nom_programme>;
En Pascal,
Pas d'accent ni Var
<nom 1> : <type>;
d'espace <nom 2>,<nom 3> : <type>;
pour les noms <etc...>;
et les instructions. Begin
Chiffres utilisables <Instruction 1>;
<Instruction 2>;
à partir du 2nd <etc ...>
caractère. End.
Exemple : Racines d'un polynôme
du second ordre dans R (2/4)
Écriture en pseudo-langage :
Utilisation de 4 variables identifiées a, b, c et delta
Étape 1 : Demander à l'utilisateur Instruction : Écrire Écrire « Bonjour »
de saisir a, b et c Instruction : Lire Lire a, b, c

Étape 2 : Calcul de ∆ Affectation : delta <- b*b-4*a*c

Étape 3 : Selon ∆ calcul et affichage


des racines Instruction : Écrire Écrire « Delta= »,delta

Texte à écrire entre guillemets


Valeur de la variable delta : pas de guillemet
Exemple : Racines d'un polynôme
du second ordre dans R (3/4)
Programme Racines Polynôme ordre 2 Nom du programme
Variables utilisées :
Nom des variables a,b,c,delta : nombres réels Type des variables
Début du programme
Écrire « Entrez les coefficients a, b, c »
Toute variable
Lire a, b, c utilisée doit être
déclarée (permet de
delta <- b*b-4*a*c détecter les fautes de
Test Si delta<0 Alors
frappe)
Écrire « delta<0, pas de solution dans R »
Sinon
Décalage pour Si delta=0 Alors
plus de lisibilité Écrire « Racine double : x1= »,-b/2/a
Sinon
Début
Écrire « delta>0, deux racines »
Écrire « x1= »,-(b-sqrt(delta))/2/a
Écrire « x2= »,-(b+sqrt(delta))/2/a
Fin
Fin du programme
Exemple : Racines d'un polynôme
du second ordre dans R (4/4)
Programme Racines Polynôme ordre 2 Program RacPoly;

Variables utilisées : Var


a,b,c,delta : nombres réels a,b,c,delta : real;

Début du programme Begin


Écrire « Entrez les coefficients a, b, c » Write('Entrez les coefficients a, b, c');
Lire a, b, c Read (a, b, c);

delta <- b*b-4*a*c delta := b*b-4*a*c;

Si delta<0 Alors If delta<0 Then


Écrire « delta<0, pas de solution dans R » WriteLn ('delta<0, pas de solution dans R')
Sinon Else
Si delta=0 Alors If delta=0 Then
Écrire « Racine double : x1= »,-b/2/a WriteLn ('Racine double : x1= ',-b/2/a)
Sinon Else
Début Begin
Écrire « delta>0, deux racines » WriteLn ('delta>0, deux racines');
Écrire « x1= »,-(b-sqrt(delta))/2/a WriteLn ('x1= ',-(b-sqrt(delta))/2/a);
Écrire « x2= »,-(b+sqrt(delta))/2/a WriteLn ('x2= ',-(b+sqrt(delta))/2/a);
Fin End;
Fin du programme End.
Démonstration
Quelques types de données
Entiers relatifs (-1, 54, ...) : Integer en Pascal
Étendue : -231 à 231-1 (µP 32 bits) ; -215 à 215-1 (16 bits)
Nombres 231=2 147 483 648 (231-1)+1=-231 215=32 768
Réels (-1.6e-4, 3.1415926...) : Real en Pascal
Étendue : 5.0E-324 à 1.7E308 sur µP 32 bits intel
Principe : -1.6e-4 => 2 entiers : -0.16 et -3
Logique Booléen (True ou False) : Boolean en Pascal
Texte 1 seul Caractère ('B') : Char en Pascal
Chaîne de caractères ('Bonjour') : String en Pascal
Vecteurs Tableau 1D ([5 8 2 5]) : Array [1..4] of Real
Matrices Tableau 2D ([[ 86 5
1
8
0
]) : Array [1..2,1..3] of Real
]

Exemple d'utilisation : voir page suivante ...


Utilisation de différents types de
données en Pascal
Program Donnees;
{ Programme de démonstration des types de données }

{Variables utilisées }
Var
punit,ptot:real; (* prix unitaire, prix total *)
quantite :integer; (* quantité commandée *)
tva :real=0.206; (* tva *)
reference :string; (* référence produit *)

b:array [1..3] of real; (* vecteur à 3 éléments*)


c:array [1..3] of real=(1,5,9); (* vecteur à 3 éléments*)
A:array [1..2,1..3] of real; (* matrice 2x3 *)

Begin
punit:=1.30;
quantite:=3;
reference:='Stylo';

{ Calcul du prix total }


ptot:=quantite*punit;

{ Affiche le prix total }


writeln ('Prix total de ',reference,': ',ptot);

b [1]:=23;
A [2,1]:=9.9e3;
End.
Comment commenter un
programme en Pascal
Program ResistanceCu;
{ Ce programme calcul la résistance d'un fil de cuivre à partir de sa longueur
et de la section }
{ Auteur : Frédéric Bonnardot }
Uses WinCrt; { Uniquement pour Turbo Pascal Windows de Borland }

Var
section, longueur : real; { nombres saisis par l'utilisateur }
resistance : real; { resistance du fil }

begin
{ Lecture de la section et de la longueur du fil }
write ('Section du fil de cuivre en mm2 : ');
readln (section);
write ('Longueur du fil de cuivre en m : ');
readln (longueur);

{ Calcul }
resistance:=1.7e-8*longueur/section/1e-6*1e3;

{ Affichage du résultat }
write ('La résistance du fil est : ',resistan[Link],' mohms');
end.
Instructions
Les tests (si ... alors ...)
Si <condition> alors If <condition> Then
2 variantes : <instruction(s)> En Pascal : <instruction(s)>
Si <condition> alors If <condition> Then
<instruction(s)> En Pascal : <instruction(s)>
sinon Else
<instruction(s)> <instruction(s)>
<condition> :
(a=1 ou b≥2) et c≠1
s'écrit en Pascal
(a=1 or b>=2) and c<>1

1 seule <instruction>
instruction
<instruction(s)>
Début Begin
plusieurs <instruction> <instruction>;
<instruction> <instruction>;
instructions <...> <...>
Fin End
Exemple de test
On demande un nombre et on indique si il est positif ou négatif
Etapes : 1) Demander le nombre
2) Selon le signe écrire positif ou négatif

Besoins : une variable pour ranger le nombre


Si on considère que 0 est positif : Sinon :
Programme Signe nombre v2
Programme Signe nombre Variables utilisées :
nombre : nombre entier
Variables utilisées :
nombre : nombre entier Début du programme
Écrire « Entrez un nombre : »
Début du programme
Écrire « Entrez un nombre : » Si nombre<0 alors
Lire nombre Écrire « Nombre négatif »
Sinon
Si nombre<0 alors Si nombre>0 alors
Écrire « Nombre négatif » Écrire « nombre positif »
Sinon Sinon
Écrire « nombre positif ou nul» Écrire « nombre nul »
Fin du programme Fin du programme
Instructions
La sélection (selon ... faire)
Selon <variable de type entier ou caractère>
cas <valeur 1> faire <instruction(s)>
cas <valeur 2>,<valeur 3> faire <instruction(s)>
autres cas faire <instruction(s)> Facultatif
Fin selon

En Pascal :
Case <variable de type entier ou caractère> Of
<valeur 1> : <instruction(s)>;
<valeur 2>,<valeur 3> : <instruction(s)>;
Else <instruction(s)>
End

Exemple :
Case touche Of
'+' : WriteLn ('Somme : ',a+b);
'*' : WriteLn ('Produit : ',a*b);
Else WriteLn ('Touche inconnue.')
End
Exemple d'utilisation de selon
On lit deux nombres et on affiche un menu pour demander à l'utilisateur
si il veut calculer la somme, le produit, le quotient de ces deux nombres.
Programme Opérations

Variables utilisées :
a,b : nombres réels
touche : caractère

Début du programme
{ Lecture des données}
Écrire « Saisir 2 nombres a et b »
Lire a,b

{ Affichage du menu }
Écrire « Pour calculer la somme, tapez + »
Écrire « Pour calculer le produit, tapez * »
Écrire « Pour calculer le quotient, tapez / »

touche <- touche enfoncée au clavier

{ Réaction selon cette touche }


Selon touche
cas '+' faire Écrire « La somme est »,a+b
cas '*' faire Écrire « Le produit est »,a*b
cas '/' faire Écrire « Le quotient est »,a/b
autres cas faire Écrire « Je n'ai pas compris ce que vous voulez faire »
Fin Selon

Fin du programme
Instructions
Répétition (faire ... jusqu'à)
2 variantes : Faire Repeat
<instruction> <instruction>;
<instruction> En Pascal : <instruction>;
<...> <...>
Jusqu'à <condition> Until <condition>
Tant que <condition> faire While <condition> do
<instruction(s)> <instruction(s)>

En haut : on passe au moins une fois dans la boucle


En bas : si la condition n'est pas vérifiée au début, on n'exécute
aucune instruction
Exemple :
Repeat
WriteLn ('Entrer un nombre supérieur à 7 : ');
ReadLn (nombre)
Until nombre>7
Exemples de répétitions
On demande un nombre supérieur à 7. Si l'utilisateur fait une erreur
on redemande ce nombre.

1er cas : 2ème cas : on indique à


l'utilisateur qu'il s'est trompé
Programme lire un nombre v2
Programme lire un nombre
Variables utilisées :
Variables utilisées :
nombre : réel
nombre : réel
Début du programme
Début du programme
Répéter
Écrire « Entrez un nombre >7 : »
Écrire « Entrez un nombre >7 : »
Lire nombre
Lire nombre
Jusqu'à ce que nombre>7
Tant que nombre<=7 faire
Début
Écrire nombre
Écrire nombre,« n'est pas>7, entrez un nombre >7 : »
Fin du programme
Lire nombre
Fin

Écrire nombre
Exécuté au moins 1 fois Fin du programme
Peut ne pas être éxécuté
Instructions
Répétition n fois (pour . variant ...)
Pour <variable> variant de <début> à <fin> faire
<instruction(s)>

En Pascal :
For <variable>:=<début> to <fin> do Si fin<début, on utilisera
<instruction(s)> downto au lieu de to

Exemple :
moyenne:=0.;

For etudiant:=1 to 50 do
moyenne:=moyenne+note[etudiant];

moyenne:=moyenne/50;
Exemple de Boucle
On désire calculer la norme d'un vecteur à 20 dimensions
Programme norme vecteur

Variables utilisées :
vecteur : tableau de 20 réels =(5,64.5,58,4,578,54,6.54,245,564,54,6.5,6,4,46,46,46,46.8,4.86,4,4.8)
position: entier
norme : réel

Début du programme
{ Initialise la norme }
norme <- 0

{ Pour chaque élément du vecteur }


Pour position variant de 1 à 20 faire
norme <- norme + vecteur [position]*vecteur [position]

norme <- racine carrée de norme

Écrire norme
Fin du programme
Application au tri de données
On sait faire un tri à la main (trier un jeu de carte)
Mais on ne connait pas l'algorithme (cas général avec 1 million de cartes)...

1ère étape :
On prend des cartes et on regarde comment on fait à la main.

2ème étape :
On essaie d'écrire l'algorithme.
Règle du jeu :
On a dix cartes face cachées.
0.1€ pour retourner une carte.
Seules 2 cartes peuvent être retournées.

Il existe plusieurs méthodes de tri.


Evaluation
Document autorisé : cours Pascal

Rendre la feuille à 8h15

1. A quoi servent les instructions writeln et readln.

2. Écrire en pseudo-langage (en français) un programme qui demande


de saisir à l'utilisateur 2 nombres a et b et qui indique le plus grand
des deux ainsi que l'écart entre ces deux nombres.

Vous aimerez peut-être aussi