{"id":"informatyka-2014-grudzien-probna-rozszerzona/zad/3.3","paper_id":"informatyka-2014-grudzien-probna-rozszerzona","number":"3.3","points":null,"ptype":"open","subject":"informatyka","category":"probna","year":2014,"month":"grudzien","level":"rozszerzona","text":"Zadanie 3.3.\nZapisz algorytm dekodowania tekstu (w postaci listy kroków lub w wybranym języku\nprogramowania), który pobiera tablicę bajtów tekstu skompresowanego i wyświetla\nźródłowy tekst.\nW algorytmie możesz wykorzystać poniższe funkcje lub ich odpowiedniki w wybranym\njęzyku programowania:\ntestBit (bajt, numerBitu) - zwraca wartość TRUE, jeśli w bajcie bit\no podanym numerze ma wartość 1, lub FALSE, jeśli ten bit ma wartość 0.\nustawBit(bajt, numerBitu) - zwraca bajt, w którym bit o podanym numerze\nustawiono na 1, a pozostałe bity nie zostały zmienione.\nSpecyfikacja:\nDane:\nv[] - tablica zawierająca kolejne bajty tekstu skompresowanego\nn - liczba elementów tablicy v[]\nr - liczba różnych znaków w tekście\nt[] - tablica przechowująca pary {znak, kod}, definiująca przyporządkowanie\nkodu do znaku\nbity - liczba bitów przeznaczonych do przechowywania kodu jednego znaku\nWynik:\ns - źródłowy łańcuch znaków\nMiejsce na algorytm.\nWypełnia\negzaminator\nNr zadania\n3.3.\nMaks. liczba pkt.\n3\nUzyskana liczba pkt.\nBRUDNOPIS (nie podlega ocenie)","answer":null,"answer_text":"3.3.\nZa poprawny algorytm dekodowania znaków - 3 punkty,\nw tym za:\n poprawne powiązanie testowania bitu w bajcie\nskompresowanym z ustawieniem bitu w kodzie\nznaku - 1 punkt,\n poprawną obsługę indeksowania bitów w bajcie\nskompresowanym (od 0 do 8) - 1 punkt,\n poprawną detekcję znaku przypisanego do kodu -\n1 punkt,\nPrzykładowe rozwiązanie:\ncout<<\"\\nodszyfrowanie: \\n\";\nint i=0; // numer kolejnego bajtu skompresowanego\nint bajt;\n// bajt skompresowany\nint ib=0; // indeks bitu w bajcie skompresowanym\nint kod;\n// kod znaku\nint ik=0; // indeks bitu w kodzie znaku\nwhile (i<n)\n{\nbajt=V[i]; // pobierz bajt tekstu skompresowanego\nib=0;// indeks bitu w powyzszym bajcie\nkod=0;\nwhile (ik<bity)\n{\n// jezeli bajt ma ustawiony bit ib, to ustaw bit ik\nw kodzie\nif ((bajt & (1<<ib))) kod = kod | (1<<ik);\nik++;\nif (ik==bity)\n{ // obsłużyłeś wszystkie bity kodu, więc\nodszukaj w tablicy V znak przypisany do aktualnego\nkodu, jeżeli znajdziesz, to wypisz znak na\nstandardowe wyjscie\nint j=0;\nwhile ( kod!=R[j].kod && j<r) j++;\n// R - dana tablica par: {znak, kod}\nif (j<r) cout<< R[j].znak;\n// r - dana liczba różnych znaków\nik=0; // wyzeruj kod oraz indeks bitu w kodzie\nkod=0;\n}\nib++;\nif (ib==8) break;\n}\ni++;\n}\n3","solution":null,"image":"img/informatyka-2014-grudzien-probna-rozszerzona/zad-3.3.webp","solution_image":null,"topics":null,"page_from":8,"source":"ocr","answer_source":null,"answer_text_source":"ocr","solution_source":null,"text_source":"ocr","source_label":"Informatyka · Matura próbna · grudzień 2014 (rozszerzona)","subject_label":"Informatyka","category_label":"Matura próbna","text_html":"<p>Zadanie 3.3.<br>Zapisz algorytm dekodowania tekstu (w postaci listy kroków lub w wybranym języku<br>programowania), który pobiera tablicę bajtów tekstu skompresowanego i wyświetla<br>źródłowy tekst.<br>W algorytmie możesz wykorzystać poniższe funkcje lub ich odpowiedniki w wybranym<br>języku programowania:<br>testBit (bajt, numerBitu) - zwraca wartość TRUE, jeśli w bajcie bit<br>o podanym numerze ma wartość 1, lub FALSE, jeśli ten bit ma wartość 0.<br>ustawBit(bajt, numerBitu) - zwraca bajt, w którym bit o podanym numerze<br>ustawiono na 1, a pozostałe bity nie zostały zmienione.<br>Specyfikacja:<br>Dane:<br>v[] - tablica zawierająca kolejne bajty tekstu skompresowanego<br>n - liczba elementów tablicy v[]<br>r - liczba różnych znaków w tekście<br>t[] - tablica przechowująca pary {znak, kod}, definiująca przyporządkowanie<br>kodu do znaku<br>bity - liczba bitów przeznaczonych do przechowywania kodu jednego znaku<br>Wynik:<br>s - źródłowy łańcuch znaków<br>Miejsce na algorytm.<br>Wypełnia<br>egzaminator<br>Nr zadania<br>3.3.<br>Maks. liczba pkt.<br>3<br>Uzyskana liczba pkt.<br>BRUDNOPIS (nie podlega ocenie)</p>","answer_text_html":"<p>3.3.<br>Za poprawny algorytm dekodowania znaków - 3 punkty,<br>w tym za:<br> poprawne powiązanie testowania bitu w bajcie<br>skompresowanym z ustawieniem bitu w kodzie<br>znaku - 1 punkt,<br> poprawną obsługę indeksowania bitów w bajcie<br>skompresowanym (od 0 do 8) - 1 punkt,<br> poprawną detekcję znaku przypisanego do kodu -<br>1 punkt,<br>Przykładowe rozwiązanie:<br>cout&lt;&lt;&quot;\\nodszyfrowanie: \\n&quot;;<br>int i=0; // numer kolejnego bajtu skompresowanego<br>int bajt;<br>// bajt skompresowany<br>int ib=0; // indeks bitu w bajcie skompresowanym<br>int kod;<br>// kod znaku<br>int ik=0; // indeks bitu w kodzie znaku<br>while (i&lt;n)<br>{<br>bajt=V[i]; // pobierz bajt tekstu skompresowanego<br>ib=0;// indeks bitu w powyzszym bajcie<br>kod=0;<br>while (ik&lt;bity)<br>{<br>// jezeli bajt ma ustawiony bit ib, to ustaw bit ik<br>w kodzie<br>if ((bajt &amp; (1&lt;&lt;ib))) kod = kod | (1&lt;&lt;ik);<br>ik++;<br>if (ik==bity)<br>{ // obsłużyłeś wszystkie bity kodu, więc<br>odszukaj w tablicy V znak przypisany do aktualnego<br>kodu, jeżeli znajdziesz, to wypisz znak na<br>standardowe wyjscie<br>int j=0;<br>while ( kod!=R[j].kod &amp;&amp; j&lt;r) j++;<br>// R - dana tablica par: {znak, kod}<br>if (j&lt;r) cout&lt;&lt; R[j].znak;<br>// r - dana liczba różnych znaków<br>ik=0; // wyzeruj kod oraz indeks bitu w kodzie<br>kod=0;<br>}<br>ib++;<br>if (ib==8) break;<br>}<br>i++;<br>}<br>3</p>","solutions":[]}