Developpement Amateur de SpixSh@dow |
|
| [Cours 02] Structures de controle | |
| | Auteur | Message |
---|
Sekoda Admin
Nombre de messages : 1631 Date d'inscription : 04/01/2007
| Sujet: [Cours 02] Structures de controle Dim 18 Fév - 17:52 | |
| Bienvenue au second cours de C Nous allons commencer a aborder les structures de controle qui vous permettront de commencer a developper des programmes efficaces . C'est quoi une structure de controle Bonne question C'est pourtant une chose que vous connaissez bien . En effet, il s'agit de toutes les syntaxes qui, par rapport a une condition donnee, va influer sur le deroulement du programme. Il y a par exemple : - Code:
-
if (condition) execution; ou alors - Code:
-
while (condition) execution; Et ainsi de suite .
Dernière édition par le Dim 18 Fév - 20:10, édité 1 fois | |
| | | Sekoda Admin
Nombre de messages : 1631 Date d'inscription : 04/01/2007
| Sujet: Re: [Cours 02] Structures de controle Dim 18 Fév - 18:17 | |
| If... ElseVoici la structure la plus connue de tous : la condition "Si". Le code exacte est le suivant : - Code:
-
if (condition) { instruction; } else if (condition) { instruction; } else { instruction; } :arrow:C'est quoi ce charabia Pour mieux comprendre, on va decouper tout ca . A savoir, apres les mots-cles "if" ou "else if", il y a la "(condition)". Ce qui signifie, que l'on va executer le bout de code qui suit entre "{ }", uniquement si la condition est respectee. Autrement, on passe a la condition suivante sans executer le code. Si aucune condition n'est respectee, on saute tout symplement l'ensemble des "if". Apres, si jamais la condition est respectee, le programme execute toutes les instructions qui seront entre "{ }". L'instruction "else", permet d'executer des instructions seulement si toutes les conditions precedentes, ne sont pas respectees. Cependant, elle n'est pas obligatoire. J'entends par la que si jamais vous ne voulez executer des instructions seulement dans un cas precis, et sans aucune autre action, vous n'etes pas oblige de la mettre. Exemple : - Code:
-
if (joueur.vie == 0) { Ecran de GAME OVER; } else { Continuer le jeu; } Dans ce code, on demande de passer a l'ecran GAME OVER, dans le cas ou le joueur n'a plus de vie. Cependant, si vous avez au prealable, bien structure votre code, il apparaitra evident que la suite du code contient des donnees relatives a la suite du jeu. Ainsi, - Code:
-
if (joueur.vie == 0) { Ecran de GAME OVER; } ce code la suffit amplement. Bon, ce n'est pas le meilleur exemple, mais vous comprendrez tres rapidement ses subtilites . En cas de doute, laisser "else". On ne peut utiliser la commande "else", sans avoir au prealable appele la syntaxe "if". Autrement, il ne saura pas a quoi se comparer pour pouvoir realiser ses actions. Concernant le "else if", il permet d'attribuer une autre instruction par rapport a une nouvelle condition. Exemple tout simple : - Code:
-
if (bouton.A appuye) { Joueur tire; } else if (bouton.B appuye) { Joueur saute; } else if ... ... ... ... Voici un exemple de code ou le "else" est inutile. En effet, si vous faites une condition pour chaque touche possible, le "else" ne sert a rien vu qu'il y aura forcement une touche appuye . Cependant, je vous deconeille d'utiliser cette methode pour realiser les actions du joueur, il y a une methode beaucoup plus simple . Certains me diront surement qu'il y a une autre facon de procerder pour realiser une instruction en "if... else", et ils ont tout a fait raison . On appelle cette methode, la methode ternaire. On passe donc de - Code:
-
if (condition) { instruction; } else { instruction; } a - Code:
-
(condition) ? instruction si vrai : instruction si faux; Cependant, si on veut utiliser un certain nombre de "else if", il faudra faire des "if" imbrique, ce qui devient tres tres vite illisible ! A utiliser avec moderation . | |
| | | Sekoda Admin
Nombre de messages : 1631 Date d'inscription : 04/01/2007
| Sujet: Re: [Cours 02] Structures de controle Dim 18 Fév - 18:34 | |
| While - Code:
-
while (condition) { instruction; } Les fameuses boucles ! Il faut entendre par la, que tant que la condition est vrai, les instructions contenues dans la boucl s'executertont. Ainsi : - Code:
-
while (bouton.A est appuye) { personnage tire avec sa mitraillette; } il faut en tirer que tant que l'on appuie sur le bouton A, notre petit personnage va envoyer une rafale de balle . Attention au condition infinie En prennant pour exemple un extrait du code de la PAlib : - Code:
-
while (1) { PA_WaitForVBL(); } Il apparait que "Tant que 1 existe, on realise les instructions ci-dessous." Ainsi, jusqu'a la mort, la boucle executera ses instructions (en fait, ce n'est pas exactement vrai, car adviendra le jour ou la machine n'aura plus d'energie et sa resoudera le probleme ). C'est ce qui se passe pour le cas des jeux consoles. Le jeu ne peut-etre quitte autrement que par coupure de la console. Autrement, il repetera indefinement ce qu'il doit executer. Un code plus embetant : - Code:
-
int compte_a_rebour() { int i;
i = 0; while (i < 100) { Afficher la valeur de "i"; } return (0); Quel est le probleme ici ? On declare donc la variable "i" de type nombre entier. On l'initialise ensuite a la valeur 0. Puis on dit que tant que "i" est inferieur a 100, on affiche sa valeur. Cependant, "i" restera tout le temps a 0, donc non seulement on verra un beau 0 s'afficher a l'ecran, mais en plus, le programme restera indefiniment dans cet etat. Il fallait pour eviter cela, rajouter : - Code:
-
int compte_a_rebour() { int i;
i = 0; while (i < 100) { Afficher la valeur de "i"; i++; } return (0); qui ajoute 1a la valeur de "i". Ainsi, apres 100 boucles, on sort de la boucle car "i" ne sera plus inferieur a 100 . C'est l'une des erreurs les plus frequentes avec l'utilisation des boucles. Je vous conseille donc, avant toute chose, de mettre l'instruction qui permet de sortir de la boucle. Ici, j'aurais donc du commencer par ecrire : - Code:
-
while (i < 100) { i++; } avant d'ecrire les differentes instructions .
Dernière édition par le Dim 18 Fév - 18:41, édité 1 fois | |
| | | Sekoda Admin
Nombre de messages : 1631 Date d'inscription : 04/01/2007
| Sujet: Re: [Cours 02] Structures de controle Dim 18 Fév - 18:40 | |
| Break Mais si on veut sortir de la boucle sans verifier l'etat de condition On utilise donc la commande break, qui permet de sortir d'une boucle quelque soit l'etat de la condition (vraie ou fausse). Ainsi, avec l'exemple de tout a l'heure, on a donc : - Code:
-
int tirer() { int nbr_balle;
nbr_balle = 500; while (bouton.A appuye) { personnage tire; nbr_balle--; if (nbr_balle == 0) { break; } } return (0); } Dans cet exemple, le programme fait tirer le personnage uniquement dans le cas ou il reste de balles dans la mitraillette, et seulement pendant que le joueur appuie sur A . Autrement, meme si le joueur appuie sur A, s'il n'y a plus de balle, ben il ne peut plus tirer ! Logique, non ? Cependant, ce n'est pas la meilleur solution ^^'. Vous le verrez juste apres .
Dernière édition par le Dim 18 Fév - 18:55, édité 2 fois | |
| | | Sekoda Admin
Nombre de messages : 1631 Date d'inscription : 04/01/2007
| Sujet: Re: [Cours 02] Structures de controle Dim 18 Fév - 18:55 | |
| Continue Mais si on veut rester dans la boucle sans executer une partie du code A savoir, la commande "continue" est tres peu utilisee, car avec des "if", on arrive a s'en sortir. Cependant, il arrive quelques fois, ou cette commande est tres utile. Exemple : - Code:
-
int tirer() { int nbr_balle; int free_shoot;
nbr_balle = 500; free_shoot = 30; while (bouton.A appuyer && nbr_balle > 0) { personnage tire; if (free_shoot > 0) { free_shoot--; continue; } nbr_balle--; } return (0); } L'exemple que je me suis imagine est le suivant : on commence le jeu avec 500 balles. Or tout a coup, on trouve un petit item qui permet de tirer 30 fois gratuitement, sans toucher au reservoir de balle (avec le personnage qui clignote et toussa ). Ainsi, dans la boucle, on a mentionne notre desir de recommencer la boucle sans toucher aux balles, tant qu'il nous reste du free_shoot. Cependant, ici comme pour le break, ce n'est pas la meilleur solution ^^'. Mais au moins vous connaissez l'existence de ces commandes et leur utilisation . | |
| | | Sekoda Admin
Nombre de messages : 1631 Date d'inscription : 04/01/2007
| Sujet: Re: [Cours 02] Structures de controle Dim 18 Fév - 19:09 | |
| ForCe mot-cle, est comme son nom l'indique, tres fort . Bref, il est tres utile et je l'emploi tres souvent . Exemple : - Code:
-
i = 0; while (i < 100) { Afficher la valeur de "i"; i++; } Vous vous rappelez de cet exemple ? Il y a l'initialisation, la boucle et le moyen de sortir de la boucle. Comme je le disais, on oublie souvent de mettre l'instruction qui permet de sortir de la boucle apres X repetition. Pour pallier ce probleme "d'omission", il existe la commande "for" . Explication : - Code:
-
initialisation while (condition) { intstruction; sortie; } -----> for (initialisation; condition; sortie) { instruction; } Voila ! Facile, hein ? . En gros, par rapport a l'exemple, on a donc : - Code:
-
for (i = 0; i < 100; i++) { Afficher la valeur de "i"; } Plus simple et plus voyant Vous n'etes pas oblige d'utiliser les 3 parametres de "for" (sauf la condition quand meme ! ). Cependant, si tel est le cas, le mieux est d'utiliser un "while", c'est plus propre . - Code:
-
i = 0; for ( ; i < 100; ) { Afficher la valeur de "i"; i++; } Ce code marche egalement, mais "while" devient plus simple dans cette situation. Il faut toujours que les 3 parametres du "for", apparaissent, meme si ils sont vides. Chaque parametre est separe par un ';'. Ainsi, on peut aussi avoir : - Code:
-
int i; int j;
for (i = 0, j = 100; i < j; i++, j++) { Afficher le resultat de "j - i"; } On separe plusieurs initialisation ou sortie par une virgule ','. Pour le reste, "for' reste en tout point similaire a "while" (possibilite d'utiliser "break" et "continue" avec "for").
Dernière édition par le Dim 18 Fév - 19:27, édité 1 fois | |
| | | Sekoda Admin
Nombre de messages : 1631 Date d'inscription : 04/01/2007
| Sujet: Re: [Cours 02] Structures de controle Dim 18 Fév - 19:20 | |
| Do... While Mais que fait-on si on veut executer le code au moins une fois meme, si la condition de while est fausse Dans l'immediat, il faudrait faire : - Code:
-
instruction; while (condition) { la meme instruction; sortie; } Cependant, c'est idiot et c'est lourd a lire. Le plus simple est donc d'utiliser la commande "do... while" qui se presente de cette facon : - Code:
-
do { instruction; sortie; } while (condition); Ainsi, il execute au moins une fois l'instruction avec de checker la condition . Apres, pour le reste, c'est exactement pareil (break, continue, etc...). | |
| | | Sekoda Admin
Nombre de messages : 1631 Date d'inscription : 04/01/2007
| Sujet: Re: [Cours 02] Structures de controle Dim 18 Fév - 19:44 | |
| Operation Comment faire pour poser des conditions Generalement, on realise des comparaisons de valeurs pour realiser une condition. Est-ce que x est plus grand que y ? Est-ce que tel resultat est vrai ou faux ? ... Pour ce faire, il faut utiliser des operateurs. Voici la liste : - Code:
-
x = x + y : on ajoute a x, la valeur de y. x += y : idem, forme simplifiee. z = x + y : on prends le resultat de l'addition sans modifier x et y.
idem avec '-' soustraction, '*' multiplication, '/' division.
x > y : est-ce que la valeur de x est plus grande de y ? x < y : est-ce que y est plus grand que x ? x == y : est-ce que x est egale a y ? x >= y : est-ce que x est superieur ou egale a y ? x <= y : est-ce que x est inferieur ou egale a y ? ( ) : Priorite a l'interieur des parentheses. condition || condition : la condition est respectee seulement si l'une des deux conditions est respectee. condition && condition : la condition est respectee UNIQUEMENT si les DEUX conditions sont respectees. Concernant les deux dernieres valeurs, si vous etes observateurs, vous avez pu vous rendre compte que je l'ai deja utilise : - Code:
-
while (bouton.A appuyer && nbr_balle > 0) Cela signifie que pour entrer dans la boucle "while", il faut que le bouton A soit appuye et qu'il nous reste suffisament de balle . Apres, on peut combiner des instructions : - Code:
-
while (bouton.A appuye && (nbr_balle > 0 || free_shoot > 0)) A savoir, "&&" ('et') est prioritaire a "||" ('ou'). Ce qu'il faut donc comprendre du code ci-dessus, est donc : "Tant que le bouton A est appuye ET qu'il me reste SOIT des balles SOIT du free_shoot, alors je peux executer les instructions ci-dessous". Cela viendra avec un peu de pratique et permet d'eviter plusieurs "if" consecutives pour realiser les instructions lies a plusieurs conditions .
Dernière édition par le Sam 24 Mar - 21:10, édité 1 fois | |
| | | Sekoda Admin
Nombre de messages : 1631 Date d'inscription : 04/01/2007
| Sujet: Re: [Cours 02] Structures de controle Dim 18 Fév - 19:57 | |
| Utilisation-Tout d'abord, pour faciliter la lecture, on mettra un espace autour de chaque operateur : -Pas de : x>y -Mais : x > y -Faire attention entre "x == y" et "x = y". Dans le premier, on demande si x a la meme valeur que y. Mais on ne modifie en aucun cas la valeur de x ou de y. Dans le deuxieme cas, on donne la valeur de y vers x, et non dans l'autre sens. On va du membre droite, vers le membre gauche . - Sommes-nous obliges d'utiliser les accolades Oui et non. Si jamais vous n'avez qu'une seule instruction, vous pouvez vous en passer. - Code:
-
if (condition) { instruction; } devient donc : - Code:
-
if (condition) instruction; Cependant, a partir de deux instructions, il ne devient plus capable de faire la distinction entre une instruction conditionnelle ou non. Par default, il executera l'instruction qui sera consideree hors-condition. Il faudra donc penser a mettre les accolades . -Concernant les "&&" et "||", le programme lit de gauche a droit : - Code:
-
if (condition1 && condition2) instruction; Si la condition1 n'est pas respectee, la condition2 ne sera pas verifiee. Vous me direz surement pourquoi je vous dis ca ? Tout simplement parce que dans certains cas de figure, vous aurez besoin de mettre une prioritee dans l'ordre de verification des conditions, notamment si dans vos conditions, vous mettes non pas des variables, mais des fonctions . Mettez bien deux fois le caracteres '&' et '|', car l'operateur '&' et '|' a simple caractere existe. Mais je reviendrais bien plus tard dessus, si je vois leur utilite dans le developpement NDS. -On me dira aussi que je ne vous ai pas tout presente, notamment la fonction "Switch". C'est tout a fait vrai . Je n'aime pas trop l'utilisation du switch qui break a tout va. Il y a une methode beaucoup plus simple que je vous apprendrais apres les pointeurs . | |
| | | Sekoda Admin
Nombre de messages : 1631 Date d'inscription : 04/01/2007
| Sujet: Re: [Cours 02] Structures de controle Dim 18 Fév - 20:01 | |
| ConclusionVoila, vous etes pares a manipuler vos programmes comme bon vous semble (si j'ai ete suffisament clair ^^'). N'hesitez surtout pas, a faire part de vos incomprehension. J'essairai de rendre plus clair que possible mon cours afin qu'il soit plus explicite . Si jamais j'ai oublie d'aborder certains points (ce qui est fort possible), n'hesitez pas a m'en faire part, j'y remedierai le plus vite possible . Bon courage avec les exos Prochain cours : les pointeurs et les tableaux . | |
| | | Contenu sponsorisé
| Sujet: Re: [Cours 02] Structures de controle | |
| |
| | | | [Cours 02] Structures de controle | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |
|