06.10.2013 Aufrufe

Uebungsaufgaben

Uebungsaufgaben

Uebungsaufgaben

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Übungsaufgaben Informatik<br />

Aufgabe 1 'Hello World' B *<br />

Tippen Sie das 'Hello World' Programm ab und bringen sie es zum Laufen.<br />

Aufgabe 2 'Agenten' B **<br />

Schreiben Sie ein Programm, welches folgenden Text ausgibt:<br />

Die Datei "c:\agenten\007\treffer.txt" wurde geschrieben!<br />

Kein Fehler aufgetreten.<br />

Aufgabe 3 'Zahlen Addieren' B **<br />

Schreiben Sie ein Programm welches 2 ganze Zahlen (int) von der Tastatur einliest, und die Summe der beiden<br />

Zahlen ausgibt<br />

Aufgabe 4 'Datentypen IO' B *<br />

Schreiben Sie ein Programm, welches verschiedene Datentypen einliest, jeweils in einer passenden Variable<br />

abspeichert und wieder ausgibt. Speichern sie nacheinander alle eingelesenen Werte in einer weiteren char<br />

Variablen ab und geben sie diese nach jeder Zuweisung wieder aus.<br />

Experimentieren Sie etwas mit den Datentypen und den Formatbezeichnern.<br />

Aufgabe 5 'Konversionen' B **<br />

Schreiben Sie ein Programm, welches einen int, einen float und einen double in eine entsprechende Variable<br />

einliest. Geben Sie die Werte anschliessend wieder aus.<br />

Weisen Sie nun die Werte der int-, der float- und der double- Variablen jeweils einer char-Variablen zu und<br />

geben Sie deren Wert jeweils aus.<br />

Experimentieren Sie etwas mit den Datentypen und Konstanten (Literale).<br />

Aufgabe 6 'Datentypen' B **<br />

Schreiben Sie ein Programm, welches möglichst viele Datentypen verwendet. (Einlesen, Rechnen, Ausgeben).<br />

Aufgabe 7 'Kegelstumpf' B **<br />

Schreiben Sie ein einfaches Programm, welches das Volumen eines Kegelstumpfes berechnet. Es soll die Höhe,<br />

den kleinen und den grossen Durchmesser des Kegelstumpfes einlesen. Führen Sie die Berechnung mit Integer<br />

Variablen durch, nehmen Sie Pi als 3 an)<br />

V = Pi/12*h*(D 2 + D*d + d 2 )<br />

Aufgabe 8 '1-9 Expressions' B *<br />

Schreiben Sie ein Programm, das möglichst viele verschiedene Ausdrücke (Expressions) benutzt, um die Zahlen<br />

von 1 bis 9 auszugeben. D.h. Die Zahlen 1-9 sollen für die Ausgabe durch Ausdrücke berechnet werden.<br />

(Beispiel: 3-2 um 1 auszugeben)<br />

Aufgabe 9 '1-9 More expressions' B *<br />

B: Basic<br />

C: Kontrollstrukturen<br />

F: Funktionen<br />

A: Arrays<br />

T: Texte (Strings)<br />

S: Strukturen<br />

P: Pointer<br />

L: Library (Standardlibrary)<br />

D: Algorithmen/Datenstrukturen<br />

* Einfach ******Schwierig<br />

Schreiben Sie noch ein Programm, das möglichst viele Variationen der Operatoren für die Ausgabe der Zahlen<br />

von 0 bis 9 verwendet. (Will heissen: Machen sie es möglichst 'kompliziert').<br />

Berücksichtigen Sie dabei besonders die Operatoren, die Ihnen nicht so geläufig sind<br />

<strong>Uebungsaufgaben</strong> Informatik (23.09.2010, I. Oesch) 1


Aufgabe 10 'Teilbar' C **<br />

Schreiben Sie ein Programm, das eine Zahl von der Tastatur einliest und sagt, ob sie durch 7 teilbar ist.<br />

Beispiel: Zahl ? 33<br />

33 ist nicht teilbar<br />

Aufgabe 11 'Zahlen Sortieren' C ***<br />

Schreiben Sie ein Programm das drei Zahlen von der Tastatur in die drei Variablen a, b und c einliest, und diese<br />

anschliessend durch Vertauschen so ordnet, dass in der Variablen a die grösste, in der Variablen b die mittlere<br />

und in der Variablen c die kleinste Zahl steht. Anschliessend soll das Programm zur Kontrolle den Inhalt der<br />

Variablen a, b und c ausgeben.<br />

Aufgabe 12 'Quadratzahlen' C **<br />

Schreiben Sie ein Programm, das die Quadratzahlen von 1 bis 10 ausgibt (mit Schlaufen).<br />

Beispiel: 1: 1<br />

2: 4<br />

3: 9<br />

usw<br />

Aufgabe 13 'Fakultäten I' Cf *<br />

Für welche Zahlen liefert das Programm 'public\Labor\Info\1_Semester\data\aufgaben\fakultaeten\' korrekte<br />

Resultate? Rechnen Sie 1! .. 10! Von Hand aus und vergleichen Sie mit den Resultaten des Programms.<br />

Aufgabe 14 'Fakultäten II' Cf *<br />

Bauen Sie im Programm Fakultaeten einen Test ein, der prüft ob die Eingabe im zulässigen Bereich liegt. Geben<br />

Sie eine Fehlermeldung aus und verhindern Sie die Berechnung, falls dies nicht der Fall ist. Ändern Sie die<br />

Funktion main() so, dass die beiden Zeilen printf("\n Zahl eingeben... und scanf(%hd", Zahl) nur je einmal<br />

vorkommen.<br />

Aufgabe 15 'Fibonacci' C ***<br />

