P tle. Rozdziaª Wst p. 4.2 P tle P tla for(...);

Podobne dokumenty
1. Wprowadzenie do C/C++

1. Wprowadzenie do C/C++

Vincent Van GOGH: M»czyzna pij cy li»ank kawy. Radosªaw Klimek. J zyk programowania Java

Lekcja 12 - POMOCNICY

Wska¹niki, tablice dynamiczne wielowymiarowe

Zestaw 1 ZESTAWY A. a 1 a 2 + a 3 ± a n, gdzie skªadnik a n jest odejmowany, gdy n jest liczb parzyst oraz dodawany w przeciwnym.

Przetwarzanie sygnaªów

Bash i algorytmy. Elwira Wachowicz. 20 lutego

Lekcja 9 - LICZBY LOSOWE, ZMIENNE

ˆ tablice statyczne (o staªej ilo±ci elementów) ˆ tablice dynamiczne (o zmiennej ilo±ci elementów) 7.1 Tablice jednowymiarowe statyczne

Metodydowodzenia twierdzeń

JAO - J zyki, Automaty i Obliczenia - Wykªad 1. JAO - J zyki, Automaty i Obliczenia - Wykªad 1

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

1 Bª dy i arytmetyka zmiennopozycyjna

2 Skªadnia polece«w pliku

Programowanie wspóªbie»ne

Programowanie i struktury danych 1 / 44

Lekcja 8 - ANIMACJA. 1 Polecenia. 2 Typy animacji. 3 Pierwsza animacja - Mrugaj ca twarz

Programowanie wspóªbie»ne

1 Metody iteracyjne rozwi zywania równania f(x)=0

ANALIZA NUMERYCZNA. Grzegorz Szkibiel. Wiosna 2014/15

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Pętla for. Wynik działania programu:

A = n. 2. Ka»dy podzbiór zbioru sko«czonego jest zbiorem sko«czonym. Dowody tych twierdze«(elementarne, lecz nieco nu» ce) pominiemy.

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Listy Inne przykªady Rozwi zywanie problemów. Listy w Mathematice. Marcin Karcz. Wydziaª Matematyki, Fizyki i Informatyki.

Metody dowodzenia twierdze«

Podstawy JavaScript. Dawid Poªap. Dawid Poªap Technologia informacyjna Grudzie«, / 13

Lekcja 9 Liczby losowe, zmienne, staªe

Wykªad 7. Ekstrema lokalne funkcji dwóch zmiennych.

wiczenie 1 Podstawy j zyka Java. Instrukcje warunkowe

Relacj binarn okre±lon w zbiorze X nazywamy podzbiór ϱ X X.

Podziaª pracy. Cz ± II. 1 Tablica sortuj ca. Rozwi zanie

7.3 Tablice jednowymiarowe dynamiczne

Programowanie wspóªbie»ne

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

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

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

c Marcin Sydow Przepªywy Grafy i Zastosowania Podsumowanie 12: Przepªywy w sieciach

Algorytmy zwiazane z gramatykami bezkontekstowymi

Lab. 02: Algorytm Schrage

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

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

Programowanie wspóªbie»ne

for (i=0; i<10; i=i+1) instrukcja; instrukcja zostanie wykonana 10 razy for (inicjalizacja; test; aktualizacja) instrukcja;

Wstęp do informatyki- wykład 7

Zastosowania matematyki

Lekcja 5 Programowanie - Nowicjusz

Maszyny Turinga i problemy nierozstrzygalne. Maszyny Turinga i problemy nierozstrzygalne

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

Przekroje Dedekinda 1

O pewnym zadaniu olimpijskim

Język C, instrukcje sterujące (laboratorium)

WST P DO TEORII INFORMACJI I KODOWANIA. Grzegorz Szkibiel. Wiosna 2013/14

dr inż. Jarosław Forenc

x y x y x y x + y x y

7. Pętle for. Przykłady

Funkcja kwadratowa, wielomiany oraz funkcje wymierne

KLASYCZNE ZDANIA KATEGORYCZNE. ogólne - orzekaj co± o wszystkich desygnatach podmiotu szczegóªowe - orzekaj co± o niektórych desygnatach podmiotu

XVII Warmi«sko-Mazurskie Zawody Matematyczne

Liczby zmiennoprzecinkowe

Wst p do informatyki. Systemy liczbowe. Piotr Fulma«ski. 21 pa¹dziernika Wydziaª Matematyki i Informatyki, Uniwersytet Šódzki, Polska

Wybrane poj cia i twierdzenia z wykªadu z teorii liczb

2 Liczby rzeczywiste - cz. 2

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

Interpolacja funkcjami sklejanymi

do instrukcja while (wyrażenie);

Funkcje, wielomiany. Informacje pomocnicze

WST P DO TEORII INFORMACJI I KODOWANIA. Grzegorz Szkibiel. Wiosna 2013/14

4. Funkcje. Przykłady

Wska¹niki, tablice dynamiczne jednowymiarowe, staªe

Ciaªa i wielomiany. 1 Denicja ciaªa. Ciaªa i wielomiany 1

for (i=1; i<=10; i=i+1) instrukcja; instrukcja zostanie wykonana 10 razy for (inicjalizacja; test; aktualizacja) instrukcja;

Lekcja 6 Programowanie - Zaawansowane

WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH

