Hausaufgabe 10 loesung PDF

Title Hausaufgabe 10 loesung
Course Einführung in die Informatik
Institution Technische Universität Berlin
Pages 7
File Size 209.9 KB
File Type PDF
Total Downloads 81
Total Views 169

Summary

Hausaufgabenblatt mit Lösungen...


Description

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

Computer Vision & Remote Sensing

Übungsblatt 10 (Block 3) Prof. Dr. Olaf Hellwich und Mitarbeiter Wiederholung, Zahlendarstellung Verfügbar ab: Abgabe bis:

08.01.18 15.01.18-19.01.18

Aufgabe 1: Zahlendarstellung

2 Punkte

In der folgenden Tabelle sollen die vier Zahlen A, B, C und D in mehrere Zahlensysteme konvertiert werden. Jede Zeile der Tabelle repräsentiert eine dieser vier Zahlen.

Zahl A Zahl B Zahl C Zahl D

Dual 1011

Oktal

Dezimal

Hexadezimal

32 42 AB

Vervollständigen Sie diese Tabelle, indem Sie jede Zahl in die jeweils drei übrigen Zahlensysteme umwandeln. Der Rechenweg muss nicht angegeben werden.

Zahl E

Dual 1111

Oktal 17

Dezimal 15

Hexadezimal F

Musterlösung:

Zahl Zahl Zahl Zahl

A B C D

Dual 1011 11010 101010 10101011

Oktal 13 32 52 253

Dezimal 11 26 42 171

Hexadezimal B 1A 2A AB

Aufgabe 2: Binäre Addition

2 Punkte

Berechnen Sie 42(10) + 4110 =?(10) und 70(8) + 11(8) =?(8) in Binärdarstellung. Gehen Sie dabei wie folgt vor: 1. Umwandeln der ersten Zahl in eine Dualzahl 2. Umwandeln der zweiten Zahl in eine Dualzahl 3. Addieren Sie die beiden Dualzahlen 4. Wandeln Sie die Dualzahl in eine Dezimalzahl bzw. Oktalzahl um

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

1

Info

WS 17/18

Übungsblatt 10 (Block 3)

Musterlösung:

42(10) + 41(10) = 83(10) , weil 1. 42(10) = 00101010(2) 2. 41(10) = 00101001(2) 3. 00101010(2) + 00101001(2) = 01010011(2) 4. 01010011(2) = 1 · 26 + 1 · 24 + 1 · 21 + 1 · 20 = 64(10) + 16(10) + 2(10) + 1(10) = 83(10) 70(8) + 11(8) = 101(8) , weil 1. 70(8) = 111000(2) 2. 11(8) = 1001(2) 3. 111000(2) + 1001(2) = 1000001(2) 4. 1000001(2) = 001000001(2) = 101(8) , da 001(2) = 1(8) und 000(2) = 0(8) und 001(2) = 1(8) (3 Bits → 1 Oktalziffer) Aufgabe 3: Binäre Subtraktion

2 Punkte

Berechnen Sie 31(10) − 9(10) =?(10) und DC (16) − AC (16) =?(16) in Binärdarstellung. Gehen Sie dabei wie folgt vor: 1. Umwandeln der ersten Zahl in eine Dualzahl 2. Umwandeln der zweiten Zahl in eine Dualzahl 3. Subtrahieren Sie die beiden Dualzahlen 4. Wandeln Sie die Dualzahl in eine Dezimalzahl bzw. Hexadezimalzahl um

Musterlösung:

31(10) − 9(10) = 22(10) , weil 1. 31(10) = 11111(2) 2. 9(10) = 01001(2) 3. 11111(2) − 01001(2) = 10110(2) 4. 10110(2) = 1(10) · 16(10) + 0(10) · 8(10) + 1(10) · 4(10) + 1(10) · 2(10) + 0(10) · 1(10) = 22(10) DC (16) − AC (16) = 30(16) , weil 1. DC (16) = 11011100(2) 2. AC (16) = 10101100(2) 3. 11011100(2) − 10101100(2) = 00110000(2) 4. 00110000(2) = 30(16) , da 0011(2) = 3(16) und 0000(2) = 0(16) (4 Bits → 1 Hexadezimalziffer) Nur Java Aufgabe 4: Konverter

4 Punkte

