Les langages, introduction au Pascal
Introduction aux langages
Un langage est composé des éléments suivants :
– Un ensemble de caractères. Pour le Français, il s’agit des lettres de l’alphabet, minuscules et majuscules et des signes de ponctuation.
– Un vocabulaire. Un mot étant un ensemble ordonné de caractères, un vocabulaire défini l’ensemble des mots autorisés. Pour le Français, ce sont les mots du dictionnaire, en incluant les différentes possibilités de conjugaison et les accords féminin ou pluriel.
– Une syntaxe, autrement dit un ensemble de règles grammaticales. En Français, nous avons notamment des règles de conjugaison pour accorder le verbe et le sujet, des règles pour positionner l’article par rapport au nom, des règles pour accorder l’adjectif avec le nom auquel il se rapporte, des règles pour introduire des propositions subordonnées, etc..
Exemples :
Malgré sa blessure, le chien ronge un os de poulet. a une syntaxe correcte.
Malgré sa blessure, le chien rongerons un os de poulet. a une syntaxe incorrecte.
Malgré sa blessure, un os de poulet ronge le chien. a une syntaxe correcte.
Le chien, malgré sa blessure, ronge un os de poulet. a une syntaxe correcte.
– Une sémantique, autrement dit des règles de bon sens. En Français, il y a des phrases qui ont un sens et d’autres non. Ainsi, « Un os de poulet ronge le chien » n’a pas de sens, on dit que la phrase est sémantiquement fausse.
– Il existe également dans les langages ce qu’on appelle une pragmatique, qui exprime le fait qu’il doit normalement y avoir une cohérence dans les idées. Ainsi, si je dis « Il faut travailler pour avoir de bonnes notes et le chien, malgré sa blessure, ronge un os de poulet », j’exprime deux réalités sémantiquement correctes, mais qui marquent une incohérence de l’idée générale.
En informatique, les langages ont également un ensemble de caractères (un alphabet), un vocabulaire et un ensemble de règles syntaxiques qu’il faut respecter pour réaliser un programme. Il est important de bien comprendre ces notions, car la programmation est un exercice de style difficile où les erreurs de langage sont courantes. Si en Français, le partenaire comprend le sens de votre phrase même si celle-ci n’est pas tout à fait correcte grammaticalement, en informatique, la moindre erreur de vocabulaire ou de syntaxe nécessite une relecture et une correction.
Remarquons pour finir qu’un programme écrit dans un langage informatique n’est qu’une suite de mots et n’est donc pas directement compréhensible par le processeur. Comme nous l’avons déjà dit au 1.1, il faut transformer cette suite de mots en une suite d’opérations élémentaires que peut exécuter le processeur. Cette étape s’appelle la compilation. C’est lors de la compilation que les erreurs de syntaxe sont détectées. Heureusement pour nous, le compilateur donne en général suffisamment d’indications pour que la correction de nos fautes soit simple et rapide. Ensuite, il reste à tester notre programme et à vérifier que celui-ci réalise bien le traitement désiré, autrement dit si sa sémantique est correcte.
Structure générale des programmes Pascal
L’alphabet du Pascal est tout simplement l’ensemble des caractères du clavier. Nous allons voir un certain nombre de mots du vocabulaire, mais il est important de noter, avant de poursuivre, que l’espace et le retour à la ligne sont des séparateurs (ils séparent les mots) et que la syntaxe en autorise autant qu’on le désire. En conséquence, on peut aérer les programmes pour en faciliter la lecture !
D’autre part, tout ce qui est entre accolades est considéré comme du commentaire et est ignoré par le compilateur. Cela va nous servir pour commenter nos programmes et expliquer chaque étape.
Un programme Pascal respecte toujours la structure suivante :
program nomprog ;
{ Définition éventuelle des constantes et des types; cette partie est expliquée au chapitre 7 } { Début de la déclaration des variables }
var
nomvar1, nomvar2, … : type1 ;
nomvar3 : type2 ;
… { Il peut y en avoir autant qu’on veut }
{ Fin de la déclaration des variables } { Début du corps du programme } begin
instruction1 ;
instruction2 ;
… { Il peut y en avoir autant qu’on veut }
end.
{ Fin du programme }
– « program », « type », « var », « begin » et « end » sont des mots du vocabulaire.
– nomprog, nomvar1, nomvar2 et nomvar3 sont des identificateurs, au même titre que les noms propres de la langue française, on peut donc mettre le nom que l’on veut. Des précisions sont données au 2.3.
– type1 et type2 sont des types parmi ceux autorisés. Voir également au 2.3.
– instruction1 et instruction2 sont des instructions quelconques. Nous en verrons quelques unes dans ce chapitre.
Types, variables, opérateurs
Un type est un domaine de définition. Il existe notamment les types suivants :
– integer : tous les entiers entre -32768 et +32767 (s’ils sont codés sur 16 bits).
– real : les réels, codés sur 4 octets comme nous l’avons vu au 1.3, ou parfois sur 8.
– char : les caractères du clavier.
– boolean : c’est un ensemble formé des 2 éléments suivants {true; false}
Les booléens sont vus au chapitre 3.
– string : ce type non standard (tous les Pascal ne disposent pas de ce type) est utile pour représenter les chaînes de caractères. ‘bonjour’ est une chaîne de caractères.
On verra plus tard le type tableau.
Une variable a en informatique le même sens qu’en mathématique. Plus précisément, une variable a les caractéristiques suivantes :
– un identificateur (autrement dit un nom). On peut donner le nom que l’on veut ou presque : un identificateur doit commencer par une lettre de l’alphabet, suivie ou non de signes alphanumériques. Par exemples, x, total, x1, x234tt, AaBb sont des noms de variable possibles, mais 2x, gh?st, kk** ne le sont pas.
– un type parmi ceux cités plus haut
– une valeur
Attention, pour différencier le nom des variables de type caractère des caractères eux-mêmes, on met chaque caractère entre 2 apostrophes. Ex : ‘x’ est un caractère, x est une variable.
– une adresse en mémoire (mémoire vive, bien entendu). On ne se servira pas directement des adresses mémoire des variables, mais il est tout de même bon de savoir qu’elles existent, car elles nous permettront d’expliquer certaines notions des derniers chapitres.
Il existe de nombreux opérateurs et fonctions pour tous les types. Nous classons ci-dessous les opérateurs par rapport aux domaines de définition des opérandes et du résultat :
– Integer x Integer –> Integer: +, -, *, div, mod
x div y est le résultat entier de la division de x par y. Par exemple 5 div 2 = 2
x mod y est le résultat du reste de la division entière de x par y. Par exemple, 5 mod 2 = 1
– Real x Real –> Real :+,-,*,/ (sachant qu’un integer est aussi un real)
– Real –> Integer : trunc, round1
trunc (x) est la valeur entière de x. Exemple, trunc (4.8) = 4
round (x) est la valeur entière approchée de x. Exemple, round (4.8) = 5
– Real –> Real : cos, sin, atan, ln, sqrt, sqr, abs
sqrt (x) est la racine carrée de x (SQuaRe Transpose en Anglais)
sqr (x) est le carré de x
– Char –> Char : succ, pred
succ (x) est le caractère qui suit x dans la table ASCII qui code les carcatères.
pred (x) est le caractère qui précède x » » » » »
– Char –> integer : ord
ord (x) donne le rang du caractère x dans la table ASCII.
– Integer –> Char : chr
chr (x) donne le caractère qui est codé par le nombre x.
– Real x Real –> Boolean : >, <, =, >=, <=, <>
1Notez la nécessité des parenthèses autour de l’opérande lorsque la fonction est unaire.
Les opérateurs de comparaison fournissent un résultat nécessairement vrai ou faux, ce qui correspond au type booléen.
– Les opérateurs spécifiques aux booléens sont vus au chapitre 3.
L’instruction d’affectation
L’instruction d’affectation a pour but d’affecter (de donner) une valeur à une variable.
Sa syntaxe est la suivante :
nomvar := expression mathématique
– nomvar est le nom d’une variable.
– L’expression mathématique est quelconque mais son évaluation doit donner une valeur du même type que celui de la variable. Il existe des niveaux de priorité pour les opérateurs, le niveau le plus bas étant le plus fort :
Niveau 1 : tous les opérateurs unaires
Niveau 2 : *, /, div, mod, and
Niveau 3 : +, -, or
Niveau 4 : =, <, >, <=, >=, <>
Des parenthèses peuvent être utilisées pour modifier les priorités d’évaluation.
Les instructions d’Entrées-Sorties
Pour afficher des caractères à l’écran, il existe deux instructions :
a) write ( liste d’expressions )
Une liste d’expressions est une ou plusieurs expressions mathématiques séparées par des virgules. Chaque expression est évaluée et son résultat est affiché.1
Exemple : x := 5 ; { On affecte 5 à la variable x, supposée de type integer }
write ( ‘Bonjour chers amis…’) ;
write ( 10, 3*(x-2), ‘8’) ;
–> Ecran : Bonjour chers amis… 10 9 8
b) writeln ( liste d’expressions )
writeln agit exactement comme write, mais ajoute un retour à la ligne après le dernier affichage. Notons que writeln sans paramètre ni parenthèse permet de passer à la ligne suivante.
Exemple : x := 5 ; { affectation de 5 à la variable x, supposée de type integer } writeln ( ‘Bonjour chers amis…’) ;
writeln ( 10, 3*(x-2), ‘8’) ;
1Pour afficher un apostrophe, qui sert de signe de fin de chaîne, il faut en écrire 2 à la suite. Ex: ‘L »autre’
–> Ecran1 : Bonjour chers amis… 10 9 8
Pour que l’utilisateur attribue une valeur à une variable pendant l’exécution du programme, il faut utiliser l’instruction readln. Sa syntaxe est la suivante :
readln ( nomvar )
nomvar doit être une variable définie dans la déclaration des variables.
A l’exécution du programme, lorsque l’instruction readln est rencontrée, l’utilisateur doit taper une valeur, puis la touche return (ou entrée). A ce moment là, la valeur tapée est donnée à la variable nomvar et le programme se poursuit.
Nous pouvons maintenant écrire des petits programmes. Exemple :
program moyenne ; { Calcul de la moyenne de 2 nombres. }
var x, y : integer ;
moy : real ;
begin
writeln (‘Entrez la valeur du premier nombre’) ; readln ( x ) ;
writeln (‘Entrez la valeur du deuxième nombre’); readln ( y ) ;
moy := (x + y) / 2 ;
writeln (‘La moyenne des 2 nombres est : ‘, moy :4:1) ;
end.
–> Ecran : Entrez la valeur du premier nombre 5
Entrez la valeur du deuxième nombre
La moyenne des 2 nombres est : 16,5
Exercices
1. Ecrire un programme qui demande à l’utilisateur les coordonnées de 2 points distincts du plan et qui affiche les coordonnées du point milieu.
2. Quel est le résultat à l’écran du programme suivant :
program simple;
var x,y : integer;
begin
x := 1; y := 2;
1Pour améliorer l’affichage et réduire l’espace entre les nombres, on peut mettre un format. Ainsi, si on veut que l’affichage des entiers ne prennent que 2 caractères, il suffit de rajouter :2 après l’expression. Si on avait eu des réels, le format comprend 2 paramètres :p1 :p2, le premier pour spécifier le nombre total de caractères et le second pour spécifier le nombre de chiffres après la virgule.
x := x + 1; y := y + x;
writeln ( ‘y vaut :’, y’);
end;
3. Ecrire un programme qui demande à l’utilisateur une valeur pour U0, r et n et qui affiche la énième valeur de la suite arithmétique définie par U0 et Un+1 = Un + r. (On rappelle la propriété : Un = U0 + n.r)
4. Ecrire un programme qui demande à l’utilisateur les valeurs de 2 entiers x,y, qui permute leur valeur et qui les affiche.
5. Application physique : Au temps t0 = 0, un obus est lancé verticalement en l’air à partir d’une plate-forme située à y0 mètres du sol avec une vitesse initiale de v0 mètres par seconde. En prenant la constante de gravitation égale à 9.81, écrire un programme qui demande à l’utilisateur les valeurs de y0, v0, une valeur de temps t et qui affiche la vitesse v ainsi que la hauteur y de l’obus par rapport au sol précisément à l’instant t. (On évitera de prendre des valeurs de t trop grandes pour éviter de trouver des valeurs de y négatives)
6. Ecrire un programme qui demande à l’utilisateur la valeur d’une durée exprimée en secondes et qui affiche sa correspondance en heures minutes secondes. Ex: 3800 s –> 1 heure
3 minutes 20 secondes.
7. Trouvez toutes les erreurs de syntaxe et toutes les erreurs sémantiques dans le programme suivant qui calcule la moyenne exacte de 3 nombres entiers.
programme calcule moyenne;
var x1 : entier x2 : entier
x3 : entier
moy : entier
begin
writeln (Entrez 3 nombres entiers); readln(x1); readln(x2); readln(x3);
moy := (x1+x2+x3 / 3);
writeln(‘La moyenne est ‘, ‘moy’);
end.
8. Ecrire un programme qui demande à l’utilisateur un entier plus petit que 8 et qui affiche le nombre binaire correspondant (utilisation de div et mod).
9. Ecrire un programme qui demande à l’utilisateur un nombre entier de 4 chiffres commençant par 1 et composé de 0 et de 1, puis, en supposant ce nombre binaire, qui affiche le nombre en base 10.
Solutions
1. program milieu ;
var x1, y1, x2, y2, xm, ym : real ;
begin
writeln (‘Entrez les coordonnées du premier point’) ; readln ( x1 ) ; readln ( y1 ); writeln (‘Entrez les coordonnées du deuxième point’) ; readln ( x2 ) ; readln ( y2 ); xm := (x1 + x2) / 2 ; ym := (y1 + y2) / 2 ;
writeln (‘Les coordonnées du point milieu sont :’, xm :5:2, ym:5:2) ;
end.
2. Ecran : y vaut 4
Notez que même si y := y+x est sur la même ligne que x := x+1, x := x+1 est exécuté avant.
3. program suite ;
var U0, Un, r : real ; n : integer ;
begin
writeln (‘Entrez les valeurs de U0, r et n’) ; readln ( U0 ) ; readln ( r ); readln ( n );
Un := U0 + n*r; writeln (‘La ‘,n:3,’ième valeur de la suite est :’, Un :5:2) ;
end.
4. program permutation ; var x, y, stockage : integer ; begin
writeln (‘Entrez la valeur de x et y’); readln (x); readln(y); stockage := x; { On mémorise la valeur de x pour ne pas l’oublier }
x := y; { On met la valeur de y dans x }
y := stockage; { On met dans y l’ancienne (!!) valeur de x } writeln(‘ x vaut maintenant ‘,x:4,’ et y ‘, y:4);
end.
5. program physique; var v0, y0, t, v, y : real ; begin
writeln (‘Entrez les valeurs de v0 et y0’); readln (v0); readln (y0); writeln (‘Entrez une valeur pour le temps t’); readln(t);
v := -9.81*t + v0; y := -0.5*9.81*sqr(t) + v0*t + y0;
writeln (‘Vitesse : ‘,v:5:2,’ Altitude : ‘,y:5:2);
end.
6. program temps; { Une des solutions possibles }
var t, h, mn, s : integer;
begin
writeln(‘Entrez la valeur d »une durée en secondes’); readln (t);
h := t div 3600; mn := (t mod 3600) div 60; s := t mod 60;
writeln(‘Cette durée équivaut à ‘, h:2,’ heures,’, mn :2, ‘ minutes et ‘,s:2,’ secondes.’);
end.
7. Voici le programme corrigé. Toutes les erreurs sémantiques sont signalées en commentaires.
Notez que le programme n’est pas changé si on insére ou si on supprime des sauts de ligne ou des blancs entre chaque mot (1 minimum).
program calculemoyenne; { Erreur de syntaxe : pas de blanc dans l’identificateur }
var x1 : integer; x2 : integer; x3 : integer;
moy : real; { Erreur sémantique : la moyenne est un réel ! }
begin
writeln (‘Entrez 3 nombres entiers’); readln(x1); readln(x2); readln(x3);
moy := (x1+x2+x3) / 3; { Erreur sémantique : attention aux parenthèses }
writeln(‘La moyenne est ‘, moy); { Erreur sémantique : affichage de la valeur de moy
!}
end.
8. program decimalversbinaire; var x, a1, a2, a3 : integer ; begin
writeln(‘Entrez un entier inférieur à 8’); readln (x);
a1 := x div 4; a2 := (x mod 4) div 2;a3 := x mod 2;
write (‘Le nombre binaire correspondant est : ‘,a1:1, a2:1, a3:1);
end.
9. program binaireversdecimal;
var x, resultat : integer;
begin
writeln(‘Entrez un entier de 4 chiffres commençant par 1 et composé de 0 et de 1’); readln (x);
resultat := 8 + ((x-1000) div 100)*4 + ((x mod 100) div 10)*2 + x mod 10; writeln(‘En base 10, ce nombre est : ‘,resultat:2);
end.
Introduction
1 Introduction à l’informatique
1.1 Les grands domaines de l’informatique
1.2 Le fonctionnement des ordinateurs
1.3 Le codage des informations
1.4 Exercices
1.5 Solutions
2 Les langages, introduction au Pascal
2.1 Introduction aux langages
2.2 Structure générale des programmes Pascal
2.3 Types, variables, opérateurs
2.4 L’instruction d’affectation
2.5 Les instructions d’Entrées-Sorties
2.6 Exercices
2.7 Solutions
3 L’instruction conditionnelle, l’instruction composée
3.1 Le type booléen
3.2 L’instruction conditionnelle
3.3 L’instruction composée
3.4 Exercices
3.5 Solutions
4 L’instruction itérative for
4.1 L’instruction for
4.2 Exercices
4.3 Solutions
5 L’instruction itérative while
5.1 L’instruction while
5.2 Comparaisons entre le for et le while
5.3 Exercices
5.4 Solutions
6 Les tableaux unidimensionnels
6.1 Déclaration d’une variable de type tableau
6.2 Lecture ou écriture dans un tableau
6.3 Exemples de programme avec utilisation d’un tableau
6.4 Déclaration d’un type tableau
6.5 Exercices
6.6 Solutions
7 Les procédures et les fonctions
7.1 Les fonctions
7.2 Les procédures
7.3 Exercices
7.4 Solutions
8 Tris, recherches
8.1 Exemples de tris
8.2 Recherches
8.3 Exercices
8.4 Solutions
9 Les tableaux multidimensionnels
9.1 Les tableaux multidimensionnels
9.2 Exercices
9.3 Solutions
10 Les procédures et les fonctions, suite
10.1 Passage par valeur ou par référence
10.2 Exercices
10.3 Solutions
11 Exercices de synthèse, itérations, tableaux
11.1 Exercices
11.2 Solutions
12 Exercices de synthèse, procédures et fonctions
12.1 Exercices
12.2 Solutions
Conclusion