Podstawy programowania w języku C++

Podobne dokumenty
Języki programowania obiektowego Nieobiektowe elementy języka C++

Wprowadzenie do programowania w języku C

Podstawy programowania

Programowanie w języku C++ Agnieszka Nowak Brzezińska Laboratorium nr 2

Podstawy programowania

Podstawy programowania w języku C i C++

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

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

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

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

Struktura pliku projektu Console Application

Wstęp do programowania

Konstrukcje warunkowe Pętle

Programowanie w języku C++

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Podstawy programowania w języku C++

1 Podstawy c++ w pigułce.

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Instrukcje sterujące. Programowanie Proceduralne 1

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

Instrukcje sterujące

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

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

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

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Pętla for. Wynik działania programu:

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

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

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

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Programowanie komputerowe. Zajęcia 1

Programowanie - wykład 4

Wstęp do programowania

Kontrola przebiegu programu

Podstawy programowania w języku C

C++ wprowadzanie zmiennych

Wstęp do informatyki- wykład 7

WHILE (wyrażenie) instrukcja;

Podstawy Programowania C++

Ćwiczenia podstawowe, zestaw 5, część 1

Wstęp do informatyki- wykład 7

Programowanie strukturalne i obiektowe

Podstawy programowania

1 Podstawy c++ w pigułce.

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

do instrukcja while (wyrażenie);

Podstawy programowania w języku C++

Podstawy programowania w języku C++

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

Języki programowania. Przetwarzanie plików amorficznych Konwencja języka C. Część siódma. Autorzy Tomasz Xięski Roman Simiński

Podstawy programowania

Wstęp do informatyki- wykład 6

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Wstęp do programowania

Podstawy programowania w języku C i C++

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

Wstęp do Informatyki

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Programowanie w Turbo Pascal

Wstęp do programowania

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

lekcja 8a Gry komputerowe MasterMind

Część 4 życie programu

Wstęp do programowania

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

INSTRUKCJE REPETYCYJNE PĘTLE

tablica: dane_liczbowe

WHILE (wyrażenie) instrukcja;

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

Laboratorium_1: Temat: Wprowadzenie do języka C++ 1. Operatory. Arytmetyczne

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

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

Język C zajęcia nr 5

Wstęp do informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne

2 Przygotował: mgr inż. Maciej Lasota

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

Kilka prostych programów

Podstawy programowania

Stuck in the loop. Sterowanie. Marcin Makowski. 29 października Zak lad Chemii Teoretycznej UJ

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

Algorytmika i programowanie. dr inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

1 Wielokrotne powtarzanie tych samych operacji

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

Podstawy programowania w języku C++

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

I - Microsoft Visual Studio C++

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

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

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

KURS C/C++ WYKŁAD 1. Pierwszy program

Proste programy w C++ zadania

3. Instrukcje warunkowe

Języki programowania obiektowego Nieobiektowe elementy języka C++

Liczby pseudolosowe. #include <stdio.h> #include <stdlib.h> int main() { printf("%d\n", RAND_MAX); return 0; }

Język ludzki kod maszynowy

Transkrypt:

Podstawy programowania w języku C++ Część druga Instrukcje sterujące wykonaniem programu Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi uważnego w nim uczestnictwa. Opracowanie to jest chronione prawem autorskim. Wykorzystywanie jakiegokolwiek fragmentu w celach innych niż nauka własna jest nielegalne. Dystrybuowanie tego opracowania lub jakiejkolwiek jego części oraz wykorzystywanie zarobkowe bez zgody autora jest zabronione.

Instrukcje wyrażeniowa Instrukcja wyrażeniowa to każde poprawne wyrażenie w języku C (również wyrażenie puste) zakończone znakiem średnika. Wykonanie takiej instrukcji polega na wyznaczeniu wartości danego wyrażenia. x = 0; x = a + b; a + b; ; Copyright Roman Simiński Strona : 2

Instrukcje złożona Instrukcja złożona zwana inaczej blokiem, to lista instrukcji ujęta w nawiasy klamrowe. Blok traktowany jest jako pojedyncza instrukcja. Identyfikator zadeklarowany w obrębie bloku ma jego zakres. Bloki mogą być zagnieżdżone do dowolnej głębokości. W obrębie zagnieżdżonych bloków następuje przesłanianie nazw. int i = 0, j = 1, k; k = i + j; float k = 10.2; printf( "k = %g", k ); printf( "k = %d", k ); k = 10.2 k = 1 Copyright Roman Simiński Strona : 3

Instrukcja warunkowa jeżeli ( warunek W jest prawdziwy ) wykonaj instrukcję I if( W ) I W nie tak I if( W ) I Instrukcja warunkowa obejmuje swoim zasięgiem jedną, następną instrukcję. Jeżeli instrukcja warunkowa ma obejmować więcej niż jedną instrukcję, należy ująć je w, tworząc instrukcję złożoną. Copyright Roman Simiński Strona : 4

