Enseignement de spécialité Informatique et sciences du numérique Formation des IA-IPR et chargés de mission Atelier de programmation 2



Documents pareils
Chapitre 10. Les interfaces Comparable et Comparator 1

Recherche dans un tableau

Corrigés des premiers exercices sur les classes

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

V- Manipulations de nombres en binaire

Le chiffre est le signe, le nombre est la valeur.

Initiation à la programmation en Python

TP 1. Prise en main du langage Python

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Utilisation d objets : String et ArrayList

a) b)

Programmer en JAVA. par Tama

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Utiliser un tableau de données

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Un ordonnanceur stupide

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Exercices sur les interfaces

Java Licence Professionnelle CISII,

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Cours 1 : Qu est-ce que la programmation?

TD3: tableaux avancées, première classe et chaînes

La mémoire. Un ordinateur. L'octet. Le bit

Cours d initiation à la programmation en C++ Johann Cuenin

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

1 Recherche en table par balayage

Algorithme. Table des matières

Cours 14 Les fichiers

Chapitre VI- La validation de la composition.

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Définitions. Numéro à préciser. (Durée : )

Gestion distribuée (par sockets) de banque en Java

Programmation en Java IUT GEII (MC-II1) 1

Programmation Objet Java Correction

Représentation d un entier en base b

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

IV- Comment fonctionne un ordinateur?

GOL502 Industries de services

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Premiers Pas en Programmation Objet : les Classes et les Objets

Cours 1 : La compilation

EXCEL TUTORIEL 2012/2013

REALISATION D UNE CALCULATRICE GRACE AU LOGICIEL CROCODILE CLIPS 3.

Conventions d écriture et outils de mise au point

Présentation du langage et premières fonctions

Programmation avec des objets : Cours 7. Menu du jour

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Poker. A rendre pour le 25 avril

Généralités sur le Langage Java et éléments syntaxiques.

Notions fondamentales du langage C# Version 1.0

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Bases de programmation. Cours 5. Structurer les données

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Structurer ses données : les tableaux. Introduction à la programmation

Cours 1: Java et les objets

RMI le langage Java XII-1 JMF

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Langage Java. Classe de première SI

Apprendre Java en 154 minutes

Cours Programmation Système

Les arbres binaires de recherche

Résolution de problèmes à distance

Techniques d accueil clients

Activité 4. Tour de cartes Détection et correction des erreurs. Résumé. Liens pédagogiques. Compétences. Âge. Matériels

TD/TP PAC - Programmation n 3

IFT2880 Organisation des ordinateurs et systèmes

Citizenship Language Pack For Migrants in Europe - Extended FRANÇAIS. Cours m ultim édia de langue et de culture pour m igrants.

Plan du cours. Historique du langage Nouveautés de Java 7

Travaux Dirigés n 1 : chaînes de caractères

Soit la fonction affine qui, pour représentant le nombre de mois écoulés, renvoie la somme économisée.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

1. Ouvrir un compte. 1 Ouverture de compte. I. Prendre un rendez-vous dans une banque. 4 ouvrir un compte 1

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Solutions du chapitre 4

Programmation Par Objets

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

TP, première séquence d exercices.

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

Chap III : Les tableaux

Programmation Objet I

TD3 - Facturation avec archivage automatisé

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

TD/TP PAC - Programmation n 3

Traduction des Langages : Le Compilateur Micro Java

Programme d Accès Communautaire / Atelier 4 Initiation à Microsoft Excel PLAN DE COURS 3 MICROSOFT EXCEL 4 LANCER EXCEL 4

Quelques éléments de compilation en C et makefiles

Programmation Orientée Objet Java

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

1 Introduction au codage

Transcription:

