Test intermédiaire – Zwischenprüfung

Werbung
Name/Nom : . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Klasse/Classe: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
T EST INTERMÉDIAIRE – Z WISCHENPRÜFUNG
Informatique 1 | Informatik 1
Anweisung / Consigne :
Lesen Sie die Fragen gut durch und beantworten Sie diese leserlich auf den Aufgabenblättern. Alle
Hilfsmittel (Dokumentation, Kurs, etc.) sind erlaubt, 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. Toute documentation est utilisable mais aucun moyen électronique ne l’est.
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
Conditions
4
0
Random numbers
3
0
Loops analysis
6
0
Function analysis
4
0
Function synthesis
8
0
A christmas tree
5
0
Bisection method
6
0
Total:
45
0
Score
This exam has 8 questions, for a total of 45 points.
Rev 1.0 – svn 688
P.A. Mudry, P. Roduit
Novembre | November 2013
Page 1/12
7.11.2013
Leerseite
¦
Cette page a été laissée vierge intentionnellement
Page 2/12
T EST INTERMÉDIAIRE – Z WISCHENPRÜFUNG
Question 1 – Short questions (9 points)
[3 Pt]
Diese Frage ist in verschiedene selbständige 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.
(a) Gegeben sind die folgenden Deklarationen : | Soient les déclarations suivantes :
double foo
String bar
int foobar
long baz =
= 2.6;
= "2.1f";
= (int) foo;
0xcafe;
Geben Sie an, ob die nachstehenden Ausdrücke korrekt sind oder nicht. Wenn sie korrekt sind, bestimmen Sie
den Typ und den Wert. Zur Erinnerung, der Wert von ’a’ ist 97.
Indiquez si les expressions suivantes sont correctes. Si elles sont correctes, donnez le type et la
valeur des expressions suivantes. Pour rappel, la valeur de ’a’ est 97.
(a) 3 + bar
(a)
(b)
bar - 2
(b)
(c)
foo + foobar
(c)
(d)
baz >> 12 << 1
(d)
(e)
foo > (int) foo ? 1.1f : 0.1f
(e)
(f)
(char)(’a’ + 19 / 12 + 2 * (int) 45 % 4)
(f)
[4 Pt]
(g) Wahr oder falsch ? | Vrai ou faux ?
float Zahlen werden nicht binär im Speicher abgespeichert.
Les float ne sont pas stockés en binaire dans la mémoire.
True
False
Die Etappe der Kompilation entspricht der Ausführung eines Programms welchen in
Maschinensprache geschrieben ist.
L’étape de compilation correspond à l’exécution d’un programme écrit en
language machine.
True
False
Die Kommentare können sich nur im innern eines Blocks befinden.
Les commentaires ne peuvent se trouver qu’à l’intérieur d’un bloc.
True
False
Der Code a = b bedeutet, dass die Variablen a und b der gleichen Variable entsprechen.
Le code a = b signifie que les variables a et b correspondent à la même variable.
True
False
Eine explizite Umwandlung bedeutet, dass man explizit der Typ des Resultats der
Umwandlung angibt.
Une conversion explicite signifie que l’on indique explicitement le type du
résultat de la conversion.
True
False
Die Operatoren &&, || und ! können nur für binäre Werte benutzt werden.
Les opérateurs &&, || et ! ne peuvent être utilisés que sur des valeurs binaires.
True
False
Page 3/12
7.11.2013
[2 Pt]
Wenn die Funktion main leer ist, bringt die Ausführung des Programms nicht.
Si la fonction main est vide, l’exécution du programme ne produit rien.
True
False
Ein if benötigt einen Ausdruck vom Typ Ganzzahlen (int, short, . . . ) damit dieser
funktioniert.
Un if requiert une expression de type entier (int, short, . . . ) pour fonctionner
True
False
(h) Gesucht ist der Wert der folgende Ausdrücke :
Donnez la valeur des expressions suivantes :
1) 0xface & 0b0 | 0xbabe - 4
1)
2) ((char)(’z’ - 1) + "e") + ’s’
2)
Question 2 – Conditions (4 points)
Schreiben Sie den Code welcher folgenden Bedingungen entspricht :
Écrivez le code correspondant aux conditions suivantes :
(a) Die Variable bar ist nicht null oder die Variable foo ist null.
La variable bar n’est pas nulle ou la variable foo est nulle.
(b) Eine Variable vom Typ char namens y entspricht einem Kleinbuchstaben (’a’ bis ’z’).
La variable de type char nommée y est une lettre minuscule (de ’a’ à ’z’.)
(c) Die Ganzzahl foo ist kein Vielfaches von 23.
L’entier foo n’est pas un multiple de 23.
(d) Das erste Bit (ganz links, das stärkste Bit) der Variable a vom Typ byte a ist nicht gleich 1.
Le premier bit (tout à gauche, le plus fort) de la variable de type byte nommée a n’est pas égal à 1.
Question 3 – Random numbers (3 points)
Gegeben sei der folgende Prototyp :
Soit le prototype suivant :
int random(int x)
Das ist die Funktion, die eine ganze Zufallszahl zwischen [1 . . . x] zurückgibt. Was ist die Wahrscheinlichkeit, dass
der Inhalt des if-Blocks ausgeführt wird ?
Il s’agit d’une fonction qui retourne un nombre entier aléatoire compris entre [1 . . . x]. Quelle est la
probabilité que l’intérieur du if suivant soit exécuté ?
Page 4/12
T EST INTERMÉDIAIRE – Z WISCHENPRÜFUNG
if(random(x) == a){
...
}
(a) wenn x 3 und a 1 ist
si x vaut 3 et a vaut 1
(a)
(b) wenn x 500 und a 1 ist
si x vaut 500 et a vaut 1
(b)
(c) wenn x 500 und a 0 ist
si x vaut 500 et a vaut 0
(c)
Question 4 – Loops analysis (6 points)
Welche Resultate werden auf der Konsole angezeigt ?
Que vont afficher les boucles suivantes sur la console ?
1
2
3
4
5
6
(a)
(b)
1
2
3
4
5
6
7
8
9
10
11
12
(c)
Page 5/12
1
2
3
4
5
6
Lösung | Solution :
int a = -5;
int b = 3;
for(int c = a; c < a + b; c++){
System.out.print(c / 2 + "," + b);
}
char foo = ’a’;
System.out.println(foo);
Lösung | Solution :
do{
if(foo == ’c’){
System.out.println(foo);
break;
}
int bar = foo++;
System.out.println(bar);
}while(true);
int bar = 0xcafe;
while(bar != 0){
System.out.print((bar & 0xf) + "/");
bar >>= 4;
}
Lösung | Solution :
7.11.2013
Question 5 – Function analysis (4 points)
Gegeben sind die folgenden Funktionen :
Soient les fonctions suivantes :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[1 Pt]
public static int foo(int a, int b) {
switch (a) {
case 0:
a++;
break;
case 1:
a += 2;
case 2:
a++;
b++;
break;
default:
b = a;
}
return a % b;
}
public static int bar(int b, int a) {
while (a > b) {
System.out.println(" " + a + " " + b);
if (b > 5)
b = foo(a, b);
else
a = foo(b, a);
}
return a;
}
Was ist der Wert für :
Quelle est la valeur de :
(a) bar(3,2)
(a)
[1 Pt]
(b) bar(1,2)
(b)
[1 Pt]
(c) bar(4,5)
(c)
[1 Pt]
(d) bar(6,7)
(d)
Question 6 – Function synthesis (8 points)
[11/2 Pt]
(a) Schreiben Sie eine Funktion namens f, welche als Parameter einen double namens x erhählt und die der
folgende Wert zurückgibt : f (x) = 3x 2 + si n(x) − 3.
Écrivez une fonction nommée f qui prend un double nommé x en paramètre et qui retourne la
valeur suivante : f (x) = 3x 2 + si n(x) − 3.
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
Page 6/12
T EST INTERMÉDIAIRE – Z WISCHENPRÜFUNG
[11/2 Pt]
(b) Schreiben Sie eine Funktion namens isUpper die als Rückgabewert angibt ob ein Charakter, welcher als
Parameter übergeben wird, einem Grossbuchstaben entspricht oder nicht. Tipp : Achten sie sorgfältig auf die
ASCII-Tabelle.
Écrivez une fonction isUpper qui retourne si un caractère passé en argument est une lettre majuscule
ou non. Conseil : observez attentivement la table ASCII.
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
[2 Pt]
(c) Schreiben Sie eine Funktion namens multiples, welche auf der Konsole alle Zahlen, welche ein Vielfaches
von 5 und strikt kleiner als die als Parameter übergeben Zahl sind, anzeigt. Kontrollieren sie, dass die Zahl,
welche als Parameter übergeben wird, positiv ist (Wenn nicht, sollen Sie eine Fehlermeldung anzeigen).
Écrivez une fonction nommée multiples qui affiche sur la console tous les nombres multiples de 5
plus petits (strictement) qu’un nombre passé en argument. Vérifiez que le nombre soit bien positif
(dans le cas contraire, affichez un message d’erreur) !
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
[3 Pt]
(d) Schreiben Sie eine Funktion namens GCD, welche den grössten gemeinsamen Teiler von zwei Zahlen zurückgibt. Die Idee um den grössten gemeinsamen Teiler zu finden ist, dass man von der kleineren der beiden
Zahlen anfängt und alle Zahlen absteigend bis 1 testet um die erste Zahl zu finden, welche ein Teiler der beiden als Parameter übergebenen Zahl ist. Diese gefundene Zahl soll anschliessend als Resultat zurückgegeben
werden. Achten sie darauf ob ihre Zahlen null sind und das die Zahlen immer positiv sind.
Écrivez une fonction nommée GCD qui permettent de retourner le plus grand diviseur commun de
deux nombres entiers passés en paramètres. L’idée pour trouver ce plus grand diviseur commun
est de partir du plus petit des deux paramètres et de tester tous les nombres en descendant jusqu’à
1 pour trouver le premier nombre qui est un diviseur des deux paramètres et retourner ce nombre.
Faites attention aux zéros et considérez que les nombres passés en argument sont toujours positifs !
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
Page 7/12
7.11.2013
Question 7 – A christmas tree (5 points)
BBemerkung : Diese Aufgabe besitzt zwei unabhängige Teilaufgaben (Sie können die zweite Aufgabe lösen,
ohne die erste Aufgabe gemacht zu haben).
Ein Kunde, welcher das Weihnachtsfest verehrt, bittet euch ein Java Programm zu schreiben, welches erlaubt einen
Weihnachtsbaum zu zeichnen. Da Sie noch nicht sehr lange programmieren, schlagen Sie ihrem Kunden vor, den
Baum nach folgendem Model in der Konsole zu zeichnen
*
***
*****
*******
Listing 1: A 4-level tree
*
***
*****
*******
*********
Listing 2: A 5-level tree
BRemarque : Cet exercice comporte deux parties indépendantes (vous pouvez résoudre la seconde sans
avoir fait la première).
Un client adorant la fête de Noël vient vous demander d’écrire un code Java permettant de dessiner un
arbre de Noël. Comme vous ne programmez pas depuis longtemps, vous lui proposez de dessiner un
arbre dans la console sur le modèle ci-dessus.
[4 Pt]
(a) Um diesen Baum zu zeichnen schlagen wir Ihnen vor, eine Funktion mit folgendem Prototyp void xmas(int
height) zu schreiben, deren Zweck es ist, solche Bäume zu zeichnen. Beachten sie dazu, dass die Breite des
Baumes von der Höhe des Baumes nach folgender Formel abhängig ist : Br ei t e = 1 + 2 ∗ (H öhe–1).
Pour dessiner cet arbre, nous vous proposons d’écrire une fonction avec le prototype void xmas(int
height) dont le but est d’afficher de tels arbres. Pour ce faire, notez que la largeur de l’arbre est
dépendante de sa hauteur selon la formule l ar g eur = 1 + 2 ∗ (haut eur − 1)
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
Page 8/12
T EST INTERMÉDIAIRE – Z WISCHENPRÜFUNG
[1 Pt]
(b) • Sie möchten zusätzlich Weihnachtskugeln in der Zeichnung einfügen. Diese sollten nach dem Zufallsprinzip, wie unten abgebildet, platziert werden.
*
*x*
x****
*******
x********
*****x*****
Listing 3: A 5-level tree
Vous voulez pouvoir ajouter des boules de Noël sur le dessin. Celles-ci doivent apparaître de
manière aléatoire comme illustré ci-dessus.
Erklären Sie,ohne es zu implementieren, wie Sie dazu vorgehen würden
Expliquez, sans l’implémenter, comment vous pourriez vous y prendre.
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
BTurn page →
Page 9/12
7.11.2013
Question 8 – Bisection method (6 points)
Das Halbierungs-Verfahren wird verwendet, um die Nullstellen einer Funktion zu finden. Das heisst, der Wert
für x wo f (x) null gibt. Gegeben ist die Funktion f (x), so funktioniert dieses Verfahren wie folgt : Ausgehend
von zwei Startpunkten, a und b , wobei die Werte von f (a) und f (b) entgegengesetzte Vorzeichen besitzen (Die
Punkte liegen auf beiden Seiten der Nulllinie), so berechnet das Verfahren den Mittelpunkt c , was dem Mittelwert
der beiden Punkte entspricht : c = a+b
2 .
Wenn das Vorzeichen von f (c) das gleiche ist wie von f (b), so wird der neue Wert des Halbierungsverfahren
zwischen den Punkten a und c berechnet. Ist dies nicht der Fall, wird der neue Mittelpunkt zwischen b und c
berechnet. Dies wird solange ausgeführt, bis der Wert von f (c) kleiner ist als die Endpräzision (in unserem Fall
0.001). Abbildung 1 erläutert grafisch, wie diese Funktion funktioniert.
BGehen sie für diese Aufgabe davon aus, dass sie eine Funktion double f(double x) zur Verfügung haben,
welche das berechnet was sie wollen.
F IGURE 1: Bisection method (source : Wikipedia)
[5 Pt]
La méthode de la bissection permet de trouver le zéro d’une fonction, c’est-à-dire la valeur de x pour
laquelle f (x) vaut 0. Étant donné la fonction f (x), cette méthode fonctionne ainsi : partant de deux
points de départ, a et b , dont les valeurs f (a) et f (b) sont de signe opposé (points situés de chaque côté
de la ligne du zéro), la méthode va calculer le point médian c qui est la moyenne des deux points :
c = a+b
2 .
Si le signe de f (c) est le même que celui de f (b), on va calculer la valeur de la nouvelle bissectrice entre
les points a et c . Si ce n’est pas le cas, le nouveau point moyen est calculé entre c et b . On continue
ensuite jusqu’à ce que la valeur de f (c) soit inférieur à précision d’arrêt (0.001 dans notre cas). La figure
1 explique graphiquement comment fonctionne cette méthode
BPour cet exercice, partez du principe que vous avez à disposition une fonction double f(double x) à
disposition qui calcule ce que vous voulez.
(a) Schreiben Sie eine Funktion namens bissection, welche zwei double (a und b ) als Parameter besitzt und
einen double zurückgibt, welcher der Nullstelle der Funktion entspricht. Die Funktion soll zu Beginn kontrollieren, dass die Werte für f (a) und f (b) nicht null sind und das sie entgegengesetzte Vorzeichen besitzen.
Ist dies nicht der Fall soll die Funktion „Error: f(a) and f(b) must have different signs.“ in der
Konsole anzeigen und -1 zurückgeben. Wenn die Parameter a und b korrekt sind, so soll die Funktion die
Nullstelle der Funktion mit Hilfe des Halbierungsverfahrens berechnen und der Wert der x-Achse für die
Nullstelle mit einer Präzision von 0.001 zurückgeben
Écrivez une fonction nommée bissection qui prend deux double en paramètre, a et b , et qui
retourne un double qui correspond au zéro de la fonction. La fonction doit commencer par contrôler
que les valeurs de f (a) et f (b) soient différentes de zéro et de signe opposé. Si ce n’est pas le cas,
la fonction doit afficher "Error : f(a) and f(b) must have different signs." et retourner -1.
Si les paramètres a et b sont corrects, la fonction doit calculer le zéro de la fonction en utilisant la
méthode de la bissectrice et retourner la valeur de l’axe des x qui correspond à un zéro avec une
erreur de 0.001.
Page 10/12
T EST INTERMÉDIAIRE – Z WISCHENPRÜFUNG
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
[1 Pt]
(b) Schreiben Sie nun ein Programm welches die Nullstelle der Funktion f für die Startwerte 0 und 1 berechnet.
Ihr Programm soll der Wert der x-Achse welche der Nullstelle entspricht (c ) sowie auch der endgültige
Näherungsfehler ( f (c)) anzeigen. Das angezeigte Resultat sollte dem unten aufgeführten Text entsprechen.
Beachten Sie dass es nicht notwendig ist, die Aufgabe 8.a beendet zu haben um diese Aufgabe zu lösen. Sie
können annehmen dass die Funktion bissection korrekt funktioniert.
Écrivez maintenant un programme qui va calculer la valeur du zéro de la fonction f pour des
valeurs de départ de 0 et 1. Le programme devra afficher la valeur de l’axe des x qui correspond au
zéro (c ) ainsi que l’erreur final d’approximation du zéro ( f (c)). Le résultat affiché doit correspondre
au texte affiché ci-dessous. À noter qu’il n’est pas nécessaire d’avoir terminé la partie précédente
pour réaliser cette partie. On peut supposer que la fonction bissection fonctionne.
Position of the zero : 0.864013671875
Error for the zero
: 1.3997093620154999E-5
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
.................................................................................................
Page 11/12
7.11.2013
Fin|Ende
The end
Page 12/12
Herunterladen