INF1563 Programmation I
Introduction
Objectifs
Apprendre comment
- analyser un problème
- proposer une stratégie pour le résoudre par ordinateur
- programmer correctement cette solution en Java
Apprendre à programmer ≠ apprendre Java
Pourquoi Java ?
- langage moderne (moins de détails étranges que le C++)
- utilise l'approche orientée objet (OO)
- syntaxe de base similaire au C et C++
- librairie standard très riche
- très utilisé; voir les statistiques
Mais le langage a beaucoup moins d'importance que la qualité du programme.
Comment installer Java ?
Programmes, ordinateurs, langages de programmation, algorithmes
Qu’est-ce qu’un programme ?
- une séquence d'instructions indiquant à un ordinateur ce qu'il doit faire
- l'ordre d'exécution de cette séquence est important
Qu’est-ce qu’un langage de programmation ?
Un langage de programmation est un ensemble de règles
qui déterminent quand
une séquence de symboles constitue un programme dans ce langage.
Deux types de règles
- règles syntaxiques
- règles sémantiques
Exemple :
règles syntaxiques :
- le numéro de téléphone est écrit comme
(chiffre chiffre chiffre)chiffre chiffre chiffre - chiffre chiffre chiffre chiffre
- les espaces ne sont pas permis
règles sémantiques :
- les premiers trois chiffres constituent le code régional
- les autres chiffres constituent le numéro local
Différents langages de programmation
différents domaines d'application
différents styles (paradigmes) de programmation
- programmation impérative (C, C++, Java, Php, Cobol, Fortran, ...)
- programmation procédurale (structurée) (Pascal, C, ...)
- programmation orientée objet (C++, Java, Smalltalk, ...)
- programmation déclarative
- programmation fonctionnelle (ML, Lisp, ...)
- programmation logique (Prolog, ...)
- programmation déclarative vs programmation impérative
- programmation déclarative :
La racine carrée d’un nombre réel positif x est le nombre positif dont le carré vaut x.
sqrt(x) = y tel que y * y = x
On ne spécifie pas comment trouver cette valeur, par exemple sqrt(2).
- programmation impérative
la méthode de Héron ou méthode babylonienne : pour déterminer la racine carrée du nombre x, on choisit un nombre x0 assez proche de la racine carrée de x, en général sa partie entière, puis on construit une suite définie par récurrence par
xn+1 = (xn + x/xn)/2
On spécifie comment trouver la valeur.
Exemple :
x0 = 1
x1 = (x0 + x/x0)/2 = (1 + 2/1)/2 = 1.5
x2 = (x1 + x/x1)/2 = (1.5 + 2/1.5)/2 = (1.5 + 1.3333)/2 = 1.42
x3 = (x2 + x/x2)/2 = (1.42 + 2/1.42)/2 = (1.42 + 1.4085)/2 = 1.41422
...
-
En 1936, un mathématicien britannique, Alain Turing, a montré que six concepts simples de programmation sont suffisants pour décrire n'importe quel processus. Alors si deux langages de programmation supportent ces concepts, ils sont équivalents. Tout ce qui peut être fait dans un langage de programmation, peut être fait dans l'autre!
différents niveaux d'abstraction
langage de programmation est toujours un compromis entre
la puissance d'expression et la possibilité d'exécution
- niveau d'abstraction bas : langage machine
- niveau d'abstraction moyen : langage C
- niveau d'abstraction haut : Java, C++
- niveau d'abstraction très élevé : langage mathématique
Qu’est-ce qu’un ordinateur ?
- une machine dotée d'une unité de traitement
lui permettant d'exécuter des programmes enregistrés.
- un ensemble de circuits électroniques permettant de manipuler des données sous forme binaire, ou bits.
- la machine permet de traiter automatiquement les données, ou
informations, selon des séquences d'instructions prédéfinies appelées
aussi programmes.
- une machine très rapide et très stupide !
Architecture de l’ordinateur
- Unité centrale (central processing unit - CPU)
le "cerveau" qui exécute des instructions très simples
- Mémoire (random access memory - RAM)
une collection des tiroirs numérotés contenant des nombres
- la plus petite unité adressable est l'octet (byte) :
une suite de 8 bits
- Périphériques
- clavier, écran, carte de réseau, lecteur de CD, etc.
Stockage de l’information
Niveau d'abstraction | Exemples des informations |
circuits électroniques | interrupteur à deux états, on ou off |
langage machine | séquences de bits 1 ou 0 |
plus haut | nombres décimaux (code de 5 = 101), réels,
caractères (ASCII : code de 'A' = 01000001), ... |
élevé | videos, images (noir et blanc : 1 bit/pixel), documents, blogs, ... |
Avantages et inconvénients d'un langage de haut niveau
Avantages | Inconvénients |
programmation plus rapide | incompréhensible pour l'unité centrale (CPU) |
instructions plus riches et plus compréhensibles | doit être traduit (ou interprété) en langage machine (processus de compilation)
|
concepts plus abstraits (variables, structures, ...) |
les chances de se tromper beaucoup moins élevées |
Qu’est-ce qu’un algorithme ?
L'ordinateur est stupide !
Il comprend des instructions très primitives. Si l'on veut
qu'il fasse des choses plus avancées, il faut lui dire comment le faire, il faut lui
fournir un algorithme.
Un algorithme est (cf. Wikipédia)
- un processus systématique de résolution, par le calcul, d'un problème permettant de présenter les étapes vers le résultat à une autre personne physique (un autre humain) ou virtuelle (un calculateur)
- un énoncé d’une suite d’opérations permettant de donner la réponse à un problème.
Problème : comment faire des muffins aux bananes ?
Ingrédients (les données)
- 2/3 tasse de cassonade
- 1/2 tasse d'huile végétale
- 1 oeuf
- 2 c. à table de mélasse
- 1 1/2 tasse de son de blé naturel
- 2/3 tasse de farine
- 1/2 tasse de gruau
- 1/4 tasse de graine de lin moulue
- 2 bananes écrasées
- 1/2 tasse de pépites de chocolat au lait
- 1/2 tasse de raisins secs
- 1/2 c. à thé de sel
- 1/2 c. à thé de cannelle
- 1 c. à thé de soda
- 1 c. à thé de poudre-à-pâte
- 1 tasse de lait
Algorithme
- Faire chauffer le four à 375f.
- Mélanger l'oeuf avec la cassonade, l'huile, la mélasse et les bananes.
- Ajouter le gruau, le son de blé, la farine, la graine de lin, le soda,
le sel, la poudre à pâte, la cannelle, les raisins et les pépites de
chocolat.
- Ajouter le lait en dernier.
- Bien mélanger et mettre dans les moules à muffin.
- Cuire environ 25 min à 375f.
Exécution séquentielle, parallèle, répartie
Si les opérations s’exécutent en séquence, on parle d’algorithme séquentiel. Si les opérations s’exécutent sur plusieurs processeurs en parallèle, on parle d’algorithme parallèle. Si les tâches s’exécutent sur un réseau de processeurs on parle d’algorithme réparti ou distribué.
Programmes ressemblent aux recettes
Tâche : additionner deux nombres et afficher le
résultat à l'écran.
Le CPU utilise un accumulateur : mémoire "locale".
Programme :
- Lire le premier nombre du clavier et le placer dans la mémoire.
- Lire le deuxième nombre du clavier et le placer dans la mémoire.
- Charger le premier nombre de la mémoire dans l'accumulateur.
- Ajouter le deuxième nombre de la mémoire au nombre qui
se trouve dans l'accumulateur, et placer le résultat dans
l'accumulateur.
- Stocker le nombre qui se trouve dans l'accumulateur dans la mémoire.
- Afficher le résultat sur l'écran.