27
POLITECHNIKA WARSZAWSKA Instytut Automatyki i Robotyki ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - zima 2015 ) prof. nzw. dr hab. inż. Barbara Putz pok. 306 Język programowania: C/C++ Środowisko programowania: Qt Creator 5.0.2 Wykład 1 : Podstawowe pojęcia, proste programy, instrukcje warunkowe

ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

  • Upload
    doduong

  • View
    225

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

POLITECHNIKA WARSZAWSKA

Instytut Automatyki i Robotyki

ZASADY PROGRAMOWANIA STRUKTURALNEGO

( ZAP - zima 2015 )

prof. nzw. dr hab. inż. Barbara Putz pok. 306

Język programowania: C/C++

Środowisko programowania: Qt Creator 5.0.2

Wykład 1 : Podstawowe pojęcia, proste programy,

instrukcje warunkowe

Page 2: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

ZASADY PROGRAMOWANIA STRUKTURALNEGO

TYGODNIOWY WYMIAR ZAJĘĆ

Rok ak. Semestr W L P ECTS

2015/2016 I 1E 2 - 5

2015/2016 II - - 1 3

Program, regulamin i harmonogram zajęć, literatura, prezentacje do

wykładu:

na witrynie przedmiotu ZAP w systemie komunikacji ze studentami (SKS) -

tam też będą zamieszczane oceny z zajęć laboratoryjnych i egzaminu:

https://iair.mchtr.pw.edu.pl/studenci

(wejście przez login i hasło, które każdy student otrzyma w mailu).

Tymczasowo – niniejsza prezentacja jest pod adresem:

https://iair.mchtr.pw.edu.pl/bputz/2015_ZAP

Informacje organizacyjne 2

Page 3: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Zespół prowadzący zajęcia

nr pokoju

• dr inż. Anna Sztyber 339

• dr inż. Marcin Stachura 341

• mgr inż. Łukasz Chechliński 30

• mgr inż. Bartłomiej Fajdek 341

• mgr inż. Jan Klimaszewski 307

• mgr inż. Maciej Przybylski 307

• mgr inż. Kornel Rostek 339

Bliższe dane (godziny konsultacji, e-mail) – na

stronie Instytutu Automatyki i Robotyki:

https://iair.mchtr.pw.edu.pl

3

Page 4: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Efekty kształcenia

1. WIEDZA: uporządkowana wiedza ogólna obejmująca:

• kluczowe zagadnienia z zakresu konstrukcji języka strukturalnego i

programowania strukturalnego w języku C/C++

• zagadnienia konstruowania algorytmów dla prostych zadań przetwarzania danych

• klasyfikację algorytmów i dobór struktur danych

2. UMIEJĘTNOŚCI:

• praktyczna umiejętność opracowania algorytmu i wynikającego stąd programu

strukturalnego w języku C/C++ (z wykorzystaniem struktur dynamicznych

włącznie) dla prostego zadania programistycznego

• praktyczną umiejętność napisania i uruchomienia w trakcie 45 min. zajęć

programu w środowisku C/C++ na podstawie otrzymanego zadania

• umiejętność posługiwania się kompilatorem i debuggerem

3. KOMPETENCJE SPOŁECZNE:

• nawyk ustawicznego kształcenia się i wyszukiwania nowych informacji, aby radzić

sobie z rozwiązywaniem nowych, nietypowych zadań.

4

Szczegółowy program wykładów, bibliografia – za tydzień

Page 5: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Weryfikacja efektów kształcenia

1. ZALICZENIE ĆWICZEŃ LABORATORYJNYCH:

• 2 sprawdziany złożone z części teoretycznej (2 zadania do opracowania w rękopisie) i

praktycznej (1 zadanie do uruchomienia w postaci programu na komputerze) – każda

część do napisania na jednej godzinie zajęć, oceniana w skali 0-6 pkt, max. 2 pkt

dodatkowe za aktywność na zajęciach.

• sprawdzian nr 1: 23-26 listopada, sprawdzian nr 2: 19-25 stycznia

• sprawdzian poprawkowy: 26stycznia – 1 lutego (tylko dla 1 części teor. i 1 prakt.)

• warunek zaliczenia ćwiczeń i dopuszczenia do egzaminu: min. 6 pkt z każdego

sprawdzianu (na 12 możliwych).

2. EGZAMIN:

• część zadaniowa (18 pkt ) - opracowanie w rękopisie kilku zadań wymagających napisania

