Test annuel – Jahresprüfung - Informatique 1 – Informatik 1

Transcription

Test annuel – Jahresprüfung - Informatique 1 – Informatik 1
Name/Nom : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Klasse/Classe: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
T EST ANNUEL – J AHRESPRÜFUNG
Informatique 1 | Informatik 1
Anweisung / Consigne :
Lesen Sie die Fragen gut durch und beantworten Sie diese leserlich auf den Aufgabenblättern.
Für diese Prüfung dürfen Sie sind 2 Blätter (mit Vor- und Rückseite) mitnehmen, jedoch keine
elektronischen Hilfen.
Tipp: Verlieren Sie bei einzelnen Fragen nicht zu viel Zeit. Beantworten Sie zuerst die Fragen, die
Ihnen keine Probleme stellen, und kommen Sie später auf die für Sie schwierigeren Fragen zurück.
Die Skala ist unverbindlich
Lisez attentivement la donnée et répondez de manière lisible aux questions. Vous avez
droit pour cet examen à un aide-mémoire de 2 pages recto-verso. Aucun moyen électronique n’est permis.
Un conseil : ne restez pas bloqués sur une question. Répondez tout d’abord aux questions avec lesquelles vous êtes à l’aise et revenez ensuite aux questions posant problème. Le
barème indiqué est indicatif.
Question
Points
Bonus
Short questions
9
0
Code understanding
4
0
Sorting vectors
6
0
Rabbits recursions
8
0
Linked list
12
0
Counting occurrences in a file
6
0
A garden hierarchy
10
0
A static bonus
0
4
Total:
55
4
Score
This exam has 8 questions, for a total of 55 points.
Rev 1.0
P.A. Mudry, P. Roduit
Juni | Juin 2015
Page 1/16
25.6.2015
Leerseite
Cette page a été laissée vierge intentionnellement
Page 2/16
T EST ANNUEL – J AHRESPRÜFUNG
Question 1 – Short questions (9 points)
Diese Frage ist in verschiedene unabhängige Aufgaben unterteilt. Die Anzahl Punkte von jeder Aufgabe wird
am Rand vermerkt. Cette question est séparée en plusieurs exercices indépendants. Le nombre de point
pour chaque exercice est indiqué dans la marge.
[1 Pt]
(a) Geben Sie zwei Merkmale von rekursiven Methoden.
Donnez deux caractéristiques d’une fonction récursive.
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
[2 Pt]
(b) Gegeben sei folgende Funktion:
Soit la fonction suivante:
public static int bar(int n) {
if (n > 2){
int p = 1 + bar(n - 1) * (n - 1);
System.out.println(p);
return p;
}
else
return 1;
}
1
2
3
4
5
6
7
8
9
Was zeigt bar(4) an?
Qu’affiche bar(4) ?
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
[4 Pt]
(c) Wahr oder falsch? | Vrai ou faux ?
In der Bibliothek gdx2d wird die Methode onInit ein Mal jede Sekunde aufgerufen
Dans la librairie gdx2d, la méthode onInit est appelée une fois chaque seconde
True
False
Man kann eine Endlosschlaufe mit einem for schreiben
Il est possible de faire une boucle infinie avec un for
True
False
Der Kompiler entdeckt Fehler während der Ausführung des Programms
Le compilateur détecte les erreurs à l’exécution du programme
True
False
3 / 2 == 1
3 / 2 == 1
True
False
Man kann Attribute in einem Interface deklarieren, aber nicht in einer abstrakten Klasse
On peut déclarer des attributs dans une interface mais pas dans une classe
abstraite
True
False
Page 3/16
25.6.2015
[2 Pt]
Das Schlüsselwort super dient (unter anderem) dazu, den Konstruktor der Superklasse aufzurufen.
Le mot-clé super sert (entre autres) à appeler le constructeur de la super classe.
True
False
Eine statische Methode kann nicht rekursiv sein.
Une méthode statique ne peut pas être récursive.
True
False
Die Ausnahmen (Exceptions) dienen dazu, unkompilierbaren Kode zu schreiben
Les exceptions permettent d’écrire du code qui ne compile pas.
True
False
(d) Welche Resultate werden auf der Konsole angezeigt (beachten Sie die Leerzeichen) ?
Que va afficher la boucle suivante sur la console (attention aux espaces) ?
1
int foo = 10, bar = -4;
Lösung | Solution:
2
3
4
5
for (; 3 != 4;) {
foo >>= 1;
System.out.println(++bar + " - " + foo);
6
if (foo == bar)
break;
7
8
9
}
Question 2 – Code understanding (4 points)
[1 Pt]
(a) Zeigen Sie in folgender Klasse den Fehler, welcher deren Kompilation verhindert.
Considérez la classe suivante et indiquez l’erreur qui empêche la compilation.
1
2
class Frog {
int frogCount = 0;
3
public Frog() {
frogCount += 1;
}
4
5
6
7
public static void main(String[] args) {
Frog f1 = new Frog(); Frog f2 = new Frog(); Frog f3 = new Frog();
System.out.println("count = " + frogCount);
}
8
9
10
11
12
}
.................................................................................................
[3 Pt]
(b) Welche der folgenden Klassen- und Schnittstellendeklarationen sind gültig (einige Deklarationen werden
von nachfolgenden Deklarationen wiederverwendet)?
Parmi les déclarations de classe et d’interface suivantes, indiquer lesquelles sont valides (certaines
déclarations seront ré-utilisées par les déclarations qui les suivent) :
A. class Foo
B. class Bar implements Foo
C. interface Baz
D. interface Fi
E. interface Zee implements Foo
F. interface Zoo extends Foo
G. class Zoom implements Fi, Baz
H. class Toon extends Foo, Zoom
I. class Yow extends Foo implements Fi
Page 4/16
T EST ANNUEL – J AHRESPRÜFUNG
Question 3 – Sorting vectors (6 points)
Gegeben ist die Klasse Name: Soit la classe Name:
1
2
3
public class Name {
public String firstName, lastName;
}
Schreiben Sie eine statische Methode sort welche einen Vektor mit Namen (Vector<Name> names) erhält und
einen Namesvektor aufsteigend nach Alphabet sortiert wieder zurückgibt. Die Sortierung erfolgt in erster Linie
anhand des Nachnamens (lastName) und bei dessen Gleichheit anhand des Vornamens. Sie können die Methode
compareTo der Klasse String benutzen. Sie vergleicht zwei Zeichenketten alphabetisch und gibt -1 (davor), 0
(gleich) oder 1 (danach) zurück. Zum Beispiel hat äb".compareTo("bc") den Rückgabewert -1.
Écrivez une méthode statique sort qui reçoit un vecteur de nom (Vector<Name> names) et qui retourne un vecteur de noms où la liste des noms est triée par ordre alphabétique croissant. Le tri se base
tout d’abord sur le nom de famille (lastName) et, en cas d’égalité, la comparaison des prénoms est
faite. Vous pouvez utiliser la méthode compareTo de la classe String qui permet de comparer l’ordre
alphabétique de deux chaînes de caractères, retournant -1 (avant), 0 (égal) ou 1 (après). Par exemple
äb".compareTo("bc") retourne -1.
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
Page 5/16
25.6.2015
Question 4 – Rabbits recursions (8 points)
[4 Pt]
(a) Hasen sind Tiere mit einem hohen Reproduktionsrhythmus, welchen man mit den folgenden Regeln modellieren kann (die Realität wurde für diese Aufgabe leicht angepasst):
1. Die Hasen sterben nie.
2. Ein Hase erreicht seine Geschlechtsreife genau zwei Monate nach seiner Geburt (am Beginn seines
dritten Lebensmonats).
3. Am Anfang jedes Monats schenkt jedes erwachsene Männchen-Weibchen-Paar einem neuen MännchenWeibchen-Paar das Leben.
4. Wir beginnen mit einem Männchen-Weibchen-Paar, welches noch nicht geschlechtsreif ist.
Les lapins sont des animaux ayant un rythme reproductif très élevé que l’on peut modéliser à
l’aide des règles suivantes (adaptées de la réalité pour l’exercice):
1. Les lapins ne meurent jamais.
2. Un lapin atteint sa maturité sexuelle exactement deux mois après sa naissance (au début de
son troisième mois de vie).
3. Au début de chaque mois, chaque couple mâle-femelle mature donne naissance à un couple
mâle-femelle de lapins.
4. On commence avec un couple de lapins non matures (nouveaux-nés).
[1 Pt]
(b) Geben Sie die Grösse der Hasenpopulation für die ersten sechs Monate.
Donnez la population de lapins durant les 6 premiers mois.
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
Sie sollen einem Bauern helfen, die Grösse seiner Ställe zu bestimmen. Schreiben Sie dazu eine rekursive
Methode, welche die Grösse der Hasenpopulation anhand der Anzahl Monate bestimmt. Afin d’aider
un paysan à déterminer la taille de ses clapiers, on vous demande d’implémenter une méthode
récursive permettant de déterminer la taille de la population en fonction du nombre de mois.
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
Page 6/16
T EST ANNUEL – J AHRESPRÜFUNG
[3 Pt]
(c) Schreiben Sie eine rekursive Methode, welche die Anzahl Ohren anhand der Anzahl Hasen bestimmt.
Wegen genetischer defekte kommt jeder dritte Hase mit einem Ohr weniger auf die Welt (das heisst, die
Hasen 3, 6, 9, . . . ). Achtung, Ihre Funktion soll auch negative Eingaben akzeptieren können!
Écrivez une méthode récursive déterminant le nombre d’oreilles en fonction du nombre de lapin.
En raison d’un problème génétique, tous les trois lapins qui naissent ont une oreille en moins
(c’est-à-dire les lapins 3, 6, 9, . . . ). Attention, votre fonction doit pouvoir accepter un nombre négatif !
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
BTurn page →
Page 7/16
25.6.2015
Question 5 – Linked list (12 points)
Die nachsehenden Klassen erlauben die Implementierung einer verketteten Liste, die auf derjenigen Liste beruht,
die wir im Labor gesehen haben.
Les classes suivantes permettent l’implémentation d’une liste chaînée, basée sur celle que nous avons
vue pendant les laboratoires.
1
2
3
class Person {
public String name;
public int age;
4
public Person(String n, int a) {
name = n;
age = a;
}
5
6
7
8
9
}
10
11
12
13
class Node {
public Node next;
public Person item;
14
public Node(Person p, Node next) {
this.next = next;
item = p;
}
15
16
17
18
19
}
20
21
22
public class LinkedList {
public Node head;
23
public void add(Person p) {
head = new Node(p, head);
}
24
25
26
27
[1 Pt]
}
(a) Zuerst einige theoretische Fragen. | Tout d’abord quelques questions théoriques.
1) Der folgende Kode ist gültig: | Le code suivant est valide :
1
2
Node n1 = new Node(. . .);
n1.next.next.next.next.next;
Welches ist der Typ des Objects, welches auf de 2. Linie zurückgegeben wird?
Quel est le type de l’objet retourné à la 2ème ligne?
.............................................................................................
[1 Pt]
2) Weshalb ist es möglich, mehrere Aufrufe von next in einer Reihe zu verketten?
Pourquoi est-il possible de chaîner les appels de next à la suite?
.............................................................................................
.............................................................................................
.............................................................................................
[1 Pt]
3) Welches ist die Komplexität um ein Element am Anfang der Liste hinzuzufügen? Und am Ende?
Quelle est la complexité d’un ajout d’un élément en début de liste? Et en fin de liste?
.............................................................................................
Page 8/16
T EST ANNUEL – J AHRESPRÜFUNG
[3 Pt]
(b) Geben Sie den Kode um folgende Liste (list) zu erzeugen, ohne dabei neue Methoden hinzuzufügen:
Sans ajouter de nouvelles méthodes, donnez le code pour créer la liste suivante (list):
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
(c) Man möchte eine Methode hinzufügen, um Personen herauszufiltern, deren Alter eine gewisse Grenze nicht
übersteigt. Diese Methode soll den folgenden Prototypen haben:
On désire ajouter une méthode permettant d’extraire les personnes dont l’âge est inférieur à une
certaine limite. Cette méthode doit avoir le prototype suivant:
1
public LinkedList adults(int limit)
1) Zu welcher Klasse müssen Sie diese Methode hinzufügen? Begründen Sie kurz Ihre Antwort
Dans quelle classe devez-vous ajouter cette méthode? Justifiez brièvement votre réponse
[1 Pt]
.............................................................................................
.............................................................................................
2) Schreiben Sie den Code für diese Methode: Donnez le code requis pour cette méthode :
[5 Pt]
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
.............................................................................................
Page 9/16
25.6.2015
Question 6 – Counting occurrences in a file (6 points)
Man möchte zählen, wie oft ein bestimmtes Wort in einer Datei auftaucht und auf welchen Zeilen. Der Prototyp
dieser Funktion sieht wie folgt aus:
On désire compter le nombre de fois qu’apparaît un mot donné dans un fichier ainsi que les lignes
auxquelles ces occurrences arrivent. Le prototype de votre fonction doit être le suivant:
1
public static WordInfo findWord(String word, String filePath, boolean ignoreCase)
Der letzte Parameter dient dazu, um anzugeben ob Ihre Methode die Gross-/Kleinschreibung beachten soll oder
nicht. Falls dieser Wert wahr ist, soll Ihr Kode den Unterschied zwischen Gross- und Kleinschreibung ignorieren.
Für den Rückgabewert ist folgende Klasse gegeben:
Le dernier paramètre est pour indiquer si votre méthode doit prendre en compte la casse (majuscules/minuscules) du mot ou non. Si cette valeur est vraie, votre code doit ignorer les différences majuscules/minuscules. Pour la valeur de retour, nous vous fournissons la classe suivante:
1
2
3
4
5
class WordInfo{
String word;
int nOccurences;
Vector<Integer> lines = new Vector<Integer>();
}
Diese Klasse soll das gesucht Wort, die Häufigkeit des Worts in der Datei sowie die Zeilen auf denen es auftaucht,
enthalten.Zur Vereinfachung betrachten wir nur ein Auftreten pro Zeile. Als Referenz, hier ein Beispiel, wie ein
stream gelesen wird:
Cette classe devra contenir le mot recherché, le nombre de fois qu’il apparaît dans les fichiers ainsi que
les lignes auxquelles il apparaît. Comme simplification, nous considérons que nous sommes intéressés
à une seule occurrence par ligne au maximum. Pour référence, voici un exemple de lecture d’un stream:
1
2
3
try {
BufferedReader bf = new BufferedReader(new FileReader(new File("test.txt")));
String line = bf.readLine();
4
while (line != null) {
System.out.println(line);
line = bf.readLine();
}
5
6
7
8
9
bf.close();
} catch (Exception e) {
e.printStackTrace();
10
11
12
13
}
Page 10/16
T EST ANNUEL – J AHRESPRÜFUNG
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
......................................................................................................
Page 11/16
25.6.2015
Question 7 – A garden hierarchy (10 points)
[8 Pt]
(a) Ein Gärtner möchte die verschiedenen Pflanzen seiner Plantage mit einem Programm verwalten. Schreiben
Sie die Klassen mit den Methoden und Attributen, die folgende Funktionalitäten garantieren:
• Seine Pflanzen sind in 3 Kategorien unterteilt: Bäume (Tree), Blumen (Flower) und Gemüse (Vegetable).
• Bäume unterteilen sich in 2 Unterkategorien: fruchttragende Bäume (FruitTree) und Zierbäume
(DecorativeTree).
• Jede Pflanze besitzt einen Namen, welcher nur währen der Instanziierung verändert werden kann und
auf den durch die Funktion getName() zugegriffen werden kann.
• Alle Pflanzen besitzen eine Kategorie (Flower, Vegetable, Fruit Tree und Decorative Tree) gespeichert als String und zugreifbar nur über die Methode getCategory().
• Im Falle des Gemüses erlaubt es ein zusätzliches Attribut zu wissen, ob die Pflanze Knollen (Tuber)
produziert oder nicht. Dieses Attribut darf nach der Instanziierung nicht mehr verändert werden können.
• Wenn die Instanz einer Pflanze als Argument an die Methode System.Out.Println() übergeben
wird, soll die Konsole die Kategorie gefolgt vom Namen der Pflanze anzeigen. Zum Beispiel : Fruit
Tree: apple-tree. Im Falle des Knollengemüses soll diese Eigenschaft zusätzlich angezeigt werden
(e.g. Vegetable : potato plant, produces tubers.
• Blumen besitzen ein zusätzliches Attribut mit ihrer Farbe, welches bei der Instanziierung geschrieben
werden soll und überall zugänglich ist.
• Bäume besitzen ein Attribut mit der Farbe ihres Stammes, welches nur über die Methode getTrunkColor()
zugänglich ist.
• Die Farben werden als String gespeichert.
• Nur die Unterkategorien dürfen instantiierbar sein (Flower, Vegetable, Fruit Tree und Decorative
Tree).
• Der Kode sollte so wenig wie möglich dupliziert werden.
• Benutzen Sie die Konstruktoren der Super-Klassen so oft wie möglich.
Un horticulteur veut créer un programme pour pouvoir gérer les différentes plantes qui existent
dans ses plantations. Écrivez les classes contenant les méthodes et les attributs permettant de
garantir les fonctionalités suivantes:
• Ses plantes se subdivisent en 3 sous catégories: les arbres (Tree), les fleurs (Flower) et les
plantes potagères (Vegetable).
• Les arbres se séparent en 2 sous catégories: les arbres fruitiers (FruitTree) et les arbres décoratifs (DecorativeTree).
• Toutes les plantes possèdent un nom qui n’est modifiable que durant l’instanciation et qui ne
peut être accédé que par une méthode getName().
• Toutes les plantes possèdent une catégorie (Flower, Vegetable, Fruit Tree et Decorative
Tree) stockée sous la forme d’un String et qui n’est accessible que par la méthode getCategory().
• Dans le cas des plantes potagères, un attibut supplémentaire permet de savoir si la plante produit des tubercules (Tuber) ou non. Cet attribut ne doit plus être modifiable après
l’instanciation.
• Quand l’instance d’une plante est passée en argument de la méthode System.out.println(),
le terminal doit afficher la catégorie, suivie par le nom de la plante, par exemple : Fruit Tree:
apple-tree. Dans le cas des plantes potagères à tubercules, le terminal doit afficher en prime
cette particularité (e.g. Vegetable : potato plant, produces tubers.
• Les fleurs possèdent un attribut supplémentaire correspondant à la couleur, qui doit être inscrite lors de l’instanciation et qui est accessible partout.
• Les arbres possèdent un attribut contenant la couleur du tronc, et qui n’est accessible que par
une méthode getTrunkColor().
• Les couleurs sont stockées sous forme de String.
• Uniquement les sous-catégories doivent être instanciables (Flower, Vegetable, Fruit Tree et
Decorative Tree).
• Le code doit le moins possible être dupliqué.
• Utilisez les constructeurs des super-classes au maximum.
Page 12/16
T EST ANNUEL – J AHRESPRÜFUNG
Page 13/16
25.6.2015
(b) Schreiben Sie den Kode, welcher einen Apfelbaum (Apple-tree), eine Birke (Birch), eine Kartoffelpflanze (Potato plant), sowie Rosen (Garden roses) instantiiert.
[2 Pt]
Écrivez le code qui permet d’instancier un pommier (Apple-tree), un bouleau (Birch), un plant de
pommes-de-terre (Potato plant), ainsi que des roses (Garden roses).
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
Question 8 – A static bonus (0 points)
Gegeben sind die folgenden Funktionen:
Soient les fonctions suivantes:
1
2
3
4
5
6
public static int foo(int a, int b) {
if (a > b)
return bar(b, a - b);
else
return bar(b - a, a);
}
7
8
9
10
11
12
13
14
15
public static int bar(int b, int a) {
if (b > a || b == 0)
return a;
if (a % b == 0)
return foo(b, a);
else
return foo(a, b);
}
Was ist der Wert für:
Quelle est la valeur de :
[1 (bonus)]
(a) bar(7,2)
(a)
[1 (bonus)]
(b) bar(4,4)
(b)
[1 (bonus)]
(c) bar(3,4)
(c)
[1 (bonus)]
(d) bar(11,26)
(d)
Page 14/16
T EST ANNUEL – J AHRESPRÜFUNG
Leerseite
Cette page a été laissée vierge intentionnellement
Page 15/16
25.6.2015
Fin|Ende
The end
Page 16/16