mercredi 14 décembre 2011

Les conditions en Langage C

1)La condition "if... else":

Les conditions servent à "tester" des variables. On peut par exemple dire "Si la variable machin est égale à 50, fais ceci"... Mais ce serait dommage de ne pouvoir tester que l'égalité ! Il faudrait aussi pouvoir tester si la variable est inférieure à 50, inférieure ou égale à 50, supérieure, supérieure ou égale...

Ne vous inquiétez pas, le C a tout prévu.

(mais vous n'en doutiez pas hein)

Pour étudier les conditions "if... else", nous allons suivre le plan suivant :

  1. Quelques symboles à connaître avant de commencer
  2. Le test if
  3. Le test else
  4. Le test "else if"
  5. Plusieurs conditions à la fois
  6. Quelques erreurs courantes à éviter
Avant de voir comment on écrit une condition de type "if... else" en C, il faut donc que vous connaissiez 2-3 symboles de base. Ces symboles sont indispensables pour réaliser des conditions.

Quelques symboles à connaître

Voici un petit tableau de symboles du langage C à connaître par coeur.

SymboleSignification
==         Est égal à
>         Est supérieur à
<         Est inférieur à
>=        Est supérieur ou égal à
<=        Est inférieur ou égal à
!=        Est différent de


Faites très attention, il y a bien 2 symboles "=" pour tester l'égalité. Une erreur courante que font les débutants est de ne mettre qu'un symbole =, ce qui n'a pas la même signification en C. Je vous en reparlerai un peu plus bas.

Un if simple

Attaquons maintenant sans plus tarder.
Nous allons faire un test simple, qui va dire à l'ordinateur :

Citation : Test simple

SI la variable vaut ça
ALORS fais ceci

En anglais, le mot "si" se traduit par "if". C'est celui qu'on utilise en langage C pour introduire une condition.

Ecrivez donc un if. Ouvrez ensuite des parenthèses : à l'intérieur de ces parenthèses vous devrez écrire votre condition.

Ensuite, ouvrez une accolade
{ et fermez-la un peu plus loin }. Tout ce qui se trouve à l'intérieur des accolades sera exécuté uniquement si la condition est vérifiée.

Cela nous donne donc à écrire :


Code : C 

1
2
3
4
if (/* Votre condition */)
{
  // Instructions à exécuter si la condition est vraie
}

A la place de mon commentaire "Votre condition", on va écrire une condition pour tester une variable.
Par exemple, on pourrait tester une variable "age" qui contient votre âge. Tenez pour s'entraîner, on va tester si vous êtes majeur, c'est-à-dire si votre âge est supérieur ou égal à 18 :


Code : C
 
1
2
3
4
if (age >= 18)
{
  printf ("Vous etes majeur !");
}

Le symbole >= signifie "Supérieur ou égal", comme on l'a vu dans le tableau tout à l'heure.

S'il n'y a qu'une instruction entre les accolades, alors celles-ci deviennent facultatives. Vous pouvez donc écrire :

Code : C 

1
2
if (age >= 18)
  printf ("Vous etes majeur !");

Tester ce code

Si vous voulez tester les codes précédents pour voir comment le if fonctionne, il faudra placer le if à l'intérieur d'une fonction main et ne pas oublier de déclarer une variable age à laquelle on donnera la valeur de notre choix.
Ca peut paraître évident pour certains, mais apparemment ça ne l'était pas pour tout le monde aussi ai-je rajouté cette explication.
Voici un code complet
que vous pouvez tester :

Code : C 



1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    int age = 20;
  
    if (age >= 18)
    {
      printf ("Vous etes majeur !\n");
    }
     
    return 0;
}

Ici, la variable age vaut 20, donc le "Vous êtes majeur !" s'affichera.
Essayez de changer la valeur initiale de la variable pour voir. Mettez par exemple 15 : la condition sera fausse, et donc "Vous êtes majeur !" ne s'affichera pas cette fois.
Servez-vous de ce code de base pour tester les prochains exemples du chapitre.

Une question de propreté

La façon dont vous ouvrez les accolades n'est pas importante, votre programme marchera aussi bien si vous écrivez tout sur une même ligne. Par exemple :

Code : C 



1
if (age >= 18) {  printf ("Vous etes majeur !"); }

Pourtant, même si c'est possible d'écrire comme ça, c'est ultra déconseillé (notez que quand j'écris plus gros, en gras rouge souligné, c'est généralement parce que c'est vraiment important  )
En effet, tout écrire sur une même ligne rend votre code difficilement lisible. Si vous ne prenez pas dès maintenant l'habitude d'aérer votre code, plus tard quand vous écrirez de plus gros programmes vous ne vous y retrouverez plus !

