Programmation Pascal: Concepts Clés
Programmation Pascal: Concepts Clés
6ème U
Programmation
2023-2024 1 P. Renouprez
ECCSA Programmation 6U
[Link] : Langage Pascal
Il est suivi d'une partie pour la déclaration des variables signalée par
le mot réservé VAR. Toutes les variables (zones mémoires où sont
mémorisées des données pendant le déroulement du programme)
nécessaires doivent y être définie.
Arrive enfin le code en lui même signalé par le mot réservé BEGIN
et qui se terminera toujours par le mot réservé END suivi d'un point.
1.2.3. Affectation
perimetre := 3.141592 * diametre; (* instruction *)
2023-2024 2 P. Renouprez
ECCSA Programmation 6U
Déclaration :
1.4.2. Réels
Déclaration :
• + (addition) • * (multiplication)
• - (soustraction) • / (division)
Exercices :
1.5. L’alternative.
Dans la recette : toujours les mêmes ? dépendent-elle de quelque
chose d’externe ?
Exemples :
▪ Comparaison entre 2 nombres
1. BEGIN
2. ...
3. IF nbr1 > nbr2 (*SI condition *)
4. THEN (*ALORS UNE instruction *)
5. writeln(nbr1:3:2, ' est plus grand que ' nbr2:3:2)
6. ELSE (*SINON UNE instruction suivie d'un ; *)
7. writeln(nbr2:3:2, ' est plus grand que ' nbr1:3:2) ;
8. …
9. IF nbr1 > 0 (*SI condition *)
10. THEN (*ALORS UNE UNE instruction suivie d'un ; *)
11. writeln(nbr1:3:2, ' est un nombre positif) ;
2023-2024 4 P. Renouprez
ECCSA Programmation 6U
Exercices
1. Écrire un programme calculant la plus grande de deux valeurs
saisies par l’utilisateur. Faire la même chose avec trois valeurs.
1.6. Caractères
1.6.1. Déclaration :
VAR variable1, variable2, ..., variableN : CHAR
2023-2024 5 P. Renouprez
ECCSA Programmation 6U
1.7. Les chaines de caractères.
Il est souvent nécessaire de mémoriser plusieurs caractères
ensembles. Il existe un type de variable pour cela : les chaînes de
caractères : STRING.
1.7.1. Exercices :
2023-2024 6 P. Renouprez
ECCSA Programmation 6U
1.8. Booléens
1.8.1. Déclaration :
VAR variable1, variable2, ..., variableN : BOOLEAN;
Ces variables peuvent prendre soit la valeur TRUE (vrai), soit la valeur
FALSE (faux).
AND (et), OR (ou), NOT (non) et XOR (ou exclusif), sont de priorité
supérieure aux opérations de comparaison et ne peuvent opérer que sur
des booléens : A > B et C doit être écrit : (A > B) and (A > C). Les
parenthèses sont obligatoires pour ne pas faire en premier B and A.
2023-2024 7 P. Renouprez
ECCSA Programmation 6U
1.8.3. Exercices récapitulatifs
2023-2024 8 P. Renouprez
ECCSA Programmation 6U
b) 12 12 10 donne une moyenne générale calculée de 11 on
gardera donc ce 11
2023-2024 9 P. Renouprez
ECCSA Programmation 6U
2. Les itérations
instructions
Fin TantQue
while (condition) do
begin
instructions ;
end ;
instructions
JusquAceQue condition
repeat
begin
instructions ;
end ;
until condition ;
2.3. Boucle n
Pour i = 1 JusquA 10 FAIRE
FinFaire
2023-2024 10 P. Renouprez
ECCSA Programmation 6U
2.4.1. Exemples
1 1 1
2 4 8
3 9 27
:
20 400 8000
variable
i (entier) indice d’itération
Début
Pour i de 1 à 20 faire
Ecrire (i, (i*i), (i*i*i))
Fin pour i
Fin
Phase 3 : Programmation (codification).
2023-2024 11 P. Renouprez
ECCSA Programmation 6U
On peut désormais choisir un langage de programmation cible, et
traduire le précédent algorithme pour en obtenir le programme
correspondant …
program premier;
uses crt;
var i : integer ;
begin
for i:=1 to 20 do
begin
writeln(i,' ',(i*i),' ',(i*i*i)) ;
end ;
readkey() ;
end.
2.4.2. Exemple 2
program premierbis;
uses crt;
var
n,r,i:integer;
begin
write('Donnez un entier naturel : ');
read(n);
r:=0;
for i:=1 to n do
begin
if (n mod i) = 0
then
r:=r+1;
end ;
if r=2
then
write('le nombre est premier')
else
write('le nombre n''est pas premier');
readkey() ;
end.
Que fait ce programme ?
2023-2024 12 P. Renouprez
ECCSA Programmation 6U
2.4.3. PgmBCL01
2.4.4. PgmBCL02
2.4.5. PgmBCL03
1 + 2 + 3 + 4 + 5 = 15
2.4.6. PgmBCL04
2.4.7. PgmBCL05
2023-2024 13 P. Renouprez
ECCSA Programmation 6U
Entrez le nombre numéro 20 : 6
Le plus grand de ces nombres est : 14
2.4.8. PgmBCL06
PgmBCL08
Écrire un programme qui permet de saisir un entier qui représente le
rang d'une journée de la semaine (dimanche est représenté par 1, lundi par
2, ...samedi par 7) et d'afficher un message du genre :
2.4.9. PgmBcl09
*
**
***
****
***
**
*
2.4.10. PgmBcl10
2023-2024 14 P. Renouprez
ECCSA Programmation 6U
C'est un enfant de sexe masculin.
On répète le même traitement tant que l'usager décide de continuer
(O/N). Une personne entre 0 et 11 ans est considérée comme enfant, entre
12 et 17 ans comme adolescent(e), plus grand ou égale à 18ans est
considérée comme adulte
2023-2024 15 P. Renouprez
ECCSA Programmation 6U
[Link] chaînes de caractères.
Type
String = array [ 0 .. 255 ] of char ;
Une chaîne de caractères est un ensemble de lettre délimité par des
simples quotes : '
C
P
Remarque, dans cet exemple, le compilateur a pris en compte les
deux espaces blancs que se sont des caractères qui se trouvent avant et
après « computer ». Pour cela le langage pascal pris en compte les
espaces blancs que se sont des caractères.
3.3. Concaténer
Pour coller deux chaînes de caractères l’une à l’autre, utilisez
l’opérateur +
St := ‘bon’ + ‘jour’ ;
2023-2024 16 P. Renouprez
ECCSA Programmation 6U
3.4. Exercices
3.4.1. Ex01
A partir d’une phrase donnée : (la fonction length(cha) donne la
longueur de cha)
4. Afficher la phrase avec les mots dans l'ordre mais à l'envers (la
phrase → l srhp)
3.4.2. Ex02
3.4.3. Ex03
exemple
Code personnel de l’employé: 0002313
Nom de l’employé :COTINE
Prénom de l’employé :Annie
Mademoiselle Annie COTINE travaille au service informatique depuis
2000.
2023-2024 17 P. Renouprez
ECCSA Programmation 6U
3.4.4. Ex04
Idem EX03 Mais avec les initiales des nom et prénom en position 8
et 9 et vérification de la concordance des initiales avec les nom et prénom
introduits.
exemple
Code personnel de l’employé: 0002313CA
Nom de l’employé :COTINE
Prénom de l’employé :Annie
Mademoiselle Annie COTINE travaille au service informatique depuis
2000.
3.4.5. Ex05
6) Ex06
Écris un programme qui mémorise une chaîne de caractères. Puis
qui construit la chaîne inverse et détermine en fonction de cette dernière
si la chaîne de caractères est ou non un palindrome.
2023-2024 18 P. Renouprez
ECCSA Programmation 6U
[Link] tableaux
Un outil particulièrement pratique et proposé dans la grande
majorité des langages est le tableau. Il permet le stockage d'une série
d'éléments de même type.
12 16 07 13 09
En pascal, un tableau peut être déclaré de la manière suivante :
var
t : array[1..5] of integer;
Ainsi, ce code déclare un tableau d'entiers, dont les indices vont de
1 à 5. Cet indice permet d'accorder un numéro à chacune des cases et d'y
accéder.
Exemple :
var
t : array[1..5] of integer;
begin
t[1] := 12;
t[2] := 16;
t[3] := 7;
t[4] := 13;
t[5] := 9;
end.
Voilà comment il est possible d'affecter une valeur à chacune des
cases du tableau. L'accès en lecture se fait par la même notation.
var
t : array[1..5] of integer = (12,16,7,13,9);
Plus généralement, nous utiliserons une boucle pour initialiser un
tableau.
2023-2024 19 P. Renouprez
ECCSA Programmation 6U
var
t : array[1..5] of integer;
i : integer ;
begin
for i:=1 to LONGTABLEAU do
begin
write(‘valeur élément ’, i, ’ : ‘) ;
readln(t[i]) ;
end ;
4.1. Exemple :
4.1.1.
Program exemple ;
Var tab : Array[1..10] Of Integer ;
i : Integer ;
BEGIN
For i:=1 To 10 Do
Begin
tab[i]:=i ;
WriteLn(sqrt(tab[i])*5+3) ;
End;
END.
Représentation du tableau
indice TABL_VILLE
1 NANCY
2 METZ
NBVIL= 3 BESANCON
:
MAXVIL
2023-2024 20 P. Renouprez
ECCSA Programmation 6U
4.1.4. Phase 2 : L'algorithme associé à son lexique
Programme
Données générales
Constante
MAXVIL = 100
Variable
TABL_VILLE : table [1..MAXVILLE] chaîneDeCaractere
NBVIL : entier //taille réellement utilisée du tableau
RangDonne :entier
//Données de travail
i :entier
VILLE_CHERCHEE :String
VilleTrouvée :Booléen
Début
--------- 1 -----------------------------
Saisir(NBVIL)
Tant Que NBVIL PAS dans [1..MAXVIL] //contrôle taille du
tableau
Debut
Afficher(NBVIL doit etre compris dans [1..MAXVIL])
Saisir(NBVIL)
Fin
--------- 2 -----------------------------
Pour i ← 1 à NBVIL faire
Debut
Saisir (TABL_VILLE [i])
Fin
--------- 3 -----------------------------
Pour i ← 1 à NBVIL faire
Afficher (TABL_VILLE [i])
Fin
--------- 4 -----------------------------
Saisir(VILLE_CHERCHEE)
i ← 1
VilleTrouvée ← Faux
Répéter
SI VILLE_CHERCHEE = TABL_VILLE[i]
ALORS Afficher (TABL_VILLE [i])
VilleTrouvée ← VRAI
SINON i ← i +1
FIN
Jusqu’à VilleTrouvée OU FinTableauAtteinte
SI not VilleTrouvée
Alors
Afficher(Ville pas dans le tableau)
Fin
--------- 5 -----------------------------
Saisir (RangDonne)
Tant Que RangDonne pas dans [1.. NBVIL] contrôle taille utile
du tableau
Afficher( RangDonne doit etre compris dans [1..NBVIL])
Saisir(RangDonne)
Fin
Afficher (TABL_VILLE [i])
Fin
2023-2024 21 P. Renouprez
ECCSA Programmation 6U
Deux remarques :
2023-2024 22 P. Renouprez
ECCSA Programmation 6U
Prenez celle qui vous semble la plus logique...
// VERSION 1
Saisir(Matricule_CHERCHE)
i ← 1
MatriculeTrouvé ← Faux
Répéter
SI Matricule_CHERCHE = TABL_Matricule[i]
ALORS MatriculeTrouvé← VRAI
SINON i ← i +1
FINSI
Jusqu’à MatriculeTrouvé OU FinTableauAtteinte
// VERSION 2
Saisir(Matricule_CHERCHE)
i ← 0
MatriculeTrouvé ← Faux
Répéter
i ← i +1
SI Matricule_CHERCHE = TABL_Matricule[i]
ALORS MatriculeTrouvé← VRAI
FINSI
Jusqu’à MatriculeTrouvé OU FinTableauAtteinte
2023-2024 23 P. Renouprez
ECCSA Programmation 6U
4.2.2. Recherche d'un élément pouvant être présent de
nombreuses fois
Deux remarques :
Saisir(Prenom_CHERCHE)
PrenomTrouvé ← Faux
POUR i ← 1 JUSQU'A TailleTableau
SI Prenom_CHERCHE = TABL_Prenom[i]
ALORS TRAITEMENT (TABL_Prenom [i])
PrenomTrouvé← VRAI
FINSI
FinPOUR
SI not PrenomTrouvé
ALORS
Afficher(Prenom pas dans le tableau)
SINON
Traitement DU ou DES prenoms trouvé
FinSI
4.3. Exercices
4.3.1. Ex01
Tableau 1 :
4 8 7 9 1 5 4 6
Tableau 2 :
7 6 5 2 1 3 7 4
Tableau à constituer :
11 14 12 11 2 8 11 10
2023-2024 24 P. Renouprez
ECCSA Programmation 6U
4.3.2. Ex02
4.3.3. Ex03
On veut représenter un menu composé d’au maximum 20 noms de plat associé à
son prix respectif.
0. définir la structure de données en tableaux associés permettant de
représenter le menu.
Ecrire l’algorithme :
1. qui permet de saisir un certain nombre de plats et prix associés.
2. qui permet d’afficher le menu de tous les plats et prix à la carte.
3. qui permet d’afficher le prix d’un plat dont on fournira le nom (on suppose
que chaque nom de plat est unique dans le menu).
4. qui permet d’afficher tous les noms de plat correspondant à un prix donné.
5. qui permet d’afficher tous les noms de plat correspondant à une fourchette
de prix donnée (compris entre un prix minimum, et un prix maximum).
6. qui permet d’afficher le nom et prix d’un plat dont on donnera le rang dans le
menu (indice dans le tableau).
7. qui permet d’augmenter l’ensemble des prix du menu de 10%
2023-2024 25 P. Renouprez
ECCSA Programmation 6U
var
tab1 : Array[0..10, 0..10] Of Byte ;
tab2 : Array[0..10, 0..100] Of Integer ;
tab3 : Array[-10..10, -10..10] Of Real ;
tab4 : Array[5..7, 20..22] Of String ;
tab5 : Array[1..10, 1..10, 1..10, 0..2] Of Char ;//4 dimensions
var
t : array[1..2][1..3] of integer;
begin
t[1][1] := 12;
t[1][2] := 16;
t[1][3] := 7;
t[2][1] := 13;
t[2][2] := 9;
t[2][3] := 9;
end.
Voilà comment il est possible d'affecter une valeur à chacune des
cases du tableau. L'accès en lecture se fait par la même notation.
var
t : array[1..2][1..3] of integer = ((12,16,7),(13,9,9));
Plus généralement, nous utiliserons deux boucles imbriquées pour
initialiser un tableau à deux dimensions.
var
t : array[1..2][1..3] of integer;
i,j : integer ;
begin
for i:=1 to 2 do
for j:=1 to 3 do
begin
write(‘valeur élément ’, J, ’de la ligne ‘, ‘i’ ’ : ‘) ;
readln(t[i][j]) ;
end ;
end.
2023-2024 26 P. Renouprez
ECCSA Programmation 6U
4.5. Exercices
4.5.1. Occupation de salle
Une salle de réunion peut être utilisée par différents employés d’une
entreprise. La réservation se fait par plage d’une heure, de 8H00 du matin à 19H00.
Chaque plage d’une heure commence à l’heure pile (par exemple, il y a une plage
9H00-10H00 mais il n’y a pas de plage 9H15-10H15.
Une dimension est utilisée pour coder les jours ouvrables de 1 (lundi) à 5
(vendredi).
Question 1 affichage
écrire un programme qui déclare la variable tableau OccupationSalle
comme ci-dessus et qui affiche l’occupation de la salle de façon intelligible (par
exemple : salle occupée le mardi de 9H00 à 10H00).
Question 3 réservation
écrire un programme qui permet à l’utilisateur de réserver une plage. Il faut
vérifier que la salle est libre au moment demandé.
2023-2024 27 P. Renouprez
ECCSA Programmation 6U
4.5.2. Tableau de vente
On va considérer un tableau à deux dimensions qui regroupe les informations
relatives aux ventes de voitures dans une concession.
Une case contient le nombre de voitures d’un modèle donné vendu par un
vendeur X.
Question 1
On suppose qu’il y a 4 modèles et 4 vendeurs. Écrivez un programme qui crée
le tableau des ventes et lit au clavier les données permettant de le remplir.
Question 2
Ecrivez un programme qui donne le nombre d’exemplaires vendus pour
chacun des modèles.
Question 3
On donne le prix de chaque modèle dans un second tableau à une seule
dimension. Ecrire un programme qui calcule le chiffre d’affaire généré par chacun
des vendeurs, c’est à dire le total de ses ventes exprimé en euros.
2023-2024 28 P. Renouprez
ECCSA Programmation 6U
[Link] procédures et fonctions
5.1. Introduction1
On peut regrouper un ensemble d'instructions sous un même nom. On forme
alors un sous-programme ou procédure. On utilise les procédures :
PROGRAM NomProgramme
USES
VAR variables;
définition des procédures; {sous-programmes}
BEGIN
instructions
END
Une procédure est donc un petit programme et fonctionne comme lui avec son
mot clé : PROCEDURE sa déclaration variables VAR son BEGIN et son END.
PROCEDURE NomProcedure ;
VAR
BEGIN
instructions
END ;
On peut appeler une procédure déclarée dans une routine n'importe où dans
cette routine en indiquant simplement son nom comme si c'était une instruction. A
l'appel d'une procédure, le programme interrompt son déroulement normal, exécute
les instructions de la procédure, puis retourne au programme appelant et exécute
l'instruction suivante.
1
[Link]
2023-2024 29 P. Renouprez
ECCSA Programmation 6U
PROGRAM ProgrammeMenu
USES
VAR variables;
définition des procédures; {sous-programmes}
PROCEDURE AffichageMenu;
VAR
BEGIN //procedure
writeLN(' Faites votre choix :')
writeLN(' --------------------')
...
END ;
BEGIN //programme
REPEAT
AffichageMenu ;
until choix = '9'
END
En d'autres termes :
* Une variable est LOCALE pour une procédure X si elle est déclarée
dans X. Elle n'existe que dans X (et dans les procédures déclarées à
l'intérieur de X). La routine qui comporte la procédure X ne peut donc pas
accéder à cette variable locale.
Si l'on avait déclaré une variable I dans la procédure LIGNE (au lieu
de N ou J), celle-ci aurait été locale à la procédure, c'est à dire que, dans
le programme principal, I désigne une autre case mémoire que dans la
2023-2024 30 P. Renouprez
ECCSA Programmation 6U
procédure. Modifier la variable locale I ne modifie pas la variable globale I
(momentanément inaccessible).
2023-2024 31 P. Renouprez
ECCSA Programmation 6U
{ programme principal }
BEGIN
writeln('entrez 4 valeurs : ');
readln(a,b,c,d);
aff_somme(a,b);
aff_somme(3,5);
aff_somme(c+a,d)
END.
En appelant AFF_SOMME(A,B), la procédure prend pour X la valeur
de A, et pour Y la valeur de B. On dit que les arguments sont "passés par
valeur". Mais si la procédure modifiait X ou Y, A et B ne seraient pas
modifiés dans le programme appelant. Pour répercuter les modifications
des arguments, il faut les déclarer comme "variables" (ils sont alors dits
"passés par adresse").
5.5. Exercice
Crée un programme qui au travers d’un menu propose à l’utilisateur
de calculer les périmètres et surfaces des différentes formes géométrique
que tu connais (carré, rectangle, triangle, cercle, …).
Chacun des calcul devra se faire dans une procédure qui lui est
propre.
2023-2024 32 P. Renouprez
ECCSA Programmation 6U
program classer(input,output);
var a,b,c:real;
function MAX(x,y:real):real;
begin
if x>=y then MAX:=x else MAX:=y ;
end;
{ programme principal }
begin
writeln('entrez deux valeurs : ');
readln(a,b);
writeln('le plus grand est ',max(a,b))
end.
La fonction MAX a 2 paramètres réels (X et Y) et renvoie un réel.
5.6.1. Ex01
5.6.2. Ex02
2023-2024 33 P. Renouprez
ECCSA Programmation 6U
5.6.3. Ex03
Soit la structure Personne schématisée par
• le nom (chaîne de 30 caractères max),
• le numéro de téléphone (10 caractères max),
• le numéro de carte bancaire (entier non signé).
Écrire un programme qui enregistre jusqu'à 100 personnes dans un tableau.
Écrire une série de fonctions qui testent si les données entrées sont
correctes :
• Une fonction isString pour vérifier que le nom ne contient pas
de chiffres
• Une autre fonction isNumber pour vérifier que le numéro de
téléphone ne contient pas de lettres de l'alphabet
Indication :
5.6.4. PgmFct
2023-2024 34 P. Renouprez
ECCSA Programmation 6U
[Link] choix multiple.
Dans certains cas le nombre des alternatives pour une MÊME
variable est tellement grand qu’il est nécessaire d’enchaîner plusieurs If.
If choix = 1
then Traitement01
else If choix = 2
then Traitement02
else If choix = 3
then Traitement03
else If choix = 4
then Traitement04
else If choix = 5
then Traitement06
else TraitementAutres ;
Ce cas de figure est tellement fréquent que les concepteurs de
langage ont prévu une instruction pour ces cas de figures. En Pascal, il
s’agit de l’instruction Case variable of valeur : end;
Case choix of
1 : Traitement01 ;
2 : Traitement02 ;
3 : Traitement03 ;
4 : Traitement04 ;
5 : Traitement05 ;
6 : Begin
code
…
end ;
else TraitementAutres ;
end ;
Ce qui es, tu le conviendras plus lisible et facile à écrire.
2023-2024 35 P. Renouprez
ECCSA Programmation 6U
[Link] ensembles
Un ensemble est une "collection" d'éléments de même type (cf cours
maths). L’utilisation la plus courante est l’ensemble de caractère attendu :
CONST
MINUSCULES = [‘a’..’z’];
MAJUSCULES = [‘A’..’Z’];
CHIFFRES = [‘0’..’9’];
Le type ensemble est défini par SET OF :
TYPE
tEnsDeCaracteres = SET OF char ;
VAR
caractereAutorises : SET OF char;
L'ensemble vide est : [].
TYPE
tEnsDeCaracteres = SET OF char ;
Procedure isCaractereValide(c:char ;
ensemble :tEnsDeCaracteres):boolean ;
On teste l'appartenance d'un élément par IN :
VAR
reponse : char ;
BEGIN
if reponse IN [‘o’,’O’,’N’,’n’]
then…
if NOT (reponse IN [‘o’,’O’,’N’,’n’])
On peut faire les opérations suivantes :
2023-2024 36 P. Renouprez
ECCSA Programmation 6U
[Link] fichiers
8.1. Introduction
Jusqu'à présent, de l'exécution à l'autre d'un programme il fallait
réintroduire toutes les données. Pour pouvoir récupérer des données d'un
programme à un autre, il faut les mémoriser dans un fichier. La
manipulation de ces fichiers doit respecter certaines règles.
FiLogique : TEXTFILE ;
Ces fichiers ne se lisent que séquentiellement, ligne après ligne.
Ces fichiers texte sont encore très utilisés pour les transferts de
données entre logiciel (.csv que nous verrons plus tard).
assign(nomLogique,nomPhysique)
2023-2024 37 P. Renouprez
ECCSA Programmation 6U
8.2.2. Manipulation des fichiers
C’est aussi lui qui détermine le résultat des opérations telles que : Eof (nomLogique)
qui nous signale si la fin du fichier est atteinte, s’il y a encore une ligne à lire/traiter.
2023-2024 38 P. Renouprez
ECCSA Programmation 6U
8.2.6. Résumé fichiers texte (longueur variable)
Var Var
FiLogique : TEXTFILE ; FiLogique : TEXTFILE ;
chaine: string ; chaine: string ;
8.2.7. Exercices 01
2023-2024 39 P. Renouprez
ECCSA Programmation 6U
8.2.8. Exercices 02
3. Qui remplace les lettres accentuées par leur équivalent sans accent
2023-2024 40 P. Renouprez
ECCSA Programmation 6U
2
Exemples d’erreurs possibles
2
Source : [Link]
2023-2024 41 P. Renouprez
ECCSA Programmation 6U
8.2.10. Exercices
Nombre phrase/mot ?
Écrire un programme qui détermine, dans un fichier texte dont le
nom est entré au clavier, le nombre de phrases terminées par un point, un
point d'interrogation ou un point d'exclamation.
Analyse texte
Écrire un programme qui détermine, dans un fichier texte dont le
nom est entré au clavier:
• le nombre de chacune des lettres de l'alphabet (sans distinguer les
majuscules et les minuscules),
• le nombre de mots,
• le nombre de paragraphes (c.-à-d.: des retours à la ligne),
Les retours à la ligne ne devront pas être comptabilisés dans les
caractères. On admettra que deux mots sont toujours séparés par un ou
plusieurs des caractères suivants:
• espace
• ponctuation: . : , ; ? !
• parenthèses: ( )
• guillemets: "
• apostrophe: '
Nom du fichier texte : [Link]
Votre fichier contient:
12 paragraphes
571 mots
4186 caractères
dont
279 fois la lettre a
56 fois la lettre b
. . .
3 fois la lettre z
et 470 autres caractères
2023-2024 42 P. Renouprez
ECCSA Programmation 6U
Programme MinusCol
Type ligne
t_ligne = String ;
Fonction minusCar
function minusCar(c : char) : char ;
If c in [‘A’..’Z’]
then
minusCar:= chr(ord(c)+32)//lowerCase(c)
else
minusCar:=c;
Procédure minusLig
procédure minusLig(var s : t_ligne);
Procédure casseNom
procédure casseNom(nom1, Nom2 : t_ligne);
Procédure casseFi
procédure casseFi(var f1, f2 : text);
Programme principal
program minusCol;
2023-2024 43 P. Renouprez
ECCSA Programmation 6U
Seek(FiLogique, numeroDEnregistrement) ;
nombreDEnregistrement:=FileSize(FiLogique) ;
8.4. Exemples
8.4.1. Exemple
TYPE
FichierDonnee = FILE OF Real ;
VAR
FiDonnee: FichierSequentiel;
nbrReel: real ;
BEGIN {main}
Assign ( FiDonnee, '[Link]' );
Rewrite ( FiDonnee ); {*ouverture du fichier en mode lecture *)
repeat begin
writeln('Entrez un reel a ecrire dans le fichier');
readln(nbrReel);
write(FiDonnee, nbrReel);
end ;
until nbrReel = 0 ;
Close ( FiDonnee )
END . (* -- main *)
2023-2024 44 P. Renouprez
ECCSA Programmation 6U
8.4.2. Exemple
TYPE
FichierSequentiel = FILE OF Real ;
VAR
F: FichierSequentiel;
. . .
FUNCTION SommeFichierReel ( VAR Fichier: FichierSequentiel ): Real;
VAR
X, S: Real ;
BEGIN
S:=0;
WHILE NOT Eof ( Fichier ) DO BEGIN
Read ( Fichier, X );
S := S + X
END ; (* -- WHILE, Eof( Fichier ) *)
SommeFichierReel := S
END ; (* -- SommeFichierReel *)
. . .
BEGIN {main}
Assign ( F, '[Link]' );
Reset ( F ); {* ouverture du fichier en mode lecture *)
Writeln( SommeFichierReel( F ) );
Close ( F )
END . (* -- main *)
8.4.3. exemple
Debut dupliquerFichier
Associer (f1,'[Link]')
Associer (f2,'[Link]')
Ouvrir(f1)
Recréer(f2)
TANT QUE NonFinFichier(f1) FAIRE
Lire(f1,ch)
Ecrire(f2,ch)
FINTANTQUE
Fermer(f1)
Fermer(f2)
Fin Inconnu
2023-2024 45 P. Renouprez
ECCSA Programmation 6U
8.4.4. Table de routage
2023-2024 46 P. Renouprez
ECCSA Programmation 6U
8.4.5. Encodage relevés journaliers de température :
Ecrire un programme qui lit les 8 fichiers de relevé d'un jour donné
(de [Link] à de [Link] ).
Le programme affiche le fichier qu'il traite, puis une fois tous les
fichiers traités, affiche les données du tableau comme suit :
2023-2024 47 P. Renouprez
ECCSA Programmation 6U
8.4.6. Bibliothèque
Vide la table
2023-2024 48 P. Renouprez
ECCSA Programmation 6U
8.4.7. Programme CreationProfilUtilisateur.
Televe = record
nom : string[20];
prenom : string[25];
age : integer;
presence: boolean;
dateNais: string[8];
end;
A l’aide de ce fichier, crée un fichier .csv (fichier de type texte où les
champs de l'enregistrement sont séparés par des virgules) dont les
champs sont les suivants :
pseudonyme,nomPrenom,MotDePasse,Type,Classe,Annee,QuotaImpr
ession(pages),QuotaDisque(Mo),Internet(true/false)
2023-2024 49 P. Renouprez
ECCSA Programmation 6U
8.4.8. Exercice
Ecrire une série de fonctions qui testent si les données entrées sont
correctes :
Utilisez une procédure Up(s: string) est utilisée pour mettre tous les
caractères de la chaîne en majuscules en se servant de la fonction
UpCase, ceci pour mettre fin à la lecture dès lecture de 'FIN' !
2023-2024 50 P. Renouprez
ECCSA Programmation 6U
8.4.9. Dictionnaire de mot
Crée un programme qui
1. Lit le fichier [Link] contenant les paragraphes d'un article
du journal (affiche l'article à l'écran)
4. Après avoir traiter ton article, affiche tous les mots que tu as
sélectionné (que tu as écris dans ton fichier mot)
4. de quitter le programme
Bon travail
2023-2024 51 P. Renouprez
ECCSA Programmation 6U
[Link] types enregistrement
La structure de tableau permet de traiter des données composées
de plusieurs éléments tous de même type. Or d'autres données sont
formées d'éléments de types différents comme par exemple:
• ...
9.1. Généralités
Un enregistrement (record) est formé d'un ou de plusieurs éléments
(ou champs) pouvant être de types différents.
Exemples:
record
notes : t_notes;
moyenne : real;
suffisant : boolean;
end
RECORD
reference : integer;
jour : date; {enregistrement d'enregistrement}
client : string [100];
total_HT : real
END;
RECORD
jour : 1..31;
mois : 1..12;
an : 1980..2020 ;
END;
2023-2024 52 P. Renouprez
ECCSA Programmation 6U
9.2. Syntaxe
Les types enregistrement se déclarent ainsi:
type
t_branche = record (* notes d'une branche *)
notes : t_notes;
moyenne : real;
suffisant : boolean;
end ;
t_nombre_complexe = record (* nombre complexe *)
partie_reelle : real;
partie_imaginaire : real;
end;
Des variables de ces types se déclarent comme toujours:
var
maths : t_branche;
nombre_1, nombre_2 : t_nombre_complexe;
fi_nbr_cplx : array [1..20] of t_nombre_complexe;
9.3. Exercices
9.3.1. Ex01
Ecrire l’algorithme :
1. qui permet d’ajouter un certain nombre de personnes dans le
répertoire
2. qui permet d’afficher toutes les personnes du répertoire
3. affichage de tous les n° de téléphone (et noms) correspondant à
un prénom donné
4. affichage du n° de téléphone correspondant à un prénom et un
nom (unique) donnés (Il n'a donc pas de synonyme)
5. affichage des informations (nom, prénom, tel) correspondant à un
rang dans le tableau TABL_AGENDA donnée
6. affichage des informations (nom, prénom, tel) correspondant
aux personnes de Bruxelles (préfixe téléphonique 02)
7. modification du n° de téléphone correspondant à un prénom et un
nom (unique) donnés (Il n'a donc pas de synonyme)
2023-2024 53 P. Renouprez
ECCSA Programmation 6U
9.3.2. jeu du 421
const
NBRCARTE = 52;
type
TcarteJeu = record
couleur: string;
carte : string;
poids : integer;
end;
Tjeu = array [0..(NBRCARTE-1)] of TcarteJeu ;
...
function InitTableau():Tjeu;
var i,j : integer;
couleur : array [0..3] of string = ('Coeur','Carreau','Trefle','Pique');
nbCarteCoul : integer;
begin
nbCarteCoul := NBRCARTE DIV 4;
for i:=0 to 3 do
begin
for j:= 0 to ((nbCarteCoul)-1) do
begin
InitTableau[(i*nbCarteCoul)+j].couleur :=couleur[i];
if j<1
then begin
InitTableau[(i*nbCarteCoul)+j].carte:= 'AS';
InitTableau[(i*nbCarteCoul)+j].poids:=11;
end
else begin
InitTableau[(i*nbCarteCoul)+j].poids:=j+1;
if j<10
then begin
InitTableau[(i*nbCarteCoul)+j].carte:= IntToStr(j+1);
end
else if j = 10
then InitTableau[(i*nbCarteCoul)+j].carte:='Valet'
else if j = 11
then InitTableau[(i*nbCarteCoul)+j].carte:='Dame'
else InitTableau[(i*nbCarteCoul)+j].carte:='Roi';
end;
end;
end;
end;
2023-2024 54 P. Renouprez
ECCSA Programmation 6U
9.3.4. Le taquin
Ouvrir : Exo-Tableaux/Taquin/[Link]
Le formulaire
Principe du jeu
Lorsqu'on clique sur un chiffre se trouvant à coté du trou (le carré noir), le
chiffre est échangé avec le trou.
Le but du jeu est d'arrivé à ranger les chiffres dans l'ordre (c.a.d comme ci-
dessus) en effectuant plusieurs fois cette opération. Voilà par exemple deux coups
joué depuis le début du jeu:
Situation initiale Après avoir cliqué sur le 5 Après avoir cliqué sur le 2
1 ) Déclaration du tableau
Le jeu est représenté en mémoire par le tableau TabJeu. Il s'agit d'un tableau
d'entiers à deux dimensions de trois lignes et trois colonnes. Les lignes et les
colonnes sont indicées de 0 à 2.
2) Initialisation du tableau
Pour que le programme affiche correctement le jeu au début, il vous faudra
complèter la procédure MettreLesChiffresDansLOrdre.
2023-2024 55 P. Renouprez
ECCSA Programmation 6U
Pour échanger les deux cases du tableau TabJeu vous utiliserez la procédure
EchangerLesCases:
EchangerLesCases(i1,j1,i2,j2:integer);
//Echange TabJeu[i1,j1] avec TabJeu[i2,j2]
Pour afficher le jeu après avoir modifié le tableau, appelez la procédure
AfficherLeJeu.
2023-2024 56 P. Renouprez
ECCSA Programmation 6U
9.3.5. Le Solitaire
Ouvrir : Exo-Tableaux/Solitaire/[Link]
Le solitaire est un jeu compsé de 32 billes déposées dans des creux et disposées en
croix. Le creux central est initialement vide:
Le but du jeu est d'enlever toutes les billes du jeu en respectant la règle
suivante: pour enlever une bille, il faut la faire sauter par dessus une bille voisine et
cela n'est possible que si le creux se situant derrière elle est inoccupé. Les sauts en
diagonale sont interdits.
Pour jouer, l'utilisateur clique sur une bille. S'il peut la jouer elle apparait en
rouge et les creux dans lequels il peut la déplacer apparaissent en bleu. Il clique
ensuite sur un des creux en bleu (le plus souvent, il n'y en a qu'un seul) pour
déplacer la bille à cet endroit. Dans l'exemple suivant, il y a trois creux possibles:
La bille (en rouge) peut être déplacée dans trois creux (en bleu)
Etat du jeu après avoir avoir sélectionné le creux se situant à droite de la bille.
Ils ont été nommés en fonction de leur position dans le carré et stockés par
la procédure InitialiserTabShape dans le tableau TabShape à 7 lignes et 7 colonnes:
Shape1_1 Shape1_2 Shape1_3 Shape1_4 Shape1_5 Shape1_6 Shape1_7
Shape2_1 Shape2_2 Shape2_3 Shape2_4 Shape2_5 Shape2_6 Shape2_7
Shape3_1 Shape3_2 Shape3_3 Shape3_4 Shape3_5 Shape3_6 Shape3_7
Shape4_1 Shape4_2 Shape4_3 Shape4_4 Shape4_5 Shape4_6 Shape4_7
Shape5_1 Shape5_2 Shape5_3 Shape5_4 Shape5_5 Shape5_6 Shape5_7
Shape6_1 Shape6_2 Shape6_3 Shape6_4 Shape6_5 Shape6_6 Shape6_7
Shape7_1 Shape7_2 Shape7_3 Shape7_4 Shape7_5 Shape7_6 Shape7₇
2023-2024 57 P. Renouprez
ECCSA Programmation 6U
Un élément TabJeu [ i , j ] correspond au composant graphique Shapei_j. Il a
cinq valeurs possibles:
● 1 : creux occupé par une bille (représenté graphiquement en gris clair)
● 0 : creux vide (représenté en gris foncé)
● -1: absence de creux (invisible)
/ 1 2 3 4 5 6 7
1 -1 -1 1 1 1 -1 -1
2 -1 -1 1 1 1 -1 -1
3 1 1 1 1 1 1 1
4 1 1 1 0 1 1 1
5 1 1 1 1 1 1 1
6 -1 -1 1 1 1 -1 -1
7 -1 -1 1 1 1 -1 -1
La représentation graphique du jeu à partir de cette représentation interne est déjà
réalisée. Votre travail consistera uniquement à agir sur la représentation interne.
Pour mettre à jour la représentation graphique après avoir modifié la représentation
interne, il vous suffira d'appeler la procédure AfficherJeu.
● IndiquerLesPossibilites (i, j)
Indique les possibilités de jeu lorsque l'utilisateur clique sur le composant Shapei_j.
L'effet de cette procédure doit être le suivant:
2023-2024 58 P. Renouprez
ECCSA Programmation 6U
○ Le nombre de possibilités de jeu doit être stocker dans la variable globale
NP prévue à cet effet.
○ Si l'emplacement i, j contient une bille, mais qu'elle ne peut pas être jouée
et que le programme est en mode test, affichage du message"Impossible de
jouer cette bille !!".
● Dès que l'utilisateur clique sur Ok, la bille réapparait en gris clair et les creux vides
où pouvait être déposé la bille, réapparaissent en gris foncé. Vous utiliserez pour
cela la procédure EffacerLesPossibilites ( i, j).
Pour tester le bon fonctionnement de ces deux procédures vous pouvez utiliser le
bouton permettant de retirer des billes du jeu.
JouerLeCoup (i1, j1, i2, j2): déplace la bille située en ligne i1, colonne j1 dans le
creux situé en ligne i2, colonne j2. La bille se trouvant entre ces deux emplacements
est retirée du jeu.
2023-2024 59 P. Renouprez
ECCSA Programmation 6U
9.3.6. le jeu du tic-tac-toe
2023-2024 60 P. Renouprez
ECCSA Programmation 6U
10. Les tris
Algorithme de tri : il en existe plusieurs qui vont plus du simple au
plus complexe, ayant chacun ses avantages et inconvénients.
2023-2024 61 P. Renouprez
ECCSA Programmation 6U
end;// While
End
2023-2024 62 P. Renouprez
ECCSA Programmation 6U
10.2.2. Algorithme
For j := 1 to (NbElement-1) do
begin
elementAInserer:= element[j];
i :=j-1
while ( element[i] < element[i+1]) and i>1
begin
element[i+1] := element[i];
element[j] := elementAInserer;
end;
end;//while
end;// For j
10.3.2. Algorithme
For j := 1 to (NbElement-1) do
begin
min := j
for i:=j+1 to (NbElement) do
begin
if ( element[j] < element[min])
then //changer de min
begin
min;
end;
end;
// mettre le minimum en premiere position
elementMin:= element[min];
2023-2024 63 P. Renouprez
ECCSA Programmation 6U
element[min] := element[j];
element[j] := elementMin;
end;// For j
2023-2024 64 P. Renouprez
ECCSA Programmation 6U
10.4.1. Algorithme
const
NBElement = 20;
var
element: array [1..NBElement] of integer =
(2,6,5,12,2,16,7,9,11,20,14,3,15,1,3,10,18,16,4,8);
elementPermute : integer;
i : integer;
permutation : boolean;
begin
i := Gauche;
j := Droite;
elementPivot := element[(i+j) DIV 2]; (*Div pour que la division
donne un entier*)
repeat
begin
while element[i] < elementPivot do i:=i+1;
while elementPivot < element[j] do j:=j-1;
if i <= j
then
begin //permuter el i et el j
w := element[i];
element[i] := element[j];
element[j] := w;
i := i+1;
j := j-1;
end;
end;
until i > J;
if gauche < J then trier (Gauche, j);
if droite > I then trier (i, droite);
end;//procedure
begin
writeln('avant tri');
For i := 1 to NbElement do write(element[i], ' ');
permutation := true;
2023-2024 65 P. Renouprez
ECCSA Programmation 6U
trier(1,NbElement);
writeln('Après tri');
For i := 1 to NbElement do write(element[i], ' ');
Readln();
end.
10.4.2. PgmTri
2. Tri croissant par sélection des éléments de type REAL d'un tableau
de N
éléments saisis au clavier (1.5 ).
2023-2024 66 P. Renouprez