funkcji lub całych programów, czas trwania: 60 minut

• część testowa (8 pkt) – 8 pytań jednokrotnego wyboru z zakresu algorytmów i struktur

danych, czas trwania: 5 minut

• warunek zdania egzaminu: uzyskanie min. 13 pkt łącznie z obu części egzaminu.

• możliwość zwolnienia z pisemnej części egzaminu: min. 11 pkt z każdego sprawdzianu,

min. 23 pkt łącznie.

SZCZEGÓŁY: REGULAMIN ZAJĘĆ – w SKS, tymczasem:

https://iair.mchtr.pw.edu.pl/bputz/2015_ZAP

5

Page 6: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

PROBLEM ALGORYTM PROGRAM

Algorytmizacja Kodowanie

Programowanie

Założony cel zajęć:

• Nabycie umiejętności algorytmizacji różnorodnych problemów

• Nabycie umiejętności kodowania algorytmów z wykorzystaniem języka

wysokiego poziomu

6

Page 7: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Kompilacja i wykonanie programu

• Błędy kompilacji – jeśli kompilator „nie rozumie” programu źródłowego.

• Błędy wykonania programu – jeśli program po kompilacji nie daje się wykonać.

• Błędy logiczne – jeśli program wykonuje się nieprawidłowo.

7

Page 8: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Prezentacja algorytmu w postaci sieci działań

Algorytmy przedstawiane są z różnym stopniem szczegółowości. Najczęściej

stosuje się: opis słowny lub sieci działań (schematy blokowe).

Symbole graficzne do budowy sieci działań

Przykład:

Warunek

prawdziwy ?

Początek Koniec

5 5

Realizacja operacji Opis realizowanej w algorytmie

czynności

Tak Nie

pisz a, b, c czytaj a, b, c

Oznaczenie początku, końca sieci działań

Łączniki dzielące sieć działań na fragmenty

Rozgałęzienie - przejście do części

algorytmu wynikającej ze spełnienia warunku

Odpowiednio: wczytanie lub wydrukowanie

wartości: a, b, c

8

Page 9: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Program w C/C++

STRUKTURA PROGRAMU

# include <iostream> dołączanie plików nagłówkowych bibliotek

.....

using namespace std; // udostępnienie nazw ze standardowych bibliotek

// po znakach // wpisujemy komentarze ignorowane przez kompilator

int main ( )

{

definicje, deklaracje funkcja main (główna) - musi być w programie

i instrukcje

return 0;

}

..... inne funkcje - niekoniecznie

SYMBOLE SPECJALNE:

• jednoznakowe: + - * / = < > ( ) [ ] { } . , ; : ' ^ ” % ~

• dwuznakowe (dwa znaki traktowane jako całość): != <= >= == ++ -- || && itd.

SŁOWA KLUCZOWE:

ciąg znaków o ściśle określonym znaczeniu; np. (tych będziemy używać):

bool break case char const continue do else extern false float for goto if int

namespace new not or return short sizeof struct switch true using void while

9

Page 10: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Przykłady programów

int main ( )

{

return 0;

}

# include <iostream> // dołączamy bibliotekę wejścia-wyjścia

using namespace std; // standardowy początek programu

int main ( )

{

double x, y; // definicje zmiennych rzeczywistych x i y

cin >> x >> y; // wczytywanie zmiennych x i y

if (x > y) // jeśli x>y

cout << x; // wydrukuj x

else // w przeciwnym razie

cout << y; // wydrukuj y

return 0;

}

1) Najprostszy program: 2) Wczytać dwie wartości i wydrukować większą z nich:

#include <iostream>

using namespace std;

int main ( ) {

int nrGrupy; string imie; // definicje zmiennych: całkowitej (int) i napisowej (string)

cout << "Podaj imie: \n"; // drukowanie tekstu zapraszającego do pisania i przejście do nowej linii (\n)

cin >> imie; // wczytywanie tekstu napisanego przez użytkownika

cout << "Podaj numer grupy: " ; // drukowanie tekstu zapraszającego do pisania

cin >> nrGrupy; // wczytywanie liczby napisanej przez użytkownika

cout << "Witaj " << imie << " w grupie " << nrGrupy << "!" << endl; // drukowanie powitania

return 0; // i przejście do nowej linii (endl)

}

3) Wczytać imię i numer grupy, a następnie wydrukować powitanie:

