Lösungen zur 2. Übung
Bearbeitung vom 1.11.06 - 7.11.06
Aufgabe 2: Fehlersuche
Das Listing in celsiusCorr.cc zeigt das Original, der Unterschied ist in
celsiusDiff.txt aufgelisted.
Da auch in einer Formel eine Klammer vergessen wurde, läuft das fertig compilierte Programm immer
noch fehlerhaft.
Aufgabe 3: Datentypen
Die Größe der Datentypen kann man mit der Methode sizeof( ) untersuchen (siehe Tutorial). Das Programm ist in
datentypen.ccgelistet,
der Output in datentypen.out. Zu meiner eigenen Überraschung sind
int und long int gleich groß, nämlich 4 Bytes.
Aufgabe 4: Prioritäten
Diese Aufgabe soll darauf hinweisen, daß in C das logische true die 1 ist und das logische false die 0 ist. Dann ist also:
x&&y = 1 && 0 = 0
x||y = 1 || 0 = 1
!(x&&y) = !(0) = 1
!x&&y = (!x) && y = 0 && 0 = 0
x>y&&y==1 = (x>y) && (y==1) = 1 && 1 = 1
x<y||!y = (x<y) || (!y) = 0 || 1 = 1
Aufgabe 5: for und while Loops
Man kann fast immer while Loops in for Loops umschreiben. Hier einfach
for (int i = 0: i < max_length; i++) {
cin >> ch;
if(ch == '?') quest_count++;
}
Aufgabe 6: Diskretisierungsalgorithmen
a) Mit
und
erhalten wir
Bei der Lösung dieser quadratischen Gleichung kann es dazu führen, daß man zwei große Zahlen subtrahiert
und daraus die Wurzel zieht. Im allgemeinen ist es daher besser, zunächst die Gleichung für die
skalierte Größe
zu lösen:
Mit
und erhalten wir
und
.
b) Die Diskretisierung realisieren wir mit einer do - while Schleife. Das Programm ist in
well1.ccgelistet.
Aufgabe 7: Sortieren
Zunächst erweitern wir das Programm mit der Berechnung der Skewness:
Wir rechnen aus:
Das Programm ist in mean1.cc gelisted. Der hier gezeigte Sortieralgorithmus ist eine
sehr einfache Version des QuickSort Verfahrens und daher relativ einfach kommentierbar.
Der gleiche Algorithmus in einer komprimierten Form würde so aussehen:
void qintsort(int a[], int l, int r){
if(r>l){
int i=l-1, j=r, tmp;
for(;;){
while(a[++i]<a[r]);
while(a[--j]>a[r]);
if(i>=j) break;
tmp=a[i]; a[i]=a[j]; a[j]=tmp;
}
tmp=a[i]; a[i]=a[r]; a[r]=tmp;
qintsort(a, l, i-1);
qintsort(a, i+1, r);
}
}
Um mit dem vorhandenen Programm die Werte einer Tabelle einzulesen, benutzen wir den
in der Vorlesung erwähnten Trick und ergänzen das Datenfile
bernulli.txt am Anfang mit
./mean1.exe « ! und am Ende mit ! , nennen das neue file
mean1.job und starten den Job mit ./mean1.job.
Harm Fesefeldt
2006-11-02