33
Langages et programmation Langages et programmation 1 / 30

Langages et programmation - mathemagiques.fr

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Langages et programmation - mathemagiques.fr

Langages et programmation

Langages et programmation 1 / 30

Page 2: Langages et programmation - mathemagiques.fr

Sommaire

1 Langages

2 Spécification et testsSpécifications

3 Modularisation

Langages et programmation 2 / 30

Page 3: Langages et programmation - mathemagiques.fr

Sommaire

1 Langages

2 Spécification et testsSpécifications

3 Modularisation

Page 4: Langages et programmation - mathemagiques.fr

Langages

Langages

Historiquement, on considère parfois qu’Augusta Ada Lovelace(1815-1852) est la première personne a avoir écrit un programme 1.Les langages informatiques ont une histoire intimement liée àl’évolution des ordinateurs et, plus généralement, à l’informatiqueelle même.La liste suivante 2 donne le nom de quelques uns qui ontdurablement marqué l’informatique 3. Attention : la liste ne respectepas la chronologie de leur année de création :

Ada, Perl, Python, LATEX, Lisp, JavaScript, Fortran, C++, Pascal, C,Awk, Cobol, Scheme, Basic, Eiffel, C#, TEX, Swift, Postscript,

HTML, PHP, PL/1, Java, Caml, Objective C, CSS, Haskell, Prolog,Bash, Assembleur i386, SQL.

1. Plus précisément un programme pour la machine analytique imaginée par lemathématicien anglais Charles Babbage. Le langage ADA a été nommé ainsi enl’honneur d’Ada Lovelace.2. qui est inévitablement, en partie, subjective, certains langages n’étant pas cités.3. Actuellement, on considère que le nombre de langages informatiques (encore

utilisés ou devenus obsolètes) est de l’ordre de quelques milliers.Langages et programmation 3 / 30

Page 5: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

Voici également une liste d’informaticiens ayant «créé» un de ceslangages 4 :

Wirth, Aho, Lerdorf, V. Rossum, Ghosling, inria, McCarthy,Backus, Adobe, Kemeny, US DoD, Sussman, Apple, Stroustup,

Wall, Bourne, Colmerauer, Knuth, Lamport, Hopper, Meyer, intel,Web3C, Eich, ibm.

4. tous les langages cités précédemment n’ont pas à proprement parler le nom d’unepersonne, certains sont attachés au nom d’un groupe (consortium, société, centre derecherche,. . .).

Langages et programmation 4 / 30

Page 6: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

Ex. 1 À l’aide de l’application en ligne située ici et de recherches sur leweb, réaliser une frise chronologique qui replace chaque langage dans letemps et qui associe à chaque langage le nom de son créateur. On pourraaussi rechercher à quelle création importante chaque langage est restéattaché, ou dans quel domaine informatique particulier on le retrouve.

Remarque : on pourra aussi consulter le site https://fr.wikipedia.org/wiki/Liste_de_langages_de_programmation.

On distingue généralement deux familles de langages :

1 les langages de description ;

2 les langages de programmation.

Langages et programmation 5 / 30

Page 7: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

La première famille regroupe tous les langages permettant de décrirela signification 5 de l’information (par exemple dans une page web,les balises indiquant qu’une chaîne de caractères est un titre), sanspermettre cependant de lui faire subir un algorithme qui la modifie.

La deuxième famille regroupe tous les langages permettant d’écriredes algorithmes grâce auxquels le contenu même de l’informationpeut être modifié ou même créé.

Ex. 2 Parmi les langages précédemment cités, indiquer ceux qui sont deslangages de description, ceux qui sont des langages de programmation.

À titre d’exemple, la page suivante montre un extrait du code sourced’un document texte écrit en LATEX (à gauche) et le document au formatpdf qui lui correspond (à droite).

5. ou la «forme», par opposition au «fond».Langages et programmation 6 / 30

Page 8: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

