Une bête de calcul

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Superman

V
Ancien staff
Dec 2, 2009
2,489
0
596
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
heureux.png
)

Voyons voir donc l'addition pour commencer.
Pour faire une addition, on utilise le signe + (non, sans blague ?
blink.gif
).
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 : C1
2
3int 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
hihi.png

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 : C1printf("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
smile.png


Et pourtant ! Regardez ce que fait ce code :

Code : C1
2
3
4int 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
heureux.png

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 : C1
2
3
4double 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
smile.png



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
clin.png


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



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 : C1resultat = 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
smile.png

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 !
heureux.png


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
hihi.png


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


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
21int 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
smile.png


Vous pouvez essayez 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
clin.png
)

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
clin.png

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

Code : C1resultat = nombre1 + nombre2 + nombre3;



Les raccourcis

Comme promis, nous n'avons pas de nouvelles opérations à voir. Et pour cause ! On les a déjà toutes vues
clin.png

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é
langue.png


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
hihi.png
). Sauriez-vous comment faire pour ajouter 1 à cette variable, sans savoir quel est le nombre qu'elle contient ?

Voici comment on doit faire :

Code : C1nombre = 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 !
hihi.png
).
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 : C1nombre++;




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"
langue.png




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 : C1nombre = nombre - 1;




Et maintenant en forme "raccourcie" :

Code : C1nombre--;




On l'aurait presque deviné tout seul ça
hihi.png

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 : C1nombre = nombre * 2;




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

Code : C1nombre *= 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'exemple :

Code : C1
2
3
4
5
6
7int 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
langue.png
)

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
smile.png


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


SOURCE : Ce lien n'est pas visible, veuillez vous connecter pour l'afficher. Je m'inscris!