X WARMI SKO-MAZURSKIE ZAWODY MATEMATYCZNE 18 maja 2012 (szkoªy ponadgimnazjalne)

6. Pętle while. Przykłady

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

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

Ekstremalnie fajne równania

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

Zadania z kolokwiów ze Wst pu do Informatyki. Semestr II.

Podstawy modelowania w j zyku UML

ARYTMETYKA MODULARNA. Grzegorz Szkibiel. Wiosna 2014/15

ELEMENTARNA TEORIA LICZB. 1. Podzielno±

Warunki logiczne instrukcja if

Kompilowanie programów

ALGORYTMY SORTOWANIA DANYCH

Ÿ1 Oznaczenia, poj cia wst pne

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

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Wielomiany o wspóªczynnikach rzeczywistych

Logika dla matematyków i informatyków Wykªad 1

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Wstęp do informatyki- wykład 6

Arkusz zawiera informacje prawnie chronione do momentu rozpocz cia egzaminu.

Materiaªy do Repetytorium z matematyki

Cyfrowe Ukªady Scalone

Przykªadowe tematy z JiMP

Transkrypt:

Rozdziaª 4 P tle 4.1 Wst p Niniejszy rozdziaª zawiera opis p tli w j zyku C, wraz z przykªadowymi programami oraz ich obja±nieniem. 4.2 P tle P tla to element j zyka programowania, pozwalaj cy na wielokrotne, kontrolowane wykonywanie wybranego fragmentu kodu. Liczba takich powtórze«(zwanych cyklami lub iteracjami p tli) jest przy tym ograniczona w zasadzie tylko inwencj i rozs dkiem programisty. P tla (ang. loop) jest instrukcj zªo»on, która pozwala cyklicznie wykonywa zadan instrukcj j zyka C. P tla warunkowa (ang. conditional loop) wykonuje powtarzanie w zale»no±ci od okre±lonego warunku (takiego samego jak dla instrukcji warunkowej if). P tla to specjalna instrukcja j zyka C, która powtarza pewien blok instrukcji, dopóki jest speªniony odpowiedni warunek. Implementuj c p tl, ustalamy, ile razy ta p tla ma wykona zawarty w niej blok instrukcji i jakie maj by warunki zako«czenia jej dziaªania. W j zyku C istniej konstrukcje powtarzaj ce kod - 3 typy p tli. 4.2.1 P tla for(...); P tla for okre±la jak warto± pocz tkow oraz ko«cow b dzie miaªa u»ywana przez ni zmienna, i co b dzie si dziaªo z ni w mi dzyczasie (czy b dzie si zwi ksza, czy zmniejsza ). Skªadnia p tli for : 1 f o r ( instrukcja1 ; warunek ; instrukcja2 ) 2 { 3 /* kod_ 1_ instrukcji ; */ 4 } co, maj c tylko jedn instrukcj, mo»na upro±ci do: 1 f o r ( instrukcja1 ; warunek ; instrukcja2 ) 2 /* kod_ 1_ instrukcji ; */ lub: 1 f o r ( instrukcja1 ; warunek ; instrukcja2 ) 2 { 3 /* kod_ 1_ instrukcji ; */ 59

4 /* kod_ 2_ instrukcji ; */ 5 /*... */ 6 /* kod_ntej_instrukcji ; */ 7 } gdzie: ˆ instrukcja1; - wykonywana jest tylko raz, przed rozpocz ciem pierwszej iteracji (przed uruchomieniem p tli), wykonywana przed pierwszym sprawdzeniem warunku ˆ warunek; - warunek sprawdzany jest przy ka»dym obrocie p tli, p tla wykonuje si dopóki warunek jest speªniony, warunek jest sprawdzany na pocz tku ka»dej iteracji ˆ instrukcja2 - wykonywana po zako«czeniu ka»dej iteracji, tj. po wykonaniu wszystkich instrukcji zawartych w bloku p tli for Przykªadowa p tla for: 1 i n t i ; 2 f o r ( i=0; i<3; i++) 3 { 4 printf ( " Witaj! \ n" ) ; 5 } Spróbujmy przeanalizowa jej dziaªanie krok po kroku. Przed wej±ciem do p tli zadeklarowali±my zmienn i. Zmiennej, ju» w p tli, w pierwszej instrukcji p tli (instrukcja1;) przypisali±my zmiennej warto± zero, wi c takie przypisanie, zgodnie z powy»sz denicj zostanie wykonane tylko 1 raz, przed wªa±ciwym wej±ciem do p tli. St d, w pierwszym kroku zmienna i b dzie miaªa warto± zero. Nast pnie, je±li zmienna i jest mniejsza od 3 (sprawdzamy warunek i<3;), wówczas wywoªujemy instrukcj p tli, tj. wypisanie tekstu na ekranie. Kolejno, zgodnie z budow i funkcj p tli for zwi kszamy warto± zmiennej i - skoro miaª warto± 0, teraz przyjmie warto± 1, i w kolejnym sprawdzeniu warunku b dzie mie nadal warto± 1. Aby lepiej zapami ta dziaªanie p tli for, opiszmy j krok po kroku: KROK 1 ˆ Zmienna i ma warto± 0, i=0; mniejsza, poniewa» jest równa zero, wi c i<3; jest prawd ˆ Wypisujemy na ekranie napis Witaj! za pomoc funkcji printf zapami tana w zmiennej i, poprzednia jej warto± (0) zostaje zapomniana i zast piona 1 KROK 2 ˆ Zmienna i ma warto± 1, i=1; mniejsza, poniewa» jest równa jeden, wi c i<3; jest prawd 60

