Aufgaben Eindimensionale Arrays

Aufgabe 1: Würfelsimulation

a) Entwickle eine Würfelsimulation, die es erlaubt 10 mal zu würfeln. Die Wurfergebnisse sollen dabei über den Zufallsgenerator erzeugt werden und in einem Integer-Array abgespeichert werden.
b) Ergänze das Programm derart, dass der Mittelwert der 10 Würfe berechnet wird und die Anzahl jener Würfe ermittel wird, die über dem Mittelwert liegen.

Hinweis 1: Es muss zuerst der Zufallsgenerator von CPP initialisiert werden (sonst erhält man stets die selbe Zufallsfolge)

srand (time(NULL)); // Intialisierung der srand Funktion  
wurf[i]=rand()%6 + 1; // liefert eine Zahl zwischen 1 und 6

Aufgabe 2: Prüfsumme

Zum Schutz von Fehlern werden Texte oft mit einem Prüfbyte versehen, das aus den Zeichen eines Textes berechnet wird. Eine einfache Technik zur Berechnung eines Prüfbytes besteht darin, alle Zeichen des Textes mit der Operation XOR (bitweise exklusives oder, ^) zu verknüpfen. Schreibe eine Funktion, der ein Text als char-Array übergeben wird und die daraus ein Prüfbyte nach der beschriebenen Technik berechnet.

Aufgabe 3: Quadratzahlen

Schreibe ein Programm, die in einem Array die ersten 20 Quadratzahlen (1^2, 2^2,…) ablegt. Diese Quadratzahlen sollen nun nach geraden und ungeraden aufgeteilt werden. In ein Array sollen alle geraden kopiert werden und in ein anderes alle ungeraden. Gib alle geraden und ungeraden Quadratzahlen und die jeweilige Anzahl aus!

Aufgabe 4: Zufallszahlen

Ein Array namens Bereich soll mit einer vorgegebenen Anzahl von Zufallszahlen zwischen den Grenzen ug und og belegt werden. Dabei können sich die Zahlen wiederholen.
Hinweis 1: Es muss zuerst der Zufallsgenerator von CPP initialisiert werden (sonst erhält man stets die selbe Zufallsfolge)

srand (time(NULL)); // Intialisierung der srand Funktion  //

Hinweis 2: Wie man eine Zufallszahl zwischen den Grenzen ug und og zu erhalten kann, zeigt die folgende Zeile

zahl[i]=rand()%(og-ug+1)+ug;

Aufgabe 5: Zufallszahlen - Erweiterung

Gehe von der Aufgabenstellung von Aufgabe 4 aus. Es dürfen sich aber jetzt die erzeugten Zufallszahlen nicht wiederholen. Am Beginn wird die erste Zufallszahl erzeugt. Dann erfolgt die schrittweise Bestimmung der restlichen Zahlen. Dabei muss jede neue Zufallszahl mit allen vorher erzeugten Zahlen veglichen werden. Nur wenn sie mit keiner davon übereinstimmt, wird sie in den Bereich übernommen.

Aufgabe 6: - Primzahlenberechnung mit dem Sieb des Erathostenes

Zur Berechnung aller Primzahlen bis zu einer Obergrenze n gibt es ein raffiniertes Verfahren, das vom griechischem Mahtematiker Erathostenes stammt. Es wird das Sieb des Erathostenes genannt und basiert auf der Idee, dass die Vielfachen einer Primzahl mit Sicherheit keine Primzahlen sind. Wenn wir z.B. wissen, dass 2 eine Primzahl ist, können wir alle Vielfache von 2 aus der Menge der Primzahlenkandidaten streichen. Die kleinste Zahl der dann verbleibenden Menge ist die nächste Primzahl. Wir eliminieren wiederum alle ihre Vielfache.

Implementieren lässt sich dieser Algorithmus sehr schön mit Hilfe eines Arrays der Länge n mit boolean Elementen.

Aufgabe 7: Sequentielle Suche