Instrukcja alternatywy jeżeli ( warunek W jest prawdziwy ) wykonaj instrukcję I1 w przeciwnym przypadku wykonaj instrukcję I2 nie W tak if( W ) I1 else I2 I2 I1 if( W ) I1 else I2 Instrukcja alternatywy obejmuje swoim zasięgiem jedną, następną instrukcję, zarówno w części if jak i else. Jeżeli instrukcja alternatywy ma obejmować więcej niż jedną instrukcję, należy ująć je w, tworząc instrukcję złożoną. Copyright Roman Simiński Strona : 5

Instrukcja warunkowa i alternatywy przykład Instrukcja warunkowa... if( dystans!= 0 ) cout << "Spalanie " << ( paliwo * 100 ) / dystans << " l na 100 km";... Instrukcja alternatywy... if( dystans!= 0 ) cout << "Spalanie " << ( paliwo * 100 ) / dystans << " l na 100 km"; else cout << "Nie dokonam obliczen dla zerowego dystansu.";... Średnik W językach C/C++ średnik kończy instrukcję przed nim zapisaną. Copyright Roman Simiński Strona : 6

Instrukcje warunkowe kiedy wyrażenie jest fałszywe a kiedy prawdziwe? W C89 nie ma predefiniowanego typu Boolean używa się liczb całkowitych. W języku C++ i C99 zdefiniowany jest typ bool i wartości false i true. W C99 zdefiniowany jest typ _Bool i wartości false i true (stdbool.h). Każde wyrażenie dające w wyniku wartość całkowitą różną od zera jest traktowane jako prawdziwe, a dające w wyniku wartość zerową jest traktowane jako fałszywe. W wyrażeniach relacyjnych i porównania prawda to 1, fałsz to 0 całkowite (int). Przydatne operatory Operator Znaczenie == równe!= różne! logiczna negacja && logiczny and logiczny or Copyright Roman Simiński Strona : 7

Instrukcja alternatywy a instrukcje warunkowe float a, b, c, delta;... delta = b * b 4 * a * c; Złożenie instrukcji alternatywy: if( delta < 0 ) cout << "Brak pierwiastków rzeczywistych" << endl; else if( delta == 0 ) cout << "Jeden pierwiastek rzeczywisty" << endl; else cout << "Dwa pierwiastki rzeczywiste" << endl; Kolejne instrukcje warunkowe: if( delta < 0 ) cout << "Brak pierwiastków rzeczywistych" << endl; if( delta == 0 ) cout << "Jeden pierwiastek rzeczywisty" << endl; if( delta > 0 ) cout << "Dwa pierwiastki rzeczywiste" << endl; Copyright Roman Simiński Strona : 8

A co zrobić, gdy w C89 potrzeba TRUE lub FALSE? Rozwiązanie typowe: #define TRUE 1 #define FALSE 0 Rozwiązanie dziwne lecz poprawne i ciekawe: #define TRUE (0==0) #define FALSE (!TRUE) Zamiast zmiennych boolowskich stosujemy zwykle zmienne typu int int koniec_linii = FALSE;... if( koniec_linii ) puts( "Wykryto koniec linii!" ) Zwykle nie piszemy tak ( mało maślane ): if( koniec_linii == TRUE ) puts( "Wykryto koniec linii!" ) Copyright Roman Simiński Strona : 9

Uwaga na zagnieżdżone instrukcje warunkowe!... double kwota; cout << "Podaj przychod: "; cin >> kwota; if( kwota >= 0 ) if( kwota > 0 ) cout << "Dochod"; else cout << "Strata"; Podaj przychod: -100??? cout << "Koniec... Copyright Roman Simiński Strona : 10

Uwaga na zagnieżdżone instrukcje warunkowe!... double kwota; cout << "Podaj przychod: "; cin >> kwota; if( kwota >= 0 ) if( kwota > 0 ) cout << "Dochod"; else cout << "Strata"; cout << "Koniec... Podaj przychod: -100 Koniec Dlaczego? Copyright Roman Simiński Strona : 11

Uwaga na zagnieżdżone instrukcje warunkowe! Ify z pułapką, wydaje się, że jest tak jak sugerują wcięcia: if( kwota >= 0 ) if( kwota > 0 ) cout << "Dochod"; else cout << "Strata"; A jest tak: if( kwota >= 0 ) if( kwota > 0 ) cout << "Dochod"; else cout << "Strata"; Trzeba użyć instrukcji złożonej lub sparować if z else: if( kwota >= 0 ) if( kwota > 0 ) cout << "Dochod"; else cout << "Strata"; if( kwota >= 0 ) if( kwota > 0 ) cout << "Dochod"; else cout << "Zero!"; else cout << "Strata"; Copyright Roman Simiński Strona : 12

Instrukcja iteracyjna do-while Gdy iterowana jest jedna instrukcja: do instrukcja while( wyrazenie ); instrukcja Gdy iterowany jest ciąg instrukcji: do ciag instrukcji while( wyrazenie ); prawda wyrażenie fałsz Instrukcja stanowiąca ciało iteracji do-while wykona się przynajmniej raz. Wyrażenie występujące w nawiasach określa warunek kontynuacji, zatem iteracja kończy się gdy wartość wyrażenia będzie zerowa. Copyright Roman Simiński Strona : 13