int main ( ) {

return 0;

}

To samo w innej konwencji

zapisu nawiasów klamrowych:

10

Page 11: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Środowisko programowania

Na zajęciach laboratoryjnych obowiązuje:

środowisko programowania Qt Creator z biblioteki Qt w wersji

5.0.2 (z roku 2013) – biblioteka wieloplatformowa, bezpłatna, typu

open source, z kompilatorem MinGW4.7, qt-windows-opensource-

5.0.2-mingw47_32-x86-offline.exe , do pobrania ze strony:

http://download.qt.io/archive/qt/5.0/5.0.2/ Zmiana wersji językowej: Narzędzia>Opcje>Środowisko>Język

Można też używać wersji najnowszej 5.5.0, do pobrania stąd:

http://www.qt.io/download-open-source/

Tworzymy tylko aplikacje konsolowe:

Sesje i projekty > Utwórz projekt > Projekt nieużywający Qt > Zwykły projekt C++

Tymczasowo – wprowadzenie do obsługi Qt Creator jest pod adresem:

https://iair.mchtr.pw.edu.pl/bputz/2015ZAP

11

Page 12: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Szkielety aplikacji konsolowych w Qt Creator

Szkielet nowego programu – po wykonaniu

Utwórz projekt > Projekt nieużywający Qt > Zwykły projekt C++

Tu dołączamy ew. inne biblioteki

A zamiast niej wpisujemy tutaj własne definicje i instrukcje

Okno wynikowe - po wykonaniu Uruchom : Ctrl-R albo

Wynik działania programu

(Naci – w polskiej wersji językowej „skrót” od:

Naciśnij Enter, aby zamknąć to okno)

Tę całą linię możemy usunąć

12

Page 13: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Zmienne, ich typy i nazwy

• Zmienną nazywa się daną mogącą przyjmować różne wartości.

• Każda zmienna występująca w programie ma swoją nazwę i musi mieć określony typ

Wszystkie zmienne występujące w programie muszą być zdefiniowane przed ich pierwszym użyciem.

Najprostsze typy zmiennych:

• całkowite (int) 10 -243 +78

• rzeczywiste (double) 1.5 3.14 -2450.138

• znakowe (char) 'a' 'A' '?'

• napisowe (string) "Wcisnij jakis klawisz" "Napisz swoje imie"

Nazwa zmiennej

Dowolny ciąg liter i cyfr zaczynający się od litery (tylko litery alfabetu łacińskiego). Znak podkreślenia jest traktowany jak litera. Małe i duże litery są rozróżniane. Nazwy zmiennych muszą się różnić od słów kluczowych.

• Nazwy poprawne: a A4 a4 _A4 liczbaPunktow przyklad_1 NowyTyp

• Nazwy błędne: 5gr przykład_1 przyklad-1 a+b a[4]

13

Page 14: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Definiowanie zmiennych

Definicja zmiennej Informuje o typie zmiennej i przydziela na nią pamięć. Najpierw podaje się typ, a potem wymienia nazwy wszystkich zmiennych tego typu.

Definicja zmiennych typ zmienna1, zmienna2, ....;

Zmienne mogą być definiowane w dowolnym miejscu, jak tylko zajdzie potrzeba ich wykorzystania.

Definicja zmiennej może być nawet wpleciona w instrukcje, np. połączona z instrukcją przypisania wartości początkowej (to jest zalecane - przykłady dalej).

Przykład definicji zmiennych prostych :

int i,j,k;

double x1,x2,y1,y2 ;

char znak_wczytany, znakWczytany;

string nazwa_pliku, nazwaPliku, fileName;

14

zalecany styl

nazwy zmiennych zaczynać z małej litery

styl1 styl2 Przykładowy zalecany styl programowania:

http://geosoft.no/development/cppstyle.html

Page 15: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Wyrażenia arytmetyczne

Wyrażenia - zapis tworzony z wykorzystaniem stałych, zmiennych, funkcji i

łączących je operatorów i nawiasów okrągłych.

OPERATORY ARYTMETYCZNE

+ - * / %

dodawanie odejmowanie mnożenie dzielenie reszta z dzielenia (modulo) lub plus lub minus jednoargumentowy jednoargumentowy

Resztę z dzielenia można wyznaczyć tylko dla argumentów całkowitych:

5%2 czyli 1 (reszta z dzielenia 5 przez 2=1) 6%3 czyli 0

15

