9/!Qumf!j!lpotusvldkf!tufsvk df 22:
|
|
- Klaudia Sowa
- 8 lat temu
- Przeglądów:
Transkrypt
1 9/!Qumf!j!lpotusvldkf!tufsvk df 22: Jak już wcześniej powiedzieliśmy, w skład programów napisanych w języku AutoLISP wchodzą funkcje. Wewnątrz funkcji występują instrukcje. O sile języka w dużej mierze decydują mechanizmy służące do specyfikacji kolejności wykonywania instrukcji. Wszystkie nowoczesne języki programowania mają po kilka struktur sterujących, które pozwalają, aby pewne fragmenty programu były wykonywane tylko jeden raz lub wielokrotnie w zależności od spełnienia lub niespełnienia jakiegoś warunku. Inaczej mówiąc od prawdziwości lub fałszywości jakiegoś wyrażenia. Ponieważ temat prawda fałsz w AutoLISPie został już omówiony wcześniej (przy okazji omawiania operatorów), zostaną teraz omówione po kolei poszczególne konstrukcje sterujące stosowane w języku AutoLISP. Programy omówione w tym rozdziale PROG_012.LSP Przykład instrukcji warunkowej if. PROG_013.LSP Przykład instrukcji warunkowej if z zastosowaniem instrukcji złożonej. PROG_014.LSP Przykład instrukcji warunkowej if. Obliczenie pierwiastków równania kwadratowego wersja 1. PROG_015.LSP Przykład instrukcji warunkowej if. Obliczenie pierwiastków równania kwadratowego wersja 2. PROG_016.LSP Przykład użycia instrukcji while wersja1.
2 231 BvupMJTQ!!qsbluzd{oz!lvst PROG_017.LSP Przykład użycia instrukcji while wersja2. PROG_018.LSP Przykład użycia instrukcji while. Obliczenie i wypisanie kwadratów liczb całkowitych od 1 do 10. PROG_019.LSP Przykład zagnieżdżonej instrukcji while. Wypisanie liczb od 1 do 100 w 10 rzędach po 10 kolumn. PROG_020.LSP Przykład użycia instrukcji cond wersja1. PROG_021.LSP Przykład użycia instrukcji cond wersja2. PROG_022.LSP Przykład użycia instrukcji cond. Obliczenie pierwiastków równania kwadratowego. PROG_023.LSP Przykład użycia instrukcji repeat. Obliczenie i wypisanie kwadratów liczb całkowitych od 1 do 100. PROG_024.LSP Przykład użycia zagnieżdżonych instrukcji repeat. Wypisanie liczb od 1 do 100 w 10 rzędach po 10 kolumn. PROG_025.LSP Realizacja pętli FOR w AutoLISPie. PROG_026.LSP Użycie instrukcji FOR przykład 1. PROG_027.LSP Użycie instrukcji FOR przykład 2. PROG_028.LSP Użycie instrukcji FOR przykład 3. Tworzenie listy oraz wyświetlanie jej zawartości. PROG_029.LSP Użycie instrukcji FOR przykład 4. Obliczenie i wypisanie kwadratów liczb całkowitych od 1 do 10. PROG_030.LSP Użycie zagnieżdżonych instrukcji FOR. Wypisanie liczb od 1 do 100 w 10 rzędach po 10 kolumn.
3 9/!Qumf!j!lpotusvldkf!tufsvk df 232 PROG_031.LSP Realizacja pętli DO_WHILE w AutoLISPie. PROG_032.LSP Użycie instrukcji DO_WHILE. Obliczenie i wypisanie kwadratów liczb całkowitych od 1 do 10. Często zdarza się, że, w zależności od sytuacji, program musi dokonać wyboru, jaka jego sekcja ma być wykonywana. W takim przypadku możemy zastosować instrukcję warunkową if. Instrukcja if możemieć 2formy: lub (if wyrażenie (instrukcja_1) )if (if wyrażenie (instrukcja_1) (instrukcja_2) )if else Wyrażenie to tutaj coś, comajakąś wartość. Może być to po prostu obiekt wybrany przez nas do przechowywania zmiennej logicznej, ale może tobyć też naprawdę wyrażenie, które najpierw trzeba obliczyć, by w rezultacie tego poznać jego wartość. Najpierw zatem oblicza się wartość wyrażenia. Jeśli nie jest ona równa nil (prawda), to wykonywana jest instrukcja_1. Jeśli wartość wyrażenia jest równa nil (fałsz), to instrukcja_1 nie jest wykonywana. W drugiej wersji instrukcji if widzimy za napisem instrukcja_2 słowo komentarza else, co można przetłumaczyć jako: w przeciwnym razie. A zatem jeśli w tej drugiej sytuacji wartość wyrażenia jest różna od nil (prawda), to zostanie wykonana instrukcja_1, w przeciwnym razie, czyli gdy wartość wyrażenia jest równa nil (fałsz), zostanie wykonana instrukcja_2. Otoprostyprzykład: **************************************************PROG_012 Przyklad instrukcji warunkowej IF. przejscie na ekran tekstowy (textscr)
4 233 BvupMJTQ!!qsbluzd{oz!lvst pobranie wartosci zmiennej x x (getint "\npodaj liczbe calkowita: ") )setq sprawdzenie warunku na x (if (= x 10) (princ "Zmienna x ma wartosc 10.") (princ "Zmienna x ma wartosc inna niz 10.") else )if **************************************************KONIEC Wykonanie powyższego programu możebyć następujące: Command: (load "prog_012") Podaj liczbe calkowita: 2 Zmienna x ma wartosc inna niz 10. Command: Jeżeli użytkownik wprowadzi liczbę 10, ekran będzie wyglądał następująco: Command: (load "prog_012") Podaj liczbe calkowita: 10 Zmienna x ma wartosc 10. Command: Omówmy teraz wyróżnione linie programu: Funkcja textscr przełącza ekran AutoCADa na stronę tekstową działanie analogiczne jak klawisza funkcyjnego F1. Funkcja ta może być pomocna przy prowadzeniu dłuższego dialogu z użytkownikiem, ponieważ standardowo ekran graficzny AutoCADa wyświetla tylko 3 ostatnie linie tekstowe. W tym miejscu zmiennej x przypisujemy wartość całkowitą. Funkcją odpowiedzialną za przypisanie do zmiennej x wartości całkowitej jest funkcja getint omówimy ją sobie dokładnie w punkcie Pobieranie informacji od użytkownika. To tutaj stosujemy instrukcję warunkową if, która sprawdza wartość wyrażenia (= x 10) Ponieważ w pierwszym powyższym przykładzie użytkownik wprowadził z klawiatury cyfrę 2, wyrażenie (= x 10) zwraca nil (fałsz) i funkcja if wykonuje instrukcję instrukcja_2 (warunek na else). Gdyby użytkownik podał liczbę 10, wówczas ewaluacja wyrażenia (= x 10) daje T (prawda) i wykonana zostaje instrukcja instrukcja_1.
5 9/!Qumf!j!lpotusvldkf!tufsvk df 234 9/2/2/!Jotusvldkf!qsptuf!j!{p kf!qsptuf!j!{p pof Wjęzyku AutoLISP rolę symbolu końcowego instrukcji gra lewy skrajny nawias zamykający. Tak więc zapisy: oraz oraz oraz x 3) x 3 )setq x 3 )setq ( ) setq x 3 wjęzyku AutoLISP mają to samo znaczenie. Dzięki temu można w tym języku pisać grupy instrukcji nie troszcząc się o to, czy zmieszczą się w jednym wierszu. Nie zezwala na to np. większość realizacji języka BASIC. Jakżeczęsto zdarza się, że po napisaniu wiersza 100 IF A > 5 OR B = 1 OR C < 0 (jakiś długi ciąg operacji, który nie mieści się w jednym wierszu) musisz napisać to od nowa jako podprogram, aby uniknąć kłopotów! Z drugiej strony, jeżeli koniec wiersza nie ma żadnego znaczenia, to skąd interpreter AutoLISPu będzie wiedział, które instrukcje należy wykonać w razie spełnienia warunku? Często bowiem zdarza się, że chodzi nam o wykonanie warunkowe nie jednej instrukcji, a całego bloku instrukcji. Stosujemy wówczas instrukcję złożoną zwaną inaczej blokiem. Są to po prostu zwykłe instrukcje podane jako argumenty funkcji progn. instrukcja_1 instrukcja_2... instrukcja_n )progn Przyjęto zasadę, że wszędzie tam, gdzie można napisać instrukcję prostą, równie dobrze wolno umieścić instrukcję złożoną.
6 235BvupMJTQ!!qsbluzd{oz!lvst Konstrukcja: (if (warunek) instrukcja pusta )progn else lista_instrukcji )progn )if jest równoważna konstrukcji: (if (not (warunek)) lista_instrukcji )progn )if Oto przykład programu, w którym stosujemy instrukcje złożone: **************************************************PROG_013 Przyklad instrukcji warunkowej IF z zastosowaniem instrukcji zlozonej pobranie zmiennej x x (getint "\npodaj liczbe calkowita: ") )setq sprawdzenie warunku na x (if (= x 10) (princ "Zmienna x ma wartosc 10.") (princ "\ntrafiles.") )progn else (princ "Zmienna x ma wartosc inna niz 10.") (princ "\nnie trafiles.") )progn )if **************************************************KONIEC Oto przykładowy wygląd ekranu po wykonaniu tego programu: Command: (load "prog_013") Podaj liczbe calkowita: 10 Zmienna x ma wartosc 10. Trafiles. Command:
7 9/!Qumf!j!lpotusvldkf!tufsvk df 236 Jeżeli na zadane pytanie odpowiemy inaczej, to ekran może wyglądać tak: Command: (load "prog_013") Podaj liczbe calkowita: 5 Zmienna x ma wartosc inna niz 10. Nie trafiles. Command: Omówmy teraz wyróżnione linie programu: Pobieramy z klawiatury liczbę całkowitą (wykorzystując funkcję getint), a następnie liczbę tę podstawiamy pod zmienną x. Sprawdzamy wartość wyrażenia (= x 10). Wynik T (prawda) lub nil (fałsz), przekazujemy jako argument funkcji if. Wykorzystując instrukcję grupującą progn, budujemy instrukcję złożoną, która ma zostać wykonana, gdy wyrażenie (= x 10) jest prawdziwe zwraca T. Wykorzystując instrukcję grupującą progn, budujemy instrukcję złożoną else, która ma zostać wykonana, gdy wyrażenie (= x 10) jest fałszywe zwraca nil. Przypominam, że zróżnicowane odstępy od lewego marginesu (wypełnione białymi znakami), nie mają dla interpretera AutoLISPu żadnego znaczenia. Pomagają natomiast programiście. Dzięki nim program staje się bardziej czytelny. 9/2/3/![bhojf e pof!jot bhojf e pof!jotusvldkf!jg Po warunku if lub else może wystąpić dowolny typ instrukcji. Może tobyć instrukcja, która wprowadza lub wyprowadza dane, wykonuje działania matematyczne lub wywołuje funkcję użytkownika. Może tobyć także kolejna instrukcja if. O instrukcji if, która zawiera się wewnątrz innej instrukcji if, mówimy, że jest zagnieżdżona. Przykładowo, w poniższym kodzie druga instrukcja if jest zagnieżdżona w pierwszej: (if (> x 1) (if (< y 10) k1 1.25) )if )if Drugi warunek if testuje się tylko wówczas, gdy prawdziwy jest warunek pierwszy, tak więc zmiennej k1 jest przypisywana wartość 1.25 tylko wtedy, kiedy obydwa warunki są prawdziwe. To samo można zapisać następująco: (if (and (> x 1)(< y 10)) k1 1.25) )if Obydwa zapisy powodują wykonanie tego samego zadania, ale w drugim przykładzie, dzięki użyciu operatora logicznego and, zapis jest jaśniejszy. Nie trzeba rozszyfro-
8 237 BvupMJTQ!!qsbluzd{oz!lvst wywać, co wykonuje każda instrukcja if wystarczy odczytać instrukcję, byją zrozumieć Jeśli x jest większe niż 1iy jest mniejsze niż 10, to k1 wynosi Generalnie, dwie następujące po sobie zagnieżdżone instrukcje if można zastąpić jedną z operatorem and. Z reguły mądrze jest ich unikać, ponieważ mogą nas doprowadzić do niejasnych sytuacji i trudnych do odczytania kodów. Poniżej przedstawiam przykład eksponujący zastosowanie zagnieżdżonej instrukcji warunkowej if. Tym razem jest to temat szkolny i jednocześnie klasyczny w wielu podręcznikach programowania, a mianowicie obliczenie pierwiastków równania kwadratowego o postaci: ax 2 + bx + c = 0 Najpierw należy obliczyć tzw. deltę: delta = b 2-4ac a potem, w zależności od wartości delty, trzeba podjąć jedną z trzech akcji: 1. delta < 0 wypisanie komunikatu o braku pierwiastków rzeczywistych 2. delta = 0 zastosowanie odpowiedniego wzoru w celu uzyskania wartości pierwiastka podwójnego, a następnie, po opatrzeniu odpowiednim komunikatem, wyprowadzenie jej na ekran 3. delta > 0 zastosowanie odpowiednich wzorów do uzyskania wartości dwóch różnych pierwiastków rzeczywistych i podanie ich w odpowiedniej postaci Program realizujący powyższe zadania możemy zrealizować wykorzystując zagnieżdżone instrukcje warunkowe if else. Oto program obliczający pierwiastki dwumianu kwadratowego: **************************************************PROG_014 Obliczenie pierwiastkow rownania kwadratowego - wersja (textpage) (princ "Obliczenie pierwiastkow rownania kwadratowego.") (terpri) (terpri) pobranie wspolczynnikow a, b i c (initget (+ 1 2)) a (getreal "Podaj wartosc wspolczynnika a: ")) (initget 1) b (getreal "Podaj wartosc wspolczynnika b: ")) (initget 1) c (getreal "Podaj wartosc wspolczynnika c: ")) (terpri)
9 9/!Qumf!j!lpotusvldkf!tufsvk df 238 obliczenie delty delta (- (* b b)(* 4.0 a c)) )setq obliczenie pierwiastkow rownania (if (< delta 0) brak pierwiastkow rzeczywistych (princ "\ndla wspolczynnikow " (rtos a 2 4) ", " (rtos b 2 4) ", " (rtos c 2 4) "\nwielomian kwadratowy nie ma " "rozwiazan rzeczywistych." )strcat )princ )progn else - w tym miejscu dopuszczamy 2 sytuacje: delta = 0 i delta > 0 (if (= delta 0) podwojny pierwiastek rzeczywisty x1 (/ (- b)(* 2.0 a)) )setq (princ "\ndla wspolczynnikow " (rtos a 2 4) ", " (rtos b 2 4) ", " (rtos c 2 4) "\nwielomian kwadratowy ma " "podwojny pierwiastek rzeczywisty" "\nx1 = " (rtos x1 2 4) )strcat )princ )progn else - ostatnia, trzecia mozliwosc delta > 0-2 rozne pierwiastki rzeczywiste x1 (/ (- (- b)(sqrt delta))(* 2.0 a)) x2 (/ (+ (- b)(sqrt delta))(* 2.0 a)) )setq
10 239 BvupMJTQ!!qsbluzd{oz!lvst (princ "\ndla wspolczynnikow " (rtos a 2 4) ", " (rtos b 2 4) ", " (rtos c 2 4) "\nwielomian kwadratowy ma " "2 rozne pierwiastki rzeczywiste" "\nx1 = " (rtos x1 2 4) " " "x2 = " (rtos x2 2 4) )strcat )princ )progn )if )progn )if (terpri) **************************************************KONIEC Aotomożliwe przypadki wykonania programu: Przypadek 1 brak pierwiastków rzeczywistych Command: (load "prog_014") Obliczenie pierwiastkow rownania kwadratowego. Podaj wartosc wspolczynnika a: 1 Podaj wartosc wspolczynnika b: 1 Podaj wartosc wspolczynnika c: 1 Dla wspolczynnikow , , wielomian kwadratowy nie ma rozwiazan rzeczywistych. Command: Przypadek 2 podwójny pierwiastek rzeczywisty Command: (load "prog_014") Obliczenie pierwiastkow rownania kwadratowego. Podaj wartosc wspolczynnika a: 1 Podaj wartosc wspolczynnika b: -2 Podaj wartosc wspolczynnika c: 1 Dla wspolczynnikow , , wielomian kwadratowy ma podwojny pierwiastek rzeczywisty x1 = Command:
11 9/!Qumf!j!lpotusvldkf!tufsvk df 23: Przypadek 3 dwa różne pierwiastki rzeczywiste Command: (load "prog_014") Obliczenie pierwiastkow rownania kwadratowego. Podaj wartosc wspolczynnika a: 2 Podaj wartosc wspolczynnika b: -3 Podaj wartosc wspolczynnika c: 1 Dla wspolczynnikow , , wielomian kwadratowy ma 2 rozne pierwiastki rzeczywiste x1 = x2 = Command: Omówmy teraz wyróżnione linie programu: Funkcja textpage powoduje wyświetlenie ekranu tekstowego AutoCADa z jednoczesnym wyczyszczeniem jego zawartości. Funkcja initget ustala różne opcje, które mogą być użyte przez następującą po initget funkcję getxxx tutaj odnosi się to do wartości współczynnika a. W konkretnym przypadku bity kontrolne oznaczają: 1 nie pozwala na tzw. pusty ENTER 2 nie pozwala na wprowadzenie wartości zerowej unikniemy w ten sposób sprowadzenia równania kwadratowego do postaci liniowej bx + c = 0 Dokładniej o funkcji initget powiemy sobie w punkcie Pobieranie informacji od użytkownika. W liniach tych robimy założenia odnośnie wartości współczynników b i c. Mogą być one dowolne, za wyjątkiem pustego ENTER. Instrukcja grupująca progn określa nam instrukcje, które zostaną wykonane w przypadku, gdy delta będzie mniejsza od zera równanie nie posiada pierwiastków rzeczywistych. Funkcja strcat zwraca łańcuch będący złożeniem (konkatenacją) wszystkich swoich argumentów typu string. Otrzymany łańcuch podawany jest jako argument funkcji princ,którawyświetla go na ekranie tekstowym. Dokładniej o funkcji strcat powiemy sobie w punkcie Działania na łańcuchach. Jak już wspomniałem wcześniej, argumenty funkcji stcat muszą być łańcuchami (typ string). Ponieważ pierwiastki równania kwadratowego są zmiennymi typu rzeczywistego, należy wpierw poddać je konwersji na typ łańcuchowy. Kowersja ta przeprowadzana jest za pomocą funkcji rtos. W naszym konkretnym przypadku funkcja rtos zwraca łańcuch obrazujący format dziesiętny zmiennej z czterema cyframi po przecinku. Ten blok instrukcji ma zostać wykonany, gdy delta jest równa lub większa od zera.
12 241 BvupMJTQ!!qsbluzd{oz!lvst Tutaj dokonujemy kolejnego uściślenia warunku na deltę. Ten blok instrukcji ma zostać wykonany, gdy delta jest równa zero. W linii tej następuje zgrupowanie instrukcji w blok, który ma zostać wykonany, gdy delta jest większa od zera. Ponieważ zastosowanie zagnieżdżonych instrukcji warunkowych if prowadzi do otrzymania zawiłego kodu, poniższy przykład pokazuje sposób obejścia tego problemu. **************************************************PROG_015 Obliczenie pierwiastkow rownania kwadratowego - wersja (textpage) (princ "Obliczenie pierwiastkow rownania kwadratowego.") (terpri) (terpri) pobranie wspolczynnikow a, b i c (initget (+ 1 2)) a (getreal "Podaj wartosc wspolczynnika a: ")) (initget 1) b (getreal "Podaj wartosc wspolczynnika b: ")) (initget 1) c (getreal "Podaj wartosc wspolczynnika c: ")) (terpri) obliczenie delty delta (- (* b b)(* 4.0 a c)) )setq obliczenie pierwiastkow rownania (if (< delta 0) brak pierwiastkow rzeczywistych (princ "\ndla wspolczynnikow " (rtos a 2 4) ", " (rtos b 2 4) ", " (rtos c 2 4) "\nwielomian kwadratowy nie ma " "rozwiazan rzeczywistych." )strcat )princ )progn )if
13 9/!Qumf!j!lpotusvldkf!tufsvk df 242 (if (= delta 0) podwojny pierwiastek rzeczywisty x1 (/ (- b)(* 2.0 a)) )setq (princ "\ndla wspolczynnikow " (rtos a 2 4) ", " (rtos b 2 4) ", " (rtos c 2 4) "\nwielomian kwadratowy ma " "podwojny pierwiastek rzeczywisty" "\nx1 = " (rtos x1 2 4) )strcat )princ )progn )if (if (> delta 0) 2 rozne pierwiastki rzeczywiste x1 (/ (- (- b)(sqrt delta))(* 2.0 a)) x2 (/ (+ (- b)(sqrt delta))(* 2.0 a)) )setq (princ "\ndla wspolczynnikow " (rtos a 2 4) ", " (rtos b 2 4) ", " (rtos c 2 4) "\nwielomian kwadratowy ma " "2 rozne pierwiastki rzeczywiste" "\nx1 = " (rtos x1 2 4) " " "x2 = " (rtos x2 2 4) )strcat )princ )progn )if (terpri) **************************************************KONIEC
14 243 BvupMJTQ!!qsbluzd{oz!lvst Wykonanie powyższego programu jest dla użytkownika identyczne jak programu PROG_014.LSP różnice widoczne są tylko z punktu widzenia programisty. Jak widać w powyższym kodzie, wykorzystując obliczoną wcześniej deltę, do obliczenia pierwiastków równania wykorzystano trzy proste instrukcje warunkowe if (bez realizacji warunku typu else): (if (< delta 0)... )progn )if (if (= delta 0)... )progn )if (if (> delta 0)... )progn )if Sam program stał się przez to bardziej przejrzysty i zrozumiały. Instrukcja while ma postać: (while wyrażenie instrukcja_1 )while wyrażenie Najpierw oblicza się wartość wyrażenia. Jeśli wynik jest równy nil (fałsz), wówczas instrukcja_1 nie jest wcale wykonywana. Jeśli jednak wartość wyrażenia jest różna od nil (prawda), wówczas wykonywana jest instrukcja_1, po czym ponownie obliczana jest wartość wyrażenia. Jeśli nadal wartość tego wyrażenia jest różna od nil, wówczas ponownie wykonywana jest instrukcja_1 i tak dalej, dopóki (while!) wyrażenie ma wartość różną od nil. Jeśli w końcu kiedyś obliczone wyrażenie będzie równe nil, wówczas dopiero pętla zostanie przerwana. Obliczenie wartości wyrażenia odbywa się przed wykonaniem instrukcji instrukcja_1. Instrukcja_1 może być instrukcją prostą lub złożoną.
15 9/!Qumf!j!lpotusvldkf!tufsvk df 244 Qs{zlbe!2 Należy zawsze pamiętać o umieszczeniu warunku wyjścia z pętli. Jeśli jednak zdarzy Ci się uruchomić nieskończoną pętlę, możesz ją bardzo prosto przerwać naciskając kombinację klawiszy Ctrl-C. A tak na marginesie kombinacja klawiszy Ctrl-C przerywa dowolną komendę AutoCADa lub funkcję AutoLISPu. Zastosowanie pętli while omówimy sobie na poniższych przykładach. W przykładzie tym, będąc wpętli while, pobieramy coraz to nowe wartości zmiennej x. Warunkiem opuszczenia pętli while jest nadanie zmiennej x wartości zero. *************************************************PROG_016 Wykorzystanie instrukcji WHILE - wersja (textpage) przejscie na ekran tekstowy nadanie zmiennej x wartosci nil x nil) wejscie w petle while (while (/= x 0) pobranie nowej wartosci zmiennej x x (getint "Podaj nowa wartosc zmiennej x [0 - koniec]: " )getint )setq )progn )while *************************************************KONIEC A oto przykładowy wygląd ekranu po wykonaniu programu: Command: (load "prog_016") Podaj nowa wartosc zmiennej x [0 - koniec]: 1 Podaj nowa wartosc zmiennej x [0 - koniec]: -10 Podaj nowa wartosc zmiennej x [0 - koniec]: 0 Command: Omówmy teraz wyróżnione linie programu:
16 245BvupMJTQ!!qsbluzd{oz!lvst Qs{zlbe!3 Wchodzimy w pętlę while i rozpoczynamy pobieranie wartości zmiennej x. Wyrażeniem, powodującym dopuszczenie do wejścia w pętlę jest (/= x 0). Wyrażenie to jest prawdziwe (zwraca T), gdyż wcześniej zmiennej x została nadana wartość nil. Pobieramy nową wartość zmiennej x, po czym wracamy na początek pętli while, by ponownie porównać warunek (/= x 0). Jeśli warunek jest prawdziwy, pobieramy następną wartość zmiennej x i znowu skaczemy na początek pętli. Jeśli warunek jest fałszywy, omijamy pętlę while i wykonujemy dalszy ciąg instrukcji w tym przypadku jest to tylko instrukcja, powodująca niezauważalne zakończenie wykonywania programu. Program ten stanowi modyfikację programu PROG_016. Ukazuje on inny sposób kontroli wyrażenia, powodującego wyjściezpętli while. *************************************************PROG_017 Wykorzystanie instrukcji WHILE - wersja (textpage) przejscie na ekran tekstowy nadanie zmiennej jeszcze wartosci T jeszcze T) wejscie w petle while (while jeszcze pobranie nowej wartosci zmiennej x x (getint "Podaj nowa wartosc zmiennej x [0 - koniec]: " )getint )setq zbadanie wartosci zmiennej x (if (= x 0) jeszcze nil) )progn )if )progn )while jeszcze *************************************************KONIEC
17 Qs{zlbe!4 9/!Qumf!j!lpotusvldkf!tufsvk df 246 Wykonanie programu jest identyczne jak dla programu PROG_016 różnice są widoczne jedynie dla programisty. Omówmy teraz wyróżnione linie programu: Inicjalizujemy zmienną jeszcze i nadajemy jej wartość T (prawda). Zmienna ta będzie sterować pętlą while. Ponieważ wcześniej zmiennej jeszcze nadano wartość T, wchodzimy w pętlę while. Pobieramy nową wartość zmiennej x. Sprawdzamy, czy zmienna x jest równa zero. Jeżeli zmienna x jest równa zero, ustawiamy wartość zmiennej jeszcze na nil, umożliwiając tym samym opuszczenie pętli while. W przykładzie tym, wykorzystujemy instrukcję while do obliczenia i wypisania na ekranie tekstowym kwadratów liczb całkowitych od 1 do 10. *************************************************PROG_018 Wykorzystanie instrukcji WHILE. Program do obliczania kwadratow liczb calkowitych od 1 do (textpage) przejscie na ekran tekstowy liczba 1) (princ "\nkwadraty liczb calkowitych od 1 do 10.\n") (princ "\nliczba Kwadrat liczby\n") (while (< liczba 11) kwadrat (* liczba liczba)) (princ " " (rtos liczba 2 0) " " (rtos kwadrat 2 0) )strcat )princ (terpri) liczba (1+ liczba)) )progn )while *************************************************KONIEC
18 247 BvupMJTQ!!qsbluzd{oz!lvst Po wykonaniu programu ekran tekstowy będzie wyglądał następująco: Command: (load "prog_018") Kwadraty liczb calkowitych od 1 do 10. Liczba Kwadrat liczby Command: Omówmy teraz wyróżnione linie programu: Ustawiamy wartość zmiennej liczba na 1. Tutaj rozpoczyna się pętla, która zostanie wykonana, ponieważ wartość zmiennej liczba jest mniejsza niż 11. Gdyby liczba już na początku była równa 11, wówczas pętla nie wykonałaby się ani razu. Obliczany kwadrat danej liczby. Wynik podstawiany jest pod zmienną kwadrat. Używając funkcji princ, strcat oraz rtos, wypisujemy w jednym wierszu daną liczbę oraz jej kwadrat. To tutaj następuje przejście do nowej linii. Zwiększamy wartość zmiennej liczba o 1. Gdybyśmy o tym zapomnieli, wówczas jedynym sposobem na opuszczenie pętli while byłoby przerwanie wykonywania programu poprzez naciśnięcie kombinacji klawiszy Ctrl-C. 9/3/2/![bhojf e pof!jotusv f e pof!jotusvldkf!xij ldkf!xijmf Aby zapewnić sobie dwa poziomy powtarzania, możemy zagnieździć pętle while. Można na przykład zastosować zewnętrzną pętlę w celu powtarzania całego programu, dopóki użytkownik nie zadecyduje inaczej, oraz wewnętrzną do sprawdzania poprawności danych wejściowych. Poniższy program pokazuje wykorzystanie zagnieżdżonych pętli while do wypisania na ekranie tekstowym liczb od 1 do 100 w 10 rzędach po 10 kolumn. *************************************************PROG_019 Wykorzystanie zagniezdzonych instrukcji WHILE. Wypisanie liczb od 1 do 100 w 10 rzedach po 10 kolumn
19 9/!Qumf!j!lpotusvldkf!tufsvk df 248 (textpage) (princ "\nwykorzystanie zagniezdzonych instrukcji WHILE.") (princ "\nwypisanie liczb od 1 do 100 " "w 10 rzedach po 10 kolumn." )strcat )princ (princ "\n\n") rzad 1) (while (< rzad 11) kolumna 1 liczba 1 )setq (while (< kolumna 11) (princ (+ liczba (* 10 (- rzad 1)))) (princ " ") kolumna (1+ kolumna) liczba (1+ liczba) )setq )progn )while kolumna (princ "\n") rzad (1+ rzad)) )progn )while rzad *************************************************KONIEC Wykonanie programu będzie następujące: Command: (load "prog_019") Wykorzystanie zagniezdzonych instrukcji WHILE. Wypisanie liczb od 1 do 100 w 10 rzedach po 10 kolumn
20 249 BvupMJTQ!!qsbluzd{oz!lvst Command: Omówmy teraz wyróżnione linie programu. Ustawiamy wartość początkową zmiennej rzad. Wchodzimy w zewnętrzną pętlę while. Pętlę tę wykonujemy tak długo, dopóki zmienna rzad jest mniejsza od 11. Ustawiamy wartości początkowe zmiennych kolumna i liczba dla kolejnego rzędu liczb. Wchodzimy w wewnętrzną pętlę while. Pętlę tę wykonujemy tak długo, dopóki zmienna kolumna jest mniejsza od 11. Obliczamy aktualną wartość liczby, po czym wypisujemy ją używając instrukcji princ. Oddzielamy od siebie dwoma spacjami poszczególne liczby w rzędzie. Zwiększamy o 1 wartości zmiennych kolumna i liczba, zapewniając tymsamym dalszy prawidłowy przebieg pętli wewnętrznej. Będąc już poza pętlą wewnętrzną przechodzimy do nowego wiersza, umożliwiając tym samym prawidłowe wypisanie kolejnego rzędu liczb. Zwiększamyo1wartość zmiennej rzad, zapewniając tym samym dalszy prawidłowy przebieg pętli zewnętrznej. W pewnych okolicznościach trzeba w zależności od wyniku jakiegoś testu, wybrać jedną z wielu dróg. Konstrukcja if... else daje do wyboru tylko dwie możliwości dalszego postępowania, chociaż pozwala też stosować rodzaj zagnieżdżania jednych konstrukcji w innych, na przykład: if (warunek_1) czynnosc_1 else if (warunek_2) czynnosc_2 else
21 9/!Qumf!j!lpotusvldkf!tufsvk df 24: if (warunek_3) czynnosc_3 itd. Jest to jednak zdecydowanie nieznośny sposób rozwiązania tego problemu. W języku AutoLISP istnieje mechanizm, zwany instrukcją cond (zwrotnica), który pozwala wybrać jeden spośród wielu skoków. Format instrukcji cond jest następujący: (cond (test_1 result_1)... (test_n result_n)) Argumentami funkcji może być dowolna liczba list. Funkcja testuje wyrażenia test, wyznaczając wartość pierwszych elementów każdej kolejnej listy podrzędnej (w podanym porządku), aż do momentu, gdy wartość któregoś z nich okaże się różna od nil. Następnie wartościowane jest to wyrażenie result, które występuje po pozytywnie przetestowanym wyrażeniu test i zwracana jest wartość ostatniego wyrażenia listy podrzędnej. Zwykle jako ostatnie wyrażenie test używa się T (jest ono uwzględniane w przypadku braku pozytywnego wyniku testowania wszystkich poprzednich). Typowym przykładem zastosowania tej instrukcji może być program zarządzania danymi, którego działaniem steruje się za pośrednictwem menu. Użytkownik programu otrzymuje następujące menu: Mozliwe opcje programu: 1. Utworz nowy plik. 2. Dolacz jeden element do pliku. 3. Usun jeden element z pliku. 4. Wypisz jeden element z pliku. 5. Przeszukaj plik. 6. Zakoncz prace. Wybierz opcje [1-6]: Jest sześć funkcji przeznaczonych do wykonywania tych zadań oraz funkcja o nazwie MENU, zarządzająca pozostałymi funkcjami. A oto i program realizujący powyższe zadania: *************************************************PROG_020 Przyklad uzycia instrukcji COND - wersja 1. ================================================= definicje poszczegolnych funkcji programu (defun NOWY_PLIK () (princ "\nwybrales opcje NOWY PLIK.")
22 251 BvupMJTQ!!qsbluzd{oz!lvst cialo_funkcji )progn )NOWY_PLIK (defun DOPISZ_ELEMENT () (princ "\nwybrales opcje DOPISZ ELEMENT.") cialo_funkcji )progn )DOPISZ_ELEMENT (defun USUN_ELEMENT () (princ "\nwybrales opcje USUN ELEMENT.") cialo_funkcji )progn )USUN_ELEMENT (defun WYPISZ_ELEMENT () (princ "\nwybrales opcje WYPISZ ELEMENT.") cialo_funkcji )progn )WYPISZ_ELEMENT (defun SZUKAJ ()
23 9/!Qumf!j!lpotusvldkf!tufsvk df 252 (princ "\nwybrales opcje SZUKAJ.") cialo_funkcji )progn )SZUKAJ (defun ZAKONCZ_PRACE () (princ "\nwybrales opcje ZAKONCZ PRACE.") cialo_funkcji jeszcze nil) )progn )ZAKONCZ PRACE Funkcja glowna (defun MENU () jeszcze T) (while jeszcze (textpage) wypisanie zawartosci menu (princ "\nmozliwe opcje programu:" "\n1. Utworz nowy plik." "\n2. Dolacz jeden element do pliku." "\n3. Usun jeden element z pliku." "\n4. Wypisz jeden element z pliku." "\n5. Przeszukaj plik." "\n6. Zakoncz prace." )strcat )princ (terpri) pobranie numeru opcji opcja (getint
24 253 BvupMJTQ!!qsbluzd{oz!lvst "\nwybierz opcje [1-6]: " )getint )setq (textpage) wywolanie funkcji zwiazanej z numerem podanej opcji (cond ((= opcja 1)(NOWY_PLIK)) ((= opcja 2)(DOPISZ_ELEMENT)) ((= opcja 3)(USUN_ELEMENT)) ((= opcja 4)(WYPISZ_ELEMENT)) ((= opcja 5)(SZUKAJ)) ((= opcja 6)(ZAKONCZ_PRACE)) (T (princ "\nniepoprawny przypadek.")) )cond zatrzymanie realizacji programu do chwili nacisniecia klawisza ENTER (getstring "\n\nnacisnij ENTER...") )progn )while jeszcze )progn )MENU koniec definicji funkcji ================================================= wywolanie funkcji MENU (MENU) ================================================= *************************************************KONIEC Wykonanie powyższego programu możebyć następujące: Command: (load "prog_020") Mozliwe opcje programu: 1. Utworz nowy plik. 2. Dolacz jeden element do pliku. 3. Usun jeden element z pliku. 4. Wypisz jeden element z pliku. 5. Przeszukaj plik. 6. Zakoncz prace. Wybierz opcje [1-6]: 3 Wybrales opcje USUN ELEMENT
25 9/!Qumf!j!lpotusvldkf!tufsvk df 254 Nacisnij ENTER... Mozliwe opcje programu: 1. Utworz nowy plik. 2. Dolacz jeden element do pliku. 3. Usun jeden element z pliku. 4. Wypisz jeden element z pliku. 5. Przeszukaj plik. 6. Zakoncz prace. Wybierz opcje [1-6]: 7 Niepoprawny przypadek. Nacisnij ENTER... Mozliwe opcje programu: 1. Utworz nowy plik. 2. Dolacz jeden element do pliku. 3. Usun jeden element z pliku. 4. Wypisz jeden element z pliku. 5. Przeszukaj plik. 6. Zakoncz prace. Wybierz opcje [1-6]: 6 Wybrales opcje ZAKONCZ PRACE Nacisnij ENTER... Command: Omówmy teraz wyróżnione linie programu: Używając funkcji defun, definiujemy poszczególne funkcje naszego programu. Funkcje te są to tylko funkcje prototypowe nie robią nic poza wypisaniem nazwy wybranej komendy (za wyjątkiem funkcji ZAKONCZ_PRACE). W linii tej, będącej instrukcją funkcji ZAKONCZ_PRACE, poprzez nadanie zmiennej jeszcze wartości nil, opuszczamy pętlę while. Definiujemy naszą funkcję główną MENU. Nadajemy zmiennej jeszcze wartość T (prawda), umożliwiając tym samym wejście w pętlę while. Wchodzimy w pętlę while. Używając funkcji princ oraz strcat, wypisujemy menu użytkownika. W linii tej, liczba całkowita, będąca odpowiedzią (wyborem) użytkownika, zostaje podstawiona pod zmienną opcja. To tutaj wykorzystujemy instrukcję cond, aby dokonać wyboru wielowariantowego. Jeśli zmienna opcja =1,tobędzie wywołana funkcja NOWY_PLIK, jeśli zaś zmienna opcja = 2, to zostanie wywołana funkcja DOPISZ_ELEMENT itd.
26 255 BvupMJTQ!!qsbluzd{oz!lvst W linii tej, widzimy, jak w instrukcji cond zastosować opcję domyślną. Jeżeli wartość zmiennej opcja będzie mniejsza niż 1lubwiększa niż 6, to instrukcja cond wybierze instrukcje występujące po stałej predefiniowanej T wypisze komunikat "Niepoprawny przypadek.", po czym zostanie ponowiony wybór opcji z menu. Wywołujemy wcześniej zdefiniowaną funkcję MENU. Postępowanie takie automatycznie wywołuje funkcję MENU zaraz po pomyślnym załadowaniu programu do interpretera AutoLISPu. Należy zwrócić szczególną uwagę na odpowiednią liczbę nawiasów, oddzielających od siebie poszczególne warunki. Na przykład zapis: (cond ((= x1 1) lista_instrukcji ) ((and (= x1 2)(/= x3 0)) lista_instrukcji ) )cond jest poprawny, podczas gdy zapis: (cond (= x1 1) lista_instrukcji ) (and (= x1 2)(/= x3 0)) lista_instrukcji ) )cond jest zapisem błędnym. W takim przypadku interpreter powinien zasygnalizować błąd zamknięcia nawiasów. Jeżeli jednak pomylisz się również w liczbie nawiasów w lista_ instrukcji tak, że ich liczba będzie zgodna, mogą powstać błędy trudne do zlokalizowania. Aby uniknąć takiego przypadku, możesz stosować następującą konstrukcję: (cond (przypadek 1 (= x1 1) lista_instrukcji_1 )progn )koniec przypadku 1 (rzypadek 2 (and (= x1 2)(/= x3 0)) lista_instrukcji_2 )progn
27 9/!Qumf!j!lpotusvldkf!tufsvk df 256 )koniec przypadku 2... (przypadek n (warunek_n) lista_instrukcji_n )progn )koniec przypadku n )cond Zapis taki jest przejrzysty i czytelny, można również łatwo zlokalizować odpowiadającą sobie parę nawiasów. Wróćmy jednak do naszego programu. Funkcja główna MENU wywoływana była z pętli while. Po wyborze i wykonaniu funkcji z menu 1 5, następowało ponowne wywołanie funkcji MENU. Co jednak zrobić, jeśli chcemy, aby funkcja MENU była wywoływana jednokrotnie (tzn. wykonywała jedną z funkcji podrzędnych, po czym opuszczała pętlę while)? Odpowiedź jest bardzo prosta. Wystarczy do każdej funkcji pomocniczej dopisać na końcu instrukcję ustalającą wartość zmiennej jeszcze na nil. Program PROG_021, znajdujący się na dołączonej dyskietce, zawiera odpowiednie zmiany, pozwalające na działanie w wyżej wymieniony sposób. Ostatnim przykładem użycia instrukcji cond będzie program obliczający pierwiastki równania kwadratowego. **************************************************PROG_022 Wykorzystanie instrukcji COND. Obliczenie pierwiastkow rownania kwadratowego (textpage) (princ "Obliczenie pierwiastkow rownania kwadratowego.") (terpri) (terpri) pobranie wspolczynnikow a, b i c (initget (+ 1 2)) a (getreal "Podaj wartosc wspolczynnika a: ")) (initget 1) b (getreal "Podaj wartosc wspolczynnika b: ")) (initget 1) c (getreal "Podaj wartosc wspolczynnika c: ")) (terpri) obliczenie delty
28 257 BvupMJTQ!!qsbluzd{oz!lvst delta (- (* b b)(* 4.0 a c)) )setq obliczenie pierwiastkow rownania (cond ((< delta 0) brak pierwiastkow rzeczywistych (princ "\ndla wspolczynnikow " (rtos a 2 4) ", " (rtos b 2 4) ", " (rtos c 2 4) "\nwielomian kwadratowy nie ma " "rozwiazan rzeczywistych." )strcat )princ )progn )koniec delta < 0 ((= delta 0) podwojny pierwiastek rzeczywisty x1 (/ (- b)(* 2.0 a)) )setq (princ "\ndla wspolczynnikow " (rtos a 2 4) ", " (rtos b 2 4) ", " (rtos c 2 4) "\nwielomian kwadratowy ma " "podwojny pierwiastek rzeczywisty" "\nx1 = " (rtos x1 2 4) )strcat )princ )progn )koniec delta = 0 ((> delta 0) 2 rozne pierwiastki rzeczywiste x1 (/ (- (- b)(sqrt delta))(* 2.0 a)) x2 (/ (+ (- b)(sqrt delta))(* 2.0 a)) )setq (princ
29 9/!Qumf!j!lpotusvldkf!tufsvk df 258 "\ndla wspolczynnikow " (rtos a 2 4) ", " (rtos b 2 4) ", " (rtos c 2 4) "\nwielomian kwadratowy ma " "2 rozne pierwiastki rzeczywiste" "\nx1 = " (rtos x1 2 4) " " "x2 = " (rtos x2 2 4) )strcat )princ )progn )koniec delta > 0 )cond (terpri) **************************************************KONIEC Wykonanie powyższego programu jest identyczne, jak w programach PROG_014 i PROG_015, gdzie używaliśmy instrukcji warunkowej if. Omówmy teraz wyróżnione linie programu: Wchodzimy w instrukcję cond i rozpoczynamy sprawdzanie wartości zmiennej delta. Ten fragment programu wykonywany jest wówczas, gdy zmienna delta jest mniejsza od zera. Ten fragment programu wykonywany jest wówczas, gdy zmienna delta jest równa zero. Ten fragment programu wykonywany jest wówczas, gdy zmienna delta jest większa od zera. Pętla repeat posiada następujący format: (repeat number expr_1... expr_n) W funkcji tej argument number jest dowolną dodatnią liczbą typu integer. Funkcja dokonuje wartościowania każdego argumentu expr tyle razy, ile określa argument number i zwraca wartość ostatniego z nich.
30 259 BvupMJTQ!!qsbluzd{oz!lvst Funkcja ta jest podobna do być może znanej Ci z innych języków programowania funkcji for. Jej działanie prześledzimy na poniższym przykładzie. Będzie to modyfikacja programu PROG_018, który oblicza i wypisuje kwadraty liczb całkowitych od 1 do 10. W programie PROG_018, została do tego celu użyta funkcja while. W poniższym programie pokażę Ci, jak rozwiązać to zadanie przy pomocy pętli repeat. A oto i nasz program: *************************************************PROG_023 Wykorzystanie instrukcji REPEAT. Program do obliczania kwadratow liczb calkowitych od 1 do (textpage) przejscie na ekran tekstowy liczba 1) (princ "\nkwadraty liczb calkowitych od 1 do 10.\n") (princ "\nliczba Kwadrat liczby\n") (repeat 10 zmiana w stosunku do PROG11 kwadrat (* liczba liczba)) (princ " " (rtos liczba 2 0) " " (rtos kwadrat 2 0) )strcat )princ (terpri) liczba (1+ liczba)) )progn )repeat *************************************************KONIEC Po wykonaniu programu ekran będzie wyglądał identycznie, jak w programie PROG_018. Omówmy teraz wyróżnione linie programu: Instrukcja (while (< liczba 11)...) została zastąpiona instrukcją (repeat 10...). Jest to jedyna zmiana dokonana w stosunku do programu PROG_018. Zastosowanie instrukcji while czy instrukcji repeat zależy od tego, co chcemy uzyskać. Instrukcję repeat stosujemy wówczas, gdy znamy liczbę powtórzeń pętli. Instrukcję while możemy stosować zarówno wtedy, gdy znamy liczbę powtórzeń pętli, jak również wtedy, gdy liczba powtórzeń nie jest znana, a zakończenie pętli zależne jest od spełnienia danego warunku.
31 9/!Qumf!j!lpotusvldkf!tufsvk df 25: 9/5/2/![bhojf e pof!jotu hojf e pof!jotusvldkf!sf svldkf!sfqfbu Zagnieżdżanie instrukcji repeat jest identyczne jak instrukcji while, co zobrazowano na poniższym przykładzie. *************************************************PROG_024 Wykorzystanie zagniezdzonych instrukcji REPEAT. Wypisanie liczb od 1 do 100 w 10 rzedach po 10 kolumn (textpage) (princ "\nwykorzystanie zagniezdzonych instrukcji REPEAT.") (princ "\nwypisanie liczb od 1 do 100 " "w 10 rzedach po 10 kolumn." )strcat )princ (princ "\n\n") rzad 1) (repeat 10 kolumna 1 liczba 1 )setq (repeat 10 (princ (+ liczba (* 10 (- rzad 1)))) (princ " ") kolumna (1+ kolumna) liczba (1+ liczba) )setq )progn )repeat (princ "\n") rzad (1+ rzad)) )progn )repeat *************************************************KONIEC
32 261 BvupMJTQ!!qsbluzd{oz!lvst Po wykonaniu programu ekran będzie wyglądał identycznie, jak w programie PROG_019. Omówmy teraz wyróżnione linie programu, które obrazują zmiany w stosunku do kodu z programu PROG_019: Instrukcja (while (< rzad 11)...), będąca pętlą zewnętrzną, została zastąpiona instrukcją (repeat 10...) liczba powtórzeń pętli wynosi 10. Instrukcja (while (< kolumna 11)...), będąca pętlą wewnętrzną, została zastąpiona instrukcją (repeat 10...) liczba powtórzeń pętli wynosi 10. Jeśli programowałeś już w jakimś innym języku, jedną z pierwszych poznanych instrukcji była zapewne pętla for. Ma ona następującą formę (przykład z języka C): for (instr_ini wyraz_warun instr_krok) tresc_petli co w przykładzie może wyglądać choćby tak: for (i=0 i<10 i=i+1) { printf ("\njestem w petli for.") } Wyjaśnijmy sobie teraz, co oznaczają poszczególne człony: for (ang. dla...) oznacza: dla takich warunków rób... instr_ini jest to instrukcja wykonywana zanim pętla zostanie po raz pierwszy uruchomiona. W naszym przykładzie jest to podstawienie i=0. wyraz_warun jesttowyrażenie, które obliczane jest przed każdym obiegiem pętli. Jeśli jest ono różne od zera, to wykonywane zostają instrukcje będące treścią pętli. U nas wyrażeniem warunkowym jest wyrażenie i<10. Jeśli rzeczywiście i jest mniejsze od 10, wówczas wykonana zostaje instrukcja będąca treścią pętli, czyli wypisanie tekstu "\njestem w pętli for." instr_krok to instrukcja wykonywana na zakończenie każdego obiegu pętli. Jest to jakby ostatnia instrukcja, wykonywana bezpośrednio przed obliczeniem wyrażenia wyraz_warun. Unasjesttopoprostui=i+1. Praca tej pętli odbywa się więc jakby według takiego harmonogramu: 1. Najpierw wykonują się instrukcje inicjalizujące pracę pętli.
33 9/!Qumf!j!lpotusvldkf!tufsvk df Obliczane jest wyrażenie warunkowe. Jeśli jest równe 0 praca pętli jest przerywana. 3. Jeśli powyżej okazało się, że wyrażenie było różne od zera, wówczas wykonywane zostają instrukcje będące treścią pętli. 4. Po wykonaniu treści pętli wykonana zostaje instrukcja inst_krok, po czym powtarzana jest akcja 2). Pora teraz na wyjaśnienie, dlaczego w celu omówienia pętli for posłużyłem się przykładem z języka C. Otóż w standardowych funkcjach języka AutoLISP nie ma definicji pętli for!!! Jest wprawdzie instrukcja repeat, lecz nie jest to jeszcze pętla for w całej okazałości. Powyższy problem da się jednak obejść. Język AutoLISP oferuje nam konstrukcję tzw. listy-funkcji. Ponieważ funkcja jest listą, więc po prostu zbudujmy ją jak listę, anastępnie wykonajmy jako funkcję. Pisanie programów wykorzystujących takie sztuczki jest możliwe tylko w LISPie. Inne języki nie pozwalają na traktowanie obiektu raz jako danej (lista), a raz jako części programu (funkcja). Temat listy-funkcji zostanie omówiony dokładnie podczas omawiania funkcji, teraz więc zostanie zaprezentowana definicja pętli FOR, której autorami są Panowie: Maciej Horczyczak i Jacek Skierski książka AutoLISP dla użytkowników AutoCADa. *************************************************PROG_025 Maciej Horczyczak & Jacek Skierski Petla FOR (jak w BASIC'u) (for 'zm_ster war_pocz_zm_ster war_kon_zm_ster krok_zm_ster 'lista instrukcji) Przyklady wywolania: (for 'i '(print i)) (for 'i ' (print i) (print (+ i 1)) )progn )for i (defun FOR ( zmster ip ik ki zakres / fun w ) (if (> ki 0) w (eval '<=)) w (eval '>=)) )if fun (list (list '/ ) zakres)) (set zmster ip) (while (w (eval zmster) ik) (FUN)
34 263 BvupMJTQ!!qsbluzd{oz!lvst Qs{zlbe!2 (set zmster (+ ki (eval zmster))) )while fun nil) )progn )FOR *************************************************KONIEC O definicji pętli FOR powiemy sobie podczas omawiania definiowania własnych funkcji, teraz tylko podam kilka przykładów jej wykorzystania. W przykładzie tym, po pobraniu wartości początkowej, końcowej oraz kroku pętli, wypisujemy na ekran wybrane liczby. *************************************************PROG_026 Wykorzystanie petli FOR - przyklad odszukanie i zaladowanie pliku PROG_025.LSP plik (findfile "prog_025.lsp")) (if plik plik zostal znaleziony (load plik) )progn else - nia znaleziono pliku (alert "Nie znaleziono pliku PROG_025.LSP!!!" "\nwykonywanie programu przerwane." )strcat )alert (exit) )progn )if jesli plik prog_025 zostal znaleziony wykorzystanie petli for (textpage) przejscie na ekran tekstowy (princ "\nprzyklad wykorzystania petli for.") (initget ( )) x1 (getint "\npodaj wartosc poczatkowa petli: ")) (initget ( )) x2 (getint "\npodaj wartosc koncowa petli: "))
35 9/!Qumf!j!lpotusvldkf!tufsvk df 264 (initget ( )) x3 (getint "\npodaj krok petli: ")) (princ "\nwypisywanie od " (rtos x1 2 0) " do " (rtos x2 2 0) " z krokiem = " (rtos x3 2 0) ".\n" )strcat )princ (for 'i x1 x2 x3 ' (princ i) (terpri) przejscie do nowej linii )progn )for i *************************************************KONIEC Wykonanie programu możebyć następujące: Command: (load "prog_026") Przyklad wykorzystania petli for. Podaj wartosc poczatkowa petli: 1 Podaj wartosc koncowa petli: 10 Podaj krok petli: 2 Wypisywanie od 1 do 10 z krokiem = Command: Omówmy teraz wyróżnione linie programu: Wykorzystując standardową funkcję AutoLISPu findfile, poszukujemy pliku z definicją pętli FOR. Format funkcji findfile jest następujący: (findfile filename)
36 265BvupMJTQ!!qsbluzd{oz!lvst Funkcja ta poszukuje określonego pliku (w naszym przypadku jest to plik PROG_025.LSP) w bibliotecznej ścieżce poszukiwań AutoCADa. Jeśli podany plik zostanie znaleziony, funkcja zwraca pełną nazwę pliku wraz ze ścieżką dostępu, w przeciwnym wypadku funkcja zwraca nil. Wartość zwracana przez funkcję findfile jest następnie podstawiana pod zmienną plik. Jeśli plik PROG_025.LSP został znaleziony, funkcja load powoduje jego załadowanie. Jeśli plik PROG_025.LSP nie został znaleziony, standardowa funkcja AutoLISPu alert powoduje wypisanie w oknie dialogowym podanego łańcucha tekstu. Funkcja exit wymusza zakończenie bieżącego programu użytkowego. Wywołujemy ją po wyświetleniu komunikatu ostrzegawczego w oknie dialogowym. Gdyby funkcja ta nie została tutaj zastosowana, w trakcie realizacji dalszej części programu otrzymalibyśmy komunikat o błędzie gdyż wystąpiłaby próba wywołania niezdefiniowanej funkcji FOR. Zapis (initget ( )) jest równoważny zapisowi (initget 5). Nie dopuszcza on do podania pustego ENTER, liczby zerowej lub liczby ujemnej podczas najbliższego wywołania funkcji entsel, nentsel lub getxxx (za wyjątkiem getstring, getenv i getvar). To tutaj wywołujemy naszą pętlę FOR. Oprócz podania wartości początkowej, końcowej oraz kroku pętli, pierwszym argumentem funkcji jest nazwa zmiennej sterującej pracą pętli. Nazwa zmiennej sterującej pracą pętli musi być poprzedzona apostrofem (tzn. musi być kwotowana). Jeśli o tym zapomnisz, program może dać nieoczekiwane rezultaty. Instrukcja progn grupuje nam instrukcje, które należy wykonać wpętli. Instrukcja grupująca progn musi być także kwotowana. Wypisujemy na ekranie tekstowym liczby spełniające podane wymagania. Qs{zlbe!3 Analizując wygląd ekranu w przykładzie pierwszym, z pewnością zauważyłeś dodatkowe odstępy pomiędzy wartością początkową,końcową oraz krokiem pętli, np: Podaj wartosc poczatkowa petli: 1 wolna_linia Podaj wartosc koncowa petli: 10 Dzieje się tak dlatego, że funkcje typu getxxx muszą być zakończone naciśnięciem klawisza ENTER, i to właśnie powoduje powstanie dodatkowej pustej linii.
37 9/!Qumf!j!lpotusvldkf!tufsvk df 266 W poniższym przykładzie, usuniemy te linie. Dodatkowo, spowodujemy, by wybrane liczby zostały zapisane w jednym rzędzie (a nie w jednej kolumnie, jak w przykładzie pierwszym). A oto i nasz program po modernizacji: *************************************************PROG_027 Wykorzystanie petli FOR - przyklad odszukanie i zaladowanie pliku PROG_025.LSP plik (findfile "prog_025.lsp")) (if plik plik zostal znaleziony (load plik) )progn else - nia znaleziono pliku (alert "Nie znaleziono pliku PROG_025.LSP!!!" "\nwykonywanie programu przerwane." )strcat )alert (exit) )progn )if jesli plik prog_025 zostal znaleziony wykorzystanie petli for (textpage) przejscie na ekran tekstowy (princ "\nprzyklad wykorzystania petli for.") (initget ( )) x1 (getint "\npodaj wartosc poczatkowa petli: ")) (initget ( )) x2 (getint "Podaj wartosc koncowa petli: ")) (initget ( )) x3 (getint "Podaj krok petli: ")) (princ "\nwypisywanie od " (rtos x1 2 0) " do " (rtos x2 2 0) " z krokiem = " (rtos x3 2 0) ".\n" )strcat )princ
38 267 BvupMJTQ!!qsbluzd{oz!lvst Qs{zlbe!4 (for 'i x1 x2 x3 ' (princ i) (princ " ") )progn )for i *************************************************KONIEC Wykonanie powyższego programu możebyć następujące: Command: (load "prog_027.lsp") Przyklad wykorzystania petli for. Podaj wartosc poczatkowa petli: 1 Podaj wartosc koncowa petli: 10 Podaj krok petli: 2 Wypisywanie od 1 do 10 z krokiem = Command: Omówmy teraz wyróżnione linie programu, obrazujące zmiany w stosunku do programu PROG_026: Przy wypisywaniu na ekran tekstu "Podaj wartosc koncowa petli:", został pominięty znak nowej linii, umieszczony na początku łańcucha. Tym samym została usunięta pierwsza wolna linia. Przy wypisywaniu na ekran tekstu "Podaj krok petli:", został pominięty znak nowej linii, umieszczony na początku łańcucha. Tym samym została usunięta druga wolna linia. Zamiast funkcji terpri, powodującej przejście do nowej linii po wypisaniu liczby, używamy instrukcji princ, aby oddzielić od siebie poszczególne liczby, wypisywane w jednym rzędzie. Przykład ten pokazuje, jak za pomocą pętli FOR można tworzyć listę lub wyświetlać jej zawartość. *************************************************PROG_028 Wykorzystanie petli FOR - przyklad odszukanie i zaladowanie pliku PROG_025.LSP plik (findfile "prog_025.lsp"))
39 9/!Qumf!j!lpotusvldkf!tufsvk df 268 (if plik plik zostal znaleziony (load plik) )progn else - nia znaleziono pliku (alert "Nie znaleziono pliku PROG_025.LSP!!!" "\nwykonywanie programu przerwane." )strcat )alert (exit) )progn )if jesli plik prog_025 zostal znaleziony wykorzystanie petli for (textpage) przejscie na ekran tekstowy (princ "\nprzyklad wykorzystania petli for.") (initget ( )) x1 (getint "\npodaj liczbe zmiennych do umieszczenia na liscie: " )getint )setq lista_1 (list)) pobranie zmiennych i umieszczenie ich na liscie lista_1 (terpri) (for 'i 1 x1 1 ' pobranie typu zmiennej (initget "I R S") typ (getkword "\Podaj typ zmiennej numer " (rtos i 2 0) " [I - integer, R - real, S - string]: " )strcat )getkword )setq typ (strcase typ)) pobranie wartosci zmiennej (princ "Podaj wartosc zmiennej numer " (rtos i 2 0) ": "
40 269 BvupMJTQ!!qsbluzd{oz!lvst )strcat )princ (cond ((= typ "I") zmienna (getint))) ((= typ "R") zmienna (getreal))) ((= typ "S") zmienna (getstring T))) )cond umieszczenie zmiennej na liscie lista_1 lista_1 (append lista_1 (list zmienna)) )setq )progn )for i wyswietlenie utworzonej listy (textpage) przejscie na ekran tekstowy (princ "Oto twoja lista wyswietlona funkcja PRINC:\n") (princ lista_1) (getstring T "\nnacisnij ENTER...") (princ "\na oto twoja lista wyswietlona funkcja PRIN1:\n") (prin1 lista_1) (getstring T "\nnacisnij ENTER...") wyswietlenie typu i wartosci poszczegolnych zmiennych (textpage) przejscie na ekran tekstowy (princ "Typy i wartosci zmiennych na liscie LISTA_1:") (terpri) przejscie do nowej linii (for 'i 1 x1 1 ' wyswietlenie numeru zmiennej (princ "\nzmienna numer " (rtos i 2 0) )strcat )princ wyswietlenie typu zmiennej typ (type (nth (- i 1) lista_1))) (cond ((= typ 'INT) typ "integer")) ((= typ 'REAL) typ "real")) ((= typ 'STR) typ "string")) )cond (princ "\ntyp zmiennej = " typ )strcat )princ
Pętle. Dodał Administrator niedziela, 14 marzec :27
Pętlami nazywamy konstrukcje języka, które pozwalają na wielokrotne wykonywanie powtarzających się instrukcji. Przykładowo, jeśli trzeba 10 razy wyświetlić na ekranie pewien napis, to można wykorzystać
Programowanie w języku Python. Grażyna Koba
Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i
1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie
Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których
Wstęp do informatyki- wykład 7
1 Wstęp do informatyki- wykład 7 Operatory przypisania, złożone operatory przypisania, Pętla while i do..while Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania.
Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem
Moduł 1 1. Wprowadzenie do języka Python Python jest dynamicznym językiem interpretowanym. Interpretowany tzn. że kod, który napiszemy możemy natychmiast wykonać bez potrzeby tłumaczenia kodu programistycznego
4. Funkcje. Przykłady
4. Funkcje Przykłady 4.1. Napisz funkcję kwadrat, która przyjmuje jeden argument: długość boku kwadratu i zwraca pole jego powierzchni. Używając tej funkcji napisz program, który obliczy pole powierzchni
Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.
Nazwa implementacji: Nauka języka Python wyrażenia warunkowe Autor: Piotr Fiorek Opis implementacji: Poznanie wyrażeń warunkowych if elif - else. Nasz kalkulator umie już liczyć, ale potrafi przeprowadzać
for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; }
Pętle Pętle (ang. loops), zwane też instrukcjami iteracyjnymi, stanowią podstawę prawie wszystkich algorytmów. Lwia część zadań wykonywanych przez programy komputerowe opiera się w całości lub częściowo
Podstawy Programowania C++
Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:
Liczby losowe i pętla while w języku Python
Liczby losowe i pętla while w języku Python Mateusz Miotk 17 stycznia 2017 Instytut Informatyki UG 1 Generowanie liczb losowych Na ogół programy są spójne i prowadzą do przewidywanych wyników. Czasem jednak
for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { blok instrukcji; }
Pętle Pętle (ang. loops), zwane też instrukcjami iteracyjnymi, stanowią podstawę prawie wszystkich algorytmów. Lwia część zadań wykonywanych przez programy komputerowe opiera się w całości lub częściowo
7. Pętle for. Przykłady
. Pętle for Przykłady.1. Bez użycia pętli while ani rekurencji, napisz program, który wypisze na ekran kolejne liczby naturalne od 0 do pewnego danego n. 5 int n; 6 cin >> n; 8 for (int i = 0; i
Pzetestuj działanie pętli while i do...while na poniższym przykładzie:
Pzetestuj działanie pętli while i do...while na poniższym przykładzie: Zadania pętla while i do...while: 1. Napisz program, który wczytuje od użytkownika liczbę całkowitą, dopóki podana liczba jest mniejsza
Podstawy Programowania Podstawowa składnia języka C++
Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include
Lekcja : Tablice + pętle
Lekcja : Tablice + pętle Wprowadzenie Oczywiście wiesz już jak dużo można osiągnąć za pomocą tablic oraz jak dużo można osiągnąć za pomocą pętli, jednak tak naprawdę prawdziwe możliwości daje połączenie
znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.
Część XVI C++ Funkcje Jeśli nasz program rozrósł się już do kilkudziesięciu linijek, warto pomyśleć o jego podziale na mniejsze części. Poznajmy więc funkcje. Szybko się przekonamy, że funkcja to bardzo
Cw.12 JAVAScript w dokumentach HTML
Cw.12 JAVAScript w dokumentach HTML Wstawienie skryptu do dokumentu HTML JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.skrypty Java- Script mogą być zagnieżdżane
JAVAScript w dokumentach HTML (2)
Informatyka ćw.6 JAVAScript w dokumentach HTML (2) Interakcyjne wprowadzanie danych Jednym ze sposobów jest stosowanie metody prompt dla wbudowanego obiektu window: zmienna= prompt("tekst zachęty, np.
Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest
Pętle Pętla to pewien fragment kodu, który jest wykonywany wielokrotnie. Wyobraź sobie taką sytuację. Piszesz program do szyfrowania danych. Dane są szyfrowane kolejno bajt po bajcie. Załóżmy, że plik
Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)
Podstawy programowania w języku Visual Basic dla Aplikacji (VBA) Instrukcje Język Basic został stworzony w 1964 roku przez J.G. Kemeny ego i T.F. Kurtza z Uniwersytetu w Darthmouth (USA). Nazwa Basic jest
a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10] 3-2 5 8 12-4 -26 12 45-76
. p. 1 Algorytmem nazywa się poddający się interpretacji skończony zbiór instrukcji wykonania zadania mającego określony stan końcowy dla każdego zestawu danych wejściowych W algorytmach mogą występować
x 2 = a RÓWNANIA KWADRATOWE 1. Wprowadzenie do równań kwadratowych 2. Proste równania kwadratowe Równanie kwadratowe typu:
RÓWNANIA KWADRATOWE 1. Wprowadzenie do równań kwadratowych Przed rozpoczęciem nauki o równaniach kwadratowych, warto dobrze opanować rozwiązywanie zwykłych równań liniowych. W równaniach liniowych niewiadoma
3. Instrukcje warunkowe
. Instrukcje warunkowe Przykłady.1. Napisz program, który pobierze od użytkownika liczbę i wypisze na ekran słowo ujemna lub nieujemna, w zależności od tego czy dana liczba jest ujemna czy nie. 1 #include
1 Podstawy c++ w pigułce.
1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,
Pętla for. Matematyka dla ciekawych świata -19- Scilab. for i=1:10... end. for k=4:-1:1... end. k=3 k=4. k=1. k=2
Pętle wielokrotne wykonywanie ciągu instrukcji. Bardzo często w programowaniu wykorzystuje się wielokrotne powtarzanie określonego ciągu czynności (instrukcji). Rozróżniamy sytuacje, gdy liczba powtórzeń
Programowanie w Turbo Pascal
Skróty: ALT + F9 Kompilacja CTRL + F9 Uruchomienie Struktura programu: Programowanie w Turbo Pascal Program nazwa; - nagłówek programu - blok deklaracji (tu znajduje się VAR lub CONST) - blok instrukcji
Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady
Pętle i tablice. Spotkanie 3 Dr inż. Dariusz JĘDRZEJCZYK Pętle: for, while, do while Tablice Przykłady 11/26/2016 AGH, Katedra Informatyki Stosowanej i Modelowania 2 Pętla w największym uproszczeniu służy
Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.
Nazwa implementacji: Nauka języka C wyrażenia warunkowe if- Autor: Piotr Fiorek Opis implementacji: Poznanie struktury oraz zastosowania wyrażeń warunkowych if- w języku C. W programie realizującym jakiś
Blockly Kodowanie pomoc.
1 Blockly Kodowanie pomoc. Słowniczek: Zmienna posiada nazwę wywoływaną w programie oraz miejsce na przechowywanie wartości. Instrukcja warunkowa pozwala na wykonanie instrukcji w zależności od warunku
do instrukcja while (wyrażenie);
Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie
WHILE (wyrażenie) instrukcja;
INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while
Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)
Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie
METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH
METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH ĆWICZENIE NR 9 WYRAŻENIA LOGICZNE, INSTRUKCJE WARUNKOWE I INSTRUKCJE ITERACYJNE W PROGRAMIE KOMPUTEROWYM MATLAB Dr inż. Sergiusz Sienkowski ĆWICZENIE NR
Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.
Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą
lekcja 8a Gry komputerowe MasterMind
lekcja 8a Gry komputerowe MasterMind Posiadamy już elementarną wiedzę w zakresie programowania. Pora więc zabrać się za rozwiązywanie problemów bardziej złożonych, które wymagają zastosowania typowych
2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117).
2. Zmienne i stałe Przykłady 2.1. Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117). 5 int a = 281; int b = 117; 7 8 cout
Pętle. for, while, do... while, foreach. Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.
Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Pętle for, while, do... while, foreach Jeszcze o operatorach... Skrócone operatory arytmetyczne przykład x +=
Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA
Python wprowadzenie Warszawa, 24 marca 2017 Python to język: nowoczesny łatwy w użyciu silny można pisać aplikacje Obiektowy klejący może być zintegrowany z innymi językami np. C, C++, Java działający
Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek
Nazwa implementacji: Nauka języka Python pętla for Autor: Piotr Fiorek Opis implementacji: Poznanie innego rodzaju pętli, jaką jest pętla for w języku Python. Składnia pętli for jest następująca: for
Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].
ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości
Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach?
Część XVIII C++ Funkcje Widoczność zmiennych Czy wartości każdej zmiennej można zmieniać w dowolnym miejscu kodu? Czy można zadeklarować dwie zmienne o takich samych nazwach? Umiemy już podzielić nasz
Programowanie - instrukcje sterujące
Instytut Informatyki Uniwersytetu Śląskiego Laborki środowisko NetBeans, tworzenie nowego projektu; okno projekty; główne okno programu; package - budowanie paczek z klas; public class JavaApplication
PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6
PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6 TEMAT: Programowanie w języku C/C++: instrukcje iteracyjne for, while, do while Ogólna postać instrukcji for for (wyr1; wyr2; wyr3) Instrukcja for twory pętlę działającą
Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.
Instrukcje warunkowe i skoku. Spotkanie 2 Dr inż. Dariusz JĘDRZEJCZYK Wyrażenia i operatory logiczne Instrukcje warunkowe: if else, switch Przykłady 11/3/2016 AGH, Katedra Informatyki Stosowanej i Modelowania
Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1
Podstawy programowania, Poniedziałek 30.05.2016, 8-10 Projekt, część 1 1. Zadanie Projekt polega na stworzeniu logicznej gry komputerowej działającej w trybie tekstowym o nazwie Minefield. 2. Cele Celem
OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)
OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;
Zapis algorytmów: schematy blokowe i pseudokod 1
Zapis algorytmów: schematy blokowe i pseudokod 1 Przed przystąpieniem do napisania kodu programu należy ten program najpierw zaprojektować. Projekt tworzącego go algorytmu może być zapisany w formie schematu
Przedrostkowa i przyrostkowa inkrementacja i dekrementacja
Część VIII C++ Przedrostkowa i przyrostkowa inkrementacja i dekrementacja W poprzednim ćwiczeniu operatory inkrementacji i dekrementacji występowały w wersji przyrostkowej. Istnieje inny sposób zapisu
Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane
Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane Stałe Oprócz zmiennych w programie mamy też stałe, które jak sama nazwa mówi, zachowują swoją wartość przez cały czas działania programu. Można
przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni,
Baltie Zadanie 1. Budowanie W trybie Budowanie wybuduj domek jak na rysunku. Przedmioty do wybudowania domku weź z banku 0. Zadanie 2. Czarowanie sterowanie i powtarzanie W trybie Czarowanie z pomocą czarodzieja
#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }
OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;
Wstęp do Programowania, laboratorium 02
Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite
#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }
OPERACJE WEJŚCIA / WYJŚCIA Funkcja: printf() biblioteka: wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout) int printf ( tekst_sterujący, argument_1, argument_2,... ) ;
Rekurencja (rekursja)
Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)
Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.
Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice. Język PHP Język interpretowalny, a nie kompilowany Powstał w celu programowania
WHILE (wyrażenie) instrukcja;
INSTRUKCJE ITERACYJNE WHILE, DO WHILE, FOR Instrukcje iteracyjne pozwalają powtarzać daną instrukcję programu określoną liczbę razy lub do momentu osiągnięcia określonego skutku. Pętla iteracyjna while
Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu
Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji
Każde wykonanie bloku instrukcji nazywamy pojedynczym przebiegiem lub iteracją pętli.
Część XIII C++ Czym jest pętla? Pętla jest blokiem instrukcji, które wykonywane są w kółko (czyli po wykonaniu ostatniej instrukcji z bloku komputer wykonuje ponownie pierwszą instrukcję, później drugą
Być może jesteś doświadczonym programistą, biegle programujesz w Javie,
Kompendium PHP 01 Być może jesteś doświadczonym programistą, biegle programujesz w Javie, C++, Pythonie lub jakimś innym języku programowania, których jak myślę, powstało już tyle, że chyba nie ma osoby,
Umieszczanie kodu. kod skryptu
PHP Definicja PHP jest językiem skryptowym służącym do rozszerzania możliwości stron internetowych. Jego składnia jest bardzo podobna do popularnych języków programowania C/C++, lecz jest bardzo uproszczona
Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java
Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java Cechy C++ Język ogólnego przeznaczenia Można programować obiektowo i strukturalnie Bardzo wysoka wydajność kodu wynikowego
Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje
Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje Opracował: Zbigniew Rudnicki Powtórka z poprzedniego wykładu 2 1 Dokument, regiony, klawisze: Dokument Mathcada realizuje
Instrukcje sterujące
Podstawy programowania w C++ Bibliografia: Instrukcje sterujące Nauka programowania dla początkujących; A. Struzińska-Walczak / K. Walczak CPA: PROGRAMMING ESSENTIALS IN C++ https://www.netacad.com Opracował:
Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki
Informatyka I Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli Dr inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2018 Operacje relacji (porównania) A
Algorytm. a programowanie -
Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik
Programowanie i techniki algorytmiczne
Temat 2. Programowanie i techniki algorytmiczne Realizacja podstawy programowej 1) wyjaśnia pojęcie algorytmu, podaje odpowiednie przykłady algorytmów rozwiązywania różnych 2) formułuje ścisły opis prostej
JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.
IŚ ćw.8 JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania. Skrypty JavaScript są zagnieżdżane w dokumentach HTML. Skrypt JavaScript
Wstęp do programowania
wykład 3 Agata Półrola Wydział Matematyki i Informatyki UŁ sem. zimowy 2017/2018 Instrukcja wielokrotnego wyboru Instrukcja wielokrotnego wyboru switch umożliwia podejmowanie decyzji na podstawie wartości
Przykłady zastosowań funkcji tekstowych w arkuszu kalkulacyjnym
S t r o n a 1 Bożena Ignatowska Przykłady zastosowań funkcji tekstowych w arkuszu kalkulacyjnym Wprowadzenie W artykule zostaną omówione zagadnienia związane z wykorzystaniem funkcji tekstowych w arkuszu
Pomorski Czarodziej 2016 Zadania. Kategoria C
Pomorski Czarodziej 2016 Zadania. Kategoria C Poniżej znajduje się 5 zadań. Za poprawne rozwiązanie każdego z nich możesz otrzymać 10 punktów. Jeżeli otrzymasz za zadanie maksymalną liczbę punktów, możesz
Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.
M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza
Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji
Podstawy programowania Laboratorium Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji Instrukcja warunkowa if Format instrukcji warunkowej Przykład 1. if (warunek) instrukcja albo zestaw
Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:
Instrukcje sterujące wer. 11 z drobnymi modyfikacjami! Wojciech Myszka 2017-07-05 10:53:09 +0200 Ala ma kota Część I Prosty przykład Problem 1. Zadanie polega na tym, żeby opracować algorytm który dla
1 Powtórzenie wiadomości
1 Powtórzenie wiadomości Zadanie 1 Napisać program, który w trybie dialogu z użytkownikiem przyjmie liczbę całkowitą, a następnie wyświetli informację czy jest to liczba parzysta czy nieparzysta oraz czy
Bloki anonimowe w PL/SQL
Język PL/SQL PL/SQL to specjalny język proceduralny stosowany w bazach danych Oracle. Język ten stanowi rozszerzenie SQL o szereg instrukcji, znanych w proceduralnych językach programowania. Umożliwia
ALGORYTMY. 1. Podstawowe definicje Schemat blokowy
ALGORYTMY 1. Podstawowe definicje Algorytm (definicja nieformalna) to sposób postępowania (przepis) umożliwiający rozwiązanie określonego zadania (klasy zadań), podany w postaci skończonego zestawu czynności
Administracja sieciowymi systemami operacyjnymi III Klasa - Linux
Administracja sieciowymi systemami operacyjnymi III Klasa - Linux SKRYPTY POWŁOKI mgr inż. Tomasz Borowiec SKRYPTY POWŁOKI - PODSTAWY W Linuksie skrypt jest plikiem tekstowym zawierającym polecenia systemowe
Układy VLSI Bramki 1.0
Spis treści: 1. Wstęp... 2 2. Opis edytora schematów... 2 2.1 Dodawanie bramek do schematu:... 3 2.2 Łączenie bramek... 3 2.3 Usuwanie bramek... 3 2.4 Usuwanie pojedynczych połączeń... 4 2.5 Dodawanie
PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.
PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy. 1. Instrukcję case t of... w przedstawionym fragmencie programu moŝna zastąpić: var t : integer; write( Podaj
I. Podstawy języka C powtórka
I. Podstawy języka C powtórka Zadanie 1. Utwórz zmienne a = 730 (typu int), b = 106 (typu long long), c = 123.45 (typu double) Wypisz następujące komunikaty: Dane sa liczby: a = 730, b = 106 i c = 123.45.
Kilka prostych programów
Ćwiczenie 1 Kilka prostych programów Ćwiczenie to poświęcone jest tworzeniu krótkich programów, pozwalających na zapoznanie się z takimi elementami programowania jak: definiowanie stałych, deklarowanie
Algorytmy i struktury danych
Algorytmy i struktury danych 4. Łódź 2018 Suma szeregu harmonicznego - Wpisz kod programu w oknie edycyjnym - Zapisz kod w pliku harmonic.py - Uruchom skrypt (In[1]: run harmonic.py) - Ten program wykorzystuje
Wykorzystanie języka AutoLISP.
Wykorzystanie języka AutoLISP. AutoLISP jest językiem programowania podobnie jak Basic, Pascal, C. Różni się tym, że jest zintegrowany z AutoCADem i nie można go używać oddzielnie, AutoLISP liczy w arytmetyce
Wskazówki dotyczące zmiennych, tablic i procedur 1
Wskazówki dotyczące zmiennych, tablic i procedur 1 Spis treści 1. Tworzenie zmiennych i tablic 1 2. Procedury i zmienne, przekazywanie zmiennych do procedur 5 3. Zakończenie działania procedury 9 1. Tworzenie
KURS C/C++ WYKŁAD 2. char znak; znak = a ; Program 2 #include<stdio.h> void main() { char znak; while( (znak = getchar() )!= t ) putchar(znak); }
KURS C/C++ WYKŁAD 2 Instrukcje iteracyjne Instrukcja while Składnia tej instrukcji jest następująca: while (wyrażenie) instrukcja W pętli while wykonanie instrukcji powtarza się tak długo, jak długo wartość
1 Wprowadzenie do algorytmiki
Teoretyczne podstawy informatyki - ćwiczenia: Prowadzący: dr inż. Dariusz W Brzeziński 1 Wprowadzenie do algorytmiki 1.1 Algorytm 1. Skończony, uporządkowany ciąg precyzyjnie i zrozumiale opisanych czynności
Informatyka I: Instrukcja 4.2
Informatyka I: Instrukcja 4.2 1 Wskaźniki i referencje - bezboleśnie Nauczyliśmy się do tej pory, że funkcje w języku C mogą zwracać wartość. Co jednak, gdybyśmy chcieli napisać funkcję, która rozwiąże
Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.
Schematy blokowe I Jeżeli po schematach blokowych będzie używany język C, to należy używać operatorów: '&&', ' ', '!=', '%' natomiast jeśli Ruby to 'and', 'or', '%', '!='. 1. Dostępne bloki: a) początek:
Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe
Podstawy programowania Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe 1 I. Składnia Składnia programu Program nazwa; Uses biblioteki; Var deklaracje zmiennych;
Warsztaty dla nauczycieli
WPROWADZENIE Wyprowadzanie danych: Wyprowadzanie na ekran komunikatów i wyników umożliwia instrukcja wyjścia funkcja print(). Argumentami funkcji (podanymi w nawiasach) mogą być teksty, wyrażenia arytmetyczne
JAVAScript w dokumentach HTML (1)
JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania. Skrypty JavaScript mogą być zagnieżdżane w dokumentach HTML. Instrukcje JavaScript
Programowanie strukturalne i obiektowe. Funkcje
Funkcje Często w programach spotykamy się z sytuacją, kiedy chcemy wykonać określoną czynność kilka razy np. dodać dwie liczby w trzech miejscach w programie. Oczywiście moglibyśmy to zrobić pisząc trzy
Część XV C++ Ćwiczenie 1
Część XV C++ Instrukcja break przerywa działanie tylko tej pętli, w ciele której została wywołana. Jeśli więc wywołamy break w pętli zagnieżdżonej w innej pętli, zostanie przerwane działanie tylko tej
AutoLISP w środowisku VLISP
Spis treści 1. Wprowadzenie... 11 1.1 Przyjęte konwencje leksykalne... 11 1.2 Pobranie plików z Internetu... 12 1.3 Wstęp... 13 1.4 Auto LISP jako język programowania... 15 1.4.1 Typ INT liczba całkowita...
Wykład z Technologii Informacyjnych. Piotr Mika
Wykład z Technologii Informacyjnych Piotr Mika Uniwersalna forma graficznego zapisu algorytmów Schemat blokowy zbiór bloków, powiązanych ze sobą liniami zorientowanymi. Jest to rodzaj grafu, którego węzły
Skrypty powłoki Skrypty Najcz ciej u ywane polecenia w skryptach:
Skrypty powłoki Skrypty są zwykłymi plikami tekstowymi, w których są zapisane polecenia zrozumiałe dla powłoki. Zadaniem powłoki jest przetłumaczenie ich na polecenia systemu. Aby przygotować skrypt, należy:
Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD
programowania Wykład: 4 Instrukcje sterujące, operatory 1 programowania w C++ Instrukcje sterujące 2 Pętla for for ( instrukcja_ini ; wyrazenie_warunkowe ; instrukcja_krok ) tresc_petli ; instrukcja_ini