• Aucun résultat trouvé

• Apprendre à programmer en langage C

N/A
N/A
Protected

Academic year: 2022

Partager "• Apprendre à programmer en langage C"

Copied!
33
0
0

Texte intégral

(1)

Outils logiciels de base

ELE002

(2)

ELE002 Outils logiciels de base

Objectifs pédagogiques

Acquérir les bases de la programmation et savoir utiliser quelques logiciels parmi les plus courants. Cet enseignement est organisé à partir de cours et de travaux pratiques.

Capacité et compétences acquises

Connaissances des outils informatiques du technicien .

Organisation

Nombre de crédits enseignements : 8 ECTS Type de la formation : Cours

Contenu de la formation Première partie

La programmation en langage C

Les principes, les variables, l'affectation, les instructions élémentaires, les boucles.

Les fonctions, les tableaux et les pointeurs.

L'utilisation de logiciels Le système d'exploitation.

Présentation de linux.

Deuxième partie

La programmation en langage C

Les chaines de caractères, les structures et les fichiers.

L'utilisation de logiciels Le traitement de texte.

Le tableur.

Initiation à Matlab

Les exercices sont effectués en séance par les auditeurs sur ordinateurs.

(3)

Objectifs

• Apprendre à programmer en langage C

• Appréhender la structure des systèmes informatiques

• Utiliser les environnements de développement

• Connaître les outils informatiques utiles au domaine de l’Électronique tels que :

- Matlab (et ses alternatives gratuites)

- Excel, Word, etc.

(4)

Supports

• Polycopié " Outils logiciels de base" ; code ELE002 ; C. Alexandre & C. Pautot Environ 10€

• CDROM (vendu 1€) contenant le cours en version pdf ainsi que d'autres cours et les

logiciels utilisés durant l'année (Codeblocks,

Visual studio, Octave, Scilab, OpenOffice, …)

(5)

Déroulement

• Bases du langage C (3 à 4 séances)

• Programmation "d'algorithmes élémentaires" (5 à 6 séances)

• Fonctions, pointeurs et tableaux en C (7 à 8 séances)

• Projet Mastermind (3 à 4 séances)

• 1

er

Examen (fin février ou début mars)

• Chaînes de caractères, structures, fichiers (7 à 8 séances)

• Introduction à Matlab (Octave, Excel, ...)

• 2

ième

Examen (début juin)

• Examen de rattrapage (mi juin)

(6)

Bases du langage C (3 à 4 séances)

• Structure d'un système informatique (ordinateur, µP, DSP, …)

• Programmation en langage "évolué" (langage C)

• Programme

• Environnement de développement (Codeblocks)

(7)

Structure d'un système informatique

µP

Mémoire permanente : Disque dur (lenteur)

ROM (Read Only Memory)

RAM

(Random Access Memory)

Clavier, capteurs, …

Ecran, afficheurs, commandes, …

(8)

Programmation en langage "évolué"

Les premières machines étaient programmées en "langage machine" :

Suite d'instructions exprimées en binaire et directement exécutables par le système.

Exemple :

Charger une valeur depuis la case mémoire 68 après celle pointée par le registre 3 dans le registre 8 :

100011 00011 01000 000000000001000100 op | rs | rt | adresse

Inconvénient : très difficile pour l'homme habitué aux langages évolués Alternative :

100011 00011 01000 000000000001000100 35 3 8 68

(9)

Langage Assembleur

Idée : utiliser des mnémoniques :

100011 00011 01000 000000000001000100 load r3 r8 68

Exemple tiré de Wikipedia :

.global _start

BONJ: .ascii "Bonjour\n" ; Définition en mémoire de la chaîne à afficher.

