Sie sind auf Seite 1von 14

bungsaufgaben

Aufgabe 1:
Schreiben Sie eine Funktion, die das Quadrat einer ganzen Zahl berechnet. Die
Funktion soll diese berechnete Zahl zurckgeben.
Lsung anzeigen
Aufgabe 2:
Schreiben Sie eine Funktion, die die Lnge einer Zeichenkette berechnet. Die
berechnete Lnge soll dann zurckgegeben werden.
Lsung anzeigen
Aufgabe 3:
Schreiben Sie eine Funktion, die zwei Zeichenketten miteinander vergleicht. Die
Funktion soll True zurckgeben, wenn die Zeichenketten gleich sind - Snsonsten soll
False zurckgegeben werden.
Lsung anzeigen
Aufgabe 4:
Schreiben Sie eine Funktion, die den Inhalt einer Zeichenkette kopiert. Die Funktion soll
wie folgt aussehen: void strCopy(char* source, char* dest, int length); (Wir gehen davon
aus, dass source und dest die gleiche Gre haben)
Lsung anzeigen
Aufgabe 5:
Schreiben Sie ein Programm, das alle Primzahlen von 2 bis 100 ausgibt. (Eine Primzahl
ist eine Zahl, die nur durch sich selbst und 1 teilbar ist)
Lsung anzeigen
Aufgabe 6:
Schreiben Sie ein Programm, das fr alle Zahlen von 0 bis 100 ausgibt, ob es sich um
eine gerade oder ungerade Zahl handelt.

Lsung anzeigen
Aufgabe 7:
Schreiben Sie eine Funktion, die die Quersumme einer Ganzzahl berechnet. Die
berechnete Quersumme soll zurckgegeben werden.
(Beispiel: Zahl: 123 - Quersumme: 1+2+3 = 6)
Lsung anzeigen
Aufgabe 8:
Schreiben Sie eine Funktion, die die Fakultt einer Ganzzahl berechnet. Die berechnete
Fakultt soll zurckgegeben werden. (z.B Fakultt von 3 ist 3*2*1 = 6)
Lsung anzeigen
Aufgabe 9:
Schreiben Sie eine Funktion, die den Betrag einer Ganzzahl berechnet und zurckgibt
(wandeln Sie also negative Zahlen in positive). berlegen Sie sich einen sinnvollen
Rckgabetyp.
Lsung anzeigen
Aufgabe 10:
Schreiben Sie das Grundgerst einer Klasse Complex, die den Umgang mit komplexen
Zahlen verwaltet. berlegen sie sich, was fr Daten bentigt werden und legen Sie die
bentigten Getter und Setter-Methoden sowie Konstruktoren an. (Eine komplexe Zahl
besteht aus einem imaginren und realen Anteil, also z = real + i*imag)
Lsung anzeigen
Aufgabe 11:
Erweitern Sie nun Ihre Complex-Klasse um eine ffentliche Methode, die komplexe
Zahlen addieren kann. (Addiert wird indem man den realen und imaginren Anteil
getrennt addiert, also z1 + z2 = real1 + real2 + i*(imag1 + imag2))
Lsung anzeigen
Aufgabe 12:

Schreiben Sie nun ein Programm, das zwei komplexe Zahlen miteinander addiert.
Lsung anzeigen
Aufgabe 13:
Schreiben Sie das Grundgerst einer Klasse Bruch, die den Umgang mit Bruchzahlen
verwaltet. berlegen sie sich, was fr Daten bentigt werden und legen Sie die
bentigten Getter und Setter-Methoden sowie Konstruktoren an.
Lsung anzeigen
Aufgabe 14:
Erweitern Sie Ihre Klasse um eine private rekursive Methode, die den grten
gemeinsamen Teiler zweier Zahlen berechnet. (Tipp: Allgemeiner Algorithmus z.B auf
wikipedia)
Lsung anzeigen
Aufgabe 15:
Schreiben Sie nun eine Methode, die zwei Brche miteinander addiert.
Lsung anzeigen
Aufgabe 16:
Schreiben Sie ein Programm, das ein Array auf dem Heap anlegt. Fllen Sie dieses mit
den Werten von 0 bis 99. Geben Sie das Array aus und geben Sie den Speicher danach
wieder frei.
Lsung anzeigen
Aufgabe 17:
Schreiben Sie ein Programm, das den Namen einer Person von der Standardeingabe
liet und dann eine Begrung ausgibt.
Lsung anzeigen
Aufgabe 18:
Erweitern Sie Ihre Buchklasse um eine ffentliche Methode, die den Bruch auf der

