30.11.2012 Aufrufe

Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 1

Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 1

Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 1

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

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

}<br />

printf("\nAusgabe z(%d): %d,%d",k,tpos0-256*k,j-1);<br />

pl=1; // Länge von p ist 1<br />

p=(BYTE *)realloc(p,s); // Speicherplatz für p<br />

p[0]=tpos0=c; // Zeichen c in p speichern<br />

}<br />

if(!(i%10000)) printf("."); // Fortschrittsbalken<br />

if(sst) getch();<br />

}<br />

tabSearch(p,pl,&tpos); // letztes p in Code-Tab. suchen<br />

k=tpos0/256;<br />

if(high) { // Code in z speichern<br />

z[j]=(BYTE)(tpos0-256*k);<br />

z[++j]=0;<br />

z[j]=SETH4(z[j],GETL4((BYTE)k));<br />

}<br />

else {<br />

z[j]=SETL4(z[j++],GETL4((BYTE)k));<br />

z[j++]=(BYTE)(tpos0-256*k);<br />

}<br />

free(p);<br />

free(pc);<br />

return j;<br />

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

// LZW-Decodierung der nd Byte des Arrays z in das Array x.<br />

// Es wird eine 12-Bit Code-Tabelle verwendet.<br />

// Hinweis: es werden keine C-Funktionen zur String-Verarbeitung<br />

// verwendet, da sonst in den Texten vorkommende 0-en fälschlich<br />

// als String-Ende interpretiert würden.<br />

// Rückgabewert: Anzahl der Bytes in x<br />

//<br />

// Algorithmus:<br />

// Initialisiere die Code-Tabelle <strong>mit</strong> den Einzelzeichen<br />

// Weise dem Präfix p den Leerstring zu<br />

// Wiederhole, solange Eingabezeichen vorhanden sind:<br />

// Lies nächsten Eintrag (row,col) aus z<br />

// Wenn zu (row,col) in der Code-Tabelle ein String sz gefunden wird:<br />

// Gib den zu sz gehörenden String aus<br />

// Setze c = erstes Zeichen dieses Strings<br />

// Bilde pc=p+c durch Anhängen von c an p<br />

// Trage pc in die Code-Tabelle ein, falls noch nicht vorhanden<br />

// Setze p auf den zu dem Code sz gehörigen String<br />

// Sonst:<br />

// setze c = erstes Zeichen von p<br />

// Bilde pc=p+c durch Anhängen von c an p<br />

// Gib pc aus<br />

// Trage pc in die Code-Tabelle ein<br />

// Setze p=pc<br />

// Ende der Schleife<br />

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

long decode(long nc,BYTE x[], BYTE z[], BYTE sst) {<br />

long n=0, j=0, i, pl=0, pcl;<br />

int tpos, tnext=256, k, high=1;<br />

BYTE c, *h, *sz=NULL, *p=NULL, *pc=NULL;<br />

size_t s=sizeof(BYTE);<br />

if(nc

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!