La particularité des ordinateurs est de pouvoir retenir en mémoire des données ainsi que les opérations à leur faire subir. Ces suites d'opérations sont appelées programme, et sont écrites en langage machine, qui est le seul langage directement compréhensible par l'ordinateur.
Cependant, la programmation en langage machine n'étant pas chose aisée, il a fallu créer des langages qui s'éloignent du langage machine comme les langages d'assemblage. Ils facilitent le travail du programmeur grâce à un codage symbolique des instructions. Par exemple les variables peuvent être désignées par un nom. Malgré cela, le programme, représentant exactement le langage machine de l'ordinateur, reste incompatible avec des machines différentes.
Pour remédier à cela, il a fallu inventer des langages de haut niveau qui sont eux, indépendants de la machine. Leurs programmes se présentent sous forme de texte appelé code source qui peut être lu par l'ordinateur de deux manières :
Voici les deux langages que je vous conseille, car il ne sont pas réduit à des applications particulières, et que de nombreux autres langages en sont dérivés. Cependant, il faut savoir qu'il en existe beaucoup d'autres.
D'autres langages sont arrivés avec internet, pour les apprendre, vous pouvez aller voir sur le site que vous trouverez dans la partie Liens de notre site. Notons que à part pour Java, tous les autres ne nécessitent qu'un simple éditeur de texte pour être programmés. L'interpréteur du code source n'est alors tout simplement que votre navigateur...
Avant de commencer à programmer, réfléchissez toujours au moyen de résoudre le problème à traiter (à l'aide d'un algorithme par exemple), cela vous permettra d'éviter les erreurs inutiles et les pertes de temps. Vous en profiterez alors pour mettre des commentaires dans votre code source. Croyez-moi, même si cela peu semblez embêtant au début, cela facilite bien des choses pour vous y retrouver dans votre programme (mais aussi pour d'autres personnes qui pourraient y être intéressées).
Structurez votre programme à l'aide de la méthode dite d'analyse descendante. Celle-ci oblige à s'occuper d'abord de l'essentiel. Voici un schéma sur lequel le Problème à traiter est partagé en 3 tâches A, B et C elle-même partager en sous-tâches. On peut continuer ainsi jusqu'en bas, c'est-à-dire jusqu'aux petits détails.