Schreibe eine Anwendung, die 25 Zufallszahlen zwischen -10 und 10 in ein Array schreibt. Der Anwender soll eine zu suchende Zahl eingeben und die Anwendung soll im Array nach der Zahl suchen. Das Programm soll anschließend ausgegeben, ob die gesuchte Zahl im Array enthalten ist oder nicht.

Programmiere die Suche als sequentielle Suche, d.h. fange beim ersten Arrayelement an und vergleiche es mit dem Suchwert. Falls es nicht das gesuchte Element ist, gehe zum nächsten Arrayelement usw..

Überlege dir, wie du Zufallszahlen zwischen -10 und 10 geschickt erzeugen kannst.

Aufgabe 8: Auswahlsort

Realisiere einen Sortieralgorithmus (Auswahlsort) um 10 zufällig erzeugte Integer-Werte zwischen 0 und 99 eines Arrays zu sortieren:

Um die ersten n Elemente eines Arrays a (z.B. des Datentyps int) aufsteigend zu sortieren, kann man folgendermaßen vorgehen:

Lösung

Aufgabe 9: Array-Übung mit Zufallszahlen

Das Programm erstellt 12 Zufallszahlen zwischen 1 und 100

Aufgabe 10: Bankomat

Realisiere einen Bankomaten mit einem Array, in welchem der jeweilige Wert der Scheine gespeichert ist und einem zweiten Array, in welchem die jeweilige Anzahl gespeichert ist:

wert[0] = 500,
wert[1] = 200,
wert[2] = 100,
...
anzahl[0] = Anzahl der 500er-Scheine
anzahl[1] = Anzahl der 200er-Scheine
anzahl[2] = Anzahl der 100er-Scheine
...

Das Besondere an diesem Bankomat ist, dass man weder Karte noch Code benötigt, um abzuheben ;-)

Ein neuer Bankomat ist leer, d.h. alle Werte im Array anzahl haben den Wert 0.

Daher muss der Bankomat befüllt werden. Das Unterprogramm befuellen(…) hat 2 Parameter:

Mit dem Unterprgoramm auszahlen(…) kann man den Bankomat veranlassen, einen bestimmten Betrag auszuzahlen. Der Automat muss nun berechnen, ob und mit welchen Scheinen er den Betrag auszahlen kann. Dabei gilt die Regel, dass er immer mit den größtmöglichen Scheinen auszahlt. Die Anzahl der jeweiligen Scheine wird auf der Konsole ausgegeben.

Beispiel: Der Betrag 790 soll ausgezahlt werden - Ausgabe auf der Konsole:

Natürlich muss dabei überprüft werden, ob die benötigten Scheine überhaupt verfügbar sind. Falls nicht, wird eine Fehlermeldung ausgegeben: Betrag nicht verfügbar.

Bei einer Auszahlung müssen auch die Werte im entsprechenden Array reduziert werden.

Es soll intern jeweils eine Schleife verwendet werden und so programmiert sein, dass man ohne großen Aufwand daraus einen Bankomat machen könnte, der beispielsweise auch 5er, 2er und 1er auszahlt.

Der Benutzer wird immer wieder gefragt, ob er einzahlen, auszahlen oder das Programm beenden möchte.

Aufgabe 11 - Verständnis-Aufgabe

Gib an, welche der mit a) bis g) bezeichneten Anweisungen syntaktisch korrekt sind. Falls ja, beschreiben das Ergebnis dieser Anweisungen.

void ArrayTest1()
{
int a[10];
for (int i=1; i<=10;i++) a[i] = 0; // a)
int b[2], c[2], d[3];
b[0]=0; b[1]=1;
c=b; // b)
int x=b[b[b[0]]]; // c)
c[0]=0; c[1]=1;
d[0]=0; d[1]=1; d[2]=2;
if (b==c) x++; // d)
if (c==d) x++; // e)
int s1=sizeof(a); // f)
int s2=sizeof(a)/sizeof(a[0]); // g)
}

Weitere Übungsaufgaben