Standardausgabe ausgibt. (z.B )


Lsung anzeigen
Aufgabe 19:
Erweitern Sie Ihre Bruchklasse um eine Methode, die berprft ob zwei Bruchobjekte
gleich sind. Das ganze soll in einem Ausdruck realisiert werden.
Lsung anzeigen
Aufgabe 20:
Erweitern Sie Ihre Bruchklasse um eine ffentliche Methode, die zwei Brche teilt.
Lsung anzeigen
------------------------------------------------------------Aufgaben zum Kapitel 11

Erstellen Sie ein Programm, welches die geraden Zahlen extra und ungeraden Zahlen
extra bis 200 addiert.
Warum wird hier die Stringkonstante von printf() in der for()-Schleife nicht
ausgegeben?
#include <stdio.h>
int main()
{
float i;
for(i=0.0f; i < 1.0f; i+=0.05f)
{
if(i == 0.5f)
printf("Die Hlfte ist erreicht\n");
}
return 0;
}
Schreiben Sie ein Programm, womit Sie beliebig viele Ganzzahlen einlesen knnen.
Geben Sie die Zahl 0 ein, soll die Schleife abgebrochen werden und der Durchschnitt

aller eingegebenen Zahlen wird ausgegeben.


Versuchen Sie zu ermitteln welches Jahr von 1980 his heute ein Schaltjahr war. Ein
Schaltjahr ist dann ein Schaltjahr wenn sich die Jahreszahl dividieren lsst durch 100 mit
Rest und durch 4 ohne Rest oder wenn sich die Jahreszahl durch 400 dividieren lsst
ohne das ein Rest dabei herauskommt.
Schreiben Sie das Beispiel zum Ermitteln eines Schaltjahres so um, dass die
Bedingung mit dem Bedingungsoperator berprft wird.
--------------------------------------------------------------Ein Pythagoras-Triplet ist eine Menge von drei natrlichen Zahlen, fr die gilt:
a<b<c
a + b = c
Zum Beispiel: 3 + 4 = 9 + 16 = 25 = 5.
Finde nun ein Pythagoras-Triplet, das zudem a + b + c = 1000 erfllt und gib das
Produkt abc an.
--------------------------------------------------------------Vervollstndige die folgenden Vorgaben so, dass das Programm das n-te Folgenglied
der Fibonacci-Folge berechnet. Das n-te Folgenglied ist dabei die Summe der beiden
vorherigen.
fib(0) = 0
fib(1) = 1
fib(n) = fib(n-1) + fib(n-2)
Als Beispiel [1]: fib(24) = 46.368
--------------------------------------------------------------In dieser Aufgabe geht es darum fr ein digitales Schloss den passenden Schlssel zu
finden. Dabei werden sowohl Schloss als auch Schlssel durch eine Integer-Variable
reprsentiert (genauer gesagt die Binrreprsentation). Damit ein Schlssel zu einem
Schloss passt, muss der Schlssel an Stellen, an denen 0-en im Schloss zu finden sind,
eine 1 aufweisen. Das Gleiche gilt im Gegenzug fr die 1-en. Also muss der Schlssel
das bitweise Komplement des Schlosses sein.
Schlssel: 010001110
Schloss: 101110001
Die Schwierigkeit besteht nun darin, dass der Aufbau des Schlosses nicht bekannt ist.
Es muss also probiert werden. Dieses kann mit der Funktion test() geschehen. Sie
nimmt einen Schlssel, testet ihn am Schloss und liefert die Anzahl der richtigen Bits als
Rckgabewert. Falls der richtige Schlssel gefunden ist, beendet die Funktion test()
automatisch das Programm und gibt eine entsprechende Meldung aus.