Essayez donc de présenter votre code source de la même façon que moi : une accolade sur une ligne, puis vos instructions (précédées d'une tabulation pour les "décaler vers la droite"), puis l'accolade de fermeture sur une ligne.


Il existe plusieurs bonnes façons de présenter son code source. Ca ne change rien au fonctionnement du programme final, mais c'est une question de "style informatique" si vous voulez.
Si vous voyez un code de quelqu'un d'autre présenté un peu différemment, c'est qu'il code avec un style différent. Le principal, c'est que son code reste aéré et lisible.

Le "else" pour dire "sinon"

Maintenant que nous savons faire un test simple, allons un peu plus loin : si le test n'a pas marché (il est faux), on va dire à l'ordinateur d'exécuter d'autres instructions.

En français, nous allons donc écrire quelque chose qui ressemble à cela :


Citation : Test avec sinon

SI la variable vaut ça
ALORS fais ceci
SINON fais cela

Il suffit de rajouter le mot
else après l'accolade fermante du if.

Petit exemple :

Code : C
 
1
2
3
4
5
6
7
8
if (age >= 18) // Si l'âge est supérieur ou égal à 18
{
  printf ("Vous etes majeur !");
}
else // Sinon...
{
  printf ("Ah c'est bete, vous etes mineur !");
}

Les choses sont assez simples : si la variable age est supérieure ou égale à 18, on affiche le message "Vous êtes majeur !", sinon on affiche "Vous êtes mineur".

Le "else if" pour dire "sinon si"

On a vu comment faire un "si" et un "sinon". Il est possible aussi de faire un "sinon si" pour faire un autre test si le premier test n'a pas marché. Le "sinon si" se met entre le if et le else.

On dit dans ce cas à l'ordinateur :


Citation : Avec un sinon si

SI la variable vaut ça ALORS fais ceci
SINON SI la variable vaut ça ALORS fais ça
SINON fais cela

Traduction en langage C :

Code : C 

1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
if (age >= 18) // Si l'âge est supérieur ou égal à 18
{
  printf ("Vous etes majeur !");
}
else if ( age > 4 ) // Sinon, si l'âge est au moins supérieur à 4
{
  printf ("Bon t'es pas trop jeune quand meme...");
}
else // Sinon...
{
  printf ("Aga gaa aga gaaa gaaa");  
}

L'ordinateur fait les tests dans l'ordre :
  1. D'abord il teste le premier if : si la condition est vraie, alors il exécute ce qui se trouve entre les premières accolades.
  2. Sinon, il va au "sinon si" et fait à nouveau un test : si ce test est vrai, alors il exécute les instructions correspondantes entre accolades.
  3. Enfin, si aucun des tests précédents n'a marché, il exécute les instructions du "sinon".

Le "else" et le "else if" ne sont pas obligatoires. Pour faire une condition, il faut juste au moins un "if" (logique me direz-vous, sinon il n'y a pas de condition !)
Notez qu'on peut mettre autant de "else if" que l'on veut. On peut donc écrire :

Citation : Plusieurs else if

SI la variable vaut ça
ALORS fais ceci
SINON SI la variable vaut ça ALORS fais ça
SINON SI la variable vaut ça ALORS fais ça
SINON SI la variable vaut ça ALORS fais ça
SINON fais cela

Plusieurs conditions à la fois

Il peut aussi être utile de faire plusieurs tests à la fois dans votre if. Par exemple, vous voudriez tester si l'âge est supérieur à 18 ET si l'âge est inférieur à 25.
Pour faire cela, il va falloir utiliser de nouveaux symboles :


&& ET
|| OU
! NON

Test ET

Si on veut faire le test que j'ai mentionné plus haut, il faudra écrire :

Code : C 

1
if (age > 18 && age < 25)

Les deux symboles "&&" signifient ET. Notre condition se dirait en français : "Si l'âge est supérieur à 18 ET si l'âge est inférieur à 25"

Test OU

Pour faire un OU, on utilise les 2 signes ||. Je dois avouer que ce signe n'est pas facilement accessible sur nos claviers. Pour le taper sur un clavier AZERTY français, il faudra faire Alt Gr + 6. Sur un clavier belge, il faudra faire Alt Gr + &.

Imaginons un programme débile qui décide si une personne a le droit d'ouvrir un compte en banque. C'est bien connu, pour ouvrir un compte en banque il vaut mieux ne pas être trop jeune (on va dire arbitrairement qu'il faut avoir au moins 30 ans) ou bien avoir plein d'argent (parce que là même à 10 ans on vous acceptera à bras ouverts
)
Notre test pour savoir si le client a le droit d'ouvrir un compte en banque pourrait être :


Code : C 

1
2
3
4
5
6
7
8
if (age > 30 || argent > 100000)
{
  printf("Bienvenue chez PicsouBanque !");
}
else
{
  printf("Hors de ma vue, miserable !");
}

Ce test n'est valide que si la personne a plus de 30 ans ou si elle possède plus de 100 000 euros.

Test NON

Le dernier symbole qu'il nous reste à tester est le point d'exclamation. En informatique, le point d'exclamation signifie "Non".
Vous devez mettre ce signe avant votre condition pour dire "Si cela n'est pas vrai" :


Code : C 

1
if (!(age < 18))

Cela pourrait se traduire par "Si la personne n'est pas mineure".
Si on avait enlevé le "!" devant, cela aurait signifié l'inverse : "Si la personne est mineure".

Quelques erreurs courantes de débutant

N'oubliez pas les 2 signes ==

Si on veut tester si la personne a tout juste 18 ans, il faudra écrire :

Code : C 

1
2
3
4
if (age == 18)
{
  printf ("Vous venez de devenir majeur !");
}

N'oubliez pas de mettre 2 signes "égal" dans un if, comme ceci : ==
Si vous ne mettez qu'un seul signe =, alors votre variable prendra la valeur 18 (comme on l'a appris dans le chapitre sur les variables). Nous ce qu'on veut faire ici, c'est tester la valeur de la variable, pas la changer ! Faites très attention à cela, beaucoup d'entre vous n'en mettent qu'un quand ils débutent et forcément... leur programme ne marche pas comme ils voudraient.

Le point-virgule de trop

Une autre erreur courante de débutant : vous mettez parfois un point-virgule à la fin de la ligne d'un if. Or, un if est une condition, et on ne met de point-virgule qu'à la fin d'une instruction et non d'une condition.

Le code suivant ne marchera pas comme prévu car il y a un point-virgule à la fin du if :


Code : C 

1
2
3
4
if (age == 18); // Notez le point-virgule ici qui ne devrait PAS être là
{
  printf ("Tu es tout juste majeur");
}
إقرأ المزيد Résuméabuiyad
mardi 13 décembre 2011

Une bête calculatrice en langage C

1)Les calculs de base:

Il faut savoir qu'en plus de n'être qu'une vulgaire calculatrice, votre ordinateur est une calculatrice très basique puisqu'on ne peut faire que des opérations très simples :

  • Addition
  • Soustraction
  • Multiplication
  • Division
  • Modulo (je vous expliquerai ce que c'est si vous ne savez pas)
Si vous voulez faire des opérations plus compliquées (des carrés, des puissances, des logarithmes et autres joyeusetés) il vous faudra les programmer, c'est-à-dire expliquer à l'ordinateur comment le faire.
Fort heureusement, nous verrons plus loin dans ce chapitre qu'il existe une bibliothèque mathématique livrée avec le langage C qui contient plein de fonctions mathématiques toutes prêtes. Vous n'aurez pas à les réécrire donc, à moins que vous soyez maso (ou prof de maths, ça marche aussi)

Voyons donc l'addition pour commencer.

Pour faire une addition, on utilise le signe + (non, sans blague ?).
Vous devez mettre le résultat de votre calcul dans une variable. On va donc par exemple créer une variable "resultat" de type int et faire un calcul :

Code : C 
1
2
3
 
int resultat = 0;

resultat = 5 + 3;

Pas besoin d'être un pro du calcul mental pour deviner que la variable "resultat" contiendra la valeur 8 après exécution .
Bien sûr, rien ne s'affiche à l'écran avec ce code. Si vous voulez voir la valeur de la variable, rajoutez un printf comme vous savez maintenant si bien le faire :


Code : C 

1
printf("5 + 3 =  %d", resultat);

A l'écran, cela donnera :

Code : Console
 

5 + 3 = 8

Voilà pour l'addition.
Pour les autres opérations, c'est pareil, seul le signe utilisé change :

  • Addition : +
  • Soustraction : -
  • Multiplication : *
  • Division : /
  • Modulo : %
Si vous avez déjà utilisé la calculatrice sur votre ordinateur, vous devriez connaître ces signes. Le signe "moins" est en fait le tiret, le signe "multiplié" est une étoile, et le signe "divisé" est le slash (la barre oblique).

Il n'y a pas de difficulté particulière pour ces opérations, à part pour les deux dernières (la division et le modulo). Nous allons donc parler un peu plus en détail de chacune d'elles.


La division

Les divisions fonctionnent normalement sur un ordinateur quand il n'y a pas de reste. Par exemple, 6 / 3 ça fait 2, votre ordinateur vous donnera la réponse juste. Jusque-là pas de souci.

Prenons maintenant une division avec reste comme 5 / 2.

5 / 2, si vous calculez bien, ça fait 2.5

Et pourtant ! Regardez ce que fait ce code :


Code : C 

1
2
3
4
int resultat = 0;
    
resultat = 5 / 2;
printf ("5 / 2 = %d", resultat);

Code : Console
 

5 / 2 = 2

Il y a un gros problème. On a demandé 5 / 2, on s'attend à avoir 2.5, et l'ordinateur nous dit que ça fait 2 !

Il y a anguille sous roche. Nos ordinateurs seraient-ils stupides à ce point ?

En fait, quand il voit les chiffres 5 et 2, votre ordinateur fait une division de nombres entiers. Cela veut dire qu'il tronque le résultat, il ne garde que la partie entière (le 2).

Eh mais je sais ! C'est parce que resultat est un int ! Si ça avait été un double, il aurait pu stocker un nombre décimal à l'intérieur !

Même pas.

Essayez le même code en transformant juste resultat en double, et vous verrez qu'on vous affiche quand même 2.

Si on veut que l'ordinateur affiche le bon résultat, il va falloir transformer les nombres 5 et 2 de l'opération en nombres décimaux, c'est-à-dire écrire 5.0 et 2.0 (ce sont les mêmes nombres, mais pour l'ordinateur ce sont des nombres décimaux, donc il fait une division de nombres décimaux) :


Code : C 

1
2
3
4
double resultat = 0;
    
resultat = 5.0 / 2.0;
printf ("5 / 2 = %f", resultat);

Code : Console 


5 / 2 = 2.500000

Là le nombre est correct. Bon il affiche plein de zéros derrière si ça lui chante, mais le résultat reste quand même correct.

Cette propriété de la division de nombres entiers est super importante. Il faut que vous reteniez que pour un ordinateur :

5 / 2 = 2
10 / 3 = 3
4 / 5 = 0
Si vous voulez avoir un résultat décimal, il faut que les nombres de l'opération soient décimaux :
5.0 / 2.0 = 2.5
10.0 / 3.0 = 3.33333
4.0 / 5.0 = 0.8

En fait, en faisant une division d'entiers comme "5 / 2", votre ordinateur répond à la question "Combien y a-t-il de fois 2 dans le nombre 5 ?". La réponse est 2 fois. De même, combien de fois y a-t-il le nombre 3 dans 10 ? 3 fois".


Mais alors me direz-vous, comment on fait pour récupérer le reste de la division ?

C'est là que super-modulo intervient

Le modulo

Le modulo est une opération mathématique qui permet d'obtenir le reste d'une division. C'est peut-être une opération moins connue que les 4 autres, mais pour votre ordinateur ça reste une opération de base... probablement justement pour combler le problème de la "division d'entiers" qu'on vient de voir.

Le modulo, je vous l'ai dit tout à l'heure, se représente par le signe %.

Voici quelques exemples de modulos :

  • 5 % 2 = 1
  • 14 % 3 = 2
  • 4 % 2 = 0
Le modulo 5 % 2 est le reste de la division 5 / 2, c'est-à-dire 1. L'ordinateur calcule que 5 = 2 * 2 + 1 (c'est ce 1, le reste, que le modulo renvoie)
De même, 14 % 3, le calcul est 14 = 3 * 4 + 2 (modulo renvoie le 2)
Enfin, pour 4 % 2, la division tombe juste, il n'y a pas de reste, donc modulo renvoie 0.

Voilà, je ne peux pas dire grand-chose d'autre de plus au sujet des modulos. Je tenais juste à l'expliquer pour ceux qui ne connaîtraient pas.


En plus j'ai une bonne nouvelle : on a vu toutes les opérations de base. Finis les cours de maths.


Des calculs entre variables

Ce qui serait intéressant, maintenant que vous savez faire les 5 opérations de base, ce serait de s'entraîner à faire des calculs entre plusieurs variables.
En effet, rien ne vous empêche de faire :


Code : C 

1
resultat = nombre1 + nombre2;

Cette ligne fait la somme des variables nombre1 et nombre2, et stocke le résultat dans la variable resultat.

Et c'est là que les choses commencent à devenir très intéressantes.

Tenez, il me vient une idée. Vous avez maintenant déjà le niveau pour réaliser une mini calculatrice. Si si, je vous assure !

Imaginez un programme qui demande 2 nombres à l'utilisateur. Ces deux nombres, vous les stockez dans des variables.

Ensuite, vous faites la somme de ces variables, et vous stockez le résultat dans une variable appelée "resultat".

Vous n'avez plus qu'à afficher le résultat du calcul à l'écran, sous les yeux ébahis de l'utilisateur qui n'aurait jamais été capable de calculer cela de tête aussi vite.


Essayez de coder vous-même ce petit programme, c'est facile et ça vous entraînera.


La réponse est ci-dessous :


Code : C


1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
int main(int argc, char *argv[])
{
  int resultat = 0, nombre1 = 0, nombre2 = 0;
  
  // On demande les nombres 1 et 2 à l'utilisateur :
  
  printf("Entrez le nombre 1 : ");
  scanf("%d", &nombre1);
  printf("Entrez le nombre 2 : ");
  scanf("%d", &nombre2);
  
  // On fait le calcul :
  
  resultat = nombre1 + nombre2;
  
  // Et on affiche l'addition à l'écran :
  
  printf ("%d + %d = %d\n", nombre1, nombre2, resultat);
       
  return 0;
}

Code : Console
 

Entrez le nombre 1 : 30

Entrez le nombre 2 : 25

30 + 25 = 55

Mine de rien, on vient de faire là notre premier programme qui a un intérêt. Notre programme est capable d'additionner 2 nombres et d'afficher le résultat de l'opération.

Vous pouvez essayer avec n'importe quel nombre (du temps que vous ne dépassez pas les limites d'un type int), votre ordinateur effectuera le calcul en un éclair (encore heureux, parce que des opérations comme ça il doit en faire des milliards dans une même seconde
)

Je vous conseille de faire la même chose avec les autres opérations pour vous entraîner (soustraction, multiplication...). En plus, vous ne devriez pas avoir trop de mal vu qu'il y a juste un ou deux signes à changer.

 
Vous pouvez aussi ajouter une troisième variable et faire l'addition de 3 variables à la fois, ça fonctionne sans problème :


 Code : C
1
 
resultat = nombre1 + nombre2 + nombre3;










4)Les raccourcis