ˆ Wypisujemy na ekranie napis Witaj! za pomoc funkcji printf zapami tana w zmiennej i, poprzednia jej warto± (1) zostaje zapomniana i zast piona 2 KROK 3 ˆ Zmienna i ma warto± 2, i=2; mniejsza, poniewa» jest równa dwa, wi c i<3; jest prawd ˆ Wypisujemy na ekranie napis Witaj! za pomoc funkcji printf zapami tana w zmiennej i, poprzednia jej warto± (2) zostaje zapomniana i zast piona 3 KROK 4 ˆ Zmienna i ma warto± 3, i=3; równa 3, wi c warunek i<3; nie jest prawd - p tla zostaje zako«czona, nie s wykonywane»adne dodatkowe instrukcje Ciekawostka: je±li z jakich± powodów chcemy, aby p tla for, a co za tym idzie instrukcje zawarte w jej bloku wykonywaªy si w niesko«czono± (jest to przykªad innite loop - p tli niesko«czonej), u»ywamy p tli for w nastepuj cej formie: 1 f o r ( ; ; ) 2 { 3 /* i n s t r u k c j e */ 4 } Nale»y zwróci szczególn uwag na nawiasy klamrowe nast puj ce po p tli for. Je±li ich nie podamy, zostanie powtórzona jedynie pierwsza instrukcja, która znajduje si bezpo±rednio pod p tl for. Za- ªó»my,»e w naszym programie chcemy wy±wietli 3 razy napis Hello world!, jednak»e po ka»dym takim napisie (w nowej linii) chcemy wy±wietli ilo± ju» wy±wietlonych napisów. Dla kodu: 1 #i n c l u d e <s t d i o. h> 2 3 i n t main ( ) 4 { 5 i n t i ; 6 7 f o r ( i=0; i<3; i++) 8 { 9 printf ( " Hello world! \ n" ) ; 10 printf ( " Napis wyswietlno j u z %d razy \n", i+1) ; 11 } 12 13 return 0 ; 14 } 61

na ekranie zobaczymy: Je±li jednak nie u»yjemy nawiasów w satych po p tli for, powtórzona trzykrotnie zostanie jedynie pierwsza instrukcja, która znajduje si bezpo±rednio pod p tl, czyli samo wy±wietlenie napisu. Wy±wietlenie licznika, który informuje nas o tym, ile ju» razy wy±wietlili±my napis, pokazane b dzie tylko 1 raz (instrukcja nie zostanie powtórzona, poniewa» nie znajduje si w bloku instrukcji, które p tla for ma powtórzy ). W zwi zku z tym poni»szy program: 1 #i n c l u d e <s t d i o. h> 2 3 i n t main ( ) 4 { 5 i n t i ; 6 7 f o r ( i=0; i<3; i++) 8 printf ( " Hello world! \ n" ) ; 9 printf ( " Napis wyswietlno j u z %d razy \n", i+1) ; 10 11 return 0 ; 12 } wy±wietli: Nale»y wi c zapami ta, i» aby za pomoc p tli powtórzy kilka instrukcji, nale»y je wszystkie zawrze w bloku instrukcji, za pomoc nawiasów klamrowych. Reguªa dotyczy równie» p tli while. 4.2.2 P tla while(...); P tla while jest to p tla, która wykonuje instrukcje zawarte mi dzy nawiasami klamrowymi dopóki warunek jest speªniony. Skªadnia p tli while : 1 while ( warunek ) 2 { 3 /* kod_ 1_ instrukcji ; */ 4 } 62

lub: 1 while ( warunek ) 2 { 3 /* kod_ 1_ instrukcji ; */ 4 /* kod_ 2_ instrukcji ; */ 5 /*... */ 6 /* kod_ntej_instrukcji ; */ 7 } gdzie: ˆ warunek; - warunek sprawdzany jest przy ka»dym obrocie p tli, p tla wykonuje si dopóki warunek jest speªniony, warunek jest sprawdzany na pocz tku ka»dej iteracji, dopóki warunek jest prawdziwy, powtarzane s wszystkie insrukcje, które znajduj si pomi dzy nawiasami klamrowymi p tli while Przykªadowa p tla while: 1 i n t i=0; 2 while ( i<3) 3 { 4 printf ( " Witaj! \ n" ) ; 5 i ++; 6 } Prze±led¹my krok po kroku jej dziaªanie: KROK 1 ˆ Zmienna i ma warto± 0, i=0; mniejsza, poniewa» jest równa zero, wi c i<3; jest prawd ˆ Wypisujemy na ekranie napis Witaj! za pomoc funkcji printf zapami tana w zmiennej i, poprzednia jej warto± (0) zostaje zapomniana i zast piona 1 KROK 2 ˆ Zmienna i ma warto± 1, i=1; mniejsza, poniewa» jest równa jeden, wi c i<3; jest prawd ˆ Wypisujemy na ekranie napis Witaj! za pomoc funkcji printf 63

