Ĺadny brzuch
Hej,
Moze ktos wie jak to zrobic ?
Kompulandia (26 pkt)
Na planecie Kompulandia funkcjonuje specyficzny, oszczędny sposób zapisywania
informacji, polegający na zamianie poszczególnych sylab na liczby. Poniżej przedstawiono
zasady obowiązujące przy kodowaniu i dekodowaniu dla standardowej tabeli ASCII.
Zakładamy, że wiadomości składają się tylko z wielkich liter alfabetu (bez polskich znaków
diakrytycznych). Alfabet składa się z następujących znaków:
ABCDEFGHIJKLMNOPQRSTUVWXYZ_
Znakiem rozdzielającym wyrazy jest odstęp (spacja) oznaczany dla czytelności przez znak
podkreślenia, czyli (_). Tak zdefiniowany alfabet ma 27 znaków (26 liter + 1 znak odstępu):
samogłoski: AEIOUY (6 znaków)
spółgłoski: BCDFGHJKLMNPQRSTVWXZ (20 znaków)
odstęp:
_ (1 znak)
Wyrazy dzielone są na dwuliterowe sylaby (spółgłoska + samogłoska), pojedyncze
samogłoski i pojedyncze spółgłoski np.: MA-TU-RA, ZA-DA-NI-A, I-N-FO-R-MA-TY-KA.
W naszym algorytmie, samogłoskom przyporządkujemy kody (liczby) od 1 do 6:
A - 1
E – 2
I - 3 itd.
Spółgłoskom przyporządkujemy kody (liczby) od 11 do 30:
B - 11
C - 12
...
Z - 30
Znakowi odstępu (spacji) przyporządkujemy kod (liczbę) 31:
__(spacja) - 31
Parom spółgłoska + samogłoska przyporządkujemy kody (liczby) od 101 do 220:
BA - 101
BE - 102
BI - 103
…
itd.
Parom odstęp + samogłoska przyporządkujemy kody (liczby) od 221 do 226:
_A – 221
_E – 222
...
_Y – 226
Standardowo każda litera w postaci elektronicznej (w pamięci komputera lub na dysku) jest
traktowana jako jeden znak, przechowywany jako liczba jednobajtowa. Zwróć uwagę,
że każdy ze zdefiniowanych tu kodów da się zapisać w jednym bajcie
Przykład 1.
Przy pomocy tak zdefiniowanych kodów wyraz „MATURA” można zapisać (zakodować)
przy pomocy trzech bajtów, zamiast sześciu.
MA TU RA
155 195 179
Przykład 2.
Wyrazy: ADAM I KRZYSZTOF można zapisać przy pomocy 12 bajtów zamiast 16.
A DA M _I _ K R ZY S Z TO F
1 113 20 223 31 18 24 220 25 30 194 14
Zwróć uwagę, że kodujemy odstęp z samogłoską (w tej kolejności), a nie odwrotnie.
Korzystając z tych samych zasad można rozkodowywać wiadomości zapisane w postaci ciągu
liczb.
Przykład 3.
Ciąg cyfr 18 179 191 po rozkodowaniu to słowo: KRATA
Przykład 4.
Ciąg cyfr 25 220 14 24 31 108 215 179 po rozkodowaniu to tekst: SZYFR CEZARA
Na nośniku DANE znajdują się trzy pliki:
Plik tekstowy start.txt w pierwszym wierszu zawiera zbiór samogłosek, a w drugim
wierszu zbiór spółgłosek wraz ze znakiem odstępu.
Plik tekstowy info.txt składa się z 10 wierszy zawierających wyłącznie wielkie litery
i odstępy. Długość wiersza nie przekracza 100 znaków.
Plik tekstowy cyfry.txt składa się z 10 wierszy, z których każdy zawiera ciąg liczb
rozdzielonych spacjami. Wiersz zawiera nie więcej niż 20 liczb.
Korzystając z opisanych zasad napisz program:
a) rozkodowujący ciągi liczb zamieszczone w pliku cyfry.txt. Wyniki umieść
w kolejnych wierszach pliku odp_a.txt.
Przykład:
Plik cyfry.txt:
2 127 22 25 145 2 31 169 179 157 118
1 149 223 31 101 187 1
Plik odp_a.txt:
EGIPSKIE PIRAMIDY
ALA I BASIA
Sugestie i pomysly
dzieki za pomoc :)
Użytkownik dsk edytował ten post 24 kwiecień 2008, 15:42
Sam to robiłem i zrobiłem w następujący sposób.
Robisz tablice "kody" i w odpowiednich kluczach umieszczasz kombinacje liter
samogłoskom przyporządkujemy kody (liczby) od 1 do 6:
A - 1
E – 2
I - 3 itd.
ITD
Funkcja kodująca:
Pobierasz litere ze słowa i jeżeli jest to samogłoska to każesz pobrac kod tej samogloski.
Jeżeli nie samogłoska to:
pobierasz 2 litery, jeżeli jest to odstęp i spolgloska to zwracasz kod 31 jako kod odstepu i nastepnie jedziesz dalej w przeciwynm wypadku zwracasz kod kombinacji _ i samogłoska.
NOTE: Pamiętaj ze zostaje ci spółgloska wiec poprostu stosuj jakis wskaznik litery ktora ma byc pobrana
Funkcje dekodująca:
To taki banał, że chyba nie musze nic mówić...
Dopisz sobie odpowiednik phpowej funkcji in_array ktora sprawdza czy dany ciag wystepuje w tablicy. Funkcja ta bedzie ci sluzyc to rozroznienie czy litera jets samogloska czy spolgloska.
W samym php jest to 15 minut roboty ale w c++ bedziesz musial sie troszke "bardziej" pomeczyc.
Tablica w ktore przechowujesz kody jest długości [226][2].
Użytkownik polasek edytował ten post 24 kwiecień 2008, 16:00
hej,
mozesz skopiowac kod, jak zapisywales to do tablic ?
pozdrawiam i dzieki wielkie
string codeTab[227]; int i,b,c; string samogloski="AEIOUY"; string spolgloski="BCDFGHJKLMNPQRSTVWXZ"; for(i =0; i<6; i++) { codeTab[i]=samogloski.at(i); codeTab[i+221]="_"; codeTab[i+221]+=samogloski.at(i); } for(i=0; i<20; i++) { codeTab[i+11]=spolgloski.at(i); } codeTab[31]='_'; for(i=0; i<120; i++) // kombinacja spogloska+samogloska { for(b=0; b<20; b++) { for(c=0;c<6;c++) { codeTab[i+101]=spolgloski.at(B); codeTab[i+101]+=samogloski.at©; i++; } } }
Możę nie jest to wyjątkowo profesjonalne ale ważne, że działa.
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Moze ktos wie jak to zrobic ?
Kompulandia (26 pkt)
Na planecie Kompulandia funkcjonuje specyficzny, oszczędny sposób zapisywania
informacji, polegający na zamianie poszczególnych sylab na liczby. Poniżej przedstawiono
zasady obowiązujące przy kodowaniu i dekodowaniu dla standardowej tabeli ASCII.
Zakładamy, że wiadomości składają się tylko z wielkich liter alfabetu (bez polskich znaków
diakrytycznych). Alfabet składa się z następujących znaków:
ABCDEFGHIJKLMNOPQRSTUVWXYZ_
Znakiem rozdzielającym wyrazy jest odstęp (spacja) oznaczany dla czytelności przez znak
podkreślenia, czyli (_). Tak zdefiniowany alfabet ma 27 znaków (26 liter + 1 znak odstępu):
samogłoski: AEIOUY (6 znaków)
spółgłoski: BCDFGHJKLMNPQRSTVWXZ (20 znaków)
odstęp:
_ (1 znak)
Wyrazy dzielone są na dwuliterowe sylaby (spółgłoska + samogłoska), pojedyncze
samogłoski i pojedyncze spółgłoski np.: MA-TU-RA, ZA-DA-NI-A, I-N-FO-R-MA-TY-KA.
W naszym algorytmie, samogłoskom przyporządkujemy kody (liczby) od 1 do 6:
A - 1
E – 2
I - 3 itd.
Spółgłoskom przyporządkujemy kody (liczby) od 11 do 30:
B - 11
C - 12
...
Z - 30
Znakowi odstępu (spacji) przyporządkujemy kod (liczbę) 31:
__(spacja) - 31
Parom spółgłoska + samogłoska przyporządkujemy kody (liczby) od 101 do 220:
BA - 101
BE - 102
BI - 103
…
itd.
Parom odstęp + samogłoska przyporządkujemy kody (liczby) od 221 do 226:
_A – 221
_E – 222
...
_Y – 226
Standardowo każda litera w postaci elektronicznej (w pamięci komputera lub na dysku) jest
traktowana jako jeden znak, przechowywany jako liczba jednobajtowa. Zwróć uwagę,
że każdy ze zdefiniowanych tu kodów da się zapisać w jednym bajcie
Przykład 1.
Przy pomocy tak zdefiniowanych kodów wyraz „MATURA” można zapisać (zakodować)
przy pomocy trzech bajtów, zamiast sześciu.
MA TU RA
155 195 179
Przykład 2.
Wyrazy: ADAM I KRZYSZTOF można zapisać przy pomocy 12 bajtów zamiast 16.
A DA M _I _ K R ZY S Z TO F
1 113 20 223 31 18 24 220 25 30 194 14
Zwróć uwagę, że kodujemy odstęp z samogłoską (w tej kolejności), a nie odwrotnie.
Korzystając z tych samych zasad można rozkodowywać wiadomości zapisane w postaci ciągu
liczb.
Przykład 3.
Ciąg cyfr 18 179 191 po rozkodowaniu to słowo: KRATA
Przykład 4.
Ciąg cyfr 25 220 14 24 31 108 215 179 po rozkodowaniu to tekst: SZYFR CEZARA
Na nośniku DANE znajdują się trzy pliki:
Plik tekstowy start.txt w pierwszym wierszu zawiera zbiór samogłosek, a w drugim
wierszu zbiór spółgłosek wraz ze znakiem odstępu.
Plik tekstowy info.txt składa się z 10 wierszy zawierających wyłącznie wielkie litery
i odstępy. Długość wiersza nie przekracza 100 znaków.
Plik tekstowy cyfry.txt składa się z 10 wierszy, z których każdy zawiera ciąg liczb
rozdzielonych spacjami. Wiersz zawiera nie więcej niż 20 liczb.
Korzystając z opisanych zasad napisz program:
a) rozkodowujący ciągi liczb zamieszczone w pliku cyfry.txt. Wyniki umieść
w kolejnych wierszach pliku odp_a.txt.
Przykład:
Plik cyfry.txt:
2 127 22 25 145 2 31 169 179 157 118
1 149 223 31 101 187 1
Plik odp_a.txt:
EGIPSKIE PIRAMIDY
ALA I BASIA
Sugestie i pomysly
dzieki za pomoc :)
Użytkownik dsk edytował ten post 24 kwiecień 2008, 15:42
Sam to robiłem i zrobiłem w następujący sposób.
Robisz tablice "kody" i w odpowiednich kluczach umieszczasz kombinacje liter
samogłoskom przyporządkujemy kody (liczby) od 1 do 6:
A - 1
E – 2
I - 3 itd.
ITD
Funkcja kodująca:
Pobierasz litere ze słowa i jeżeli jest to samogłoska to każesz pobrac kod tej samogloski.
Jeżeli nie samogłoska to:
pobierasz 2 litery, jeżeli jest to odstęp i spolgloska to zwracasz kod 31 jako kod odstepu i nastepnie jedziesz dalej w przeciwynm wypadku zwracasz kod kombinacji _ i samogłoska.
NOTE: Pamiętaj ze zostaje ci spółgloska wiec poprostu stosuj jakis wskaznik litery ktora ma byc pobrana
Funkcje dekodująca:
To taki banał, że chyba nie musze nic mówić...
Dopisz sobie odpowiednik phpowej funkcji in_array ktora sprawdza czy dany ciag wystepuje w tablicy. Funkcja ta bedzie ci sluzyc to rozroznienie czy litera jets samogloska czy spolgloska.
W samym php jest to 15 minut roboty ale w c++ bedziesz musial sie troszke "bardziej" pomeczyc.
Tablica w ktore przechowujesz kody jest długości [226][2].
Użytkownik polasek edytował ten post 24 kwiecień 2008, 16:00
hej,
mozesz skopiowac kod, jak zapisywales to do tablic ?
pozdrawiam i dzieki wielkie
string codeTab[227]; int i,b,c; string samogloski="AEIOUY"; string spolgloski="BCDFGHJKLMNPQRSTVWXZ"; for(i =0; i<6; i++) { codeTab[i]=samogloski.at(i); codeTab[i+221]="_"; codeTab[i+221]+=samogloski.at(i); } for(i=0; i<20; i++) { codeTab[i+11]=spolgloski.at(i); } codeTab[31]='_'; for(i=0; i<120; i++) // kombinacja spogloska+samogloska { for(b=0; b<20; b++) { for(c=0;c<6;c++) { codeTab[i+101]=spolgloski.at(B); codeTab[i+101]+=samogloski.at©; i++; } } }
Możę nie jest to wyjątkowo profesjonalne ale ważne, że działa.