Schreiben Sie ein Programm, das die ersten 15 Zahlen der Fibonaci-Reihe ausgibt. (Jede Zahl ist die Summe der<br />

beiden vorherigen Zahlen), die Reihe soll mit 0 1 beginnen.<br />

Bildungsvorschrift der Fibonacci-Reihe: Fn = Fn-1 + Fn-2, wobei F0 = 0, F1 = 1<br />

Beispiel: 0<br />

1<br />

1<br />

2<br />

3<br />

5<br />

8<br />

13<br />

Aufgabe 16 'Nächste Fibonacci' C ****<br />

Schreiben Sie ein Programm, welches zu einer gegebenen Zahl die nächstliegende Fibonacci-Zahl ausgibt<br />

Beispiel: Eingabe 7<br />

Ausgabe 8<br />

Eingabe 14<br />

Ausgabe 13<br />

Beginnen Sie zuerst mit einem Programm, welches die nächst grössere Fibonacci-Zahl ausgibt.<br />

<strong>Uebungsaufgaben</strong> Informatik (23.09.2010, I. Oesch) 2


Aufgabe 17 'Fakultät' C **<br />

Schreiben Sie ein Programm, das die Fakultät für eine gegebene int Zahl berechnet. Bestimmen sie, bis zu<br />

welcher Eingabe das Programm korrekt arbeitet.<br />

Die Fakultät n! ist definiert als<br />

n! = n * (n-1) * (n-2) * .... *2 * 1,<br />

Wobei 0! per Definition 1 ist.<br />

Aufgabe 18 'Datum zu Wochentag' C ***<br />

Schreiben Sie ein Programm, das aus einem eingegebenen Datum den dazugehörigen Wochentag ausgibt.<br />

Der Wochentag kann mit folgender Formel bestimmt werden:<br />

Tag = ([2.6m-0.2]+d+y+[y/4]+[c/4]-2c)mod7<br />

Tag: 0=Sonntag, 1= Montag ... 6=Samstag<br />

y = Jahr innerhalb des Jahrhunderts (z.B. für = 1981, y = 81)<br />

c = Jahrhundert (z.B. für = 1981, c = 19)<br />

m = Monat (1=März ... 10=Dezember), 11 = Jan und 12 = Feb, wobei Jan und Feb zum vorherigen<br />

Jahr gehören. D.h. Jan 1900 wird zu Jan 1899.<br />

d = Tag des Monats (1 .. 31)<br />

[x] = Nachkommastellen abschneiden, kein Runden<br />

mod = Modulus (Rest von Division)<br />

Beispiel: Eingabe: 24.12.2001<br />

Ausgabe: Der 24.12.2001 ist ein Montag<br />

Welcher Wochentag war der 1.10.2003?<br />

Aufgabe 19 'Weihnachtsaufgabe' C ***<br />

Schreiben Sie ein Programm, welches ein Bäumchen aus Sternen auf den Bildschirm zeichnet. Die Höhe des<br />

Bäumchens soll durch den Anwender eingegeben werden können.<br />

Beispiel:<br />

Hoehe = 5 Hoehe = 7<br />

* *<br />

*** ***<br />

***** *****<br />

******* *******<br />

********* *********<br />

* ***********<br />

* *************<br />

*<br />

*<br />

Aufgabe 20 'Zahlen in Klartext' C *****<br />

Schreiben Sie ein Programm, welches eine eingegebene Zahl im Bereich von 0 bis 99999 im Klartext ausgibt.<br />

Also bei 1013 soll z.B. eintausendunddreizehn ausgegeben werden.<br />

Aufgabe 21 'Römisch' C ****<br />

Schreiben Sie ein Programm, das eine eingegebene Zahl im Bereich von 0 bis 3999 im römischen Format<br />

ausgibt.<br />

I = 1; V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000<br />

<strong>Uebungsaufgaben</strong> Informatik (23.09.2010, I. Oesch) 3


Aufgabe 22 'Römisch 2' CTA ****<br />

Schreiben Sie ein Programm, das eine eingegebene römische Zahl in eine Dezimalzahl umrechnet und ausgibt.<br />

I = 1; V = 5, X = 10, L = 50, C = 100, D = 500, M = 1000<br />

Aufgabe 23 'Halbieren' C **<br />

Schreiben Sie ein Programm, welches herausfindet, wie oft eine eingegebene Zahl halbiert werden kann, bis sie 0<br />

wird. 40 kann zum Beispiel 5 mal halbiert werden (40-20-10-5-2-1-0).<br />

Aufgabe 24 'Bitzählen' C **<br />

Schreiben Sie ein Programm, das eine 32-Bit Zahl (long) einliest, und anschliessend zählt, wiviele Bits in dieser<br />

Zahl gesetzt sind und das Ergebnis ausgibt. Also bei einer Eingabe von 0x0000123F soll 8 ausgegeben werden.<br />

Aufgabe 25 'Kleinste' C *<br />

Erstellen Sie ein Programm, das in einer Schleife ganze Zahlen einliest Wenn eine negative Zahl eingelesen wird,<br />

beendet das Programm die Schleife. Am Schluss soll die kleinste der eingelesenen positiven Zahlen ausgegeben<br />

werden<br />

Aufgabe 26 'Einfacher Rechner' C **<br />

Schreibe ein Programm, das zwei Zahlen und ein Operationszeichen (+, -, *, /) von der Tastatur einliest und<br />

anschliessend das Ergebnis der Operation ausgibt (Summe, Differenz, Produkt, Quotient).<br />

Erweiterung: Verhindere ungültige Operationen wie Division durch Null.<br />

Aufgabe 27 'Zählen' C **<br />

Schreiben Sie ein Programm, das alle auf der Tastatur eingegebenen Blanks, Tabs und Newlines zählt. Beim<br />

Zeichen '$' sollen die Werte ausgegeben werden.<br />

