Index des articles > Programmation > Tutorial TIGCC - Chapitre 2 - Boucles - Commandes élémentair

Tutorial TIGCC - Chapitre 2 - Boucles - Commandes élémentair

Article posté par limmt

Chapitre 2 - Boucles - Commandes élémentaires

A - Boucle if

I) Utilisation simple

Une boucle if permet de tester une condition dans un programme. Une condition est une expression renvoyant TRUE ou FALSE.
Avec TIGCC, FALSE correspond à la valeur 0, ou NULL et TRUE correspond à toute autre valeur.
Vous pouvez donc, contrairement au TI-basic tester directement une variable.

Syntaxe générale:

if(condition)
action;


L'action est soit une commande se terminant par un ";", soit un bloc de commandes avec "{" et "}".
A partir de maintenant nous appelerons bloc de commandes quelque chose qui est soit un bloc soit une seule commande.

! Ne pas mettre de ";" après un bloc de commandes.

La condition peut être un test, une assignation, une variable.
Toutes les conditions ci dessous sont valides:
a==valeur //Vrai si la variable a vaut valeur
a=valeur //Assigne valeur à a dans un premier temps puis teste cette valeur et renvoie a. Si a vaut zéro le résultat sera FALSE sinon il sera TRUE
a //Vrai si a vaut TRUE, donc si a est différent de 0

Pour tester une condition en C il existe différents opérateurs, je vais vous les lister:
a==bTRUE si a et b sont égaux, sinon FALSE
a!=bFALSE si a et b sont égaux, sinon TRUE
aTRUE si a est strictement plus petit que b, sinon FALSE
a<=bTRUE si a est inférieur ou égal à b, sinon FALSE
a>bTRUE si a est strictement plus grand que b, sinon FALSE
a>=bTRUE si a est supérieur ou égal à b, sinon FALSE
! Bien mettre les deux signes égal pour un test d'égalité sinon il y a affectation d'une variable dans l'autre.
Exemple de programme utilisant une boucle if:

#include

// Main Function
void _main(void)
{
short x=0; //Crée et initialise x
x=ngetchx(); //Attend l'appui sur une touche et enregistre le code dans x
if(x==13) //Teste si x vaut 13 (touche ENTER), le bloc suivant n'est exécuté que si la condition est vraie
{
clrscr(); //Efface l'écran
printf("Vous venez d'appuyer sur ENTER"); //Affiche un message
ngetchx(); //Attend l'appui sur une touche
}
}

II) L'instruction else

else suivi d'un bloc de commandes permet d'executer ce bloc dans le cas où la condition de if n'est pas remplie.

Syntaxe générale:

if(condition)
action;

else
action2;


Exemple de boucle if...else :

if(x==13) //Teste si x vaut 13 (touche ENTER)
{
clrscr(); //Efface l'écran
printf("Vous venez d'appuyer sur ENTER"); //Affiche un message
ngetchx(); //Attend l'appui sur une touche
}
else //Si pas d'appui sur ENTER
{
clrscr(); //Efface l'écran
printf("Vous avez appuyé sur une autre touche"); //Affiche un autre message
ngetchx();//Attend l'appui sur une touche
}

III) L'instruction else if

Cette instruction permet de rajouter des conditions à tester dans une boucle if.

Syntaxe générale:

if(condition)
action;

else if(condition2)
action2;

else
action3;


else if permet de tester une condition et d'executer une action si la première condition de if est fausse. On peut imbriquer plusieurs else if dans une boucle if.
Exemple d'une boucle avec des else if :

if(x==13) //Touche ENTER
{
printf("ENTER"); //Message ENTER
}
else if(x==264) //Touche ESC
{
printf("ESC"); //Message ESC
}
else if(x<=255) //Touche de caractère (sauf ENTER)
{
printf("Touche représentant un caractère"); //Message touche caractère
}
else //Autre touche
{
printf("Autre touche"); //Message autre touche
}

IV) Conditions logiques

En TI-basic, vous pouvez utiliser les opérateurs AND, OR, XOR et NOT pour faire des conditions logiques ; ceci est aussi possible en C.
CEquivalent TI-basicExplications
a && ba AND bvrai si a et b sont vrais
a || ba OR b vrai si a ou b sont vrais (au sens large)
a ^ ba XOR b vrai si a ou b est vrai mais pas les deux ensemble
!(a)NOT a vrai si a est faux
L'opérateur NON ! est prioritaire sur les autres opérateurs, ensuite vient le ET && ensuite vient le OU || et le moins prioritaire est le XOR ^.
Quand vous faites des tests conditionnels complexes, il est cependant recommandé d'utiliser les parenthèses car c'est plus facile à relire et on risque moins de faire des erreurs.