Schreibe ein Programm, dass

Ex 1

…das eine Folge von n ganzen Zahlen einliest und jene Zahlen aus der Folge löscht, die mehrmals vorkommen. Anschließend soll die Folge ausgegeben werden.

Lösung

Ex 2

…das eine Folge von n ganzen Zahlen einliest und jene Zahlen aus der Folge löscht, die größer als eine vorgegebene Zahl sind. Anschließend soll die Folge ausgegeben werden.

Lösung

Ex 3

…das eine maximal 80 Zeichen lange Zeichenfolge umdreht.

Lösung

Ex 3a

…das an einer maximal 40 Zeichen langen Zeichenfolge überprüft, ob es sich um ein Palindrom handelt.

Hinweis: Von einem Palindrom spricht man dann, wenn ein Wort von vorne und hinten gelesen gleich aussieht, z.B. LAGERREGAL

Lösung

Ex 4

…das zwei steigend sortierte Buchstabenfolgen zu einer sortierten Folge zusammenfasst. In der Ergebnisfolge dürfen keine gleichen Buchstaben vorkommen. Bei der Eingabe soll überprüft werden, ob die Buchstabenfolgen steigend sortiert sind.

Ex 5

…das zwei monoton steigende Zahlenfolgen zu einer monoton steigenden Zahlenfolge zusammenfasst und ausgibt.

Ex 6

…das zwei gleichlange Wörter einliest und den HAMMING-Abstand berechnet: Als HAMMING-Ab-stand zweier Wörter mit gleichlangen Binärcodes wird die Anzahl jener Stellen bezeichnet, in denen sich die beiden Wörter unterscheiden.

Beispiel:
001010110 101000110
HAMMING-Abstand:2

Ex 7

…das Vektoren verknüpft. Folgende Operationen sollen durchführbar sein:
  • Addition zweier Vektoren,
  • Subtraktion zweier Vektoren,
  • Multiplikation von Vektor und Skalar,
  • skalares Produkt zweier Vektoren.

Die Anzahl der Elemente der Vektoren soll mittels Konstante definiert werden. z.B. #define MAX 5

Ex 8

…das wie ein Auszählreim arbeitet: n Kinder sind im Kreis aufgestellt. Nach Aufsagen eines Auszählreimes mit m Silben wird das jeweils m-te Kind im Kreis ausgeschieden. Auszugeben ist die Reihenfolge, in der die Kinder ausscheiden.

Anleitung: Jedem Kind ist ein Element eines Arrays zugeordnet. Zu Beginn werden sämtliche Elemente des Arrays gleich 1 gesetzt. Danach werden die Elemente zyklisch durchlaufen und das jeweils m-te Element gleich 0 gesetzt. Die Indizes der 0 gesetzten Elemente entsprechen den Nummern der ausgeschiedenen Kinder.

Lösung

Ex 9

…das alle Primzahlen, die kleiner oder gleich der natürlichen Zahl n sind, ausgibt.

Anleitung (Siebverfahren des ERATOSTHENES): Verwende ein Array mit dem Index 0..n-2, dessen Elemente gleich 1 (wahr) gesetzt werden. Danach betrachtet man mit dem Index 0 beginnend der Reihe nach sämtliche Elemente mit dem Wert wahr und setzt jene Elemente gleich 0 (falsch), deren Indizes Vielfache des gerade betrachteten Indexwertes+2 sind. Die Indizes jener Elemente, die den Wert wahr beinhalten, sind Primzahlen.

Lösung

Ex 10

…das ein Kartenspiel von 52 Karten an beliebig viele Spieler austeilt und das Blatt jedes Spielers sortiert ausgibt. Die Anzahl der Spieler soll eingegeben werden. Beispiel:

Ex 11

… das einen Text gemäß der Cäsar-Verschlüsselung codiert. Dabei wird jeder Buchstabe eines Textes durch seinen m-ten Nachfolger erstetzt.

z.B. Hallo Welt, m=3
wird zu Kdoor Zhow

Lösung