Pętle. Dodał Administrator niedziela, 14 marzec :27

Podobne dokumenty
1 Podstawy c++ w pigułce.

Konstrukcje warunkowe Pętle

Jak zawsze wyjdziemy od terminologii. While oznacza dopóki, podczas gdy. Pętla while jest

Pętla for. Wynik działania programu:

Każde wykonanie bloku instrukcji nazywamy pojedynczym przebiegiem lub iteracją pętli.

Cw.12 JAVAScript w dokumentach HTML

1 Podstawy c++ w pigułce.

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Wstęp do informatyki- wykład 7

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Pętle. for, while, do... while, foreach. Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.

for (inicjacja_warunkow_poczatkowych; wyrazenie_warunkowe; wyrazenie_zwiekszajace) { blok instrukcji; }

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Informatyka I. Wykład 3. Sterowanie wykonaniem programu. Instrukcje warunkowe Instrukcje pętli. Dr inż. Andrzej Czerepicki

Podstawy Programowania Podstawowa składnia języka C++

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Podstawy Programowania C++

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?

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Komentarze w PHP (niewykonywane fragmenty tekstowe, będące informacją dla programisty)

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Nazwa implementacji: Nauka języka Python pętla for. Autor: Piotr Fiorek

for (inicjacja_warunkow_poczatkowych(końcowych); wyrazenie_warunkowe; wyrazenie_zwiekszajace(zmniejszające)) { blok instrukcji; }

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

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

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

Iteracje. Algorytm z iteracją to taki, w którym trzeba wielokrotnie powtarzać instrukcję, aby warunek został spełniony.

Lekcja : Tablice + pętle

JAVAScript w dokumentach HTML (2)

WHILE (wyrażenie) instrukcja;

Część XV C++ Ćwiczenie 1

Struktura pliku projektu Console Application

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Programowanie w języku Python. Grażyna Koba

Instrukcje cykliczne (pętle) WHILE...END WHILE

Wstęp do programowania

po wykonaniu instrukcji wartość zmiennej x zostanie zwiększona o 50,a

Warunki i pętle. Instrukcja warunkowa if. Przykład zastosowania.

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Programowanie w języku C++ Grażyna Koba

JAVAScript w dokumentach HTML - przypomnienie

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Informacja o języku. Osadzanie skryptów. Instrukcje, komentarze, zmienne, typy, stałe. Operatory. Struktury kontrolne. Tablice.

W przeciwnym wypadku wykonaj instrukcję z bloku drugiego. Ćwiczenie 1 utworzyć program dzielący przez siebie dwie liczby

Wykresy i interfejsy użytkownika

Podstawy programowania skrót z wykładów:

Pzetestuj działanie pętli while i do...while na poniższym przykładzie:

Warunki logiczne instrukcja if

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

WHILE (wyrażenie) instrukcja;

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Instrukcje sterujące

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Laboratorium 2: Pętle i instrukcje warunkowe. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Język C część 2. Podejmowanie decyzji w programie. if else. switch

Wstęp do programowania

Podstawy bioinformatyki 2017/18

SSK - Techniki Internetowe

lekcja 8a Gry komputerowe MasterMind

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Pętle instrukcje powtórzeo

Odczyt danych z klawiatury Operatory w Javie

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Wprowadzenie do Scilab: podstawy języka Scilab

Lekcja 3: Pierwsze kroki z Pythonem. Pętle

Robert Barański, AGH, KMIW For Loops While Loops v1.0

Pętle iteracyjne i decyzyjne

7. Pętle for. Przykłady

C#. Æwiczenia IDZ DO KATALOG KSI EK TWÓJ KOSZYK CENNIK I INFORMACJE CZYTELNIA PRZYK ADOWY ROZDZIA SPIS TRE CI KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG

JAVAScript w dokumentach HTML (1)

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Pętle. Programowanie komputerowe

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawowe elementy programowania strukturalnego. Wbudowane typy danych w C++

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Programowanie proceduralne w języku C++ Pętle, tablice

do instrukcja while (wyrażenie);

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); }

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Programowanie komputerowe. Zajęcia 3

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