Zastosowanie instrukcji do-while, wróćmy do średniego spalania #include <cstdlib> #include <iostream> using namespace std; C ++ int main() float dystans, paliwo; cout << endl << "Obliczam ile Twoj pojazd spala paliwa na 100 km" << endl; cout << "Dystans: " << flush; cin >> dystans; cout << "Paliwo: " << flush; cin >> paliwo; W tym miejscu użytkownik może wprowadzić nieprawidłowe dane. Nie pozwólmy mu na to! if( dystans!= 0 ) cout << "Spalanie " << (paliwo*100) / dystans << " l na 100 km" << endl; else cout << "Nie dokonam obliczen dla takiego dystansu." << endl; cout << "Nacisnij Enter by zakonczyc program..." << endl; cin.ignore(); cin.get(); return EXIT_SUCCESS; Copyright Roman Simiński Strona : 14

Zastosowanie instrukcji do-while weryfikacja danych do cout << "Dystans: " << flush; cin >> dystans; while( dystans <= 0 ); do cout << "Paliwo: " << flush; cin >> paliwo; while( paliwo <= 0 ); Wykonuj wczytywanie dystansu, dopóki jest on nieprawidłowy. Wykonuj wczytywanie il. paliwa, dopóki jest ona nieprawidłowa. Copyright Roman Simiński Strona : 15

Zastosowanie instrukcji do-while lepsza weryfikacja danych do cout << "Dystans: " << flush; cin >> dystans; if( dystans <= 0 ) cout << "Dystans musi byc wiekszy od zera!" << endl; while( dystans <= 0 ); do cout << "Paliwo: " << flush; cin >> paliwo; if( paliwo <= 0 ) cout << "Ilosc paliwa musi byc wieksza od zera!" << endl; while( paliwo <= 0 ); Wykonuj wczytywanie dystansu, dopóki jest on nieprawidłowy, poinformuj o tym użytkownika. Wykonuj wczytywanie il. paliwa, dopóki jest ona nieprawidłowa, poinformuj o tym użytkownika. Copyright Roman Simiński Strona : 16

Zastosowanie instrukcji gra w za dużo, za mało Problem Program losuje liczbę z przedziału od 1 do 100. Zadaniem użytkownika jest odgadnięcie wylosowanej liczby. Scenariusz działania programu: Copyright Roman Simiński Strona : 17

Zastosowanie instrukcji gra w za dużo, za mało Algorytm ogólny Start Wylosuj liczbę i zapamiętaj Wczytaj liczbę true Wczytana > Wylosowana false Wyświetl, że za dużo true Wczytana < Wylosowana false Wyświetl, że za mało Wyświetl, że za to ta liczba false Wczytana = Wylosowana true Stop Copyright Roman Simiński Strona : 18

Pierwsza przymiarka deklaracja zmiennych #include <cstdlib> int main() int wczytana, wylosowana; return EXIT_SUCCESS; W zmiennej wylosowana zapamiętamy liczbę wylosowaną przez komputer. W zmiennej wczytana zapamiętamy liczbę wprowadzoną przez gracza. Copyright Roman Simiński Strona : 19

Pierwsza przymiarka komunikat wstępny #include <cstdlib> #include <iostream> using namespace std; Będziemy korzystać z strumieni wejścia-wyjścia int main() int wczytana, wylosowana; cout << endl << "Witaj w grze w \"Za duzo, za malo\""; cout << endl << "Odgadnij wylosowana liczbe (1.. 100)" << endl; return EXIT_SUCCESS; Komunikat wstępny Copyright Roman Simiński Strona : 20

Pierwsza przymiarka losowanie liczby #include <cstdlib> #include <iostream> using namespace std; int main() int wczytana, wylosowana; Losowanie zalążka generatora liczb pseudolosowych. Stały zalążek nie jest dobry... :-\ cout << endl << "Witaj w grze w \"Za duzo, za malo\""; cout << endl << "Odgadnij wylosowana liczbe (1.. 100)" << endl; srand( 1000 ); wylosowana = rand() % 100 + 1; return EXIT_SUCCESS; Losowanie liczby z wykorzystaniem generatora licz pseudolosowych. Copyright Roman Simiński Strona : 21

Pierwsza przymiarka komunikat wstępny i losowanie liczby Inicjalizacja generatora liczb pseudolosowych (stały zalążek o wartości 1000): srand( 1000 ); Tak zainicjowany generator będzie działał powtarzalnie. Należy uzmiennić zalążek, przykładowo uzależniając go od bieżącego czasu: srand( ( unsigned )time( NULL ) ); Funkcja rand() generuje liczby pseudolosowe z przedziału 0..RAND_MAX. My potrzebujemy liczby od 1..100. Ograniczamy zakres używając operatora modulo (reszta z dzielenia) oznaczonego w C/C++ symbolem % oraz przesuwamy przedział o jeden w lewo dodając +1. wylosowana = rand() % 100 + 1; Copyright Roman Simiński Strona : 22

