Algorithmique

Présentation

  • Développeur web freelance depuis 5 ans

  • http://www.boxydev.com

  • Expérience en agence web, E-Commerce (annonceur)

  • Formation Informatique et Autodidacte

  • Formateur et fan des OSS, contributeur à mes heures perdues

  • Solutions phares : Wordpress, Symfony, Magento, Prestashop, Angular

  • Langages : PHP, MySQL, HTML, CSS, JS

  • Outils : Git, Docker, Vagrant, Trello
  • Stack: ArchLinux, Gentoo, Mac OS (Unix addict)

Définition

Selon Wikipédia :

Domaine d'étude de la résolution de problèmes par la mise en œuvre de suites d’opérations élémentaires selon un processus défini aboutissant à une solution.

 

  • Un problème "Que vaut l'addition de 1 et 1 ?"
  • Une suite d'opérations "1 + 1"
  • Une solution "2"

Et le développement ?

Faut-il être bon en mathématiques ?

Logique et Méthodologie...

Rigueur et Abstraction...

De la pratique et du temps...

Le développement web va nous permettre d'écrire de la logique, faire des calculs et traiter des données. Tout cela est possible grâce au JavaScript (Client) et/ou PHP (Serveur).

HTML/CSS = Affichage, présentation

Et l'algorithmique ?

  • L'algorithmique n'est pas la programmation
  • La programmation est la mise en application de l'algorithmique
  • Abstraction du langage comme le JavaScript ou le PHP
  • Uniquement la logique
  • L'avantage est qu'il est assez "simple" d'aller apprendre n'importe quel langage informatique

Comment ?

START
    READ A
    READ B
    
    2: IF B = 0
           GOTO 3
       ELSE
           IF A > B
               A <- A - B
           ELSE
               B <- B - A
           GOTO 2
    3: PRINT A
END
  • "Pseudo-code"
  • Schéma
  • Fractionner le problème en étape

Les variables

START
    A = 10
    B = A + 10
    C = "Matthieu"
END
  • Permet de stocker des informations dans la mémoire
  • On affecte une valeur aux variables dans le programme

Une variable est une boîte avec une étiquette contenant une donnée.

Types de variables

  • Entier: 1, 3, 18, 26, -2, -5
  • Réel: 1.5, 3.14, 7.1234, -3.14, -6.3
  • Chaîne de caractères: "Hello World"
  • Booléen: true ou false, 1 ou 0
  • Tableau: [1, 2, 'Hello', true, 1.3, [1, 2]]

La pratique

Nous allons installer AlgoBox.

L'avantage est qu'il est disponible sur toutes les plateformes (Windows, Linux, Mac) et il est open source.

 

AlgoBox impose un cadre et une rigueur dans l'écriture des algorithmes.

Opération simple

START
    A = 1
    B = 2
    C = A + B
    A = 4
    B = A - C
END

A la fin de l'algorithme suivant, quelle sera la valeur de A, B et C ?

Ecrire l'algorithme sur AlgoBox, attention à la syntaxe, il faut déclarer les variables.

Entrée/Sortie

Parfois, il est nécessaire d'attendre une saisie utilisateur et afficher quelque chose à l'écran.

START
    A = 10
    AFFICHER A

    LIRE B
    AFFICHER "B vaut "
    AFFICHER B
END

Ecrire l'algorithme sur AlgoBox.

Exercices

  • 1 : Ecrire un algorithme demandant à l'utilisateur deux nombres A et B. Afficher le résultat de A + B
  • 2 : Ecrire un algorithme demandant à l'utilisateur son prénom et l'afficher à l'écran
  • 3 : Ecrire un algorithme qui calcule le carré d'un nombre
  • 4 : Ecrire un algorithme qui calcule le prix TTC d'un prix HT

Condition

SI condition ALORS
    ...
FINSI

SI condition ALORS
    ...
SINON
    ...
FINSI

SI condition ALORS
    ...
SINON SI autrecondition ALORS
    ...
SINON
	...
FINSI

SI MAJEUR >= 18 ALORS
    AFFICHER "Tu peux voter"
SINON
    AFFICHER "Tu dois attendre 2 ans"
