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

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

Podstawy Programowania C++

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

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

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

. Podstawy Programowania 1. Instrukcje sterujące. Arkadiusz Chrobot. 21 października 2015

1 Podstawy c++ w pigułce.

do instrukcja while (wyrażenie);

Podstawy Programowania 1 Instrukcje sterujące. Plan. Instrukcje sterujące. Blok instrukcji. Notatki. Notatki. Notatki. Notatki.

Konstrukcje warunkowe Pętle

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

Wstęp do programowania

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Instrukcje sterujące

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

6. Pętle while. Przykłady

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

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

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

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

Programowanie - wykład 4

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Pętla for. Wynik działania programu:

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

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

Instrukcje sterujące. Programowanie Proceduralne 1

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

1 Wielokrotne powtarzanie tych samych operacji

7. Pętle for. Przykłady

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

Cw.12 JAVAScript w dokumentach HTML

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

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

do instrukcja while(wyrażenie);

Wstęp do Programowania, laboratorium 02

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

Rekurencja (rekursja)

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

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

Podstawy programowania w języku C

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

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Laboratorium 1: Podstawy języka c. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

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

Programowanie komputerowe. Zajęcia 3

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?

Pętle instrukcje powtórzeo

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

4. Funkcje. Przykłady

3. Instrukcje warunkowe

Język C zajęcia nr 5

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

Struktura pliku projektu Console Application

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

3 Przygotował: mgr inż. Maciej Lasota

Programowanie strukturalne i obiektowe

while (test) instrukcja; int i=0; while (i<10) i++; dopóki test prawdziwy wykonuj instrukcję Wykonano: 35% / \ fałsz test prawda instrukcja

Warunek wielokrotnego wyboru switch... case

Instrukcje sterujące mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2012

WHILE (wyrażenie) instrukcja;

Część 4 życie programu

Proste programy w C++ zadania

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Wykład z Technologii Informacyjnych. Piotr Mika

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

Wstęp do informatyki- wykład 7

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

Programowanie w języku Python. Grażyna Koba

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

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

BHP JĘZYK C - INSTRUKCJE ITERACYJNE

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

Lekcja 3: Pierwsze kroki z Pythonem. Pętle

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

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

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

1 Powtórzenie wiadomości

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

Podstawy programowania C. dr. Krystyna Łapin

Laboratorium 6: Ciągi znaków. mgr inż. Leszek Ciopiński dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Język C, tablice i funkcje (laboratorium, EE1-DI)

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Programowanie - instrukcje sterujące

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Pascal - wprowadzenie

Liczby losowe i pętla while w języku Python

JAVAScript w dokumentach HTML (2)

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

Programowanie w C/C++ Instrukcje - konstrukcje powtórka. LABORKA Piotr Ciskowski

Odczyt danych z klawiatury Operatory w Javie

Wprowadzenie do programowania w języku C

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

Politechnika Białostocka

Część XV C++ Ćwiczenie 1

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

dr inż. Jarosław Forenc

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

Transkrypt:

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