Fr Perfektionisten: Man braucht maximal <Bits im Schlssel> Versuche. - (X|


--------------------------------------------------------------Mit den beiden Funktionen succ() und neg() ist es mglich alle bekannten Operationen
zu erstellen.
Die Funktion succ() liefert den Nachfolger einer bergebenen Zahl.
neg() dreht das Vorzeichen eines bergebenen Wertes um.
Im unten angegebenen Quelltext seht ihr die Funktionen add(), sub(), mult(), div(), mod()
und pot(), die ihr aus succ() und neg() nachbilden sollt. Dafr knnt ihr mit Variablen,
Schleifen/Rekursion, Fallunterscheidungen und natrlich Funktionen arbeiten.
Verwendet bitte keine Operatoren, die bereits in C definiert sind - sonst wird's
langweilig ;)
Wenn ihr Lust habt, knnt ihr euch noch weitere Funktionen berlegen, die ihr aus succ
und neg aufbauen knnt.
--------------------------------------------------------------Bei dieser Einsteiger-Aufgabe geht es darum eine Eingabe vom Benutzer zu erfragen
und diese dann auf dem Bildschirm auszugeben.

Schreibe ein Programm was eine Frage ausgibt. Dies knnte bspw. so aussehen:
Bitte gib dein Alter ein:
Anschlieend lass den Benutzer die Antwort eingeben.
Bitte gib dein Alter ein: 23
Benutze die Eingabe fr etwas sinnvolles (mehr oder weniger)
Dann bist du volljhrig.
--------------------------------------------------------------Diese Aufgabe wird dir Schritt fr Schritt beibringen einen Taschenrechner zu schreiben.
Ein Taschenrechner der einfachsten Ausfhrung bekommt die erste Zahl (nennen wir sie
ersteZahl), eine Rechenoperator (operation) und eine zweite Zahl (zweiteZahl). Nun
wertet er die operation aus und wendet sie auf ersteZahl- und zweiteZahl an. Dies
erzeugt das ergebnis.
Eine Beispielausgabe knnte so aussehen (Grn=Eingabe vom Benutzer):
Wie lautet die erste Zahl?
2
Welche Operation wird gewnscht? +
Wie lautet die andere Zahl?
5
---------------------------------------Ergebnis fr 2+5
7

Ausgehend von diesem Beispiel knntest du jetzt ein Programm schreiben. Vorschlag:
Erzeuge Variablen fr ersteZahl, zweiteZahl, operation und ergebnis
berlege dir, welche Datentypen fr die einzelnen Variablen am besten passen
Einlesen der Variablen
Am besten sagst du dem Benutzer, was du von ihm wissen willst. D.h. vor der
eigentlichen Eingabe solltest du eine Ausgabe machen. (printf benutzen)
Lese nun die Eingabe vom Benutzer in einer der Variablen von oben ein (scanf
benutzen)
Berechnung
berlege dir, wie du operation am besten auswertest. Evtl. kann dir die erste
Vorlesung dabei helfen ...
Berechne ergebnis anhand der operation.
(nette) Ausgabe von ergebnis
berlege dir fr welche Rechenoperationen du diesen Taschenrechner schreiben
kannst, und fr welche nicht.
--------------------------------------------------------------Schreibt ein Programm, welches das kleine Einmaleins ausgibt. Hierbei mssen zwei
verschachtelte Schleifen verwendet werden (also eine Schleife innerhalb eines Blocks
einer anderen Schleife). Die Ausgabe des Programms soll dann ca. so aussehen:

1x1= 1
2x1= 2
3x1= 3
...
9x1= 9
10 x 1 = 10
1x2= 2
2x2= 4
...
9 x 10 = 90
10 x 10 = 100
--------------------------------------------------------------Schreibe ein Programm, das die Vorkommnisse aller Buchstaben in einer Datei zhlt
und anschlieend ausgibt. Dabei sollen Gro- und Kleinbuchstaben zusammengefasst
werden. Verwende die folgende Vorgabe:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {

if (argc != 2) {
printf("missing filename\n");
return 0;
}
// open file
FILE *file = fopen(argv[1], "r");
if (file == NULL) {
printf("cannot open file\n");
return 0;
}
// TODO your code here
// close the file
fclose(file);
}
Hinweis zum Dateienlesen
Fr diese Aufgabe werden folgende File-IO-Funktionen bentigt. Die ersten beiden sind
in der Vorgabe schon vorhanden.
fopen(filename, "r") ffnet die Datei unter dem angegebenen Dateinamen im NurLese-Modus und gibt einen FILE-Pointer zurck, mit dem im Folgenden auf die Datei
zugegriffen werden kann.
fclose(file) schliet die Datei.
fgetc(file) liest ein Zeichen der Datei. Ist die Datei zuende, gibt die Funktion -1 zurck.
Hinweis zum Umgang mit chars
Mit char kann man genauso rechnen, wie mit int. Die Berechnung character-'a' ergibt
also die Position des Buchstaben im Alphabet, wenn character zwischen a und z in der
ASCII-Tabelle liegt.
--------------------------------------------------------------Schreibe ein Programm, das fr alle eingegebenen Daten den Wochentag berechnet.
Der Benutzer soll dabei Tag, Monat und Jahr eingeben. Deine Aufgabe besteht darin,
den Abstand (in Tagen) dieses Datums zu einem festen Tag zu berechnen, von dem du
den Wochentag kennst (bspw. war der 1. Januar 1 AD ein Samstag). Nun kannst du den
Wochentag berechnen.
Hilfestellung: Der Modulo-Operator kann dir dabei helfen...
Vorgehensweise:

Lese alle Eingaben vom Benutzer (Tag, Monat, Jahr)


Berechne den Abstand
Berechne den Wochentag
Gib den Wochentag aus
--------------------------------------------------------------Dies ist eine Knobelaufgabe. Falls du dir die erste Taschenrechneraufgabe noch nicht
angesehen hast, dann hole dies bitte hier nach.
Deine Aufgabe ist es, den Taschenrechner aus der vorherigen Aufgabe zu berarbeiten.
Wie du sicherlich bereits festgestellt hast, kann der Taschenrechner nicht sehr viel: Nur
die Grundrechenarten sind mglich und mehrere Berechnungen hintereinander
funktionieren nicht. Auch schn wre es, wenn es eine Mglichkeit gbe das
Assoziativgesetz umzusetzen. Nimm dir einige Momente dafr Zeit und berlege dir, wie
du diese Aufgabe lsen wrdest.
Wenn du einen Ansatz hast, dann empfiehlt es sich, diese mit einem Tutor zu
besprechen; gemeinsam knnt ihr dann berlegen, ob dies eine sinnvolle Lsung des
Problems ist. (Sinn dieser Aufgabe ist es nicht unbedingt dich im Programmieren zu
schulen, sondern eher dein Gefhl fr das richtige Lsen von Aufgaben zu schrfen.)
Hinweise
Wenn das scanf mal die Eingabe ignoriert einfach im formatstring ein Leerzeichen an
den Anfang stellen, das wirft aus dem Tastaturpuffer alle Zeichen weg die nicht zum
Format passen...
--------------------------------------------------------------In dieser Aufgabe sollen Eigenschaften von Autos per Struct reprsentiert werden.
Erstelle zunchst ein Struct car und den dazugehrigen Typ car_t. Ein Auto hat folgende
Eigenschaften:
-Marke (VW, PORSCHE oder LAMBORGHINI)
-Maximalgeschwindigkeit
-Antiblockiersystem (enthalten/nicht enthalten)
-Trenanzahl
Entscheide selbst, wie du diese Eigenschaften umsetzt.
Erstelle dir zunchst eine Funktion, welche ein car_t liefert, dessen Eigenschaften sie
per Parameter erhlt.
Nun soll der Preis eines Autos geschtzt werden. Schreibe eine Funktion, die ein car_t
erhlt und den Preis folgendermaen schtzt:
-Nimm die Maximalgeschwindigkeit multipliziert mit 50
-Multipliziere mit der Trenanzahl
-Wenn das Auto ABS hat, addiere 5000 hinzu