_start: mov $4 , %eax ; Mettre 4 dans le registre eax (appel système '''Write'')

mov $1 , %ebx ; Mettre 1 dans le registre ebx (descripteur de fichier ''STDOUT'') mov $BONJ , %ecx ; Mettre l'adresse mémoire de notre chaîne dans ecx

mov $8 , %edx ; Mettre la taille de la chaîne dans edx

int $0x80 ; Interruption 0x80, exécutant un appel système sous Linux) mov $1 , %eax ; Mettre 1 dans eax (appel système ''Exit'')

mov $0 , %ebx ; Mettre 0 dans ebx (valeur de retour du programme)

int $0x80 ; Interruption 0x80, exécutant un appel système sous Linux)

Inconvénient : pénible, peu productif et surtout "non portable"

(10)

Langage évolué

Exprimer les tâches à exécuter dans un langage simple dont les règles syntaxiques sont claires et faciles à retenir pour l'Homme.

Exemple : y=2*x+b

Inconvénient : Nécessité de traduire les instructions de haut niveau en langage machine (traduction automatique sous optimalité)

Avantages : productivité accrue, portabilité

Le langage C est le langage évolué le plus utilisé. Il en existe d'autres : Fortran, Pascal, Ada,

Programmation rigoureuse et résultats de grande valeur (majorité des applications) Très bonne protection du code

Tendance : Langages interprétés (traduction à la volée) :

Basic, langage de script (sh, PHP, Perl, Python, Tcl, …), Java, Matlab, …

Programmation rapide mais exécution plus lente et nécessité d'un interpréteur Protection difficile

(11)

Programme

Code source écrit par le programmeur :

#include <stdio.h>

#include <stdlib.h>

int main() {

printf("Bonjour\n");

return 0;

}

Puis traduit en code exécutable :

bonjour.c traduction Bonjour.exe

Code source Executable

Bonjour.o Code objet compilation

Edition de liens

(12)

Environnements de développement

(13)

Le langage C

Le langage C a été inventé en 1972 par Kenneth Thompson et Dennis Ritchie aux laboratoires Bell pour écrire UNIX et assurer sa portabilité.

Brian W. Kernighan et Dennis M. Ritchie, "Le langage C"

Normalisé en 1989 : ANSI C ou C89 Puis en 1999 par l'ISO : C99

Le langage C est particulièrement bien adapté à :

- L'écriture des systèmes d'exploitation (Windows, Linux (Unix), Mac OS X, … - La programmation embarquée sur microcontrôleurs

- Les calculs intensifs (maths, traitement des images, traitement du signal, etc …) l'électronique

Le C est un langage simple. Son compilateur l'est également et le code assembleur généré est quasi-optimal. Il est souvent choisi comme premier langage pour une nouvelle architecture.

Le C n'est pas un langage orienté objet.

C++ est une extension du langage C qui l'enrichi de la notion d'objet.

Kenneth Thompson

Dennis Ritchie

(14)

Un programme C

#include <stdio.h>

#include <stdlib.h>

int main() {

printf("Bonjour\n");

return 0;

}

Inclusion

des

fichiers d'en-tête "stdio.h" et

"stdlib.h" nécessaires à l'utilisation des fonctions de la bibliothèque standard du C

main() est le nom de la fonction principale de tout programme C ; aussi appelée point d'entrée du programme

Corps du programme délimité par des accolades ("{" et "}") et constitué

d'instructions séparées par des points virgules ";"

(15)

Instructions

#include <stdio.h>

#include <stdlib.h>

int main() {

printf("Bonjour\n");

return 0;

}

printf("Bonjour\n") est une instruction qui fait appel à la fonction d'écriture standard

"printf()".

"Bonjour\n" est une chaîne de caractères (suite de caractères) fournie à la fonction printf()et destinée à être affichée à l'écran.

"\n" est un caractère spécial signifiant d'aller à la ligne.

return 0 est une instruction commandant de quitter la fonction main() en renvoyant la valeur 0 à l'extérieur.

(16)

Programme effectuant un calcul

#include <stdio.h>

#include <stdlib.h>

int main() { int x,y;

x=5;

printf("La valeur de x est : %d\n",x);

y=x*x;

printf("La valeur de x au carré est : %d\n",y);

printf("La valeur de %d au carré est : %d\n",x,y);

return 0;

}

A voir :

Notion de variable

Fonctionnement de la fonction printf()

Déclaration des variables x et y (mémoires) destinées à contenir des valeurs entières Initialisation de la variable x à 5 (affectation)

Affichage de : La valeur de x est : 5↵ Calcul de y (x au carré)

Affichage du résultat Affichage plus complexe Fin de la fonction main() et donc du programme

(17)

Variables

Une variable est un nom qui sert à repérer un emplacement mémoire dans lequel on peut ranger une valeur

.

Le nom :

Les noms de variables sont sensibles à la casse.

Les caractères qui les composent doivent être choisis parmi les 26 lettres majuscules et minuscules de l’alphabet, les chiffres de 0 à 9 et l’underscore _.

Le premier caractère du nom ne doit pas être un chiffre.

Pas d’espace, pas de caractères accentués.

Le compilateur s’arrête à 32 caractères.

Noms corrects : A, A1, n_1, racine_carree

Noms incorrects : 1a, nombre 1, racine_carrée, nombre-1

(18)

Types de variable

Différents types de valeur peuvent être rangés dans l'emplacement mémoire :

Valeur entière : type int Valeur réelle : type float

Code de caractère : type char Exemples de déclaration :

int n, p;

float valeur, X1, X2;

char reponse;

Exemples d'affectation : n = 10;

X1=3.14;

Exercices 3.1 et 3.2 + voir en détail les différents types

(19)

Les types entier

Exemple :

short int n, o, p;

n = 10;

o = +15;

p = -2542;

n = p + o;

type nombre

de bits

intervalle

unsigned short int 16 0 à (216-1 = 65535)

short int 16 (-215=-32768) à (215-1 = 32767) unsigned long int 32 0 à (232-1= 4 294 967 295)

long int 32 (-231=-2 147 483 648) à (231-1 = 2 147 483 647) int 32* (-231=-2 147 483 648) à (231-1 = 2 147 483 647)

(20)

Les types réels

Exemple :

float n, o, p;

n = 12.43;

o = -0.38e-33;

p = -4.0;

signe exposant (signé) mantisse (non signée)

2-64 10-19 216384

10+4932 1 + 15 +

64 80

long double

2-52 10-15 21024 10+308

1 + 11 + 52 64

double

2-23 10-7 2128 10+38

1 + 8 + 23 32

float

précision max valeur max

(valeur min*) format

nombre de bits type

* : la valeur min se détermine à partir de la valeur max (ex : max = 10+38 min = 10-38)

(21)

Les types caractère

Exemple :

char n, o, p;

n = ‘s’; /* un caractère normal */

o = 100; /* un petit entier */

p = ‘\n’; /* le caractère spécial line feed */

p = 0x0A ; /* toujours un line feed */

type nombre de bits intervalle

unsigned char 8 0 à (28-1 = 255)

char 8 (-27=-128) à (27-1 = 127)

(22)

La fonction printf()

La fonction printf() permet d’afficher un message paramétrable.

Exemple :

printf("La valeur de %d au carré est : %d\n",x,y);

Le premier argument définit le message à afficher et peut contenir des codes de format (%d, %f, %c, …) destinés à être remplacés par des valeurs de variables.

Les argument suivants sont les variables dont les valeurs doivent être affichées à la place des codes de format.

Le premier argument est aussi appelé "format"

Les variables peuvent être remplacées par des valeurs constantes

(23)

Codes de format

• %d : entier en décimal

• %x : entier en hexadécimal

• %f : réel en notation sans exposant

• %e : réel en notation scientifique

• %g : réel en notation la mieux adaptée

• %c : caractère

voir la documentation sur printf()

Les codes de formats doivent être appropriés aux variables !

(24)

La fonction scanf()

La fonction scanf() permet de "lire" au clavier une ou plusieurs variables.

Exemple :

scanf("%d %d",&x,&y);

Le premier argument contient les codes de format (%d, %f, %c, …) indiquant comment effectuer les conversions.

Les argument suivants sont les noms des variables précédés du caractère

"&".

(25)

Les déclarations

Avant d'être utilisée pour mémoriser une donnée, une variable doit être "déclarée" : int nb_pommes=10;

Nom de la variable type

Initialisation éventuelle

En C, les déclarations doivent être effectuées au début des blocs d'instructions : Plusieurs variables de même types peuvent être déclarées en même temps : int nb_pommes=10,nb_poires;

Le séparateur est une virgule

{

int i,j;

float pi2,pi=3.14159;

i=i+j;

pi2=pi/2;

}

Déclarations

Suite du programme

Bloc d'intructions

(26)

Les affectations

Les affectations sont les instructions les plus courantes : nb_pommes=nb_sacs*nb_pommes_par_sac+10;

Signe de l'affectation

Membre de gauche : nom de variable Membre de droite : expression

Les expressions sont constituées de variables et d'opérateurs et éventuellement de parenthèses :

nb_pommes=(nb_sacs*nb_pommes_par_sac)+10;

Les parenthèses servent à préciser l'ordre des calculs. En absence de parenthèse, c'est la priorité relative des opérateurs qui détermine l'ordre.

Les expressions sont évaluées de la gauche vers la droite : nb_pommes=nb_sacs*(nb_pommes_par_sac+10);

Si nb_sacs est nulle, le reste de l'expression n'est pas évalué.

Opérateurs

(27)

Les opérateurs

Priorités :

opérateur unaire de négation (ex : -b;) -

reste de la division entière (modulo)

%

division entière /

multiplication

*

addition, soustraction +, -

opération symbole

en cas d’égalité, le calcul s’effectue de gauche à droite

+, - min

en cas d’égalité, le calcul s’effectue de gauche à droite

*, /, % moy

- (négation) max

commentaires symbole

priorité

(28)

L’instruction if

L’instruction if permet de réaliser des choix

if(p>127) {

printf("p est superieur a 127\n");

} else {

printf("p est inferieur ou égal a 127\n");

}

optionnel

p>127

?

"p est superieur

a 127"

"p est inferieur

ou égal a 127"

oui

non

fin

// Imbrication if(p>127) {

printf("p est superieur a 127\n");

} else {

if(p==127) {

printf("p est egal a 127\n");

} else {

printf("p est inferieur a 127\n");

} }

(29)

Les conditions

non égal

!=

supérieur ou égal

>=

inférieur ou égal

<=

supérieur

>

inférieur

<

égal

==

signification opérateur

non

!

ou

||

et

&&

signification opérateur

vrai si les deux conditions a<b et c<d sont vraies ou si i=5 ((a<b)&&(c<d))||(i==5)

vrai si la condition a<b est fausse

!(a<b)

vrai si l’une au moins des deux conditions a<b et c<d est vraie (a<b)||(c<d)

vrai si les deux conditions a<b et c<d sont vraies (a<b)&&(c<d)

Exemples :

Possibilité de combiner les conditions :

La valeur d'une condition fausse est 0 La valeur d'une condition vraie est 1

Une valeur nulle est fausse Une valeur non-nulle est vraie

(30)

Les structures de répétitions (boucles)

Elle sont de 2 types :

Type 1 : Tant que condition faire instructions Type 2 : Faire instructions tant que condition

instruction;

instruction;

condition

? non oui

Type 2

condition

?

instruction;

instruction;

oui

non

Type 1

(31)

tant que condition faire instructions

while (condition) { instructions }

condition

?

instruction;

instruction;

oui

non

for(init;cond;incr) { instructions }

initialisation, initialisation,

instruction, instruction,

Deux solutions : while et for

(32)

Exemple

while

// Somme des N premiers nombres entiers int somme,i,N;

scanf("%d",&N);

somme=0;

i=1;

while(i<N) { somme=somme+i;

i=i+1;

}

printf("La somme des %d premiers \ entiers est %d\n",N,somme);

for

// Somme des N premiers nombres entiers int somme,i,N;

scanf("%d",&N);

somme=0;

i=1;

for(i=1; i<N; i=i+1) { somme=somme+i;

}

printf("La somme des %d premiers \ entiers est %d\n",N,somme);

Les boucles for sont les boucles les plus utilisées en C

(33)

faire instructions tant que condition

do { instructions } while (condition)

condition

? non oui

instruction;

instruction;

// Somme des notes tant que note # 0 int somme,note;

somme=0;

do {

scanf("%d",&note);

somme=somme+note;

} while(note!=0);

printf("La somme des notes est %d\n",somme);

Surtout utilisé lorsque la condition est liée au corps de la boucle.

Références

Documents relatifs

Unsere Patientin profitiert klinisch, la- borchemisch und lungenfunktionell seit 5 Jahren ohne relevante Nebenwirkungen von einer fortgeführten Behandlung mit Tocilizumab. Im

Lecture : en 2006, dans les entreprises de 10 salariés ou plus du secteur concurrentiel, 32,0 % des sala- riés à bas salaire sont titulaires du CEP ou n'ont pas de diplôme, contre

Champ : salariés en contrat aidé (hors ACI) recrutés entre septembre et novembre 2013 ; France entière Source : Dares, enquête auprès des établissements utilisateurs de

Outre l’instauration d’un salaire minimum, une autre méthode a largement fait ses preuves pour améliorer les conditions d’emploi sur le marché du travail à bas salaire

Because SHFM3 has been associated with duplications of the region, a simple interpretation of the human SHFM3 mutation would be that dosage increase of genes within the

Based on the present findings, it can be concluded that: (a) ozone has a strong antibacterial activity against anaerobic periodontal pathogenic microorganisms, (b) the

Ce groupe, constitué de Bravais, du dessinateur Louis Bevalet, de l’astronome et physicien Victor Lottin, ainsi que de deux physiciens suédois, choisit d’hiverner au village de

Afin de faire l’analyse des matériaux présentés dans cette thèse, nous pensons que l’analyse du développement des objets de discours dans le dialogue, par l’analyse