Pierwsza przymiarka lepszy dobór zalążka generatora pseudolosowego #include <cstdlib> #include <ctime> #include <iostream> using namespace std; int main() int wczytana, wylosowana; Plik nagłówkowy zwykle potrzebny dla fun. time Losowanie zalążka generatora liczb pseudolosowych zależnego ob aktualnej wartości timera cout << endl << "Witaj w grze w \"Za duzo, za malo\""; cout << endl << "Odgadnij wylosowana liczbe (1.. 100)" << endl; srand( ( unsigned )time( NULL ) ); wylosowana = rand() % 100 + 1; return EXIT_SUCCESS; Copyright Roman Simiński Strona : 23

Główna iteracja programu int main()... wylosowana = rand() % 100 + 1; do cout << '>' << flush; cin >> wczytana; if( wczytana > wylosowana ) cout << "Za duzo" << endl; else if( wczytana < wylosowana ) cout << "Za malo" << endl; else cout << "Brawo, to ta liczba!" << endl << "Nacisnij Enter by zakonczyc"; while( wylosowana!= wczytana ); cin.ignore(); cin.get(); return EXIT_SUCCESS; Powtarzaj, dopóki liczba nie jest odgadnięta Copyright Roman Simiński Strona : 24

Główna iteracja programu int main()... wylosowana = rand() % 100 + 1; Wczytaj liczbę typowana przez gracza do cout << '>' << flush; cin >> wczytana; if( wczytana > wylosowana ) cout << "Za duzo" << endl; else if( wczytana < wylosowana ) cout << "Za malo" << endl; else cout << "Brawo, to ta liczba!" << endl << "Nacisnij Enter by zakonczyc"; while( wylosowana!= wczytana ); cin.ignore(); cin.get(); return EXIT_SUCCESS; Copyright Roman Simiński Strona : 25

Główna iteracja programu int main()... wylosowana = rand() % 100 + 1; Porównaj wczytaną liczbę z wylosowaną i wyprowadź odpowiedni komunikat do cout << '>' << flush; cin >> wczytana; if( wczytana > wylosowana ) cout << "Za duzo" << endl; else if( wczytana < wylosowana ) cout << "Za malo" << endl; else cout << "Brawo, to ta liczba!" << endl << "Nacisnij Enter by zakonczyc"; while( wylosowana!= wczytana ); cin.ignore(); cin.get(); return EXIT_SUCCESS; Copyright Roman Simiński Strona : 26

Instrukcja przełączająca switch switch( wyrażenie ) case wyrażenie_stałe : instrukcje case wyrażenie_stałe : instrukcje... default : instrukcje Instrukcja switch: sprawdza czy wartość wyrażenia jest równa jednemu z kilku przypadków określonych wyrażeniem stałym, wykonuje skok do instrukcji zapisanych za owym wyrażeniem stałym. Jeżeli nie znaleziono przypadku pasującego do wartości wyrażenia, wykonywane są instrukcje zapisane po frazie default. Instrukcja służy do podejmowania decyzji wielowariantowych. Wszystkie wyrażenia są typu całkowitego. Copyright Roman Simiński Strona : 27

Przykład wykorzystanie instrukcji warunkowych int main() int nadwozie; cout << "\njaki typ nadwozia lubisz?"; cout << "\n1. Sedan\n2. SUV\n3. Coupe"; cout << "\nwpisz 1, 2 lub 3: "; cin >> nadwozie; if( nadwozie == 1 ) cout << "\nchyba lubisz eleganckie limuzyny!"; if( nadwozie == 2 ) cout << "\nwidze, ze ciagnie Cie w teren!"; if( nadwozie == 3 ) cout << "\nty to pewnie lubisz szybka jazde!"; cout << "\n\nenter=koniec"; cin.ignore(); cin.get(); return EXIT_SUCCESS; Copyright Roman Simiński Strona : 28

Przykład wykorzystanie instrukcji warunkowych, analiza int main() int nadwozie; W warunkach występuje ta sama zmienna cout << "\njaki typ nadwozia lubisz?"; cout << "\n1. Sedan\n2. SUV\n3. Coupe"; cout << "\nwpisz 1, 2 lub 3: "; cin >> nadwozie; if( nadwozie == 1 ) cout << "\nchyba lubisz eleganckie limuzyny!"; if( nadwozie == 2 ) cout << "\nwidze, ze ciagnie Cie w teren!"; if( nadwozie == 3 ) cout << "\nty to pewnie lubisz szybka jazde!"; cout << "\n\nenter=koniec"; cin.ignore(); cin.get(); return EXIT_SUCCESS; Copyright Roman Simiński Strona : 29

Przykład wykorzystanie instrukcji warunkowych, analiza int main() int nadwozie; Porównanie z wartościami znanym na etapie kompilacji cout << "\njaki typ nadwozia lubisz?"; cout << "\n1. Sedan\n2. SUV\n3. Coupe"; cout << "\nwpisz 1, 2 lub 3: "; cin >> nadwozie; if( nadwozie == 1 ) cout << "\nchyba lubisz eleganckie limuzyny!"; if( nadwozie == 2 ) cout << "\nwidze, ze ciagnie Cie w teren!"; if( nadwozie == 3 ) cout << "\nty to pewnie lubisz szybka jazde!"; cout << "\n\nenter=koniec"; cin.ignore(); cin.get(); return EXIT_SUCCESS; Copyright Roman Simiński Strona : 30