FINSI

Permet de faire ... en fonction de ...

Opérateurs

  • Egal :  ==
  • Différent de :  != ou <>
  • Supérieur : >
  • Inférieur : <
  • Supérieur ou égal : >=
  • Inférieur ou égal : <=

On peut chaîner les comparaisons :

AGE >= 18 ET AGE <= 25  -> PROMO

AGE < 18 OU AGE > 25 -> PAS DE PROMO

Exercices

1: Ecrire un algorithme qui demande à l'utilisateur son âge. Si l'utilisateur a moins de 18 ans, lui dire qu'il est mineur, s'il a 18 ans ou plus, qu'il est majeur.

2: Ecrire un algorithme qui demande à l'utilisateur son âge. S'il a entre 18 et 25, afficher qu'il a le droit à une promotion, sinon il doit payer le prix normal.

Exercices

3: Un magasin facture 0.20 euros jusque les 10 premières photocopies, 0.15 euros les 20 suivantes et 0.10 euros les suivantes. Ecrivez un algorithme qui demande à l’utilisateur le nombre de photocopies à faire puis afficher le montant total.

4: Ecrire un algorithme qui affiche la saison en donnant le numéro du mois.

Les boucles

Répète une instruction tant qu'une condition est validée.

VARIABLES
    REPONSE EST_DU_TYPE CHAINE
DEBUT_ALGORITHME
    LIRE REPONSE
    TANT_QUE (REPONSE != "o" ET REPONSE != "n") FAIRE
        DEBUT_TANT_QUE
  	    LIRE REPONSE
        FIN_TANT_QUE
    AFFICHER "C'est ok."
FIN_ALGORITHME

!!! Attention aux boucles infinies !!!

Boucle POUR

VARIABLES
    CHIFFRE EST_DU_TYPE NOMBRE
DEBUT_ALGORITHME
    POUR CHIFFRE ALLANT_DE 0 A 10
        DEBUT_POUR
            AFFICHER CHIFFRE
        FIN_POUR
FIN_ALGORITHME

Exercices

  • Ecrire un algorithme qui demande à l'utilisateur un nombre entre 15 et 20. Tant qu'il n'a pas répondu, on lui redemande.
  • Ecrire un algorithme qui demande un nombre à l'utilisateur. On affichera ensuite ce nombre -1 jusque 0.
  • Ecrire un algorithme qui demande à l'utilisateur un chiffre. Afficher la table de multiplication de 1 à 10 de ce chiffre.
  • Modifier l'algo précédent pour demander à l'utilisateur le nombre de table et les afficher.

Exercices

  • Ecrire un algorithme qui demande un nombre entre 10 et 20, jusqu’à ce que cela convienne. Si le nombre est supérieur à 20, on affichera un message : « Plus petit ! », et inversement, « Plus grand ! » si le nombre est inférieur à 10.
  • Ecrire un algorithme qui demande un nombre et qui affiche les dix nombres suivants. Par exemple, si l'utilisateur entre le nombre 15, le programme affichera les nombres de 16 à 25. On ajoutera une demande à l'utilisateur pour qu'il puisse choisir le nombre qu'il souhaite (20 nombres suivants)

Exercices

  • Ecrire un algorithme qui demande un nombre et qui calcule la somme des entiers jusqu’à ce nombre. Par exemple, si on saisit 4, l'algo doit calculer : 1 + 2 + 3 + 4 = 10
  • Ecrire un algorithme qui demande un nombre et qui calcule sa factorielle.
  • Ecrire un algorithme qui demande 5 nombres à l’utilisateur, et qui affiche ensuite quel est le plus grand. On affichera également la position du nombre.

Exercices

  • Trouver tous les diviseurs d'un nombre. L'utilisateur saisit 12, on a donc 1, 2, 3, 4, 6 et 12. Indice: Tous les nombres en dessous de 12 sont potentiellement des diviseurs.
  • Demander un nombre à l'utilisateur et lui dire s'il est pair ou impair. S'il saisit un nombre décimal, on lui demandera de saisir un entier. Indice: On divise le nombre par 2, on trouve 0 pour un pair et 0.5 pour un impair.