Betrachten Sie das folgende unvollständige Java-Programm, welches eine natürliche Zahl in Dezimaldarstellung vom Benutzer einliest, diese in Binärdarstellung ausgeben und dann wieder in Dezimaldarstellung konvertieren soll: 1 2

/** * Stellt eine statische Methode zur Konvertierung einer

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

2

Info 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 54 55 56 57 58

WS 17/18

Übungsblatt 10 (Block 3)

* Ganzzahl (int) in eine Dualzahl zur Verfuegung, wobei * die Koeffizienten der Dualzahl in einem Array zurueckgegeben * werden. */ public class Konverter { /** statische Methoden */ // konvertiert eine Zahl in Dezimaldarstellung in Binaerdarstellung // mit einer vorgegebenen Anzahl an Stellen (Bits), die als // hinreichend gross angenommen wird public static boolean[] dezimalZuDual(int dezimal, int bits){ // IHR CODE HIER } // konvertiert eine Zahl in Dualzahldarstellung in Dezimalzahldarstellung um public static int dualZuDezimal(boolean[] dual){ // IHR CODE HIER } // gibt die als Array uebergebene Dualzahl unter Vernachlaessigung // der fuehrenden Nullen auf die Konsole aus public static void print(boolean[] dualZahl){ // vernachlaessige fuehrende Nullen, ermittle ersten // nicht−Null−Koffizient im Array int ersteEins = dualZahl.length−1; while (ersteEins > 0 && !dualZahl[ersteEins]){ ersteEins−−; } System.out.print("Die Binaerdarstellung lautet "); // gebe beginnend beim Index ersteEins alle Zahlen des // Arrays dualZahl nebeneinander aus for (int i = ersteEins; i >= 0; i−−){ if (dualZahl[i]) System.out.print(1); else System.out.print(0); } System.out.println(); } public static void main(String[] argv){ // Dezimalzahl vom Benutzer einlesen int n = Terminal.askInt("Bitte Dezimalzahl eingeben: "); // in Dualdarstellung umkonvertieren und ausgeben int anzahlBits = 16; boolean[] dual = dezimalZuDual(n, anzahlBits); print(dual); // in Dezimaldarstellung umkonvertieren und ausgeben

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

3

Info 59 60 61 62

WS 17/18

Übungsblatt 10 (Block 3)

System.out.println("Dezimalzahl: "+dualZuDezimal(dual)); } }

1. Schreiben Sie die Methode dezimalZuDual folgendermaßen: Berechnen Sie die Dualzahl-Darstellung der übergebenen Ganzzahl dezimalZahl und speichern Sie diese im bereits existierenden Array dualZahl. Beispielsweise ist für den Fall, dass bits 4 ist und für dezimalZahl 3 übergeben wird, der Array dualZahl folgendermaßen zu setzen (3(10) = 11(2) ): Index 3 2 1 0 Dualzahl 0 0 1 1 Array false false true true 2. Schreiben Sie die Methode dualZuDezimal, welche eine Dualzahl in eine Dezimalzahl umrechnen soll. Beispiel für eine 4-Bit Dualzahl: Index Dualzahl Array Umrechnung

3 0 false 0

2 0 false +0

1 1 true + 21

0 1 true +20

= 3(10)

Hinweis 1: Verwenden Sie eine while-Schleife und benutzen Sie den Algorithmus aus Allgemeine Umrechnung (Tutorium), um ausgehend von einer Dezimalzahl die Darstellung zur Basis 2 zu berechnen. Hierzu ist es hilfreich, sich zu erinnern, wie Ganzzahldivision (Operator / mit int-Operanden) sowie Restberechnung bei der Ganzzahldivision (Operator % mit int-Operanden) in Java einzusetzen sind. Hinweis 2: Für das Berechnen von Potenzen kann die Methode Math.pow() aufgerufen werden. 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