zapami tana w zmiennej i, poprzednia jej warto± (1) zostaje zapomniana i zast piona 2 KROK 3 ˆ Zmienna i ma warto± 2, i=2; mniejsza, poniewa» jest równa dwa, wi c i<3; jest prawd ˆ Wypisujemy na ekranie napis Witaj! za pomoc funkcji printf zapami tana w zmiennej i, poprzednia jej warto± (2) zostaje zapomniana i zast piona 3 KROK 4 ˆ Zmienna i ma warto± 3, i=3; równa 3, wi c warunek i<3; nie jest prawd - p tla zostaje zako«czona, nie s wykonywane»adne dodatkowe instrukcje 4.2.3 Konwersja pomi dzy p tlami for i while Jak zamieni p tl for na p tl while? Wbrew pozorom nie jest to proces skomplikowany. Spójrzmy na schemat p tli for : Ró»nymi kolorami oznaczone zostaªy elementy, które musz znale¹ si w obu p tlach, aby mo»liwe byªo przetªumaczenie jednej p tli na drug. Odpowiednie instrukcje (nale»y zwróci uwag na kolory), bez wªa±ciwie jakichkolwiek zmian mo»na od razu przepisa do p tli while podczas jej konstruowania: W identyczny sposób dokonujemy konwersji z p tli while do p tli for. 64

4.2.4 P tla do{...}while(...); Kod, który ma by powtarzany umieszczamy wewn trz bloku instrukcji, który jest poprzedzony sªowem kluczowym do oraz zako«czony sªowem kluczowym while. Liczba powtórze«instrukcji umieszczonych w bloku p tli do... while jest zale»na od warunku ko«cz cego p tl. P tla do... while zako«czy si gdy warunek umieszczony w nawiasach zaokr glonych zwróci warto± false (b dzie nieprawdziwy). Istotn cech p tli do... while jest fakt,»e kod zawarty mi dzy sªowami kluczowymi do... while zawsze wykona si conajmniej jeden raz. Skªadnia p tli do... while : 1 do 2 { 3 /* kod_ 1_ instrukcji ; */ 4 } while ( warunek ) ; lub: 1 do 2 { 3 /* kod_ 1_ instrukcji ; */ 4 /* kod_ 2_ instrukcji ; */ 5 /*... ; */ 6 /* kod_n t e j _ i n s t r u k c j i ; */ 7 } while ( warunek ) ; Przykªad 4.2.1. Przeanalizujmy krok po kroku poni»szy przykªad. 1 #i n c l u d e <s t d i o. h> 2 3 i n t main ( ) 4 { 5 i n t ile = 4 ; 6 7 do 8 { 9 printf ( " Hello! \ n" ) ; 10 11 ile ; 12 13 } while ( ile > 0 ) ; 14 15 return 0 ; 16 } KROK 1 ˆ Zmienna ile ma warto± 4, ile=4; ˆ Wypisujemy na ekranie napis Hello! za pomoc funkcji printf ˆ Wykonujemy instrukcj ile--, czyli zmniejszamy warto± zmiennej ile o 1, warto± zmniejszona zostaje zapami tana w zmiennej ile, poprzednia jej warto± (4) zostaje zapomniana i zast piona 3 ˆ Sprawdzamy warunek, je±li zmienna ile jest wi ksza od 0, przechodzimy ponownie do pocz tku p tli (do sªowa do) 65

KROK 2 ˆ Zmienna ile ma warto± 3 ˆ Wypisujemy na ekranie napis Hello! za pomoc funkcji printf ˆ Wykonujemy instrukcj ile--, czyli zmniejszamy warto± zmiennej ile o 1, warto± zmniejszona zostaje zapami tana w zmiennej ile, poprzednia jej warto± (3) zostaje zapomniana i zast piona 2 ˆ Sprawdzamy warunek, je±li zmienna ile jest wi ksza od 0, przechodzimy ponownie do pocz tku p tli (do sªowa do) KROK 3 ˆ Zmienna ile ma warto± 2 ˆ Wypisujemy na ekranie napis Hello! za pomoc funkcji printf ˆ Wykonujemy instrukcj ile--, czyli zmniejszamy warto± zmiennej ile o 1, warto± zmniejszona zostaje zapami tana w zmiennej ile, poprzednia jej warto± (2) zostaje zapomniana i zast piona 1 ˆ Sprawdzamy warunek, je±li zmienna ile jest wi ksza od 0, przechodzimy ponownie do pocz tku p tli (do sªowa do) KROK 4 ˆ Zmienna ile ma warto± 1 ˆ Wypisujemy na ekranie napis Hello! za pomoc funkcji printf ˆ Wykonujemy instrukcj ile--, czyli zmniejszamy warto± zmiennej ile o 1, warto± zmniejszona zostaje zapami tana w zmiennej ile, poprzednia jej warto± (1) zostaje zapomniana i zast piona 0 ˆ Sprawdzamy warunek, je±li zmienna ile jest wi ksza od 0, przechodzimy ponownie do pocz tku p tli (do sªowa do). Tutaj zmienna ile jest równa 0, wi c nie jest wi ksza od 0 - tak wi c warunek p tli while nie jest prawdziwy - p tla ko«czy dziaªanie, jej instrukcje nie b d ju» ani razu powtórzone. 66

