Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Programmation  Projet  Système d'exploitation  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
Rust
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Les remarques
Les opérateurs
Les instructions conditionnelles
Les instructions de boucles
Définition de fonction
Référence des mots réservés
Référence de procédures et de fonctions
Référence des modules standard
Les premiers pas
Une notation pour décrire la syntaxe de Modula-2
La représentation des programmes Modula-2
Instructions et expressions
Bonjour
Biochimie
Finance
Géographie
Histoire
Mathématique
Météorologie
Sport
Temps
Calcul du calcium corrigé
IPaymt/Interet
NPer
PPaymt/Principal
Distance en Km entre deux longitudes et latitudes
Chiffre romain
Nombre premier
Sqrt
Unité de mesure
Hockey
Année bissextile
Date de la Pâque
Q&D Tools for DOS
Medos-2
Préface
Notes légal
Dictionnaire
Recherche

Les premiers pas

Suivons les étapes de développement d'un programme simple et expliquons ainsi quelques concepts fondamentaux de la programmation et des fonctionnalités de base de Modula-2. La tâche consiste, étant donné deux nombres naturels x et y, à calculer leur plus grand diviseur commun (gcd). Les connaissances mathématiques nécessaires pour ce problème sont les suivantes :

Exprimées en termes mathématiques, ces règles prennent la forme :

  1. gcd(x,x) = x
  2. Si x > y, gcd(x,y) = gcd(x-y,y)

La recette de base, appelée algorithme, est alors la suivante : on modifie les nombres x et y selon la règle 2 de telle sorte que leur différence diminue. On répète cette opération jusqu'à ce qu'ils soient égaux. La règle 2 garantit que les modifications sont telles que gcd(x,y) reste toujours le même, et la règle 1 garantit que l'on trouve finalement le résultat.

Il faut maintenant mettre ces recommandations en termes de Modula-2. Une première tentative conduit au schéma suivant. Notez que le symbole # signifie "inégal".

  1. WHILE x # y DO
  2.  "Appliquer la règle 2, en réduisant la différence"
  3. END

La phrase entre guillemets est en français simple. La deuxième version affine la première version en remplaçant de la phrase en français par des termes formels&nbps;:

  1. WHILE x # y DO
  2.  IF x > y THEN
  3.   x:=x-y
  4.  ELSE
  5.   y:=y-x
  6.  END
  7. END

Ce texte n'est pas encore un programme complet, mais il montre déjà les caractéristiques essentielles d'un langage de programmation structuré. La version 1 est une instruction, et cette instruction contient une autre instruction subordonnée (entre guillemets). Dans la version 2, celle-ci est élaborée, et d'autres instructions subordonnées apparaissent (exprimant le remplacement d'une valeur x par une autre valeur x-y). Cette hiérarchie d'instructions exprime la structure sous-jacente de l'algorithme. Elle devient explicite en raison de la structure du langage de programmation, permettant l'imbrication des composantes d'un programme. Il est donc important de connaître la structure du langage (syntaxe) dans ses moindres détails. Textuellement, nous exprimons l'imbrication ou la subordination par une indentation appropriée. Bien que cela ne soit pas exigé par les règles du langage de programmation, cela aide considérablement à la compréhension d'un texte.

Refléter la structure inhérente d'un algorithme par la structure textuelle du programme est une idée clef de la programmation structurée. Il est pratiquement impossible de reconnaître le sens d'un programme lorsque sa structure est supprimée, comme le fait un compilateur lors de la production d'un code informatique. Et nous devons garder à l'esprit qu'un programme n'a aucune valeur s'il n'existe pas sous une forme dans laquelle un humain peut le comprendre et avoir confiance en sa conception.

Nous nous attaquons maintenant à l'objectif de produire un programme complet à partir du fragment ci-dessus. Nous nous rendons compte que nous devons spécifier une action affectant des valeurs initiales aux variables x et y, ainsi qu'une action rendant le résultat visible. Pour cela, nous devons connaître les moyens dont dispose un ordinateur pour communiquer avec son utilisateur. Comme nous ne voulons pas faire référence à une machine spécifique, et surtout pas à des abstractions de ces moyens de communication, en postulant qu'ils seront disponibles, la programmation est dite possible. Ces abstractions prennent la forme d'instructions standard, comme indiqué ci-dessous. L'entrée de données est appelée une opération Read, leur sortie une opération Write. Nous pouvons, par exemple, supposer que les données sont lues à partir d'un clavier et écrites sur un écran.

  1. ReadInt(x);
  2. ReadInt(y);
  3. WHILE x # y DO
  4.  IF x > y THEN x:=x-y
  5.           ELSE y:=y-x
  6. END;
  7. WriteInt(x,6)

La procédure ReadInt lit un entier (non négatif) et l'affecte à son paramètre (x). La procédure WriteInt génère un cardinal tel que spécifié par le premier paramètre (x). Le deuxième paramètre 6, indique le nombre de chiffres disponibles pour la représentation de cette valeur sur le support de sortie.

Dans la prochaine et dernière version, nous complétons notre texte de telle sorte qu'il devienne un véritable programme Module.

  1. MODULE gcd;
  2.  
  3.  FROM InOut IMPORT ReadInt, WriteString, WriteLn, WriteInt;
  4.  VAR x,y:INTEGER;
  5.  
  6. BEGIN
  7.  WriteString("x = "); ReadInt(x); WriteLn;
  8.  WriteString("y = "); ReadInt(y); WriteLn;
  9.  WHILE x # y DO
  10.   IF x > y THEN 
  11.    x:=x-y
  12.   ELSE
  13.    y:=y-x
  14.   END 
  15.  END;
  16.  WriteString("gcd = "); WriteInt(x,6); WriteLn;
  17. END gcd;

Les ajouts essentiels de cette étape sont ce que l'on appelle des déclarations. Dans Modula-2, tous les noms d'objets apparaissant dans un programme, tels que les variables et les constantes, doivent être déclarés. Une déclaration introduit l'identificateur de l'objet (Name), spécifie le type de l'objet (s'il s'agit d'une variable, d'une constante ou autre chose) et indique des propriétés générales et invariantes, telles que le type d'une variable ou la valeur d'une constante.

L'ensemble du programme est appelé un module, on lui donne un nom (gcd) et il a le format suivant :

MODULE name;
 <import lists>
 <declarations >
BEGIN
 <statements>
END name.

Quelques commentaires supplémentaires concernant notre exemple s'imposent. Les procédures WriteLn, WriteString, ReadInt et WriteInt ne font pas partie du langage de programmation Modula-2 lui-même. Elles sont définies dans un autre module appelé InOut étant censé être disponible. Nous soulignons simplement ici qu'ils doivent être importés pour être connus dans un programme. Cela se fait en incluant les noms des objets nécessaires dans une liste d'importation et en spécifiant à partir de quel module ils sont demandés.

La procédure WriteString génère une chaîne de caractèrers, c'est-à-dire une séquence de caractères (entre guillemets). Cette sortie permet à l'utilisateur de l'ordinateur de savoir qu'une entrée est demandée ultérieurement, une caractéristique essentielle des systèmes conversationnels. La procédure WriteLn termine une ligne dans le texte de sortie.

Et ceci conclut la discussion de notre premier exemple. Elle a été maintenue assez informelle. Cela est admissible car le but était d'expliquer un programme existant. Cependant, la programmation consiste à concevoir, à créer de nouveaux programmes. Pour cela, seule une description précise et formelle de notre outil est suffisante.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Dimanche, le 1er septembre 2024