Kolokwium poprawkowe :|

Uniwersytet Gdański - Instytut Matematyki - Zakład Informatyki - Strona domowa
Czas delty:
2024-11-13 00:58:10
-odśwież-

Pytania i zadania

Odpowiedz na zebrane poniżej zadania. Odpowiedzi wyślij mailem do prowadzącego zajęcia, umieszczając w tytule następujące informacje: [zboj] [grupa N] Imie Nazwisko gdzie N jest numerem twojej grupy. Przestrzegaj limitu czasu pisania. Na zrobienie tego kolokwium jest dokładnie 60 minut. Pytania nie są podchwytliwe i możesz rozwiązać tyle z nich, ile chcesz. Brana pod uwagę będzie taka liczba poprawnie rozwiązanych zadań, aby wyrównać Twoją ocenę do 3.0. Wyniki dzisiaj.

Zadania dla grupy 'z'

  1. Podaj przynajmniej jeden sposób na sprawdzenie, czy jakiś moduł perla jest zainstalowany w twoim systemie.
    Jest kilka sposobów, oto niektóre z nich:
    Najlepszy sposób: perl -e 'use Jakiś::Moduł' Ten sposób jest trochę gorszy, ponieważ perldoc nie poda ścieżki do modułu, który nie zawiera dokumentacji POD.perldoc -l Jakiś::Moduł
  2. Napisz program jednowierszowy, który generuje 100 liczb w jednej kolumnie. Liczby powinny być całkowite od 0 do 99.
    Program taki można zrobić na wiele sposobów, np.: perl -le 'print for 0..99;' albo: perl -le 'print join "\n",0..99'
  3. Jak za pomocą perla policzyć ile jest wierszy w pliku tekstowym? Zaproponuj jakiś krótki programik.
    Znowu rozwiązań jest sporo, np. perl -ne '$i++;END{print $i}' plik.txt albo po prostu: perl -ne 'END{print $.}' plik.txt Update: 20070301. Jeden ze studentów (W.G.) podesłał też taki kod, który oczywiście działa: perl -ple '}{$_ = $.'
  4. Co to jest referencja? Wyjaśnij i pokaż jakieś proste przykłady.
    Referencja jest to wartość skalarna, przechowująca wskazanie na inną zmienną lub wartość stałą. Tworzona jest przez operator ukośnej kreski lub konstruktury tablic, haszy lub procedur anonimowych: $a = \1;, $b = \@T;, $c = \%H;, $d = [1,2,3];, $e = { a=>2, b=>4 };, $f = sub{ print }, itp.
  5. Podaj przynajmniej jeden sposób na odwrócenie tablicy.
    Można zrobić to iteracyjnie, albo wykorzystać operator reverse: @odwrocona = reverse @tablica;
  6. Napisz program liczący średnią z liczb podawanych z klawiatury (podanie pustego wiersza powinno kończyć program).
    Program taki musi wczytywać kolejne wiersze z STDIN, a potem dodawać wczytaną wartość do sumy i dzielić ją przez liczbę wczytanych już wartości. Oto programik: perl -le 'while(<STDIN>){ chomp; last if ($_ eq ""); print +($suma+=$_) / ++$liczba; }' Inny podobny program, który zaproponował mi jeden ze studentów, tylko prostszy i dzięki temu "ładniejszy": perl -nle 'chomp; last if ($_ eq ""); print +($suma+=$_) / ++$liczba;' W tym przypadku pętla while jest zastępowana przez opcję -n (która właśnie po to jest!).
    Update: 20070301. Jeden ze studentów (W.G.) podesłał mi krótsze rozwiązanie: perl -ple '$a += $_ }{ $_ = $a/$.' Ten kod oczywiście działa (należy pamiętać o niejawnej pętli dookoła wstawianej przez opcję -p - wtedy zrozumienie dziwnie wstawionych nawiasów jest proste). Dziękuję! :)
  7. Polecenie perldoc perl pokazuje spis treści dokumentacji nt. perla. Zaproponuj sposób na określenie liczby nagłówków typu =head1 zawartego w tej dokumentacji.
    Samo "perl" nie wystarczy dla wyświetlenia źródła pomocy perldoc przy poleceniu perldoc -m perl, ponieważ nie ma modułu perl. Zamiast tego wyświetlona może zostać treść binarna samego perla. Trzeba użyć nazwy perl.pod, i wtedy można napisać np. tak: perldoc -m perl.pod | perl -ne 'print if /^=head1/' | wc -l Osoby nie znające wyrażeń regularnych mogą także napisać inaczej: perldoc -m perl.pod | grep =head1 | wc -l Wykorzystując swoją znajomość środowiska Unix :)
  8. Jaka jest wartość iloczynu bitowego liczb 1 i 2? Odpowiedź krótko uzasadnij :)
    Wartość tego iloczynu wynosi 0, ponieważ bitowe mnożenie polega na sparowaniu bitów i poddaniu ich operacji AND, która dla bitów z liczby 1 i 2 będzie działać tylko na parach zer, oraz na jedynce i zerze, oraz na zerze i jedynce. W efekcie każda para bitowa da w wyniku 0, i całkowita wartość liczby będzie 0. Bitowo: 00000001 & 00000010 = 00000000;
  9. Poniższy kod przedstawia model pewnej pętli. Wyjaśnij jaka to pętla i napisz odpowiedni kod, który robi dokładnie to samo: $i = 0; LOOP: if($i<10){ print int rand(10); $i++; goto LOOP; }
    Jest to prosty model pętli while. Oto jej postać: $i=0; while($i<10){ print int rand(10); $i++; }
  10. Podaj przykład tablicy oraz hasza i wyjaśnij, jakie są między nimi podstawowe różnice.
    Tablicą jest zmienna złożona, zawierająca wiele elementów, ideksowanych przez ich numery porządkowe, np. @T. Dostęp do tych elementów odbywa się przez podanie indeksu np. $T[5]. Hasz jest zmienną złożoną, w której przechowywane są pary wartości określane często jako pary 'klucz-wartość'. Klucze muszą być unikalne, wartości mogą być dowolne. Przykład hasza to np. %ZZ, elementy wydobywa się przez podanie nazwy klucza, np. $ZZ{poswiecenie}. Zarówno hasz jak i tablica mogą być inicjalizowane przez przypisanie do nich listy: @T = (1,2,3); %ZZ = ( 1,2,3,4 ); Liczba wszystkich elementów (kluczy i wartości) jest zawsze w haszu liczbą parzystą.
  11. Jak to możliwe, że w perlu, gdzie elementem tablicy może być tylko skalar, mogą istnieć tablice zawierające tablice?
    Nie jest to możliwe. Tablica może zawierać wyłącznie elementy skalarne. Możliwość utworzenia referencji (która jest skalarem) do tablicy jest wyjściem z tej sytuacji i pozwala na tworzenie struktur wielowymiarowych przez przechowywanie w tablicy referencji do tablic.
  12. Zadanie dowolne, dotyczące perla w zakresie materiału przerobionego na zajęciach. Nie może to być żadne z zadań już zadanych przeze mnie wcześniej :)
    Tutaj już rozwiązania mogą być przeróżne.

Jeżeli na tej stronie znalazłeś błąd, lub znasz lepsze wyjaśnienia zadań, proszę, napisz do mnie na adres manty.

Uniwersytet Gdański - Instytut Informatyki - Strona domowa - Perl - Kolokwia
[c] Piotr Arłukowicz, materiały z tej strony udostępnione są na licencji GNU.