La structuration permet de présenter un programme bien ordonné (ce n'était pas vraiment le cas de nos premiers programmes QBASIC...), et cela est, au même titre que les commentaires, très important pour s'y retrouver dans son programme.
Intéressons-nous maintenant aux sous-tâches du programme. Ces sous-parties sont appelés sous-programmes. Le programme peut donc être construit ainsi (exemple BASIC) :
'Programme principal
CLS
PRINT "Choisissez un sport :"
PRINT
PRINT "1 Foot"
PRINT "2 Tennis"
PRINT "3 Basket"
PRINT
PRINT "0 Quitter"
PRINT
WHILE INSTR("0123", tt$) = 0 OR tt$ = "": tt$ = INKEY$: WEND
IF tt$ = "1" THEN GOSUB Foot
IF tt$ = "2" THEN GOSUB Tennis
IF tt$ = "3" THEN GOSUB Basket
PRINT "A bientôt !"
END
' Sous-programme Foot
Foot:
PRINT "Jouons au foot !"
SLEEP
RETURN
' Sous-programme Tennis
Tennis:
PRINT "Jouons au Tennis !"
SLEEP
RETURN
' Sous-programme Basket
Basket:
PRINT "Jouons au Basket !"
SLEEP
RETURN
Ce programme illustre ce qui a été dit dans l'analyse descendante, on a d'abord programmé le module principal, puis il faut s'occuper des sous-programmes. On pourra partager ce travail : des programmeurs s'occuperont du Sous-programme Foot, un autre groupe du Sous-programme Tennis et enfin un dernier pour le Sous-programme Basket.
L'instruction GOSUB appelle les sous-programmes et RETURN retourne au module principal en continuant à partir de l'instruction GOSUB qui a appelé le sous-programme. Ces constructions avec GOSUB...RETURN forment un programme structuré contrairement à l'instruction GOTO qui a tendance à désordonner le programme.
Il est aussi intéressant de pouvoir transmettre des informations aux sous-programmes. Ainsi, lorsque l'on doit souvent répéter les même actions dans un programme, on peut demander à un sous-programme de faire l'action selon certains paramètres. Par exemple en QBASIC :
'Programme principal
DECLARE SUB Aff (Texte$, x%, y%, Couleur%)
CLS
CALL Aff("Salut", 10, 10, 15)
CALL Aff("Yahoo !", 25, 5, 10)
CALL Aff("Ouaf !", 45, 20, 5)
CALL Aff("Snif !", 55, 10, 14)
END
' Sous-programme Aff
SUB Aff (Texte$, x%, y%, Couleur%)
LOCATE y%, x%: COLOR Couleur%: PRINT Texte$
END SUB
La Procédure Aff permet d'éviter de répéter LOCATE y%, x%: COLOR Couleur%: PRINT Texte$. On peut aussi imaginer que l'on ne transmet pas de paramètre à la SUB et les structures du type GOSUB...RETURN deviennent inutiles.
On peut encore faire mieux : imaginons un sous-programme qui renvoie une valeur en fonction des paramètres qu'on lui envoie. Cela conduit au concept des FUNCTION du QBASIC. Les procédures deviennent alors à leur tour inutiles, puisqu'on peut considérer qu'une SUB est une FUNCTION qui ne renvoie rien. Ainsi, en C ou encore en javascript, tous les sous-programmes sont des fonctions.
/* Fonction C qui retourne le carré de nombre */
unsigned short carre(char nombre)
{
return nombre*nombre;
}
L'unité d'information la plus simple de l'ordinateur est le Bit, qui peut prendre deux valeurs (0 ou 1). A partir de ces bits, on peut fabriquer des nombres en base 2. C'est le même principe qu'en base 10, celle que nous utilisons :
Un ordinateur peut manipuler plusieurs bits en même temps pour former des Mots. Ainsi le premier microprocesseur (intel 4004) ne pouvait manipuler que des mots de 4 bits, alors que la plupart des microprocesseurs actuels peuvent maintenant lire des mots de 32 bits (voir plus). Un mot de 8 bits est appelé Octet et correspond à un « caractère » (Attention, en anglais un octet se dit Byte, il ne faut pas confondre avec Bit !). D'une manière générale, avec un mot de N bits, on peut écrire 2N symboles différents.
Sur un octet, on peut former 28 = 256 entiers différents : de 0 à 255 pour les entiers non signés et de -128 à 127 pour les entiers signés. De la même manière, sur deux octets, on formera 216 = 65536 entiers différents.
Mais si l'on ne veut pas se limiter à des nombres entiers, on doit construire des variables flottantes en simple/double précision, se codant respectivement sur 32 et 64 bits :
Pour garder en mémoire du texte, on utilise une chaîne de caractères qui est une suite d'octets. Il y a deux manières de les coder :
Les conditions sont constamment utilisées en programmation. Il est donc nécessaire de pour relier plusieurs conditions entre elles de connaître les opérateurs logiques qui permettent de faire des opérations entre les propositions (conditions).
| A | B | NON A | A ET B | A OU B | A OU exclusif | A IMPLIQUE B |
|---|---|---|---|---|---|---|
| vrai | vrai | faux | vrai | vrai | faux | vrai |
| vrai | faux | faux | faux | vrai | vrai | faux |
| faux | vrai | vrai | faux | vrai | vrai | vrai |
| faux | faux | vrai | faux | faux | faux | vrai |
Par convention, chaque fois que A est faux, alors "A IMPLIQUE B" est vrai. Pour plus d'informations, voir le calcul propositionnel.
En programmation, les opérations logiques peuvent s'effectuer de deux manières différentes :