Beruflich Dokumente
Kultur Dokumente
OFPPT
RÉSUMÉ THÉORIQUE
&
GUIDE DE TRAVAUX PRATIQUES
OFPPT/DRIF
ÉDIT : SEPTEMBRE 2017
OFPPT/DRIF
Document élaboré par :
Révision linguistique
-
-
-
Validation
-
-
-
Résumé de Théorie Informatique industriel
SOMMAIRE
Résume théorique 5
Matériel et logiciels 5
Principe ETS 6
Représentation interne des données 6
Systèmes arithmétiques 7
Structure d'un ordinateur 8
Communication des données 11
Transmission de données 11
Télétransmission de données 13
Sauvegarde et protection des données 14
OFPPT/DRIF/ISTA 2 SAFI 2
Résumé de Théorie Informatique industriel
PRÉSENTATION DU MODULE
OFPPT/DRIF/ISTA 2 SAFI 3
Résumé de Théorie Informatique industrielle
Module : 16
Informatique industrielle
RESUME THEORIQUE
OFPPT/DRIF/ISTA 2 SAFI 4
Résumé de Théorie Informatique industrielle
TECHNOLOGIE INFORMATIQUE
Vu la quantité croissante d'informations et de données qui doivent être élaborées toujours plus
rapidement, il est nécessaire de disposer de systèmes toujours plus performants pour traiter
celles-ci de manière informatisée, que ce soit dans le domaine de la technique, des sciences, du
commerce ou de l'administration. On distingue :
les systèmes individuels, p. ex. les PC;
les systèmes interconnectés, p. ex. les réseaux serveur-client.
4.1 Matériel et logiciels
Un système d'élaboration des données est composé de matériel et de logiciels.
Le matériel comprend tous les composants électroniques et mécaniques montés sur un
ordinateur ou un système informatique. L'ensemble des câbles, des prises, ainsi que les
supports de données en font partie. Exemple de matériel d'un PC (ill. 1):
unité du système (ordinateur, processeur) pour l'élaboration des données et
périphériques pour
- entrée des données, p. ex. clavier, souris
- sortie des données, p. ex. écran, imprimante
- stockage externe des données, p. ex. disques durs, lecteurs de disquettes.
Illustration 1: système PC
Les logiciels comprennent tous les programmes et les données.
Les programmes sont composés d'une série de commandes qui, partant des instructions
de travail de l'utilisateur, sont traduites en un langage compréhensible pour la machine.
Les programmes pilotent les processus de travail et élaborent les données. On distingue
les programmes système et les programmes utilisateur {tableau 1).
Tableau 1 : Genres de programmes
Programmes système
· Systèmes d'exploitation, p. ex. DOS,
Windows 7, Windows NT, UNIX, OS/2
· Utilitaires (programmes auxiliaires)
Programmes utilisateur
· Programmes standard, p. ex. élaboration
de textes, tableurs, bases de données
· Programmes CAD
· Programmes d'applications spécifiques,
OFPPT/DRIF/ISTA 2 SAFI 5
Résumé de Théorie Informatique industrielle
OFPPT/DRIF/ISTA 2 SAFI 6
Résumé de Théorie Informatique industrielle
Chacun de ces deux états de branchement représente ainsi la plus petite unité d'information: 1
bit (de l'anglais binary digit = symbole à double valeur).
Un bit comprend l'information 1 ou 0
Si une source d'information est composée de 2 bits, comme p. ex. les feux clignotants d'un
véhicule, chaque bit peut comporter l'information 0 (clignotant éteint) ou l'information 1
(clignotant allumé (tableau 2).
Un feu de signalisation routier transmet des informations aux usagers de la route au moyen de 3
lampes. Cela correspond à un contenu d'information de 3 bits. Il en résulte 2 3 = 8 possibilités de
branchement dont seules 4 sont utilisées (la combinaison du feu vert et du feu rouge p. ex.
n'aurait aucun sens dans ce cas, tableau 2).
Huit bits sont nécessaires pour pouvoir différencier toutes les lettres (minuscules et majuscules),
tous les chiffres, les signes spéciaux et les signes de contrôle.
1 octet (byte) comprend 8 bits
Un byte permet ainsi d'obtenir 28=256 possibilités de combinaisons différentes.
OFPPT/DRIF/ISTA 2 SAFI 7
Résumé de Théorie Informatique industrielle
Une combinaison des systèmes binaire et hexadécimal peut aussi être utilisée dans les
systèmes bus.
A titre d'exemple, le chiffre 123 est représenté dans les différents systèmes arithmétiques
tableau 1 ci-après.
OFPPT/DRIF/ISTA 2 SAFI 8
Résumé de Théorie Informatique industrielle
Microprocesseur (CPU - Central Processing Unit). C'est là que sont exécutées pas à pas les
instructions provenant d'un programme. La fréquence d'impulsions par seconde est la vitesse
avec laquelle le processeur est entraîné d'un pas du programme à l'autre, p. ex. à 4 GHz, le
CPU exécute chaque seconde 4 000 000 000 de pas de travail.
Mémoire interne. Elle comprend la mémoire en lecture seule et la mémoire de travail.
Mémoire en lecture seule (ROM- Read Only Memory). C'est là que sont enregistrés les
programmes et les données inaltérables, comme p. ex. le programme de démarrage de
l'ordinateur. Celui-ci permet, après l'enclenchement de l'ordinateur, de transférer les
programmes du système d'exploitation des supports externes vers la mémoire de travail (RAM)
et de les démarrer. Les informations mémorisées dans la ROM y restent conservées après le
déclenchement de l'ordinateur.
OFPPT/DRIF/ISTA 2 SAFI 9
Résumé de Théorie Informatique industrielle
prise à 25 pôles du côté de l'ordinateur et une prise à 36 pôles du côté de l'imprimante (prise
Centronics).
Les interfaces sérielles transmettent chaque bit l'un après l'autre (en série) p. ex. pour la
connexion d'une souris. Cette interface externe est également appelée interface V.24 ou RS
232. Les prises pour ces liaisons disposent en général de 9 pôles.
Avantages par rapport aux interfaces parallèles:
· les câbles des interfaces sérielles peuvent être plus longs (jusqu'à 150 m.) que ceux des
interfaces parallèles;
· ils sont électriquement blindés, car ils présentent une grande impédance d'entrée;
· moins de fils sont nécessaires dans le câble. Dans le cas du RS232, seuls 2 fils sont présents
(entrée, sortie).
Les vitesses de transmission des interfaces sont généralement indiquées en MBits/s ou en
MByte/s.
1 MByte/s=8MBit/s
Tableau 1 : les interfaces de l’ordinateur
Appellation Type Vitesse de transmission Usage
LPT 1 Parallèle 3 MByte/s Pour imprimante, scanner
COMiRS232 Sérielle — Pour modem, souris sérielle
LAN/RJ45 Sérielle 10/100 Mbit/s Ethernet, réseaux
IrDA Sérielle Jusqu'à 14,4 KByte/s Interface infrarouge
PS/2 Sérielle — Pour souris, clavier
USB Sérielle 1,5 MByte/s Interface universelle pour imprimante, scanner, clé de stockage
IDE, ATA Parallèle Jusqu'à 150 MByte/s Pour disque dur (sur la carte-mère)
SCSI Parallèle Jusqu'à 160 MByte/s Pour disque dur professionnel, serveur
Bluetooth Sérielle 1 MBit/s Interface de communication sans fil (trm.) .
Firewire Sérielle Jusqu'à 400 MBit/s Interface universelle pour caméra, téléphone portable
OFPPT/DRIF/ISTA 2 SAFI 10
Résumé de Théorie Informatique industrielle
Grâce à la communication des données, des informations peuvent être échangées entre des
ordinateurs sous forme de données. La liaison entre chaque ordinateur est réalisée par des
réseaux de données.
Réseaux de données. Il s'agit de liaisons informatiques par lesquelles des données sont
transmises, sous forme de paquets d'informations. Dans de petits réseaux, comme celui d'un
véhicule automobile, on transmet également des signaux de commande. Les données sont
transmises en série, bit par bit, et les informations peuvent être utilisées par tous les membres
du réseau.
4.6.1. Transmission de données
Les systèmes d'échange de données, comme p. ex. ceux qui sont utilisés à l'intérieur d'une
entreprise, dans un bureau ou dans un véhicule, sont appelés LAN (Local Area Network) ou
réseaux locaux. L'échange de données entre des PC, des micro-ordinateurs, des ordinateurs
centraux et tous les périphériques ont lieu à des vitesses de transmission élevées (de 10 Mbit/s
à 100 Mbit/s env.). Cela signifie que tous les membres du réseau peuvent accéder à toutes les
données pratiquement simultanément, afin de les traiter ou de les modifier. Les éléments de
liaison entre les ordinateurs sont constitués par des câbles de données, des connexions et des
cartes-réseaux qui sont montés dans les ordinateurs.
Structures des réseaux. Selon l'implantation des ordinateurs reliés à une ligne de données
commune, on distingue:
la structure en étoile la structure en anneau
la structure par bus
Structures en étoile (ill. 1). On différencie:
les structures en étoile active;
les structures en étoile passive.
Structure en étoile active. Elle permet la connexion de nombreux ordinateurs sans tirer trop de
câbles. Chaque station de travail est reliée à une station de transmission (nœud). Il s'agit la
plupart du temps d'un serveur ou d'un hub. Si l'une des stations de travail est hors service, les
autres membres du réseau ne subissent aucune perturbation. Si, par contre, la station de
transmission est en panne, l'ensemble du réseau ne fonctionne plus.
Structure en étoile passive. Tous les postes de travail ont les mêmes droits. C'est le nœud de
liaison qui fait office d'interface entre les postes. Si l'un des postes de travail est en panne, le
réseau continue à fonctionner.
Structure en anneau (ill. 2). Avec cette structure, les stations de travail avoisinantes sont
directement reliées entre elles. Les données sont transmises d'une station à la suivante dans
une direction ou l'autre. Il est facile d'ajouter un ordinateur supplémentaire en l'intercalant dans
le réseau. Par contre, si un ordinateur est hors service dans l'anneau, l'ensemble du réseau peut
être bloqué.
OFPPT/DRIF/ISTA 2 SAFI 11
Résumé de Théorie Informatique industrielle
OFPPT/DRIF/ISTA 2 SAFI 12
Résumé de Théorie Informatique industrielle
Serveur (régisseur de service). Dans un réseau, il met à disposition les données, les
programmes et la puissance de calcul. Le serveur peut mémoriser de grandes quantités de
données et donc ainsi décharger l'ordinateur client.
Le terme client désigne les autres ordinateurs du réseau. Ils utilisent les services du serveur en
y stockant les données, en faisant appel à ses programmes et à sa puissance de calcul. De tels
réseaux se trouvent dans les grandes exploitations automobiles (ill. 1).
OFPPT/DRIF/ISTA 2 SAFI 13
Résumé de Théorie Informatique industrielle
RNIS (Réseau numérique à intégration de services). La transmission des données à lieu sous
forme numérique au travers d'adaptateurs RNIS. Si un ordinateur est équipé de l'interface
adéquate, sous forme de carte RNIS, il peut être utilisé directement comme terminal RNIS. Par
canal, la vitesse de transmission des données atteint 64 kBit/s.
Services en ligne
Il s'agit d'entreprises de services qui offrent et vendent des informations, comme p. ex. les cours
de la bourse, les nouvelles, des données spécifiques à certaines entreprises et des informations
qui sont déposées dans des banques de données. D'autre part, elles offrent à leurs clients un
grand nombre de possibilités de communications privées et professionnelles, comme le
homebanking, le teleshopping, le telelearning, le teleworking (ill. 2).
OFPPT/DRIF/ISTA 2 SAFI 14
Résumé de Théorie Informatique industrielle
OFPPT/DRIF/ISTA 2 SAFI 15
Résumé de Théorie Informatique industrielle
droit d'effacement des données dont la mémorisation n'était pas autorisée ou dont
l'autorisation à la mémorisation est échue, p. ex. après remboursement d'un crédit et
cessation des rapports d'affaires avec la banque concernée.
La protection des données en bonne et due forme, selon la législation sur la protection des
données, est contrôlée par des préposés à la protection des données.
OFPPT/DRIF/ISTA 2 SAFI 16
Guide des travaux pratiques Informatique industrielle
Module :
Informatique industrielle
GUIDE DES TRAVAUX PRATIQUES
OFPPT/DRIF/ISTA 2 SAFI 17
Guide des travaux pratiques Informatique industrielle
Le but de ces TP est de permettre aux stagiaires de comprendre, à travers des réalisations sur
carte Arduino, de comprendre les détails du fonctionnement d’un calculateurs en automobile et
aide ainsi à bien comprendre la gestion de plusieurs systèmes à savoir l’injection essence, le
Common rail, l’ABS, l’ESP…
La première annexe traitre les notions de la conception d’un programme ou ce qu’en appel
algorithme.
Pour réaliser un TP, on commence par analyser l’objectif du TP, puis on commence par
concevoir les algorithmes nécessaires et en fin traduire ces algorithmes en langage C.
OFPPT/DRIF/ISTA 2 SAFI 18
Guide des travaux pratiques Informatique industrielle
Gestion du clavier
OFPPT/DRIF/ISTA 2 SAFI 19
Guide des travaux pratiques Informatique industrielle
2 Manipulation 01 :
Le but de cette manipulation est de faire clignoter une diode LED toutes les secondes.
2.1 Schéma de câblage :
OFPPT/DRIF/ISTA 2 SAFI 20
Guide des travaux pratiques Informatique industrielle
OFPPT/DRIF/ISTA 2 SAFI 21
Guide des travaux pratiques Informatique industrielle
OFPPT/DRIF/ISTA 2 SAFI 22 8
Guide des travaux pratiques Informatique industrielle
1 Présentation :
Les boutons sont les capteurs les plus simples. En appuyant sur un bouton, on connecte ses fils,
de telle sorte que le bouton agit comme un interrupteur. En relâchant le bouton, on interrompt le
circuit. Il existe des boutons de différentes tailles et formes. Quand on utilise une plaque à essais,
il est pratique d’employer un bouton avec quatre fils. Les fils fonctionnent par paires, si bien que
deux fils adjacents sont toujours connectés l’un à l’autre.
OFPPT/DRIF/ISTA 2 SAFI 23
Guide des travaux pratiques Informatique industrielle
Bonus :
Pour générer un numéro aléatoire, vous devez utiliser les fonctions randomSeed() et random().
OFPPT/DRIF/ISTA 2 SAFI 24
Guide des travaux pratiques Informatique industrielle
TP 3 : GESTION DU CLAVIER
Objectifs spécifiques :
Le but de ce TP est la gestion du clavier. L’étudiant sera capable à la fin de ce TP de lire un code à
partir du clavier pour réaliser un traitement spécifique en sortie.
1 Présentation :
Le clavier dispose de 12 touches arrangées selon la matrice des téléphones sur une grille de 3X4.
Les touches sont reliées sur une matrice, il suffit donc de 7 pins d'un microcontrôleur pour pouvoir
l'utiliser (3 colonnes et 4 lignes).
OFPPT/DRIF/ISTA 2 SAFI 25
Guide des travaux pratiques Informatique industrielle
Pour réaliser votre programme, vous devez utiliser la bibliothèque Arduino spécifique du clavier
matriciel (keypad en anglais). A noter que cette librairie n'est pas installée par défaut et qu'il faut la
télécharger. Lancez le logiciel ARDUINO, ensuite allez à Croquis>Inclure une bibliothèque>Gérer
les bibliothèques. Tapez le mot « keypad », « more info » puis « installer ».
OFPPT/DRIF/ISTA 2 SAFI 26
Guide des travaux pratiques Informatique industrielle
N.B : Les broches 15 et 16 ne sont présentes que sur les afficheurs LCD avec rétroéclairage
avec :
15 : A : Anode rétroéclairage (+5V)
16 : K : Cathode rétroéclairage (masse)
En observant le brochage de l’afficheur, on constate qu’il faut un minimum de 6 sorties pour le
commander. En effet, si on utilise l’adressage sur 4 bits et que l’on se prive de la lecture dans
l’afficheur, il nous faut commander les six broches EN, RS, D4, D5, D6, et D7.
Ce mode 4 bits est bien pratique quand on utilise un petit microcontrôleur où le nombre
d’entrées/sorties est très limité. En contrepartie, le mode 4 bit complique un petit peu le protocole
de communication (logiciel) puisque qu’il faut passer la donnée 8 bits en deux fois (4 + 4 = 8 ). Ce
passage s’effectue comme suit :
D7 = Bit Donnée 7, D6 = Bit Donnée 6, D5 = Bit Donnée 5, D4 = Bit Donnée 4
puis :
OFPPT/DRIF/ISTA 2 SAFI 27
Guide des travaux pratiques Informatique industrielle
17
Trop grand
16 Exact
4 essais
OFPPT/DRIF/ISTA 2 SAFI 29
Guide des travaux pratiques Informatique industrielle
OFPPT/DRIF/ISTA 2 SAFI 30
Guide des travaux pratiques Informatique industrielle
3
4
OFPPT/DRIF/ISTA 2 SAFI 31
Guide des travaux pratiques Informatique industrielle
TP 6 : L’ACQUISITION DE LA TEMPERATURE
ET DE L’HUMIDITE : LE CAPTEUR DHT11
Objectifs spécifiques :
Le but de ce TP est de faire l’acquisition de l’information envoyée par le capteur numérique DHT11.
L’étudiant sera capable de gérer une communication OneWire et d’exploiter les informations
acquises à savoir la température et l’humidité
1 Présentation :
Le capteur DHT11 est constitué d’un senseur de température à base d'une thermistance à
coefficient négatif de température et d’un capteur d’humidité résistif. Un microcontrôleur intégré
s’occupe de faire les mesures, de les convertir et de les transmettre. Le DHT11 fait partie des
circuits numériques qui dialoguent au moyen d'une seule ligne série bidirectionnelle de type
OneWire (Un fil).
OFPPT/DRIF/ISTA 2 SAFI 32
21
Guide des travaux pratiques Informatique industrielle
3 Manipulation 02 :
Modifiez le programme précédent pour afficher les valeurs de la température et de l’humidité sur un
afficheur LCD.
Ajoutez deux diodes LED l’une pour contrôler la température et l’autre pour l’humidité (les LED
s’allumeront lorsqu’on atteint un seuil bien déterminé de température ou d’humidité ; essayez de
faire varier les valeurs de température et d’humidité pour atteindre ces seuils et allumer les LED)
Bonus :
La ligne de connexion (DATA) peut faire jusqu'à 20 m de longueur entre le capteur et la carte
Arduino, dans ce cas il faut diminuer la valeur de R à 4,7 kW.
OFPPT/DRIF/ISTA 2 SAFI 33
Guide des travaux pratiques Informatique industrielle
1 Présentation :
Le capteur HC-SR04 utilise les ultrasons pour déterminer la distance d'un objet. Il offre une
excellente plage de détection sans contact, avec des mesures de haute précision et stables. Son
fonctionnement n'est pas influencé par la lumière du soleil ou des matériaux sombres, bien que des
matériaux comme les vêtements puissent être difficiles à détecter.
1.1 Caractéristiques :
· Dimensions : 45 mm x 20 mm x 15 mm
· Plage de mesure : 2 cm à 400 cm
· Résolution de la mesure : 0.3 cm
· Angle de mesure efficace : 15 °
· Largeur d'impulsion sur l'entrée de déclenchement (Trigger Input Pulse width) : 10 µs
Le capteur dispose de 4 bornes :
· Vcc : alimentation en 5V
· Trig : entrée. Une impulsion (5V) supérieure à 10µs permet de lancer la mesure.
· Echo : sortie. La durée de l’impulsion correspondra à la distance.
· Gnd : commun
OFPPT/DRIF/ISTA 2 SAFI 34
Guide des travaux pratiques Informatique industrielle
OFPPT/DRIF/ISTA 2 SAFI 35
Guide des travaux pratiques Informatique industrielle
OFPPT/DRIF/ISTA 2 SAFI 36
Guide des travaux pratiques Informatique industrielle
1 Présentation :
Les servomoteurs sont des actionneurs très utilisés en modélisme et dans l’industrie. Ils ont
comme caractéristique principale leur « couple », c'est-à-dire la force de rotation qu’ils peuvent
exercer. Plus un servomoteur aura de couple et plus il pourra actionner des « membres » lourds
comme déplacer un bras qui porte une charge.
Pour la robotique de loisirs, les servomoteurs ont en général peu de couple et sont de taille réduite,
bien adaptée à un encombrement minimal et à une énergie disponible limitée.
Figure 22 Le servomoteur
Les servomoteurs sont pilotés par un fil de commande et alimentés par deux autres fils.
Habituellement, ces 3 fils sont rassemblés dans une prise au format standard.
Un fil rouge est relié à l’alimentation positive (+5 ou +6 V selon le servomoteur), le fil noir est relié à
la masse (GND) et le fil jaune est utilisé pour la commande.
2 Commande du servomoteur
Pour commander un servomoteur il faut envoyer sur son fil de commande (fil jaune) une impulsion
dont la durée correspond à l’angle désiré. Historiquement, cette impulsion était délivrée par un
circuit oscillateur (exemple : NE555).
Avec la programmation de l’Arduino, le circuit oscillateur n’est plus nécessaire ; la bibliothèque «
Servo » permet de piloter un servomoteur en lui transmettant simplement l’angle sur lequel il
souhaite se positionner (cet angle est compris entre 0° et 180°).
OFPPT/DRIF/ISTA 2 SAFI 37
Guide des travaux pratiques Informatique industrielle
3 Manipulation
Téléchargez la bibliothèque « Servo » qui permet de commander le servomoteur.
Lancez l’exemple de la bibliothèque « Sweep » qui permet de piloter le servomoteur de 0° à 180° et
inversement d’une façon continue.
3.1 Schéma de câblage :
Le servomoteur accepte généralement une plage d’alimentation comprise entre 4.5V et 6V. Si on
n’a besoin d’utiliser qu’un ou deux servomoteurs, on peut les brancher sur la sortie 5V de la carte
Arduino. Si le montage demande plus, il serait bon d’envisager une alimentation externe (shields
moteur) car le régulateur de l’Arduino n’est pas fait pour délivrer trop de courant, on risque de le
griller.
Branchez le servomoteur conformément à la figure suivante :
OFPPT/DRIF/ISTA 2 SAFI 38
Guide des travaux pratiques Informatique industrielle
N’oubliez pas que la valeur numérique délivrée par le CAN est comprise entre 0 et 1023 et que le
servomoteur accepte un angle compris entre 0 et 180° ; pensez à utiliser la fonction map().
5 Manipulation 03 :
Reprenez le programme de la manipulation 02 du TP8 (utilisation de deux capteurs pour détecter
les obstacles à droite et à gauche). Modifiez ce programme pour qu’il commande le servomoteur
de telle sorte que lorsque l’obstacle détecté est à gauche, il fait tourner le bras du servomoteur à
droite et inversement.
OFPPT/DRIF/ISTA 2 SAFI 39
Guide des travaux pratiques Informatique industrielle
1 Présentation :
Le but de cet atelier est de découvrir comment se fait l’interfaçage entre le logiciel LabVIEW avec
un Arduino. C’est aussi de comprendre comment récupérer les données de différents capteurs,
comment par l’appuie sur un bouton il sera possible d’allumer une LED ou faire tourner un
servomoteur
LabVIEW est un logiciel développé par National Instruments permettant de coder à l’aide de
diagramme. Grâce à ce logiciel il est possible de créer des outils de mesure et de contrôle.
Pour établir cette communication, un certain nombre d’outils et logiciels sont nécessaires :
Télécharger et installer Labview (en s’inscrivant sur le site officiel de
National Instruments, on peut télécharger une version d’évaluation
de Labview)
- MakerHub(LINX).
Nous allons télécharger les deux types de VI ensuite nous verrons la différence entre les deux
outils. Dans la zone de recherche de VIPM, tapez Arduino et chercher labVIEW Interface For
Arduino :
3 Interfaçage labVIEW-Arduino
L’interfaçage diffère selon le type de VI installé.
3.1 Installation du firmwar LIFA
Le firmware LIFA est disponible après installation de labVIEW 2015 dans le répertoire «C:\Program
Files (x86)\National Instruments\LabVIEW 2015\vi.lib\LabVIEW Interface for
Arduino\Firmware\LIFA_Base». Au niveau de ce répertoire, on trouve plusieurs fichiers dont les
trois principaux sont :
OFPPT/DRIF/ISTA 2 SAFI 41
Guide des travaux pratiques Informatique industrielle
En cliquant sur suivant, on se retrouve avec la fenêtre du choix du numéro du port serie :
OFPPT/DRIF/ISTA 2 SAFI 42
Guide des travaux pratiques Informatique industrielle
OFPPT/DRIF/ISTA 2 SAFI 43
Guide des travaux pratiques Informatique industrielle
OFPPT/DRIF/ISTA 2 SAFI 44
Guide des travaux pratiques Informatique industrielle
L’exemple en question permet de commander une diode LED branchée sur la sortie 13 de la carte
Arduino à l’aide d’un bouton poussoir (bouton vert sur l’interface labVIEW)
3- Connectez une diode LED sur la sortie 13 de la carte Arduino (vous pouvez utiliser la diode LED
branchée sur la carte à la sortie 13 de la carte Arduino), exécutez le programme et vérifier son bon
fonctionnement.
6 Manipulation 02 :
1- Lancer l’exemple « LINX Servo 1 Chanel »
Ce programme permet de commander un servomoteur connecté à la sortie 2 de la carte. Brancher
votre servomoteur et vérifier son bon fonctionnement.
CORRECTION DES TP
OFPPT/DRIF/ISTA 2 SAFI 45
Guide des travaux pratiques Informatique industrielle
Manipulation 03 :
En utilisant six diodes LED, réalisez un jeu de lumière (exemple : un chenillard)
OFPPT/DRIF/ISTA 2 SAFI 46
TP 2 : UTILISATION D’UN BOUTON POUSSOIR
Manipulation 01 :
Au cours de cette manipulation, nous allons commander une diode LED à l’aide d’un bouton poussoir. Lorsqu’on
appuie sur le bouton, la LED va allumer et lorsqu’on relâche le bouton la LED s’éteindra.
Manipulation 02 :
Modifiez le programme précédent de telle sorte que le premier appui sur le bouton poussoir allume la diode LED
et que le second appuie l’éteint :
Lors de l’exécution de ce programme, on remarque que la diode LED ne suit pas toujours l’appui sur le bouton
poussoir ; il y’a l’effet rebond (un seul appui sur le bouton, correspond réellement à plusieurs fronts successifs) : du
coup, parfois la diode reste éteinte ou bien au contraire reste allumée. Pour remédier à ce disfonctionnement, il faut
sauvegarder l’état précédent du bouton poussoir et n’inverser l’état de la diode LED que si l’état du bouton est
différent de son ancien état et qu’il est haut. Ce qui nous donne le programme suivant :
Manipulation 03 :
Nous allons réaliser un dé numérique à l’aide de trois diodes LED. L’appuie sur le bouton poussoir va générer un
numéro aléatoire entre 1 et 6 :
Pour générer un numéro aléatoire, il faut utiliser les fonctions randomSeed() et random() :
Pour récupérer la valeur renvoyée par random() bit par bit, il suffit d’appliquer des masques avec les valeurs
binaires B001, B010 et B100.
TP 3 : GESTION DU CLAVIER
Manipulation 01 :
Au cours de cette manipulation, vous devez réaliser un montage qui permet de lire le numéro du bouton appuyé
par l’utilisateur et d’envoyer son code sur le moniteur série de l’Arduino.
Manipulation 02 :
Au cours de cette manipulation vous allez réaliser une serrure codée.
Un code à plusieurs chiffres (4 chiffres par exemple) doit être saisi pour ouvrir une porte. Le programme
commence par envoyer le message « Saisir code » sur le moniteur série. Si le code saisi est correct, une diode
LED s’allume et le message « code correct » est envoyé sur le moniteur série, sinon on envoie le message « code
erroné » suivi de « Saisir code » (dans notre exemple le code correct est : 1234).
Résultat d’exécution :
TP 4 : Commande d’un afficheur LCD
Manipulation 01 :
Le but de cette première manipulation et d’afficher un texte fixe sur l’écran LCD (votre nom et prénom par exemple)
Résultat exécution :
Ajouter une animation au texte affiché : défilement à droite, défilement à gauche
lcd.scrollDisplayLeft() : Décale le contenu de l'écran (texte et curseur) d'un espace vers la gauche ; puisque la
chaine « Mohamed Ben Ali » contient 15 caractères, il faut décaler le curseur 15 fois à gauche pour la faire
disparaitre de l’écran.
lcd.scrollDisplayRight() : Décale le contenu de l'écran (texte et curseur) d'un espace vers la droite ; notre but est
de faire réapparaitre le texte ensuite le décaler vers la droite pour le faire disparaitre. Du coup, il nous faut un
décalage de 31 fois (15 : longueur de la chaine + 16 : longueur d’une ligne de l’écran).
Une fois le texte disparait vers la droite, il faut le faire réapparaitre avec un deuxième décalage à gauche de 16
caractères et revenir à la situation initiale.
Résultat d’exécution :
Manipulation 02 :
Reprenez la manipulation du TP précédent (serrure codée) et utilisez l’afficheur LCD à la place du moniteur série.
Résultat d’exécution :
Manipulation 03 :
Vous allez réaliser un jeu où il faut deviner un nombre choisi au hasard par le programme :
Résultat d’exécution :
TP 5 : Gestion de la conversion A/N
Manipulation 01 :
Lors de cette manipulation, vous allez réaliser un programme qui permet de lire la valeur analogique délivrée
par le potentiomètre sur l’une des entrées analogiques et d’afficher le résultat sur le moniteur série.
Manipulation 02 :
Lors de la précédente manipulation, vous avez remarqué que les valeurs affichées sur le moniteur série sont
comprises entre 0 et 1023. Modifiez votre programme pour qu’il calcule les valeurs réelles de la tension lue
(comprises entre 0 et 5V) et les affiche sur un afficheur LCD.
L’utilisation de la fonction map(), permet de calculer la tension d’entrée à partir de la valeur numérique (l’équivalent
de la règle de trois). La conversion se fait par rapport à 5000 pour avoir plus de précision et ne pas se retrouver avec
uniquement six valeurs (0, 1, 2, 3, 4, 5). Ensuite le résultat obtenu est divisé par 1000 pour retrouver la valeur de la
tension en volts.
Manipulation 03 :
Commandez le clignotement d’une diode LED à l’aide du potentiomètre : plus la valeur de la tension lue est
grande, plus le clignotement de la diode est rapide et inversement.
Il suffit de gérer l’intervalle d’attente entre le changement d’état de la diode LED par la valeur de la tension lue à
partir du potentiomètre.
Manipulation 04 :
Commandez la luminosité d’une diode LED à l’aide du potentiomètre : plus la valeur de la tension lue est grande,
plus la luminosité de la diode augmente et inversement.
Résultat d’exécution :
La diode est branchée sur la sortie 9 qui utilise le module PWM. La valeur lue à partir du potentiomètre ne
pourra pas être renvoyée directement vers la diode LED. Elle doit être formatée à l’aide de la fonction map() qui
nous permettra de passer d’une valeur comprise entre 0 et 1023 (sortie du CAN sur 10 bits) à une valeur
comprise entre 0 et 255 (rapport cyclique du PWM).
Manipulation 05 :
Réalisez une jauge électronique à l’aide de 5 diodes LED : plus la tension augmente plus le nombre de diodes
allumées augmente
Explication de l’instruction digitalWrite(pin[i],(niveau >= i)?HIGH : LOW) : si « niveau » est supérieur ou égal à « i
», alors « pin[i] » reçoit « HIGH » sinon elle reçoit « LOW ».
DHT11-RETRY_DELAY : c’est le délai minimum entre deux lectures successives du capteur. Ce délai est fixé par
la datasheet du capteur et au niveau de sa bibliothèque à 1000 ms.
Manipulation 02 :
Modifiez le programme précédent pour afficher les valeurs de la température et de l’humidité sur un afficheur LCD.
Ajoutez deux diodes LED l’une pour contrôler la température et l’autre pour l’humidité (les LED
s’allumeront lorsqu’on atteint un seuil bien déterminé de température ou d’humidité ; essayez de
faire varier les valeurs de température et d’humidité pour atteindre ces seuils et allumer les LED)
Résultat d’exécution :
TP 7 : mesure de la distance : le capteur
HC-SR04
Manipulation 01 :
Téléchargez une des bibliothèques du capteur HC-SR04 disponibles.
Ecrire un programme qui permet de lire la distance à partir du capteur et d’envoyer l’information sur le
moniteur série de l’Arduino (la distance doit être exprimée en cm).
Résultat d’exécution :
- digitalWrite(trigpin, LOW) et delayMicroseconds(2) : envoyer un niveau bas pendant 2 us pour stabiliser la
sortie.
- digitalWrite(trigpin, HIGH) et delayMicroseconds(10) : envoyer un niveau supérieur ou égal à 10 us (10
us dans notre cas)
- pulseIn(echopin, HIGH) : cette instruction attend que la broche « echopin » passe à HAUT, commence alors
le chronométrage, attend que la broche repasse au niveau BAS et stoppe alors le chronométrage.
Elle renvoie la durée de l'impulsion en microsecondes.
Manipulation 02 :
Ajoutez un deuxième capteur à votre montage. Le but est de réaliser un détecteur d’obstacle. Le premier
capteur détecte un obstacle à droite (distance inférieure à 5 cm) et votre programme affiche le message «
obstacle à droite » sur le moniteur série et le deuxième capteur détecte un obstacle à gauche et le
programme affiche « obstacle à gauche ».
Résultat d’exécution :
Manipulation 03 :
Modifier le montage précédent en ajoutant un afficheur LCD. Le but de cette manipulation est d’afficher
tous les messages sur l’écran de l’afficheur au lieu de les envoyer au moniteur série.
Résultat d’exécution :
TP 8 : commande d’un servomoteur
Manipulation
Téléchargez la bibliothèque « Servo » qui permet de commander le servomoteur.
Lancez l’exemple de la bibliothèque « Sweep » qui permet de piloter le servomoteur, avec un pas de 1°, de 0° à 180°
et inversement d’une façon continue.
Manipulation 02 :
Le but de cette manipulation est de commander le servomoteur à l’aide d’un potentiomètre ; lorsque l’axe du
potentiomètre tourne, le bras du servomoteur doit tourner à son tour et dans le même sens.
Manipulation 03 :
Reprenez le programme de la manipulation 02 du TP8 (utilisation de deux capteurs pour détecter les
obstacles à droite et à gauche). Modifiez ce programme pour qu’il commande le servomoteur de telle sorte
que lorsque l’obstacle détecté est à gauche, il fait tourner le ras du servomoteur à droite et inversement.
TP 9 : interfaçage Labview – Arduino
(initiation)
Manipulation 01 :
Une fois l’exemple lancé, on obtient les interfaces suivantes :
- Face avant :
3 : c’est le rectangle gris qui encadre tous les autres éléments ; il s’agit de la boucle infinie voidloop()
Manipulation 02 :
- Face avant de l’exemple de la commande du servomoteur :
Guide de travaux pratiques Informatique industrielle
- Face Diagramme :
1 : initialisation de la sortie vers le servomoteur (cette sortie restera occupée tant que
la connexion avec le servomoteur est active
2 : envoi de la valeur du rapport cyclique à la sortie PWM vers le servomoteur
3 : fermeture de la connexion avec le servomoteur
Annexes Informatique industrielle
Annexe 1 :
Introduction à l'algorithmique
PRÉSENTATION
PRÉSENTATION INFORMELLE
Ces notions sont très répandues dans la vie courante. Un algorithme peut
par exemple y prendre la forme :
RAPIDE HISTORIQUE
En résumé, il doit être bien clair que cette notion d'algorithme dépasse, de
loin, l'informatique et les ordinateurs. Nécessite un vocabulaire partagé, des
opérations de base maîtrisées par tous et de la précision.
LANGAGE DE DESCRIPTION
PREMIERS ÉLÉMENTS
Instructions de sorties
Fin
VARIABLES ET TYPES
Une variable est constitué d'un nom et d'un contenu, ce contenu étant d'un
certain type. Les types différents : booléen, caractère, chaîne de caractères,
nombre entier, nombre réel, etc.
Le rôle des boucles est d'itérer un bloc d'instructions, soit un nombre précis
de fois, soit relativement à une condition.
Si Alors Sinon
Algorithme QueFaireCeSoir
Début
Si Pluie
Alors
MangerPlateauTélé
SeCoucherTot
Sinon
MangerAuRestaurant
AllerAuCinema
Fin si
Fin
Boucle Fois
Fois 3 faire
Avancer
Fin Fois
Boucle Pour
Par exemple,
Algorithme DessineEtoiles (n : entier)
Variable i : entier
Début
Pour i ← 1 à n faire
Écrire('*')
Fin pour
Fin
D'abord, avec la boucle tant que (il faut initialiser i avant la boucle, et
l'augmenter de 1 à chaque passage) :
Algorithme CompteJusqueCentVersionTQ
Variable i : entier
Début
i ← 1
Tant que (i ≤ 100) faire
Écrire(i)
ALaLigne
i ← i+1
Fin tant que
Fin
De même avec la boucle répéter (noter que la condition d'arrêt est ici la
négation de la condition du tant que):
Algorithme CompteJusqueCentVersionRepeter
Variable i : entier
Début
i ← 1
Répéter
Écrire(i)
ALaLigne
i ← i+1
Jusqu'à (i > 100)
Fin
Annexes Informatique industrielle
TYPES ABSTRAITS
FORMALISME
opérations et signature
pré-conditions et axiomes
opérations complexes
Constructeurs
zero : ∅ → Entier
succ : Entier → Entier
prec : Entier → Entier
pré-condition pour prec(n) : estnul(n) est faux
Testeur
estnul : Entier → Booléen
Afficheur
afficheentier : Entier → ∅
Axiomes
estnul(zero()) = vrai
estnul(succ(n)) = faux
succ(prec(n)) = n
prec(succ(n)) = n
Début
Tant que non(est_nul(n))
m ← succ(m)
n ← prec(n)
Fin TQ
Retourner m
Constructeurs
pilevide : ∅ → Pile
ajoute : Élément × Pile → Pile
Accesseur
sommet : Pile → Élément
pré-condition pour sommet(p) : estvide(p) est faux
Modifieur
depile : Pile → Pile
pré-condition pour depile(p) : estvide(p) est faux
Testeur
estvide : Pile → Booléen
Afficheur
affichepile : Pile → ∅
Copieur
copiepile : Pile → Pile
Axiomes
estvide(pilevide()) = vrai
estvide(ajoute(e,p)) = faux
sommet(ajoute(e,p)) = e
depile(ajoute(e,p)) = p
Fin
Constructeurs
créer_étudiant : Texte × Texte × Texte → Étudiant
Accesseurs
nom_étudiant : Étudiant → Texte
prénom_étudiant : Étudiant → Texte
naissance_étudiant : Étudiant → Texte
noteinfo_étudiant : Étudiant → Entier
notemath_étudiant : Étudiant → Entier
notediscipline_étudiant : Texte × Étudiant → Entier
Modifieur
modifier_noteinfo : Étudiant × Entier → Étudiant
modifier_notemath : Étudiant × Entier → Étudiant
Afficheur
afficher_étudiant : Étudiant → ∅
Axiomes
nom_étudiant(créer_étudiant(n,p,d)) = n
prénom_étudiant(créer_étudiant(n,p,d)) = p
naissance_étudiant(créer_étudiant(n,p,d)) = d
noteinfo_étudiant(modifier_noteinfo(e,n)) = n
notemath_étudiant(modifier_notemath(e,n)) = n
notediscipline_étudiant('info',modifier_noteinfo(e,n)) = n
notediscipline_étudiant('math',modifier_notemath(e,n)) = n
Première version.
Type abstrait « Tableau »
Utilise « Entier » et « Élément »
Constructeurs
créer_tableau : Entier → Tableau
Accesseurs
contenu : Tableau × Entier → Élément
taille : Tableau → Entier
pré-condition pour contenu(t,n) : 1 ≤ n ≤ taille(t)
Modifieur
fixecase : Tableau × Entier × Élément → Tableau
pré-condition pour fixecase(t,n,e) : 1 ≤ n ≤ taille(t)
Annexes Informatique industrielle
Afficheur
affichetableau : Tableau → ∅
Copieur
copietableau : Tableau → Tableau
Axiomes
taille(créer_tableau(n)) = n
contenu(fixecase(t,n,e),n) = e
Constructeurs
créer_tableau : Entier → Tableau
Accesseurs
_[_] : Tableau × Entier → Élément
taille : Tableau → Entier
pré-condition pour contenu(t,n) : 1 ≤ n ≤ taille(t)
Modifieur
_[_] = _ : Tableau × Entier × Élément → Tableau
pré-condition pour t[n]=e : 1 ≤ n ≤ taille(t)
Afficheur
affichetableau : Tableau → ∅
Copieur
copietableau : Tableau → Tableau
Axiomes
taille(créer_tableau(n)) = n
contenu(fixecase(t,n,e),n) = e
ALGORITHMES DE BASE
42 5 1 3
I MAX
- 4
2 4
3 5
4 5
5 5
Pour mesurer la complexité d'un algorithme, il faut tout d'abord désigner une
ou plusieurs opérations élémentaires utilisées par l'algorithme. Dans le cas de
la recherche du maximum d'un tableau, ces opérations pourront être :
1 log(n) n
Algorithme général :
Annexes Informatique industrielle
Mais si les éléments du tableau sont ordonnés, nous pour vous pouvons
tirer parti de cette caractéristique.
Algorithme RechercheO (e : entier ; t : tableau d'entiers)
Variable i : entier
trouve : booléen
Début
i ← 1
Tant que (i ≤ taille(t)) et (t[i] < e) faire:
i ← i+1
Fin TQ
Si (i ≤ taille(t)) et (t[i]=e) alors
Écrire('oui')
Sinon
Écrire('non')
Fin si
Fin
Algorithme d'échange
Algorithme Échange (t : tableau d'entiers ; i,j : entiers)
{ Échange le contenu des cases i et j dans le tableau t }
Variable pro : entier
Début
pro ← t[i]
t[i] ← t[j]
t[j] ← pro
Fin
Tri insertion
Algorithme TriInsertion (t : tableau d'entiers)
{ Trie par ordre croissant le tableau t }
Variable i : entier
Début
Pour i ← 2 à taille(t) faire
Insertion(t,i-1,t[i])
Fin Pour
Fin
Tri extraction
Tri à bulles
Algorithme TriBulles (t : tableau d'entiers)
{ Trie par ordre croissant le tableau t contenant n éléments }
Variables i,j : entier
Début
Pour i ← 1 à taille(t)-1 faire
Pour j ← 1 à taille(t)-i faire
Si t[j] > t[j+1]
Alors Échange(t,j,j+1)
Fin Si
Fin Pour
Fin Pour
Fin
Pour que cette méthode soit la plus efficace possible, il faut que le pivot
coupe le tableau en deux sous-tableaux de tailles comparables.
Ainsi, si l'on choisit à chaque le plus petit élément du tableau comme pivot,
on se retrouve dans le cas de l'algorithme de tri par extraction : la taille du
tableau de diminue que d'un à chaque alors que le but est de diviser cette
taille par deux.
Renvoyer r
Fin
Complexité
Dans le but de mesurer la complexité d'un algorithme de tri, deux quantités
sont à observer :
le nombre d'échanges effectués,
le nombre de comparaisons effectuées entre éléments du tableau.
COMPLEXITÉ
complexité en 2n (exponentielle)
RÉFLEXIONS
Loi de Moore : la rapidité des processeurs double tous les 18 mois. Dans le
cas du voyageur de commerce, le fait de doubler la vitesse de calcul ne
permet, dans le même temps, que de traiter une ville supplémentaire.
Pour cela, considérons l'algorithme suivant qui n'est qu'une simple utilisation
de l'algorithme TestArrêt.
Nous devons conclure qu'une telle ville avec de tels habitants ne peut
exister et, de la même manière, l'algorithme TestArrêt n'existe pas non plus.
CONCLUSION
Annexe 2
LANGAGE C
Les bases
I- Introduction______________________________________________________________
II- Notions de base.__________________________________________________________
1- Compilateur sensible à la casse.______________________________________________
2- Commentaires.___________________________________________________________
3- Types de base.____________________________________________________________
a- Caractère :char._______________________________________________________________
b- Entiers : int.________________________________________________________________
c- Réels._______________________________________________________________________
4- Représentation des valeurs__________________________________________________
a- Valeurs caractères._____________________________________________________________
b- Valeurs chaines de caractères.____________________________________________________
c- Valeurs entières._______________________________________________________________
d- Valeurs réelles.________________________________________________________________
5- Déclarations._____________________________________________________________
a- constantes symboliques.________________________________________________________
b- Variables.____________________________________________________________________
III- Les opérateurs._________________________________________________________
1- Affectation.______________________________________________________________
2- Incrémentation / Décrémentation.____________________________________________
3- Opérateurs arithmétiques.__________________________________________________
4- Opérateurs relationnels.____________________________________________________
5- Opérateurs logiques._______________________________________________________
6- Opérateurs de bits.________________________________________________________
7- Opérateur conditionnel.____________________________________________________
Annexes Informatique industrielle
8- Opérateur virgule._________________________________________________________
9- Affectation composée.______________________________________________________
10- Forceur de type._________________________________________________________
11- Précédences.___________________________________________________________
12- Impression formatée.____________________________________________________
13- Lecture formatée._______________________________________________________
IV- Les instructions et structures de contrôle.____________________________________
1- Séquence.________________________________________________________________
2- Répétitions.______________________________________________________________
3- Choix.___________________________________________________________________
4- Instruction vide.___________________________________________________________
V- Les sous-programmes en C.__________________________________________________
1- Généralités.______________________________________________________________
2- Déclaration de fonction.____________________________________________________
3- Appel de fonction._________________________________________________________
4- Portée des déclarations.____________________________________________________
a- Variables locales.______________________________________________________________
b- Attributs des variables locales :___________________________________________________
c- Variables externes._____________________________________________________________
5- Structure d’un programme.__________________________________________________
6- Compilations séparées et projet._____________________________________________
VI- Tableaux : approche traditionnelle._________________________________________
1- Déclaration de tableau._____________________________________________________
2- Initialisation de tableau à la déclaration.______________________________________
3- Référence à un élément de tableau.__________________________________________
VII- Les pointeurs.___________________________________________________________
1- Définition._______________________________________________________________
2- Déclaration de pointeur.____________________________________________________
3- Opérateur adresse.________________________________________________________
4- Opérateur d’indirection.____________________________________________________
5- Arithmétique des pointeurs._________________________________________________
6- Passage de paramètre par adresse dans les fonctions.____________________________
7- Relations entre tableaux et pointeurs._________________________________________
a- Tableaux monodimensionnels.___________________________________________________
Annexes Informatique industrielle
b- Tableaux multidimensionnels.____________________________________________________
VIII- Les chaînes de caractères._________________________________________________
1- Généralités.______________________________________________________________
2- Déclarations et initialisations de chaînes.______________________________________
a- Tableau de caractères (dimensionné ou non)._______________________________________
b- Pointeur de caractères._________________________________________________________
3- Tableau de chaînes de caractères.____________________________________________
4- Saisie de chaîne.__________________________________________________________
5- Impression de chaîne.______________________________________________________
6- Fonctions de manipulation de chaîne._________________________________________
a- Copie de chaînes.______________________________________________________________
b- Concaténation de chaînes.______________________________________________________
c- Comparaison de chaînes._______________________________________________________
d- Longueur de chaîne.___________________________________________________________
IX- Structures de données et allocation dynamique._______________________________
1- Structures._______________________________________________________________
2- Accès aux champs de la structure.____________________________________________
3- Imbrication de structures.__________________________________________________
4- Tableaux de structures.____________________________________________________
5- Structures récursives.______________________________________________________
6- Passage de structures en paramètres ou retour de structure ._____________________
7- Union.___________________________________________________________________
8- Allocation dynamique._____________________________________________________
a- Allocation de mémoire._________________________________________________________
b- Libération de mémoire._________________________________________________________
X- Le Préprocesseur.__________________________________________________________
1- Inclusion de fichiers._______________________________________________________
2- Macros._________________________________________________________________
a- macrodéfinition._______________________________________________________________
b- macrofonction.________________________________________________________________
3- Suppression d’une définition précédente.______________________________________
4- Compilation conditionnelle._________________________________________________
XI- Les Fichiers C.___________________________________________________________
1- Généralités.______________________________________________________________
2- Ouverture/fermeture de fichier.______________________________________________
Annexes Informatique industrielle
a- Ouverture.___________________________________________________________________
b- Fermeture.___________________________________________________________________
3- Lecture/écriture de caractères._______________________________________________
a- Lecture de caractères.__________________________________________________________
b- Ecriture de caractères.__________________________________________________________
4- Lecture/écriture de lignes.__________________________________________________
a- Lecture de lignes.______________________________________________________________
b- Ecriture de lignes.______________________________________________________________
5- Lecture/écriture formatées._________________________________________________
a- Lecture formatée.______________________________________________________________
b- Ecriture formatée._____________________________________________________________
6- Lecture/écriture de blocs.___________________________________________________
a- Lecture de blocs.______________________________________________________________
b- Ecriture de blocs.______________________________________________________________
7- Instructions de contrôle.____________________________________________________
a- Test de fin fichier.______________________________________________________________
b- Erreur d’E/S.__________________________________________________________________
c- Positionnement direct sur un octet._______________________________________________
d- Repositionnement en début de fichier._____________________________________________
e- Position courante._____________________________________________________________
Annexes Informatique industrielle
I- Introduction
.
Langage créé dans les années 70, par la Bell Tel Lab, par Kernighan Ritchie pour
l’écriture du système UNIX.
Conçu comme :
super assembleur :
mais :
2- Commentaires.
/* texte commentaire */
3- Types de base.
a- Caractère :char.
Annexes Informatique industrielle
Le type char est signé à cause de la marque de fin de fichier EOF qui vaut -1.
b- Entiers : int.
Les entiers peuvent être signés ou non (signed ou unsigned), courts ou long
(short ou long). Par défaut, il s’agit d’entiers courts signés.
int (ou short int ou signed int ou signed short int) : sur 2 octets
Valeurs comprises entre -32768 et +32767
unsigned int (ou unsigned short int) : sur 2 octets
Valeurs comprises entre 0 et +65535
long int (ou long ou signed long int) :sur 4 octets
Valeurs comprises entre -2.147.483.648 et +2.147.483.647
unsigned long int : sur 4 octets
Valeurs comprises entre 0 et +4.294.967.295
c- Réels.
Pour stocker les réels, on dispose de deux types, le type flottant simple précision
(float) et le type flottant double précision (double).
float : sur 4 octets (1octet pour l’exposant et son signe, 3 octets pour la mantisse et
son signe)
Valeurs absolues comprises entre 9,9x 10-38 et 9,9x 10+38
double : sur 8 octets (11 bits pour l’exposant et son signe, 53 bits pour la mantisse et
son signe)
Valeurs absolues comprises entre 9,9x 10-307 et 9,9x 10+307
a- Valeurs caractères.
1 caractère entre ‘ ‘
Combinaison de caractères
‘\n’ passage à la ligne
‘\t’ tabulation
‘\b’ back space
‘\r’ retour chariot
‘\f’ saut de page
Annexes Informatique industrielle
″ chaîne ″
″ exemple de \n texte sur \n 3 lignes ″
un marqueur de fin de chaîne est ajouté ‘\0’ NUL ASCII
Une chaîne occupe toujours un octet de plus que le nombre de caractères.
c- Valeurs entières.
Par défaut, les valeurs entières sont exprimées en base 10 et stockées sur des short
int.
Exemples : -32 5678
Si on veut qu’elles soient stockées en long int, il faut faire suivre la valeur de L.
Exemple : 1234567L
Si on veut exprimer les valeurs en base 8 (ou 16), il faut faire précéder la valeur de O
(ou Ox ou OX). Exemples : 020 correspond à (16)10 0x20 à (32)10
d- Valeurs réelles.
Elles sont exprimées en notation virgule fixe ou virgule flottante, et stockées en
double.
5- Déclarations.
a- constantes symboliques.
#define PI 3.14592358
#define E 2.718281828
#define entier int
#define debut {
#define fin }
Annexes Informatique industrielle
Remarque :
les mot-clés commençant par # sont des directives de précompilation, qui sont traitées
avant la compilation. La directive #define permet de remplacer dans le texte source
toutes les occurrences de <ident> par <expression>.
b- Variables.
Exemples :
int i, j ;
double t ;
long k ;
char reponse ;
int tab[10] ;/* tableau de10 entiers*/
Initialisation à la déclaration :
int i = 0 ;
double t = 0.1 ;
1- Affectation.
<ident> = <expression> ;
L’affectation peut être vue comme une fonction renvoyant la valeur affectée, on peut
donc enchaîner les affectations.
i = 3 ;
f = -5E3 ;
k = total + 1 ;
c = 2 ;
a = (b = c) + 4 ; /* a vaut 6*/
Le membre de gauche doit être d’un type de base (pas d’affectation de tableau).
2- Incrémentation / Décrémentation.
Annexes Informatique industrielle
++
préfixé sur une variable => avant accès
ou postfixé sur une variable => après accès
--
i=2;j=2 ;
i=2;j=2 ;
3- Opérateurs arithmétiques.
En ce qui concerne la division, si l’une des expressions est réelle, alors la division est
réelle, sinon il s’agit d’une division entière.
Pour le modulo (reste de la division entière), le signe du reste est celui du dividende.
Exemples :
15%2 /* vaut 1 */
-15%2 /* vaut -1 */
15%-2 /* vaut 1 */
-15%-2 /* vaut -1 */
b * (a/b)+ a%b ≡ a
4- Opérateurs relationnels.
En C, il n’y a ni type ni valeur booléens. Les booléens sont exprimés par des int, la
valeur 1 correspondant à VRAI et la valeur 0 à FAUX.
Annexes Informatique industrielle
5- Opérateurs logiques.
6- Opérateurs de bits.
~ <exp2> /* complément à 1 */
<exp1> & <exp2> /* ET bit à bit */
<exp1> | <exp2> /* OU inclusif bit à bit */
<exp1> ^ <exp2> /* OU exclusif bit à bit */
La valeur de <exp1> est décalée à droite de valeur de <exp2> bits. Si <exp1> est
unsigned, remplissage à gauche par des 0. Sinon, remplissage par des 0 si <exp1>
positive ou nulle, ou remplissage par des 1 si <exp1> est négative (Mais à vérifier en
fonction du compilateur).
Annexes Informatique industrielle
7- Opérateur conditionnel.
8- Opérateur virgule.
<exp1>,<exp2>
L’opérateur virgule est un séquenceur d’actions. <exp1> est d’abord évaluée, mais
son résultat n’est pas pris en compte, puis <exp2> est évaluée et retournée. Une telle
formulation n’a de sens que si <exp1> produit un « effet de bord ».
Exemple :
a=b +(c=2,++c) ;
for(i=0,j=MAX;i<MAX;i++,j--)
{-----}
9- Affectation composée.
Exemples :
i +=3 ; /* i=i+3 */
x *= y+1 ; /* x=x*(y+1) */
a /= b–c ; /* a=a/(b–c) */
(<nouveau-type> ) <exp>
11- Précédences.
Dans ce tableau, les opérateurs sont présentés selon leurs priorités décroissantes du
haut vers le bas. La plupart des opérateurs sont binaires, sauf ceux marqués
explicitement unaires, ainsi que l’opérateur ternaire ?:.
Lorsqu’une expression comporte des opérateurs de même priorité, l’évaluation se fait
de la gauche vers la droite, sauf en ce qui concerne les opérateurs de la seconde ligne
et de l’avant dernière ligne du tableau.
Exemples :
printf(″\nBonjour″);
Exemples :
caractères, qui sont en fait des tableaux de caractères, ce ne sera pas nécessaire, car le
nom d’un tableau est identique à l’adresse de son premier élément.
char libelle[MAX];
-----
scanf(″%d%f″,&pourcentage,&prix);
scanf(″%s″,libelle);
Exemple :
scanf(″%d%*s%d%*s%d%*s″,&heures,&minutes,&secondes) ;
17 H 35 min 30 secondes
Affectations produites:
Heures 17
Minutes 35
Secondes 30
1- Séquence.
{ a1 ; a2 ; }
; terminaison d’instruction
{
<déclarations locales>
<suite instructions> joue le rôle d’une instruction
}
Annexes Informatique industrielle
2- Répétitions.
. do <instructions> while(<expression>)
Test en fin de boucle => exécuté au moins une fois.
. for(<exp1>;<exp2>;<exp3>)<inst> ;
Test de continuation
Initialisation avant boucle
for(i=0;i<n;i++)
if(tab[i]==a)break; /*récupère i correspondant à tab[i]= a
*/
3- Choix.
a- Choix simple.
if(<exp>) <inst> ;
if(<exp>) <inst1> else <inst2>
Annexes Informatique industrielle
if(a<b)
if(c<d)u=0;
else i=j;
if(a>b)
{ if(c<d)u=v;}
else i = j ;
b- Choix multiple
switch ( <exp0> )
{
case < exp1 >: < suite inst1 > ; break;
case < exp2 >: < suite inst2 > ; break;
...
case < expn >: < suite instn > ; break;
default : <inst>
}
Plusieurs cas peuvent correspondre à la même suite d’instructions, ce qui permet de
faire un OU logique entre plusieurs cas. Exemple :
char rep ;
rep=getchar() ;
switch(rep)
{case ‘o’:
case ‘O’:printf(“\nLa réponse est oui”);break;
case ‘n’:
case ‘N’ :printf(“\nLa réponse est non”);break;
default : printf(« \nLa réponse est inconnue ») ;
}
switch(cara)
{case ‘a’:
case ‘e’:
case ‘i’:
case ‘o’:
case ‘u’ :
case ‘y’ :nb_voyelles++;break;
default : nb_consonnes++ ;
}
Annexes Informatique industrielle
4- Instruction vide.
Exemples :
Remarques :
c=0;
if(c=0) <inst1>;
else <inst2>; /* on passe toujours par inst2 */
rep=‘n’;
while(rep==‘0’||‘0’) /* toujours vrai */
{…}
V- Les sous-programmes en C.
1- Généralités.
Une seule classe de sous-programme, la fonction, qui regroupe les notions de fonction
et de procedure de PASCAL ou ADA.
Une seule syntaxe de déclaration, mais deux syntaxes différentes d’appel, selon qu’il
s’agisse d’une fonction ou d’une procedure.
Toutes les fonctions d’un programme sont au même niveau, il n’y a pas d’imbrication
possible.
2- Déclaration de fonction.
en C KR
<type-résultat> <ident-fonction>(<liste de paramètres
formels>)
<déclarations de paramètres formels>)
{ <déclarations locales>
<instructions>
}
Attention, ici, la spécification, c’est-à-dire l’en-tête, ne mentionne pas les types des
paramètres.
En C ANSI
<type-résultat> <ident-fonction>( <déclarations de
paramètres formels>)
{ <déclarations locales>
<instructions>
}
Ici, la spécification, c’est-à-dire l’en-tête, mentionne les types des paramètres, ce qui
est plus rigoureux, surtout dans le cadre de l’utilisation de bibliothèques.
<type-résultat> qui indique le type du résultat renvoyé par la fonction, doit être un
type de base ou un pointeur. Ce ne peut être un tableau ou une structure (sauf en C
ANSI). Si <type-résultat> est absent, il est considéré comme int.
Remarques :
Si la fonction joue le rôle d’une procedure, <type-résultat> doit être remplacé par
void, et le corps de la fonction ne comportera pas de return.
Exemple d’une fonction renvoyant le maximum de 2 entiers passés en paramètres :
3- Appel de fonction.
Syntaxe :
<ident-fonction>(liste de paramètres effectifs)
Les paramètres effectifs sont des expressions du même type que les paramètres
formels correspondants.
Fonction
appelée
Appel fonction
Les paramètres formels jouent le rôle de variables locales dans lesquelles sont
recopiées les valeurs des paramètres effectifs correspondants. Dans ce mode de
transmission, l’information venant des paramètres est entrante vis-à-vis du sous-
programme.
Si l’on veut modifier de l’information dans l’appelant par le biais des paramètres, il
faut que les paramètres formels soient déclarés comme pointeurs, et travailler par
indirection dans le corps de la fonction.
Remarque :
a- Variables locales.
toute variable déclarée dans un bloc est locale à ce bloc et globale pour toute la
hiérarchie descendante des blocs imbriqués. Le domaine de visibilité est le bloc de
déclaration.
static : variable locale ayant la propriété de rémanence, non allouée dans la pile. Si
elle est l’objet d’une initialisation à le déclaration, cette dernière n’a lieu que lors du
premier appel à la fonction.
register : attribut réservé aux variables entières ou pointeur, très utilisées qui vont
être représentées par un registre. Cette possibilité est plutôt dédiée à la programmation
système.
c- Variables externes.
fichier1.c fichier2.c
int i ;
int f1(int n)
extern int i ;
{-------;
int f4(float y)
--------
{-------;
--------
--------
}
--------
float f2(int n)
}
{-------;
float f5()
--------
{-------;
--------
--------
}
--------
void main()
}
{-------;
--------
--------
}
Annexes Informatique industrielle
int f1(int n)
{-------;
--------
--------
}
float f2(int n)
{-------;
--------
--------
}
void main()
{-------;
--------
m = f1(10) ;
y = f2(21) ;
--------
}
soit :
int f1(int );
float f2(int );
void main()
{-------;
--------
m = f1(10) ;
y = f2(21) ;
--------
}
int f1(int n)
{-------;
--------
--------
}
float f2(int n)
{-------;
--------
--------
}
Il est à noter que dans la première configuration, f2() peut appeler f1() mais
f1() ne peut appeler f2().
module1.h module2.h
int f1(int n) ; int f3(int n) ;
float f2(int n); float f4(int n);
principal.exe
Annexes Informatique industrielle
1- Déclaration de tableau.
Syntaxe de déclaration :
Il est préférable, en général, de déclarer une constante pour la taille des tableaux :
#define N 100
---------
---------
int tab[N] ;
Déclaration d’un tableau de 100 entiers. Les éléments sont numérotés de 0 à 99.
#define N 4
int tab[N]={2,12,24,26} ;
S’il manque des valeurs dans l’accolade, par rapport au nombre d’éléments
déclarés, les valeurs manquantes sont initialisées à 0.
En C ANSI, il est possible d’initialiser les tableaux locaux à la déclaration, mais s’il
existe des valeurs manquantes, elles sont indéterminées.
Pour les chaînes de caractères, qui, en C, sont des tableaux de caractères comportant
un caractère terminateur de chaîne, ‘\0’, il est possible de procéder de deux
manières :
char chaine[8]={‘b’,’o’,’n’,’j’,’o’,’u’,’r’,’\0’} ;
Ou bien :
ident-tableau> [ <expression-entière> ]
Annexes Informatique industrielle
1- Définition.
Un pointeur est une variable contenant l’adresse mémoire d’une autre variable.
2- Déclaration de pointeur.
aux déclarations factorisées, l’étoile doit être répétée. On a déclaré ici, un pointeur
d’entier, un pointeur de caractère et deux pointeurs de réels.
3- Opérateur adresse.
4- Opérateur d’indirection.
i 2
*p = 2; /* i prend la valeur 2 */
k = *P + 1 ; /* k prend la valeur 3 */
Soit un tableau de 4 entiers. Le nom du tableau, nous le verrons plus tard, contient
l’adresse du premier élément.
Mémoire
tab
Nous avons vu qu’il n’y a qu’un seul mode de transmission des paramètres en C, la
transmission par valeur. Si nous voulons avoir le mode par variable de PASCAL ou in
out de ADA, il faut le simuler en déclarant le paramètre formel comme un pointeur, et
en passant comme paramètre effectif l’adresse de la variable à modifier dans
l’appelant.
Exemple d’une fonction travaillant comme une procedure en ADA, doublant la valeur
de la variable entière passée en paramètre :
void doubleEntier(int * p)
{
* p= 2 * (*p) ;
}
main()
{int i= 10 ;
doubleEntier(&i) ;
printf("\n%d",i) ;/*affiche 20 */
Annexes Informatique industrielle
}
Annexes Informatique industrielle
main()
{int i= 10 ,j= 20;
echange(&i,&j) ;
printf("\n%d,%d ",i,j) ;/*affiche 20,10 */
}
a- Tableaux monodimensionnels.
L’expression d’indexation est traduite par le compilateur par une translation d’adresse
suivie d’une indirection:
Attention, il est possible (bien que totalement déconseillé) d’effectuer une indexation
sur une variable qui n’a pas été déclarée comme tableau. Ainsi :
somme+=tab[i];
return somme;
}
main()
{int T[4]={10,20,30,40};int s ;
s=sommeElements(T, 4)
printf("\n%d",s) ;/*affiche 100 */
}
b- Tableaux multidimensionnels.
tab 0
1
2
3
4
tab[1] 10
11
12
13
14
tab[2] 20
21
22
23
24
tab[i][j]=*(tab + i * taille_ligne + j)
Généralités.
Il n’y a pas de type chaîne de caractères en C. Une chaîne est représentée par un
tableau de caractères contenant un caractère marqueur de fin de chaîne, ‘\0’. Toute
fonction standard manipulant une chaîne devra connaître l’adresse de début de la
chaîne, c’est-à-dire l’adresse de son premier caractère, et terminera son travail à la
rencontre du caractère de fin ‘\0’.
char texte1[10]={‘e’,’x’,’e’,’m’,’p’,’l’,’e’,’\0’} ;
Nous reviendrons plus tard sur le travail de la notation "". C alloue de la mémoire
pour représenter la chaîne avec son ‘\0’, puis recopie cette zone mémoire dans la
zone réservée pour le tableau texte2 . 10 octets ont été réservés, alors que 8
suffisaient.
Dans ce cas, 8 octets ont été réservés, c’est-à-dire exactement la taille utile.
b- Pointeur de caractères.
texte4 est un pointeur de caractères pointant vers cette zone mémoire allouée par
"".
Annexes Informatique industrielle
texte4
exemple\0
fruit
fruit[0] pomme\0
fruit[1] abricot\0
fruit[2] orange\0
fruit
pomme\0
abricot\0
Orange\0
Annexes Informatique industrielle
3- Saisie de chaîne.
Attention
char * nom ;
scanf("%s",nom) ;
ne produira pas d’erreur de compilation, mais les caractères lus vont être installés
n’importe où en mémoire, puisqu’aucune place mémoire n’a été réservée.
4- Impression de chaîne.
printf({"%s",<adresse début de chaine>)
puts(<adresse début de chaine>)
b- Concaténation de chaînes.
c- Comparaison de chaînes.
strcmp(<adresse chaine1>, <adresse chaine2>)
d- Longueur de chaîne.
strlen(<adresse chaine1>)
1- Structures.
struct <ident-structure>
{ <type1> <ident1> ;
<type2> <ident2> ;
-----------------
-----------------
<typen> <identn> ;
}
<ident-structure>.<ident-champ>
3- Imbrication de structures.
4- Tableaux de structures.
5- Structures récursives.
tete
10 49 -5
NULL
En C KR, ce n’est pas possible. Dans ce cas, il faut passer en paramètres des pointeurs
de structures. Exemple d’une fonction comparant les champs année de 2 dates :
Remarque :
La combinaison de l’indirection * puis de l’accès au champ . peut se noter avec
l’opérateur ->.
(*p1).annee peut se noter p1->annee .
7- Union.
C’est une variable pouvant être de types différents selon le contexte, ce qui correspond
à la notion de RECORD à discriminant du langage ADA.
La déclaration est analogue à celle d’une structure, mais on remplace le mot struct par
union.
Pour que ce soit vraiment utilisable, il faut disposer d’une information supplémentaire
précisant quelle version de la variable utiliser.
#define ENTIER 0
#define REEL 1
struct Arithm { int categorie ;
union Nombre { int entier ;
float reel ;} u;
} ;
struct Arithm a1, a2 ;
Annexes Informatique industrielle
a1.categorie= ENTIER;
a1.u.entier=12;
a2.categorie= REEL;
a2.u.reel=3.14159;
8- Allocation dynamique.
Lorsqu’on déclare une variable, la réservation de place mémoire associée est effectuée
lors de la compilation. On dit qu’il s’agit d’une allocation statique. Lorsqu’on a à
traiter un nombre variable d’informations arrivant lors de l’exécution, on utilise un
tableau en prévoyant le nombre maximum d’éléments. Cela conduit à réserver
beaucoup d’espace mémoire qui sera parfois très peu utilisé. D’autre part, il n’est pas
toujours possible de prévoir le nombre maximum d’éléments à traiter.
a- Allocation de mémoire.
malloc(<nbre d’octets>)
permet d’allouer le nbre d’octets désirés, passé en paramètre. Renvoie une adresse de
caractère ( char *) en C KR ou un pointeur anonyme en C ANSI (void *), si
l’allocation mémoire a réussi, sinon NULL.
Pour connaître la taille à allouer pour un objet structuré complexe, il est commode
d’utiliser l’opérateur sizeof :
sizeof(<ident>)
b- Libération de mémoire.
free(<adresse>)
Annexes Informatique industrielle
X- Le Préprocesseur.
1- Inclusion de fichiers.
Soit :
#include "nom-de-fichier"
soit :
#include <nom-de-fichier>
Dans le premier cas, le fichier nom-de-fichier est un fichier utilisateur, qui est
recherché dans le répertoire courant.
Dans le second cas, nom-de-fichier est un fichier système recherché dans un
répertoire prédéfini.
La directive est remplacée par le contenu du fichier nom-de-fichier.
2- Macros.
a- macrodéfinition.
Exemple :
#define MAX 100
b- macrofonction.
C’est une définition de symbole avec paramètres, qui ressemble à une fonction. Il y
aura, dans un premier temps, substitution des paramètres dans le corps de la macro,
puis dans un second temps, substitution du corps à l’appel.
Exemple :
main()
Annexes Informatique industrielle
{ int i=6,m;
…….
m=max(i,10);
………
la substitution donnera:
main()
{ int i=6,m;
…….
m=(((i)>(10))?(i) :(10));
…….
4- Compilation conditionnelle.
#ifdef symbole
bloc instructions 1
#else
bloc instructions 2
#endif
Annexes Informatique industrielle
Si symbole a été défini par une directive #define préalablement, c’est bloc
instructions 1 qui est pris en compte dans le texte source, sinon c’est bloc instructions
2.
#ifndef à la place de #ifdef, s’interprètera : Si symbole n’a pas été défini par une
directive #define préalablement………….
Annexes Informatique industrielle
1- Généralités.
Les fichiers en C sont vus comme des flots d’octets, il n’existe aucune structuration
logique ou physique en enregistrements comme c’est le cas en COBOL par exemple.
Si l’on a besoin d’une telle structuration, cette dernière reste à la charge du
programmeur.
Il existe 2 types de fichiers, les fichiers texte contenant des codes ASCII et des
passages à la ligne, et les fichiers binaires.
Il existe 2 méthodes de manipulation des fichiers :
Une méthode assistée avec buffer
Une méthode non assistée de bas niveau.
Avant tout travail sur un fichier, il faut l’ouvrir dans un certain mode de travail. Quand
les travaux sont terminés, il faut fermer le fichier.
2- Ouverture/fermeture de fichier.
a- Ouverture.
Syntaxe :
FILE * fopen(char * nom,char * mode)
FILE est un type descripteur de fichier
nom est une chaîne de caractères contenant le nom externe du fichier (nom système).
mode indique le mode d’ouverture, sous forme d’une chaîne de caractères également :
" r " lecture seule (erreur, si le fichier n’existe pas)
" w " écriture seule(écrasement, si le fichier existe)
" a" écriture en fin de fichier
#include <stdio.h>
------------
------------
------------
FILE *fd ;
if((fd=fopen("f_donnees", "rt"))==NULL)
printf("\nerreur d’ouverture");
else /* travailler sur le fichier */
{-----------
------------
------------
}
N.B.
Il existe 3 fichiers standards prédéfinis :
stdin
stdout
stderr
b- Fermeture.
int fclose(FILE * f)
3- Lecture/écriture de caractères.
a- Lecture de caractères.
int getc(FILE * f)
b- Ecriture de caractères.
Exemple :
Copie d’un fichier texte de nom « entree » dans un fichier texte de nom « sortie »,
caractère par caractère.
int c ;
FILE *fentree, *fsortie ;
Annexes Informatique industrielle
4- Lecture/écriture de lignes.
a- Lecture de lignes.
Lit les caractères sur le fichier, les charge dans le tableau de caractères tampon, ou
bien jusqu’à ce qu’il ne reste qu’un seul caractère libre dans le tampon, et complète par
‘\0’.
b- Ecriture de lignes.
5- Lecture/écriture formatées.
a- Lecture formatée.
format est une chaine de caractères contenant des caractères à afficher tels quels et
des spécifications de format, comme dans le printf. Le fonctionnement est
analogue, sauf que l’écriture se fait dans le fichier f.
b- Ecriture formatée.
6- Lecture/écriture de blocs.
a- Lecture de blocs.
Le fread tente de lire nombre objets de taille taille, les installe, octet par octet
dans le tableau de caractères tampon, et renvoie le nombre d’objets effectivement
transférés.
b- Ecriture de blocs.
Le fwrite tente d’écrire nombre objets de taille taille, octet par octet depuis le
tableau de caractères tampon, vers le fichier f et renvoie le nombre d’objets
effectivement transférés.
7- Instructions de contrôle.
a- Test de fin fichier.
int feof(FILE * f)
b- Erreur d’E/S.
int ferror(FILE * f)
A chaque fichier est associé un « point de déplacement » qui indique sur quel octet on
est positionné.
A l’ouverture en lecture ou écriture, on est positionné sur le premier octet. En append
on est positionné en fin de fichier.
En accès séquentiel, la gestion du « point de déplacement » est automatique
En accès direct, ou lorsqu’on mélange les lectures et les écritures, c’est au
programmeur de se repositionner.
dep est un entier long indiquant un déplacement en octets à partir d’une certaine
origine définie par l’entier mode, dont les valeurs possibles sont :
0 début du fichier
2 fin du fichier
1 position actuelle
Annexes Informatique industrielle
Pour les valeurs 0 et 2, les déplacements sont positifs, alors que pour 1 le déplacement
peut être signé.
N.B.
fseek renvoie 0 en cas de réussite, ≠ 0 en cas d’échec
void rewind(FILE * f)
équivaut à fseek(f,0L,0)
e- Position courante.
long ftell(FILE * f)