
Tutorial n°2 - La mémoire
Publié par Elfen le 24/5/2006 (5062 lus)
3/ Les variables
Bonne nouvelle ! Vous n'avez pas a écrire les adresses des variables en C, vous donnerez un nom à ces variables, par conséquent vous appellerez une variable par con nom et non son adresse.
Mais quel nom donner à ses variables ?
Le nom d'une variable est composé uniquement de lettres, de chiffres et peut utiliser le caractère underscore : _
Le nom d'une variable commence nécessairement par une lettre, les accents sont interdits.
En C un 'A' et un 'a' ne sont pas les mêmes lettres, donc la variable NoMdUjOuEuR n'est pas la même que nOmDuJoUeUr.
Je vous conseille de faire des nom de variable complets car quand qu'il y a 4 variables dans un programme, si elles s'appellent a,b,c et d, on ne s'y retrouve plus.
Il y a différents style pour écrire ses variables, je vous recommande soit d'écrire vos nom de variables tout en minuscules avec de _ pour les espaces (style gnu) soit d'écrire tout en minuscule sans rien pour représenter les espaces (style C traditionnel). Personnellement j'utilise le style gnu.
Il existe plusieurs types de variables, les principaux sont les suivants :
char : les nombres de -128 à 128, on y met aussi en général les caractères (taille : 1 byte)
int : les nombres de -2 147 483 648 à 2 147 483 647, on y met parfois des caractères (taille : 4 byte)
long : les nombres de -2 147 483 648 à 2 147 483 647 (taille : 4 byte)
float : les nombres décimaux de -3.4 x 10 puissance 38 à 3.4 x 10 puissance 38 (taille : 4 byte)
double : les nombres décimaux de -1.7 x 10 puissance 308 à 1.7 x 10 puissance 308 (taille : 8 byte)
Vous avez remarqué que le type int et le type long sont exactement les mêmes, il n'en a pas toujours été ainsi, mais il est vrai que de nos jours nous avons tellement de mémoire ... (Les int étaitent autrefois plus petits que les long, pour des raison de compatibilité avec des anciens programmes on a gardé ces deux types) Cependant j'utilise les long pour vraiment stocker des nombres et les int pour les nombres booléens (vous saurez se que c'est plus tard).
Je précise que vous ne pouvez pas utiliser la virgule pour les nombres décimaux mais le point, pour écrire 5,8 vous taperez 5.8 (perso c'est ce que je fait tout le temps).
Dernière précision avant de vraiment passer au C : tous les types permettant de stocker des nombres entiers sont par défaut signés (signed), cela veut dire qu'ils peuvent être négatif ou positif, on peut écrire unsigned pour qu'ils ne puissent contenir que des nombres positifs, et ainsi pouvoir stocker des nombres deux fois plus grands (par exemple un long est compris entre -2 147 483 648 et 2 147 483 647 et un unsigned long entre 0 et 4 294 967 295).
4/ Passons à la pratique
D'abord comment dire à l'ordinateur qu'on voudrais créer une variable ?
Et bien on écrit au début du programme (de préférence) ceci :
type_de_variable nom_de_variable;
et l'ordinateur crée une variable.
Quelle est la valeur de cette variable ?
Elle est inconnue, c'est la valeur que le dernier programme qui a utilisé l'adresse de notre variable a laissé, cela peut être zéro si le programme a laissé un zéro ou si cette adresse n'a pas été utilisé depuis le démarrage de l'ordinateur.
Comment donner une valeur à notre variable ?
En écrivant :
nom_de_variable = valeur;
les espaces ne sont pas indispensables, ils servent à aérer le code.
Faisons donc un petit code :

nous avons créé une variable variable et lui avons donné pour valeur 0, on aurait aussi pu faire :

on peut changer la valeur d'une variable à volonté.
Le fait de dire à l'ordinateur de créer une variable s'appelle la déclaration de variable.
On peut déclarer plusieurs variables à la fois, il suffit de les séparer par des virgules :

Comme nous l'avons vu nous pouvons donner une valeur à une variable n'importe quand, mais maintenant imaginons que nous puissions proposer à l'utilisateur d'entrer une variable, ce serait génial car nous pourrions interagir avec ce dernier. Et bien aussi étonnant que cela puisse paraître, nous pouvons le faire !

Ce programme écrit "entrez la variable : " et vous propose d'écrire quelque chose, vous devez absolument entrer un nombre.
Analysons la fonction scanf(), on lui donne deux choses : "%ld" et le nom de la variable précédé de & (le nom de la variable précèdé de & correspond en fait à l'adresse de la variable, mais nous ne verrons bien cette notion que dans longtemps) ceci est très important car sinon votre programme a 99.9999999999...% de chances de planter (il ne marchera que si on écrit d'abord par exemple IMG "variable = &variable;" mais ce serait stupide et de toute façon ça rallongerait le code).
Expliquons ces deux choses : %ld indique à scanf()[/font}] et [font=courier]printf() la présence d'un nombre de type long à demander pour le premier et à afficher pour le second (on verrat plus précisément comment afficher une variable dans quelques lignes) on dont donc envoyer "%ld" à scanf() pour lui dire qu'elle va écrire dans un long (les guillemets indiquent une chaîne de caractères, en l'occurrence %ld) quand à &variable, nous l'avons brièvement expliqué plus haut, cela indique à scanf() où écrire son long.
Maintenant écrivons notre variable à l'écran, si vous avez bien compris vous devriez écrire ça :

Seulement vous pouvez constater que le programme ne donne pas la valeur de la variable mais une autre valeur que vous ne comprenez sûrement pas, cette valeur est l'adresse de variable, vous savez que le & indique que l'on veut l'adresse, et bien si scanf() travaille avec l'adresse de la variable qu'elle doit modifier, printf() fonctionne directement avec la variable qu'elle doit afficher. On doit donc écrire :

Et enfin ça marche !!!
Voilà, terminons par une liste des différentes "instructions" printf() et scanf() (cette liste n'a pas pour vocation d'être exhaustive) :
%d pour les nombres entiers décimaux contenus dans des variables int ou char
%ld pour les nombres entiers décimaux contenus dans des variables long
%p pour les nombres entiers hexadécimaux contenus dans des variables int ou char (permet d'afficher ou de demander un chiffre en hexadécimal)
%lp pour les nombres entiers hexadécimaux contenus dans des variables long (permet d'afficher ou de demander un chiffre en hexadécimal)
%f pour des nombres "à virgule" contenus dans des variables float
%lf pour des nombres "à virgule" contenus dans des variables double
%c pour des caractères
%s pour des chaînes de caractères (ne pas utiliser tant que vous n'avez pas vu le cours sur les chaînes de caractères)
J'ajoute que vous pouvez utiliser la fonction getchar() pour demander un caractère de la façon suivante :
variable = getch()
bien sur vous pouvez aussi utiliser scanf() mais je prefere que vous choisissiez getchar() pour les caractères.
Voilà, vous savez maintenant gerer la mémoire, pour l'instant ça ne sert pas à grand chose (un peu quand même) mais vous verrez son incroyable utilité lorsque nous verrons les conditions et les fonctions.
Exercices
A partir de cette leçon je vous propose des exercices, vous pourrez demander de l'aide sur le forum mais j'interdit quiconque de donner la solution, seulement de l'aide, un message "aide à la correction" dans lequel je vous dirait ce que doit donner le programme serat par ailleur posté (ainsi vous comparerez les bons résultats aux votres pour savoir si votre programme est juste)
Exercice 1 : Vous ecrirez un programme qui demande d'entrer un caractère et qui affiche le chiffre correspondant (par exemple si j'entre un 'a' je devrais obtenir '97').
Indice : il suffit de demander un caractère, de le stocker dans une variable puis d'afficher cette varible sous forme de nombre.
Exercice 2 : faites le contraire (on entre un nombre et le programme nous donne un le caractère correspondant)
PS : je vous invite à aller sur le forum de top logiciel car cela vous permetrat de résoudre (ou plutot de faire résoudre
) vos problèmes quand à la programmation en C (entre autre) et donc de progresser.J'ajoute que j'ai d'ailleur créé une FAQ C dans le forum C.
| Naviguer à travers les tutoriaux | |
Tutorial n°1 - Vos premiers pas en C
|
|
|
Les commentaires appartiennent à leurs auteurs. Nous ne sommes pas responsables de leur contenu.
|
||||







