Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 1

Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 1 Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 1

www2.fh.rosenheim.de
von www2.fh.rosenheim.de Mehr von diesem Publisher
30.11.2012 Aufrufe

1-64 Aufgaben und Lösungen 6 6 0 16=9 5 4 0100 6 66 - - 6 5 0101 1 1 6 661=A 66 6 0111 1 11 - - 61 7 0111 6 6 8 116=B 11 8 1000 6 66 - - 16 9 1001 1 661 - - 661 A 1010 1 1 A 6611=C 116 B 1011 6 6 5 16=D 6611 C 1100 6 66 - - 16 D 1101 1 661 - - 66116 E 1110 1 6611 - - 661166 F 1111 6 6 A 66116=E 6 66 - - 1 661 - - 1 6611 - - 6 66116 - - 6 6 E 661166=F 1 61 - - - - 7 - Dateigröße = 176 Bit Aufgabe 3.4.7 (P3) Schreiben Sie ein C-Programm zur Datenkompression durch Differenzcodierung unter Verwendung des in Tabelle 3.4.4 dargestellten Block-Codes mit 4 Bit Wortlänge. Packen Sie dazu jeweils zwei Codewörter in ein Byte. Lösung Die Tabelle der zu verwendenden Differnezen lautet: Differenz d Code _________________________ 0 0000 1 0001 -1 1001 2 0010 -2 1010 3 0011 -3 1011 4 0100 -4 1100 5 0101 -5 1101 6 0110 -6 1110 7 0111 -7 1111 |d|>7 1000 und danach 8 Bit für den Datenwert Da die Differenzen durch jeweils vier Bit dargestellt werden, lassen sich je zwei Differenzen in ein Byte packen. Die ist in dem nachfolgenden Programm realisiert. Das Packen und Entpacken wird durch vier am Anfang des Programms definierte Makros erledigt.

Aufgaben und Lösungen 1-65 //************************************************************************ // Aufgabe 3.4.7 // Kompression durch Differenz-Codierung // Differenz=0: Code=0000, // 1: 0001, -1: 1001, 2: 0010, -2: 1010, // 3: 0011, -3: 1011, 4: 0100, -4: 1100, // 5: 0101, -5: 1101, 6: 0110, -6: 1110, // 7: 0111, -7: 1111, |Differenz|>7: 1000 //------------------------------------------------------------------------ #include #include #include #include #include #define ESC 27 #define BYTE unsigned char #define MAXLINE 80 #define MAXDATA 800000 // Makros #define GETH4(x) ((x)>>4) // liefert 4 High-Bits von x #define GETL4(x) ((x)&15) // liefert 4 Low-Bits von x #define SETL4(x,y) (((x)&240)|((y)&15)) // kopiert L4 von y in L4 von x #define SETH4(x,y) (((x)&15) |((y)0) printf("Menge der gelesenen Daten: %d Byte",n); else printf("\n\nEs wurden keine Daten gelesen!"); } else if(c=='R') { // Code von Platte lesen nc=diskReadBytes(z); if(nc>0) printf("Menge der gelesenen Code-Zeichen: %d Byte",nc);

Aufgaben und <strong>Lösungen</strong> 1-65<br />

//************************************************************************<br />

// Aufgabe 3.4.7<br />

// Kompression durch Differenz-Codierung<br />

// Differenz=0: Code=0000,<br />

// 1: 0001, -1: 1001, 2: 0010, -2: 1010,<br />

// 3: 0011, -3: 1011, 4: 0100, -4: 1100,<br />

// 5: 0101, -5: 1101, 6: 0110, -6: 1110,<br />

// 7: 0111, -7: 1111, |Differenz|>7: 1000<br />

//------------------------------------------------------------------------<br />

#include <br />

#include <br />

#include <br />

#include <br />

#include <br />

#define ESC 27<br />

#define BYTE unsigned char<br />

#define MAXLINE 80<br />

#define MAXDATA 800000<br />

// Makros<br />

#define GETH4(x) ((x)>>4) // liefert 4 High-Bits von x<br />

#define GETL4(x) ((x)&15) // liefert 4 Low-Bits von x<br />

#define SETL4(x,y) (((x)&240)|((y)&15)) // kopiert L4 von y in L4 von x<br />

#define SETH4(x,y) (((x)&15) |((y)0) printf("Menge der gelesenen Daten: %d Byte",n);<br />

else printf("\n\nEs wurden keine Daten gelesen!");<br />

}<br />

else if(c=='R') { // Code von Platte lesen<br />

nc=diskReadBytes(z);<br />

if(nc>0) printf("Menge der gelesenen Code-Zeichen: %d Byte",nc);

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!