Comme promis, nous n'avons pas de nouvelles opérations à voir. Et pour cause ! On les a déjà toutes vues .
C'est avec ces simples opérations de base que vous pouvez tout créer. Il n'y a pas besoin d'autres opérations. Je reconnais que c'est difficile à avaler, se dire qu'un jeu 3D ne fait rien d'autre au final que des additions et des soustractions, pourtant c'est la stricte vérité .

Ceci étant, il existe en C des techniques permettant de raccourcir l'écriture des opérations.

Pourquoi utiliser des raccourcis ? Parce que, souvent, on fait des opérations répétitives. Vous allez voir ce que je veux dire par là tout de suite, avec ce qu'on appelle l'incrémentation.

L'incrémentation

Vous verrez que vous serez souvent amenés à ajouter 1 à une variable. Au fur et à mesure du programme, vous aurez des variables qui augmentent de 1 en 1.

Imaginons que votre variable s'appelle "nombre" (nom très original n'est-ce pas
). Sauriez-vous comment faire pour ajouter 1 à cette variable, sans savoir quel est le nombre qu'elle contient ?

Voici comment on doit faire :


Code : C
 
1
nombre = nombre + 1;

Que se passe-t-il ici ? On fait le calcul nombre + 1, et on range ce résultat dans la variable... nombre ! Du coup, si notre variable nombre valait 4, elle vaut maintenant 5. Si elle valait 8, elle vaut maintenant 9 etc...

Cette opération est justement répétitive. Les informaticiens étant des gens particulièrement fainéants, ils n'avaient guère envie de taper 2 fois le même nom de variable (ben oui quoi, c'est fatigant !
).
Ils ont donc inventé un raccourci pour cette opération qu'on appelle l'incrémentation. L'instruction ci-dessous fait exactement la même chose que le code qu'on vient de voir :


Code : C 

1
nombre++;

Cette ligne, bien plus courte que celle de tout à l'heure, signifie "Ajoute 1 à la variable nombre". Il suffit d'écrire le nom de la variable à incrémenter, de mettre 2 signes +, et de ne pas oublier le point-virgule bien entendu.

Mine de rien, cela nous sera bien pratique par la suite car, comme je vous l'ai dit, on sera souvent amenés à faire des incrémentations (c'est-à-dire ajouter 1 à une variable).


Si vous êtes perspicaces, vous avez d'ailleurs remarqué que ce signe ++ se trouve dans le nom du langage "C++". C'est en fait un clin d'oeil des programmeurs, et vous êtes maintenant capables de le comprendre ! C++ signifie que c'est du langage C "incrémenté", c'est-à-dire si on veut "du langage C à 1 niveau supérieur" 

La décrémentation

C'est tout bêtement l'inverse de l'incrémentation : on enlève 1 à une variable.
Même si on fait plus souvent des incrémentations que des décrémentations, cela reste une opération pratique que vous utiliserez de temps en temps.

La décrémentation, si on l'écrit en forme "longue" :