Przykład wykorzystanie instrukcji przełączającej int main() int nadwozie; cout << "\njaki typ nadwozia lubisz?"; cout << "\n1. Sedan\n2. SUV\n3. Coupe"; cout << "\nwpisz 1, 2 lub 3: "; cin >> nadwozie; switch( nadwozie ) case 1 : cout << "\nchyba lubisz eleganckie limuzyny!"; case 2 : cout << "\nwidze, ze ciagnie Cie w teren!"; case 3 : cout << "\nty to pewnie lubisz szybka jazde!"; cout << "\n\nenter=koniec"; cin.ignore(); cin.get(); return EXIT_SUCCESS; Instrukcja switch: jedna zmienna i porównanie z wartościami znanymi na etapie kompilacji Copyright Roman Simiński Strona : 31

Przykład przetestujmy w działaniu... int main() int nadwozie; cout << "\njaki typ nadwozia lubisz?"; cout << "\n1. Sedan\n2. SUV\n3. Coupe"; cout << "\nwpisz 1, 2 lub 3: "; cin >> nadwozie; switch( nadwozie ) case 1 : cout << "\nchyba lubisz eleganckie limuzyny!"; case 2 : cout << "\nwidze, ze ciagnie Cie w teren!"; case 3 : cout << "\nty to pewnie lubisz szybka jazde!"; Dlaczego? cout << "\n\nenter=koniec"; cin.ignore(); cin.get(); return EXIT_SUCCESS; Copyright Roman Simiński Strona : 32

Instrukcja przełączająca switch, zasada działania... switch( nadwozie ) case 1 : cout << "\nchyba lubisz eleganckie limuzyny!"; case 2 : cout << "\nwidze, ze ciagnie Cie w teren!"; case 3 : cout << "\nty to pewnie lubisz szybka jazde!";... cout << "\nchyba lubisz eleganckie limuzyny!"; nadwozie ==? 1 2 cout << "\nwidze, ze ciagnie Cie w teren!" 3 cout << "\nty to pewnie lubisz szybka jazde!" Copyright Roman Simiński Strona : 33

Instrukcja przełączająca switch, zasada działania... switch( nadwozie ) case 1 : cout << "\nchyba lubisz eleganckie limuzyny!"; case 2 : cout << "\nwidze, ze ciagnie Cie w teren!"; case 3 : cout << "\nty to pewnie lubisz szybka jazde!";... nadwozie: 1 cout << "\nchyba lubisz eleganckie limuzyny!"; nadwozie == 1 1 2 cout << "\nwidze, ze ciagnie Cie w teren!" 3 cout << "\nty to pewnie lubisz szybka jazde!" Copyright Roman Simiński Strona : 34

Instrukcja przełączająca switch, zasada działania... switch( nadwozie ) case 1 : cout << "\nchyba lubisz eleganckie limuzyny!"; case 2 : cout << "\nwidze, ze ciagnie Cie w teren!"; case 3 : cout << "\nty to pewnie lubisz szybka jazde!";... nadwozie: 2 cout << "\nchyba lubisz eleganckie limuzyny!"; nadwozie == 2 1 2 cout << "\nwidze, ze ciagnie Cie w teren!" 3 cout << "\nty to pewnie lubisz szybka jazde!" Copyright Roman Simiński Strona : 35

Instrukcja przełączająca switch vs. instrukcja case z Pascala Instrukcja przełączająca switch przełącza przebieg wykonania programu, do instrukcji, której etykieta (umieszczona za słowem case) ma wartość równą wyrażeniu w nawiasach instrukcji switch. Instrukcja wyboru case (Pascal) wykonuje instrukcję przypisaną do etykiety o wartości równej selektorowi zapisanemu pomiędzy słowami case a of. Działanie instrukcji przełączającej switch jest całkowicie odmienne od działania instrukcji wyboru case. Można jednak w językach C/C++ wykorzystać instrukcję przełączającą switch do realizacji instrukcji analogicznej do instrukcji wyboru case. Do tego zadania wykorzystuje się instrukcje break powoduje wyjście (zakończenie wykonania) z najbliższej instrukcji iteracyjnej lub instrukcji switch. Copyright Roman Simiński Strona : 36

Instrukcja przełączająca switch, zasada działania switch( nadwozie ) case 1 : cout << "\nchyba lubisz eleganckie limuzyny!"; break; case 2 : cout << "\nwidze, ze ciagnie Cie w teren!"; break; case 3 : cout << "\nty to pewnie lubisz szybka jazde!"; break; nadwozie: 2 nadwozie == 2 1 cout << "\nchyba lubisz eleganckie limuzyny!"; break; 2 cout << "\nwidze, ze ciagnie Cie w teren!" 3 break; cout << "\nty to pewnie lubisz szybka jazde!" break; Copyright Roman Simiński Strona : 37