-Ist die Marke Porsche, multipliziere mit 2, bei Lamborghini mit 20.
Erstelle ein Array mit 3 oder mehr Beispielautos und berechne per Schleife den
Gesamtpreis aller Autos.
--------------------------------------------------------------Schreibe ein Programm, das eine als Kommandozeilenparameter in numerischer Form
bergebene Zahl in Worten (also als Zahlwort) ausgibt. Ein Aufruf des fertigen
Programms knnte etwa wie folgt aussehen:
(~): ./zahlwort 174367
einhundertvierundsiebzigtausend dreihundertsiebenundsechzig

Hinweise
Alloziere zunchst einen Speicherblock, der gro genug ist, um das komplette
Zahlwort zu enthalten (z.B. via malloc).
Schreibe eine Funktion say_short_number(int number, char* buffer), die eine
bergebene Zahl zwischen 1 und 999 als Zahlwort in den ebenfalls bergebenen Puffer
kopiert.
Schreibe dann eine Funktion say_number(long int number, char* buffer), die eine
(nahezu) beliebig groe Zahl bergeben bekommt und fr alle in der Zahl verfgbaren
10^3er-Gruppen (tausend, million(en), milliarde(n), ...) jeweils say_short_number()
aufruft.
Zuordnungen von Zahl zu Zahlwort kannst du statt mittels case-Anweisung auch
durch ein Array von Zeichenketten definieren.
Beim Zerlegen von Zahlen helfen ggf. die Funktionen pow() und/oder log10() aus dem
Standardheader math.h.
Wenn du Funktionen aus der math.h benutzt musst du beim Kompilieren mit der GCC
das Kommando '-lm' angeben damit die entsprechende Libary einzubinden. (also z.B.
'gcc -lm zahlwort.c -o zahlwort')
Beachte die Ausnahmen der Zahlwrter elf, zwlf, sechzehn und siebzehn im
Gegensatz zu den brigen Zahlen unter 20.
--------------------------------------------------------------Problem
Ein Kaufmann trgt alle Transaktionen chronologisch in ein Journal ein. Daraus werden
einzelne Konten erstellt.
Aufgabe
Schreibt ein Programm das eine Datei einliest, in der in jeder Zeile folgenes steht: <Nr>
<Aktiv-Konto> <Passiv-Konto> <Betrag> Der Betrag wird dann in die beiden Konten
eingetragen, sodass er beim Aktiv-Konto auf der linken und beim Passiv-Konto auf der
rechten Seite erscheint.

Beispiel
Wenn diese Datei eingelesen wird:
1 BGA Verbindlichkeiten 10000
2 Handelswaren Verbindlichkeiten 2000
3 Verbindlichkeiten Bank 2000
4 Bank Forderungen 1000
Gibt es diese Ausgabe:
BGA
Soll
|
Haben
----------+----------1)10000 |
Verbindlichkeiten
Soll
|
Haben
----------+----------3)2000 | 1)10000
| 2)2000
Handelswaren
Soll
|
Haben
----------+----------2)2000 |
Bank
Soll
|
Haben
----------+----------4)1000 | 2)2000
Forderungen
Soll
|
Haben
----------+----------| 4)1000
---------------------------------------------------------------

Entwickeln Sie einen Taschenrechner, der die Eingabe zweier Zahlen erwartet und
diese addieren, subtrahieren, multiplizieren und dividieren kann. ber eine einzige
Prprozessor-Anweisung soll eingestellt werden knnen, ob nur mit Ganz- oder auch mit
Kommazahlen gearbeitet werden kann.