Code : C 

1
nombre = nombre - 1;

Et maintenant en forme "raccourcie" :

Code : C 

1
nombre--;

On l'aurait presque deviné tout seul ça.
Au lieu de mettre un ++, vous mettez un --. Si votre variable vaut 6, elle vaudra 5 après l'instruction de décrémentation.


Les autres raccourcis

Il existe d'autres raccourcis qui fonctionnent sur le même principe. Cette fois, ces raccourcis fonctionnent pour toutes les opérations de base : + - * / %

Cela permet là encore d'éviter une répétition du nom d'une variable sur une même ligne.

Ainsi, si vous voulez multiplier par 2 une variable :


Code : C

1
nombre = nombre * 2;

Vous pouvez l'écrire d'une façon raccourcie comme ceci :

Code : C 

1
nombre *= 2;

Si le nombre vaut 5 au départ, il vaudra 10 après cette instruction.
Pour les autres opérations de base, cela fonctionne de la même manière. Voici un petit programme d'exempl
e

Code : C 

1
2
3
4
5
6
7
int nombre = 2;

nombre += 4; // nombre vaut 6...
nombre -= 3; // ... nombre vaut maintenant 3
nombre *= 5; // ... nombre vaut 15
nombre /= 3; // ... nombre vaut 5
nombre %= 3; // ... nombre vaut 2 (car 5 = 1 * 3 + 2)

(allez boudez pas, un peu de calcul mental n'a jamais tué personne .)

L'avantage ici est qu'on peut utiliser toutes les opérations de base, et qu'on peut ajouter, soustraire, multiplier par n'importe quel nombre.

Ce sont des raccourcis à connaître si vous avez des lignes répétitives à taper un jour dans un programme .

Retenez quand même que l'incrémentation reste de loin le raccourci le plus utilisé
.

5)La bibliothèque mathématique:

En langage C, il existe ce qu'on appelle des bibliothèques "standard", c'est-à-dire des bibliothèques toujours utilisables. Ce sont en quelque sorte des bibliothèques "de base" qu'on utilise très souvent.

Les bibliothèques sont, je vous le rappelle, des ensembles de fonctions toutes prêtes. Ces fonctions ont été écrites par des programmeurs avant vous, elles vous évitent en quelque sorte d'avoir à réinventer la roue à chaque nouveau programme.


Vous avez déjà utilisé les fonctions
printf et scanf de la bibliothèque stdio.h.
Il faut savoir qu'il existe une autre bibliothèque, appelée math.h, qui contient de nombreuses fonctions mathématiques toutes prêtes.

En effet, les 5 opérations de base que l'on a vu sont loin d'être suffisantes ! Bon, il se peut que vous n'ayez jamais besoin de certaines opérations complexes comme les exponentielles (si vous ne savez pas ce que c'est, c'est que vous êtes peut-être un peu trop jeune ou que vous n'avez pas assez fait de maths dans votre vie). Toutefois, la bibliothèque mathématique contient de nombreuses autres fonctions dont vous aurez très probablement besoin.

Tenez par exemple, on ne sait pas faire des puissances en C ! Comment calculer un simple carré ? Vous pouvez toujours essayer de taper 5² dans votre programme, mais votre ordinateur ne le comprendra jamais car il ne sait pas ce que c'est... A moins que vous le lui expliquiez en lui indiquant la bibliothèque mathématique !


Pour pouvoir utiliser les fonctions de la bibliothèque mathématique, il est indispensable de mettre la directive de préprocesseur suivante en haut de votre programme :


Code : C
 
1
 
#include <math.h>

Une fois que c'est fait, vous pouvez utiliser toutes les fonctions de cette bibliothèque.

J'ai justement l'intention de vous les présenter.

Bon, comme il y a beaucoup de fonctions je ne peux pas faire la liste complète ici. D'une part ça vous ferait trop à assimiler, et d'autre part mes pauvres petits doigts auraient fondu avant la fin de l'écriture du chapitre. Je vais donc me contenter des principales fonctions, c'est-à-dire celles qui me semblent les plus importantes.

Vous n'avez peut-être pas tous le niveau en maths pour comprendre ce que font ces fonctions. Si c'est votre cas, pas d'inquiétude. Lisez juste, cela ne vous pénalisera pas pour la suite.
Ceci étant, je vous offre un petit conseil gratuit : soyez attentifs en cours de maths, on dirait pas comme ça mais en fait ça finit par servir.

fabs

Cette fonction retourne la valeur absolue d'un nombre, c'est-à-dire |x| (c'est la notation mathématique).
La valeur absolue d'un nombre est sa valeur positive :

  • Si vous donnez -53 à la fonction, elle vous renvoie 53.
  • Si vous donnez 53 à la fonction, elle vous renvoie 53.
En bref, elle renvoie toujours l'équivalent positif du nombre que vous lui donnez.

Code : C 

1
2
3
 
double absolu = 0, nombre=-27;

absolu = fabs(nombre); // absolu vaudra 27

Cette fonction renvoie un double, donc votre variable "absolu" doit être de type double.


Il existe aussi une fonction similaire appelée "abs", située dans "stdlib.h" cette fois.
La fonction "abs" marche de la même manière, sauf qu'elle utilise des entiers (int). Elle renvoie donc un nombre entier de type int et non un double comme fabs.

ceil

Cette fonction renvoie le premier nombre entier après le nombre décimal qu'on lui donne.

C'est une sorte d'arrondi. On arrondit en fait toujours au nombre entier supérieur.

Par exemple, si on lui donne 26.512, la fonction renvoie 27.

Cette fonction s'utilise de la même manière, et renvoie un double :


Code : C 

1
2
3
double dessus = 0, nombre = 52.71;

dessus = ceil(nombre); // dessus vaudra 53

floor

C'est l'inverse de la fonction précédente, cette fois elle renvoie le nombre directement en dessous.
Si vous lui donnez 37.91, la fonction floor vous renverra donc 37

pow

Cette fonction permet de calculer la puissance d'un nombre. Vous devez lui indiquer 2 valeurs : le nombre, et la puissance à laquelle vous voulez l'élever. Voici le schéma de la fonction :

Code : C 

1
pow(nombre, puissance);

Par exemple, "2 puissance 3" (que l'on écrit habituellement 2^3 sur un ordinateur), c'est le calcul 2 * 2 * 2, ce qui fait 8 :

Code : C

1
2
3
double resultat = 0, nombre = 2;

resultat = pow(nombre, 3); // resultat vaudra 2^3 = 8

Vous pouvez donc utiliser cette fonction pour calculer des carrés. Il suffit d'indiquer une puissance de 2.

sqrt

Cette fonction calcule la racine carrée d'un nombre. Elle renvoie un double.

Code : C 

1
2
3
double resultat = 0, nombre = 100;

resultat = sqrt(nombre); // resultat vaudra 10

sin, cos, tan

Ce sont les 3 fameuses fonctions utilisées en trigonométrie.
Le fonctionnement est le même, ces fonctions renvoient un double.

Ces fonctions attendent une valeur en
radians.

asin, acos, atan

Ce sont les fonctions arc sinus, arc cosinus et arc tangente, d'autres fonctions de trigonométrie.
Elles s'utilisent de la même manière et renvoient un double.


exp

Cette fonction calcule l'exponentielle d'un nombre. Elle renvoie un double (oui oui, elle aussi )

log

Cette fonction calcule le logarithme népérien d'un nombre (que l'on note aussi "ln")

log10

Cette fonction calcule le logarithme base 10 d'un nombre.

Conclusion

Conclusion, ben heureusement que je n'ai pas parlé des autres fonctions (en fait, je ne comprends même pas à quoi elles servent  )
Déjà, avec ces fonctions-là vous avez de quoi faire si vous vous ennuyez.
Encore une fois, si vous n'avez pas compris un mot de ce que j'ai dit, ce n'est pas bien grave car on n'en a pas absolument besoin. Tout dépend en fait du programme que vous allez faire : si vous programmez une calculatrice scientifique, c'est sûr que vous vous en servirez.


Retenez quand même les fonctions
floor, ceil, et pow, elles vous seront probablement utiles (même si vous ne programmez pas une calculatrice oui oui  )





إقرأ المزيد Résuméabuiyad

Les variables en Langage C

1)Une affaire de mémoire:

Ce que je vais vous apprendre dans ce chapitre a donc un rapport direct avec la mémoire de votre ordinateur.

Tout être humain normalement constitué a une mémoire. Eh bien c'est pareil pour un ordinateur... à un détail près : un ordinateur a plusieurs types de mémoire !


Pourquoi un ordinateur aurait-il plusieurs types de mémoire ? Une seule mémoire aurait suffi, non ?

Non, en fait le problème c'est qu'on a besoin d'avoir une mémoire à la fois rapide (pour récupérer une information très vite) et importante (pour stocker beaucoup de choses). Or, vous allez rire, mais jusqu'ici nous avons été infichus de créer une mémoire qui soit à la fois très rapide et importante. Plus exactement, la mémoire rapide coûte cher, donc on n'en fait qu'en petites quantités.
Du coup, pour nous arranger, nous avons dû doter les ordinateurs de mémoires très rapides mais pas importantes, et de mémoires importantes mais pas très rapides (vous suivez toujours ? )


Les différents types de mémoire

Pour vous donner une idée, voici les différents types de mémoire existant dans un ordinateur, de la plus rapide à la plus lente :

  1. Les registres : une mémoire ultrarapide située directement dans le processeur.
  2. La mémoire cache : elle fait le lien entre les registres et la mémoire vive.
  3. La mémoire vive : c'est la mémoire avec laquelle nous allons travailler le plus souvent.
  4. Le disque dur : que vous connaissez sûrement, c'est là qu'on enregistre les fichiers.

Comme je vous l'ai dit, j'ai classé les mémoires de la plus rapide (les registres) à la plus lente (le disque dur). Si vous avez bien suivi, vous avez compris aussi que la mémoire la plus rapide était la plus petite, et la plus lente la plus grosse.

Les registres sont donc à peine capables de retenir quelques nombres, tandis que le disque dur peut stocker de très gros fichiers.

Quand je dis qu'une mémoire est "lente", c'est à l'échelle de votre ordinateur bien sûr. Eh oui, pour un ordinateur 8 millisecondes pour accéder au disque dur c'est déjà trop long !

Que faut-il retenir dans tout ça ?

En fait, c'est pour vous situer un peu. Vous savez désormais qu'en programmation, on va surtout travailler avec la mémoire vive. On verra aussi comment lire et écrire sur le disque dur, pour lire et créer des fichiers (mais on ne le fera que plus tard). Quant à la mémoire cache et aux registres, on n'y touchera pas du tout ! C'est votre ordinateur qui s'en occupe.

Dans des langages très bas niveau, comme l'assembleur (abrégé "ASM"), on travaille au contraire plutôt directement avec les registres. Je l'ai fait, et je peux vous dire que faire une simple multiplication dans ce langage est un véritable parcours du combattant ! Heureusement, en langage C (et dans la plupart des autres langages de programmation), c'est beaucoup plus facile.
Il faut ajouter une dernière chose très importante : seul le disque dur retient tout le temps les informations qu'il contient. Toutes les autres mémoires (registres, mémoire cache, mémoire vive) sont des mémoires temporaires : lorsque vous éteignez votre ordinateur ces mémoires se vident !

Heureusement, lorsque vous rallumerez l'ordinateur, votre disque dur sera toujours là pour rappeler à votre ordinateur qui il est
.

La mémoire vive en photos

Vu qu'on va travailler pendant un moment avec la mémoire vive, je pense qu'il serait bien de vous la présenter.

On va y aller par zooms successifs. Ca, c'est votre ordinateur :


Image utilisateur
Vous reconnaissez le clavier, la souris, l'écran et l'unité centrale (la tour).
Intéressons-nous maintenant à l'unité centrale, le cœur de votre ordinateur qui contient toutes les mémoires :


Image utilisateur
Ce qui nous intéresse, c'est ce qu'il y a à l'intérieur de l'unité centrale, si on l'ouvre :

Image utilisateur


C'est un joyeux petit bazar .
Rassurez-vous, je ne vous demanderai pas de savoir comment tout cela fonctionne. Je veux juste que vous sachiez où se trouve la mémoire vive là-dedans. Je vous l'ai encadrée en rouge.
Je n'ai pas indiqué les autres mémoires (registres et mémoire cache) car de toute façon elles sont bien trop petites pour être visibles à l'oeil nu .

Voici à quoi ressemble une barrette de mémoire vive de plus près :


Image utilisateur

La mémoire vive est aussi appelée RAM, ne vous étonnez donc pas si par la suite j'utilise plutôt le mot RAM qui est un peu plus court.

Le schéma de la mémoire vive

En photographiant de plus près la mémoire vive, on n'y verrait pas grand-chose. Pourtant, il est très important de savoir comment ça fonctionne à l'intérieur. C'est d'ailleurs là que je veux en venir depuis tout à l'heure .

Je vais vous faire un schéma du fonctionnement de la mémoire vive. Il est ultra-simplifié (comme mes schémas de compilation
), mais c'est parce que nous n'avons pas besoin de trop de détails. Si vous retenez ce schéma déjà, ça sera très bien.
 
Image utilisateur


Comme vous le voyez, il faut en gros distinguer 2 colonnes :

  • Il y a les adresses : une adresse est un nombre qui permet à l'ordinateur de se repérer dans la mémoire vive. On commence à l'adresse 0 (au tout début de la mémoire) et on finit à l'adresse 3 448 765 900 126 et des poussières... Euh, en fait je ne connais pas le nombre d'adresses qu'il y a dans la RAM, je sais juste qu'il y en a beaucoup.
    En plus ça dépend de la quantité de mémoire vive que vous avez. Plus vous avez de mémoire vive, plus il y a d'adresses, donc plus on peut stocker de choses .
  • A chaque adresse, on peut stocker une valeur (un nombre) : votre ordinateur stocke dans la mémoire vive ces nombres pour pouvoir s'en souvenir par la suite. On ne peut stocker qu'un nombre par adresse !
Notre RAM ne peut stocker que des nombres.

Mais alors, comment fait-on pour retenir des mots ?

Bonne question. En fait, même les lettres ne sont que des nombres pour l'ordinateur ! Une phrase est une simple succession de nombres !

Il existe un tableau qui fait la correspondance entre les nombres et les lettres. C'est un tableau qui dit par exemple : le nombre 89 correspond à la lettre Y. Je ne rentre pas dans les détails, on aura l'occasion de reparler de cela plus loin dans le cours.

Revenons à notre schéma. Les choses sont en fait très simples : si l'ordinateur veut retenir le nombre 5 (qui pourrait être le nombre de vies qu'il reste au joueur), il le met quelque part en mémoire où il y a de la place et note l'adresse correspondante (par exemple 3 062 199 902)

Plus tard, lorsqu'il veut savoir à nouveau quel est ce nombre, il va chercher à la "case" mémoire n°3 062 199 902 ce qu'il y a, et il trouve la valeur... 5 !

Voilà en gros comment ça fonctionne. C'est peut-être un peu flou pour le moment (quel intérêt de stocker un nombre s'il faut à la place retenir l'adresse ?) mais tout va rapidement prendre du sens dans la suite de ce chapitre je vous le promets.


2)Déclarer une variable:

Croyez-moi, cette petite introduction sur la mémoire va nous être plus utile que vous ne le pensez.
Maintenant que vous savez ce qu'il faut, on peut retourner programmer.
Alors une variable, c'est quoi ?

Eh bien c'est une petite information temporaire qu'on stocke dans la RAM. Tout simplement.
On dit qu'elle est "variable" car c'est une valeur qui peut changer pendant le déroulement du programme. Par exemple, notre nombre 5 de tout à l'heure (le nombre de vies restant au joueur) risque de diminuer au fil du temps. Si ce nombre atteint 0, on saura que le joueur a perdu.

Nos programmes, vous allez le voir, sont remplis de variables. Vous allez en voir partout, à toutes les sauces.


En langage C, une variable est constituée de 2 choses :


  • Elle a une valeur : c'est le nombre qu'elle stocke, par exemple 5.
  • Elle a un nom : c'est ce qui permet de la reconnaître. En programmant en C, on n'aura pas à retenir l'adresse mémoire (ouf !), on va juste indiquer des noms de variables à la place. C'est le compilateur qui fera la conversion entre le nom et l'adresse. Voilà déjà un souci en moins.

 Donner un nom à ses variables

En langage C, chaque variable doit donc avoir un nom. Pour notre fameuse variable qui retient le nombre de vies, on aimerait bien l'appeler "Nombre de vies" ou quelque chose du genre.

Hélas, il y a quelques contraintes. Vous ne pouvez pas appeler une variable n'importe comment :


  • Il ne peut y avoir que des lettres minuscules et majuscules et des chiffres (abcABC012...).
  • Votre nom de variable doit commencer par une lettre.
  • Les espaces sont interdits. A la place, on peut utiliser le caractère "underscore" _ (qui ressemble à un trait de soulignement). C'est le seul caractère différent des lettres et chiffres autorisé.
  • Vous n'avez pas le droit d'utiliser des accents (éàê etc).
Enfin, et c'est très important à savoir, le langage C (comme le C++) fait la différence entre les majuscules et les minuscules. Pour votre culture, sachez qu'on dit que c'est un langage qui "respecte la casse".
Donc, du coup, les variables largeur, LARGEUR ou encore LArgEuR sont 3 variables différentes en langage C, même si pour nous ça a l'air de signifier la même chose !

Voici quelques exemples de noms de variable corrects : nombreDeVies, nombre_de_vies, prenom, nom, numero_de_telephone, numeroDeTelephone.


Chaque programmeur a sa propre façon de nommer des variables. Pendant ce cours, je vais vous montrer ma manière de faire :


  • Je commence tous mes noms de variables par une lettre minuscule.
  • S'il y a plusieurs mots dans mon nom de variable, je mets une lettre majuscule au début de chaque nouveau mot.
Je vais vous demander de faire de la même manière que moi, ça nous permettra d'être sur la même longueur d'onde.

Quoi que vous fassiez, faites en sorte de donner des noms clairs à vos variables. On aurait pu abréger nombreDeVies, en l'écrivant par exemple ndv. C'est peut-être plus court, mais c'est beaucoup moins clair pour vous quand vous relisez votre code. N'ayez donc pas peur de donner des noms un peu plus longs pour que ça reste compréhensible.

Les types de variables

Notre ordinateur, vous pourrez le constater, n'est en fait rien d'autre qu'une (très grosse) machine à calculer. Il ne sait traiter que des nombres.

Oui mais voilà, j'ai un scoop ! Il existe
plusieurs types de nombres !

Par exemple, il y a les nombres entiers positifs :


  • 45
  • 398
  • 7650
Mais il y a aussi des nombres décimaux, c'est-à-dire des nombres à virgule :

  • 75,909
  • 1,7741
  • 9810,7
En plus de ça, il y a aussi des nombres entiers négatifs :

  • -87
  • -916
... Et des nombres négatifs décimaux !

  • -76,9
  • -100,11
Votre pauvre ordinateur a besoin d'aide ! Lorsque vous lui demandez de stocker un nombre, vous devez dire de quel type il est. Ce n'est pas vraiment qu'il ne soit pas capable de le reconnaître tout seul, mais... Ca l'aide beaucoup à s'organiser, et à faire en sorte de ne pas prendre trop de mémoire pour rien.

Lorsque vous créez une variable, vous allez donc devoir
indiquer son type.
Voici les principaux types de variables existant en langage C (il y en aura un autre qui fera son apparition en C++) :

Nom du type Nombres stockables
char                 -128 à 127
int -2 147 483 648 à 2 147 483 647
long -2 147 483 648 à 2 147 483 647
float -3.4 x 10 puissance 38 à 3.4 x 10 puissance 38
double -1.7 x 10 puissance 308 à 1.7 x 10 puissance 308

(Je suis loin d'avoir mis tous les types, mais j'ai conservé les principaux .)

Les 3 premiers types (char, int, long) permettent de stocker des nombres entiers : 1, 2, 3, 4...

Les 2 derniers (float, double) permettent de stocker des nombres décimaux : 13.8, 16.911...

Les types float et double permettent de stocker des nombres décimaux extrêmement grands.
Si vous ne connaissez pas les puissances de 10, dites-vous par exemple que le type double permet de stocker le nombre 1 suivi de 308 zéros derrière !
C'est-à-dire : 10000000000000000000000000000000000000000000000000000..... (je ne vais quand même pas écrire 308 zéros pour vous.)

Vous remarquerez qu'int et un long ont l'air identiques. Avant ce n'était pas le cas (un int était plus petit qu'un long), mais aujourd'hui les mémoires ont évolué et on a assez de place pour stocker des grands nombres, donc on se moque un peu de la différence entre un int et un long. Le langage C "conserve" tous ces types pour des raisons de compatibilité, même si certains sont un peu de trop.
En pratique, j'utilise principalement char, int et double.

Vous verrez que la plupart du temps on manipule des nombres entiers (tant mieux, parce que c'est plus facile à utiliser
.)

Attention avec les nombres décimaux ! Votre ordinateur ne connaît pas la virgule, il utilise le point. Vous ne devez donc pas écrire 54,9 mais plutôt 54.9 !

Ce n'est pas tout ! Pour les types stockant des entiers (char, int, long...), il existe d'autres types dits "unsigned" (non signés) qui eux ne peuvent stocker que des nombres positifs. Pour les utiliser, il suffit d'écrire le mot "unsigned" devant le type :


unsigned char 0 à 255
unsigned int 0 à 4 294 967 295
unsigned long 0 à 4 294 967 295

Comme vous le voyez, les unsigned sont des types qui ont le défaut de ne pas pouvoir stocker de nombre négatif, mais qui ont l'avantage de pouvoir stocker des nombres 2 fois plus grands (char s'arrête à 128, tandis que unsigned char s'arrête à 255 par exemple).


Pourquoi avoir créé 3 types pour les nombres entiers ? Un seul type aurait été suffisant non ?

Oui, mais on a créé plusieurs types à l'origine pour économiser de la mémoire. Ainsi, quand on dit à l'ordinateur qu'on a besoin d'une variable de type "char", on prend moins d'espace en mémoire que si on avait demandé une variable de type "int".


Toutefois, c'était utile surtout à l'époque où la mémoire était limitée. Aujourd'hui, nos ordinateurs ont largement assez de mémoire vive pour que ça ne soit plus vraiment un problème. Il ne sera donc pas utile de se prendre la tête pendant des heures sur le choix d'un type. Si vous ne savez pas si votre variable risque de prendre une grosse valeur, mettez int.

Et je dis ça sérieusement. Ne vous prenez pas trop la tête sur le choix d'un type pour le moment.
En résumé, on fera surtout la distinction entre nombres entiers et décimaux :


  • Pour un nombre entier, on utilisera le plus souvent int.
  • Pour un nombre décimal, on utilisera généralement double.