Enseignement de spécialité Informatique et sciences du numérique Formation des IA-IPR et chargés de mission Atelier de programmation 2 David Pichardie, Luc Bougé Mardi 15 mars Nous utiliserons pour cet atelier l environnement Javascool. Dans un premier temps, il convient de vous familiariser avec cet environnement. 1. Télécharger et lancer l application Javascool (http://javascool.gforge.inria.fr/, onglet lancement). 2. Choisir l activité Découvrir les ingrédients des algorithmes. 3. Réaliser les exercices qui suivent, ou bien commencer par suivre le parcours d initiation proposé par Javascool. Ce premier atelier vous propose 3 niveaux d activités de difficulté croissante. Choisissez un niveau en fonction de votre familiarité avec la programmation. Activité I. Premiers pas en programmation Nous allons programmer un système expert rudimentaire qui dialoguera avec l utilisateur et adaptera son discours aux réponses de l utilisateur. Voici un exemple de conversation entre le système et l utilisateur. Dans l exemple suivant, chaque entrée de l utilisateur est précédée du texte [Entrée :]. Bonjour! Quel est votre nom? [Entrée :] Haddock C'est noté. Et votre prénom? [Entrée :] Archibald Êtes-vous un homme ou une femme? [Entrée :] homme Désolé, je n'ai pas compris votre réponse. Êtes-vous un homme ou une femme? [Entrée :] un homme Parfait. Je suis enchanté de faire votre connaissance M. Archibald Haddock. Est-ce indiscret de vous demander votre âge? [Entrée :] non 1

Dans ce cas, quel âge avez-vous M. Haddock? [Entrée :] 45 Félicitations vous êtes dans la force de l'âge! Savez-vous que je suis excellent en calcul mental? Proposez-moi un grand nombre s'il vous plaît. [Entrée:] 3 Ah, c'est bien petit 3! Ne pouvez-vous pas me proposer un nombre un peu plus grand? [Entrée:] 337 C'est mieux. Je le note. Proposez-moi un autre grand nombre s'il vous plaît. [Entrée:] 3456 C'est noté. Et bien... 337 fois 3456 font 1164672! Je vous sens impressionné... Je suis aussi capable de compter très vite! Jusqu'à combien voulez-vous que je compte? [Entrée:] 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Merci pour ce bon moment. A bientôt Archibald. Exercice I.1. Proposez un programme Javascool permettant d obtenir ce type de conversation en tenant compte des différentes réponses de l utilisateur (sexe, âge, etc.), et en validant le format des réponses données. Par exemple, lorsqu on attend une réponse oui ou non, toute autre réponse doit être refusée. Remarque. Attention! Pour tester l égalité de deux chaînes, il ne faut pas utiliser l opération ==. En effet, celle-ci teste l identité des deux chaînes et non le fait qu elles soient formées des mêmes caractères. Il faut utiliser une fonction appelée equal. String s = readstring(); if (equal(s, "Haddock"))... 2

Exercice I.2. Pour le produit de deux nombres, ne peut-on pas pousser le système à la faute en lui proposant des nombres trop grands à multiplier? Comment filtrer les entrées de l utilisateur pour remédier à ce problème? Pour éviter une saisie fastidieuse des phrases précédentes, vous pouvez copier-coller les phrases placées dans la version Javascool de cet énoncé. Activité II. Premiers pas en programmation des tableaux Nous nous intéressons maintenant à la manipulation des anagrammes de mots. Étant donné une collection de mots donnée sous forme d un tableaux de chaînes de caractères, nous laissons l utilisateur proposer un mot et nous l informons des différents anagrammes de ce mot qui sont présents dans la collection. Exemple. Supposons que le tableau initial soit le suivant 1 : String[] choixanagrammes = { "marion", "aimer", "badinage", "niche", "aspirine", "chine", "aspirine", "aube", "baignade", "chien", "manoir", "beau", "romain", "imaginer", "parisien", "migraine", "marie"} L utilisateur est invité à saisir un mot. Proposez-moi un mot! [Entrée :] beau aube est un anagramme de beau beau est un anagramme de beau nombre d'anagrammes : 2 Afin de réaliser un tel programme, nous allons devoir tester si un mot est un anagramme d un autre. Pour ce faire, nous vous proposons de manipuler les chaînes de caractères comme des tableaux de caractères. La fonction char[] chaineverslettres(string s) vous permet d obtenir le tableau de caractères correspondant à une chaîne de caractère. Le type char est un type Java primitif qui représente les caractères. Contrairement aux chaînes, on peut utiliser les opérateurs de comparaisons arithmétiques usuels pour comparer deux caractères selon leur position dans l alphabet. Nous vous proposons une deuxième fonction String lettresverschaine(char[] t) qui permet de reformer une chaîne à partir d un tableau de caractères pour pouvoir l imprimer. Pour tester si un mot est un anagramme d un autre nous allons trier chacun des deux mots en utilisant l ordre alphabétique puis vérifier si nous obtenons la même séquence de 1 Il vous sera nécessaire de recopier cette déclaration de tableau pour faire l exercice. Un copier-coller à partir de l énoncé fourni dans Javascool sera certainement la façon la plus rapide de le faire. 3

lettres. Par exemple, si nous trions "beau" et "aube" nous obtenons dans les deux cas "abeu" ce qui nous assure que ce sont des anagrammes. Dans un premier temps, nous vous proposons d utiliser les fonctions de la bibliothèque standard de Java pour faire ce tri. On peut par exemple utiliser : void java.utils.arrays.sort(char[] t) Exemple. Le programme suivant affiche "abeu". char[] t = chaineverslettres("beau"); java.util.arrays.sort(t); echo(lettresverschaine(t)); Exercice II.1. Écrire une fonction String normalise(string s) qui prend en entrée une chaîne s et renvoie une nouvelle chaîne obtenue en triant par ordre alphabétique les lettres de s. Exercice II.2. Écrire une fonction boolean testanagramme(string s1, String s2) qui teste si deux chaîne s1 et s2 sont anagrammes l une de l autre grâce à un tri. Exercice II.3. Proposer un programme pour interagir avec l utilisateur selon le scénario proposé plus haut. Nous allons maintenant tenter d écrire notre propre fonction de tri. void triselection(char[] t) Exercice II.4. Écrire tout d abord une fonction void permute(char[] t, int i, int j) qui échange les caractères à la position i et j dans le tableau t. On suppose que i et j sont des indices valides dans t. Exercice II.5. Écrire une fonction int indexmin(char[] t, int i) qui calcule l indice de la plus petite lettre (pour l ordre alphabétique) de t, entre les indices i et t.length 1. Exercice II.6. Écrire une fonction void triselection(char[] t) qui échange les lettres du tableau t pour les mettre dans l ordre alphabétique. 4

Activité III. Réapprendre à compter comme à l'école Dans cette activité, nous vous proposons de réapprendre à compter en expliquant à l ordinateur comment poser et résoudre les opérations arithmétiques élémentaires : addition, multiplication, soustraction, division. Nous allons pour cela manipuler les nombres comme des tableaux de chiffres décimaux. Dans un deuxième temps nous vous proposons d adapter ces programmes à l arithmétique binaire en manipulant cette fois des tableaux de bits. Nous manipulerons pour cette activité le type Chire suivant. enum Chire { ZERO, UN, DEUX, TROIS, QUATRE, CINQ, SIX, SEPT, HUIT, NEUF } Un nombre sera manipulé sous la forme d un tableau de valeurs de type Chire. Pour résoudre les opérations arithmétiques élémentaires, il faut connaître ses tables d addition et de multiplication. Ces tables vous sont fournis sous la forme du type NombreA2Chires qui encapsule un chiffre des dizaines et un chiffre des unités. Ce type abstrait est munis des opérations suivantes : Chire unite(nombrea2chires n) renvoie le chiffe des unités d un nombre n. Chire dizaine(nombrea2chires n) renvoie le chiffe des dizaines d un nombre n. NombreA2Chires nb(chire dizaine, Chire unite) fabrique un nombre à partir d un chiffre dizaine des dizaines et unite des unités. NombreA2Chires plus(nombrea2chires x, NombreA2Chires y) renvoie le nombre obtenu en faisant la somme des deux nombres x et y. NombreA2Chires moins(nombrea2chires x, NombreA2Chires y) renvoie le nombre obtenu en faisant la différence des deux nombres x et y si x est plus grand que y et renvoie une erreur sinon. NombreA2Chires plus(nombrea2chires x, NombreA2Chires y) renvoie le nombre obtenu en faisant le produit des deux nombres x et y. Ces trois dernières opérations ignorent le chiffre des centaines. Les valeurs de types Chire et NombreA2Chires peuvent être affichées avec les fonctions println et echo habituelles sous Javascool. Nous fournissons de plus une fonction String nombreverschaine(chire[] nombre) qui permet d afficher un nombre représenté par un tableau de chiffre. Exemple. echo(plus(nb(un,trois),nb(deux,quatre))); provoque l affichage 37 Exemple. Le tableau nombre suivant peut être affiché avec les instructions : Chire[] nombre = { ZERO, TROIS, HUIT }; System.out.println(nombreVersChaine(nombre)); pour produire l affichage 038. Exercice III.1. Écrire une fonction Chire[] addition(int taille, Chire[] n1, Chire[] n2) 5

qui construit le tableau de chiffre résultant de l addition des nombres n1 et n2, ces nombres étant représentés par des tableaux de taille taille. Le résultat de l addition devra être exprimé dans un tableau de même taille et une erreur devra être lancée si cela n est pas possible. Pour réaliser un test et lancer une erreur en cas d échec, javascool propose une fonction particulière void assertion(boolean test, String message) Si l argument test est vrai, l exécution continue sans afficher de message particulier, sinon toute l exécution courante se termine avec le message d erreur proposé en argument. Exercice III.2. Écrire une fonction Chire[] multiplication(int taille, Chire[] n1, Chire[] n2) qui calcule le tableau de chiffres résultant de la multiplication des nombres n1 et n2. Ces nombres sont représentés par des tableaux de taille taille. Le résultat de la multiplication devra être exprimé dans un tableau de même taille et une erreur devra être lancée si cela n est pas possible. Exercice III.3. Écrire une fonction Chire[] soustraction(int taille, Chire[] n1, Chire[] n2) qui calcule le tableau de chiffre résultant de la soustraction des nombres n1 et n2. Ces nombres sont représentés par des tableaux de taille taille. Le résultat de la soustraction devra être exprimé dans un tableau de même taille et une erreur devra être lancée si n1 n est pas supérieur ou égal à n2. Pour cette fonction, il sera utile d utiliser la fonction boolean estpluspetit(nombrea2chires x, NombreA2Chires y) pour tester si un nombre à deux chiffres x est inférieur ou égal à un autre nombre à deux chiffres y. Exercice III.4. [Pour les programmeurs Java] Reprendre les questions précédentes en manipulant cette fois des tableaux de bits. Un bit pourra être représenté par un simple booléen. 6