correction_tp2

Download Report

Transcript correction_tp2

La boucle for : init7.c et init71.c
=> 5.1 la fonction scanf : la fonction scanf permet de saisir une
valeur ou une chaine de caractère fournie par l’utilisateur du
programme via le clavier de l’ordinateur .
&n : indique que l’on utilise l’adresse ( &) de la variable n pour
récupérer le caractère saisi au clavier .
La variable n contient alors un entier saisi au clavier .
=> 5.2 La variable qui permet de parcourir la boucle FOR est la
variable i . On l’appelle la variable de contrôle de la boucle .
La boucle for : init7.c et init71.c
=> 5.3 EXEMPLE :for (i=0; i<3; i=i+1) printf(“i=%d\n”,i) ;
L’instruction FOR est un cas particulier de l‘instruction
WHILE ( tant que ):
i=0
i=0;
non
tant que ( i<3 est vraie )
i<3?
{
printf(“i=%d\n”,i) ;
i=i+1;
}
oui
Afficher i
i=0
i=1
i=2
i = i+1
La boucle for : init7.c et init71.c
=> 5.3 for (initialisation; condition; expression3) instruction ;
L’instruction FOR est un cas particulier de l‘instruction
WHILE ( tant que ):
Initialisation
initialisation;
non
tant que ( condition est vraie )
Condition est vraie
{
instruction ;
expression3;
}
Pour sortir de la boucle : l’expression 3
doit faire évoluer la variable de contrôle
oui
Instruction
expression 3
La boucle for : init7.c et init71.c
=> 5.5 la valeur d’initialisation de la variable res est égale à 1 .
Dans le premier passage dans la boucle res=1 , puis res =(1) x n .
Dans le second passage dans la boucle res=n , puis res =(n) x n .
Dans le troisième passage dans la boucle res=n² , puis res =(n x n) x n .
……A l’arrivée : on affiche n³ .
La boucle for : init7.c et init71.c
=> 5.6 Aucune différence entre l’exécution de init70.c et celle de init71.c .
“#define PUISS 3” n’est pas une instruction !!!
C’est une directive de compilation qui permet de remplacer le mot
PUISS dans le programme par la valeur 3 AVANT la compilation du
fichier source .
int puiss=3 est la définition de la variable puiss qui mange 4 octets en
mémoire pendant l’exécution du programme !!!
Beaucoup de paramètres dans le projet du robot seront définies par des
déclarations symboliques (# DEFINE …..) afin d’économiser de
l’espace mémoire dans la mémoire de données dans le microcontrôleur .
La structure if…else : init8.c
=> 6.1 Les 3 parties du programme
Présentation et saisie de a, b et c
Calcul des racines
Sortie du programme
La structure if…else : init8.c
=> if ( condition) ….else ;
L’instruction IF permet de tester une condition et d’exécuter
une instruction ou un bloc d’instruction .
if ( condition ) instruction1 ;
else instruction2 ;
Remarque : La partie ELSE n’est pas
obligatoire .
non
Condition est vraie
oui
Instruction1
Instruction2
La structure if…else : init8.c
=>6.2 if ( ((a==0)&&(b==0)&&(c==0))) ….else ;
La condition peut se traduire par :
a =0 ET b=0 ET c=0.
== : opérateur de comparaison
&& : opérateur ET logique
En somme :
la condition est VRAIE si les trois variables a,b et c sont nulles !
La condition est FAUSSE si une seule des variables est égale à 1 .
La structure if…else : init8.c
=> 6.3 Algorigramme de init8.c :Calcul des racines
Début
oui
Afficher
non
" Infinité de solution "
oui
Afficher
a=b=c=0?
a=b=0 et c0?
non
" Pas de solution "
oui
a=0 et b  0?
non
Afficher
" Appuyer sur une touche "
Afficher
" Une solution "
Calculer et afficher X=-c/b
Attendre la saisie d ’une frappe
Fin
(suite)
La structure if…else : init8.c
=> 6.3 Algorigramme de init8.c :Calcul des racines(suite)
non
a  0?
oui
Calculer le delta =b*b-4*a*c
Afficher
oui
delta
delta négatif?
non
oui
Afficher
delta =0?
" Appuyer sur une touche "
Afficher
" Une solution "
non
Attendre la saisie d ’une frappe
Calculer et afficher X=-b/(2*a)
Fin
(suite)
La structure if…else : init8.c
=> 6.3 Algorigramme de init8.c :Calcul des racines (suite)
non
Calculer X1
Calculer X2
Afficher
" Delta positif deux solutions "
Afficher
Afficher
les valeurs de X1 et de X2
" Appuyer sur une touche "
Attendre la saisie d ’une frappe
Fin
Structures de programmation : init81.c
=> 7.1 Les 3 parties du programme
Définition d’une fonction ‘bonjour’
Programme principal
Description de la fonction ‘bonjour’
Structures possibles de programme:
Il y a 3 types d ’écritures possibles d ’un programme en C :
Structure num.1
#include<stdio.h>
Structure num.3
#include<stdio.h>
main()
main()
{
{
//definition des variables
//definition des variables
int k;
int i;
char onde;
char c;
float bobo;
float b;
instruction1;
instruction1;
Une suite
instruction2; d ’instructions
…………
à exécuter
instruction2;
fonction_1();
instruction3;
main()
fonction_2();
}
………….
instruction n;
}
{
//definition des variables
int tab[10];
char kiki;
Mélange
d ’instructions
et de fonctions
à exécuter
instruction n;
Structure num.2
#include<stdio.h>
float temperature;
fonction_1();
fonction_2();
………….
fonction_n();
}
Une suite
de fonctions
à exécuter
Structures possibles de programme:
Structure num.2 ou num.3
#include<stdio.h>
Pour ces 2
structures
la définition des
fonctions
et leur description
s ’effectuent
en dehors de la
fonction principale
main .
void fonction1();
Définition ( ou déclaration du prototype )
main()
{
//definition des variables
int k;
char onde;
float bobo;
instruction1;
instruction2;
fonction_1();
……….
instruction n;
}
void fonction1()
{
declarations
instructions
}
Description de la fonction
Structures de programmation : init81.c
=> 7.2 La fonction ‘bonjour’ :
void bonjour()
=> 7.3 L’appel à l’exécution
de la fonction ‘bonjour’:
….Elle s’effectue en la
nommant dans le programme
…et c’est tout !
void bonjour()
“vide” : ne renvoie rien
d’utile au reste du
programme
les arguments : ici…aucun !
Les fonctions:
Une fonction est l ’équivalent d ’un sous-programme en
langage assembleur sauf qu ’ici :
Syntaxe d ’écriture d ’une fonction :
<type de la valeur de retour>nom_fonction(liste des
variables reçues par la fonction)
Exemple : int affich_temperature ( float temp )
int k;
………….
instruction1;
instruction2;
…………….
return 1;
Déclaration des variables locales
Une fonction peut renvoyer une valeur de retour qui
est typée : exemple int affich_temperature(….);
Cette fonction renvoie un entier (int) après
l ’execution ( ou le traitement ) de cette fonction .
Une fonction peut aussi ….rien renvoyer :
exemple void affich_temperature(….);
Cette fonction renvoie aucune valeur utile à la suite
du traitement du programme après l ’execution ( ou
le traitement ) de cette fonction .
Valeur de retour est un entier égal à 1
Utilisations des fonctions : init82.c
=> 8.9 Modification du programme pour traiter le cas du delta négatif
A l’exécution , cela
peut donner :
Réalisation d ’un projet :mon_prem_projet
Intérêts : hiérarchisation des problèmes, lisibilité, réutilisation
L ’idée :Regrouper dans un même fichier source les fonctions ayant un même thème
Projet
main.c
Un projet contient plusieurs fichiers :
fichiers *.c et des fichiers *.h
Fichier d’en-tête
outils.c
outils.h
La déclaration des fonctions
La description des fonctions
La modularité et la gestion de projet :
Intérêts : hiérarchisation des problèmes, lisibilité, réutilisation
L ’idée :Regrouper dans un même fichier source les fonctions ayant un même thème
Un projet contient plusieurs fichiers :
fichiers *.c et des fichiers *.h
Fichier d’en-tête
main.c
mot.c
mot.h
#include …
#define …
#include ‘‘mot.h ’’
main( )
{
vitesse1( );
AV_mot (X,Y);
}
/*Définition des fonctions ayant
pour thème la gestion d ’un des 2
moteurs du robot*/
#include (ce dont on a besoin)
/*Prototypes des
fonctions ayant pour
thème la gestion d ’un
des 2 moteurs du robot
et d ’éventuelles
constantes
symboliques*/
#define VIT_MAX 300
Projet
int vitesse1( )
{…}
int AV_mot (int min,int
max)
{…}
int vitesse1( );
int AV_mot
(int,int);
Introduction au
langage C
Et maintenant , on attaque …..