Déclarer une variable

On y arrive. Maintenant, créez un nouveau projet console que vous appellerez "variables".
On va voir comment déclarer une variable, c'est-à-dire demander à l'ordinateur la permission d'utiliser un peu de mémoire.

Une déclaration de variable, c'est très simple maintenant que vous savez tout ce qu'il faut.

Il suffit d'indiquer dans l'ordre :

  1. Le type de la variable que l'on veut créer
  2. Tapez espace
  3. Indiquez le nom que vous voulez donner à la variable
  4. Et enfin n'oubliez pas le point-virgule.
Par exemple, si je veux créer ma variable nombreDeVies de type int, je dois taper la ligne suivante :

Code : C
1
int nombreDeVies;

Et c'est tout !

Quelques autres exemples stupides pour la forme :


Code : C
1
2
3
int noteDeMaths;
double sommeArgentRecue; 
unsigned int nombreDeZerosEnTrainDeLireUnNomDeVariableUnPeuLong;

Bon bref, vous avez compris le principe je pense.
Ce qu'on fait là s'appelle une
déclaration de variable (un vocabulaire à retenir là)
Vous devez faire les déclarations de variables au début des fonctions. Comme pour le moment on n'a qu'une seule fonction (la fonction main), vous allez déclarer la variable comme ceci :


Code : C
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[]) // Equivalent de int main()
{
  // Début de la fonction
  int nombreDeVies;   
     
  return 0;
  // Fin de la fonction
}

Si vous lancez le programme ci-dessus, vous constaterez avec stupeur... qu'il ne fait rien.

Quelques explications

Alors, avant que vous ne m'étrangliez en croyant que je vous mène en bateau depuis tout à l'heure, laissez-moi juste dire une chose pour ma défense.

En fait, il se passe des choses, mais vous ne les voyez pas. Lorsque le programme arrive à la ligne de la déclaration de variable, il demande bien gentiment à l'ordinateur s'il peut utiliser un peu d'espace dans la mémoire vive.

Si tout va bien, l'ordinateur répond "Oui bien sûr, fais comme chez toi". Généralement, cela se passe sans problème.

Le seul problème qu'il pourrait y avoir, c'est qu'il n'y ait plus de place en mémoire... Mais cela arrive rarement heureusement, car pour remplir toute la mémoire rien qu'avec des int il faut vraiment être un bourrin de première.

Soyez sans crainte donc, vos variables devraient normalement être créées sans souci.


Une petite astuce à connaître : si vous avez plusieurs variables du même type à déclarer, inutile de faire une ligne pour chaque variable. Il vous suffit de séparer les différents noms de variable par des virgules sur la même ligne :

Code : C 
1
int nombreDeVies, niveau, ageDuJoueur;

Cela créera 3 variables int appelées nombreDeVies, niveau et ageDuJoueur.

Et maintenant ?

Maintenant qu'on a créé notre variable, on va pouvoir lui donner une valeur.

Affecter une valeur à une variable

C'est tout ce qu'il y a de plus bête. Si vous voulez donner une valeur à la variable nombreDeVies, il suffit de procéder comme ceci :

Code : C 

1
nombreDeVies = 5;

Rien de plus à faire. Vous indiquez le nom de la variable, un signe égal, puis la valeur que vous voulez mettre dedans.
Ici, on vient de donner la valeur 5 à la variable nombreDeVies.
Notre programme complet ressemble donc à ceci :


Code : C

1
 2
 3
 4
 5
 6
 7
 8
 9
10
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
  int nombreDeVies;
  nombreDeVies = 5;
       
  return 0;
}

Là encore, rien ne s'affiche à l'écran, tout se passe dans la mémoire.
Quelque part dans les tréfonds de votre ordinateur, une petite case de mémoire vient de prendre la valeur 5. C'est pas magnifique ça ?
Pour un peu on en pleurerait

On peut s'amuser si on veut à changer la valeur par la suite :


Code : C

1
2
3
4
int nombreDeVies; 
nombreDeVies = 5;
nombreDeVies = 4;
nombreDeVies = 3;

Dans cet exemple, la variable va prendre d'abord la valeur 5, puis 4, et enfin 3. Comme votre ordinateur est très rapide, tout cela se passe extrêmement vite. Vous n'avez pas le temps de cligner des yeux que votre variable vient de prendre les valeurs 5, 4 et 3... et ça y est votre programme est fini.

La valeur d'une nouvelle variable

Voici une question très importante que je veux vous soumettre :

Quand on déclare une variable, quelle valeur a-t-elle au départ ?

En effet, quand l'ordinateur lit cette ligne :


Code : C
 
1
int nombreDeVies;

Il réserve un petit emplacement en mémoire, d'accord. Mais quelle est la valeur de la variable à ce moment-là ? Y a-t-il une valeur par défaut (par exemple 0) ?

Eh bien, accrochez-vous : la réponse est non. Non non et non, il n'y a pas de valeur par défaut. En fait, l'emplacement est réservé mais la valeur ne change pas. On n'efface pas ce qui se trouve dans la "case mémoire". Du coup, votre variable prend la valeur qui se trouvait là avant dans la mémoire, et
cette valeur peut être n'importe quoi !

Si cette zone de la mémoire n'a jamais été modifiée, la valeur est peut-être 0. Mais vous n'en êtes pas sûrs, il pourrait très bien y avoir le nombre 363 ou 18 à la place, c'est-à-dire un reste d'un vieux programme qui est passé par là avant !

Il faut donc faire très attention à ça si on veut éviter des problèmes par la suite. Le mieux est d'initialiser la variable dès qu'on la déclare. En C, c'est tout à fait possible. En gros, ça consiste à combiner la déclaration et l'affectation d'une variable dans la même instruction :

Code : C 

1
int nombreDeVies = 5;

Ici, la variable nombreDeVies est déclarée et elle prend tout de suite la valeur 5.
L'avantage, c'est que vous êtes sûrs après que cette variable contient une valeur correcte, et pas du n'importe quoi.


Les constantes

Il arrive parfois que l'on ait besoin d'utiliser une variable dont on voudrait qu'elle garde la même valeur pendant toute la durée du programme. C'est-à-dire qu'une fois déclarée, vous voudriez que votre variable conserve sa valeur et que personne n'ait le droit de changer ce qu'elle contient.

Ces variables particulières sont appelées
constantes, justement parce que leur valeur reste constante.

Pour déclarer une constante, c'est en fait très simple : il faut utiliser le mot "const" juste devant le type quand vous déclarez votre variable.

Par ailleurs, il faut obligatoirement lui donner une valeur au moment de sa déclaration comme on vient d'apprendre à le faire. Après, il sera trop tard : vous ne pourrez plus changer la valeur de la constante.

Exemple de déclaration de constante :


Code : C 

1
const int NOMBRE_DE_VIES_INITIALES = 5;

Ce n'est pas une obligation, mais par convention on écrit les noms des constantes entièrement en majuscules comme je viens de le faire là. Cela nous permet ainsi de distinguer facilement les constantes des variables. Notez qu'on utilise l'underscore _ à la place de l'espace.

A part ça, une constante s'utilise comme une variable normale, vous pouvez afficher sa valeur si vous le désirez.

La seule chose qui change, c'est que si vous essayez de modifier la valeur de la constante plus loin dans le programme, le compilateur vous indiquera qu'il y a une erreur avec cette constante.

Les erreurs de compilation sont affichées en bas de l'écran, dans ce que j'appelle la "zone de la mort", vous vous souvenez ?

Dans un tel cas, le compilateur vous afficherait un mot doux du genre : [Warning] assignment of read-only variable ' NOMBRE_DE_VIES_INITIALES' (traduction : "mais t'es vraiment idiot, pourquoi t'essaies de modifier la valeur d'une constante ? " )