Listes

On peut stocker plusieurs valeurs dans une seule variable, la liste ou tableau.

Un tableau contient des éléments qui sont formés d'une clé et d'une valeur.

VARIABLES
    TABLEAU EST_DU_TYPE LISTE
DEBUT_ALGORITHME
    TABLEAU[0] PREND_LA_VALEUR 18:6:22
    AFFICHER TABLEAU[1] // 6
FIN_ALGORITHME

Exercices

1: Ecrire un algorithme qui définit une liste de notes 10, 16, 18 et 20. Parcourir la liste grâce à la boucle POUR. Afficher toutes les notes.

2: Dans l'algorithme précédent, plutôt que d'afficher les notes, calculer la moyenne de ces notes. On peut utiliser une nouvelle variable SOMME par exemple.

3 : Trouver la note la plus grande et la plus petite.

4 : Trouvez un moyen de demander à l'utilisateur d'ajouter lui même les notes dans le tableau

Exercices

1: Créer une liste avec des prénoms. Afficher ces prénoms.

2: Créer une liste avec des salaires brut.

Calculer le total des salaires bruts.

Calculer le total des salaires en ajoutant les charges patronales (40%). (Afficher aussi le détail de chaque salaire)

Calculer chaque salaire net pour l'employé en retirant les cotisations sociales (25%). (Afficher aussi le détail de chaque salaire)

Exemple : 1500:1600

Total: 3100

Avec charges patronales: 2100, 2240

Net: 1125, 1200

Exercice

Ecrire un algorithme qui fait le tri d'un tableau dans l'ordre croissant.

Utiliser le tri à bulle, le tri par sélection et le tri à bulle optimisé..

4:25:1:36:24 devient 1:4:24:25:36

Exercice

Ecrire un algorithme qui fait une recherche dichotomique sur le tableau en vous aidant de Wikipedia.

Modulo

Le modulo est une opération spéciale. Elle renvoie le reste de la division d'un nombre par un autre.

10 % 3 = 1

On peut s'en servir pour vérifier une congruence

// Sur une horloge de 12h, 14h est sur 2
14 % 12 = 2

Exercice

  • Ecrire un algorithme qui affiche une durée exprimée en secondes en heures minutes. Exemple : 3600 affiche 1h00
  • Ecrire l'algorithme du PGCD. L'utilisateur devra saisir 2 nombres.
  • Ecrire l'algorithme de Fibonacci. L'utilisateur devra saisir un nombre qui représente les n premiers nombres de la suite.
  • Grâce à une fonction random, essayez de faire deviner un nombre à l'utilisateur. A chaque saisie, on lui indiquera si le nombre à deviner est plus petit ou plus grand.

Exercice

  • Ecrire un algorithme qui transforme un nombre en chiffres romain. (Pour vous aider).
    Pour l'exemple, 1700 devient MDCC
  • Ecrire un algorithme qui permet de savoir si une année est bissextile.
  • Ecrire un algorithme qui permet de savoir si un mot est un palindrome. Pour rappel, une chaine est aussi un tableau en JavaScript, on peut donc la parcourir.
  • Ecrire un algorithme qui permet de savoir si deux mots sont des anagrammes (Chine et Niche).

Exercice

  • Demander à l'utilisateur une liste de prix à payer. S'il saisit 0, on arrête de lui demander et on a donc un total qu'il doit. Il doit ensuite payer ce qu'il souhaite. S'il donne moins, on lui demande le reste. S'il donne assez, on s'arrête. S'il donne plus, on lui rend la monnaie en coupure de 10 euros, 5 euros ou 1 euro. Exemple : 10, 10, 10, 0. L'utilisateur doit 30. Il donne 55, on affiche 2 fois "10 euros" et 1 fois "5 euros" 1 fois.

NodeJS (Bonus)

- Installer NodeJS

- Ouvrir un terminal et vérifier l'installation avec "node -v"

- Créer un fichier index.js

- Lancer le script avec "node index.js"

- Retranscrire les algorithmes

Algorithmique

By Matthieu Mota

Algorithmique

  • 766