Dzisiejszy wykład
Programowanie w Perlu
Zmienne skalarne i struktury kontrolne
Dziś wprowadzimy różne typy danych oraz różne rodzaje
zmiennych zawierające takie dane
Marcin Junczys-Dowmunt
Omówimy podstawowe struktury kontrolne
junczys@amu.edu.pl
Na końcu przejdziemy do małych programików nadających się
Wydział Matematyki i Informatyki np. do eksperymentów psycholingwistycznych
http://web.wmi.amu.edu.pl
Marcin Junczys-Dowmunt Programowanie w Perlu 1/24 Marcin Junczys-Dowmunt Programowanie w Perlu 2/24
Liczby i łańcuchy znaków Liczby i łańcuchy znakowe
Na razie będziemy korzystać z dwóch podstawowych typów
1 print(3);
danych: liczb i łańcuchów znakowych.
print(" ");
Liczby
print(3 + 4);
print(" ");
Dopuszczalne są wartości całkowite, zmiennoprzecinkowe,
5 print("3 + 4");
ujemne, wykładnicze itp.
print("\n");
Perl nie rozróżnia tych rodzajów liczb, jak to się dzieje np. w C print(5 * 2);
print(" ");
print(9/3);
Aańcuchy znakowe
10 print(" ");
print(2 ** 8);
Wszystko co jest ujęte w podwójny lub pojedynczy cudzysłów
print("\n");
nazywamy łańcuchem znakowym
Proszę opisać, co się dzieje w każdym wierszu.
W Perlu nie wszystkie łańcuchy znakowe możemy nazwać
Jaki działa cudzysłów podwójny a jak cudzysłów pojedynczy?
stałymi (te w pojedynczym cudzysłowie na pewno)
Marcin Junczys-Dowmunt Programowanie w Perlu 3/24 Marcin Junczys-Dowmunt Programowanie w Perlu 4/24
Operatory Zmienne skalarne
Zmienne zawierające liczby, znaki łańcuchowe i referencje1
nazywamy zmiennymi skalarnymi.
Istnieją też operatory dla łańcuchów znakowych oraz operatory
Struktura nazwy zmiennej skalarnej w Perlu:
mieszane np.
Pierwszy znak to przedrostek $ (podobny do s jak scalar)
1 print("-" x 50);
print("\n");
Drugi znak to dowolna litera lub znak podkreślenia
print("konkatenacja" . " " . "lancuchow\n");
Kolejne znaki to dowolne litery lub liczby lub znak
print("-" x 50);
podkreślenia
5 print("\n");
Przykłady:
$ , $a, $abc, $a12, $to jest zmienna, $a to zmienna o numerze 2
1
o referencjach więcej innym razem
Marcin Junczys-Dowmunt Programowanie w Perlu 5/24 Marcin Junczys-Dowmunt Programowanie w Perlu 6/24
Zmienne skalarne Interpolacja zmiennych
Zamiast łączyć kilka zmiennych w większy łańcuch znakowy za
Na zmiennych możemy wykonywać takie same operacje jak na
pomocą operatora konkatenacji, możemy wykorzystać możliwości
stałych plus operację przypisania (=):
Perla w zakresie interpolacji zmiennych.
1 $one = 2;
$two = 3;
Interpolacja to operacja, która zamienia nazwę zmiennej w
$three = $one + $two;
łańcuchu znakowym na jej wartość.2
print($three . "\n");
1 $hat = "chair";
$chair = "hat";
1 $hat = "chair";
print("$chair $hat\n");
$chair = "hat";
print($chair . " " . $hat . "\n");
Pytanie: Co stanie się, gdy zastąpimy podwójny cudzysłów
Jak widać, nazwa i treść zmiennej nie muszą być ze sobą pojedynczym cudzysłowem?
powiązane.
2
To przez interpolacje zmiennych nie możemy mówić, że wszystkie łańcuchy
znakowe to stałe.
Marcin Junczys-Dowmunt Programowanie w Perlu 7/24 Marcin Junczys-Dowmunt Programowanie w Perlu 8/24
Zmienne tablicowe Ustawianie zmiennych tablicowych
Zmienne tablicowe to zmienne złożone
1 @rok = ("styczen", "luty", "marzec");
Dokładniej: to listy zmiennych skalarnych
print "Trzeci miesiac roku: ".$rok[2]."\n";
Każda z tych zmiennych skalarnych w tablicy ma
print "Pierwszy miesiac roku: $rok[0]\n";
jednoznacznie przyporządkowany indeks (numer)
Tablica zawierająca n elementów jest indeksowana liczbami od
Kanoniczny sposób zapisywania wartości do tablicy
0 do n - 1
Elementy zostaną ponumerowane od 0 do 2
Przedrostek tablicy w Perlu to @ (podobne do a jak array),
Odwołując się do wartości elementów tablicy korzystamy z $,
np.@tablica
ponieważ wartości tablicy to skalary!
Nie ma górnego ograniczenia liczby elementów tablicy (tylko
Wartości tablicy też podlegają interpolacji zmiennych
pamięć danego komputera)
Tablice są strukturami dynamicznymi (długość nie jest stała)
Marcin Junczys-Dowmunt Programowanie w Perlu 9/24 Marcin Junczys-Dowmunt Programowanie w Perlu 10/24
Ustawianie zmiennych tablicowych Ustawianie zmiennych tablicowych
7 @kwartal3 = qw( lipiec sierpien wrzesien );
4 $rok[3] = "kwiecien";
@rok[6 .. 8] = @kwartal3;
5 $rok[4] = "maj";
print join(" - ",@rok[6 .. 8])."\n";
$rok[5] = "czerwiec";
Skrótowy sposób inicjalizacji tablicy (dla listy łańcuchów
Możemy zapisywać wartości bezpośrednio do elementów
znakowych)
skalarnych tablicy
Białe znaki funkcjonują jak separatory
Elementy tablicy nie różnią się niczym od normalnych
zmiennych
Możemy też zapisywać do podprzedziału tablicy
Jeśli taki indeks wcześniej nie istniał, zostanie stworzony
Wycinek tablicy jest tablicą, stąd przedrostek@
Ewentualne wartości pośrednie zostaną wypełnione wartością
Funkcjajoinłączy daną tablicę w łańcuch znakowy z
undef(niezdefiniowana)
podanym separatorem wstawionym między elementami
Marcin Junczys-Dowmunt Programowanie w Perlu 11/24 Marcin Junczys-Dowmunt Programowanie w Perlu 12/24
Ustawianie zmiennych tablicowych Struktury kontrolne - warunki
1 if ( warunek ) { blok } else { blok }
10 @rok[9,10,11] = qw( pazdziernik listopad grudzien );
print "Nastepujace miesiace maja 31 dni: \n";
unless ( warunek ) { blok } else { blok }
print join("\n",@rok[0,2,4,6,7,9,11])."\n";
5 if ( warunek_1 ) { blok }
print "Nastepujace miesiace maja 30 dni: \n";
elsif ( warunek_2 ) { blok }
15 @m30 = (3,5,8,10);
...
print join("\n",@rok[@m30])."\n";
elsif ( warunek_n ) { blok }
else { blok }
print "A $rok[1] ma 28 dni\n";
W Perlu nie ma typów logicznych jako takich, fałszywe są:
Wycinki tablic to nie tylko przedziały liczb. Możemy korzystać
liczba zero, łańcuch zerowy, wartośćundef, puste tablice
z list dowolnych liczb
(zywkłe i asocjacyjne). Pozostałe są prawdziwe
Lub nawet z innych tablic
W blokach możemy umieścić dowolną liczbę instrukcji
Marcin Junczys-Dowmunt Programowanie w Perlu 13/24 Marcin Junczys-Dowmunt Programowanie w Perlu 14/24
Operatory porównania Przykładif
Numeryczne Aańcuchowe Znaczenie
1 @tab1 = qw(Antek Bartek);
== eq jest równe
@tab2 = ("Edek", "Dudek");
!= ne nie jest równe
<=> cmp porównanie ze znakiem if(@tab1 == @tab2) {
5 if($tab1[0] lt $tab2[0]) {
print "$tab1[0] poprzedza $tab2[0]\n";
Numeryczne Aańcuchowe Znaczenie
}
> gt większe niż
elsif($tab1[0] gt $tab[0]) {
>= ge większe-równe niż
print "$tab2[0] poprzedza $tab1[0]\n";
< lt mniejsze niż
10 }
<= le mniejsze-równe niż else {
print "$tab1[0] jest rowne $tab2[0]\n";
}
Porównując liczby korzystamy z operatorów numerycznych.
}
Porównując łańcuchy korzystamy z operatorów łańcuchowych.
Marcin Junczys-Dowmunt Programowanie w Perlu 15/24 Marcin Junczys-Dowmunt Programowanie w Perlu 16/24
Pętle Pętlawhile- przykład
W Perlu mamy trzy główne rodzaje pętli:
1 @pokoj = qw(krzeslo stol lozko szafa);
pętlę typuwhileznamy z innych programów (np. Pascal)
print "Pokoj zawiera nast. meble: ".join(", ", @pokoj);
1 while( warunek ) {
block
5 while(@pokoj > 2) {
}
$mebel = pop @pokoj;
print "Wyrzucilem przez okno: $mebel\n";
pętla typuforw takiej postaci jest znana z języków
podobnych do C
print "Pokoj zawiera nast. meble: ";
10 print join(", ", @pokoj)."\n";
1 for(pierwsza i.; warunek; i. iterowana) {
}
block
}
Zmienna@pokojużyta w kontekscie numerycznym jest
interpretowana jako liczba elementów
pętla typuforeachjest konstrukcją typową dla Perla
funkcjapopusuwa ostatni element z podanej tablicy i zwraca
1 foreach $element (lista) {
ten element
block
Pętlawhiledziała dopóki warunek jest prawdziwy, tzn. póki
}
tablica@pokojzawiera więcej niż dwa elementy
Marcin Junczys-Dowmunt Programowanie w Perlu 17/24 Marcin Junczys-Dowmunt Programowanie w Perlu 18/24
Pętlafor- przykład Pętlaforeach- eksperymenty psycholingwistyczne
1 for($i = 0; $i < 10; $i++) {
print "Wartosc \$i to: $i\n";
Dla przykładu pętliforeachposłużymy się pewnym
}
eksperymentem psycholingwistycznym. Napiszemy program
Program podobny dowhile.pl :
generujący wszystkie sylaby pewnego polinezyjskiego języka o
nazwie Tulu
1 @pokoj = qw(krzeslo stol lozko szafa);
print "Pokoj zawiera nast. meble: ";
W tym języku wszystkie sylaby mają postaćCVz ograniczonego
print join(", ", @pokoj)."\n";
zestawu spółgłosek i samogłosek:
5 for($i = pop @pokoj; @pokoj > 1; $i = pop @pokoj) {
{a, e, i, k, l, m, o, p, t, u}
print "Wyrzucilem przez okno: $i\n";
Sylaby będą wyglądały np. tak: po, ta, ku, me
print "Pokoj zawiera nast. meble: ";
print join(", ", @pokoj)."\n";
10 }
Marcin Junczys-Dowmunt Programowanie w Perlu 19/24 Marcin Junczys-Dowmunt Programowanie w Perlu 20/24
Pętlaforeach- eksperymenty psycholingwistyczne Pętlaforeach- eksperymenty psycholingwistyczne
Teraz napiszemy program, który generuje wszystkie wyrazy Tulu.
Każdy wyraz ma postać CVCV. Jak tego dokonać?
1 @consonants = qw(k l m p t);
1 @consonants = qw(k l m p t);
@vowels = qw(a e i o u);
@vowels = qw(a e i o u);
5 foreach $c (@consonants) {
5 foreach $c1 (@consonants) {
foreach $v (@vowels) {
foreach $v1 (@vowels) {
print("$c$v\n");
foreach $c2 (@consonants) {
}
foreach $v2 (@vowels) {
}
print("$c1$v1$c2$v2\n");
10 }
}
}
}
Marcin Junczys-Dowmunt Programowanie w Perlu 21/24 Marcin Junczys-Dowmunt Programowanie w Perlu 22/24
Pętlaforeach- eksperymenty psycholingwistyczne Pętlaforeach- eksperymenty psycholingwistyczne
Zasady morfofonologiczne Tulu narzucają nam dodatkowe
Kolejna reguła morfofonologiczna jęzka Tulu mówi, że spółgłoski
ograniczenie. Wszystkie samogłoski danego wyrazu muszą być
muszą być różne. Tzn. ciągi typu tutu, papa itd. nie są
takie same, np. paka, tulu
poprawnymi słowami języka Tulu
1 @consonants = qw(k l m p t);
1 @consonants = qw(k l m p t);
@vowels = qw(a e i o u);
@vowels = qw(a e i o u);
5 foreach $c1 (@consonants) {
5 foreach $c1 (@consonants) {
foreach $v (@vowels) {
foreach $v (@vowels) {
foreach $c2 (@consonants) {
foreach $c2 (@consonants) {
print("$c1$v$c2$v\n") if($c1 ne $c2);
print("$c1$v$c2$v\n");
}
}
10 }
10 }
}
}
Marcin Junczys-Dowmunt Programowanie w Perlu 23/24 Marcin Junczys-Dowmunt Programowanie w Perlu 24/24
Wyszukiwarka
Podobne podstrony:
Wyklad4 handoutWyklad07 handoutWyklad3 handoutWyklad17 handoutWyklad06 handoutWyklad5 handoutWyklad04 2008 handoutWyklad xmlparse handoutWyklad1 2008 handout20151012 MichalTrzesiok Statystyka wyklad2 miary statystyczne handoutWyklad03 2008 handoutWyklad2 2008 handoutWyklad05 2008 handout20151019 MichalTrzesiok Statystyka wyklad3 analiza korelacji handoutSieci komputerowe wyklady dr FurtakWykład 05 Opadanie i fluidyzacjaAGH Sed 4 sed transport & deposition EN ver2 HANDOUTwięcej podobnych podstron