4.2.5 Ró»nice pomi dzy p tlami Nale»y zapami ta, i» p tle for oraz while dokonuj sprawdzenia warunku przed swoim wykonaniem, tj. przed wykonaniem instrukcji do powtórzenia. Z tego powodu, instrukcje zawarte w tego typu p tlach mog si nigdy nie wykona (je±li warunek b dzie nieprawdziwy, p tla si nie wykona ani razu). P tla do{...}while(...); jest inna - w niej kod zawarty mi dzy sªowami kluczowymi do... zawsze wykona si conajmniej jeden raz. while 4.2.6 P tla w p tli Nic nie stoi na przeszkodzie, aby w p tli u»y drugiej p tli - która równie» b dzie powtarzana. Zaªó»my,»e chcemy wy±wietli kilka wierszy, które wygl daj nast puj co: 0: 1 2 1: 1 2 2: 1 2 3: 1 2 Zauwa»my,»e wiersze 1 2 powtarzaj si 4 razy (powtórzenie - konieczno± u»ycia p tli), natomiast wy- ±wietlenie kolejnych liczb wiersza równie» mo»na zrealizowa za pomoc p tli. Program, który wy±wietli powy»sze wiersze wygl da wi c nast puj co: 1 #i n c l u d e <s t d i o. h> 2 3 i n t main ( ) 4 { 5 i n t i, j ; 6 7 f o r ( i=0; i<4; i++) 8 { 9 printf ( "%d : ", i ) ; 10 f o r ( j=1; j<3; j++) 11 { 12 printf ( "%d ", j ) ; 13 } 14 printf ( "\n" ) ; 15 } 16 17 return 0 ; 18 } 67

Spróbujmy krok po kroku przeanalizowa dziaªanie p tli w p tli. KROK 1 p tli for i ˆ Zmienna i ma warto± 0 ˆ Sprawdzamy warunek, je±li zmienna i jest mniejsza ni» 4, wykonujemy instrukcje p tli. Tutaj warto± zapisana w zmiennej i jest mniejsza od 4, poniewa» jest równa 0, wi c i<4 jest prawd ˆ Za pomoc funkcji printf wy±wietlamy: 0: ˆ Przechodzimy do wykonywania p tli for j poniewa» jest ona kolejn instrukcj p tli for i KROK 1 p tli for j Zmienna j ma warto± 1 warto± zapisana w zmiennej j jest mniejsza od 3, poniewa» jest równa 1, wi c j<3 jest prawd Za pomoc funkcji printf wyisujemy na ekranie warto± zmiennej j, czyli 1 Wykonujemy instrukcj textttj++, czyli zwi kszamy warto± zmiennej j o 1, warto± zwi kszona zostaje zapami tana w zmiennej j, poprzednia jej warto± (1) zostaje zapomniana i zast piona 2 KROK 2 p tli for j Zmienna j ma warto± 2 warto± zapisana w zmiennej j jest mniejsza od 3, poniewa» jest równa 2, wi c j<3 jest prawd Za pomoc funkcji printf wyisujemy na ekranie warto± zmiennej j, czyli 2 Wykonujemy instrukcj textttj++, czyli zwi kszamy warto± zmiennej j o 1, warto± zwi kszona zostaje zapami tana w zmiennej j, poprzednia jej warto± (2) zostaje zapomniana i zast piona 3 KROK 3 p tli for j Zmienna j ma warto± 3 warto± zapisana w zmiennej j jest równa 3, wi c j<3 nie jest prawd P tla for j zostaje zako«czona ˆ Za pomoc funkcji printf wy±wietlamy znak nowej linii (enter), czyli przechodzimy do nowego wiersza zapami tana w zmiennej i, poprzednia jej warto± (0) zostaje zapomniana i zast piona 1 KROK 2 p tli for i 68

ˆ Zmienna i ma warto± 1 ˆ Sprawdzamy warunek, je±li zmienna i jest mniejsza ni» 4, wykonujemy instrukcje p tli. Tutaj warto± zapisana w zmiennej i jest mniejsza od 4, poniewa» jest równa 1, wi c i<4 jest prawd ˆ Za pomoc funkcji printf wy±wietlamy: 1: ˆ Przechodzimy do wykonywania p tli for j poniewa» jest ona kolejn instrukcj p tli for i KROK 1 p tli for j Zmienna j ma warto± 1 warto± zapisana w zmiennej j jest mniejsza od 3, poniewa» jest równa 1, wi c j<3 jest prawd Za pomoc funkcji printf wyisujemy na ekranie warto± zmiennej j, czyli 1 Wykonujemy instrukcj textttj++, czyli zwi kszamy warto± zmiennej j o 1, warto± zwi kszona zostaje zapami tana w zmiennej j, poprzednia jej warto± (1) zostaje zapomniana i zast piona 2 KROK 2 p tli for j Zmienna j ma warto± 2 warto± zapisana w zmiennej j jest mniejsza od 3, poniewa» jest równa 2, wi c j<3 jest prawd Za pomoc funkcji printf wyisujemy na ekranie warto± zmiennej j, czyli 2 Wykonujemy instrukcj textttj++, czyli zwi kszamy warto± zmiennej j o 1, warto± zwi kszona zostaje zapami tana w zmiennej j, poprzednia jej warto± (2) zostaje zapomniana i zast piona 3 KROK 3 p tli for j Zmienna j ma warto± 3 warto± zapisana w zmiennej j jest równa 3, wi c j<3 nie jest prawd P tla for j zostaje zako«czona ˆ Za pomoc funkcji printf wy±wietlamy znak nowej linii (enter), czyli przechodzimy do nowego wiersza zapami tana w zmiennej i, poprzednia jej warto± (1) zostaje zapomniana i zast piona 2 KROK 3 p tli for i ˆ Zmienna i ma warto± 2 ˆ Sprawdzamy warunek, je±li zmienna i jest mniejsza ni» 4, wykonujemy instrukcje p tli. Tutaj warto± zapisana w zmiennej i jest mniejsza od 4, poniewa» jest równa 2, wi c i<4 jest prawd 69

