Hausaufgaben 04 loesung PDF

Title Hausaufgaben 04 loesung
Author YIWEI CAI
Course Einführung in die Informatik
Institution Technische Universität Berlin
Pages 8
File Size 254.9 KB
File Type PDF
Total Downloads 55
Total Views 121

Summary

Download Hausaufgaben 04 loesung PDF


Description

Einführung in die Informatik - WS 18/19 Technische Universität Berlin

Neuronale Informationsverarbeitung

C/C++ Übungsblatt 4 (Block 1) Prof. Dr. Klaus Obermayer und Mitarbeiter Arrays und Pointerarithmetik Verfügbar ab: Abgabe bis:

09.11.2018 19.-23.11.2018

Aufgabe 1: Arithmetischer Mittelwert und Standardabweichung

2 Punkte

Schreiben Sie ein C-Programm, welches ein int-Array von N = 1000 Zufallszahlen im Intervall [-10,+30] erzeugt. Berechnen Sie anschließend den arithmetischen Mittelwert und bestimmen Sie die Anzahl der negativen Werte im Array. Zuletzt sollen beide Ergebnisse auf der Konsole ausgegeben werden. Der arithmetische Mittelwert µ wird berechnet mit: N 1X xi µ= N i=1 Die Vorgabe ist unter den Hinweisen zu finden und steht auf ISIS zum Download bereit. Hinweis 1: Zum Erzeugen einer Zufallszahl wird die Funktion int rand() aus der Standardbibliothek verwendet, welche eine positive Zufallszahl vom Typ int im Intervall [0, RAN D_MAX] erzeugt. Hierbei ist in der Regel RAN D_MAX = 32767. Diese muss aber von Ihnen noch so angepasst werden, dass sie zwischen -10 und +30 liegt. Erinnern Sie sich noch an den Modulo-Operator? Hinweis 2: Da Computer keine richtigen, sondern nur sogenannte Pseudozufallszahlen erzeugen können, ist ein Aufruf der Funktion void srand(int seed), ebenfalls aus der Standardbibliothek, nötig, um eine Startposition festzulegen. Dies ist in der Vorgabe bereits unter der Verwendung der aktuellen Zeit mit time(0) erfolgt.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

#include #include #include #include



/* * Dieses Programm erzeugt und initialisiert einen int−Array zufaellig. * Anschliessend wird der arithmetischer Mittelwert berechnet, die Anzahl * negativer Werte bestimmt und beides auf der Konsole ausgegeben. */ int main(void) { // Initialisiere Zufallszahlengenerator srand(time(0)); // Deklariere und Intialisiere Variablen

weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=14110

1

Info 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 }

WS 18/19

C/C++ Übungsblatt 4 (Block 1)

double arithm_mittelwert = 0.0; int anzahl_negative = 0; // Array fuer Zufallszahlen anlegen // ... Code hier einfuegen ... // Zufallszahlen erzeugen // ... Code hier einfuegen ... // Arithmetischen Mittelwert berechnen // ... Code hier einfuegen ... // Anzahl negativer Werte im Array bestimmen // ... Code hier einfuegen ... // Ausgabe printf("Der arithmetische Mittelwert ist: %g\n", arithm_mittelwert); printf("Negative Werte: %d\n", anzahl_negative);

Musterlösung: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

#include #include #include #include



/* * Dieses Programm erzeugt und initialisiert einen int−Array zufaellig. * Anschliessend wird der arithmetischer Mittelwert und die Standardabweichung berechnet und auf der Konsole ausgegeben. * */ int main(void) { // Initialisiere Zufallszahlengenerator srand(time(0)); // Deklariere und Intialisiere Variablen double arithm_mittelwert = 0.0; int anzahl_negative = 0; // Array fuer Zufallszahlen anlegen const int anzahlZufallszahlen = 1000; int zahlen[anzahlZufallszahlen]; // Zufallszahlen erzeugen for(int i = 0; i < anzahlZufallszahlen; ++i) { zahlen[i] = rand() % 41 − 10; } // Arithmetischen Mittelwert berechnen for(int i = 0; i < anzahlZufallszahlen; ++i) {

weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=14110

2

Info 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 }

WS 18/19

C/C++ Übungsblatt 4 (Block 1)

arithm_mittelwert += zahlen[i]; } arithm_mittelwert /= anzahlZufallszahlen; // Anzahl negativer Werte bestimmen for(int i = 0; i < anzahlZufallszahlen; ++i) { if (zahlen[i] < 0) { anzahl_negative++; } } // Ausgabe printf("Der arithmetische Mittelwert ist: %g\n", arithm_mittelwert); printf("Negative Werte: %d\n", anzahl_negative);