PRIORYTET OPERATORÓW - wewnątrz jednej pary nawiasów okrągłych

1. jednoargumentowy + oraz - (symbol liczby dodatniej oraz ujemnej)

2. * / %

3. + - (dodawanie i odejmowanie)

Przykłady:

-b / 2*a oznacza -b / (2*a)

-b / 2 / a oznaczają

Wyrażenie z dwoma jednoargumentowymi minusami -5+3*-8 daje wynik -29,

bo kolejność obliczeń odpowiada wyrażeniu (-5) + (3* (-8))

a

b

2

ab

2

UWAGA: W sytuacjach wątpliwych

najpewniejszym sposobem jest

używanie nawiasów okrągłych.

Page 16: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Konwersja typów

Dzielenie można wykonać dla różnych typów argumentów. W razie

potrzeby kompilator dokonuje niejawnej konwersji typów, np.

zamienia liczbę rzeczywistą na całkowitą, obcinając ją.

UWAGA: dzielenie dwóch liczb całkowitych daje wynik całkowity (!!)

powstały przez obcięcie części ułamkowej wyniku dzielenia:

8/3 = 2 8.0 /3 = 2.6667

-8/3 = -2 -8.0/3 = -2.6667

Operatory rzutowania postaci:

typ (nazwa zmiennej)

lub: (typ) nazwa zmiennej

służą do jawnej konwersji typów, np. double(x) zamienia dowolny typ

zmiennej x na typ double. To samo wykona się dla (double)x .

Dzięki temu np. możemy policzyć dokładnie iloraz x/y w przypadku,

gdy x i y są typu int, pisząc: double(x)/y albo (double)x/y

Można napisać też po prostu: x*1.0/y

Ale uwaga: nie wolno napisać tak: double(x/y), to niczego nie

zmienia!

16

Page 17: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Instrukcje

INSTRUKCJE - polecenia dla komputera - „zmuszają” go do

przetwarzania danych podczas procesu obliczeniowego.

UWAGA: w C++ każda instrukcja kończy się średnikiem.

• instrukcja pisania

• instrukcja czytania

• instrukcja przypisania

• instrukcja złożona

• instrukcja warunkowa

Na początek:

17

Page 18: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Instrukcja pisania (drukowania)

Instrukcja drukowania wyników

Służy do wyprowadzania wyników (wartości wyrażeń) na standardowe

urządzenia wyjściowe komputera (domyślnie – na konsolę, czyli monitor ).

Wymaga dołączenia pliku nagłówkowego biblioteki iostream (mamy to gotowe w szkielecie Qt):

#include <iostream> ....... cout << wyrażenie1 << wyrażenie2 ...;

Np.: cout <<34 <<x << y+5;

cout << endl;

cout << " Wynik = " << x+2*y <<endl;

Funkcja endl oznacza przejście do nowej linii i jest równoważna wstawieniu \n do napisu: cout << " napisz swoje imie " << endl; cout << " napisz swoje imie \n" ;

W rzeczywistości cout jest obiektem tzw. klas strumieni wejścia-wyjścia, zaś << operatorem, ale dla uproszczenia będziemy mówili o instrukcji drukowania.

18

Page 19: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Instrukcja czytania

Instrukcja czytania danych

Służy do wprowadzania danych (nadawania wartości zmiennym) ze

standardowego urządzenia wejściowego komputera (domyślnie – z konsoli, czyli

klawiatury ).

#include <iostream>

// .....

cin >> zmienna1 >>zmienna2 ...;

// UWAGA:

// Tu muszą być pojedyncze zmienne, a nie całe wyrażenia !

Np.:

cin >> x; cin >> y; równoważne

cin >> x >> y;

cin >> znak;

19

Page 20: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Instrukcja przypisania

INSTRUKCJA PRZYPISANIA ( podstawienia )

Służy do nadawania zmiennej nowej wartości:

ZMIENNA = WYRAŻENIE ; // ta zmienna powinna być wcześniej zdefiniowana

lub:

typ ZMIENNA = WYRAŻENIE ; // a tu definiujemy zmienną i nadajemy wartość początkową

Typ zmiennej i wyrażenia nie muszą się zgadzać. Np. w przypadku

podstawienia wartości rzeczywistej pod zmienną całkowitą następuje obcięcie

części ułamkowej - jest to niejawna konwersja typów (niezalecane!)

int k = -10.6; // k będzie równe -10

