Algorithmique branche de l'informatique qui étudie la conception et l'analyse des algorithmes.
Algorithme suite finie et non ambiguë d'instructions et d’opérations permettant de résoudre une classe de problèmes.
Exemples des problèmes : recherche dans une liste triée, trouver si un mot existe dans un texte, vérifier qu'un mot-de-passe est assez fort, …
Un algorithme peut manipuler des données comme :
Donnez un exemple de problème (ou d'algorithme) avec chaque type de données
Un algorithme contient :
Un programme est un algorithme écrit dans un langage informatique et exécuté sur une machine.
Un algorithme n'est qu'est une description théorique. Il est souvent écrit en pseudo-code.
Conseils pour concevoir un algorithme :
L'algorithmique est un art (ou une science ?). Nous allons l'appliquer au développement web.
Dans le développement web, la programmation sert à :
On utilise des langages comme JavaScript, PHP ou Python.
JavaScript peut :
Mais il ne peut pas voir les fichiers sur votre ordinateur
Ouvrez la console de votre navigateur web (Ctrl+K ou F12) et tapez
3+5
alert("Surprise")
console.log("Surprise")
let nom = prompt("Comment tu t'appelles ?")
alert("Tu t'appelles " + nom)
new Date()
Variable : donnée nécessaire au déroulement d'un algorithme. Elle sert à faire un calcul, afficher une donnée, sauvegarder temporairement une information.
let a = 5
let b = 10
console.log(a + b)
Une variable a un nom et une valeur
Pour utiliser une nouvelle variable, il faut la déclarer.
Ensuite, on lui donne une valeur via une affectation : la variable à gauche prend la valeur de ce qui est à droite
let nb1 // déclaration avec « let »
nb1 = 40 // affectation avec « = »
let nb2 = 10
let somme = nb1 + nb2
console.log(somme)
Le nom d'une variable doit commencer par une lettre, le symbole dollar ($
) ou un tiret bas (_
). Il ne peut pas être un mot réservé de JavaScript (let, if, for, …)
let prenom = "brendan"
let nom = "eich"
let adresse_email = prenom + "." + nom + "@etu.univ-amu.fr"
console.log(adresse_email)
Une variable peut avoir plusieurs types de valeurs :
10
, -8
, 3.14
"Hello world"
true
ou false
Pour chaque type de variable il existe des opérations différentes
Ce sont les nombres réels : 12, 3.1415, -276.15
On utilise la notation anglo-saxonne, avec un point pour le séparateur décimal.
Opérations arithmétiques :
let a = 10 + 5
let b = (a - 7.5) * 8
let c = b / 3
let d = 23 % 6 // modulo, reste de la division euclidienne
let e = 2**5 // exponentielle
Il existe aussi les opérations de comparaison :
2 < 3
2 <= 3
2 === 1+1
3 !== 2+1
4 > 2
4 >= 4
(on les utilise à l'intérieur des structures de contrôle)
Erreur fréquente : utiliser =
(affectation) au lieu de ===
Suite de caractères (chiffres, lettres, espaces, signes de ponctuation, émojis).
On les écrit entourés des guillemets doubles ("
)
let message = "Identifiez-vous ! 😀"
alert(message)
Une seule opération entre les chaînes de caractères : l'assemblage
let nom = "Stéphane"
console.log("Bienvenue " + nom)
Quelle est la valeur de ces variables ?
let a = 2 + 2
let b = "2" + "2"
let c = "Vous avez " + a + " ans"
Pour combiner du texte et des variables, on utilise l'interpolation
let age = 18
console.log(`Vous avez ${age} ans`)
`
(Shift + Alt Gr + 7)${variable}
est remplacé par la valeur de la variableVariable qui contient une liste de valeurs
let fruits = ["pommes", "bananes"]
let arbres = ["pommier", "figuier"]
arbres[1] = "bananier"
console.log("Le " + arbres[0] + " fait des " + fruits[0])
console.log("Le " + arbres[1] + " fait des " + fruits[1])
[]
, valeurs séparées par des virgulesUn tableau peut contenir un autre tableau
let depts = [
["Aube", "Troyes"],
["Gironde", "Bordeaux"]
]
console.log(`La préfecture de ${depts[0][0]} est ${depts[0][1]}`)
console.log(`La préfecture de ${depts[1][0]} est ${depts[1][1]}`)
Variable qui contient une liste de valeurs indexées par des chaînes de caractères
let arbre1 = {"nom": "pommier", "fruits": "pommes"}
let arbre2 = {"nom": "figuier", "fruits": "figues"}
console.log(`Le ${arbre1["nom"]} fait des ${arbre1["fruits"]}`)
console.log(`Le ${arbre2["nom"]} fait des ${arbre2["fruits"]}`)
{}
, valeurs séparées par des virgulesTrouvez les erreurs
let utilisateur = {
"prenom" = "Chloé",
"nom" = "Martin"
annee: 2006
}
let age = 2023 - utilisateur["annee"]
console.log(`${utilisateur[prenom]} ${utilisateur[nom]} a ${age} ans`)
Tableau ou objet ?
On a les données, voyons comment mettre de l'intelligence dans un programme
Un programme ne fait pas toujours la même chose, il dépend des données.
Les instructions sont guidées par les structures conditionnelles (if
, else
) et les boucles (while
, for
)
Si une condition est vraie, on exécute une liste d'instructions
let age = 2023 - 2010
if (age < 18) {
console.log("Vous êtes mineur")
}
()
{}
Condition expression qui donne une valeur booléenne : true
ou false
Trois opérateurs logiques : conjonction (et, &&
), disjonction (ou, ||
) et négation (non, !
)
Conjonction : vrai si les deux valeurs sont vraies
console.log(true && true) // true
console.log(true && false) // false
console.log(false && true) // false
console.log(false && false) // false
Exemple : tu peux embarquer si tu as ton billet et ton passeport
Disjonction : vrai dès qu'une des deux valeurs est vraie
console.log(true || true) // true
console.log(true || false) // true
console.log(false || true) // true
console.log(false || false) // false
Exemple : tu as une réduction si tu es étudiant ou chômeur
Négation : opposé de la valeur
console.log(! true) // false
console.log(! false) // true
Exemple : tu es sans emploi si tu ne travaille pas
Vrai ou faux ?
(true && true) || false
(false || !false) && (true && !false)
!(true && false)
Une condition, deux blocs d'instructions, un seul est exécuté
let billet = true
let passeport = false
if (billet && passeport) {
console.log("Vous pouvez embarquer")
} else {
console.log("Il vous manque le billet ou le passeport")
}
Tout ce qui reste pour faire un programme sont les boucles de répétition pour faire plusieurs tâches similaires
let mot_de_passe
mot_de_passe = prompt("Mot de passe ?")
if (mot_de_passe === "abc123") {
alert("Mot de passe correct")
} else {
mot_de_passe = prompt("Incorrect. Essayez à nouveau")
if (mot_de_passe === "abc123") {
alert("Mot de passe correct")
} else {
mot_de_passe = prompt("Incorrect. Essayez à nouveau")
if (mot_de_passe === "abc123") {
alert("Mot de passe correct")
} else {
mot_de_passe = prompt("Incorrect. Essayez à nouveau")
}
}
}
Si la condition est vraie, on exécute le bloc d'instructions et on recommence : si la condition est vraie…
let nombre = 1.1
while (nombre < 1000000) {
console.log(nombre)
nombre = nombre*nombre
}
if
On exécute le bloc d'instructions, et si la condition est vraie, alors on recommence : on exécute le bloc…
let nombre
do {
nombre = Math.random() // nombre aléatoire entre 0 et 1
console.log(nombre)
} while (nombre < 0.9)
do
(faire)Idéale pour faire la même chose un certain nombre de fois
let str = ""
for (let i = 0; i < 9; i++) {
str = str + i
console.log(str)
}
i++
est un raccourci pour i = i+1
Boucle pour parcourir les valeurs d'un tableau
let jours = ["lundi", "mardi", "mercredi", "jeudi", "vendredi"]
for (let valeur of jours) {
console.log(valeur)
}
let
of
(de)Boucle pour parcourir les clés d'un objet
let departement = {
"nom": "Bouches-du-Rhône",
"region": "Provence-Alpes-Côte d'Azur",
"prefecture": "Marseille",
"code": "13",
"population": 2043110
}
for (let cle in departement) {
console.log(`${cle} -> ${departement[cle]}`)
}
in
(dans)if
et while
→ tous les algorithmes possiblesIl ne reste qu'à appliquer ces techniques au développement web.