3)Afficher le contenu d'une variable:

On sait afficher du texte à l'écran avec la fonction printf.
Maintenant, on va voir comment afficher la valeur d'une variable avec cette même fonction.

On utilise en fait printf de la même manière, sauf que l'on rajoute un symbole spécial à l'endroit où on veut afficher la valeur de la variable.

Par exemple :


Code : C 
 
1
printf("Il vous reste %d vies");

Ce "symbole spécial" dont je viens de vous parler est en fait un % suivi de la lettre "d". Cette lettre permet d'indiquer ce que l'on doit afficher. "d" signifie que c'est un nombre entier.
Il existe plusieurs autres possibilités, mais pour des raisons de simplicité on va se contenter de retenir ces deux-là :


SymboleSignification
%d         Nombre entier (ex. : 4)
%f        Nombre décimal (ex. : 5.18)

Je vous parlerai des autres symboles en temps voulu. Pour le moment, sachez que si vous voulez afficher un int vous devez utiliser %d, et pour un double vous utiliserez %f.

On a presque fini. On a indiqué qu'à un endroit précis on voulait afficher un nombre entier, mais on n'a pas précisé lequel ! Il faut donc indiquer à la fonction
printf quelle est la variable dont on veut afficher la valeur.
Pour ce faire, vous devez taper le nom de la variable après les guillemets et après avoir rajouté une virgule, comme ceci :

Code : C

1
printf("Il vous reste %d vies", nombreDeVies);

Le %d sera remplacé par la variable indiquée après la virgule, à savoir nombreDeVies.
On se teste ça un petit coup dans un programme ?


Code : C
 
1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int nombreDeVies = 5; // Au départ, le joueur a 5 vies
  
  printf("Vous avez %d vies\n", nombreDeVies);
  printf("**** B A M ****\n"); // Là il se prend un grand coup sur la tête
  nombreDeVies = 4; // Il vient de perdre une vie !
  printf("Ah desole, il ne vous reste plus que %d vies maintenant !\n\n", nombreDeVies);
  
  return 0;
}

Ca pourrait presque être un jeu vidéo (il faut juste beaucoup d'imagination ).
Ce programme affiche ceci à l'écran :


Code : Console


Vous avez 5 vies

**** B A M ****

Ah desole, il ne vous reste plus que 4 vies maintenant !

Vous devriez reconnaître ce qui se passe dans votre programme :

  1. Au départ le joueur a 5 vies, on affiche ça dans un printf
  2. Ensuite le joueur prend un coup sur la tête (d'où le BAM)
  3. Finalement il n'a plus que 4 vies, on affiche ça aussi avec un printf
Bref, c'est plutôt simple.

Afficher plusieurs variables dans un même printf

Il est possible d'afficher la valeur de plusieurs variables dans un seul printf. Il vous suffit pour cela d'indiquer des %d ou des %f là où vous voulez, puis d'indiquer les variables correspondantes dans le même ordre, séparées par des virgules.

Par exemple :


Code : C
 
1
printf("Vous avez %d vies et vous etes au niveau n°%d", nombreDeVies, niveau);

Veillez à bien indiquer vos variables dans le bon ordre. Le premier %d sera remplacé par la première variable (nombreDeVies), et le second %d par la seconde variable (niveau). Si vous vous trompez d'ordre, votre phrase ne voudra plus rien dire.

Allez un petit test maintenant. Notez que j'enlève les lignes tout en haut (les directives de préprocesseur commençant par un #), je vais supposer que vous les mettez à chaque fois maintenant :


Code : C
 
1
2
3
4
5
6
7
8
int main(int argc, char *argv[])
{
  int nombreDeVies = 5, niveau = 1;
  
  printf("Vous avez %d vies et vous etes au niveau n°%d\n", nombreDeVies, niveau);
  
  return 0;
}

Ce qui affichera :

Code : Console
 

Vous avez 5 vies et vous etes au niveau n°1
4)Récupérer une saisie

Les variables vont en fait commencer à devenir intéressantes maintenant. On va apprendre à demander à l'utilisateur de taper un nombre dans la console. Ce nombre, on va le récupérer et le stocker dans une variable.
Une fois que ça sera fait, on pourra faire tout un tas de choses avec, vous verrez ;)

Pour demander à l'utilisateur de rentrer quelque chose dans la console, on va utiliser une autre fonction toute prête :
scanf
Cette fonction ressemble beaucoup à printf. Vous devez mettre un %d pour indiquer que l'utilisateur doit rentrer un nombre entier (pour les décimaux je vais y revenir). Puis vous devez indiquer après le nom de la variable qui va recevoir le nombre.

Voici comment faire par exemple :


Code : C
 
1
2
int age = 0;
scanf("%d", &age);

On doit mettre le %d entre guillemets.
Par ailleurs, il faut mettre le symbole & devant le nom de la variable qui va recevoir la valeur.

Euh, pourquoi mettre un & devant le nom de la variable ?

Là, il va falloir que vous me fassiez confiance. Si je dois vous expliquer ça tout de suite, on n'est pas sortis de l'auberge croyez-moi
.
Que je vous rassure quand même : je vous expliquerai un peu plus tard ce que signifie ce symbole. Pour le moment, je choisis de ne pas vous l'expliquer pour ne pas vous embrouiller, c'est donc plutôt un service que je vous rends là .

Attention : si vous voulez faire rentrer un nombre décimal (de type double), cette fois il ne faut pas utiliser %f comme on pourrait s'y attendre mais... %lf. C'est une petite différence avec le printf qui lui prenait %f.

Code : C 

1
2
double poids = 0;
scanf("%lf", &poids);

Revenons à notre programme. Lorsque celui-ci arrive à un scanf, il se met en pause et attend que l'utilisateur rentre un nombre. Ce nombre sera stocké dans la variable "age".

Voici un petit programme simple qui demande l'âge de l'utilisateur et qui le lui affiche ensuite :


Code : C
 
1
 2
 3
 4
 5
 6
 7
 8
 9
10
int main(int argc, char *argv[])
{
  int age = 0; // On initialise la variable à 0
  
  printf("Quel age avez-vous ? ");
  scanf("%d", &age); // On demande d'entrer l'age avec scanf
  printf("Ah ! Vous avez donc %d ans !\n\n", age);
       
  return 0;
}


Code : Console
 

Quel age avez-vous ? 20

Ah ! Vous avez donc 20 ans !

Le programme se met donc en pause après avoir affiché la question "Quel age avez-vous ?". Le curseur apparaît à l'écran, vous devez taper un nombre entier (votre âge). Tapez ensuite sur Entrée pour valider, et le programme continuera à s'exécuter.
Ici, tout ce qu'il fait après c'est afficher la valeur de la variable "age" à l'écran ("Ah ! Vous avez donc 20 ans !").

Voilà, vous avez compris le principe.

Grâce à la fonction scanf, on peut donc commencer à interagir avec l'utilisateur, histoire de lui demander 2-3 informations privées.

Notez que rien ne vous empêche de taper autre chose qu'un nombre entier :


  • Si vous rentrez un nombre décimal, comme 2.9, il sera automatiquement tronqué, c'est-à-dire que seule la partie entière sera conservée. Dans ce cas, c'est le nombre 2 qui aurait été stocké dans la variable.
  • Si vous tapez des lettres au hasard ("éèydf"), la variable ne changera pas de valeur. Ce qui est bien ici, c'est qu'on avait initialisé notre variable à 0 au début. Du coup, le programme affichera "0 ans" si ça n'a pas marché. Si on n'avait pas initialisé la variable, le programme aurait pu afficher n'importe quoi !


إقرأ المزيد Résuméabuiyad
 
;