Introduction à l'Algorithmique
Qu'est-ce qu'un algorithme ?
Un algorithme est une série finie et non ambiguë d'instructions claires et précises, permettant de résoudre un problème donné ou d'effectuer une tâche spécifique. Imagine une recette de cuisine : elle te donne des étapes à suivre pour préparer un plat. Un algorithme, c'est la même chose, mais pour un ordinateur.
Chaque instruction doit être réalisable et le processus doit se terminer en un nombre fini d'étapes.
Key Concepts:
- Définition d'un algorithme : Une suite logique d'étapes pour résoudre un problème.
- Séquence d'instructions : Les étapes sont exécutées dans un ordre précis.
- Résolution de problèmes : Le but ultime de tout algorithme est d'atteindre un objectif ou de trouver une solution.
- Aller vers la lampe.
- Chercher l'interrupteur.
- Si l'interrupteur est en position "éteint", alors basculer l'interrupteur en position "allumé".
- Vérifier si la lampe est allumée.
- Si la lampe n'est pas allumée, vérifier l'ampoule.
- Fin.
Représentation des algorithmes
Pour communiquer un algorithme, il existe plusieurs méthodes :
- Langage naturel : C'est la façon la plus simple de décrire un algorithme, en utilisant des phrases de tous les jours. C'est utile pour comprendre l'idée générale, mais peut manquer de précision.
- Avantage : Facile à comprendre pour un humain.
- Inconvénient : Peut être ambigu, difficile à traduire en code machine.
- Pseudocode : C'est un langage intermédiaire entre le langage naturel et un langage de programmation. Il utilise des structures de contrôle (SI...ALORS, TANT QUE, POUR) et des mots-clés qui ressemblent à ceux des langages de programmation, mais sans respecter une syntaxe stricte. C'est la méthode la plus courante et recommandée pour concevoir des algorithmes.
- Avantage : Précis, non ambigu, facile à traduire dans n'importe quel langage de programmation.
- Inconvénient : Nécessite une certaine familiarité avec les structures de programmation.
- Organigrammes (notions) : Ce sont des représentations graphiques d'un algorithme. Chaque étape est représentée par un symbole spécifique (rectangle pour une instruction, losange pour une décision, etc.), et des flèches indiquent l'ordre d'exécution.
- Avantage : Très visuel, permet de voir le flux logique d'un coup d'œil.
- Inconvénient : Peut devenir très complexe et difficile à lire pour de grands algorithmes. Nous n'allons pas les utiliser dans ce cours, mais il est bon de savoir qu'ils existent.
Exemple en Pseudocode (allumer une lampe) :
DEBUT Algorithme AllumerLampe
ALLER_VERS_LAMPE
TROUVER_INTERRUPTEUR
SI INTERRUPTEUR_EST_ETEINT ALORS
BASCULER_INTERRUPTEUR_SUR_ALLUME
FIN SI
SI LAMPE_N_EST_PAS_ALLUMEE ALORS
VERIFIER_AMPOULE
FIN SI
FIN Algorithme
Variables et types de données
Pour qu'un algorithme puisse manipuler des informations, il a besoin de variables. Une variable est un espace de stockage nommé en mémoire qui peut contenir une valeur. Pense à une boîte étiquetée : l'étiquette est le nom de la variable, et ce qu'il y a dedans est sa valeur.
Chaque variable a un type de données qui détermine quel genre d'information elle peut stocker (nombre entier, texte, vrai/faux, etc.) et quelles opérations peuvent être effectuées dessus.
Key Concepts:
- Déclaration de variables : C'est l'acte de créer une variable et de lui donner un nom et un type.
- Types entiers : Pour les nombres sans décimales (ex: 5, -10, 0). Souvent appelés
intouentier. - Types flottants : Pour les nombres avec décimales (ex: 3.14, -0.5, 100.0). Souvent appelés
floatouréel. - Types booléens : Pour représenter une valeur de vérité, soit
VRAI(True) soitFAUX(False). Très utilisés pour les conditions. - Chaînes de caractères : Pour stocker du texte (ex: "Bonjour", "NSI"). Souvent appelés
stringouchaîne. - Affectation de valeurs : C'est l'action de donner une valeur à une variable. On utilise généralement le symbole
<-ou=en pseudocode.
// Déclaration et affectation
nombre_entier <- 10 // nombre_entier est de type entier, sa valeur est 10
prix_unitaire <- 19.99 // prix_unitaire est de type flottant, sa valeur est 19.99
est_actif <- VRAI // est_actif est de type booléen, sa valeur est VRAI
message <- "Salut le monde" // message est de type chaîne de caractères
// L'affectation peut changer la valeur d'une variable
nombre_entier <- nombre_entier + 5 // nombre_entier vaut maintenant 15
Le type d'une variable détermine les opérations possibles. On ne peut pas multiplier une chaîne de caractères par un entier, par exemple.
Opérateurs et expressions
Les opérateurs sont des symboles qui nous permettent d'effectuer des opérations sur des valeurs ou des variables. Une expression est une combinaison de valeurs, de variables et d'opérateurs qui produit une nouvelle valeur.
Key Concepts:
- Opérateurs arithmétiques : Pour les calculs mathématiques.
+(addition)-(soustraction)*(multiplication)/(division)%(modulo - reste de la division entière)^ou**(puissance)
- Opérateurs de comparaison : Pour comparer des valeurs. Ils retournent toujours un booléen (VRAI ou FAUX).
=ou==(est égal à)!=ou<>(est différent de)<(est strictement inférieur à)<=(est inférieur ou égal à)>(est strictement supérieur à)>=(est supérieur ou égal à)
- Opérateurs logiques : Pour combiner des expressions booléennes.
ET(AND) : VRAI si les deux conditions sont VRAIES.OU(OR) : VRAI si au moins une des conditions est VRAIE.NON(NOT) : Inverse la valeur de vérité (NON VRAI devient FAUX, NON FAUX devient VRAI).
// Opérateurs arithmétiques
resultat <- 10 + 5 * 2 // résultat vaut 20 (multiplication prioritaire)
reste <- 17 % 3 // reste vaut 2
// Opérateurs de comparaison
est_majeur <- age >= 18 // est_majeur est VRAI si age est 18 ou plus
sont_egaux <- "pomme" == "poire" // sont_egaux est FAUX
// Opérateurs logiques
condition_complexe <- (age > 18 ET permis_valide <mark> VRAI) OU (parent_present </mark> VRAI)
// condition_complexe est VRAI si (majeur ET permis) OU parent présent
La priorité des opérateurs est importante (comme en maths : multiplication avant addition).


