1 Ordinateur 2 Langages de programmation

publicité
Université de Provence
Licence Math-Info
Première Année
V. Phan Luong
Algorithmique et
Programmation en Python
Cours 1 : Introduction
Ordinateurs - Langages de haut niveau - Application
1
Ordinateur
Un ordinateur a des composants principaux suivants :
– Mémoire centrale pour mémoriser les programmes et les données.
– Unité de calculs arithmétiques et logiques (Processeur).
– Unité de gestion des périphériques : Pour communiquer avec l’extérieur (utilisateurs,
d’autres ordinateurs, senseurs, etc), l’ordinteur doit gérer les périphériques comme le
clavier, l’écran, le souris, les disques (mémoires secodaires), les cartes réseaux, etc.
La mémoire centrale est organisée en mots (octets, bytes). Un octet est l’unité de base
de pour les mémoires des ordinateurs. Un octet est composé de huit bits. Un bit est un
circuit électronique pour représenter une valeur binaire : 0 ou 1.
Le Processeur peut exécuter directement les opérations arithmétiques et logiques sur les
nombres binaires (codés sur 0/1) : les opérations ainsi que leurs opérands sont codés
en nombre binaire. Ces opérations constituent ce que l’on appelle le langage machine.
Ainsi, un programme exécutable directement par ordinateurs est une suite de 0 et 1. Un
tel programme est difficile à écrire et à comprendre.
2
Langages de programmation
Pour rendre ordinateur facilement accessible et compréhensible plusieurs langages de
programmation sont progressivement inventés : de plus simple à plus sophistiqués. Le
principe est le suivant : Chaque langage est inventé avec son compilateur (ou son interpréteur). Le langage et son compilateur font l’interfaçage entre ordinateurs et humains : humains s’expriment ce qu’ils veulent faire dans un langage de programmation
1
et le compilateur du langage traduit ce qu’ils s’expriment en programme exécutable
directement sur l’ordinateur. Le compilateur est bien sûr un programme en langage
machine de l’ordinateur.
Un langage de haut niveau permet généralement une abstraction de l’organisation physique de l’ordinateur : les espaces de mémoire peuvent être structurées et référées par
noms, les opérations arithmétiques peuvent être exprimées de manière plus proche aux
expressions usuelles, ainsi que les contrôles logiques de données. C’est-à-dire, en écrivant
un programme dans un langage de haut niveau, le programmeur peut oublier la machine
physique et à cette place il condidère une machine virtuelle dont l’organisation générale
est :
– La mémoire centrale peut être organisée en données structurées (caractères, chaines
de caractères, nombres entiers, réels, tableaux, enregistrements de différents champs,
etc).
– A la place du processeur et ses opérations de base codées en binaire, il peut ne penser qu’avec les opérateurs usuels comme addition, soustraction, multiplication, racine
carré, logarithme etc, et les contrôles de calculs comme “si une condition est satisfaite
alors faire une suite d’opérations, sinon faire autres choses” ou “tant qu’une condition
est satisfaite répéter une suite d’opérations”.
– A la place des unités de gestion de périphériques, il peut ne penser qu’avec les
opérations offertes par le langage, comme la connexion, l’ecriture et lecture sur les
périphériques.
Ainsi, pour programmer une application dans un langage informatique de haut niveau,
on doit connaı̂tre :
1. Les structures de données (types de données) que le langage permet d’utiliser et
de définir.
2. Les opérations connues dans le langage ainsi que les moyens qui permettent de
définir de nouvelles opérations.
3. Les structures de contrôles permise dans le langage pour contrôler les calculs.
4. Les moyens pour communiquer avec l’ordinateur : les fonctions pour entrer les
données, appercevoir les résultats des calculs (clavier, souris, console de jeux, écran,
2
imprimante).
De manière intuitive, pour résoudre un problème en utilisant un langage informatique
(une machine virtuelle) on peut imaginer que
– La mémoire centrale est comme une feuille de papier dans laquelle on se limite à
dessiner les cadres pour les données dans les types prévus ou permis dans le langages.
– On peut dessiner autant de cadres que l’on veut (en regardant à l’espace de mémoire
physique de l’ordinateur). Chaque cadre dessiné correspond à ce qu’on appelle une
variable. La notion de variable dans ce context correspond à une zone de mémoire
dans laquelle on peut mettre une valeur, puis lire la valeur mise dedans.
– Toute variable est nommée. L’affectation une valeur à une variable correspond au fait
de mettre la valeur dans l’espace de mémoire référencée par la variable. Soient X1,
X2, ..., Xk les noms de k variables, alors X1, X2, ..., Xk référencent respectivement k
espaces de mémoire. L’affectation d’une valeur Vi à Xi (notée Xi = Vi ou Xi := Vi
ou Xi <- Vi, dépendant de langages) correspond au fait de mettre la valeur Vi dans
l’espace de mémoire référencée par Xi.
Dans les notations Xi = Vi (ou Xi := Vi ou Xi <- Vi), l’expression à gauche du symbole
= (ou := ou <-) appelée G-valeur (L-value), représente une espace de mémoire où
l’on peut mettre à tout moment une nouvelle valeur en écrasant sa valeur courante.
L’expression à droite, appelée D-valeur (R-value) représente une valeur qui doit être
mis dans l’espace de mémoire représentée par la G-valeur. Considérer un exemple :
X1 = X1 + X2 + 5
On lit l’expression comme suit : “X1 reçoit la somme de sa valeur courante et la valeur
courante de X2, plus 5”. Cette l’affectation nécessite la lecture des valeurs courantes
de X1 et X2, l’addition de ces valeurs avec 5, et la remise du résultat dans l’espace de
référencée par X1 ; la valeur courante de X1 est ecrasée.
Un nom ne peut être à gauche d’une affectation seulement si ce nom définit une espace
de mémoire et que le contenu de cette espace peut être modifié.
– La communication entre humain et ordinateur peut se fait via le clavier (entrée standard) et l’écran (sortie standard) de l’ordinateur. D’autres entrées sorties sont les
fichiers ou les ports de communication de l’ordinateur (com1, com2, lpt, etc). Un lan-
3
gage de programmation fournit les fonctions pour saisir les données via le clavier et
afficher les données sur l’écran. Il fournit aussi les fonctions pour écrire ou lire les
données dans les fichiers.
3
Une petite illustration
Problème :
Etant données les valeurs des paramètres a et b, chercher la valeur de x qui satisfait
l’équation a*x + b = 0.
3.1
Problème mathématique
Un élève de la classe 5ième sait comment résoudre cette équation. il sait qu’il faut
procéder les étapes suivantes.
a*x = -b
si a est différente de 0 alors x = -b / a
sinon, si b = 0 alors l’équation a l’infini de solutions,
sinon, pas de solution.
3.2
Problème de programmation
Ecrire un programme dans un langage de programmation (une machine virtuelle) pour
résoudre l’équation.
Ce que la machine virtuelle (python) sait faire : l’affectation, les opérations arithmétiques
et logiques, les contrôles d’exécution, la saisie de données des périphériques (clavier,
disques, ...), écrire les donnéés sur l’écran, les disques (communication entre la mémoire
centrale et les périphériques).
Bien qu’elle sache faire chaque opération des étapes écrites précédemment, la machine
virtuelle ne sait pas l’invention du procédé ci-dessus, c’est-à-dire, comment inventer
le déroulement des opérations sous les contrôles de données : Ce qu’il ne sait pas est
l’algorithme pour résoudre le problème.
4
Pour écrire le programme il faut d’abord savoir comment résoudre le problème (algorithme). Ensuite, en utilisant un langage de programmation (une machine virtuelle), on
dite à la machine ce qu’elle doit faire pour nous rendre la solution.
Pour programmer on peut se poser les questions suivantes.
Comment saisir la valeur de a et de b et les garder en mémoire. Question de l’espace de
mémoire et de types de données (entiers, réelles ?),
Problème de calculs : Quelles sont les opérations connues (division entière, division
réelle) dans le langage et les contrôles que le langage sait faire (quand est ce qu’on peut
appliqiuer la division ?).
Problème de communication homme/machine : problème de présentation afin qu’un
utilisateur peut utiliser facilement ce programme.
Une solution :
1) Fixer le type de données de a et b, et réserver les zones de mémoires correspondant.
2) Saisir les valeurs de a et de b via le clavier et les mettre dans la zone de mémoire
réservées.
– Afficher un message pour inciter la saisie la valeur de a.
– Appeller une fonction pour accepter la donnée saisie et la mettre dans la zone réservée
à a ;
– Les mêmes actions pour b.
3) Contrôler les calculs :
Si a est différente de 0 alors calculer la division -b / a et affecter le résultat dans la zone
réservée à x ; présenter (afficher) la valeur de x comme solution unique de l’équation.
Sinon (a = 0), Contrôler la valeur de b :
Si b = 0, afficher un message indiquant qu’il y a un nombre infini de solutions. Sinon,
afficher un message indiquant qu’il n’y a pas de solution.
3.3
Particularités de Python
En Python, la déclaration d’une variable se fait par la première affection de valeur. Le
type de données de la variable est déduite à partir de la valeur affectée. On ne doit
pas explicitement déclarer de variables. Les affectations suivantes à la même variable
5
mettent à jour la valeur et le type de la variable. Donc, faire attention à la cohérence de
type de données pendant l’utilisation d’une variable.
Attentions : D’autres langages de programmation peuvent exiger la déclaration explicite de type de variables avant de les utiliser.
En Python, l’indentation du text d’un programme est très importante. Les instructions
qui sont décalées avec le même nombre de colonnes (compter à partir de la marge gauche
de la page d’édition) se constituent un bloc. Ainsi, les instructions à être exécutées
ensemble (en bloc) sous une condition de contrôle doivent être indentées de même niveau
(décaler avec le même nombre de colonnes).
Les premiers éléments de Python
Entrée/Sortie :
Pour saisir au clavier une valeur sans aucun message incitation :
x = input()
# déconseillé (le symbole # débute un commentaire dans un programme Python)
Pour saisir au clavier une valeur avec un message incitation :
x = input(“Entrer un entier : ”)
# conseillé
type(x)
# afficher le type de la valeur courante de la variable x.
Pour afficher un message :
print “message à afficher sur l’écran”
print “Valeur de x est “, x, “ et valeur de y est “, y,
Le Programme Python de la résolution de l’équation a * x + b = 0
a = input(‘‘Entrer une valeur pour a : ‘‘)
b = input(‘‘Entrer une valeur pour b : ‘‘)
if a != 0 :
x = -b / a
print ‘‘L’equation a l’unique solution x = ‘‘, x
elif b != 0 :
else:
print ‘‘L’equation n’a pas de solution.‘‘
print ‘‘L’équation a un nombre infini de solutions‘‘
6
Téléchargement