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 C++ 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:
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 als alle geraden kopiert werden und in ein anderes alle ungeraden. Gib alle geraden und ungeraden Quadratzahlen und die jeweilige Anzahl aus!
Aufgabe 4: 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 C++ 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: Gehe von der Aufgabenstellung von Aufgabe 2 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: 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: 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:
void fuelleArray(int a[10]){ srand(time(0)); for(int i=0;i<10;i++){ a[i]=rand()%100; } } void ausgabe(int a[10]){ for (int i=0; i<10; i++) { cout<<a[i]<<" - "; } } void main() { const int max=10; int zahlen[max]; fuelleArray(zahlen); ausgabe(zahlen); getch(); }
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) }
Aufgabe 9: Array-Übung mit Zufallszahlen
Das Programm erstellt 12 Zufallszahlen zwischen 1 und 100
void erzeugezahlen(int zahlen[12]) { for (int i=0;i<=11 ;i++ ) { zahlen[i]=rand()%100+1; //Zufallszahl wird in die i-te Stelle des Arrays //geschrieben } } void ausgabezahlen(int zahlen[12]) { for (int i=0;i<=11 ;i++ ) { cout << zahlen[i] << " "; //Die i-te Zahl des Arrays wird ausgegeben. } } int summe(int zahlen[12]) { int sum=0; for (int i=0;i<=11 ;i++ ) { sum=sum+zahlen[i]; } return sum; } float mittelwert(int zahlen[12]) { float mw; mw = summe(zahlen)/12.0; //12.0 damit die Division ein float-Ergebnis liefert. return mw; } int anzahlgerade(int zahlen[12]) { int anzahl=0; for (int i=0;i<=11 ;i++ ) { if(zahlen[i]%2==0) anzahl++; //Erhöhung der Anzahl, wenn zahlen[i] gerade } return anzahl; } bool zahlvorhanden(int benutzerzahl, int zahlen[12]) { bool vorhanden=false; for (int i=0;i<=11 ;i++ ) { if (zahlen[i]==benutzerzahl) { //Überprüft, ob die i-te Zahl gleich der vorhanden=true; //Benutzerzahl ist, wenn ja, wird "vorhanden" } //gleich true gesetzt. } return vorhanden; } int main() { int zufallszahlen[12]; int benutzerzahl; srand(time(0)); //Entsprechend der Systemzeit wird gemischt cout << "Dieses Programm erzeugt zwoelf Zufallszahlen zwischen 1 und 100.\n"; erzeugezahlen(zufallszahlen); cout << "Ausgabe der Zufallszahlen: \n"; ausgabezahlen(zufallszahlen); cout << "\nDie Summe aller Zahlen beträgt: " << summe(zufallszahlen); cout << "\nDer Mittelwert aller Zahlen beträgt: " << mittelwert(zufallszahlen); cout << "\nDie Anzahl der geraden Zahlen beträgt: " << anzahlgerade(zufallszahlen); cout << "\nDie Anzahl der ungeraden Zahlen beträgt: " << 12-anzahlgerade(zufallszahlen); cout << "\n\nBitte geben Sie eine Zahl zwischen 1 und 100 ein: "; cin >> benutzerzahl; if (zahlvorhanden(benutzerzahl,zufallszahlen)==true) { cout << "\nIhre Zahl ist in der Liste vorhanden!"; } else { cout << "\nIhre Zahl kommt in der List nicht vor!"; } getch(); return 0; }