Language C, Pascal


INFORMATIQUE
support de cours


Philippe ROLLAND

prolland @ free . fr (anti spam)
(Starting - 1997) Bibliographie:

Le language C. Kernigan et Ritchie. Masson
La programmation sous UNIX. Rifflet. MacGraw-Hill
Manuel de l'utilisateur de Turbo C. Delanoë. Masson
CodeWarrior: Pascal Language Reference
Introduction au language C. Jean-Yves Martin. Support de cours : Ecole Centrale de Nantes.
Informatique : Module i1. Robbes, Tallineau, Tartier. Support de cours : Université de Nantes.
Encyclopedia Universalis


Sommaire

 

A. Introduction générale

Le schéma de Von Neumann
Historique des langages de programmation
Présentation de quelques architectures machines
Le système Mac Os et UNIX
Le compilateur CodeWarrior
Introduction aux limites de la programmation C sous MacOs
Notion de compilateur, Interprète, norme ANSI
Historique du langage C et Pascal
Hierarchie des langages de programmation
Historique du Mac et des autres

B. Introduction à Code Warrior pour C et Pascal

Notion de projet sous CodeWarrior
Un nouveau projet sous CW
Prise en main de CW
Le premier programme en C et en pascal

C. Mes premiers programmes en C, les premiers rappels en Pascal

Start ....

 

D. Généralité sur le C

E. Elements de base des langages Pascal et C

Part I (présentation synthétique)
Part II (Entrée/Sortie: printf, scanf)
Part III Introduction à la notion de compilation
Part IV Détail sur la notion de compilation

F. Travaux pratiques: Algorithmique/Traduction en C et en Pascal

Part I
Part II

G. Types dérivés

tableaux( et pointeurs)

H. Problèmes divers

Chronométrage de fonction
Problèmes de mémoire

 


1. Schéma général de fonctionnement d'un ordinateur

La quasi-totalité des machines informatiques actuellement employée fonctionnent sur le shéma de Von Neumann (John Von Neumann 1903-1957). Ce schéma peut être modélisé de la fçon suivante :

Je vais voir dans la mémoire de programme ce que je dois faire maintenant (PC : Program Counter)
Je vais prendre dans la mmoire de donnes la donnée sur laquelle je dois agir.
J'agis
Je retourne voir dans la mémoire de programme ...
...

Cette façon de faire, si elle s'est révélée adaptée à la solution de beaucoup de problèmes, n'est pas idéale pour obtenir la rapidité et l'efficacité d'un calcul. Par exemple, dans le cas où l'on a besoin de faire toujours le même type de calcul, il existe des modèles, des machines plus adaptées que celui de Von Neumann.

C'est ainsi qu'en traitement du signal (par exemple, pour le radar, le sonar, la parole, ...) on a besoin de calculer des transformées de Fourier. Dans ce cas on utilisera des calculateurs aux structures très différentes ; dans la mesure où elles effectueront des calculs en parallèle pour gagner du temps. On parlera alors parfois de machines SIMD (Single Instruction Multiple Data) et de de machines MIMD (Multiple Instruction Multiple Data) .

On rappelle les bases:

 

Retour


2. Historique des langages de programmation

La programmation des ordinateurs par la manipulation directe du languge binaire (seul compris par la machine) s'est vite révélée fastidieuse et complexe. La première amélioration a consisté à donner aux instructions du processeur des noms faciles à retenir (mnémoniques), puis à écrire les programmes directements avec ces noms, un programme spécial se chargeant de transformer la suite de lettres en codes binaires.

 

Le vocabulaire des mnémoniques s'appelle l'assembleur, utilisé environ vers 1950. Le programme spécial s'appelle un un compilateur. L'écriture et l'exécution d'un programme nécessitent trois étapes :

écriture du programme source
compilation du programme source donnant un code objet binaire
execution du code binaire obtenu

En ajoutant à l'assembleur des noms de variable pour désigner des adresses mémoires, puis des noms de procédure pour désigner des suites d'instructions souvent utilisées (on emploi le terme de macros), on a amélioré la lisibilité des programmes et facilité leur écriture, au prix d'une plus grande complexité du compîlateur.

