Traduction des arbres programmatiques en C Table des

publicité
Traduction des arbres programmatiques en C
Table des matières
1 Premier exemple : helloworld.c
1
2 Méthode de programmation
2
3 Déclaration de variables
2
4 Structures de contrôle
3
5 Opérateurs C
5
6 Tableaux
6
7 Tableaux 2D
7
8 Fonctions
8
9 Procédures
9
10 Enregistrements
11
A Le fichier ulco_algo.h
12
1
Premier exemple : helloworld.c
// initialisations
# include " ulco_algo . h "
// programme principal
int main ()
{
// affiche un message a l ’ ecran
AfficherTexte ( " Hello world ! " ) ;
// affiche un retour a la ligne
AfficherSaut () ;
// fin du programme principal
return 0;
}
Formulaire_AP_C
page 1/ 12
2
Méthode de programmation
1. ouvrir geany
2. créer un nouveau fichier et l’enregistrer intelligemment (par exemple, exo1.c dans le répertoire TP1)
3. écrire le code C d’un programme principal vide
4. traduire progressivement l’arbre programmatique en C :
(a) traduire la première fonction/procédure et l’appeler dans le programme principal, pour la tester
(b) construire le programme (menu, barre d’outils ou touche F9)
(c) s’il y a des erreurs de compilation, les corriger et revenir à l’étape (b)
(d) exécuter le programme (menu, barre d’outils ou touche F5)
(e) vérifier que le programme fonctionne correctement (sinon revenir à l’étape (a))
(f) recommencer avec la fonction/procédure suivante, jusqu’à ce que tout l’arbre programmatique soit
traduit
3
Déclaration de variables
Arbre Programmatique
C
Remarque
a : booléen
int a;
(faux si 0, vrai sinon)
b, c : entier
int b, c;
d : reel
float d;
e : caractère
char e;
En C, les noms de variable peuvent contenir des lettres (sans accent), des chiffres et le caractère "_". Un
nom ne doit pas commencer par un chiffre. Le compilateur distingue les majuscules des minuscules.
Choisissez vos noms de façon cohérente : par exemple des noms en minuscules avec des "_" pour les variables
(moyenne_ponderee) et des verbes en notation dromadaire pour les fonctions (CalculerMoyennePonderee).
Formulaire_AP_C
page 2/ 12
4
Structures de contrôle
Arbre Programmatique
C
int main ()
{
int resultat_ok ;
resultat_ok = 1;
return 0;
}
pas de traduction, écrire les instructions à la suite
Saisir(x)
SaisirEntier (& x ) ;
SaisirReel (& x ) ;
SaisirCaractere (& x ) ;
Afficher("hello")
Afficher(12)
Afficher(2.4)
Afficher(’F’)
AfficherSaut()
AfficherTabulation()
AfficherTexte ( " hello " ) ;
AfficherEntier (12) ;
AfficherReel (2.4) ;
Affic herCarac tere ( ’F ’) ;
AfficherSaut () ;
Af fi ch erT ab ul ati on () ;
if ( cond )
{
actionV ;
}
if ( cond )
{
actionV ;
}
else
{
actionF ;
}
for ( i =0; i <= N ; i = i +1)
{
action ;
}
while ( cond )
{
action ;
}
Formulaire_AP_C
page 3/ 12
Exemple : moyenne de 3 nombres
# include " ulco_algo . h "
int main ()
{
// declare les variables
float a , b , c ;
float moyenne ;
// saisit les 3 nombres
AfficherTexte ( " Entrez a : " ) ;
SaisirReel (& a ) ;
AfficherTexte ( " Entrez b : " ) ;
SaisirReel (& b ) ;
AfficherTexte ( " Entrez c : " ) ;
SaisirReel (& c ) ;
// calcule la moyenne
moyenne = ( a + b + c ) / 3.0;
// affiche la moyenne calculee
AfficherTexte ( " La moyenne est " ) ;
AfficherReel ( moyenne ) ;
return 0;
}
Exemple : saisir un nombre positif
# include " ulco_algo . h "
int main ()
{
// variable contenant le nombre saisi
int n ;
// premiere saisie
AfficherTexte ( " Entrez un nombre positif : " ) ;
SaisirEntier (& n ) ;
// recommence la saisie tant que le nombre n ’ est pas valide
while ( n < 0)
{
AfficherTexte ( " Pas positif . Entrez un nombre positif : " ) ;
SaisirEntier (& n ) ;
}
return 0;
}
Formulaire_AP_C
page 4/ 12
5
Opérateurs C
Liste non exhaustive. En cas de doute sur les priorités entre opérateurs, utiliser des parenthèses.
Opérateurs arithmétiques
Opérateur
Signification
Exemple
+
addition
12 + 3
// resultat : 15
-
soustraction
12 - 3
// resultat : 9
*
multiplication
12 * 3
// resultat : 36
/
division
7 / 2
// resultat : 3 !!!
-
opposée
-(1+2)
// resultat : -3
%
modulo
12 % 5
// resultat : 2
Signification
Exemple
==
égalité
12 == 3
// faux
!=
différence
12 != 3
// vrai
<
infériorité stricte
12 < 3
// faux
>
supériorité stricte
12 > 3
// vrai
<=
infériorité
12 <= 3
// faux
>=
supériorité
12 >= 3
// vrai
Signification
Exemple
!
NON logique
! (12 < 3)
// vrai
&&
ET logique
12 < 3 && 12 > 3
// faux
||
OU logique
12 < 3 || 12 > 3
// vrai
Opérateurs de comparaison
Opérateur
Opérateurs logiques
Opérateur
Formulaire_AP_C
page 5/ 12
6
Tableaux
Arbre Programmatique
C
T : tableau de 5 entiers
int T[5];
for ( i =0; i <=4; i = i +1)
{
SaisirEntier (& T [ i ]) ;
}
Exemple : initialiser à 0 un tableau de 20 entiers
# include " ulco_algo . h "
int main ()
{
// declarations
int i ;
int T [20];
// parcourt et remplit le tableau
for ( i =0; i <=19; i = i +1)
{
T [ i ] = 0;
}
// affiche le tableau
for ( i =0; i <=19; i = i +1)
{
AfficherEntier ( T [ i ]) ;
Af fi ch erT ab ul ati on () ;
}
return 0;
}
Formulaire_AP_C
page 6/ 12
7
Tableaux 2D
Arbre Programmatique
C
M : tableau de 3 × 4 réels
float M[3][4];
for ( i =0; i <=2; i = i +1)
{
for ( j =0; j <=3; j = j +1)
{
M [ i ][ j ] = 0;
}
}
Exemple : matrice identité 4 × 4
# include " ulco_algo . h "
int main ()
{
// declarations
int i , j ;
float M [4][4];
// parcourt et remplit la matrice
for ( i =0; i <=3; i = i +1)
{
for ( j =0; j <=3; j = j +1)
{
if ( i == j )
{
M [ i ][ j ] = 1.0;
}
else
{
M [ i ][ j ] = 0.0;
}
}
}
return 0;
}
Formulaire_AP_C
page 7/ 12
8
Fonctions
Arbre Programmatique
C
int CalculerMax2 ( int x , int y )
{
// ...
}
max = CalculerMax2 (12 , 3) ;
Exemple : max de 2 entiers
# include " ulco_algo . h "
// retourne le plus grand de 2
entiers
int CalculerMax2 ( int x , int y )
{
int m ;
if ( x > y )
{
m = x;
}
else
{
m = y;
}
return m ;
}
int main ()
{
// declarations
int a , b , max ;
// saisit les 2 nombres
AfficherTexte ( " Entrez a : " ) ;
SaisirEntier (& a ) ;
AfficherTexte ( " Entrez b : " ) ;
SaisirEntier (& b ) ;
// calcule et affiche le plus grand
max = CalculerMax2 (a , b ) ;
AfficherTexte ( " Le max est " ) ;
AfficherEntier ( max ) ;
return 0;
}
Formulaire_AP_C
page 8/ 12
9
Procédures
Arbre Programmatique
C
void CalcMax2 ( int x , int y , int * m )
{
// ...
* m = ...
}
CalcMax2(12, 3, &max)
Remarque 1 :
sortie.
En C, il n’y a pas de distinction entre les paramètres d’entrée/sortie et les paramètres de
Remarque 2 : En C, les tableaux sont automatiquement passés en entrée/sortie. Il ne faut donc pas utiliser
le "*" et le "&" pour passer un tableau en paramètre (voir l’exemple 2).
Exemple 1 : max de 2 entiers
# include " ulco_algo . h "
void CalculerMax2 ( int x , int y ,
int * m )
{
if ( x > y )
{
*m = x;
}
else
{
*m = y;
}
}
int main ()
{
int a , b , max ;
// ...
CalculerMax2 (a , b , & max ) ;
// ...
return 0;
}
Formulaire_AP_C
page 9/ 12
Exemple 2 : multiplier un tableau par un entier
# include " ulco_algo . h "
// attention : pas de "*" pour passer
// un tableau en entree / sortie
void Multip lierTabl eau ( int k ,
int V [5])
{
int i ;
for ( i =0; i <=4; i = i +1)
{
V[i] = V[i] * k;
}
}
int main ()
{
int i ;
int T [5];
// remplit le tableau : 0 , 1 , ... 4
for ( i =0; i <=4; i = i +1)
{
T[i] = i;
}
// multiplie les elements du
// tableau par 3
// attention : pas de "&" pour
// un tableau
Multi plierTab leau (3 , T ) ;
// affiche le tableau multiplie
for ( i =0; i <=4; i = i +1)
{
AfficherEntier ( T [ i ]) ;
Af fi ch erT ab ul ati on () ;
}
return 0;
}
Formulaire_AP_C
page 10/ 12
10
Enregistrements
Arbre Programmatique
Complexe : type enregistrement
partie_reelle : réel
partie_imaginaire : réel
C
typedef struct
{
float partie_reelle ;
float par tie_imag inaire ;
}
Complexe ;
c1 : Complexe
Complexe c1 ;
c1.partie_reelle
c1 . partie_reelle
Exemple : nombre complexe
# include " ulco_algo . h "
// declare un enregistrement
typedef struct
{
float partie_reelle ;
float pa rtie_ima ginaire ;
}
Complexe ;
// dans cette procedure ,
// l ’ enregistrement est passe
// en entree / sortie
void I n it i a li s er C o mp l ex e ( Complexe * c )
{
(* c ) . partie_reelle = 0;
(* c ) . parti e_imagin aire = 0;
}
int main ()
{
Complexe c1 ;
// enregistrement en entree / sortie
I ni t i al i se r C om p le x e (& c1 ) ;
// ...
return 0;
}
Formulaire_AP_C
page 11/ 12
A
Le fichier ulco_algo.h
# include < stdio .h >
# include < math .h >
void AfficherTexte ( char t [])
{
printf ( " % s " , t ) ;
}
void AfficherEntier ( int e )
{
printf ( " % d " , e ) ;
}
void AfficherReel ( float r )
{
printf ( " % f " , r ) ;
}
void Affich erCaract ere ( char c )
{
printf ( " % c " , c ) ;
}
void AfficherSaut ()
{
printf ( " \ n " ) ;
}
void A ffi ch er Tab ul at ion ()
{
printf ( " \ t " ) ;
}
void SaisirReel ( float * r )
{
scanf ( " % f " , r ) ;
}
void SaisirEntier ( int * e )
{
scanf ( " % d " , e ) ;
}
void SaisirCaractere ( char * c )
{
scanf ( " % c " , c ) ;
}
void SaisirTexte ( char t [])
{
scanf ( " % s " , t ) ;
}
Formulaire_AP_C
page 12/ 12
Téléchargement