1. Wprowadzenie Pierwsza część instrukcji zawiera informacje o instrukcjach warunkowych i instrukcjach wielokrotnego wyboru. Druga część poświęcona jest pętlom i powiązanych z nimi instrukcjami w języku c, a trzecia zawiera informacje na temat debuggera gdb. 2. Instrukcje warunkowe Do instrukcji warunkowych zaliczamy instrukcję warunkową if, operator trójargumentowy? oraz instrukcję wielokrotnego wyboru switch. Przykład instrukcji warunkowej if jest podany w listingu 1. if(a==b) a=5; else b=5; Listing 1: Przykład instrukcji if Warunek w nawiasach okrągłych nie musi być warunkiem prostym. Można go zbudować przy użyciu dowolnych operatorów, choć najczęściej używa się operatorów logicznych i relacyjnych. Uwaga: język c dopuszcza użycie w warunku instrukcji przypisania =, która podobna jest w zapisie do operatora porównania ==. Te operatory działają w odmienny sposób i dosyć często użycie przypisania zamiast porównania jest pomyłką programisty. Czasem jednak jest to efekt zamierzony, bo taki zapis może okazać się z pewnych względów wygodny. Kompilator gcc ostrzega przed takimi pomyłkami, jeśli użyta jest flaga -Wall podczas kompilacji. Słowo kluczowe else i następującą po nim część instrukcji można pominąć. Warto zauważyć, że w języku c instrukcja znajdująca się przed tym słowem kluczowym musi kończyć się średnikiem. Po warunku lub słowie else zamiast pojedynczej instrukcji może występować cały blok instrukcji zaczynający się i kończący nawiasami klamrowymi. Niektóre osoby zalecają stosowanie nawiasów klamrowych nawet dla pojedynczych instrukcji, co w pewnych sytuacjach może ustrzec programistę przed trudnymi do wykrycia błędami. Zamiast instrukcji warunkowej można użyć operatora trójargumentowego. Jeśli warunek stojący przed znakiem zapytania jest prawdziwy, to operator zwraca wartość wyrażenia stojącego za pytajnikiem, w przeciwny przypadku, wartość wyrażenia stojącego za dwukropkiem. Listing 2 zawiera instrukcję if i operator? użyte do tej samej operacji - wybrania większej z wartości. int a=5, b=4, max; if(a>b) else max=a; max=b; max=(a>b)?a:b; Listing 2: Instrukcja if i operator trójargumentowy Listing 3 zawiera przykład zapisu instrukcji wielokrotnego wyboru. 1

