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