Instrukcja przełączająca switch + iteracja do-while = proste menu Połączenie instrukcji iteracyjnej do-while oraz instrukcji przełączającej switch pozwala na zorganizowanie prostego, ale użytecznego, menu konsolowego. Copyright Roman Simiński Strona : 38

Instrukcja przełączająca switch + iteracja do-while = proste menu... char klawisz; do cout << "\nformatowanie dysku, wybierz opcje:\n1. Format"; cout << "\n2. Szybki format\n3. Diagnostyka\n4. Koniec\n>" << flush; cin >> klawisz; switch( klawisz ) case '1' : cout << "\nwybrales formatowanie\n"; break; case '2' : cout << "\nwybrales szybki format\n"; break; case '3' : cout << "\nwybrales diagnostyke\n"; break; while( klawisz!= '4' ); cout << "\n\nwybrales Koniec, nacisnij Enter by potwierdzic..."; cin.ignore(); cin.get();... Copyright Roman Simiński Strona : 39

Typ zmiennej sterującej a typ wartości przypadku char klawisz;... cin >> klawisz; switch( klawisz ) case '1' : cout << "\nwybrales formatowanie\n"; break; case '2' : cout << "\nwybrales szybki format\n"; break; case '3' : cout << "\nwybrales diagnostyke\n"; break; int nadwozie;... cin >> nadwozie; switch( nadwozie ) case 1 : cout << "\nchyba lubisz eleganckie limuzyny!"; break; case 2 : cout << "\nwidze, ze ciagnie Cie w teren!"; break; case 3 : cout << "\nty to pewnie lubisz szybka jazde!"; break; Copyright Roman Simiński Strona : 40

Instrukcja przełączająca switch przykład wykorzystania switch( znak ) case 0 : case 1 : case 2 : case 3 : case 4 : case 5 : case 7 : case 8 : case 9 : cout << Cyfra << flush; break; case, : case. : case ; : cout << Znak interpunkcyjny << flush; break; default : if( znak >= A && znak <= Z ) cout << Duża litera << flush; else if( znak >= a && znak <= z ) cout << Mała litera << flush; else cout << Inny znak << flush; break; char znak; cout << "Podaj znak: " << flush; cin >> znak; Gdy żaden z przypadków nie jest zgodny Copyright Roman Simiński Strona : 41

Instrukcja przełączająca switch uwagi dodatkowe Instrukcje nie muszą stanowić bloku: switch( error_code ) case -1 : cout << Blad! ; break; case 0 : cout << OK! ; break; switch( error_code ) case -1 : cout << Blad! ; break; case 0 : cout << OK! ; break; Uwaga przypadek default nie musi być ostatnim na liście. Warto dla tego przypadku również stosować instrukcje break. Copyright Roman Simiński Strona : 42

Instrukcja iteracyjna while Gdy iterowana jest jedna instrukcja: while( wyrażenie ) instrukcja Gdy iterowany jest ciąg instrukcji: while( wyrażenie ) ciąg instrukcji prawda instrukcja wyrażenie fałsz Instrukcja stanowiąca ciało iteracji while może nie wykonać się wcale. Wyrażenie występujące w nawiasach określa warunek kontynuacji, zatem iteracja kończy się gdy wartość wyrażenia będzie zerowa. Copyright Roman Simiński Strona : 43

Instrukcja iteracyjna while sylwestrowe odliczanie ;-) int licznik = 10; while( licznik > 0 ) cout << endl << licznik << "..."; licznik--; cout << endl << "Nowy Rok!!!" << endl; licznik- odpowiada licznik = licznik - 1 Porównanie z zerem czasem zapisuje się w skróconej wersji: int licznik = 10; while( licznik > 0 )... int licznik = 10; while( licznik )... Uwaga wersja uproszczona może być niebezpieczna int licznik = 11; while( licznik )... licznik = licznik - 2; Copyright Roman Simiński Strona : 44

Od instrukcji while do instrukcji for int licznik; licznik = 10; Inicjalizacja Warunek while( licznik > 0 ) cout << endl << licznik << "..." Ciało iteracji ; licznik-- ; Modyfikacja Iteracja for w C/C++ nie ma nic wspólnego poza nazwą z instrukcją iteracyjną for z języka Pascal. Instrukcja for w języku C stanowi uogólnienie schematu iteracji while. int licznik; Inicjalizacja Warunek Modyfikacja for( licznik = 10 ; licznik > 0 ; licznik-- ) cout << endl << licznik << "..." Ciało iteracji Copyright Roman Simiński Strona : 45

Instrukcja iteracyjna for ogólny schemat inicjalizacja; while( warunek ) ciało_iteracji modyfikacja for( inicjalizacja; warunek; modyfikacja ) ciało_iteracji Uwaga poszczególne sekcje iteracji for mogą być dowolnymi legalnymi, być może złożonymi, wyrażeniami w języku C. Mogą to być wyrażenia przecinkowe. W części inicjalizacyjnej w C++ wolno deklarować zmienne, w C nie wolno. for( int licznik = 10; licznik > 0; cout << endl << licznik-- << "..." ) ; C ++ int licznik; for( licznik = 10; licznik > 0; printf( \n%d..., licznik-- ) ) ; ANSI C 89 Copyright Roman Simiński Strona : 46