Pour rendre la programmation encore plus aisée, on a inventé des languages plus riches (on dit alors que l'on utilise des languages de haut niveau) où une instruction se traduit automatiquement par un grand nombre d'instructions binaires.

Tout d'abord il y eu le FORTRAN pour 'FORmula TRANSlator' destiné dans un premier temps au calcul scientifique. Peu après il y eu le COBOL pour COmmon Business Oriented Language, destiné lui à l'écriture de programme lié à la gestion.

 

Parallèlement fut développé une autre conception : le compilateur est remplacé par un programme spécial qui transcrit le programme en language binaire au fur et à mesure de l'exécution de celui-ci. Ce programme spécial dans ce cas est appelé un interpréteur (ou interprète). Un des language interprété le plus connu est certainement le LISP pour LIst Processing. Ce language LISP est dévolu au traitement symbolique, par exemple la manipulation d'idées ou de concepts, ce qui en fait un language privilégié de l'Intelligence Artificielle.

 

La multiplication des ordinateurs a introduit une nouvelle difficulté : l'écriture de programme pour plusieurs machines (on parle alors de la portabilité des programmes) : la solution consiste à disposer sur chaque machine d'un compilateur (ou d'un interpréteur) du même langage dans lequel est écrit le programme. Ce qui impose une normalisation des languages : par exemple par l'American National Standard Institut, ie la fameuse norme ANSI.

Retour


3. Présentation de quelques architectures machines

En 1980, le Professeur David Patterson de l'université de Californie à Berkeley parle pour la première fois de RISC. Alors que à cette époque un micro-processeur standard était CISC, c'est-à-dire que pour la conception d'un tel processeur on cerche à ajouter de plus en plus d'instructions en augmentant la taille du micro-code, ie la taille du programme interne. Mais à partir d'une certaine taille du micro-code ces processeurs tendent à ralentir l'execution des instructions les plus simples. Parallèlement on avait aussi prouvé que beaucoup d'instruction CISC étaient en fait fort peu utilisé dans le cas moyen.

Dans un processeur RISC, on optimise les instructions les plus simples en supprimant les instructions compliquées, ce qui a pour conséquence une programmation moins simple mais plus efficace.

Rappel :
Le PowerPc est un processeur RISC. Le Dec alpha 500 est un processeur alpha (500Mhz).

CISC (Complex Instrcution Set Computer)
RISC (Reduced Instrcution Set Computer)
Alpha

Retour


4. Le système Mac Os et UNIX

MacOs n'est pas multi-tâche, ni multi-utilisateur
Sous MacOs, difficile voir impossible de faire des commande système
Impossibilité de faire des fork, ou bien des execlp, ...
Il existe plusieurs version de UNIX sous Mac : AU-x, MkLinux, AIX (iBM)

Retour


5. Le compilateur CodeWarrior

Compilateur multi-langage (C,C++,Pascal), supporte Java
Interface contenant : Editeur de texte, debogueur puissant, interface graphique, ...
Optimisation possible du code pour norme ANSI, PPC, 68xxx

Retour


6. Introduction aux limites de la programmation C sous MacOs

Pour rendre le C attractif, les constructeurs de compilateurs non dédié à UNIX, cherche à envelloper (et parfois surcharger)le language de spécificité pertinante. Conclusion, chaque constructeur s'éloigne de la norme ANSI, pour palier au défaut du système de la machine cible.
Exemple : le turbo-C, le turbo-Pascal (pour dos), think C et Think pascal, codeWarrior (sous Mac OS)
Conclusion : le language de départ qui devait eêtre standart pour toutes les plateformes (macos, dos, unix, ...) ne contient qu'un petit noyau commun non-mis à jour.

Retour


7. Notion de compilateur, Interprète, norme ANSI

pourquoi doit-on compiler, ou interpréter un programme ? (voir dessin)
Qu'est-ce que la norme ANSI ? (American National Standard Institut)
Pourquoi le langage C est-il aussi lié au système UNIX ?
La première version du système UNIX (écrit par K. THOMPSON) contenait environ 13000 lignes de codes systèmes dont seulement (?!) 800 en assembleur le reste étant en C ( cré par D. RITCHIE et le premier compilateur par S. JOHNSON).

Retour


8. Historique du langage C/Pascal

Avec trois Frames... Historique du langage Pascal et C

Retour


9. Hierarchie des langages de programmation

Langages impératifs : Fortran, pascal, C,...
Langages fonctionnels : LISP, Caml, ...
Langages logiques, langages de spécifications : Prolog, ...
Langages orientés objets : SmallTalk, c++, java, ...
langages divers : Forth, ...
voir dessin précédent

Retour


10. Historique du Mac et des autres

En 1984, Apple propose (Théatralement) le Macintosh, caractérisé par son interface graphique, ses icônes, ses fenêtres et ses menus déroulants ; il s'en vendra 50 000 en 74 jours (100 000 en 6 mois) !!! Un an plus tard, MicroSoft propose Windows pour les compatibles PC.

A la même période Silicon Graphics propose ses premières stations graphiques. Ces stations sont très utilisées pour le traitement d'images (publicité, trucages numériques pour le cinéma et la télévision). En 1985, Aldus propose le logiciel de mise en page (appelé logiciel pré-presse) PageMaker. ceci marque le début de l'édition électronique : unepartie du travail de l'imprimeur revient à la rédaction, imposant de profonds bouleversements dans le métiers de l'imprimerie. Adobe met au point le langage de description de page POSTSCRIPT pour la LaserWrite d'APPLE.

Internet accueille en 1984 son 1000e serveur. Ce serveur géré par des bénévoles est d'abord destiné à la communauté scientifiques (chercheurs et étudiants). Il s'ouvrira au commerce en 1991 et au grand public en 1994 par l'intermédiare de fournisseurs de services ou provider.

La première conférence sur le CD-Rom a lieu en 1986 à Seattle. Le format CD-Rom devient rapidement le format incontournable de stockage des applications et des documents (photo-CD), surtout après 1990 (fourni comme prime des magazines à partir de 1993).

Retour