/** * Stellt eine statische Methode zur Konvertierung einer * Ganzzahl (int) in eine Dualzahl zur Verfuegung, wobei * die Koeffizienten der Dualzahl in einem Array zurueckgegeben * werden. */ public class Konverter { /** statische Methoden */ // konvertiert eine Zahl in Dezimaldarstellung in Binaerdarstellung // mit einer vorgegebenen Anzahl an Stellen (Bits), die als // hinreichend gross angenommen wird public static boolean[] dezimalZuDual(int dezimalZahl, int bits){ int basis = 2; // festkodierte Basis 2 boolean[] dualZahl = new boolean[bits]; // das Array wird automatisch mit Nullen initialisiert int index = 0; // gibt die Stelle im Array an, die berechnet wird // laufe durch alle Stellen gemaess der bekannten Umrechnung von // Dezimalzahl in Zahl beliebiger Basis (hier Basis 2) while (dezimalZahl > 0 && index < bits){ dualZahl[index] = (dezimalZahl % basis == 1); dezimalZahl /= basis;

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

4

Info

WS 17/18

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 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

Übungsblatt 10 (Block 3)

index++; } return dualZahl; } // konvertiert eine Zahl in Dualzahldarstellung in Dezimalzahldarstellung um public static int dualZuDezimal(boolean[] dualZahl){ int dezimalZahl = 0; for (int i = 0; i < dualZahl.length; i++){ if (dualZahl[i]){ dezimalZahl += Math.pow(2,i); } } return dezimalZahl; } // gibt die als Array uebergebene Dualzahl unter Vernachlaessigung // der fuehrenden Nullen auf die Konsole aus public static void print(boolean[] dualZahl){ // vernachlaessige fuehrende Nullen, ermittle ersten // nicht−Null−Koffizient im Array int ersteEins = dualZahl.length−1; while (ersteEins > 0 && !dualZahl[ersteEins]){ ersteEins−−; } System.out.print("Die Binaerdarstellung lautet "); // gebe beginnend beim Index ersteEins alle Zahlen des // Arrays dualZahl nebeneinander aus for (int i = ersteEins; i >= 0; i−−){ if (dualZahl[i]) System.out.print(1); else System.out.print(0); } System.out.println(); } public static void main(String[] argv){ // Dezimalzahl vom Benutzer einlesen int n = Terminal.askInt("Bitte Dezimalzahl eingeben: "); // in Dualdarstellung umkonvertieren und ausgeben int anzahlBits = 16; boolean[] dual = dezimalZuDual(n, anzahlBits); print(dual); // in Dezimaldarstellung umkonvertieren und ausgeben System.out.println("Dezimalzahl: "+dualZuDezimal(dual)); } }

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

5

Info

WS 17/18

Übungsblatt 10 (Block 3)

Nur C/C++ Aufgabe 4: Konverter

4 Punkte

Betrachten Sie den vorgegebenen Quellcode convert.cpp. Vervollständigen Sie in dieser Datei die Funktion vector dezimalZuOktal(unsigned int &dezimalzahl), welche eine Dezimalzahl in eine Oktalzahl (einen Vektor aus 0en bis 7en) konvertiert. Vervollständigen Sie außerdem die Funktion unsigned int OktalZuDezimal(vector &oktaklzahl), welche eine Oktalzahl in eine Dezimalzahl konvertiert.

Achtung: Das Element am Index 0 (oktalzahl.at(0)) ist die rechteste Ziffer der Oktalzahl. Für die Zahl 110(10) = 156(8) zeigt die folgende Tabelle, an welchem Index welches Bit steht: Index Wert

0 6

1 5

2 1

Hinweis 1: Benutzen Sie den Algorithmus aus dem Tutorium, um ausgehend von einer Dezimalzahl die Darstellung zur Basis 8 zu berechnen. Eine while-Schleife bietet sich dabei an. Erinnern Sie sich, wie Ganzzahldivision (Operator /) sowie Restberechnung bei der Ganzzahldivision (Operator %) in C++ einzusetzen sind. Hinweis 2: Für die Berechnung von Potenzen können Sie die Funktion double pow(double basis, double exponent) aus der cmath-Bibliothek verwenden. Hinweis 3: Beachten Sie bei der Verwendung von chars den Unterschied zwischen dem Buchstaben ’7’ und der Zahl 7. (’7’ entspricht der Zahl 55, vgl. ASCII-Tabelle.) Listing 1: convert.cpp 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

#include #include #include #include



using namespace std; vector dezimalZuOktal(unsigned int &dezimalzahl){ // Hier ihr Code ... } unsigned int oktalZuDezimal(vector &oktalzahl){ // Hier ihr Code ... } string printOktalZahl(vector &oktalzahl){ stringstream s; for(int i = oktalzahl.size()−1; i >= 0 ; i−−){ s...


Similar Free PDFs