Aufgabe 2: Caesar-Chiffre

3 Punkte

Nach Angaben des römischen Schriftstellers Sueton „verschlüsselte“ Julius Caesar seine militärische Korrespondenz mittels einer nach ihm benannten Methode: Jedes Zeichen aus dem Klartext wird um eine konstante Anzahl von Zeichen im Alphabet verschoben. Das Chiffrieren mit einer Verschiebung von 3 Zeichen bedeutet für Zeichen aus dem ASCII-Code also:

Schreiben Sie zuerst eine Funktion char shiftChar(char c, int shift), welche das Zeichen c um shift Zeichen im Alphabet verschiebt. Der Einfachheit halber sollen nur große und kleine lateinische Buchstaben verschoben werden. Zeichen, welche nicht zwischen ’a’ und ’z’ bzw. ’A’ und ’Z’ liegen (zum Beispiel ’ ’ oder ’!’), sollen nicht verändert werden. Hinweis An den Grenzen soll umgebrochen werden: y verschoben um 3 soll b ergeben, b verschoben um -3 soll y ergeben. Schreiben Sie weiterhin eine Funktion void cipher(char str[], int shift), welche alle Zeichen des Strings str mit dem Caesar-Ciffre chiffriert, in dem sie auf jedes Zeichen in str die char shiftChar(char, int)-Funktion anwendet. Die void cipher(char str[], int shift)-Funktion wird in der main-Funktion der Vorgabe zum chiffrieren aufgerufen. Zum dechiffrieren dient die gleiche Funktion mit negativem Verschiebungsparameter. Hinweis: Gehen Sie davon aus, dass shift immer im Bereich von −25 bis 25 liegt. Als Vorgabe dient der folgende Quellcode (welcher auch auf ISIS bereit steht):

weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=14110

3

Info

WS 18/19

C/C++ Übungsblatt 4 (Block 1)

Listing 1: caesar.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

#include #include /* * Bekommt ein beliebiges Zeichen c und einen Wert shift uebergeben. * Shiftet alle Zeichen aus dem Bereich a−z und A−Z um den Wert Shift. * An den Wertebereichsgrenzen findet ein Umlauf statt (Beispielsweise: * nach Z folgt A, vor A liegt Z, nach z folgt a und vor a liegt z). * Zahlen ausserhalb des Bereichs werden unveraendert zurueckgegeben. * Gibt das kalkulierte Zeichen zurueck. */ char shiftChar(char c, int shift) { // ... hier Code einfuegen ... } /* * Bekommt einen beliebigen C−String uebergeben. * Fuehrt auf jedem Zeichen des Strings die shiftChar−Funktion aus. * Der uebergebene originale String wird dabei veraendert. */ void cipher(char str[], int shift) { // ... hier Code einfuegen ... } /* * Testprogramm, das Strings mit dem Caesar−Chiffre chiffrieren kann. * Es benutzt dazu die cipher−Funktion. */ int main(void) { char str[] = "Das ist der Originaltext!"; // Originaltext int shift = 3; printf("Original: "); printf("%s\n", str); // Verschluesseln cipher(str, shift); printf("Verschluesselt: "); printf("%s\n", str); // Entschluesseln cipher(str, −shift); printf("Entschluesselt: "); printf("%s\n", str); }

Bei richtiger Implementation sollte der folgende Text auf der Konsole ausgegeben werden: 1 Original: Das ist der Originaltext! 2 Verschluesselt: Gdv lvw ghu Ruljlqdowhaw! 3 Entschluesselt: Das ist der Originaltext!

weitere Informationen unter https://isis.tu-berlin.de/course/view.php?id=14110

4

Info

WS 18/19

C/C++ Übungsblatt 4 (Block 1)

Musterlösung:

Listing 2: caesar.c 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53

#include #include /* * Bekommt ein beliebiges Zeichen c und einen Wert shift uebergeben. * Shiftet alle Zeichen aus dem Bereich a−z und A−Z um den Wert Shift. * An den Wertebereichsgrenzen findet ein Umlauf statt (Beispielsweise: * nach Z folgt A, vor A liegt Z, nach z folgt a und vor a liegt z). * Zahlen ausserhalb des Bereichs werden unveraendert zurueckgegeben. * Gibt das kalkulierte Zeichen zurueck. */ char shiftChar(char c, int shift) { int s = c; if (’A’...


Similar Free PDFs