7.2 KiB
Outils
- Atom (plugin: script)
Liens
- https://algo.developpez.com/tutoriels/initiation/
- ftp://ftp-developpez.com/marcel/cours-architecture.pdf
- https://marcel.developpez.com/cours/systeme/architecture-ordinateur/
Thèmes
- Fonctionnement CPU (instructions, registre, adresse, assembleur)
- Mémoire (pile, tas, pointeur)
- Langage C (allocation, chaines, pointeur, erreurs)
- OS
- Algorithmique
- Langages (haut/bas niveau, interprétés, VM, shell, objet)
- Réseau (couches, TCP/IP, HTTP)
- Java (base du langage, classes, interfaces, Collections, generics, streams)
Algorithmique
Définitions
Un algorithme est une procédure de calcul bien définie qui prend en entrée un ensemble de valeurs et qui délivre en sortie un ensemble de valeurs.
Une structure de données est un moyen de stocker et d'organiser des données pour faciliter leur stockage, leur utilisation et leur modification.
L'efficacité d'un algorithme est mesurée par son coût (complexité) en temps et en mémoire.
La complexité d'un algorithme est :
- en temps, le nombre d'opérations élémentaires effectuées pour traiter une donnée de taille n ;
- en mémoire, l'espace mémoire nécessaire pour traiter une donnée de taille n.
Les instructions élémentaires sont : addition, multiplication, modulo et partie entière, affectation, instruction de contrôle.
Un type abstrait est un triplet composé :
- d'un nom
- d'un ensemble de valeurs
- d'un ensemble d'opérations définies sur ces valeurs.
Les types abstraits de base de l'algorithmique sont :
- entier (
int
) - caractère (
char
) - booléen (
boolean
) - réel (
double
)
Une variable est un triplet composé :
- d'un type (déjà défini)
- d'un nom (a priori toute chaîne alphanumérique)
- d'une valeur.
Les expressions sont constituées à l'aide de variables déjà déclarées, de valeurs, de parenthèses et d'opérateurs du (des) type(s) de variables concernées. Une expression a une valeur qui peut être utilisée par une instruction.
L'affectation est l'instruction qui permet de stocker une valeur dans une variable.
Evaluer une expression ou une variable consiste à déterminer sa valeur courante.
Types de base
Booléens
Une variable de type booléen prend comme valeur VRAI (true
) ou FAUX (false
). Les opérations usuelles sont ET (&&
), OU (||
) et NON (!
) qui sont données dans les tables qui suivent :
Entiers
Une variable de type entier peut prendre comme valeur l'ensemble des nombres entiers signés. Les opérations associées sont les opérations usuelles +
, -
, *
, /
.
Réels
Une variable de type réel peut prendre comme valeur l'ensemble des nombres réels. Les opérations associées sont les opérations usuelles +
, -
, *
, /
.
Caractères
Une variable de type char peut prendre comme valeur l'ensemble des caractères imprimables. On notera les valeurs entre apostrophe ('
, quote). On considère souvent que les caractères sont ordonnés dans l'ordre alphabétique.
Chaines de caractères
Une variable de type chaine de caractères peut prendre comme valeur tout suite de caractères (y compris vide). On notera les valeurs entre guillemets ("
, double quote). Le type en java est noté String
. L'opération +
permet de concaténer (fusionner) des chaines de caractères.
"Hello" + "World"
"HelloWorld"
Attention
Les valeurs :
"1"
qui est une chaine de caractères'1'
qui est un caractère1
qui est un entier1.0
qui est un réel
sont différentes et ne seront pas codées de la même manière dans la mémoire de la machine.
Comparaison
Les opérateurs <
, <=
, ==
, !=
, >
, >=
permettent de comparer les valeurs de type entier, réel et caractère. Le résultat de cette comparaison est une valeur booléenne.
Structure de contrôle
Il y a trois structures principales de contrôle qui permettent de construire des algorithmes.
Bloc d'instructions
{
instruction1;
instruction2;
...
}
Alternative/condition
if (expression)
bloc1
Les instructions du bloc bloc1 sont exécutées si expression a une valeur booléenne vraie.
if (expression)
bloc1
else
bloc2
Les instructions du bloc bloc1 sont exécutées si expression a une valeur booléenne vraie, les instructions du bloc2 sinon.
switch (variable) {
case valeur1:
bloc1
break;
case valeur2:
bloc2
break;
...
default:
bloc3
}
Les instructions du bloc1 sont exécutées si la variable a la valeur valeur1, du bloc2 si la variable a la valeur valeur2, du bloc3 dans les autres cas.
Répétition/boucle
while (expression)
bloc
Si expression a une valeur booléenne vraie, les instructions de bloc sont exécutées. Cet enchainement se reproduit tant que expression est vraie. Une boucle infinie se produit lorsque l'expression ne devient jamais fausse.
do
bloc
while (expression)
Similaire au cas précédent, mais le bloc d'instructions est exécuté avant l'évaluation de l'expression. Par conséquent, ce bloc est exécuté au moins une fois.
for (initialisation; expression; incrementation)
bloc
Le bloc d'instructions bloc est exécuté tant que expression a une valeur booléenne vraie. Une variable peut être initialisée par l'instruction initialisation et incrémentée par l'instruction incrémentation. Exemple:
for (int i = 0; i < 10; i++) {
// boucle sur les entiers de 0 à 9
}
Fonctions
Une fonction est une section d'algorithme qui a un objectif bien défini et un nom. En général, elle communique avec l'extérieur par le biais de paramètres typés. Elle possède des variables locales qui ne sont pas visibles à l'extérieur de la fonction. Une fonction peut retourner un résultat.
Une fonction est exécutée (ou appelée) lorsqu'on l'utilise dans une instruction en lui définissant les paramètres requis par sa définition. Les fonctions qui retournent une valeur peuvent également être utilisées dans une expression.
Exemples:
Définition d'une fonction sans paramètres et ne retournant pas de valeur
void maFonction() {
// instructions
}
Définition d'une fonction avec paramètres et ne retournant pas de valeur
void maFonction(int i, char c) {
// instructions
}
Définition d'une fonction avec paramètres et retournant une valeur
int maFonction(int i) {
return i + 1;
}
Appel d'une fonction sans paramètres
maFonction();
Appel d'une fonction avec paramètres
char variable = 'a';
maFonction(1, variable);
Appel d'une fonction dans une expression
if (maFonction(0) > 1) {
// instructions
}