Zadania i ćwiczenia
- Napisać program, który pobiera w dialogu wejściowym łańcuch znakowy i:
- podaje na konsoli długość łańcucha,
- wyprowadza pierwszy i ostatni znak,
- wyprowadza podłańcuch od 3 znaku do ostatniego znaku,
- wyprowadza podłańcuch od 3 znaku do przedostatniego znaku,
- wyprowadza informacje o tym ile razy w wejściowym łańcuchu występuje
zadany podłańcuch (np. ile razy w łańcuchu "podstołeczne tramwaje miały postoje
po sto razy dziennie" wystepuje podłancuch "sto")
- jeżeli wejściowy łańcuch (pomijając spacje na końcu!) kończy się
napisem ".JAVA" (bez względu na wielkość liter) - wyprowadzić ten łańcuch
z zamianą wielkich liter w napisie "JAVA" na małe; jeśli - nie to wyprowadzić
wejściowy łańcuch z zamianą małych liter na duże.
- wyprowadzić w oddzielnych wierszach wszystkie słowa łańcucha (słowa
= zestawy znaków rozdzielone spacjami, przecinkiami, kropkami i średnikami)
- Napisać metodę, która umożliwia podanie częstości występowania słów o
różnej długości (np. 1, 2, 3, ... 60, więcej niż 60) w łancuchu znakowym.
Przetestować ją na przykładzie łańcucha tworzonego z wprowadzanych przez użytkownika
kolejnych "wierszy" podawanych w kolejnych dialogach wejściowych. W ćwiczeniach
do następnych wykładów zastosujemy ją do tekstów wczytywanych z plików.
- Napisać metodę przekształcającą napisową (znakową) reprezentację liczby
całkowitej na jej binarną postać (oczywiście nie korzystamy z parseInt!)
- Wybrać dowolną złożoną funkcję matematyczną i stworzyć metodę wyliczania
jej wartości na podstawie wartości zmiennej przekazywanej jako argument.
Wybrać taką funkcję, która wymaga użycia możliwie dużej liczby metod z klasy
Math. Uzyskać wartości w wybranym przedziale zmienności funkcji (dla ciekawości
wynik przenieśc do programu pozwalajacego na robienie wykresów; w przyszłym
semestrze wykresy będziemy robić w Javie).
- Zbadać zjawisko zaokrągleń, powstających przy operacjach na liczbach rzeczywistych.
Mianowicie jaką wartość będzie miała zmienna wynik w następującym kontekście:
double p = sqrt(2);
double wynik = p*p - 2;
Zastanowić się jak można zatem porównywać w programie dwie liczby rzeczywiste
np. p*p oraz 2.0 w powyższym przykładzie? Jak porównywać liczby bardzo duże?
- Zbadać działanie metod zaokrąglania wartości liczb rzeczywistych (round) oraz metod ceil i floor z klasy Math. Porównać i zruzumieć różnice ich działania.
- Ciekawe problemy powstają przy przesyłaniu informacji. Naturalne wydaje
się kodowanie informacji w taki sposób, by nie tylko nie ulegała przekłamaniom,
ale i była kondensowana. Mniej użyteczne zdają się być schematy kodowania
zapisujące informację za pomocą większej liczby bajtów niż liczy "oryginał".
Tymczasem potrzeba taka pojawia się np. przy przesyłaniu informacji binarnej
poprzez pocztę elektroniczną (tzw. mailery), która umożliwia transmisję pomiędzy
różnymi sieciami, ale - w wielu istniejących na świecie wersjach - może to
robić tylko z informacją tekstową.
Trzeba więc informację binarną (reprezentowaną w alfabecie złożonym ze wszystkich
możliwych wartości dających się zapisać w 1 bajcie) zakodować w postaci tekstowej
(a więc korzystającej z dużo "mniejszego" alfabetu niż 256 znaków).
Dodatkowo należy uwzględnić, że węzły sieci mogą być obsługiwane przez komputery
tzw. host z tablicami kodowymi różniącymi się od ASCII i że przy transmisji
lokalnej pomiędzy PC-tem a komputerem host mogą zachodzić przekłamania przy
tłumaczeniu niektórych znaków z jednej tablicy kodowej do drugiej.
Wiadomo, że wśród bezpiecznych znaków są na pewno wszystkie litery i cyfry.
Dodając do tego jeszcze dwa "bezpieczne" znaki np. + oraz - otrzymamy w
sumie 64 znaki.
W rezultacie każdy tekst zapisany w alfabacie 256-znakowym trzeba przetłumaczyć na tekst zapisany w alfabecie 64-znakowym.
Aby zrobić to w miarę sprytnie nie wolno oczywiście zastępować każdego bajtu
oryginalnej (binarnej) informacji dwoma bajtami zakodowanej. Ponieważ mamy
do dyspozycji 64-znakowy alfabet, to każdy jego znak może być zapisany w
6 bitach.
Stworzyć metodę kodującą informację binarną (ciąg bajtów) w alfabecie 64-znakowym - czyli zapisującą każde 3 bajty oryginalnej informacji w 4 bajtach wyjściowej.
|