int k = int (-10.6); // k będzie równe -10

Przykłady instrukcji przypisania:

k = 3;

x = k - 4.5;

k = k+1; // zwiększ wartość k o 1

double y = 2.5*(x+3)/2;

z = ‘a’;

imie = "Witold ";

20

zalecany styl

jawna konwersja typów

Page 21: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Instrukcja złożona

INSTRUKCJA ZŁOŻONA (inaczej: blokowa, grupująca)

Tworzy z ciągu instrukcji jedną. Można używać jej wszędzie tam,

gdzie wolno zastosować tylko jedną instrukcję.

{ ciąg instrukcji

}

• ciąg instrukcji - instrukcje zakończone średnikami, wykonywane

w kolejności zapisania.

Przykład instrukcji złożonej:

{

suma=suma+x;

ile=ile+1;

}

UWAGA: Instrukcja złożona kończy się klamrą, dodatkowy średnik za klamrą nie jest konieczny (ale nie jest błędem).

21

Page 22: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Instrukcje warunkowe - wprowadzenie

Instrukcja if Instrukcja if-else

if (a<0)

cout <<“ujemna” ;

if (a<0)

cout <<“ujemna” ;

else

cout <<“nieujemna” ;

if (serce)

na_niebiesko ;

if (serce)

na_niebiesko ;

else

na_czerwono ;

22

Page 23: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Instrukcja warunkowa if

Instrukcja warunkowa uzależnia wykonanie instrukcji w programie od

spełnienia lub niespełnienia warunku. Najprostsze warunki zawierają

wyrażenia arytmetyczne, operatory relacji i nawiasy okrągłe.

Uwaga: tu musi być jedna (!) instrukcja; w

szczególności może to być instrukcja złożona:

if (warunek)

instrukcja

Przykład:

if (a>0) {

s = s+a;

k = k+1;

}

23

Przykład:

if (liczba>0)

suma = suma+liczba;

if (warunek) {

ciąg instrukcji

} zalecany styl

zalecany styl

OPERATORY RELACJI

> >= (większy równy) < <= == (równy) != (nierówny)

Page 24: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Instrukcja warunkowa if-else

Uwaga: Każda z powyższych instrukcji musi być

jedną (!) instrukcją; w szczególności może to

być instrukcja złożona:

if (warunek)

instrukcja1

else

instrukcja2

24

zalecany styl

if (warunek) {

ciag_instrukcji_1

}

else {

ciag_instrukcji_2

} zalecany styl

Przykład:

if (liczba>0)

s_dod = s_dod+liczba;

else

s_niedod = s_niedod+liczba;

Przykład:

if (a>0) {

sd = sd+a;

kd = kd+1;

}

else {

snd = snd+a;

knd = knd+1;

}

Page 25: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Instrukcje warunkowe zagnieżdżone (1)

if (...)...

else if (...)...

if (serce)

na_niebiesko ;

else

if (trojkat)

na_czerwono ;

if (a<0)

cout <<“ujemna” ;

else

if (a>0)

cout <<“dodatnia” ;

25

Page 26: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Instrukcje warunkowe zagnieżdżone (2)

if (a<0)

cout <<“ujemna” ;

else

if (a>0)

cout <<“dodatnia” ;

else

cout <<“zero”;

if (a<0)

cout <<“ujemna” ;

if (a>0)

cout <<“dodatnia” ;

else

cout <<“zero”;

Błąd logiczny !!!

26

Page 27: ZASADY PROGRAMOWANIA STRUKTURALNEGO ( ZAP - …iair.mchtr.pw.edu.pl/bputz/2015_ZAP/2015_w1_ZAP_podstawy_ify.pdf · Język programowania: C/C++ ... strukturalnego w języku C/C++ (z

Instrukcje warunkowe zagnieżdżone (3)

Przykłady konstrukcji instrukcji warunkowych zagnieżdżonych:

if (w1) if (w1)

i1 if (w2)

else i1

if (w2) else

i2 i2;

else

i3;

UWAGA: Również w sytuacjach wątpliwych najpewniejszym

sposobem jest tworzenie instrukcji złożonych za pomocą klamer.

Obowiązuje zasada:

W sytuacjach wymagających zmiany tej zasady konieczne jest ujęcie

instrukcji if w klamry {.....} :

if (w1)

{ if (w2)

i1 }

else

i2;

else przyporządkowane jest najbliższemu wstecz if

27