Entwickeln Sie eine C++-Anwendung zur Simulation eines Bankautomaten. Der


Anwender soll einen Benutzernamen (der die EC-Karte reprsentiert) und eine
dazugehrige PIN eingeben, um Zugriff auf sein Konto zu erhalten. Insgesamt soll die
Beispiel-Anwendung drei Konten mit unterschiedlichen Benutzernamen und PINs
untersttzen. Ist das Einloggen erfolgreich, kann der Anwender zwischen
Kontostandanzeige und Auszahlung eines Betrags whlen. Das Programm soll in einer
Endlosschleife laufen, um mehrmaliges Einloggen in den Bankautomaten zu
ermglichen. Setzen Sie die drei Konten auf beliebige Werte, um das Programm zu
testen, und loggen Sie sich mehrmals mit jedem Benutzer ein, um den Kontostand
anzuzeigen und Geld abzuheben.
Entwickeln Sie ein C++-Programm, das nach Eingabe zweier Stadtnamen die
Entfernung zwischen den beiden Stdten in Kilometer ausgibt. Verwenden Sie folgende
Daten, um Ihr Programm testen zu knnen: Die Entfernung zwischen Kln und Mnchen
betrgt 480 Kilometer, zwischen Mnchen und Berlin 530 Kilometer und zwischen Berlin
und Kln 500 Kilometer. Die Entfernung soll unabhngig von der Reihenfolge der
Eingabe der Stadtnamen ausgegeben werden.
--------------------------------------------------------------1. Gib die geraden Zahlen zweischen einem mindest Wert und einem maximal Wert
aus:
2. Schreib ein Program das zwei Zahlen solange ausliest, bis das Produkt von den zwei
Zahlen im Intervall von [45; 179] liegt und gib den Rest der Division zwischen den zwei
Zahlen aus.
3. Es wird ein random Array generiert, zum Beispiel mit Zahlen als Werten:
{2, 17, 10, 9, 16, 3, 9, 16, 5, 1, 17, 14}
Schreiben Sie ein Programm, das von einem Array bestehend aus Zahlen prft, wie
viele dieser Zahlen durch 3 teilbar sind.
Die Teilbarkeit durch drei wird einfach damit gefunden, indem der Divisionsrest (modulo
oder % in einigen Sprachen) berechnet wird und dann geprft wird, ob dieser
Divisionsrest gleich Null ist.

4. Wer kennt es nicht. Bei Mobiltelephonen, Webseiten und sogar am


Bankomaten mssen Passwrter eingegeben werden. Damit nicht ein
Unbefugter alle mglichen Passwrter ausprobiert, wird (meist) nach dem
dritten falschen Eingabeversuch das Konto gesperrt.
Das Passwort sei im Folgenden fest vorgegeben: "98765".

Schreiben Sie ein Programm, das den Anwender nach dem Passwort fragt.
Sobald es richtig eingegeben wurde, gilt die Person als berechtigt und
das Wort "BERECHTIGT" soll ausgegeben werden. Nach jeder fehlerhaften
Eingabe soll jedoch ausgegeben werden dass das Passwort falsch war und
wie viele Versuche noch bleiben.
AUFGABENSTELLUNG VON Passwortsperre - Programmieraufgaben.ch
--------------------------------------------------------------3. Es wird ein random Array generiert, zum Beispiel mit Zahlen als Werten:
{2, 17, 10, 9, 16, 3, 9, 16, 5, 1, 17, 14}
Schreiben Sie ein Programm, das von einem Array bestehend aus Zahlen prft, wie
viele dieser Zahlen durch 3 teilbar sind.
Die Teilbarkeit durch drei wird einfach damit gefunden, indem der Divisionsrest (modulo
oder % in einigen Sprachen) berechnet wird und dann geprft wird, ob dieser
Divisionsrest gleich Null ist.

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Das könnte Ihnen auch gefallen