La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Introduction À l’algorithmique

Présentations similaires


Présentation au sujet: "Introduction À l’algorithmique"— Transcription de la présentation:

1 Introduction À l’algorithmique
Application au langage Java (NFA31) Grégory BOURGUIN (merci à François BARTHELEMY)

2 Introduction Objectifs pédagogiques
Etudier les concepts de base de la programmation concepts présents dans beaucoup de langages de programmation les appliquer en Java Acquérir certaines méthodes de résolution des problèmes classiques en informatique une fois les concepts de base de la programmation acquis vous former par vous mêmes dans l’apprentissage d’un autre langage de programmation programmer rapidement en gardant les mêmes

3 Pourquoi Java ? Environnements de développement gratuits
Java est fortement typé Beaucoup d’erreurs sont détectées automatiquement Incorpore des nombreux traits de programmation de haut niveau orienté objet exceptions polymorphisme gestion de la mémoire transparence des pointeurs Java possède une sémantique précise Portable exécution indépendante de la plateforme d’installation Robuste et sécurisé́

4 Pourquoi Java ? Principaux domaines d’application Internet Le Web
Programmation distribuée Le Web Programmes embarqués

5 Les programmes Servent à décrire les solutions à un problème (générique) Description d’une méthode mécanique (i.e., applicable par une machine) de résolution d’un problème donné suite d’instructions dans un langage de programmation traiter et transformer les données du problème à résoudre Trouver les solutions : exécuter le programme sur des données concrètes Les traitements décrits par les instructions sont appliqués aux données (entrées) Les données sont manipulées pour aboutir aux solutions (sorties)

6 Les ordinateurs Composants principaux
Unité́ centrale (CPU) ou processeur traitement des données et instructions logées en mémoire centrale exécute un ensemble d’instructions (simples) dites instructions machine lecture/écriture en mémoire centrale, opérations arithmétiques et logiques, comparaison des valeurs, branchement (saut) vers une adresse afin de poursuivre l’exécution , etc. Instructions codées en binaire (séquences de 0 et de 1) différentes dans chaque plateforme matérielle Mémoire Centrale (RAM) très rapide volatile Périphériques Dispositifs de communication de l’ordinateur clavier, écran, enceintes, ports de communication, disques durs, etc.

