\documentstyle[11pt,german,epsfig,uebung]{article}
\begin{document}
\briefkopf
\LARGE
\centerline{L"osungen zur 2. "Ubung}
\large
\centerline{Bearbeitung vom 1.11.06 - 7.11.06}
\vskip 0.5cm
\normalsize
{\bf Aufgabe 2: Fehlersuche}\newline
Das Listing in \tt celsiusCorr.cc \rm zeigt das Original, der Unterschied ist in  
\tt celsiusDiff.txt  \rm  aufgelisted.
Da auch in einer Formel eine Klammer vergessen wurde, l"auft das fertig compilierte Programm immer
noch fehlerhaft.  \newline \vskip 0.1cm
{\bf Aufgabe 3: Datentypen} \newline
Die Gr"o"se der Datentypen kann man mit der Methode \tt sizeof( ) \rm untersuchen (siehe Tutorial). Das Programm ist in 
\tt datentypen.cc \rm gelistet, der Output in \tt datentypen.out. \rm Zu meiner eigenen "Uberraschung sind
\tt int \rm und \tt long int \rm gleich gro"s, n"amlich 4 Bytes. \newline \vskip 0.1cm
{\bf Aufgabe 4: Priorit"aten} \newline
Diese Aufgabe soll darauf hinweisen, da"s in C das logische \tt true \rm die 1 ist und das logische \tt false \rm
die 0 ist. Dann ist also:
\begin{verbatim}
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
\end{verbatim}
{\bf Aufgabe 5: \tt for \rm und \tt while \rm Loops}
Man kann fast immer \tt while \rm Loops in \tt for \rm Loops umschreiben. Hier einfach
\begin{verbatim}
for (int i = 0: i < max_length; i++) {
   cin >> ch;
   if(ch == '?') quest_count++;
}
\end{verbatim}  
{\bf Aufgabe 6: Diskretisierungsalgorithmen} \newline
a) Mit $z = (1/2) g t^{2}$ und $t + z/v_{s} = T$ erhalten wir
\begin{displaymath}
z^{2} -2z \left( v_{s} T + \frac{v_{s}^{2}}{g} \right) + v_{s}^{2} T^{2} = 0
\end{displaymath}
Bei der L"osung dieser quadratischen Gleichung kann es dazu f"uhren, da"s man zwei gro"se Zahlen subtrahiert
und daraus die Wurzel zieht. Im allgemeinen ist es daher besser, zun"achst die Gleichung f"ur die
skalierte Gr"o"se $z' = z/(v_{s} T)$ zu l"osen:
\begin{displaymath}
z'^{2} - 2 z' \left( 1 + \frac{v_{s}}{g T} \right) + 1 = 0
\end{displaymath}
Mit $p = - 2 ( 1 + v_{s}/(g T) )$ und $q = 1$ erhalten wir
\begin{displaymath}
z' = - \frac{p}{2} \pm \sqrt{p^{2}/4 -q}
\end{displaymath}
und $z = v_{s} T z'$. \newline
b) Die Diskretisierung realisieren wir mit einer \tt do - while \rm Schleife. Das Programm ist in 
\tt well1.cc \rm gelistet. \newline \vskip 0.1cm
{\bf Aufgabe 7: Sortieren} \newline
Zun"achst erweitern wir das Programm mit der Berechnung der Skewness:
\begin{displaymath}
\gamma = \frac{1}{\sigma^{3} (N-2)} \sum (x_{i} - \overline{x})^{3}
\end{displaymath}
Wir rechnen aus:
\begin{displaymath}
\frac{1}{N-2} \sum(x_{i} - \overline{x})^{3}
= \frac{1}{N-2} \sum x_{i}^{3} - \frac{3 \overline{x}}{N-2} \sum x_{i}^{2}
+ \frac{3 \overline{x}^{2}}{N-2} \sum x_{i} - \frac{N}{N-2} \overline{x}^{3}.
\end{displaymath}
Das Programm ist in \tt mean1.cc \rm 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"urde so aussehen:
\begin{verbatim}
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;
     quicksort(a, l, i-1);
     quicksort(a, i+1, r);
   }
}
\end{verbatim}
Um mit dem vorhandenen Programm die Werte einer Tabelle einzulesen, benutzen wir den
in der Vorlesung erw"ahnten Trick und erg"anzen das Datenfile \tt bernulli.txt \rm am Anfang mit  
\tt ./mean1.exe << ! \rm und am Ende mit \tt ! \rm , nennen das neue file \tt ./mean1.job \rm
und starten den Job mit \tt ./mean1.job. 
\end{document}
