Moduł hash

Transkrypt

Moduł hash
Hashe
Prowadzący: Łukasz Dunaj, strona kółka: atinea.pl/kolko
Hash jest strukturą danych, która przechowuje pary oraz umożliwia dostęp do wartości poprzez
podanie klucza.
var h = {}; stworzenie pustego hasha
var h = {Ala => 12, Bartek => 11}; stworzenie hasha o kluczach 'Ala' i 'Bartek' oraz
odpowiadającym im wartościom 12 i 11.
Przegląd funkcji bibliotecznych dla hasha:
hash::get_value(hash, klucz) - zwraca wartość przechowywaną w hashu dla klucza
hash::has_key(hash, klucz) - sprawdza, czy dany hash zawiera podany klucz
hash::set_value(ref hash, klucz, wartosc) - dodaje do istniejącego hasha klucz o podanej wartości
hash::delete(ref hash, klucz) - usuwa z hasha klucz
hash::size(hash) - zwraca rozmiar, czyli ilość kluczy w hashu
hash::keys(hash) - zwraca tablicę zawierająca wszystkie klucze z hasha
Aby przeglądnąć wszystkie klucze i wartości z hasha możemy użyć przeglądać kolejno wartości dla
kluczy zwróconych przez hash::keys(hash) lub użyć konstrukcji:
forh var klucz, var wartosc (hash) {
#tutaj wykonujemy instrukcje
#nazwy zmiennych klucz i wartosc są dowolne, jednakże ich
#kolejność jest istotna - najpierw klucz, potem wartość
}
Uruchom poniższy program i zobacz jak wykonuje kolejne instrukcje i wypisuje kolejne wyniki na
konsolę.
use console;
use hash;
def test::main() {
var h = {Ala => 12, Bartek => 11};
if (!hash::has_key(h, 'Cezary')) {
hash::set_value(ref h, 'Cezary', 10);
}
console::print(hash::get_value(h, 'Bartek'));
console::println();
hash::delete(ref h, 'Ala');
console::print('Rozmiar: ' . hash::size(h));
console::println();
console::print('Teraz hash zawiera:');
console::println();
forh var klucz, var wart (h) {
console::print(klucz . ': ' . wart);
console::println();
}
}
Zadania
Zadanie 1
Napisz program, który stworzy hash przyporządkowujący Twojemu imieniu Twój wiek, następnie
dodaj do niego używając funkcji hash::set_value(ref hash, klucz, wartosc) wiek dowolnej ilości
Twoich znajomych. Na koniec wypisz wielkość tak otrzymanego hasha.
Zadanie 2
Napisz program który zapyta o liczbę n, a następnie wczyta n imion oraz odpowiadający im wiek.
Następnie w kolejnych wierszach wypisze wszystkie imiona, np.
Podaj n: 3
Podaj imię:
Podaj wiek:
Podaj imię:
Podaj wiek:
Podaj imię:
Podaj wiek:
Adam
Robert
Kasia
Adam
12
Robert
13
Kasia
11
Zadanie 3
Napisz program który zapyta o liczbę n, a następnie wczyta n imion oraz odpowiadający im wiek.
Następnie wczyta jedno imię i wypisze wiek tej osoby, np.
Podaj
Podaj
Podaj
Podaj
Podaj
Podaj
Podaj
Podaj
Kasia
n: 3
imię: Adam
wiek: 12
imię: Robert
wiek: 13
imię: Kasia
wiek: 11
imię osoby, której chcesz poznać wiek: Kasia
ma 11 lat.
Zadanie 4
Napisz program, który będzie symulował pracę kantoru. Najpierw powinien zapytać o n, a
następnie o n nazw walut wraz z obecnym kursem w stosunku do złotówki. Na końcu dla zadanej
kwoty w obcej walucie wypisze równowartość w złotówkach, np.
Podaj n: 3
Podaj walutę: dolar
Podaj kurs: 3.73
Podaj walutę: euro
Podaj kurs: 4.31
Podaj walutę: frank
Podaj kurs: 4.34
Czas na wymianę.
Podaj walutę: euro
Podaj kwotę: 123
123 euro to równowartość 530.13 zł.
Zadanie 5
Napisz program który zapyta o liczbę n, a następnie wczyta n imion dzieci oraz odpowiadający im
wzrost w cm przed wakacjami. Po wakacjach okazało się, że chłopcy urośli o 5 cm, natomiast
dziewczyny o 4 cm. Wypisz wzrosty dzieci po wakacjach, np.
Podaj n: 4
Podaj imię: Ewa
Podaj wzrost: 150
Podaj imię: Piotrek
Podaj wzrost: 157
Podaj imię: Marta
Podaj wzrost: 160
Podaj imię: Rafał
Podaj wzrost: 161
Ewa ma 154 cm wzrostu.
Piotrek ma 162 cm wzrostu.
Marta ma 164 cm wzrostu.
Rafał ma 166 cm wzrostu.
Zadanie 6
Bajtek ma obszerną kolekcję znaczków pocztowych. Jednak niektóre ze znaczków zostały
zniszczone przez kota, Bajtek chce je wyrzucić. Napisz program który wczyta nazwy znaczków
posiadanych początkowo, a następnie nazwy tych, które zostały zniszczone oraz wypisze ile i jakie
znaczki pozostały w klaserze Bajtka. Przykładowo:
Podaj liczbę znaczków: 5
Podaj nazwę: Kosmos
Podaj nazwę: Łajka
Podaj nazwę: Hermaszewski
Podaj nazwę: Księżyc
Podaj nazwę: Armstrong
Podaj liczbę zniszczonych: 2
Podaj nazwę: Łajka
Podaj nazwę: Armstrong
Pozostało 3 znaczków.
Kosmos
Hermaszewski
Księżyc
Zadanie 7
Dla wczytanych n liczb usuń wśród nich duplikaty i wypisz otrzymany ciąg (każda liczba z wejścia
może pojawić się tylko raz).
Przykładowo dla danych wejściowych (w pierwszym wierszu n, a następnie n liczb):
9
5
2
6
2
2
2
7
6
1
Należy wypisać:
1 2 5 6 7
Wskazówka: co się dzieje gdy spróbujesz dodać do hasha klucz, który już istnieje?
Zadanie 8
Dla wczytanych n liczb posortuj je używając hasha.
Przykładowo dla danych wejściowych (w pierwszym wierszu n, a następnie n liczb):
9
5
2
6
2
2
2
7
6
1
Należy wypisać:
1 2 2 2 2 5 6 6 7