Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 1
Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 1
Grundkurs Informatik Aufgabensammlung mit Lösungen Teil 1
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