Aufgabe 28 'Sternenquadrat' C *<br />

Schreibe ein Programm, das eine Sternenquadrat ausgibt. Die Seitenlänge des Quarates soll vom Benutzer<br />

angegeben werden können.<br />

Beispiel für Länge = 1: Beispiel für Länge = 2: Beispiel für Länge = 3:<br />

* **<br />

**<br />

Aufgabe 29 'Sternenpyramide'<br />

***<br />

***<br />

***<br />

C **<br />

Schreibe ein Programm, das eine Sternenpyramide ausgibt. Die Höhe der Pyramide soll vom Benutzer angegeben<br />

werden können.<br />

Beispiel für Hoehe = 2: Beispiel für Hoehe = 3: Beispiel für Hoehe = 5:<br />

*<br />

***<br />

*<br />

***<br />

*****<br />

*<br />

***<br />

*****<br />

*******<br />

*********<br />

Aufgabe 30 'Kegelstumpf Funktion' CF *<br />

Ändern Sie das Programm der Aufgabe 7 so, dass das Volumen des Kegelstumpfes in einer separaten Funktion<br />

berechnet wird. (Die Ein- und Ausgabe soll weiterhin im Hauptprogramm stattfinden):<br />

<strong>Uebungsaufgaben</strong> Informatik (23.09.2010, I. Oesch) 4


Aufgabe 31 'Durchschnitt +' C **<br />

Schreiben Sie ein Programm, welches vom Benutzer eine beliebige Anzahl positiver Zahlen entgegennimmt, bis<br />

0 eingegeben wird. Das Programm soll anschliessend die kleinste Zahl, die grösste Zahl und den Durchschnitt<br />

aller eingegebenen Zahlen ausgeben.<br />

(Die Eingabe soll über die Tastatur erfolgen, die Ausgabe über den Bildschirm)<br />

Beispiel: Eingabe: 10 Ausgabe: Die kleinste Zahl ist 5<br />

20 Die grösste Zahl ist 25<br />

25 der Durchschnitt ist 16<br />

5<br />

20<br />

0<br />

Aufgabe 32 'Kreuz' C ***<br />

Schreiben Sie eine Funktion Kreuz, welche ein Kreuz aus Sternen mit der angegebenen Achslänge auf dem<br />

Bildschirm ausgibt.. Schreiben Sie ein Hauptprogramm main() das einige Kreuze ausgibt.<br />

Prototyp: void Kreuz( int Laenge ) ;<br />

Beispiel: Aufruf: Kreuz(3);<br />

Aufgabe 33 'Münz'<br />

Ausgabe: *<br />

*<br />

*<br />

*******<br />

*<br />

*<br />

*<br />

C ****<br />

Schreiben Sie ein Programm, das die minimale Anzahl Münzstücke und Noten berechnet, mit denen ein<br />

gegebener Geldbetrag in Schweizer Währung zusammengestellt werden kann (Nur für ganze Frankenbeträge).<br />

Prototyp: int Muenz(int Betrag);<br />

Beispiel: printf("%d", Muenz(27));<br />

gibt 3 aus (27 = 1*20 + 1*5 + 1*2)<br />

Aufgabe 34 'Text Ein-/Ausgabe'<br />

printf("%d", Muenz(233));<br />

gibt 5 aus (233 = 1*200 + 1*20 + 1*10 + 1*2 + 1*1)<br />

CA **<br />

Schreiben Sie ein Programm, das einen Text von bis zu 1000 Chars von der Tastatur einliest und danach wieder<br />

ausgibt. Als Ende des Textes gilt das End of File EOF oder wenn 1000 Chars eingelesen wurden. Am einfachsten<br />

verwenden Sie getchar für die Eingabe (EOF = ctrl-z auf sonst leerer Zeile)<br />

Aufgabe 35 'Zahleneingabe umdrehen'<br />

CA **<br />

Schreiben Sie ein Programm, das bis zu 100 Integerwerte von der Tastatur einliest und in einem Array<br />

abspeichert. Wenn eine negative Zahl eingegeben wird, soll die Eingabe abgebrochen und die bisher<br />

gespeicherten Werte in umgekehrter Reihenfolge wieder ausgegeben werden.<br />

<strong>Uebungsaufgaben</strong> Informatik (23.09.2010, I. Oesch) 5


Aufgabe 36 'Mittelwert Array' CAFP **<br />

Schreiben Sie eine Funktion, die den Mittelwert aller (positiven) Elemente eines Arrays berechnet. Eine -1<br />

kennzeichnet das Ende des Arrays und darf nicht mitberücksichtigt werden.<br />

Prototyp: unsigned int Mittelwert( int *Daten );<br />

Das Hauptprogramm main soll einfach ein initialisiertes int Array enthalten, Mittelwert() darauf anwenden<br />

und das Ergebnis ausgeben. Beispiel:<br />

int main (int argc, char *argv[]) {<br />

int Array[] = {1, 5, 9, 3, 4, 7, -1};<br />

printf("Mittelwert ist %d \n", /* Mittelwert berechnen */ );<br />

return 0;<br />

}<br />

Aufgabe 37 'Grossbuchstaben zählen' CFAT *<br />

Schreiben Sie eine Funktion, die als Rückgabewert die Anzahl Grossbuchstaben in einem String zurückgibt.<br />

Prototyp: int anzahl_gross( char str[] );<br />

Zum Beispiel soll bei folgendem Aufruf der Wert 2 auf dem Bildschirm ausgegeben werden:<br />

int main (int argc, char *argv[]) {<br />

char aString[] = "Programmieren in C++";<br />

printf(" %d ", anzahl_gross(aString));<br />

return 0;<br />

}<br />

Aufgabe 38 'Palindrom'<br />

CFAT ***<br />