Algorytm poprawny jednoznaczny szczegółowy uniwersalny skończoność efektywność (sprawność) zmiennych liniowy warunkowy iteracyjny

Zapis algorytmów: schematy blokowe i pseudokod 1

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Podstawy Informatyki. Kompilacja. Historia. Metalurgia, I rok. Kompilatory C++ Pierwszy program. Dyrektywy preprocesora. Darmowe:

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

Wstęp do Programowania Lista 1

Podstawy Informatyki. Metalurgia, I rok. Wykład 6 Krótki kurs C++

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Wstęp do programowania

Matlab, zajęcia 3. Jeszcze jeden przykład metoda eliminacji Gaussa dla macierzy 3 na 3

Programowanie w Turbo Pascal

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Lekcja 1. Składnia języka zmienne i podstawowe instrukcje PHP. Do wyświetlania tekstu służy instrukcja echo echo Hello world ;

Baltie 3. Podręcznik do nauki programowania dla klas IV - VI szkoły podstawowej. Tadeusz Sołtys, Bohumír Soukup

Transkrypt:

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ć w tym celu 10 instrukcji document.write("napis"), jednak zdecydowanie lepiej i prościej użyć jednej z pętli. występujące w języku JavaScript możemy podzielić na dwa główne rodzaje: - pętle typu for (w tym for i for...in) - pętle typu while (w tym while i do...while) Pętla for Pętla typu for ma ogólną postać: for(wyrażenie początkowe; wyrażenie warunkowe; wyrażenie modyfikujące){ instrukcje do wykonania wyrażenie początkowe jest stosowane do zainicjalizowania zmiennej używanej jako licznik liczby wykonań pętli. wyrażenie warunkowe określa warunek, jaki musi być spełniony, aby dokonać kolejnego przejścia w pętli, natomiast wyrażenie modyfikujące jest zwykle używane do modyfikacji zmiennej będącej licznikiem. Sposób działania takiej pętli najłatwiej pokazać na konkretnym przykładzie. Został on przedstawiony na listingu 2.13. Listing 2.13. Ilustracja działania pętli for for(i = 0; i < 10; i++){ document.write(i + " "); Taką konstrukcję należy rozumieć następująco: utwórz zmienną i i przypisz jej wartość zero (i = 0), następnie, dopóki wartość i jest mniejsza od 10 (i < 10), wykonuj instrukcje znajdujące się wewnątrz pętli (instrukcja document.write) oraz zwiększaj i o jeden (i++). Tym samym na ekranie (rysunek 2.4) pojawi się ciąg liczb od 0 do 9 odzwierciedlających kolejne stany zmiennej i, którą nazywamy zmienną iteracyjną, czyli kontrolującą kolejne przebiegi (iteracje) pętli. 1 / 8

Rysunek 2.4. Efekt działania pętli Pętla for...in Pętla for...in pozwala na przejrzenie wszystkich właściwości obiektu bądź indeksów tablicy. Te tematy zostaną omówione w dalszej części kursu, wtedy też zostaną podane przykłady jej wykorzystania. Ogólna struktura tej pętli jest następująca: for(właściwość in obiekt){ //instrukcje do wykonania W każdym jej przebiegu pod właściwość będzie podstawiana kolejna właściwość obiektu wskazywanego przez obiekt. Pętla while Pętla typu while służy, podobnie jak for, do wykonywania powtarzających się czynności. Pętlę for najczęściej wykorzystuje się, kiedy liczba powtarzanych operacji jest znana, natomiast pętlę while, kiedy liczby powtórzeń nie znamy, a zakończenie pętli jest uzależnione od spełnienia pewnego warunku. Taki podział jest jednak dosyć umowny, gdyż oba typy pętli można zapisać w taki sposób, aby były swoimi funkcjonalnymi odpowiednikami. Ogólna postać pętli while wygląda następująco: while (warunek){ instrukcje; i oznacza: dopóki warunek jest prawdziwy, wykonuj instrukcje. Wykorzystajmy więc pętlę while do wyświetlenia powtarzającego się napisu (listing 2.14). Listing 2.14. Ilustracja działania pętli typu while while(i < 10){ document.write("pętla while [i = " + i + "]"); i++; W tym przypadku instrukcje znajdujące się wewnątrz pętli wykonywane są dopóty, dopóki wartość zmiennej i jest 2 / 8

mniejsza od 10, warunkiem zakończenia pętli jest bowiem i < 10. Ponieważ początkową wartością i jest 0, a wewnątrz pętli znajduje się instrukcja zwiększająca w każdym jej przebiegu wartość i o 1 (i++), mamy pewność, że pętla się zakończy. Na warunek zakończenia trzeba zwracać szczególną uwagę w przypadku pętli while, gdyż łatwo napisać pętlę wykonującą się w nieskończoność. Zmodyfikujmy teraz powyższy przykład w taki sposób, aby modyfikacja zmiennej i odbywała się w wyrażeniu warunkowym, a nie we wnętrzu pętli (listing 2.15). Listing 2.15. Modyfikacja zmiennej interacyjnej w wyrażeniu warunkowym while(i++ < 10){ document.write("pętla while [i = " + i + "]"); Jak widać, nie było to bardzo skomplikowane zadanie. Zwróćmy jednak uwagę, że nie uzyskaliśmy w ten sposób w pełni funkcjonalnego odpowiednika poprzedniego skryptu. Co prawda napis zostanie wyświetlony tak jak w poprzednim przypadku 10 razy, ale wartość zmiennej wewnątrz pętli zmieniać się będzie od 1 do 10, a nie od 0 do 9! Byłaby to bardzo poważna zmiana, gdyby zmienna i była wykorzystywana do jakichś czynności, np. do indeksowania tablicy. Pętla do...while Kolejny rodzaj pętli występującej w JavaScripcie to do...while. Jak łatwo się domyślić, jest ona blisko spokrewniona ze zwykłą pętlą while. Jej ogólna postać jest następująca: do{ instrukcje; while(warunek); Co oznacza: wykonuj instrukcje, dopóki warunek jest prawdziwy. A zatem spróbujmy wyświetlić 10 napisów za pomocą tego rodzaju pętli. Jak to zrobić, zostało zilustrowane na listingu 2.16. Listing 2.16. Ilustracja działania pętli typu do while do{ document.write("pętla do...while [i = " + i + "]"); 3 / 8

while(i++ < 9); Główna różnica w stosunku do pętli while jest taka, że w tym przypadku najpierw są wykonywane instrukcje, a dopiero potem jest sprawdzany warunek. Wynika z tego, że instrukcje z wnętrza pętli while są wykonywane zawsze przynajmniej jeden raz, nawet jeśli warunek będzie fałszywy. Zwróćmy również uwagę, że w związku z odmienną konstrukcją pętli nieco inaczej wygląda wyrażenie warunkowe (i++ < 9). Tym razem jest sprawdzane, czy i jest mniejsze od 9. Gdyby pozostawić taki sam warunek, jak w przypadku pętli while (i++ < 10), instrukcje document.write zostałyby wykonane 11 razy. O tym, że pętla do while jest wykonywana co najmniej raz, nawet wtedy, gdy warunek jej kontynuacji jest ewidentnie fałszywy, można się przekonać, uruchamiając kod widoczny na listingu 2.17. Listing 2.17. Pętla do while z zawsze fałszywym warunkiem do{ document.write("wnętrze pętli for"); while(false); Wyrażenie warunkowe w tej postaci jest ewidentnie fałszywe to po prostu wartość logiczna false. Mimo to po wykonaniu powyższego kodu na ekranie pojawi się jeden napis Wnętrze pęli for. Jest to najlepszy dowód na to, że warunek jest sprawdzany nie przed, ale po każdym przebiegu pętli. Przerywanie pętli Działanie każdej z pętli może być przerwane w dowolnym momencie za pomocą instrukcji break (break z ang. znaczy przerywać), tej samej, która służyła do opuszczenia bloku switch. Jeśli zatem break pojawi się wewnątrz pętli, zakończy ona swoje działanie. Najczęściej instrukcja ta jest stosowana po sprawdzeniu jakiegoś warunku. Przykład zastosowania break został przedstawiony na listingu 2.18. Listing 2.18. Przykład użycia instrukcji break while(true){ document.write("napis [i = " + i + "] <br />"); if(i++ >= 9) break; 4 / 8

W kodzie została umieszczona specyficzna pętla while, powodująca wyświetlenie dziesięciu napisów (w każdym z nich jest podawany stan zmiennej i). Zwróćmy jednak uwagę na warunek pętli jest to true, a zatem warunek ten jest zawsze prawdziwy (analogicznie do przykładu z poprzedniego listingu, gdzie warunek był zawsze fałszywy). Oczywiście taka pętla wykonywałaby się w nieskończoność, gdyby nie znajdująca się wewnątrz instrukcja break. Z kolei warunkiem wykonania break jest i >= 9, czyli przerwanie pętli następuje wtedy, kiedy zmienna i osiągnie co najmniej wartość 9. Ponieważ i jest zwiększane o jeden w każdym przebiegu pętli (i++), a jego początkowa wartość to 0, mamy pewność, że pętla zostanie wykonana 10 razy, po czym zostanie przerwana (warunek mógłby mieć zatem również postać i++ == 9). Kontynuacja pętli O ile instrukcja break powodowała przerwanie wykonywania pętli oraz jej opuszczenie, instrukcja continue powoduje przejście do jej kolejnej iteracji. Jeśli zatem wewnątrz pętli znajdzie się instrukcja continue, bieżąca iteracja (przebieg) zostanie przerwana oraz rozpocznie się kolejna (chyba że bieżąca iteracja była ostatnią). Zobaczmy, jak to działa na konkretnym przykładzie, który został przedstawiony na listingu 2.19. Listing 2.19. Przykład użycia instrukcji continue for(var i = 1; i <= 20; i++){ if(i % 2!= 0) continue; document.write(i + " "); Jest to pętla for, która wyświetla liczby całkowite z zakresu 1 20 podzielne przez 2, tak jak jest to widoczne na rysunku 2.5. Rysunek 2.5. Wyświetlenie parzystych liczb z danego zakresu 5 / 8

Wewnątrz pętli znajduje się instrukcja warunkowa, sprawdzająca warunek i % 2!= 0, czyli badająca, czy reszta z dzielenia i przez 2 jest równa zero (znak % oznacza działanie polegające na obliczeniu reszty z dzielenie, czyli tzw. dzielenie modulo). Jeśli ten warunek jest fałszywy (reszta jest różna od zera), oznacza to, że wartość zapisana w i nie jest podzielna przez 2, jest zatem wykonywana instrukcja continue. Jak już wiemy, powoduje ona rozpoczęcie kolejnej iteracji pętli, czyli zwiększenie wartości zmiennej i o jeden i przejście na początek pętli (do pierwszej instrukcji). Tym samym, jeśli wartość i jest niepodzielna przez dwa, nie zostanie wykonana znajdująca się za warunkiem instrukcja document.write(i + " ");, dana wartość nie pojawi się więc na ekranie, a to właśnie było naszym celem. Rzecz jasna, zadanie to można wykonać bez użycia instrukcji continue, np. tak, jak pokazano na listingu 2.20, ale bardzo dobrze ilustruje ono istotę jej działania. Listing 2.20. Wyświetlanie liczb parzystych bez użycia instrukcji continue for(var i = 1; i <= 20; i++){ if(i % 2 == 0) document.write(i + " "); Zagnieżdżanie pętli Wewnątrz każdej pętli można umieścić dowolne instrukcje, również kolejną pętlę. Mogą być więc one zagnieżdżane. Najczęściej zagnieżdżane są pętle for, taka konstrukcja ma następującą postać: for(wyrażenie początkowe 1; wyrażenie warunkowe 1; wyrażenie modyfikujące 1){ for(wyrażenie początkowe 2; wyrażenie warunkowe 2; wyrażenie modyfikujące 2){ instrukcje do wykonania W takiej sytuacji w każdym przebiegu pętli zewnętrznej są wykonywane wszystkie przebiegi pętli wewnętrznej. Obrazuje to przykład widoczny na listingu 2.21. Listing 2.21. Zagnieżdżanie pętli typu for for( i < 3; i++){ for(var j = 0; j < 3; j++){ document.write(i+ " " + j); 6 / 8

document.write("----"); W pętli zewnętrznej zmienną iteracyjną jest i, natomiast w wewnętrznej j. W pętli wewnętrznej znajduje się instrukcja document.write(i+ " " + j);, która wyświetla aktualny stan tych zmiennych. W pierwszej iteracji zewnętrznej i jest stała, równa 0, a j zmienia się od 0 do 2. W drugiej iteracji zewnętrznej i jest stała, równa 1, a j zmienia się od 0 do 2, natomiast w trzeciej iteracji zewnętrznej i jest stała, równa 1, a j zmienia się od 0 do 2. Zatem wynikiem będą dwie kolumny liczb, z których pierwsza obrazuje kolejne stany zmiennej i, a druga j. W podobny sposób można zagnieżdżać pętle while, istnieje również możliwość mieszania typów zagnieżdżonych pętli, tzn. w pętli while może być zagnieżdżona pętla for i odwrotnie, w pętli for może być zagnieżdżona pętla while. Przykładowo: aby wyświetlić dwie kolumny liczb takie jak w poprzednim przykładzie przy użyciu dwóch zagnieżdżonych pętli while, można byłoby użyć kodu z listingu 2.22. Listing 2.22. Zagnieżdżanie pętli typu while var j = 0; while(i < 3){ while(j < 3){ document.write(i+ " " + j); j++; document.write("----"); j = 0; i++; Zmienne zostały zadeklarowane i zainicjowane na początku kodu, jeszcze przed pętlami. Instrukcje zwiększające wartości zmiennych są natomiast wykonywane wewnątrz pętli. Zmienna j jest zwiększana w pętli wewnętrznej, a 7 / 8

zmienna i w pętli zewnętrznej. Należy zwrócić uwagę, że przy takiej realizacji zmienna j musi być zerowana po każdym wykonaniu wszystkich iteracji pętli wewnętrznej. Jest to wykonywane przez instrukcję: j = 0; Pominięcie tej instrukcji spowodowałoby, że pętla wewnętrzna zostałaby wykonana tylko raz, bowiem po jej pierwszym wykonaniu j będzie miało wartość 3. To z kolei oznacza, że nie będzie spełniony warunek j < 3, którego spełnienie jest konieczne, aby mogły być wykonane instrukcje wnętrza pętli. Powyższe pętle while można też zapisać w taki sposób, aby modyfikacje zmiennych sterujących były połączone z instrukcjami warunkowymi określającymi, kiedy pętle mają być kontynuowane. Wtedy kod przyjąłby postać przedstawioną na listingu 2.23. Listing 2.23. Modyfikacja zmiennych iterujących w wyrażeniach warunkowych pętli var i = -1; var j = -1; while(i++ < 2){ while(j++ < 2){ document.write(i+ " " + j); document.write("----"); j = -1; Ogólna struktura kodu w stosunku do poprzedniego przykładu pozostała bez zmian, jednak w szczegółach ta realizacja różni się dosyć znacznie. Zmienne kontrolujące przebieg pętli są deklarowane na początku kodu, ale przypisywana jest im inna wartość. Jest to 1. Musi tak być, ponieważ tym razem zmienne iteracyjne są zwiększane już w wyrażeniach warunkowych i++ < 2 i j++ < 2. To oznacza, że zostaną zwiększone jeszcze przed wykonaniem instrukcji z wnętrza pętli. Tym samym, aby pierwszą wyświetlaną wartością i i j było 0, początkowo muszą być one równe 1. Z tego samego powodu zmieniły się postacie warunków. Tym razem pętle są kontynuowane, gdy i i j są mniejsze od 2 (w poprzednim przykładzie warunki miały postać i < 3 i j < 3). Musi tak być, ponieważ obie zmienne są najpierw zwiększane, a dopiero potem są sprawdzane warunki. W poprzednim przykładzie było odwrotnie najpierw były sprawdzane warunki kontynuowania pętli, a dopiero potem (we wnętrzu pętli) zmienne były zwiększane. 8 / 8