ˆ Za pomoc funkcji printf wy±wietlamy: 2: ˆ Przechodzimy do wykonywania p tli for j poniewa» jest ona kolejn instrukcj p tli for i KROK 1 p tli for j Zmienna j ma warto± 1 warto± zapisana w zmiennej j jest mniejsza od 3, poniewa» jest równa 1, wi c j<3 jest prawd Za pomoc funkcji printf wyisujemy na ekranie warto± zmiennej j, czyli 1 Wykonujemy instrukcj textttj++, czyli zwi kszamy warto± zmiennej j o 1, warto± zwi kszona zostaje zapami tana w zmiennej j, poprzednia jej warto± (1) zostaje zapomniana i zast piona 2 KROK 2 p tli for j Zmienna j ma warto± 2 warto± zapisana w zmiennej j jest mniejsza od 3, poniewa» jest równa 2, wi c j<3 jest prawd Za pomoc funkcji printf wyisujemy na ekranie warto± zmiennej j, czyli 2 Wykonujemy instrukcj textttj++, czyli zwi kszamy warto± zmiennej j o 1, warto± zwi kszona zostaje zapami tana w zmiennej j, poprzednia jej warto± (2) zostaje zapomniana i zast piona 3 KROK 3 p tli for j Zmienna j ma warto± 3 warto± zapisana w zmiennej j jest równa 3, wi c j<3 nie jest prawd P tla for j zostaje zako«czona ˆ Za pomoc funkcji printf wy±wietlamy znak nowej linii (enter), czyli przechodzimy do nowego wiersza zapami tana w zmiennej i, poprzednia jej warto± (2) zostaje zapomniana i zast piona 3 KROK 4 p tli for i ˆ Zmienna i ma warto± 3 ˆ Sprawdzamy warunek, je±li zmienna i jest mniejsza ni» 4, wykonujemy instrukcje p tli. Tutaj warto± zapisana w zmiennej i jest mniejsza od 4, poniewa» jest równa 3, wi c i<4 jest prawd ˆ Za pomoc funkcji printf wy±wietlamy: 3: ˆ Przechodzimy do wykonywania p tli for j poniewa» jest ona kolejn instrukcj p tli for i 70

KROK 1 p tli for j Zmienna j ma warto± 1 warto± zapisana w zmiennej j jest mniejsza od 3, poniewa» jest równa 1, wi c j<3 jest prawd Za pomoc funkcji printf wyisujemy na ekranie warto± zmiennej j, czyli 1 Wykonujemy instrukcj textttj++, czyli zwi kszamy warto± zmiennej j o 1, warto± zwi kszona zostaje zapami tana w zmiennej j, poprzednia jej warto± (1) zostaje zapomniana i zast piona 2 KROK 2 p tli for j Zmienna j ma warto± 2 warto± zapisana w zmiennej j jest mniejsza od 3, poniewa» jest równa 2, wi c j<3 jest prawd Za pomoc funkcji printf wyisujemy na ekranie warto± zmiennej j, czyli 2 Wykonujemy instrukcj textttj++, czyli zwi kszamy warto± zmiennej j o 1, warto± zwi kszona zostaje zapami tana w zmiennej j, poprzednia jej warto± (2) zostaje zapomniana i zast piona 3 KROK 3 p tli for j Zmienna j ma warto± 3 warto± zapisana w zmiennej j jest równa 3, wi c j<3 nie jest prawd P tla for j zostaje zako«czona ˆ Za pomoc funkcji printf wy±wietlamy znak nowej linii (enter), czyli przechodzimy do nowego wiersza zapami tana w zmiennej i, poprzednia jej warto± (3) zostaje zapomniana i zast piona 4 KROK 5 p tli for i ˆ Zmienna i ma warto± 4 ˆ Sprawdzamy warunek, je±li zmienna i jest mniejsza ni» 4, wykonujemy instrukcje p tli. warto± zapisana w zmiennej i jest równa 4, wi c i<4 nie jest prawd Tutaj ˆ P tla for i zostaje zako«czona, nie s ju» wykonywane»adne jej instrukcje - nie jest równie» wykonywana p tla for j, jako,»e jest ona jedn z instrukcji p tli for i, która wªa±nie si zako«czyªa, z tego wzgl du nie zostanie równie» wykonana Analizuj c krok po kroku wykonywanie si p tli w p tli, zauwa»amy,»e p tla wewn trzna, tj. p tla for j wykonaªa si tyle razy, ile powtórze«wymagaªa p tla zewn trzna, tj. for i. 71

