1) Losange creux (7 points) 2) Que fais-je (5 points) - Insastras

Transcription

1) Losange creux (7 points) 2) Que fais-je (5 points) - Insastras
GE1 Informatique ; janvier 2004 ; DS ; Durée : 1h50
•
•
le devoir est noté sur 25. Les notes supérieures à 20 seront ramenées à 20.
Les notes personnelles de cours et TP, ainsi que les calculettes (inutiles) sont autorisées
1) Losange creux (7 points)
Ecrire un programme Java qui demande a l’utilisateur un entier n, et affiche un losange creux de taille n.
Exemples :
#
# #
#
# #
#
#
#
#
#
#
#
#
#
#
# #
#
# #
#
# #
#
1
2
3
4
----------- Avec des points pour marquer les espaces -----------
#
.#
#.#
.#
..#
.#.#
#...#
.#.#
..#
...#
..#.#
.#...#
#.....#
.#...#
..#.#
...#
1
2
3
4
OU
#
.#.
#.#
.#.
..#..
.#.#.
#...#
.#.#.
..#..
...#...
..#.#..
.#...#.
#.....#
.#...#.
..#.#..
...#...
1
2
3
4
2) Que fais-je (5 points)
Quels sont les résultats affichés par le programme Java ci-dessous :
public class Quoi2003GE1 {
public int truc;
public int chose;
public void fais(Quoi2003GE1 q) {
this.truc = q.chose;
this.chose = q.truc;
}
public static Quoi2003GE1[] init() {
Quoi2003GE1[] res = new Quoi2003GE1[2];
Quoi2003GE1 x = new Quoi2003GE1();
x.truc = 5;
x.chose = 7;
for (int i = 0 ; i < res.length ; i ++) {
res[i] = x;
}
return res;
}
public static void main(String[] args) {
Quoi2003GE1[] t = Quoi2003GE1.init();
t[0].fais(t[1]);
Console.println("Element 0 : truc = " + t[0].truc + " ; chose = " + t[0].chose);
Console.println("Element 1 : truc = " + t[1].truc + " ; chose = " + t[1].chose);
}
}
Donnez en quelques lignes, ou par un petit schéma, une explication à ce résultat.
3) Discothèque (13 points)
Un étudiant mélomane souhaite automatiser la gestion de sa discothèque.
A) une chanson est définie par un titre, un auteur, et une année de création.
Définir la classe Chanson en java comportant au moins les méthodes :
• entre : crée une chanson en demandant ses caractéristiques à l’utilisateur.
• egal : teste si deux chanson sont égales (deux chansons sont égales si elles ont même titre, auteur
•
et année de création).
toString : représentation textuelle d’une chanson sous la forme que vous voulez.
B) un CD est une collection de chanson (on n’interdit pas d’avoir deux fois la même chanson dans un
CD).
Définir la classe CD en java comportant au moins les méthodes :
• entre : crée un CD en demandant toutes ses chansons à l’utilisateur.
• contient : teste si une chanson apparaît dans un CD.
•
•
compilation : crée un nouveau CD contenant toutes les chansons de 2 CD.
toString : représentation textuelle d’un CD sous la forme que vous voulez.
C) une discothèque est une collection de CD.
Définir la classe Discothèque en java comportant au moins les méthodes :
• entre : crée une Discothèque en demandant tous ses CD à l’utilisateur.
• contient : teste si une chanson apparaît dans une Discothèque.
•
•
•
listeChansons : crée un tableau contenant toutes les chansons contenues dans une discothèque
(sans doublon : chaque chanson ne doit apparaître qu’une fois dans le tableau).
toString : représentation textuelle d’une Discothèque sous la forme que vous voulez.
test : demande à l’utilisateur d’entrer une nouvelle discothèque, et affiche la liste des chansons
contenues dans cette discothèque.
JBuilder - Filename = J:/Beuvron/dev/java/tps/src/fr/insa/beuvron/tps/interros/a2000/EnsembleEntier2.java
Printed on 22 septembre 2005 at 15:02 by FdB
Page 1 of 3
package fr.insa.beuvron .tps.interros .a2000 ;
import fr.insa.beuvron .tps.util.Console ;
/**
* Manipulation de base sur des ensembles (au sens mathématique : pas de doublons)
* d'entiers.
*
* <p> correspond a l'examen de la classe GE1 année 2003/2004 </p>
*
* <p> Deux implantation sont possibles : lors de l'ajout/suppression d'éléments,
* on peut soit modifier effectivement l'ensemble, soit créer un nouvel ensemble.
* Dans cette correction, on crée systématiquement un nouvel ensemble lors de
* l'ajout/suppression d'éléments.
* </p>
*
* @author François de Beuvron (INSA Strasbourg)
* @version 01/2004
*/
public class EnsembleEntier2 {
public int[] elems ;
/**
* cree un nouvel ensemble vide.
* @return l'ensemble vide
*/
public static EnsembleEntier2 creeVide () {
EnsembleEntier2 res = new EnsembleEntier2 ();
res.elems = new int[0];
return res;
}
/**
* cree un ensemble constitué d'un seul entier
* @param e l'entier à placer dans l'ensemble
* @return le nouvel ensemble (singleton) constitué du seul element e
*/
public static EnsembleEntier2 creeSingleton (int e) {
EnsembleEntier2 res = new EnsembleEntier2 ();
res.elems = new int[1];
res.elems [0] = e;
return res;
}
/**
* cree un nouvel ensemble en demandant ses éléments à l'utilisateur.
* @param mess un petit message affiché pour l'utilisateur avant d'entrer l'ensemble
* @return le nouvel ensemble
*/
public static EnsembleEntier2 entre (String mess) {
Console .println (mess);
int taille = Console .entreeInt ("nombre d'éléments : " );
EnsembleEntier2 res = new EnsembleEntier2 ();
res.elems = new int[taille ];
int nbr = 0;
while (nbr < taille ) {
int e = Console .entreeInt ("element N° " + nbr + " : " );
boolean deja = false ;
int i = 0;
while (!deja && i < nbr) {
deja = (res.elems [i] == e);
i = i + 1;
}
if (deja) {
Console .println ("Cet element existe deja dans l'ensemble. Donnez un autre élément"
}
else {
res.elems [nbr] = e;
nbr = nbr + 1;
}
}
return res;
}
/**
* nombre d'éléments dans l'ensemble.
);
JBuilder - Filename = J:/Beuvron/dev/java/tps/src/fr/insa/beuvron/tps/interros/a2000/EnsembleEntier2.java
Printed on 22 septembre 2005 at 15:02 by FdB
* @return le nombre d'éléments dans l'ensemble
*/
public int card() {
return this.elems .length ;
}
/**
* teste si un entier est présent dans un ensemble.
* @param e l'entier à tester
* @return vrai ssi e est dans this
*/
public boolean existe (int e) {
boolean res = false ;
int i = 0;
while (! res && i < this.elems .length ) {
res = (this.elems [i] == e);
i = i + 1;
}
return res;
}
/**
* ajoute un entier à un ensemble.
*
* <p> remarque : si l'élément e est déja contenu dans l'ensemble de départ, cette
* méthode retourne simplement l'ensemble de départ. Sinon, on crée un nouvel ensemble
* qui contient tous les éléments de l'ensemble de départ plus e.
* </p>
*
* @param e l'entier à ajouter à l'ensemble
* @return un ensemble constitué de l'ensemble de départ auquel on a ajouté l'élément e.
*/
public EnsembleEntier2 add(int e) {
EnsembleEntier2 res;
if(this.existe (e)) {
res = this;
}
else {
res = new EnsembleEntier2 ();
res.elems = new int[this.card() + 1];
for(int i = 0 ; i < this.card() ; i ++) {
res.elems [i] = this.elems [i];
}
res.elems [this.card()] = e;
}
return res;
}
public EnsembleEntier2 union (EnsembleEntier2 ee2) {
EnsembleEntier2 res = creeVide ();
for(int i = 0 ; i < this.card() ; i ++) {
res = res.add(this.elems [i]);
}
for(int i = 0 ; i < ee2.card() ; i ++) {
res = res.add(ee2.elems [i]);
}
return res;
}
public EnsembleEntier2 intersection (EnsembleEntier2 ee2) {
EnsembleEntier2 res = creeVide ();
for(int i = 0 ; i < this.card() ; i ++) {
if(ee2.existe (this.elems [i])) {
res = res.add(this.elems [i]);
}
}
return res;
}
public String toString () {
String res = "{";
for(int i = 0 ; i < this.card() ; i ++) {
res = res + this.elems [i];
if (i != this.card() - 1) {
res = res + ",";
}
}
res = res + "}";
return res;
Page 2 of 3
JBuilder - Filename = J:/Beuvron/dev/java/tps/src/fr/insa/beuvron/tps/interros/a2000/EnsembleEntier2.java
Printed on 22 septembre 2005 at 15:02 by FdB
}
public static void test() {
EnsembleEntier2 ee1 = entre ("entrez l' ensemble e1 : " );
EnsembleEntier2 ee2 = entre ("entrez l' ensemble e1 : " );
Console .println (ee1 + " union " + ee2 + " = " + ee1.union (ee2));
Console .println (ee1 + " intersection " + ee2 + " = " + ee1.intersection (ee2));
}
public static void main(String [] args) {
test();
}
}
Page 3 of 3
JBuilder - Filename = J:/Beuvron/dev/java/tps/src/fr/insa/beuvron/tps/interros/a2003/LosangeCreux.java
Printed on 19 septembre 2005 at 15:04 by FdB
package fr.insa.beuvron .tps.interros .a2003 ;
import fr.insa.beuvron .tps.tp2.*;
import fr.insa.beuvron .tps.util.Console ;
/**
* correspond a l'examen de la classe GE1 année 2003/2004
*
* exemples :
* <p>
* <pre>
*
#
*
# #
*
#
#
#
*
# #
#
#
*
#
#
#
#
#
*
# #
# #
# #
* #
#
#
#
*
* 1
2
3
4
*
* </pre>
* </p>
*
*
* @author François de Beuvron (INSA Strasbourg)
* @version 01/2004
*/
public class LosangeCreux {
public static char ETOILE = '#';
public static char BLANC = ' ';
/**
* première méthode de tracé d'un losange en calculant la distance de manhatan
* au centre du losange (dist = |x1-x2| + |y1-y2|)
* @param taille la taille du triangle
*/
public static String calDist (int taille ) {
String res="";
for(int i = 0 ; i < 2*taille -1 ; i ++) {
for(int j = 0 ; j < 2*taille -1 ; j ++) {
int distCentre = Math.abs(taille -1-i)+Math.abs(taille -1-j);
if (distCentre != taille -1) {
res = res + BLANC ;
}
else {
res = res + ETOILE ;
}
}
res = res + "\n";
}
return res;
}
/**
* deuxieme methode, ligne par ligne pour dessiner un losange creux
* @param taille la taille du triangle
*/
public static String cal(int taille ) {
String res = "";
// je dessine le triangle supérieur
for(int i = 0 ; i < taille ; i ++) {
// les espaces devant
for(int j = 0 ; j < taille - i - 1 ; j ++) {
res = res + BLANC ;
}
// la premiere étoile
res = res + ETOILE ;
// les espaces dans le losange, sauf pour la première ligne
if(i != 0) {
for(int j = 0 ; j < 2*i-1 ; j ++) {
res = res + BLANC ;
}
res = res + ETOILE ;
}
Page 1 of 2
JBuilder - Filename = J:/Beuvron/dev/java/tps/src/fr/insa/beuvron/tps/interros/a2003/LosangeCreux.java
Printed on 19 septembre 2005 at 15:04 by FdB
Page 2 of 2
res = res + "\n";
}
// je dessine le triangle inférieur
// c'est la meme chose que le triangle supérieur, mais en inversant l'ordre
// de tracé des lignes
for(int i = taille -2 ; i >= 0 ; i --) {
for(int j = 0 ; j < taille - i - 1 ; j ++) {
res = res + BLANC ;
}
res = res + ETOILE ;
if(i != 0) {
for(int j = 0 ; j < 2*i-1 ; j ++) {
res = res + BLANC ;
}
res = res + ETOILE ;
}
res = res + "\n";
}
return res;
}
/**
* permet de tracer une figure dont la taille est demandée à l'utilisateur
*/
public static void testSimple () {
int t = Console .entreeInt ("Taille du triangle : " );
Console .println (cal(t));
}
/**
* permet de tracer un ensemble de figure cote à cote dont la taille maximale
* est demandée à l'utilisateur. Cette méthode est utilisée en particulier
* pour le sujet du devoir.
*/
public static void testMultiple () {
int tailleMax = Console .entreeInt ("taille maximale des losanges : " );
ListeDessinsTexte test1 = new ListeDessinsTexte ();
for (int i = 1 ; i <= tailleMax ; i ++) {
test1 .add(new DessinTexte (cal(i),i,0));
}
Console .println (test1 .toTextualRep (4));
Console .println ("\n\n----------- Avec des points pour marquer les espaces -----------\n\n"
ListeDessinsTexte test3 = new ListeDessinsTexte ();
BLANC = '.';
for (int i = 1 ; i <= tailleMax ; i ++) {
test3 .add(new DessinTexte (cal(i),i,0));
}
test3 .add(new DessinTexte ("OU",""));
BLANC = '.';
test3 .add(new DessinTexte ("
" ));
for (int i = 1 ; i <= tailleMax ; i ++) {
test3 .add(new DessinTexte (calDist (i),i,0));
}
Console .println (test3 .toTextualRep (4));
}
//
}
public static void main(String [] args) {
testSimple();
testMultiple ();
}
);

Documents pareils