Instrukcje break i continue wspomaganie iteracji i instrukcji switch Instrukcja break pozwala na natychmiastowy wyskok z najbardziej zagnieżdżonej, dowolnej instrukcji iteracyjnej lub instrukcji switch. Instrukcja continue pozwala na przerwanie bieżącego przebiegu dowolnej iteracji i przejście do wykonania następnego jej przebiegu od jego początku. Dla iteracji while i do-while instrukcja continue powoduje przeniesienie sterowania do fazy testowania warunku kontynuacji. W przypadku iteracji for sterowanie przenoszone jest do wyrażenia modyfikującego a potem do testowania warunku. switch( klawisz ) case '1' : full_disk_format(); break; case '2' : quick_disk_format(); break; case '3' : check_disk(); break; klawisz = getchar(); while( klawisz!= '\n' ) if( klawisz == 'k' ) break; else... Copyright Roman Simiński Strona : 47

Instrukcje break i continue wspomaganie iteracji i instrukcji switch... for( ; ; ) // Iteracja nieskończona czyli pętla cout << "\nformatowanie dysku, wybierz opcje:\n1. Format"; cout << "\n2. Szybki format\n3. Diagnostyka\n4. Koniec\n>" << flush; cin >> klawisz; if( klawisz == 4 ) // Czy wybrano klawisz końca? break; // Tak, wychodzimy z iteracji if(!( klawisz >= 0 && klawisz <= 9 ) ) // Czy klawisz jest cyfr ą? continue; // Klawisz nie jest cyfr ą, nie ma co dalej sprawdzać switch( klawisz ) case '1' : full_disk_format(); break; case '2' : quick_disk_format(); break; case '3' : check_disk(); break; // switch... Copyright Roman Simiński Strona : 48

Iteracyjne przetwarzanie ciągów liczbowych Problem 1 Napisać program wyznaczający średni, dobowy kurs waluty EURO na podstawie kursów notowanych na początku każdej godziny. Pod koniec doby analityk wprowadza zanotowane liczby program ma wyznaczyć na tej podstawie średnie kurs dobowy. Liczba wprowadzanych kursów jest znana, jest to zawsze 24. Copyright Roman Simiński Strona : 49

Wyznaczanie sumy ciągu liczb o znanej liczbie elementów const int MAKS_LB_KURSOW = 24; int main() float kurs, sumaryczny; int lb_kursow; #include <cstdlib> #include <iostream> using namespace std; cout << "\nwyznaczam dobowy sredn kurs waluty EURO."; cout << "\nwprowadz 24 dodatnie liczby -- kursy EURO"; cout << "\nzanotowane na poczatku kazdej godziny.\n" << flush; for( sumaryczny = 0, lb_kursow = 1; lb_kursow <= MAKS_LB_KURSOW; lb_kursow++ ) cout << '>' << flush; cin >> kurs; sumaryczny = sumaryczny + kurs; //for cout << "\nkurs sredni: " << sumaryczny / MAX_LB_KURSOW; cout << endl << "Nacisnij Enter by zakonczyc..."; cin.ignore(); cin.get(); return EXIT_SUCCESS; Copyright Roman Simiński Strona : 50

Iteracyjne przetwarzanie ciągów liczbowych Problem 2 Uzupełnić poprzedni program o wyznaczanie kursu minimalnego i maksymalnego. Wyznaczanie minimum i maksimum Jeżeli wczytany kurs jest mniejszy od minimalnego, to niech on się stanie minimalnym. Jeżeli wczytany kurs jest większy od maksymalnego, to niech on się stanie maksymalnym. Jak ustawić wartość startową minimum i maksimum? Ten element potraktujemy osobno on będzie startową wartością minimalną, maksymalną i sumaryczną. 1 2 3 24 3.50 3.52 3.48 3.47 Te elementy obsłużymy iteracyjnie, począwszy od drugiego, porównując z minimum, maksimum i doliczając do sumy. 1 2 3 24 3.50 3.52 3.48 3.47 Copyright Roman Simiński Strona : 51

Wyznaczanie sumy, min. i maks. ciągu liczb o znanej liczbie elementów #include <cstdlib> #include <iostream> using namespace std; const int MAKS_LB_KURSOW = 24; int main() float kurs, sumaryczny, maksymalny, minimalny; int lb_kursow; cout << "\nwyznaczam dobowy, sredni, minimalny i maksymalny kurs"; cout << "\nwaluty EURO. Wprowadz 24 dodatnie liczby -- kursy EURO"; cout << "\nzanotowane na poczatku kazdej godziny.\n>" << flush; // Wczytanie pierwszego kursu cin >> kurs; // Pierwszy i jedyny na razie kurs to kurs minimalny, maksymalny i sumaryczny maksymalny = minimalny = sumaryczny = kurs; 1/2 Copyright Roman Simiński Strona : 52