4.2.7 Instrukcja break; Instrukcja break pozwala na opuszczenie wykonywania p tli w dowolnym momencie. Instrukcja break umo»liwia wcze±niejsze zako«czenie p tli. Wywoªanie tej instrukcji powoduje natychmiastowe opuszczenie p tl i przej±cie do instrukcji znajduj cej si bezpo±rednio po p tli. Przykªad 4.2.2. Przeanalizujmy poni»szy przykªad wykorzystuj cy instrukcj break;. 1 #i n c l u d e <s t d i o. h> 2 3 i n t main ( ) 4 { 5 i n t i ; 6 7 f o r ( i=0; i<3; i++) 8 { 9 printf ( " Hello world! \ n" ) ; 10 break ; 11 } 12 13 return 0 ; 14 } P tla, jak ju» wiemy, sªu»y do powtarzania fragmentu kodu. Co jednak si stanie, je±li wewn trz p tli umie±cimy instrukcj break? Przenalizujmy dziaªanie programu krok po kroku: ˆ zmienna i przyjmuje warto± 0 ˆ sprawdzany jest warunek, tutaj i jest mniejsze od zera, wi c p tla sie wykonuje ˆ za pomoc funkcji printf wy±wietlony zostaje napis Hello world! ˆ nast puje przej±cie do kolejnej instrukcji p tli, któr jest instrukcja break - po jej napotkaniu program przerywa p tl (nawet je±li warunek jest jeszcze prawdziwy!) ˆ program wychodzi z p tli, przechodzi do kolejnych instrukcji, które s tu» za ni (w naszym przykªadzie - do instrukcji return). 4.2.8 Instrukcja continue; Instrukcja kontynuacji u»ywana jest wewn trz p tli i ma posta : continue;. Instrukcja ta powoduje bezwarunkowe przej±cie na pocz tek p tli (do nast pnej iteracji) z pomini ciem instrukcji znajduj cych si poni»ej continue;. Przykªad 4.2.3. Przeanalizujmy poni»szy przykªad wykorzystuj cy instrukcj continue;. 1 #i n c l u d e <s t d i o. h> 2 3 i n t main ( ) 4 { 5 i n t i ; 6 7 f o r ( i=0; i<3; i++) 8 { 9 printf ( " Hello \n" ) ; 10 continue ; 11 printf ( " world! \ n" ) ; 12 } 13 14 return 0 ; 15 } 72

P tla, jak ju» wiemy, sªu»y do powtarzania fragmentu kodu. Co jednak si stanie, je±li wewn trz p tli umie±cimy instrukcj continue;? Przenalizujmy dziaªanie programu krok po kroku: KROK 1 ˆ Zmienna i ma warto± 0, i=0; mniejsza, poniewa» jest równa zero, wi c i<3; jest prawd ˆ Wypisujemy na ekranie napis Hello za pomoc funkcji printf ˆ Nast puje przej±cie do kolejnej instrukcji p tli, któr jest instrukcja continue; - po jej napotkaniu program przechodzi do wykonywania dalszej cz ±ci p tli, pomijaj c wy±wietlenie napisu world - nie wykonuje ju»»adnej instrukcji, która znajduje si poni»ej continue; zapami tana w zmiennej i, poprzednia jej warto± (0) zostaje zapomniana i zast piona 1 KROK 2 ˆ Zmienna i ma warto± 1, i=1; mniejsza, poniewa» jest równa 1, wi c i<3; jest prawd ˆ Wypisujemy na ekranie napis Hello za pomoc funkcji printf ˆ Nast puje przej±cie do kolejnej instrukcji p tli, któr jest instrukcja continue; - po jej napotkaniu program przechodzi do wykonywania dalszej cz ±ci p tli, pomijaj c wy±wietlenie napisu world - nie wykonuje ju»»adnej instrukcji, która znajduje si poni»ej continue; zapami tana w zmiennej i, poprzednia jej warto± (1) zostaje zapomniana i zast piona 2 KROK 3 ˆ Zmienna i ma warto± 2, i=2; mniejsza, poniewa» jest równa 2, wi c i<3; jest prawd ˆ Wypisujemy na ekranie napis Hello za pomoc funkcji printf ˆ Nast puje przej±cie do kolejnej instrukcji p tli, któr jest instrukcja continue; - po jej napotkaniu program przechodzi do wykonywania dalszej cz ±ci p tli, pomijaj c wy±wietlenie napisu world - nie wykonuje ju»»adnej instrukcji, która znajduje si poni»ej continue; 73

zapami tana w zmiennej i, poprzednia jej warto± (2) zostaje zapomniana i zast piona 3 KROK 4 ˆ Zmienna i ma warto± 3, i=3; równa, poniewa» wynosi 3, wi c i<3; nie jest prawd ˆ P tla zostaje zako«czona 4.3 Operatory ++ oraz Je±li zwi kszamy lub zmniejszamy zmienn o 1, mo»emy u»y operatorów ++ i --: ˆ x++ operator postinkrementacji: warto±ci wyra»enia jest warto± zmiennej przed zwi kszeniem, ˆ ++x operator preinkrementacji: warto±ci wyra»enia jest warto± zmiennej po zwi kszeniu, ˆ x-- operator postdekrementacji: warto±ci wyra»enia jest warto± zmiennej przed zmniejszeniem, ˆ --x operator preinkrementacji: warto±ci wyra»enia jest warto± zmiennej po zmniejszeniu, 1 #i n c l u d e <s t d i o. h> 2 3 i n t main ( ) 4 { 5 i n t x = 100; 6 i n t y = 100; 7 8 printf ( "x++ = %d\n", x++); 9 printf ( "++x = %d\n", ++x ) ; 10 printf ( "y = %d\n", y ) ; 11 printf ( " y = %d\n", y ) ; 12 13 return 0 ; 14 } Wynik dziaªania programu: 74