\section{Propriétés de l'intégrale}

\noi{\bf Propriétés} (admises) Soit $\mrm{I}$ un intervalle fermé,$f$ et $g$ deux fonctions définies et continues sur $\mrm{I}$, $a$,$b$ et $c$ des réels quelconques de $\mrm{I}$, $\alpha$ et $\beta$deux réels quelconques. Alors\begin{enumerate}\item (Relation de Chasles)

\[\int_a^bf(t)\mrm{d}t=\int_a^cf(t)\mrm{d}t+\int_c^bf(t)\mrm{d}t.\]

\item (Linéarité de l'intégrale)\[\int_a^b\left[\alpha f(t)+\beta g(t)\right]\mrm{d}t=\alpha\int_a^bf(t)\mrm{d}t +\beta\int_a^bg(t)\mrm{d}t.\]

\item (Intégrale et ordre) Si $f\leq g$ sur $I$ et $a\leq b$ alors\[\int_a^bf(t)\mrm{d}t\leq\int_a^bg(t)\mrm{d}t.\]De plus, dans ce cas, l'intégrale\[\int_a^b\left[g(t)-f(t)\right]\mrm{d}t\]est l'aire du domaine compris entre les courbes de $f$ et $g$et les droites d'équations $x=a$ et $x=b$.

\end{enumerate}

Langages et programmation 7 / 30

Page 9: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

Une autre caractéristique importante des langages est leur niveaud’abstraction :I ceux dits de «bas niveau» sont, pour schématiser, proches de la

machine sur laquelle ils sont implantés ;I ceux dits de «haut niveau» offrent un jeu de constructions

algorithmiques proche de celui qu’on peu formuler dans l’écritured’un algorithme en langage naturel.

Remarque : au plus proche de la machine on trouve le langage machine,qui est en définitive celui que comprend, par exemple, le microprocesseurde l’ordinateur. Une instruction écrite en langage machine est une suitede 0 et de 1 sur, par exemple, 64 bits. Voir par exemple la page websituée à l’url https ://physics4geeks.fr/spip.php ?article175.

Sous la diversité apparente des langages de programmation et deleur syntaxe il est important de déceler une unité liée à l’existenced’un corpus de constructions algorithmiques élémentaires.

Langages et programmation 8 / 30

Page 10: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

Ex. 3 Énoncer une liste de constructions algorithmiques qu’on retrouvedans un grand nombre des langages de programmation.

L’unité qui vient d’être évoquée permet de repérer dans plusieurslangages de programmation des traits communs et des traitsparticuliers. On donne ci-dessous le même programme écrit dansplusieurs langages différents 6 :

6. Tous ces programmes ont d’ailleurs été testés sous Debian, qui dispose desenvironnements nécessaires (compilateurs, interpréteurs ou serveurs).

Langages et programmation 9 / 30

Page 11: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

program maininteger:: degF, degCprint *,'Entrer une température en degrés Fahrenheit:'read *, degFdegC = 5*(degF-32)/9write(*,'(i4.2, A, i4.2, A)') degF, " degrés Fahrenheit = ",&

& degC, " degrés Celsius."end program main

Programme 1

Langages et programmation 10 / 30

Page 12: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

import java.util.Scanner;

public class Conversion {public static void main(String [] args) {

int degF, degC;Scanner entree = new Scanner(System.in);System.out.println("Entrer une température en degrés Fahrenheit: ");degF = Integer.parseInt(entree.nextLine());degC = 5*(degF-32)/9;System.out.println(degF + " degrés Fahrenheit =" + degC +

" degrés Celcius");}

}

Programme 2

Langages et programmation 11 / 30

Page 13: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

# include <stdio.h>

int main() {int degF, degC;printf("Donner une température en degrés Fahrenheit: ");scanf("%d", &degF);degC = 5*(degF-32)/9;printf("%d degrés Fahrenheit = %d degrés Celsius.\n", degF, degC);return 0;

}

Programme 3

Langages et programmation 12 / 30

Page 14: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

#include <iostream>using namespace std;

int main() {int degF, degC;cout << "Donner une température entière en degrés Fahrenheit: ";cin >> degF;degC = 5*(degF-32)/9;cout << degF << " degrés Fahrenheit = " << degC <<

" degrés Celsius.\n";return 0;

}

Programme 4

Langages et programmation 13 / 30

Page 15: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

<!doctype html>

<html lang="fr"><head>

<meta charset="utf-8" /></head><body>

<script>var degF, degC;degF = prompt("Donner une température en degrés Fahrenheit: ");degC = 5*(degF-32)/9;document.write(degF + " degrés Fahrenheit = " + degC +

" degrés Celsius.");</script>

</body></html>

Programme 5

Langages et programmation 14 / 30

Page 16: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

(display "\nDonner une température en degrés Fahrenheit: ")(define degf (string->number (read-line)))(define degc (/ (* (- degf 32) 5) 9))(display (string-append (number->string degf) " degrés Fahrenheit = "

(number->string degc) " degrés Celcius."))

Programme 6

Langages et programmation 15 / 30

Page 17: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

<!DOCTYPE html><html lang="fr" >

<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

</head><body>

<form method="post" action="bonjour.php"><p>

<label for="degF">Donner une température en degrés Fahrenheit: </label><input type="number" min="-100" max="100" value="null"

placeholder="valeur entière" name="degF"><input type="submit" value="Valider">

</p></form><p>

<?phpif (isset($_POST['degF']) AND is_numeric($_POST['degF'])){

$degC = (((int)$_POST['degF']-32)*5)/9;echo (int)$_POST['degF'] . " degrés Fahrenheit = " .

(int) $degC . " degrés Celcius.";}?>

</p></body>

</html>

Programme 7Langages et programmation 16 / 30

Page 18: Langages et programmation - mathemagiques.fr

Langages

Langages (suite)

Ex. 4 Indiquer dans quel langage est écrit chaque programme. Écrire cemême programme en Python.

Remarque : la connaissance de plusieurs langages (de programmation etde description) est généralement utile (et parfois même obligatoire)quand on se destine à une profession dans le milieu de l’informatique.Cependant, maîtriser vraiment un langage nécessite un long tempsd’apprentissage, et il faut se garder de croire que quelques heures ouquelques lignes de code suffisent. On lira avec profit sur ce sujet ledocument disponible en ligne ici.

Langages et programmation 17 / 30

Page 19: Langages et programmation - mathemagiques.fr

Sommaire

1 Langages

2 Spécification et testsSpécifications

3 Modularisation

Page 20: Langages et programmation - mathemagiques.fr

Spécification et tests

Spécification et tests

Lors du développement d’une application, la phase de mise au pointse fait généralement «bloc par bloc». Souvent un bloc est unefonction 7.On a vu qu’une fonction est définie (entre autre) par son en-tête :I nom de la fonction ;I nombre, nom et type de ses arguments ;I type de la valeur de retour (éventuelle).

Ï Ex. 5 On veut réaliser une fonction div_eucl qui réalise la divisioneuclidienne de deux entiers naturels a et b. Donner l’en-tête de cettefonction. Réaliser cette fonction en Python.Rappel : un couple d’entiers naturels (a, b) étant donné (avec b 6= 0), réaliserla division euclidienne de a par b c’est trouver l’unique couple (q, r) tel que :a = b × q + r , avec 0 6 r < b. On peut réaliser simplement cette division soitpar soustraction successives de b à a, soit directement avec la division entièreque propose Python.

7. C’est le cas en programmation structurée. En POO (Programmation OrientéeObjet) un bloc est plutôt un objet, c’est à dire une association de données et deméthodes (fonctions).

Langages et programmation 18 / 30

Page 21: Langages et programmation - mathemagiques.fr

Spécification et tests

Spécifications et tests (suite)

Bien-sûr, le fait que l’en-tête d’une fonction soit correct ne garantipas qu’elle réalise correctement le traitement qu’on attend d’elle.Les erreurs susceptibles de se produire quand on utilise une fonctionpeuvent provenir :I d’une mauvaise utilisation de celle-ci ;I d’une erreur interne dans le code de la fonction.

En Python, les «docstrings» (chaînes de documentation) permettentde spécifier le type attendu des paramètres d’une fonction, le type dela valeur de retour et la définition du résultat renvoyé (fonction) oudu traitement effectué (procédure).Syntaxe : une docstring est délimitée par des triples guillemets :"""ma_chaîne""" . Elle doit être placée au début du code, aprèsl’en-tête. Le contenu de la doc-string s’obtient : soit par lacommande help() de l’interpréteur (en console Python), soit lors dela saisie d’un code source dans lequel cette fonction est utilisée.

Langages et programmation 19 / 30

Page 22: Langages et programmation - mathemagiques.fr

Spécification et tests

Spécifications (suite)

Exemple : voici le code Python d’une fonction qui intègre sadocstring :

def max(a, b):"""a et b sont deux nombresmax est le maximum de a et b """if a > b:

return aelse:

return b

Ï Ex. 6 Reprendre la fonction div_eucl et construire sa docstring. Testercelle-ci avec la commande help(max) de l’interpréteur. Tester égalementl’apparition d’une bulle d’aide dans la saisie d’un code source où cettefonction est utilisée.

Langages et programmation 20 / 30

Page 23: Langages et programmation - mathemagiques.fr

Spécification et tests

Spécifications (suite)

Ï Ex. 7 Voici le code source d’une fonction en Python :def max_tab(t):

m = 0for i in range(len(t)):

if t[i] > t[m]:m = i

return m

1 Que fait cette fonction ?2 Serait-il judicieux de changer certains noms du code source ?3 Cette fonction fonctionne-t’elle bien dans tous les cas ?4 Construire la docstring de cette fonction en tenant compte des

réponses aux questions précédentes.

Langages et programmation 21 / 30

Page 24: Langages et programmation - mathemagiques.fr

Spécification et tests

Spécifications (suite)

On peut aussi, en phase de test, insérer dans le code source, desinstructions assert() qui assurent que certaines conditions sur lesarguments d’une fonction seront vérifiées. Par exemple, le code de lafonction max précédemment utilisée, peut être modifié comme suit :

def max(a, b):"""a et b sont deux nombresmax est le maximum de a et b """assert(isinstance(a, (int, float,complex)) and

isinstance(b, (int, float,complex)))if a > b:

return aelse:

return b

Ï Ex. 8 Reprendre le code de la fonction max_tab(t) et utiliser uneassertion pour gérer le cas provoquant une erreur d’exécution.

Langages et programmation 22 / 30

Page 25: Langages et programmation - mathemagiques.fr

Sommaire

1 Langages

2 Spécification et testsSpécifications

3 Modularisation

Page 26: Langages et programmation - mathemagiques.fr

Modularisation

Modularisation

la programmation modulaire consiste à utiliser (ou à construire) desbibliothèques contenant des fonctions spécialisées dans un domainedonné.Par exemple, on dispose en Python des bibliothèques 8 :I math : qui contient des fonctions spécialisées dans les calculs

mathématiques (sin, cos,. . .) ;I random : fonctions spécialisées dans la génération de nombres

aléatoires (p.ex. randint())I turtle : pour générer des graphiques en pilotant les déplacement

d’une tortue capable de tracer des traits ;I tkinter : pour générer des applications à interface graphique (p.ex.

en utilisant des «widgets» : boutons, zones de saisie, cases àcocher,. . .).

I matplotlib : pour tracer des courbes.Ces bibliothèques permettent de ne pas avoir à redéfinir certainesfonctions couramment utilisées dans tel ou tel domaine.

8. les deux premières sont fournies dans la distribution standard de Python.Langages et programmation 23 / 30

Page 27: Langages et programmation - mathemagiques.fr

Modularisation

Modularisation (suite)

Concrètement, on indique qu’un programme utilise une bibliothèquepar une des syntaxes suivantes :import math # à placer au début du programmea = math.sin(math.pi)

from math import sin, pi # à placer au début du programmea = sin(pi)

from math import * # à placer au début du programmea = sqrt(sin(pi)**2 + 1)

Attention : dans les deux dernières syntaxes, il peut y avoir unconflit de nom entre l’identificateur d’une fonction déclarée dans unebibliothèque et le même identificateur déclaré dans le programmequ’on construit.Pour savoir quelles fonctions/constantes sont définies dans unebibliothèque (p.ex. math), on dispose de la fonction dir(math).Pour avoir la documentation d’une fonction on peut utiliser lafonction help(), p.ex. help(sin). Il existe aussi unedocumentation en ligne officielle pour chaque bibliothèque.

Langages et programmation 24 / 30

Page 28: Langages et programmation - mathemagiques.fr

Modularisation

Modularisation (suite)

Ex. 9 Trouver, à l’aide de ce qui vient d’être dit le nom de la fonction dela biliothèque math qui renvoie la partie entière d’un réel x (définiecomme le plus grand entier inférieur ou égal à x).

Ï Ex. 10 On veut construire une bibliothèque Python permettant de fairedes calculs arithmétiques. Cette bibliothèque, qu’on nommeraarithmetique, devra implémenter les fonctions :

div_eucl(a, b) renvoyant le couple (q,r) de la divisioneuclidienne de a par b (supposés entiers naturels, avec b non nul) ;pgcd(a, b) renvoyant le pgcd des entiers a et b ;simplifie(a, b) renvoyant le couple (a1, b1) de la fractionréduite (simplifiée) égale à la fraction a

b ;

Langages et programmation 25 / 30

Page 29: Langages et programmation - mathemagiques.fr

Modularisation

Modularisation (suite)

listprimes(m) renvoyant la liste l des entiers premiers comprisentre 2 et m. Cette liste contiendra m − 2 + 1 éléments (autant qu’ily a d’entiers entre 2 et m), avec la convention suivante : si l[i]contient 0 alors l’entier i+2 est composé (non premier), si l[i]contient 1 alors l’entier i+2 est premier. Par exemple, si m vaut 10,lisprimes(10) renvoie la liste :

i 0 1 2 3 4 5 6 7 8

l[i] 1 1 0 1 0 1 0 0 0i+2 2 3 4 5 6 7 8 9 10

car, entre 2 et 10, seuls 2, 3, 5 et 7 sont premiers.dfp(n) renvoyant la décomposition en facteurs premiers de l’entiern (supposé supérieur ou égal à 2). Par exemple, si n vaut 180,dfp(180) doit être égal à la liste [(2,2), (3,2), (5,1)], car180 = 22 × 32 × 5.

Langages et programmation 26 / 30

Page 30: Langages et programmation - mathemagiques.fr

Modularisation

Modularisation (suite)Rappels mathématiques :

le pgcd 9 de a et b peut être obtenu par l’algorithme d’Euclide 10.Celui-ci consiste à réaliser une succession de divisions euclidiennestant que le reste obtenu n’est pas nul. Le dernier reste non nul estalors le pgcd recherché. L’exemple ci-dessous illustre cet algorithmepour a=40 et b=15 :

a = b × q + r40 = 15 × 2 + 1015 = 10 × 1 + 510 = 5 × 2 + 0

Donc pgcd(40, 15) = 5.Une fraction a

b est dite réduite lorsque a et b sont premiers entreeux, c’est à dire lorsque pgcd(a, b) = 1. Quand ce n’est pas le cas,pour simplifier a

b il suffit de diviser a et b par leur pgcd. Exemple :pgcd(40, 15) = 5, donc

4015 = 5 × 8

5 × 3 = 83 .

9. pgcd : plus grand commun diviseur.10. Donner la date et le lieu où on estime qu’Euclide a vécu.Langages et programmation 27 / 30

Page 31: Langages et programmation - mathemagiques.fr

Modularisation

Modularisation (suite)

La liste des nombres premiers de 2 à m peut être dressée à l’aide ducrible d’Ératosthène 11 : on écrit la liste des entiers de 2 à m. Onbarre alors tous les multiples de 2 de la liste (sauf 2 qui est premier),qui sont nécessairement composés. En partant de 2, le premier entiernon barré rencontré est nécessairement premier : 3. On barre alorsalors tous les multiples de 3 (sauf 3). On réitère ceci tant que lenombre premier a un carré inférieur ou égal à m. Pour m = 20 letableau ci-dessous illustre cet algorithme :

nombres 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

initialisation 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1multiples de 2 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0multiples de 3 1 1 0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0

Après 3, le premier nombre non barré est 5, premier. Mais 52 = 25 > 20,donc inutile de continuer. On vérifie que tous les nombres non barrés de 2à 20 sont premiers : 2, 3, 5, 7, 11, 13, 17 et 19.11. Ératosthène est un scientifique grec ayant vécu au IIIesiècle avant Jésus-Christ àAlexandrie. On lui doit entre autre l’invention de la géographie et une des premièresmesures du rayon de la Terre.

Langages et programmation 28 / 30

Page 32: Langages et programmation - mathemagiques.fr

Modularisation

Modularisation (suite)

Pour obtenir dfp(n) on considère les diviseurs premiers inférieurs àn, obtenus à l’aide de listprimes(n). On tente de diviser n partous les entiers premiers de cette liste, tant que c’est possible, enpartant du plus petit diviseur premier (2). Il faut simplement biencompter le nombre de fois que n a pu être divisé par un facteurpremier. À chaque changement de facteur premier on ajoute à laliste le couple constitué du facteur premier et de la puissance àlaquelle il apparaît dans la dfp de n. Exemple, avec n=180 :

180 = 2 × 9090 = 2 × 4545 = 3 × 1515 = 3 × 55 = 5 × 1

Donc 180 = 22 × 32 × 5.

Langages et programmation 29 / 30

Page 33: Langages et programmation - mathemagiques.fr

Modularisation

Modularisation (suite)

En construisant la bibliothèque arithmétique vous prendrez soin :I d’écrire les docstrings ;I de construire avec modularité les différentes fonctions ;I d’écrire un programme, nommé par exemple tests.py, qui importe

la bibliothèque arithmétique et qui teste les fonctions qu’elle offre.

Langages et programmation 30 / 30