V) Imbriquation des boucles if

Il est parfaitement possible d'imbriquer les boucles if et d'autres.
Veillez cependant à respecter l'indentation sinon vous ne vous y retrouverez plus.
Exemple:

if(x==13)
{
if(y==13)
printf("2 fois ENTER");
else if(y==264)
{
printf("ENTER+ESC");
}
}
else
{
if(x==264 && y==264)
printf("2 fois ESC");
if(y<255)
{
printf("2e appui est un caractère");
}
}

B - Commande goto et labels

goto est une commande permettant de faire un saut inconditionnel dans un programme.

Syntaxe générale:

nom_label:
[...]
goto nom_label


goto permet de sauter au label nom_label.
Pour déclarer un label, on met le nom du label suivi d'un symbole ":".
Un nom de label ne doit pas comporter d'espaces.

! Le label peut se situer avant ou après le goto, être ou non dans la même boucle, mais doit ABSOLUMENT appartenir à la même fonction.
On a tendance à utiliser goto de moins en moins car il est plus efficace d'utiliser d'autres boucles comme if ou while.
En effet:

label:
[...]
if(condition)
goto label;

équivaut exactement à:

do
[...]
while(condition);

La deuxième solution étant plus rapide.
Pour la boucle do...while, regardez plus bas.


C - Commande return

return permet de rendre la main à la fonction appelante.
Quand vous apprendrez à déclarer des fonctions, vous pourrez retourner à la fonction qui a appelé une fonction avec return.

! Lorsque vous arrivez à la fin d'une fonction, la main est automatiquement rendue, sans return.

Syntaxe générale:

return [valeur];

return permet également de renvoyer une valeur à la fonction appelante.

Quand vous êtes dans _main, vous pouvez quitter le programme et rendre la main au TIOS.
Il n'est pas possible cependant de retourner une valeur au TIOS.

Exemple:

if(x==264) //Si appui sur ESC
{
return; //Quitter le programme
}

D - Boucle while

while permet d'exécuter tant qu'une condition est vraie.

Syntaxe générale:

while(condition)
action;


Si la condition est fausse au démarrage de la boucle, action ne sera jamais exécutée.

! En C, il n'existe pas de boucle similaire à Loop...EndLoop en TI-basic.
Pour créer une boucle infinie, la méthode la plus simple est de faire une boucle while avec une condition toujours vraie:

while(TRUE)
action;


Exemple d'utilisation de while:

//Initialisation
short x=0;
clrscr();
while(x!=264) //Tant que pas d'appui sur ESC
{
printf("Ce message s'affichera tant que vous n'appuierez pas sur ESC."); //Message
x=ngetchx(); //Attendre l'appui sur une touche
}

E - Boucle do...while

Cette boucle est très proche de la boucle while mais diffère en un point: le bloc de commandes est exécuté au moins une fois quoi qu'il arrive, la condition est testée après son exécution.

Syntaxe générale:

do
action;
while(condition);


! Contrairement aux autres boucles il faut mettre un ";" à après la boucle.

F - Boucle for

La boucle for est une boucle qui permet d'effectuer un bloc d'instuctions tout en incrémentant (ou décrémentatn ou autre) une variable à chaque boucle.

Syntaxe génrale (! différente du TI-basic):

for(initialisation ; condition ; action)
bloc_actions;


La boucle for exécute initialisation au début et ensuite à chaque passage exécute action, teste condition, si elle vraie, exécute bloc_actions et reboucle.
action est dans la très grande majorité des cas une incrémentation/décrémentation et initialisation, l'initialisation d'une varaible à incrémenter.
for peut être utilisé pour parcourir un tableau de variables ou bien pour compter jusqu'à un nombre.
Exemple:

short vf=0;
for(vf=0 ; vf<10 ; vf++)
{
printf("Passage: %d\n",vf);
}

Ce programme compte de 0 à 9 et affiche le numéro du passage à chaque fois.
A noter: utilisation spéciale de printf, qui nous permet d'afficher non seulement une chaîne de caractères à l'écran mais également d'inclure un nombre dans cette chaîne.
La partie "%d" veut dire qu'à cet endroit il faut inclure un argument entier (short, int ou long).
Nous verrons cette fonctionalité plus en détail dans le chapitre consacré aux chaînes de caractères.
Le \n correspond à un retour à la ligne.


Limmt Ribeman © 2004

>> Vos commentaires [0]

Pas de commentaires

Poster un commentaire


Seuls les membres peuvent poster des commentaires