Université Paris 7 - Denis Diderot IF1 Corrigé du partiel du 25 Novembre 2006

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

Java Licence Professionnelle CISII,


INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

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

Corrigé des exercices sur les références

Programme Compte bancaire (code)

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

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

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

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

TP, première séquence d exercices.

V- Manipulations de nombres en binaire

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

as Architecture des Systèmes d Information

Package Java.util Classe générique

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

Programmation C++ (débutant)/instructions for, while et do...while

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

Logiciel de Base. I. Représentation des nombres

Recherche dans un tableau

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

Chapitre 10. Les interfaces Comparable et Comparator 1

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Algorithmique et Programmation, IMA

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

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

Programmation en langage C

Les bases de l informatique et de la programmation. École polytechnique

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Programmer en JAVA. par Tama

Les structures de données. Rajae El Ouazzani

Introduction au langage C

Langage Java. Classe de première SI

Notions fondamentales du langage C# Version 1.0

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

Rappels Entrées -Sorties

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

INF 321 : mémento de la syntaxe de Java

Représentation d un entier en base b

Cours de Systèmes d Exploitation

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

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

Claude Delannoy. 3 e édition C++

I. Introduction aux fonctions : les fonctions standards

Les arbres binaires de recherche

Principes des langages de programmation INF 321. Eric Goubault

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

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

ACTIVITÉ DE PROGRAMMATION

UE Programmation Impérative Licence 2ème Année

4. Groupement d objets

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Initiation à la programmation en Python

Solutions du chapitre 4

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

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

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Corrigés des premiers exercices sur les classes

Utilisation d objets : String et ArrayList

Programmation avec des objets : Cours 7. Menu du jour

Flux de données Lecture/Ecriture Fichiers

Cours d Algorithmique et de Langage C v 3.0

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

Licence Sciences et Technologies Examen janvier 2010

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

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

Représentation des Nombres

1 Recherche en table par balayage

6 - Le système de gestion de fichiers F. Boyer, UJF-Laboratoire Lig, Fabienne.Boyer@imag.fr

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Les algorithmes de base du graphisme

Le langage C. Introduction, guide de reference

Programmation C. J.-F. Lalande. 15 novembre 2012

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

