Algo_Klausur_2002-03

Werbung
Algo Klausur Ende WS 01/02
vom 13.03.2002
Aufgabe 1: /15 = /5 + /5 + /5
Aufgabe 2: /25 = /10+ /5 + /5 + /5
Aufgabe 3: /25 = /10+ /5 + /5 + /5
Aufgabe 4: /35 = /5 + /10+ /20
----------------------------------------------------------------------------------------------------------------Summe:
/100
Aufgabe 1:
(a)
-= C =-
Schreiben Sie ein kleines Hauptprogramm (!), in dem ein 2-dimensionales Array der
Größe 4*4 angelegt wird. Das Array soll chars enthalten und alle Elemente des Arrays
sollen mit ´+´ initialisiert werden.
Antwort:
(b)
Gehen Sie davon aus, dass Ihr kleines Hauptprogramm aus Aufgabe (a) funktioniert.
Erweitern Sie dieses um ein paar Zeilen, die das Array so ausgeben:
++++
++++
++++
++++
Sie sollen keine zusätzliche Funktion oder Methode schreiben. Es geht hier nur um
die Schleife!
Antwort:
(c)
Ergänzen Sie das Programm noch um eine (einzige!) Schleife, die die beiden
Diagonalen des Arrays mit ´*´versieht. Das Array soll so aussehen:
*++*
+**+
+**+
*++*
Aufgabe 2:
(a)
-= C =-
Schreiben Sie eine Funktion grossSchreiben, die als Parameter eine Zeichenkette
s hat und alles Kleinbuchstaben der Zeichenkette in Großbuchstaben umwandelt,
Großbuchstaben und andere Zeichen jedoch unverändert lässt. Es soll die Anzahl
der umgewandelten Zeichen als Returnwert zurück gegeben werden.
Hinweis: Benutzen sie die folgenden C – Bibliotheksfunktionen
- int islower (char c)
- char toupper (char c)
liefert den Wert true falls c ein Kleinbuchstabe ist
liefert den Großbuchstaben von c bzw. c selbst,
wenn c bereits ein Großbuchstabe ist
WICHTIG: Es soll ein Character Array benutzt werden!
Antwort:
#include <stdio.h>
int gross(char array[])
{
int i=0;
int a=0;
while(array[i])
{
if(islower(array[i]))
{
array[i]=toupper(array[i]);
a++;
}
i++;
}
return a;
}
int main(){
char array[160];
int a=0;
printf(„Bitte geben Sie ihren string ein:“);
scanf(„%s“,&array);
printf(„Ihr String lautet: %s“,array);
a=gross(array);
printf(„Umgewandelter String: %s“,array);
printf(„Anzahl der Umwandlungen:%i“,a);
}
(b)
Im Hauptprogramm sei die Integervariable a und das Char-Array s definiert.
Wie sieht dann der Aufruf der Funktion grossSchreiben aus?
(c)
Wie müsste die Deklaration der Funktion grossSchreiben aussehen, wenn man
nicht nur die Anzahl der umgewandelten Zeichen sondern auch die Anzahl der nicht
umgewandelten Zeichen zurückgeben möchte?
(d)
Schreiben Sie eine Funktion istEineGeradeZahl, die als Parameter einen int hat
und als Rückgabewert true liefert wenn dieser eine gerade Zahl ist.
Aufgabe 3:
(a)
-= JAVA =-
Gegeben sind die folgenden Klassendeklarationen
1
2
03
04
05
06
07
08
09
10
11
public abstract class A {
private int x;
12
13
14
15
public final class B extends A {
public A (int x) {
x=x;
}
public abstract int f1 (int
public abstract int f2 (int
public abstract static void
public final int f4 (int a)
a);
a);
f3 ();
{…}
}
public B (int x) {
A(x);
16
17
18
19
20
}
public int f1 (int a) {…}
//int f2 (int a) …
public int f4 (int a) {…}
}
In einigen Zeilen befinden sich Fehler, geben Sie die Zeilennummer und jeweils eine
kurze Begründung an.
(Es sind mehr Punkte aufgeführt als es Fehler gibt)
1.
2.
3.
4.
5.
6.
7.
3 b-d: Gegeben sind die folgenden unvollständigen Klassendeklarationen:
public abstract class Figur {
//Gemeinsamkeiten verschiedener Figuren
public Figur(double x, double y) {…}
//Figur hat die Position x,y)
public abstract double flaeche () ;
...
}
public final class Kreis extends Figur {
public Kreis (double x, double y, double r) {…}
//Kreis hat die Position x,y und den radius r
public double flaeche () {…}
//ermittelt die Fläche des Kreises
...
}
(b)
Vervollständigen Sie die privaten Bereiche der Klassen „Figur“ und „Kreis“.
Figur:
Kreis:
(c)
Geben Sie den Konstruktor der Klasse Figur an.
(d)
Welche der folgenden Programmzeilen ist falsch? Geben Sie jeweils eine kurze
Begründung!
JAVA:
1
2
3
4
5
Kreis
Figur
Kreis
Figur
Figur
k1
f1
k2
f2
[]
= new Kreis (10.0);
= new Figur (17.0, 20.2);
= new Kreis (17.0, 20.2, 3.4);
= new Kreis (17.0, 20.2, 3.4);
feld = new Figur [10];
1.
2.
3.
4.
Aufgabe 4:
-= JAVA =-
Wir gehen davon aus, dass Objekte die die Schnittstelle „Comparable“ implementieren
ein Funktion compareTo() besitzem, die einen Vergleich zweier Objekte erlaubt:
Java:
public interface comparable {
/**
*@return -1 wenn Empfängerobjekt < other,
* +1 wenn > und 0 wenn = = ;
*/
public int compareTo (Object other);
}
Die folgende doppelt verkettete Liste sei so aufgebaut (Repräsentationsvariante),
dass die Listenelemente stets aufsteigend sortiert sind. Die interessanten Teile der
Klasse sehen wie folgt aus:
Java:
public class list {
private static class Node {
comparable value;
Node previous;
Node next;
}
private Node first;
private Node last;
//Knoten Klasse
//Inhalt eines Knotens
//Referenz auf Vorgänger
//Referenz auf Nachfolger
//Referenz auf ersten Kn
//Referenz auf letzten Kn
}
(a)
Schreiben Sie eine Methode, die feststellt, ob ein Objekt in der Liste enthalten ist
und je nach dem true oder false zurückgibt.
(b)
Schreiben Sie eine Methode void insert (comparable x), die das Objekt x
an der richtigen Stelle einfügt.
(c)
In Java verfügt jedes Objekt über eine Methode int hashCode (), die für das Objekt
eine (relativ eindeutige) ganze Zahl zurück gibt. Geben Sie die Deklaration der
Datenstruktur einer Hashtabelle an (Methode der dichten Verschiebung) und schreiben
Sie den Konstruktor und die Methode zum Einfügen eines Objekts auf.
Java:
Void insert (Objekt key, Object value);
Hinweis:
null Objekte sollten als key nicht zugelassen sein.
Erzeugen Sie in diesem Fall eine Null pointer Exception!
Class Hashtable {
//private Datenstruktur
Hastable (
//Konstuktor
)
Void insert (
//Einfügen
)
Herunterladen