# ALGORITHMIQUE

## les "bases"
 comment compter, binaire, décimal octet, hexa

## Variables : 
 mettre une valeur dans une boite en lui donnat un nom  
 s'écrit :   

```
var a entier;  
a=2;  
```

*Note* : zéro s'écrit avec un O barré : `0`  
Types de variables possibles : 
- boolean / booléen / bool : vrai / faux
- entier / integer / int : 1 ... 3 .... 2345 .... valeur max pour l'ordinateur
- décimal / float : 0,3 ... 1,2 ... 56,2345 .... valeur max pour l'ordinateur
- alphanumérique / chaine / string : "bonjour", "a123", ... Par convention on mets des guillements autour.

Il existe souvent des variables prédéfinies (fonction des langages) qui ne peuvent être changée, on appelle alors ces variables des **constantes**. Pi est un bon exemple.
Exemple en JavaScript : 
```
Math.PI  
``` 
Exemple en PHP
```
M_PI
```

Au dela des variables simple il existe des variables structurés comme les listes ou les piles (que nous ne détaillerons pas ici). La plus communément utilisée est le tableau.
Un tableau est série de boite avec un seul nom.

On écrira / lira dans un tableau en référençant les cases de celui si par un index numérique commençant à 0. on l'initialisera avec une liste de valeurs entre crochets;

```
var tab tableau;
tab = [32,12,234,98,6,8,29,15,1053,14,34];
afficher tab[0]; /* donne 32 */
afficher tab[3]; /* donne 98 */
tab[1]=639; /* le tableau deviens [32,639,234,98,6,8,29,15,1053,14,34] */
```

## Opérateurs

 Un opérateur est un symbole qui utilise ou des opérandes et vaut quelque chose.
 - Opérateurs d'affectation : =, ++, --, +=, -=
 - Opérateurs artimétiques binaires : +, *, /, - 
 - Opérateur artimétiques unaire : -
 - Opérateurs conditionnels ou logiques binaires : <, >, ≤, ≥, et, ou, ==
 - Opérateurs conditionnel unaire : !

 Pour les opérateur d'affectations :
 - = permet de mettre une valeur dans une variable.
 - Les opérateurs unaires -- et ++ correspondent respectivement à ```i=i-1``` et ```i=i+1```
 - Les opérateurs unaires -= et += permettre d'incrémenter d'une valeur donnée. i-=3 et i+=5 correspondent respectivement à ```i=i-3``` et ```i=i+5```. i++ et i-- peuvent donc aussi s'écrire respectivement ```i-=1``` et ```i+=1```

**Note** : un utilisera * pour multiplier pour ne pas le confondre avec un X minuscule.

## structures

un structure est une technique "d'embranchement".  

### structures conditionelles

- si alors sinon

```
si (condition) alors  
    _action 1_   
sinon  
    _action 2_     
fin si
```

- selon cas

``` 
selon reponse     
        cas "bonjour"  
            _action 1_  
        fin cas     
        cas "merci"  
            _action 2_  
        fin cas     
        cas par defaut  
            _action 3_  
        fin cas       
fin selon
```

### structures itératives 

- pour  

Cette structure permet d'éxécuter une nombre de fois donnée une action  
Il y a 3  choses à préciser, la valeur de départ, la condition de fin et la méthode d'incrément.  
Exemple pour la multiplication par addition

```
variable opD,opG,resultat entier;
resultat = 0;
opD=2;
opG=3;

pour i=0; i<opD; i++
    resultat = resultat+opG;
fin pour;

afficher resultat;
```

- tant que

exécuter des actions tant qu'une condition est respectée.
```
variable choix chaine;
choix = "oui"
tant que choix == "oui" faire
    _action 1_   
    _action 2_
    afficher "continuer ?";
    lire choix;   
fin tantque;
```
- faire tant que (do-while)

exécuter des actions tant qu'un condition est respectée, mais au moins une fois
```
variable choix chaine;
faire
    _action 1_   
    _action 2_
    afficher "continuer ?";
    lire choix;   
tant que choix == "oui";
```



## instructions :

un instruction est un élément de programmation "standard" dans la majorité des languages.
Par convention on terminera une instruction par ;

### afficher 

affiche le résultat (sur un écran par exemple)

``` 
afficher "bonjour";
var a entier;
a=2;
afficher a;
``` 

### lire

lire la saisie d'un utilisateur
``` 
var reponse chaine;  
lire reponse;  
afficher reponse;   
``` 
## commentaires
Comme en css ou en javascript, par convention nous utiliserons /* */ pour les commentaires en pseudo code.


## exemples

Calculer la surface d'un carré ou d'un rond
```
var dim entier;
var surface décimal;
var type chaine;

afficher "Carré ou rond ?";
lire type;

Si type == "carré" alors
    afficher "coté du carré ? "
    lire dim;
    afficher "surface : "
    afficher dim*dim;
Sinon si type == "rond" alors
    afficher "rayon du rond ? "
    lire dim;
    afficher "surface : "
    afficher PI * dim * dim;
Sinon
    afficher "rond ou carré uniquement";
Fin si;
```