MINIMUM. connaissances nécessaires à la programmation des microcontrôleurs PIC18 en langage C (une introduction au langage c A.N.S.

Algorithmique, Structures de données et langage C

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Conventions d écriture et outils de mise au point

Corrigé des TD 1 à 5

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

Projet de programmation (IK3) : TP n 1 Correction

1 Lecture de fichiers

Initiation à LabView : Les exemples d applications :

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

TP 1. Prise en main du langage Python

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

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

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

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

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Transcription:

Université Paris 7 - Denis Diderot IF1 Corrigé du partiel du 25 Novembre 2006 Exercice 1. Exécution à la main de la séquence Java : byte b1 = 111; byte b2 = 19; byte b3 = -108; Deug.println(b1 & b2); Deug.println(b1 b2); Deug.println(b1 ^ b2); Deug.println(b1 & b3); Deug.println(b1 b3); Deug.println(b1 ^ b3); on a : 111 = 2 6 + 2 5 + 2 3 + 2 2 + 2 1 + 2 0. La représentation binaire du nombre (111) 10 est donc 1101111. En tant que valeur d une variable de type byte, cette représentation est étendue à 8 bits en ajoutant un 0 à gauche, ce qui donne 01101111 ; on a : 19 = 2 4 + 2 1 + 2 0. La représentation binaire du nombre (19) 10 est donc 10011 et en tant que valeur d une variable de type byte, elle est étendue à 8 bits en ajoutant trois 0 à gauche, ce qui donne 00010011 ; pour trouver la représentation binaire de ( 108) 10 en tant que valeur de type byte, on commence par rechercher celle de (108) 10. On a : 108 = 2 6 + 2 5 + 2 3 + 2 2, ce qui sur huit bits donne 01101100. Le nombre ( 108) 10 est représenté en complément à 2 sur 8 bits. Cette représentation est obtenue en inversant les bits à la gauche du premier bit égal à 1 (à partir de la droite) dans la représentation précédente. Cela donne 10010100. Les calculs des valeurs obtenues par les opérations bit à bit donnent : b1 : 01101111 b1 : 01101111 b1 : 01101111 b2 : 00010011 b2 : 00010011 b2 : 00010011 b1&b2 : 00000011 b1 b2 : 01111111 b1^b2 : 01111100 b1 : 01101111 b1 : 01101111 b1 : 01101111 b3 : 10010100 b3 : 10010100 b3 : 10010100 b1&b3 : 00000100 b1 b3 : 11111111 b1^b3 : 11111011 Les valeurs décimales correspondantes affichées par la méthode println sont : pour b1&b2=00000011 : 3 (2 0 + 2 1 ) ; pour b1 b2=01111111 : 127 (2 6 + 2 5 + 2 4 + 2 3 + 2 2 + 2 1 + 2 0 ); pour b1^b2=01111100 : 124 (2 6 + 2 5 + 2 4 + 2 3 + 2 2 ) pour b1&b3=00000100 : 4 (2 2 ) pour b1 b3=11111111 : -1. Ici, le bit de gauche étant égal à 1, le nombre est négatif. On cherche la représentation du nombre positif opposé par complément à 2. Il s agit du nombre représenté par 00000001, c est-à-dire 1; pour b1^b3=11111011 : -5. Comme précedemment, il s agit d un nombre négatif dont le nombre positif opposé a comme représentation binaire le complément à 2 de 11111011, c est-à-dire 00000101 qui est la représentation binaire de 2 2 + 2 1. D où le résultat 5 affiché. Exercice 2. Exécution à la main de la séquence Java : int a = 10, b = 4, c; float x, y; c = a + 2 * b; a = a + 5; b = b + 2; Deug.println(a); Deug.println(b); Deug.println(c); c = a / b; x = a /b; Deug.println(c); Deug.println(x); y = b; x = a / y; Deug.println(x); La valeur ω d une variable correspond au fait qu elle est non initialisée. 1

affichage instruction a b c x y à l écran commentaire déclarations 10 4 ω ω ω c = a + 2 * b 10 4 18 ω ω a = a + 5 15 4 18 ω ω b = b + 2 15 6 18 ω ω Deug.println(a) 15 6 18 ω ω 15 Deug.println(b) 15 6 18 ω ω 6 Deug.println(c) 15 6 18 ω ω 18 c=a/b 15 6 2 ω ω division entière de 15 par 6 x=a/b 15 6 2 2.0 ω div. entière de 15 par 6, affectation à un float Deug.println(c) 15 6 2 2.0 ω 2 Deug.println(x) 15 6 2 2.0 ω 2.0 y=b 15 6 2 2.0 6.0 x=a/y 15 6 2 2.5 6.0 division réelle de 15 par 6.0 Deug.println(x) 15 6 2 2.5 3.0 2.5 Exercice 3. Programme de calcul des sièges obtenus Dans la solution donnée ici, en cas d égalité de voix entre listes, c est la première dans l ordre alphabétique qui est considérée comme gagnante. public class Exo3 { Deug.print("Nombre de sieges a pourvoir? "); int n = Deug.readInt(); Deug.print("Nombre de suffrages pour la liste 1? "); int a = Deug.readInt(); Deug.print("Nombre de suffrages pour la liste 2? "); int b = Deug.readInt(); Deug.print("Nombre de suffrages pour la liste 3? "); int c = Deug.readInt(); if( (n < 1) (a < 0) (b < 0) (c < 0)) { Deug.println("Donnees incorrectes"); Deug.exit(); int v = a + b + c ; // Nombre total de suffrages exprimés int q = v / n; // coefficient electoral Deug.println("Suffrages exprimes : " + v); Deug.println("Coefficient electoral : " + q); int s1 = a / q; // nombre de sieges automatique de la liste 1 int s2 = b / q; // nombre de sieges automatique de la liste 2 int s3 = c / q; // nombre de sieges automatique de la liste 3 int r = n - (s1 + s2 + s3); // nombre de sieges restants if (a >= b && a >= c) s1 = s1 + r ; else if (b >= c ) s2 = s2 + r ; else s3 = s3 + r ; Deug.println ("Methode de la meilleure liste"); Deug.println(" liste 1 : " + s1 + " siege(s)"); Deug.println(" liste 2 : " + s2 + " siege(s)"); Deug.println(" liste 3 : " + s3 + " siege(s)"); 2

Exercice 4. Calcul à la volée des sommes et produits des nombres positifs et négatifs dans une suite de nombres. class Exo4 { int nbpos = 0; // nombre de positifs lus int nbneg = 0; // nombre de negatifs lus int spos = 0; // la variable de calcul de la somme des nombres positifs int ppos = 1; // la variable de calcul du produit des nombres positifs int sneg = 0; // la variable de calcul de la somme des nombres positifs int pneg = 1; // la variable de calcul du produit des nombres positifs int x; // variable utilisé pour lire un nombre x = Deug.readInt(); while (x!= 0) { if(x > 0) { // le nombre lu est positif nbpos++; spos += x; // spos = spos +x; x est ajouté à la somme des (> 0) ppos *= x; // ppos = ppos +x; le produit des (> 0) est multiplie par x x = Deug.readInt(); // le nombre suivant est lu else { // le nombre lu est négatif nbneg++; sneg += x; // sneg = sneg +x; x est ajouté à la somme des (< 0) pneg *= x; // pneg = pneg +x; le produit des (< 0) est multiplie par x x = Deug.readInt(); // le nombre suivant est lu // le nombre qui a ete lu est nul. On affiche les valeurs et on termine if(nbpos == 0) ppos = 0; // aucun nombre positif lu => ppos est nul if(nbneg == 0) pneg = 0; // aucun nombre negatif lu => pneg est nul Deug.println("Somme des positifs : " + spos); Deug.println("Produit des positifs : " + ppos); Deug.println("Somme des negatifs : " + sneg); Deug.println("Produit des negatifs : " + pneg); Remarque : une solution élégante pour savoir si au moins un nombre positif (resp. négatif) a été lu, est de tester à la sortie de la boucle la valeur de spos (resp.sneg). Si cette valeur est nulle, aucun nombre positif (resp. négatif) n a été lu et il faut alors donner à ppos (resp. pneg) la valeur 0. 3

Exercice 5. 5.1. Méthode Java prenant en argument un tableau t d entiers et un entier n, et construisant sa représentation occurrentielle relativement à n avec lissage aux extrémités : static int[] repocc1(int[] tab, int n) { // declaration/allocation du tableau résultat // (éléments intialisés à 0 automatiquement) int[] occ = new int[n+1]; int i; // pour parcourir le tableau tab // parcours du tableau tab donne for(i = 0; i < tab.length; i++) { // si tab[i] est nul, on incremente occ[0] if(tab[i] <= 0) occ[0]++; // si tab[n] est >= n, on incremente occ[n] else if(tab[i] >= n) occ[n]++; // sinon, on incremente occ[tab[i]] else occ[tab[i]]++; return occ; 5.2. Méthode Java qui calcule la représentation occurrentielle optimale d un tableau. La représentation occurrentielle optimale est obtenue en prenant pour valeur de n la valeur du plus grand entier positif du tableau. La fonction valmax recherche le plus grand entier dans le tableau (si tous les éléments du tableau sont négatifs, la fonction renvoie 0). Le calcul de la représentation optimale est réalisée en appelant la fonction écrite précédemment avec cette valeur n. static int valmax(int[] tab) { int val = 0; for(int i = 0; i < tab.length; i++) if(tab[i] > val) val = tab[i]; return val; static int[] repocc2(int[] tab) { int n = valmax(tab); int[] occ = repocc1(tab, n); return occ; 5.3. Méthode Java qui trie un tableau d entiers en lissant les valeurs négatives sur 0 et en éliminant les répétitions. static int[] tabtrisansrep(int[] tab) { // construction de la représentation occurentielle optimale int [] occ = repocc2(tab); int taille; // la taille du tableau a construire // la taille du tableau est égale au nombre d éléments non nuls du tableau occ for(int i = 0; i < occ.length; i++) if(occ[i]!= 0) taille ++; int[] tab; // le tableau resultat tab = new int[taille]; // allocation du tableau resultat int pos = 0; // indice prochaine ecriture dans tab 4

// Parcours de la representation occurentielle optimale // Pour chaque element non nul, son indice est ecrit dans le tableau resultat for(int i = 0; i < occ.length; i++) if(occ[i] > 0) {tab[pos] = i; pos++; return tab; 5.4. Méthode qui affiche un tableau à raison de 20 valeurs par ligne et séparées par un espace. static void affichetab(int[] t) { for(int i = 0; i < t.length; i++) { Deug.print(t[i] + " "); if((i+1)%20 == 0) Deug.println(); Deug.println(); 5.5. Programme Java utilisant ces méthodes : class Exo5 { // recopier ici la definition de toutes les methodes precedentes int n; // la taille du tableau int[] t; // le tableau // lecture de la taille du tableau Deug.print("taille du tableau? "); n = Deug.readInt(); t = new int[n]; // allocation du tableau // lecture du tableau Deug.println("lecture du tableau "); for(int i = 0; i < n; i++){ Deug.print("t[" + i + "]? "); t[i] = Deug.readInt(); int val; // la valeur choisie pour construire la rep. occurrentielle // lecture de sa valeur Deug.print("lecture d un nombre postif ou nul? "); val = Deug.readInt(); while (val < 0){ Deug.print("lecture d un nombre positif ou nul? "); val = Deug.readInt(); // construction de la rep. occurrentielle de t associee a cette valeur int[] occ = repocc1(t, val); Deug.println("representation ocurrentielle pour " + val); affichetab(occ); // construction de la rep. occurrentielle optimale par appel à repocc2 occ = repocc2(t); Deug.println("representation ocurrentielle optimale"); affichetab(occ); // construction du tableau trie sans repetition // avec valeurs negatives identifiees a 0 int[] tri = tabtrisansrep(t); Deug.println("tableau trie sans repetition"); affichetab(tri); 5