7 Les langages de programmation
Deux groupes principaux : Langages de haut niveau (C, Ada, Pascal, Java, C++, C#, Python, …) fournissent des nombreuses constructions sophistiquées facilitent l’’écriture des programmes compréhensibles par les humains pas directement exécutables par les machines Devra être traduit en langage machine avant son exécution Langages de bas niveau les différents ensembles d’instructions propres à chaque machine appelés également langages cibles ou natifs codés en binaire et directement exécutables par chaque machine

8 Langage de haut niveau Composé de trois ensembles : types de données
décrire et modéliser les données ex. type int en Java sert à modéliser les nombres entiers règles de construction syntaxiques des instructions règles de formation textuelle des instructions et des programmes ex. écrire (1 ≤ x ≤ 7) en Java : (1 <= x && x <= 7) règles sémantiques précisent le comportement ou le sens des constructions syntaxiques ex. 4+3*2 équivaut en Java à la valeur entière 10 précisent les contraintes de cohérence entre types ex. "bonjour" * 2 est bien formée du point de vue de la syntaxe, mais pas du point de vue sémantique

9 La production des programmes (différentes phases)
Analyse et Conception : Préciser le problème à résoudre les données de départ et ce que l’on souhaite obtenir en résultat ? Raisonner sur la manière de représenter les données du problème une méthode de résolution énoncée sous forme de suite de pas à accomplir pour aboutir aux solutions : c’est l’algorithme de resolution du problème

10 La production des programmes (différentes phases)
Codage : traduire l’algorithme en langage de programmation sous forme de fichier texte (suite de caractères) -> code source du programme Mise au point : (plusieurs étapes répétées jusqu’à ce que le programme soit satisfaisant) Compilation traduire le code source du programme vers le langage natif de la machine (ou parfois vers du code intermédiaire) Le résultat est un nouveau fichier écrit en langage machine : code objet Cette étape comprend souvent également l’’édition de liens préparation du code objet pour l’exécution Tests exécution du code objet avec divers cas typiques des entrées (jeu de tests) Correction d’erreurs… Maintenance correction des erreurs apparues après la mise en service Évolution du programme pour l’adapter aux nouveaux besoins

11 La production des programmes (différentes phases)

12 Traducteurs de programmes
Logiciel de traduction des programmes écrits dans un langage instructions de haut niveau -> (+) instructions machine équivalentes Code source fichier texte avec les instructions à traduire Code cible fichier (binaire ou texte) résultat de la traduction Code objet fichier binaire avec des instructions machine Pseudo-code ou byte-code fichier texte contenant du code intermédiaire d’assez bas niveau non exécutable directement par la machine Il existe deux sortes de traducteurs : interprètes compilateurs

13 Compilateurs Réalisent les traitements suivants sur le code source :
Analyse syntaxique vérifie que le programme est correct d’après les règles de syntaxe. Typage vérifie la correction d’après les règles (sémantiques) de cohérence entre types Traduction chaque instruction du programme source est traduite vers plusieurs instructions du langage natif ou de pseudo-code (code intermédiaire) Le résultat de la compilation est un nouveau fichier dit de code cible du code machine pour la plupart des compilateurs du pseudo-code dans certains cas (ex. Java) : sera traduit avant exécution En cas d’erreurs, il faut corriger et relancer la compilation jusqu’à ce que le code cible puisse être génèré

14 Interpréteurs Pour chaque instruction du programme, ils réalisent, l’une après l’autre, traduction en code puis exécution. Inconvénients limite le type d’analyses réalisées sur le programme source autorise l’exécution d’un programme même s’il présente des erreurs de syntaxe ou de sémantique Avantage Beaucoup plus souple Mécanisme est bien adapté aux programmes pré-compilés vers du pseudo-code C’est le cas pour le byte-code Java

15 Compilation en Java Un des objectifs de Java, est de permettre l’écriture des programmes indépendants des plateformes matérielles d’exécution -> portable, mobile, distribué, … Dans ce contexte, la compilation vers du code natif n’a pas grand sens En Java, on compile vers un code intermédiaire (byte-code) identique pour tous les « ordinateurs » L’environnement d’exécution Java est équipé d’un interprète propre à chaque machine : la Machine Virtuelle Java (JVM) traduit (interprète) le byte-code vers du code natif et l’exécute le byte-code pourra être exécuté sur quelle machine munie d’une JVM

16 Compilation en Java

17 Le programme Bonjour /* Premier programme - enregistrer dans le fichier Bonjour.java - compiler par javac Bonjour.java - exécuter par java Bonjour */ public class Bonjour { public static void main (String[] args) { Terminal.ecrireStringln("Bonjour tout le monde !"); } Le texte entre /* et */ est un commentaire Le nom après public class est le nom du programme Dans cet exemple, c’est Bonjour Ce programme ne manipule qu’une donnée : le message « Bonjour tout le monde ! » Écrit dans un fichier du même nom que le programme, et complété de l’extension « java » le fichier Bonjour.java

18 Compilation et exécution
Création du fichier source Le code Java est mis dans un fichier nommé Bonjour.java Compilation Lancer la commande de compilation sur le fichier (commande javac) javac Bonjour.java La compilation réussit (pas d’erreurs). Le pseudo-code obtenu se trouve dans le fichier Bonjour.class dans répertoire courant n’est pas directement exécutable Interprétation + Exécution Appel de l’interprète de byte-code de la machine (commande java) java Bonjour Résultat : « Bonjour tout le monde ! » dans le terminal

19 L’exemple avec des erreurs
public classe Bonjour2 { public static void main (String[] args) { Terminal.ecrireStringln("Bonjour tout le monde ! » * 2); } erreur de syntaxe classe au lieu de class erreur de typage (sémantique) : Une chaîne de caractères (type String) ne peut être multiplié par 2 > javac Bonjour2.java Bonjour2.java:1: ’class’ or ’interface’ expected public classe Bonjour2 { ^ 1 error Le compilateur s’arrête à la première erreur trouvée (ligne 1)

20 L’exemple avec 1 erreur erreur de typage (sémantique) :
public class Bonjour2 { public static void main (String[] args) { Terminal.ecrireStringln("Bonjour tout le monde ! » * 2); } erreur de typage (sémantique) : Une chaîne de caractères (type String) ne peut être multiplié par 2 > javac Bonjour2.java Bonjour2.java:3: operator * cannot be applied to java.lang.String,int Terminal.ecrireStringln("Bonjour tout le monde !"*2); ^ 1 error

21 Analyse des problèmes
Déterminer le problème à résoudre : quelles sont les données d’entrée et leur nature ? quelles sont les données attendues en sortie et leur nature ? Déterminer la méthode : comment modéliser les données (d’entrée, de sortie, intermédiaires) ? quels sont les différents cas des entrées à traiter, et les cas échéant, quels sont les traitement associés ? exprimer sous-forme d’algorithme la manière d’obtenir le résultat final à partir des traitements sur les données d’entrée Correction, complétude et lisibilité a-t-on bien prévu tous les cas des entrées et sorties ? obtient-on dans chaque cas ce que l’on voulait calculer ? notre algorithme est-il compréhensible par quelqu’un d’autre ? Tests Elaborer un jeu de tests représentatif (valeurs typiques) de tous les cas possibles (univers) des entrées Confronter le fonctionnement de l’algorithme avec le jeu de tests proposé

22 Les algorithmes Un algorithme est un énoncé́ détaillé́ sous forme de pas à suivre NB : le niveau d’abstraction des pas dépend du langage utilisé ! Il s’agit d’une méthode générique de résolution d’un problème Exemple 1 : la feuille de déclaration d’impôts sur le revenu est accompagnée d’une description des opérations pour calculer le montant problème : calcul du montant de votre impôt les données : chiffres de vos salaires, charges, abattements, etc. algorithme : suite des calcule à réaliser sur les données résultat ou sortie : le montant de l’impôt NB : Il peut y avoir plusieurs méthodes pour résoudre un problème par exemple, on peut commencer par calculer le quotient familial, plutôt que par le calcul des abattements

23 Les algorithmes Exemple 2 : Une recette de cuisine Problème :
Préparation d’une omelette Données : 2 oeufs, Sel Un peu de matière grasse Algorithme : Casser les œufs dans un bol Y ajouter du sel Les battre Faire chauffer la matière grasse dans une poêle Verser le mélange des œufs dans la poêle et faire cuire doucement jusqu’à la consistance souhaitée

24 Exemple de construction
Problème : Calculer et afficher la conversion en francs d’une somme en euros saisie au clavier. Analyse : Déterminer le problème à résoudre : les entrées et leur nature ⇒ un nombre réel eu les sorties attendues ⇒ un réel fr tel que fr = eu ∗ 6.559 Déterminer la méthode : Modélisation des données : fr, eu modélisés par des nombres flottants (type double de Java) Algorithme : lire la valeur saisie pour eu calculer fr=eu×6.559 afficher le résultat final fr Jeu de tests : (eu ← 0.0, fr → 0.0) (eu ← 15.0, fr → 98.35) (eu ← −3.5, fr → − ) (eu ← 10, fr → 65.59)

25 Exemple de construction
Résultats de l’analyse : Données : entrées : eu nombre réel sortie : fr nombre réel Algorithme : lire eu calculer fr = eu * 6.559 afficher le résultat se trouvant dans fr public class Conversion { public static void main (String[] args) { double euros, francs; // Variables du programme Terminal.ecrireStringln("Entrez la somme en euros: "); // Message euros = Terminal.lireDouble(); // Lecture dans la variable euros francs = euros *6.559; // Calcul de la conversion // Affichage du resultat Terminal.ecrireStringln("La somme convertie en francs: "+ francs); }


Télécharger ppt "Introduction À l’algorithmique"

Présentations similaires


Annonces Google