Wyznaczanie sumy, min. i maks. ciągu liczb o znanej liczbie elementów for( lb_kursow = 2; lb_kursow <= MAKS_LB_KURSOW; lb_kursow++ ) cout << '>' << flush; cin >> kurs; sumaryczny = sumaryczny + kurs; if( kurs < minimalny ) minimalny = kurs; if( kurs > maksymalny ) maksymalny = kurs; //for cout << "\nkurs najwyzszy: " << maksymalny; cout << "\nkurs najnizszy: " << minimalny; cout << "\nkurs sredni: " << sumaryczny / MAKS_LB_KURSOW; cout << endl << "Nacisnij Enter by zakonczyc..."; cin.ignore(); cin.get(); return EXIT_SUCCESS; 2/2 Copyright Roman Simiński Strona : 53

Iteracyjne przetwarzanie ciągów liczbowych Problem 3 Napisać program przyśpieszający ocenę wyników sprintera. Sprinter wielokrotnie pokonuje jednakowy dystans, notując kolejno osiągane czasy. Po treningu zawodnik siada do komputera, wpisuje kolejne czasy i oczekuje, że program wyznaczy mu czas najlepszy, najgorszy oraz średni. Liczba wprowadzanych czasów jest bliżej nieznana. Może ich być np. kilka, kilkanaście, kilkadziesiąt. Copyright Roman Simiński Strona : 54

Iteracyjne przetwarzanie ciągów liczbowych Scenariusz działania programu: Program wyświetla informację o jego przeznaczeniu. Program wczytuje kolejno czasy, przy czym ich liczba nie jest z góry ograniczona ani wcześniej znana. Po zakończeniu wprowadzania czasów, program wyznacza czas najlepszy, najgorszy i średni. Program kończy swoje działanie po naciśnięciu przez użytkownika klawisza Enter. Copyright Roman Simiński Strona : 55

Suma, średnia, minimum, maksimum dla nieograniczonego ciągu liczb #include <cstdlib> #include <iostream> using namespace std; int main() float czas, sumaryczny, najlepszy, najgorszy; int licznik; cout << "\nwprowadz kolejne czasy, a ja wyznacze nalepszy, najgorszy"; cout << "\noraz sredni. Podaj zerowy czas aby zakonczyc wprowadzanie."; cout << "\nnie rob jaj, nie wpisuj ujemnych czasow.\n>" << flush; cin >> czas; 1/3 Copyright Roman Simiński Strona : 56

Suma, średnia, minimum, maksimum dla nieograniczonego ciągu liczb if( czas == 0 ) cout << "Nic do roboty"; else sumaryczny = najgorszy = najlepszy = czas; licznik = 1; cout << ">" << flush; cin >> czas; while( czas!= 0 ) sumaryczny = sumaryczny + czas; // lepiej: sumaryczny += czas; if( czas > najgorszy ) najgorszy = czas; if( czas < najlepszy ) najlepszy = czas; licznik = licznik + 1; // lepiej: licznik++; cout << ">" << flush; cin >> czas; //while cout << "\nczas najlepszy: " << najlepszy; cout << "\nczas najgorszy: " << najgorszy; cout << "\nczas sredni: " << sumaryczny / licznik; //if-else 2/3 Copyright Roman Simiński Strona : 57

Suma, średnia, minimum, maksimum dla nieograniczonego ciągu liczb cout << endl << "Nacisnij Enter by zakonczyc..."; cin.ignore(); cin.get(); return EXIT_SUCCESS; 2/3 Copyright Roman Simiński Strona : 58

To co poprzednio ale inaczej wersja mocno niestrukturalna! #include <cstdlib> #include <iostream> using namespace std; int main() float czas, sumaryczny, najlepszy, najgorszy; int licznik; cout << "\nwprowadz kolejne czasy, a ja wyznacze nalepszy, najgorszy"; cout << "\noraz sredni. Podaj zerowy czas aby zakonczyc wprowadzanie."; cout << "\nnie rob jaj, nie wpisuj ujemnych czasow.\n"; 1/3 Copyright Roman Simiński Strona : 59

Iteracja for bez warunku staje się pętlą, break pozwoli na jej zakończenie for( sumaryczny = licznik = 0; ; licznik++ ) cout << '>' << flush; cin >> czas; Brak warunku to jest pętla // Znacznik konca danych, wyskakujemy if( czas == 0 ) break; // Wczytano pierwszy czas -- to teraz minimum i maksimum if( licznik == 0 ) najgorszy = najlepszy = czas; sumaryczny = sumaryczny + czas; if( czas > najgorszy ) najgorszy = czas; if( czas < najlepszy ) najlepszy = czas; //for 2/3 Copyright Roman Simiński Strona : 60

Być może nie wprowadzono żadnych danych if( licznik > 0 ) cout << endl << "Czas najlepszy: " << najlepszy; cout << endl << "Czas najgorszy: " << najgorszy; cout << endl << "Czas sredni: " << sumaryczny /licznik; else cout << "Nic do roboty"; cout << endl << "Nacisnij Enter by zakonczyc..."; cin.ignore(); cin.get(); return EXIT_SUCCESS; 3/3 Copyright Roman Simiński Strona : 61