Schreiben Sie eine Funktion, die herausfindet, ob ein gegebener String ein Palindrom ist. Wenn ein Palindrom<br />

vorliegt, soll die Funktion True (1) zurückliefern, sonst False (o). Ein Palindrom ist ein Wort oder ein Satz, der<br />

von vorne nach hinten und von hinten nach vorne gelesen dasselbe ergibt. (Beispiele: 'otto', 'ein neger<br />

mit_gazelle_zagt_im regen nie'. Testen Sie die Funktion im Hauptprogramm main().<br />

Prototyp: int IsPalindrom(char String[]);<br />

Beispiel: printf("%d", IsPalindrom(“otto“));<br />

gibt 1 aus<br />

printf("%d", IsPalindrom(“fritz“));<br />

gibt 0 aus<br />

Aufgabe 39 'Zeichen löschen' CFAT **<br />

Schreiben Sie die Funktion DelChar, die ein Zeichen aus einem String löscht, welches sich an der Position<br />

‘pos’ befindet. Schreiben Sie ein kleines Testprogramm main() für diese Funktion.<br />

Returnwert: 1: falls das Zeichen erfolgreich gelöscht werden kann.<br />

0: falls das Zeichen nicht gelöscht werden kann.<br />

Prototyp: int DelChar( char str[], int pos ) ;<br />

Beispiel: char str[] = "abcdefg";<br />

DelChar(str, 3); // str ==> "abdefg"<br />

// Returnwert: 1<br />

Aufgabe 40 'Zeichen duplizieren' CFATP **<br />

Schreiben Sie die Funktion dup(), die das Zeichen an Position Pos in einen String str verdoppelt (Also eine<br />

Kopie des Zeichens einfügt). Der Rest des Strings soll nach hinten verschoben werden. Sie dürfen annehmen,<br />

dass der String immer Platz genug hat. Testen Sie die Funktion im Hauptprogramm main().<br />

Prototyp: void dup( char *str, int pos );<br />

Beispiel: char str[5] = "ABCD";<br />

dup( str, 2 ); // ==> str = "ABCCD"<br />

<strong>Uebungsaufgaben</strong> Informatik (23.09.2010, I. Oesch) 6


Aufgabe 41 'Wort löschen' CFATP ***<br />

Schreiben Sie eine Funktion DeleteFirstWord( ), die das erste Wort in einem String löscht. Schreiben Sie<br />

ein kleines Testprogramm main() für diese Funktion. Wortgrenzen sind durch Leerzeichen (Spaces) definiert.<br />

Prototyp: void DeleteFirstWord( char *str );<br />

Beispiel:<br />

char string[ ] = "Hallo, liebe Leute";<br />

DeleteFirstWord( &string[0] ); // string ist jetzt<br />

// "liebe Leute"<br />

Aufgabe 42 'Stringfunktionen' CFAT ***<br />

Unter 'public\Labor\Info\1_Semester\data\aufgaben\stringfunktionen' finden Sie das Ausgangsprojekt für diese<br />

Aufgabe. Vervollständigen Sie die Stringfunktionen im Modul strfun.c. Die Funktionen StringCompare(),<br />

StringCopy() und StringAppend() müssen noch implementiert werden. Die Funktionen sind wie folgt deklariert:<br />

int StringLength(String Str);<br />

Diese Funktion bestimmt die Länge eines Strings (inkl. abschliessender Null). Diese ist als<br />

Musterbeispiel bereits implementiert<br />

int StringCompare(String Dest, String Src);<br />

Diese Funktion vergleicht den Inhalt zweier Strings. Falls die beiden Strings identisch sind wird<br />

True (1), sonst False (0) zurückgeliefert.<br />

void StringCopy(String Dest, String Src);<br />

Diese Funktion kopiert den Inhalt des Strings 'Src' in den String 'Dest'. Der Anwender dieser<br />

Funktion ist selbst dafür verantwortlich, dass 'Dest' genug Platz für 'Src' besitzt.<br />

void StringAppend(String Dest, String Src);<br />

Diese Funktion hängt den Inhalt des Strings 'Src' an den String 'Dest' an. Der Anwender dieser<br />

Funktion ist selbst dafür verantwortlich, dass 'Dest' genug Platz zum anhängen von 'Src' besitzt.<br />

Mindestens eine Lösung sollte mit Pointer realisiert werden.<br />

Um die Funktion des Modules zu testen, binden Sie es mit dem Modul strtest.c zusammen. Zusammen mit dem<br />

Modul strtest,c entsteht ein Programm, welches Ihre Funktionen austestet und Diagnosemeldungen ausgibt.<br />

Aufgabe 43 'Text in Worte'<br />

CFATP ***<br />

Schreiben Sie ein Programm, das einen String in einzelne Worte unterteilt, und diese ausgibt. (Als Wortende<br />

können Leerzeichen und nichtdruckbare Zeichen angesehen werden).<br />

Beispiel: Eingabe Kaufen Sie jede Woche vier gute und bequeme Pelze bei XY[Return]<br />

Ausgabe: Kaufen<br />

Sie<br />

jede<br />

Woche<br />

vier<br />

:<br />

:<br />

Erweiterung: Geben Sie die Worte alphabetisch sortiert aus.<br />

Aufgabe 44 'Häufigkeit' CFATPD ****<br />

Schreiben Sie ein Programm, das die Häufigkeit der einzelnen Worte einer Eingabezeile zählt.<br />

Beispiel: Eingabe Der, der dort geht, geht nun dorthin[Return]<br />

Ausgabe: der 2<br />

dort 1<br />

geht 2<br />

nun 1<br />

dorthin 1<br />

Erweiterung, geben Sie die Wortliste alphabetisch sortiert aus<br />

Aufgabe 45 'Ohne Grösste' CA **<br />

Schreibe ein Programm, bei dem man angeben kann, wieviele Zahlen eingegeben werden sollen, das<br />

anschliessend soviel Zahlen wie angegeben einliest, und dann alle Zahlen ausser der grössten ausgibt.<br />

<strong>Uebungsaufgaben</strong> Informatik (23.09.2010, I. Oesch) 7


Aufgabe 46 'Gerade-Ungerade' CA **<br />

Schreibe ein Programm, bei dem man angeben kann, wieviele Zahlen eingegeben werden sollen, das<br />

anschliessend soviel Zahlen wie angegeben einliest, und dann zuerst alle geraden Zahlen und dann alle ungeraden<br />

Zahlen ausgibt.<br />

Aufgabe 47 'Sortiert ausgeben' CA ***<br />

Schreibe ein Programm, bei dem man angeben kann, wieviele Zahlen eingegeben werden sollen, das<br />

anschliessend soviel Zahlen wie angegeben einliest, und dann die Zahlen in aufsteigend sortierter Reihenfolge<br />

ausgibt.<br />

Aufgabe 48 'Längste Sequenz' CAF ****<br />

Schreiben Sie eine Funktion FindMaxSequence() die in einem Array von Werten die längste Sequenz<br />

aufeinanderfolgender gleicher Werte findet. Die Funktion soll die Länge der längsten Sequenz zurückgeben,<br />

sowie bei *Pos die Position (Index) des ersten Wertes der Sequenz abspeichern. In Length wird die Länge des<br />

Arrays übergeben.<br />

Prototyp:<br />

int FindMaxSequence(int *Pos, int Werte[], int Length);<br />

Beispiel zur Anwendung der Funktion:<br />

int Messreihe[15] = {0, 0, 1, 1, 1, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0};<br />

int Length;<br />

int Start;<br />

SequenzeLength = FindMaxSequence(&SequenzeStart, Messreihe, 15);<br />

printf("Sequenz der Laenge %d ab %d gefunden", Length, Start);<br />

/* gibt Sequenz der Laenge 4 ab 5 gefunden aus*/<br />

Aufgabe 49 'Komplex addieren'<br />

CFS **<br />

Schreiben Sie eine Funktion AddComplex(..), die zwei komplexe Zahlen addiert und das Resultat an den<br />

Aufrufer der Funktion zurückgibt. Schreiben Sie ein kleines Testprogramm main() für diese Funktion.<br />

Prototyp:<br />

dCmplx AddComplex( dCmplx c1, Cmplx c2 );<br />

Der Typ dCmplx ist eine Struktur und ist wie folgt definiert:<br />

typedef struct {<br />

int re;<br />

int im;<br />

}dCmplx;<br />

Aufgabe 50 'Uhrzeitdifferenz' CFS **<br />

Schreiben Sie ein Program, das zwei Uhrzeiten (hh, mm, ss) einliest, die Differenz (hh, mm, ss) zwischen den<br />

beiden Zeiten bestimmt und ausgibt. Die Berechnung der Differenz soll in einer Funktion erfolgen. Die Uhrzeiten<br />

sollen in einer Struktur abgelegt sein.<br />

<strong>Uebungsaufgaben</strong> Informatik (23.09.2010, I. Oesch) 8


Aufgabe 51 'Studentenverwaltung' CFATDSLP ****<br />

Diese Aufgabe wird sie während mehreren Lektionen beschäftigen. Ihr Programm wird im Laufe der Zeit ständig<br />

erweitert und umfangreicher, versuchen Sie deshalb von Anfang sauber zu Programmieren. Kommentare und<br />

Struktogramme gehören grundsätzlich ebenfalls zur Lösung der Aufgaben.<br />

Aufgabe 1<br />

Definieren sie eine Struktur, in welcher folgende Studentendaten abgelegt werden können:<br />

Name (String bis 30 Zeichen), Vorname (String bis 30 Zeichen), Notendurchschnitt (float) und<br />

Geburtsdatum (Tag, Monat, Jahr). Auch das Datum soll in einer (unter-) Strukturvariablen abgelegt werden.<br />

Schreiben Sie ein Programm, das die zwei Funktionen ReadStudentData() und WriteStudentData()<br />

enthält. Die Funktion ReadStudentData() soll die Daten eines Studenten von der Tastatur einlesen, und an<br />

den Aufrufer (in einer Strukturvariablen) zurückliefern. Zudem soll sie dem Aufrufer mitteilen, ob die<br />

Eingabe korrekt erfolgt ist, oder ob die Eingabe vom Benutzer abgebrochen wurde. (Z. B. indem der<br />

Notendurchschnitt auf -1 gesetzt wird).<br />

Die Funktion WriteStudentData() erhält als Argument eine Studentenstrukturvariable und soll Name,<br />

Vorname, Notendurchschnitt und Geburtsdatum des Studenten auf dem Bildschirm ausgeben.<br />

Schreiben Sie ein Hauptprogramm main(), das die Informationen zu einem Studenten einliest und<br />

anschliessend wieder ausgibt. Dazu sollen die beiden oben beschriebenen Funktionen verwendet werden.<br />

Wenn die Eingabe abgebrochen wurde, soll auf die Ausgabe verzichtet werden, und eine entsprechende<br />

Fehlermeldung ausgegeben werden.<br />

Aufgabe 2<br />

Erweitern Sie das Programm aus Aufgabe 1 so, dass bis zu 10 Studenten verwaltet werden können. Die<br />

Studentendaten sollen in einem Array abgelegt werden. Es sollen die Daten von bis zu 10 Studenten<br />

eingegeben werden können. Bei der Ausgabe sollen entweder alle Studenten, oder nur die Studenten<br />

unterhalb eines bestimmten, vom Benutzer einzugebenden Notendurchschnitts ausgegeben werden.<br />

Erweitern Sie das Programm um ein kleines Menu, in welchem der Benutzer auswählen kann ob er<br />

Studenten eingeben, alle Studenten ansehen, nur Studenten unterhalb eines bestimmten Schnitts ansehen,<br />

alle Einträge löschen oder das Programm verlassen will. (Denken Sie daran, das Menu wird im weiteren<br />

Verlauf dieser Aufgabe ständig erweitert)<br />

Aufgabe 3<br />

Erweitern Sie das Programm um die Möglichkeit, nach einem bestimmten Eintrag zu suchen, und diesen<br />

Anzuzeigen, wenn er gefunden wird.<br />

Aufgabe 4<br />

Erweitern Sie das Programm um die Möglichkeit, die Einträge nach Namen oder nach Notendurchschnitt zu<br />

sortieren und sortiert auszugeben. Erweitern Sie das Programm um die Möglichkeit, bestimmte Einträge zu<br />

löschen oder zu ändern. Verwenden Sie Zeiger um Einträge im Array zu suchen (Z. B. Beim Sortieren).<br />

Aufgabe 5<br />

Erweitern Sie das Programm um Funktionen zum Laden und Abspeichern von Studentendaten (Load und<br />

Save). Es sollen jeweils alle Daten in eine Datei abgespeichert werden und zu einem späteren Zeitpunkt<br />

wieder eingelesen werden können. Teilen Sie das Programm sinnvoll in Module auf. (Ein-Ausgabe,<br />

Laden/Speichern...)<br />

Aufgabe 6<br />

Erweitern Sie das Programm um dynamische Funktionen. Die Studenten sollen nicht mehr in einem Array,<br />

sondern in einer Liste verwaltet werden. Die Listenelemente sollen nach bedarf alloziert und wieder<br />

freigegeben werden. (Ein Modul mit Listenfunktionen wird zur Verfügung gestellt). Einträge sollen beliebig<br />

gelöscht oder hinzugefügt werden können.<br />

Aufgabe 7<br />

Erweitern Sie das Programm mit eigenen Ideen.<br />

Aufgabe 52 'Zeilen drehen'<br />

CFATD ****<br />

Schreiben Sie ein Programm, das eine beliebige Anzahl Zeilen einliest, und diese anschliessend in umgekehrter<br />

Reihenfolge ausgibt. (Das Ende der Eingaben wird durch eine Leere Zeile angezeigt).<br />

<strong>Uebungsaufgaben</strong> Informatik (23.09.2010, I. Oesch) 9


Beispiel: Eingabe Hallo Welt [Return]<br />

Guten Abend, liebe Leute [Return]<br />

Auf Wiedersehen! [Return]<br />

[Return]<br />

Ausgabe: Auf Wiedersehen<br />

Guten Abend, liebe Leute<br />

Hallo Welt<br />

Variante 1: Rekursion benutzen Dynamisch<br />

Variante 3: Array Benutzen Maximale Anzahl Zeilen ist begrenzt<br />

Variante 2: Liste Benutzen Dynamisch<br />

Aufgabe 53a 'Pytagoras' CFL **<br />

Schreiben Sie ein Programm, welches alle pytagoräischen Zahlentrippel (a, b, c) findet, für die gilt: a 2 + b 2 = c 2<br />

und a < 100, b < 100 und c < 100 sowie a, b, c ist ganze Zahl.<br />

Hinweis: Schreiben Sie zuerst eine Funktion, die erkennt ob drei Zahlen ein Pytagoräisches Trippel sind, also<br />

TRUE (1) zurückliefert wenn a 2 + b 2 = c 2 ist. Benutzen Sie anschliessend diese Funktion um<br />

pytagoräische Zahlentrippel zu finden.<br />

Das Programm soll die gefundenen Zahlen schön formatiert ausgeben. Doppelte Einträge müssen nicht<br />

unterdrückt werden. Erstellen Sie einen Programmdesign (Struktogramm), bevor Sie mit dem Programmieren<br />

beginnen.<br />

Beispiel einer möglichen Ausgabe:<br />

Gefundene Trippel:<br />

1. 3, 4, 5 ( 9 + 16 = 25)<br />

2. 4, 3, 5 ( 16 + 9 = 25)<br />

3. 5, 12, 13 ( 25 + 144 = 169)<br />

Aufgabe 53b 'Pytagoras II' CFAL ***<br />

Ändern Sie das Programm aus Aufgabe 53a so, dass keine Vielfachen bereits gefundener Lösungen ausgegeben<br />

werden. Es sollen also alle Trippel der Form k*a 2 + k*b 2 = k*c 2 für k > 1 und k ist ganze Zahl weggefiltert<br />

werden.<br />

Hinweis: Verwenden Sie Arrays und Strukturen.<br />

Beispiele:<br />

3, 4, 5 ( 9 + 16 = 25) OK<br />

6, 8, 10 ( 36 + 64 = 100) Ausfiltern<br />

9, 12, 15 ( 81 + 144 = 225) Ausfiltern<br />

5, 12, 13 ( 25 + 144 = 169) OK<br />

10, 24, 26 ( 100 + 576 = 676) Ausfiltern<br />

Aufgabe 53c 'Pytagoras III'<br />

CFAL ***<br />

Schreiben Sie das Programm aus Aufgabe 53a so um, dass nur Trippel, bei welchen die Zusatzbedingung b = a+1<br />

oder c = b+1 zutrifft ausgegeben werden.<br />

Beispiele:<br />

3, 4, 5 ( 9 + 16 = 25) OK<br />

5, 12, 13 ( 25 + 144 = 169) OK<br />

6, 8, 10 ( 36 + 64 = 100) Ausfiltern<br />

8, 15, 17 ( 64 + 225 = 289) Ausfiltern<br />

10, 24, 26 ( 100 + 576 = 676) Ausfiltern<br />

20, 21, 29 ( 400 + 441 = 841) OK<br />

Aufgabe 53d 'Pytagoras IV'<br />

Schreiben Sie ein Programm welches herausfindet, welche Zahl(en) am häufigsten in den Trippeln gemäss<br />

Aufgabe 53a vorkommen und diese (mit der Häufigkeit) ausgibt.<br />

Aufgabe 53e 'Pytagoras V' CFAL ***<br />

Schreiben Sie ein Programm welches die pytagoräischen Zahlentrippel gemäss Aufgabe 53a und 53b in eine<br />

Textdatei schreibt, der Dateiname soll durch den Benutzer eingegeben werden können. (Datei-)Fehler sollen<br />

abgefangen und dem Benutzer mitgeteilt werden. Die Datei soll dabei alle Trippel gemäss Aufgabe 53a<br />

enthalten, und daran anschliessend alle Trippel gemäss Aufgabe 53 b<br />

<strong>Uebungsaufgaben</strong> Informatik (23.09.2010, I. Oesch) 10


Aufgabe 54 'Dateien' CFATSL **<br />

Schreiben Sie die Programme aus Aufgabe 43, 44 und 52 so um, dass sie die Daten nicht von der Tastatur,<br />

sondern aus einer Datei lesen, und die Ausgabe ebenfalls in eine Datei erfolgt.<br />

Aufgabe 55 'Worthäufigkeit' CFATL ****<br />

Erstellen Sie ein Programm, welches alle Worte in einem Textfile zählt und am Schluss eine Gesamtstatistik über<br />

die Häufigkeit der einzelnen Worte ausgibt. Das Programm soll sauber dokumentiert und implementiert werden.<br />

(Analyse, Design und Implementation).<br />

Aufgabe 56 'Münzwurf' CFDL ***<br />

Schreiben Sie ein Programm, das eine Serie von Münzwürfen simuliert. Bei jedem Wurf wird die Anzahl der<br />

Kopf zeigenden Münzen gezählt. Die Anzahl Würfe und die Anzahl Münzen soll vom Benutzer eingegeben<br />

werden. Als Ausgabe soll die statistische Verteilung der Kopfhäufigkeiten dargestellt werden. Benutzen sie die<br />

Zufallsfunktion rand() zur Simulation eines Münzwurfes.<br />

Beispiel:<br />

Aufgabe 57 'Sortieren'<br />

Anzahl Münzen = 10 Anzahl Würfe = 1000<br />

Resultate der Muenzwuerfe<br />

0 mal Kopf: 0<br />

1 mal Kopf: 7<br />

2 mal Kopf: 29<br />

3 mal Kopf: 135<br />

4 mal Kopf: 202<br />

5 mal Kopf: 239<br />

6 mal Kopf: 218<br />

7 mal Kopf: 114<br />

8 mal Kopf: 49<br />

9 mal Kopf: 6<br />

10 mal Kopf: 1<br />

CFAD ***<br />

Unter 'public\Labor\Info\1_Semester\data\aufgaben\Sortieren' finden Sie das Ausgangsprojekt für diese Aufgabe.<br />

Es besteht aus drei Sortierfunktionen im Modul Sortfun.c, die noch nicht implementiert sind, und Testcode im<br />

Hauptprogramm. Den Testcode sollen Sie nicht verändern, sie sollen nur eine der Sortierfunktionen im Modul<br />

Sortfun.c implementieren. Der Testcode wird Ihnen anschliessend miteilen, ob ihre Routine korrekt arbeitet.<br />

Aufgabe 58 'Labyrinth'<br />

CFAD ***<br />

Im Verzeichnis 'public\Labor\Info\1_Semester\data\aufgaben\Labyrinth' finden Sie ein Projekt, welches ein<br />

Labyrinth erstellt, und anschliessend den Ausgang sucht. Im Moment funktioniert das Suchen des Ausgangs noch<br />

nicht, Ihre Aufgabe ist es, eine Funktion FindExit() zu schreiben, welche den Ausgang aus dem Labyrinth findet.<br />

(Am einfachsten geht es mit einer Rekursion. Im Verzeichnis 'WorkingDemo' finden Sie ein funktionierendes<br />

Beispiel (Aber nur die .exe Datei). Sie müssen nur die Funktion FindExit() in der Datei Labmain.c anpassen,<br />

alles andere sollen Sie so belassen wie es ist. Die Funktion FindExit() erhält in Map ein 2-Dimensionales Array,<br />

in dem das Labyrinth abgespeichert ist, und in X und Y die Grösse des Arrays.<br />

Die Labyrintwände sind als 1 abgespeichert, und freie Wege sind als 0 abgespeichert. Der Ausgang ist mit -1<br />

markiert.<br />

Sie haben die Funktion PrintMap() zur Verfügung, welche das Labyrinth auf den Bildschirm zeichnet (0 wird leer<br />

gezeichnet, 1 als Wand, -1 als Ziel, 2 als roter Stern (Aktueller Weg), 3 als gelber Punkt (z.B. für bereits besucht)<br />

und für alles andere wird ein Fragezeichen gezeichnet. Die Funktion GoHome() setzt den Cursor auf Anfang des<br />

Bildschirms, dies Funktion sollte vor dem Zeichnen des Labyrinthes aufgerufen werden.<br />

Damit sich der Ablauf besser verfolgen lässt, können sie nach jeder Ausgabe mit Delayms() noch eine<br />

Verzögerung einbauen.<br />

Hinweis: Wenn Sie deutlich mehr als 20 Codezeilen (Schön strukturiert, aber Kommentar nicht mitgezählt)<br />

benötigen, könnte es eine kürzere Lösung geben. (Dies ist aber keine Vorgabe).<br />

<strong>Uebungsaufgaben</strong> Informatik (23.09.2010, I. Oesch) 11


Aufgabe 59 'Hanoi' CFD ***<br />

Implementieren Sie ein Programm, welches das Problem des Turmes von Hanoi für beliebige Turmhöhen löst.<br />

Das Ausgangsprojekt finden Sie unter 'public\Labor\Info\1_Semester\data\aufgaben\Hanoi'. Sie müssen nur die<br />

Funktion MoveTower() in der Datei hanoi.c implementieren.<br />

Aufgabe 60 'Parser' CFATLE *****<br />

Erstellen Sie ein Formelauswerteprogramm. Der Benutzer soll eine beliebige mathematische Formel oder<br />

Funktion eingeben können, welche anschliessend vom Programm berechnet wird. Das Programm soll alle<br />

gängigen mathematischen Funktionen verstehen wie: Die vier Grundrechenarten, Potenzieren und Radizieren,<br />

Exponentialfunktionen, trigonometrische Funktionen und Spezialfunktionen wie Betrag und Signum, und<br />

selbstverständlich auch Klammern berücksichtigen.<br />

In einer Erweiterung könnte das Programm zu einem Funktionsplottprogramm ausgebaut werden. Die Formel<br />

müsste dann als (beliebige) Funktion von x eingegeben werden.<br />

Aufgabe 61 'Funktionsplotter' CFATLE *******<br />

Erstellen Sie ein Funktionsplottprogramm. Der Benutzer soll eine beliebige mathematische Funktion eingeben<br />

können, deren Funktionsverlauf anschliessend graphisch dargestellt wird. Der Benutzer soll den darzustellenden<br />

Wertebereich definieren können, als Option kann eine automatische Bereichsauswahl hinzugefügt werden. Die<br />

Skalierung der Y-Achse soll automatisch oder durch den Benutzer erfolgen. Das Programm kann später um die<br />

Darstellung von Ableitungen und Berechnung der Ableitung von Funktionen erweitert werden.<br />

Das Programm soll alle gängigen mathematischen Funktionen verstehen wie: Die vier Grundrechenarten,<br />

Potenzieren und Radizieren, Exponentialfunktionen, trigonometrische Funktionen und Spezialfunktionen wie<br />

Betrag und Signum.<br />

Das Programm soll sauber dokumentiert und implementiert werden. (Analyse, Design und Implementation).<br />

Hinweis: Implementieren Sie das Programm Schritt für Schritt.<br />

Aufgabe 62 'Vier gewinnt' CFATLE *******<br />

Entwickeln Sie ein Computerprogramm, mit dem Sie Vier Gewinnt spielen können. Der Benützer kann dabei<br />

gegen den Computer spielen. Der Spieler kann wählen, wer beginnt. Auch der Schwierigkeitsgrad soll eingestellt<br />

werden können. Auf Wunsch soll der Spielverlauf in einem File dokumentiert werden. Vier Gewinnt wird in<br />

einem 7*6 (Breite mal Höhe) grossen Feld gespielt, die Spieler ziehen abwechslungsweise, wer zuerst vier Steine<br />

in einer Reihe hat gewinnt.<br />

Das Programm soll sauber dokumentiert und implementiert werden. (Analyse, Design und Implementation).<br />

Hinweis: Implementieren Sie das Programm Schritt für Schritt. Lassen Sie zum Testen den Computer gegen sich<br />

selbst spielen<br />

Aufgabe 63 'Sudoku' CFAD ****<br />

Entwickeln Sie ein Computerprogramm, welches Lösungen für SUDOKU Probleme findet. SUDOKU sind 9*9<br />

grosse Quadrate, welche mit den Ziffern 1-9 gefüllt werden müssen. Das 9*9 Quadrat ist zudem noch in 9 3*3<br />

Quadrate unterteilt. Beim Einfüllen der Ziffern sind folgende Regeln einzuhalten:<br />

-In jeder Zeile und jeder Spalte dürfen die Ziffern 1-9 nur je einmal vorkommen.<br />

-In jedem der 9 Teilquadrate dürfen die Ziffern 1-9 nur je einmal vorkommen.<br />

Bei einem SUDOKU-Problem sind bereits einige Zahlen vorgegeben, die restlichen müssen selbst platziert<br />

werden.<br />

Aufgabe 64 'Damenproblem' CFAD ***<br />

Schreiben sie ein Programm, welches 8 Damen auf einem Schachbrett (8*8) so plaziert, dass sie sich nach den<br />

Schachregeln nicht gegenseitig bedrohen. (Das heisst, auf jeder Spalte, jeder Zeile und jeder Diagonalen darf<br />

höchstens eine Dame stehen).<br />

<strong>Uebungsaufgaben</strong> Informatik (23.09.2010, I. Oesch) 12


Aufgabe 65 'Funktionsapproximation' Cl ***<br />

Schreiben und testen Sie ein Programm, welche den 2er-Logarithmus approximiert.<br />

Mit dem Polynom P(x) = 0.1540*x 3 +-0.5679*x 2 +1.4136*x + 0.0013 kann log2(z) approximiert werden, wenn für<br />

x der Wert (z-1) eingesetzt wird. Dabei muss z im Bereich von 1 bis 2 sein.<br />

Das heisst, um log2(a) zu berechnen, muss man a sooft mit 2 multiplizieren oder dividieren, bis es im Bereich<br />

von 1…2 liegt. Anschliessend P(a-1) auswerten, und beim Resultat die Anzahl der benötigten Divisionen resp<br />

Multiplikationen dazuzählen, resp. davon subtrahieren. [ Wegen log2(2 n *a) = log2(a) + n ]<br />

Das ganze etwas mathematisch formuliert:<br />

Zum Approximieren von log2(a):<br />

Finde einen Wert s so, dass 1

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!