Zajęcia nr 6 Konstrukcja warunków logicznych Instrukcja
Transkrypt
Zajęcia nr 6 Konstrukcja warunków logicznych Instrukcja
Zajęcia nr 6 ELEMENTY PROGRAMOWANIA Prowadzący: mgr Marcin Spryszyński www: http://www-users.mat.uni.torun.pl/ ∼spryszyn e-mail: [email protected] Konstrukcja warunków logicznych Możliwe jest konstruowanie bardziej złożonych warunków logicznych przy użyciu alternatywy - or, alternatywy wykluczającej1 - xor koniunkcji - and, negacji - not, implikacji - implies. Warunki składowe nie muszą być ujmowane w żadne nawiasy, tzn. dla Maple zapisy > (a>b) or (a>0), > a>b or a>0 znaczą to samo, jednakże pierwszy zapis, moim zdaniem, jest bardziej estetyczny i czytelny. Instrukcja warunkowa „if” X Składnia: warunek logiczny 1 if then elif warunek logiczny 2 else ciąg instrukcji 3 ciąg instrukcji 1 then ciąg instrukcji 2 fi; F Uwaga: Wersja podstawowa instrukcji if zawarta jest w pierwszej linijce, natomiast pozostała część składni jest opcjonalna. Średniki w instrukcjach wewnętrznych nie są wymagane. X Składnia alternatywna (uproszczona): 8 8 if warunek logiczny , ciąg instrukcji (true) , ciąg instrukcji (false) F Uwaga: Istotny jest apostrof zamieszczony w powyższej formule. Jest to tzw. Gravis, czyli akcent słaby (na klawiaturze pod tyldą). 1 Alternatywa wykluczająca dwóch warunków jest prawdziwa, gdy dokładnie jeden z nich jest prawdziwy. 1 Pętla „for” X Składnia - wersja 1: for nazwa zmiennej from zakres dolny to zakres górny do ciąg instrukcji od; F Komentarz: Operacja ciąg instrukcji wykonywana jest dla wskazanej zmiennej, przyjmującej wartości od zakres dolny do zakres górny (wartość zmiennej zmienia się co 1). X Składnia - wersja 2: for nazwa zmiennej from zakres dolny by krok to zakres górny do ciąg instrukcji od; F Komentarz: Operacja ciąg instrukcji wykonywana jest dla wskazanej zmiennej, przyjmującej kolejno wartości: zakres dolny, zakres dolny + krok, . . . , zakres dolny + n*krok (gdzie wartość zakres dolny + (n+1)*krok jest większe niż zakres górny). X Składnia - wersja 3: for nazwa zmiennej from zakres dolny while warunek ograniczający zmienną do ciąg instrukcji od; F Komentarz: Operacja ciąg instrukcji wykonywana jest dla wskazanej zmiennej, przyjmującej kolejne wartości, począwszy od zakres dolny (i spełniającej warunek ograniczający zmienną) do ostatniej spełniającej wspomniany warunek (tzn. do pierwszego momentu, gdy nie jest spełniony warunek). W przypadku, gdy pierwsza wartość nie spełnia tego warunku, to instrukcja nic nie wykonuje. X Składnia - wersja 4: for nazwa zmiennej while from zakres dolny by warunek ograniczający zmienną do krok ciąg instrukcji od; F Komentarz: Operacja wykonywana jest analogicznie jak w przypadku wersji 3, z tą różnicą, że kolejne wartości zmiennej są postaci zakres dolny + n*krok, gdzie n ∈ N. X Składnia - wersja 5: for nazwa zmiennej in wyrażenie ciąg instrukcji od; 2 do F Komentarz: Stosowana zmienna przyjmuje wartości kolejnych składników wyrażenia, którym może być m.in. lista lub wielomian, i wykonuje na każdym z nich wskazany ciąg instrukcji. X Składnia - wersja 6: nazwa zmiennej for in wyrażenie while warunek ograniczający zmienną do ciąg instrukcji od; F Komentarz: Instrukcja działa podobnie do wymienionej w punkcie 5, z tą różnicą, że wykonuje się do czasu spełniania przez kolejne operandy wyrażenia warunku wymienionego w składni. Podobnie jak wcześniej, jeśli pierwsza wartość zmiennej nie spełni warunku to instrukcja się nie wykona. Pętla „while” X Składnia while warunek logiczny do ciąg instrukcji od; F Komentarz: Pętla while jest „czuła” na fakt, że zmienna stosowana w warunku logicznym posiada pewną wartość, toteż należy się zatroszczyć, aby stosowana w pętli niewiadoma miała żądaną przez nas wartość. Dwie ważne instrukcje X break - wyjście z pętli „for” lub „while”; X next - wyjście z wykonywanego bloku „do...od”; F Uwaga: Aby objaśnić różnicę w działaniu obu poleceń wystarczy odwołać się do poniższego przykładu. Wykonanie polecenia > for i from 1 to 10 do > if i=5 then next; > else print(i); > fi; > od; spowoduje wypisanie liczb od 1 do 10 z pominięciem 5. Natomiast efektem działania polecenia > for i from 1 to 10 do > if i=5 then break; > else print(i); > fi; > od; będzie wypisanie liczb od 1 do 4. 3 Procedury X Ogólna składnia: nazwa:=proc(argument 1::typ 1,. . . ,argument k::typ k) local zmienna 1,. . . ,zmienna n; global inna zmienna 1,. . . ,inna zmienna m; ciąg instrukcji RETURN(wynik) ERROR(błąd) end; F Uwaga 1: Opcjonalnymi składnikami procedury są typy argumentów wejściowych, deklaracja zmiennych globalnych, deklaracja zmiennych lokalnych jeśli nie występują takowe wewnątrz procedury, instrukcja RETURN (wyjście z procedury z podanym jako argument returna wynikiem) oraz ERROR (wyjście z procedury z wyświetleniem komunikatu o błędzie). F Uwaga 2: Polecenia po instrukcji RETURN nie są wykonywane2 . F Uwaga 3: Komentarze stosowane wewnątrz procedur oznacza się symbolem #. Kompilator wewnętrzny linijkę począwszy od symbolu # traktuje jako „nic nieznaczący ciąg znaków” i nie wykonuje żadnej instrukcji do końca linii. F Uwaga 4: Stosowanie wcięć znacznie poprawia czytelność danej procedury. F Uwaga 5: Wartości zmiennych globalnych dostępne są nie tylko wewnątrz procedury, lecz w całej sesji Maple. Wartości zmiennych lokalnych przed i po wykonaniu procedury są identyczne. F Uwaga 6: W przypadku, gdy pewien argument procedury ma być konkretnie jakiegoś typu możemy to wymusić w deklaracji argumentów następująco argument::typ. Podstawowymi typami zmiennych są NAZWA integer float complex matrix array polynom algebraic KOMENTARZ liczba całkowita liczba rzeczywista liczba zespolona macierz wektor wielomian wyrażenie algebraiczne Pouczające jest, w przypadku wątpliwości co do deklarowania samodzielnego typów używanych zmiennych, napisanie procedury wyznaczającej przykładowo sumę dwóch liczb - jednej z zadeklarowanymi typami (np. integer i wywołanie jej dla liczb 2.0, 3.0), druga -bez deklaracji i zaobserwowanie różnic w funkcjonowaniu. 2 Dotyczy to pojedynczej części procedury, tzn. np. jednej instrukcji do...od. 4