4.4 Zadania do wykonania Zadanie 0.0 Napisz program, który wczyta liczb caªkowit (dodatni ) n, a nast pnie wypisze wszystkie liczby caªkowite od 1 do n wª cznie. Zadanie 0.1 Napisz program, który wczyta liczb caªkowit (dodatni ) n, a nast pnie wypisze wszystkie liczby caªkowite od n do 1 wª cznie. Zadanie 0.2 Zmodykuj program ze wcze±niejszego zadania tak, aby zamiast wypisywa liczby, sumowaª je i na ko«cu wypisaª ostateczny wynik. Zadanie 0.3 Napisz program, który wczyta liczb caªkowit (dodatni ) n, a nast pnie wypisze wszystkie liczby caªkowite od 1 do n podzielne przez 5. Zadanie 1 Napisz program, który wczytuje ze standardowego wej±cia nieujemn liczb caªkowit n i wypisuje na standardowym wyj±ciu liczb n!. Zadanie 2 Napisz program, który wczytuje ze standardowego wej±cia nieujemn liczb caªkowit n i wypisuje na standardowym wyj±ciu sum kwadratów liczb od 0 do n czyli warto± 0 2 + 1 2 + 2 2 +... + n 2. Zadanie 3 Napisz program, który wczytuje ze standardowego wej±cia dodatni liczb caªkowit n i wypisuje na standardowym wyj±ciu iloczyn liczb parzystych z zakresu od 2 do n (czyli 2 4...). Zadanie 4 Napisz program, który wczytuje ze standardowego wej±cia nieujemn liczb caªkowit n i wypisuje na standardowym wyj±ciu element ci gu Fibonacciego o indeksie n. Zadanie 5 Napisz program który wczytuje ze standardowego wej±cia dodatnie liczby caªkowite n i m, i wypisuje na standardowe wyj±cie najwi kszy wspólny dzielnik tych liczb. Zadanie 6 Napisz program szukaj cy najwi kszego dzielnika dodatniej caªkowitej liczby n takiego,»e a jest ró»ne od n. Zakªadamy,»e n > 1. Liczba n powinna zosta wczytana ze standardowego wej±cia a znaleziony dzielnik powinien zosta wypisany na standardowym wyj±ciu. Zadanie 7 Napisz program, który wczytuje ze standardowego wej±cia liczby a, b, c i d, i wypisuje na standardowe wyj±cie najmniejsz nieujemn liczb caªkowit x tak,»e a x 2 + b x + c > d. Zadanie 8 Napisz program, który wczytuje ze standardowego wej±cia liczby a, b i c, i wypisuje na standardowym wyj±ciu najwi ksz nieujemn liczb caªkowit x tak,»e 5 x 2 + a x + b < c. Zakªadamy,»e taka nieujemna caªkowita liczba x istnieje. Zadanie 9 Napisz program, który wczytuje ze standardowego wej±cia liczby a, b i c, i wypisuje na standardowe wyj±cie najwi ksz nieujemn liczb caªkowit x tak,»e 5 x 2 + a x + b c. Zakªadamy,»e taka nieujemna caªkowita liczba x istnieje. Zadanie 10 Napisz program, który wczytuje ze standardowego wej±cia liczb caªkowit n, a nast pnie oblicza sum jej cyfr i wypisuje j na standardowe wyj±cie. Zadanie 11 Napisz program, który wczytuje od u»ytkownika 2 zmienne: liczb wymiern p i nieujemn liczb caªkowit w i wy±wietla p w (przy pisaniu programu nie wolno korzysta z funkcji bibliotecznych). Zadanie 12 Napisz program, który pobierze od u»ytkownika dwie liczby caªkowite n i m (zakªadamy,»e n < m). Program ma wy±wietli wszytkie liczby z przedziaªu domkni tego [n; m], które s podzielne przez 3 lub podzielne przez 5. Zadanie 13 Napisz program, który dopóty b dzie wczytywaª ze standardowego wej±cia liczby naturalne, dopóki ich suma nie przekroczy liczby 100. Program na standardowym wyj±ciu powinien wy±wietli war- 75

to± o jak obliczona suma przekroczyªa liczb 100. Zadanie 14 Napisz program, który wczytuje od u»ytkownika liczb dodatni i wy±wietla liczb jej nieparzystych dzielników. Zadanie 15 Napisz program, który wczytuje od u»ytkownika liczb caªkowit x i wy±wietla liczb jej cyfr podzielnych przez 3. Zadanie 16 Napisz program, który pobierze od u»ytkownika liczb caªkowit n i wy±wietla warto± sum liczb nieparzystych z przedziaªu domkni tego < n, 2n >. Przykªad: We: 5 Wy: 21 (czyli suma 5+7+9). Zadanie 17 Napisz program, który pobierze od u»ytkownika trzy liczby caªkowite a, b, n i wyswietla na standardowym wyjsciu wszystkie liczby caªkowite z przedziaªu domkni tego < a, b >, które s podzielne przez n. Przykªad: a = 5, b = 25, n = 5, Wynik: 5, 10, 15, 20, 25. 76