int a; switch(a) { case 1: puts("jeden"); case 2: puts("dwa"); case 3: puts("trzy"); default: puts("inna wartość"); Listing 3: Instrukcja wielokrotnego wyboru Słowo kluczowe default (będące odpowiednikiem słowa else w instrukcji if) i związany z nim wariant nie muszą występować. Proszę zauważyć, że każdy wariant (ang. case) kończy się instrukcją break. Jeśli jej nie umieścimy, to program będzie realizował instrukcje z następnych wariantów, aż do napotkania brake lub zakończenia instrukcji wyboru. Taki zapis nie musi być koniecznie błędem, może być celowym działaniem. Instrukcję break można zastąpić instrukcją return, jeśli chcemy zakończyć działanie funkcji lub programu, albo równoważną jej inną instrukcją. 3. Instrukcje iteracyjne W języku c dostępne są trzy podstawowe rodzaje pętli 1. Są to pętle for, while i do while. 3.1. Pętle for Schematycznie pętla for może być przedstawiona następująco: for(inicjacja;warunek;krok) instrukcja;,gdzie inicjacja oznacza nadanie wartości początkowej zmiennej licznikowej, warunek oznacza warunek, który musi być spełniony, aby pętla mogła się wykonywać, a krok oznacza instrukcję zmieniającą wartość licznika. Język c pozwala użyć w pętli for zmiennej typu float lub double w charakterze licznika. Można też użyć więcej niż jednego licznika pętli. Listing 4 zawiera przykłady użycia pętli for. 1 Za czwarty rodzaj można uznać pętle skonstruowane z użyciem instrukcji goto, ale nie będą one opisywane w tej instrukcji. 2

int a; for(a=0;a<5;a++); /* Ta pętla powtarza się 5 razy. Wbrew pozorom nie jest to pętla pusta - po jej wykonaniu zmienna a ma wartość 4. */ for(a=1;a<=5;a++) for(a=0;a<7;a+=2) for(a=7;a>0;a--) // Ta pętla też wykonuje się 5 razy, ale wartość // końcowa licznika pętli jest równa 5. W pętli // wywoływana jest również funkcja printf, która // wypisuje na ekran wartość licznika pętli. // Nowością w tej pętli jest zwiększanie jej // licznika o 2 w każdej iteracji. Wartość // końcowa zmiennej a wynosi 8 (nie wyświetli // się na ekranie). // W tej pętli wartość licznika jest zmniejszana // o jeden przy każdym powtórzeniu. int i,j; for(i=7,j=0;i>j;j++,i--) // W tej pętli użyto dwóch liczników, jeden printf("%d %d\n",i,j); // (zmienna i) jest zmniejszany, a drugi (zmienna j) // jest zwiększany. double x; for(x=0.0;x<0.5;x+=0.01) printf("%.10lf\n",x); a=0; for(i=0; i<5; i++) { a+=i; // W tej pętli użyto jako licznika zmiennej // typu double. // Zazwyczaj w pętli wykonywany jest cały // blok instrukcji, a nie pojedyncza // instrukcja. Listing 4: Pętle for 3.2. Pętle while i do while Pętla while powtarza się tak długo, jak długo spełniony jest warunek w niej zawarty. Jeśli ten warunek nie jest nigdy spełniony, to pętla nigdy się nie wykona. Pętla do while wykona się zawsze przynajmniej raz, bowiem warunek jest sprawdzany po wykonaniu zawartych w niej instrukcji. Każda z tych pętli powinna zawierać wyrażenie, które po określonej liczbie iteracji powinno sprawić, że warunek wykonania pętli stanie się fałszywy. Listing 5 zawiera kilka przykładów takich pętli. 3

char a=0; while(a!='q') scanf("%c",&a); int x=0,y=0; while(y>=0) { scanf("%d",&y); x+=y; while(getchar()!='q'); do scanf("%c",&a); while(a!='q'); x=y=0; do { x+=1; y*=y; while(x!=10); // Pętla wykonywana jest do momentu naciśnięcia // przez użytkownika klawisza q, a potem klawisza // Enter // Pętla działa do momentu wprowadzenia przez // użytkownika liczby ujemnej. Wewnątrz pętli // wykonywane są dwie instrukcje. // Ta pętla jest równoważna pierwszej w działaniu. // Funkcja getchar() zwraca kod ASCII znaku odczytanego // ze standardowego wejścia. Proszę zwrócić uwagę na // średnik kończący pętlę. // Ta pętla jest równoważna w działaniu pierwszej // i trzeciej pętli. Proszę zauważyć, że zmienna // a nie jest inicjowana przed pętlą, bo zanim // zostanie zbadany warunek, to jej wartość jest // zmieniana. // W tej pętli wykonywane są dwie instrukcje. Listing 5: Pętle while i do while Warunki w obu typach pętli podlegają tym samym regułom, co warunki w instrukcji warunkowej if. 3.3. Instrukcje break i continue Wewnątrz pętli, w instrukcji warunkowej if można użyć instrukcji break, która przerywa wykonanie pętli. Listing 6 zawiera odpowiedni przykład. int a; for(a=0;a<10;a++) { if(a==5) Listing 6: Instrukcja break Instrukcja break może być użyta także w pętlach while i do while. Warto zauważyć, że jeśli umieścimy tę instrukcję wewnątrz instrukcji switch, to będzie ona kończyła działanie poszczególnych przypadków, a nie pętli (patrz listing 7). 4

int i; for(i=0;i<3;i++) switch(a) { case 0: puts("zero"); case 1: puts("jeden"); case 2: puts("dwa"); Listing 7: Użycie instrukcji switch w pętli for W podobny sposób wewnątrz pętli może być użyta instrukcja continue. Jej działanie jest jednak inne - przerywa ona wykonanie bieżącej iteracji pętli i rozpoczyna wykonanie następnej. Przykład pokazano w listingu 8. int i; for(i=0;i<11;i++) { if(i%2) continue; printf("%d\n",i); // Pętla wypisze tylko liczby parzyste. Listing 8: Użycie instrukcji continue w pętli Instrukcji continue można użyć również wewnątrz pozostałych pętli. 3.4. Pętle nieskończone Listing 9 zawiera przykłady realizacji pętli nieskończonych w języku c. Takie konstrukcje też mogą być przydatne, ale w przeciwieństwie do tych zaprezentowanych niżej muszą posiadać jakieś instrukcje, które kończyłyby ich wykonanie, np. opisaną wcześniej instrukcję break. for(;;); // Pusta, nieskończona pętla for. while(1); // Pusta, nieskończona pętla while. do; while(1); // Pusta nieskończona pętla do...while. Listing 9: Przykłady pętli nieskończonych 4. Metody numeryczne wyznaczania wartości W niniejszym rozdziale zaprezentowane zostaną wybrane metody numeryczne służące do przybliżonego wyznaczania wartości pierwiastka funkcji lub obliczania wartości funkcji nieliniowej w dowolnym punkcie dziedziny. 4.1. Szereg McLaurina Szereg McLaurina jest szczególnym przypadkiem szeregu Taylora. W matematyce może on być użyty do wyznaczania wartości funkcji takich jak sin(x), cos(x), e x. 5

Dla funkcji sin(x) szereg ten ma postać : sin(x) = n=0 ( 1) n (2n + 1)! x2n+1 = x x3 3! + x5 5! (1),gdzie x jest miarą kąta wyrażoną w radianach. Z punktu widzenia programisty warto zauważyć, że każdy kolejny wyraz tego szeregu różni się od x poprzedniego o czynnik ( 1) 2 (2 i) (2 i+1), gdzie i = 1, 2,... jest numerem pozycji wyrazu w szeregu (jedynka przypada dla x3 3!. 4.2. Szereg Leibniza Jednym ze sposobów obliczenia wartości liczby π jest zastosowanie wzoru na szereg Leibniza: 2 ( 1) n 1 1 2n 1 = 1 1 3 + 1 5 1 7 + 1 9 = π 4 n=1 Ta metoda wyznaczania wartości liczby π jest dosyć wolna i na wynik jej obliczeń trzeba czasem poczekać kilkadziesiąt sekund, nawet w przypadku nowoczesnych komputerów. 4.3. Metoda Newtona Metoda Newtona jest metodą numerycznego wyznaczania pierwiastka funkcji. Może ona być użyta do wyznaczania wartości pierwiastka kwadratowego z dodatniej liczby rzeczywistej. Zakładając, że y, to liczba, której pierwiastka poszukujemy, a x to szacowana wartość tego pierwiastka, otrzymujemy wzór: x k+1 = x k (x k + y x k ) (3) 2,gdzie k jest numerem kolejnego przybliżenia wartości pierwiastka. Jako wartość początkową x można przyjąć x 0 = 1. Ponieważ pierwsza wartość uzyskana z metody może okazać się niezadowalająca, metodę tą należy używać w pętli. Należy jednak sprawdzać, czy dalsze jej używanie wpływa na poprawę wyników. 5. Zadania 1. Napisz program, który będzie odliczał słownie do startu rakiety, ale od liczby, którą poda użytkownik, np. użytkownik podaje 5, a program wypisuje w kolejnych wierszach: pięć, cztery, itd. 2. Napisz program, który przy użyciu dowolnej pętli, policzy sumę ciągu arytmetycznego. Wyraz początkowy, końcowy oraz różnicę wyrazów program powinien otrzymać od użytkownika. W kodzie programu nie wolno Ci zastosować wzoru na sumę ciągu arytmetycznego. 3. Powtórz zadanie pierwsze dla pozostałych pętli, które zostały opisane w instrukcji. 4. Napisz program, który przy użyciu dowolnej pętli, policzy sumę ciągu geometrycznego. Wyraz początkowy, końcowy oraz iloraz wyrazów program powinien otrzymać od użytkownika. W kodzie programu nie wolno Ci zastosować wzoru na sumę ciągu geometrycznego. Program powinien również sprawdzać poprawność wprowadzonych przez użytkownika danych. 5. Powtórz zadanie trzecie dla pozostałych pętli, które zostały opisane w instrukcji. 6. Postaraj się zapisać kod liczący sumę szeregu w zadaniu pierwszym jak najkrócej. 7. Przy pomocy pętli while i do while oraz instrukcji warunkowych napisz program obliczający wartość silni dla argumentu z zakresu [0, 10]. 2 Encyklopedia Szkolna. Matematyka, WSiP, Warszawa 1990 (2) 6

8. Korzystając ze wzoru Maclaurina, oblicz wartość funkcji sin(x) dla x = π/3. Program powinien prosić użytkownika o podanie liczby wyrazów szeregu użytych do obliczenia wartości funkcji. 9. Korzystając z Szeregu Leibniza, oblicz wartość liczby π. 10. Napisz program, który wczyta od użytkownika nieujemną liczbę rzeczywistą oraz liczbę powtórzeń, a następnie obliczy pierwiastek kwadratowy z tej liczby korzystając z metody Newtona. 7