c cxx w02

background image

Podstawy programowania

Podstawy programowania

w j

w języku C++

ęzyku C++

Instrukcje sterujące wykonaniem

programu

Część druga

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.

Roman Simiński

roman.siminski@us.edu.pl
www.us.edu.pl/~siminski

Autor

Kontakt

background image

Instrukcje wyrażeniowa

Instrukcje wyrażeniowa

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

2

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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;

a + b;

x = a + b;

;

background image

Instrukcje złożona

Instrukcje złożona

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

3

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

background image

Instrukcja warunkowa

Instrukcja warunkowa

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

4

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

if( W )
I

I

W

tak

nie

if( W ) I

jeżeli ( warunek W jest prawdziwy )
wykonaj instrukcję 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ą.

background image

Instrukcja alternatywy

Instrukcja alternatywy

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

5

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

if( W )
I1
else
I2

if( W ) I1 else I2

jeżeli ( warunek W jest prawdziwy )
wykonaj instrukcję I1
w przeciwnym przypadku
wykonaj instrukcję I2

I1

W

tak

nie

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ą.

background image

Instrukcja warunkowa i alternatywy — przykład

Instrukcja warunkowa i alternatywy — przykład

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

6

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

...

if( dystans != 0 )
cout << "Spalanie " << ( paliwo * 100 ) / dystans << " l na 100 km";

...

...

if( dystans != 0 )
cout << "Spalanie " << ( paliwo * 100 ) / dystans << " l na 100 km";
else
cout << "Nie dokonam obliczen dla zerowego dystansu.";

...

Instrukcja warunkowa

Instrukcja alternatywy

Średnik

W językach C/C++ średnik kończy instrukcję przed nim zapisaną.

background image

Instrukcje warunkowe — kiedy wyrażenie jest fałszywe a kiedy prawdziwe?

Instrukcje warunkowe — kiedy wyrażenie jest fałszywe a kiedy prawdziwe?

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

7

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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).

Operator

Znaczenie

==

równe

!=

różne

!

logiczna negacja

&&

logiczny and

||

logiczny or

Przydatne operatory

background image

Instrukcja alternatywy a instrukcje warunkowe

Instrukcja alternatywy a instrukcje warunkowe

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

8

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

float a, b, c, delta;
. . .
delta = b * b – 4 * a * c;

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;

if( delta < 0 )

cout << "Brak pierwiastków rzeczywistych" << endl;

else
if( delta == 0 )

cout << "Jeden pierwiastek rzeczywisty" << endl;

else

cout << "Dwa pierwiastki rzeczywiste" << endl;

Złożenie instrukcji alternatywy:

Kolejne instrukcje warunkowe:

background image

A co zrobić, gdy w C89 potrzeba TRUE lub FALSE?

A co zrobić, gdy w C89 potrzeba TRUE lub FALSE?

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

9

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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!" )

background image

. . .
double kwota;

cout << "Podaj przychod: ";
cin >> kwota;

if( kwota >= 0 )
if( kwota > 0 )
cout << "Dochod";
else
cout << "Strata";

cout << "Koniec”
. . .

Uwaga na zagnieżdżone instrukcje warunkowe!

Uwaga na zagnieżdżone instrukcje warunkowe!

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

10

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

Podaj przyc

hod: -100

???

background image

Uwaga na zagnieżdżone instrukcje warunkowe!

Uwaga na zagnieżdżone instrukcje warunkowe!

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

11

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

. . .
double kwota;

cout << "Podaj przychod: ";
cin >> kwota;

if( kwota >= 0 )
if( kwota > 0 )
cout << "Dochod";
else
cout << "Strata";

cout << "Koniec”
. . .

Podaj przyc

hod: -100

Koniec

Dlaczego?

background image

Uwaga na zagnieżdżone instrukcje warunkowe!

Uwaga na zagnieżdżone instrukcje warunkowe!

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

12

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

„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";

background image

Instrukcja iteracyjna do-while

Instrukcja iteracyjna do-while

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

13

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

do
instrukcja
while( wyrazenie );

do
{
ciag instrukcji
}
while( wyrazenie );

Gdy iterowana jest jedna instrukcja:

Gdy iterowany jest ciąg instrukcji:

wyrażenie

instrukcja

prawda

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.

background image

Zastosowanie instrukcji do-while, wróćmy do średniego spalania

Zastosowanie instrukcji do-while, wróćmy do średniego spalania

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

14

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

#include <cstdlib>
#include <iostream>
using namespace std;

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;

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

C ++

W tym miejscu użytkownik może wprowadzić
nieprawidłowe dane. Nie pozwólmy mu na to!

background image

Zastosowanie instrukcji do-while — weryfikacja danych

Zastosowanie instrukcji do-while — weryfikacja danych

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

15

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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.

background image

Zastosowanie instrukcji do-while — lepsza weryfikacja danych

Zastosowanie instrukcji do-while — lepsza weryfikacja danych

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

16

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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.

background image

Zastosowanie instrukcji — gra w „za dużo, za mało”

Zastosowanie instrukcji — gra w „za dużo, za mało”

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

17

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

Program losuje liczbę z przedziału od 1 do 100. Zadaniem użytkownika jest
odgadnięcie wylosowanej liczby.

Scenariusz działania programu:

Problem

background image

Zastosowanie instrukcji — gra w „za dużo, za mało”

Zastosowanie instrukcji — gra w „za dużo, za mało”

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

18

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

Wczytana < Wylosowana

Wczytana = Wylosowana

true

true

true

false

false

false

Wczytana > Wylosowana

Stop

Start

Wylosuj liczbę i zapamiętaj

Wczytaj liczbę

Wyświetl, że za dużo

Wyświetl, że za mało

Wyświetl, że za to ta liczba

Algorytm ogólny

background image

Pierwsza przymiarka — deklaracja zmiennych

Pierwsza przymiarka — deklaracja zmiennych

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

19

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

#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.

background image

Pierwsza przymiarka — komunikat wstępny

Pierwsza przymiarka — komunikat wstępny

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

20

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

#include <cstdlib>

#include <iostream>
using namespace std

;

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

Będziemy korzystać z strumieni wejścia-wyjścia

Komunikat wstępny

background image

Pierwsza przymiarka — losowanie liczby

Pierwsza przymiarka — losowanie liczby

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

21

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

#include <cstdlib>
#include <iostream>
using namespace std;

int main()
{
int wczytana, wylosowana;

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 zalążka generatora liczb

pseudolosowych. Stały zalążek nie jest dobry... :-\

Losowanie liczby z wykorzystaniem generatora licz

pseudolosowych.

background image

Pierwsza przymiarka — komunikat wstępny i losowanie liczby

Pierwsza przymiarka — komunikat wstępny i losowanie liczby

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

22

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

srand( 1000 );

wylosowana = rand() % 100 + 1;

Inicjalizacja generatora liczb pseudolosowych (stały zalążek o wartości 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

.

background image

Pierwsza przymiarka — lepszy dobór zalążka generatora pseudolosowego

Pierwsza przymiarka — lepszy dobór zalążka generatora pseudolosowego

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

23

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

#include <cstdlib>

#include <ctime>

#include <iostream>
using namespace std;

int main()
{
int wczytana, wylosowana;

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

Losowanie zalążka generatora liczb pseudolosowych

zależnego ob aktualnej wartości timera

Plik nagłówkowy zwykle potrzebny dla fun. time

background image

Główna iteracja programu

Główna iteracja programu

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

24

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

background image

Główna iteracja programu

Główna iteracja programu

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

25

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

Wczytaj liczbę typowana przez gracza

background image

Główna iteracja programu

Główna iteracja programu

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

26

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

Porównaj wczytaną liczbę z wylosowaną

i wyprowadź odpowiedni komunikat

background image

Instrukcja przełączająca switch

Instrukcja przełączająca switch

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

27

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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.

background image

Przykład — wykorzystanie instrukcji warunkowych

Przykład — wykorzystanie instrukcji warunkowych

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

28

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

background image

Przykład — wykorzystanie instrukcji warunkowych, analiza

Przykład — wykorzystanie instrukcji warunkowych, analiza

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

29

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

W warunkach występuje ta sama zmienna

background image

Przykład — wykorzystanie instrukcji warunkowych, analiza

Przykład — wykorzystanie instrukcji warunkowych, analiza

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

30

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

Porównanie z wartościami znanym na etapie kompilacji

background image

Przykład — wykorzystanie instrukcji przełączającej

Przykład — wykorzystanie instrukcji przełączającej

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

31

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

background image

Przykład — przetestujmy w działaniu...

Przykład — przetestujmy w działaniu...

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

32

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

Dlaczego?

background image

Instrukcja przełączająca switch, zasada działania

Instrukcja przełączająca switch, zasada działania

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

33

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

. . .
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!";

cout << "\nWidze, ze ciagnie Cie w teren!"

cout << "\nTy to pewnie lubisz szybka jazde!"

nadwozie == ?

1

2

3

background image

Instrukcja przełączająca switch, zasada działania

Instrukcja przełączająca switch, zasada działania

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

34

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

. . .
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!";

cout << "\nWidze, ze ciagnie Cie w teren!"

cout << "\nTy to pewnie lubisz szybka jazde!"

nadwozie == 1

nadwozie: 1

1

2

3

background image

Instrukcja przełączająca switch, zasada działania

Instrukcja przełączająca switch, zasada działania

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

35

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

. . .
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!";

cout << "\nWidze, ze ciagnie Cie w teren!"

cout << "\nTy to pewnie lubisz szybka jazde!"

nadwozie == 2

nadwozie: 2

1

2

3

background image

Instrukcja przełączająca switch vs. instrukcja case z Pascala

Instrukcja przełączająca switch vs. instrukcja case z Pascala

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

36

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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.

background image

Instrukcja przełączająca switch, zasada działania

Instrukcja przełączająca switch, zasada działania

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

37

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

cout << "\nChyba lubisz eleganckie limuzyny!";

cout << "\nWidze, ze ciagnie Cie w teren!"

cout << "\nTy to pewnie lubisz szybka jazde!"

nadwozie == 2

nadwozie: 2

1

2

3

break;

break;

break;

background image

Instrukcja przełączająca switch + iteracja do-while = proste menu

Instrukcja przełączająca switch + iteracja do-while = proste menu

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

38

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

Połączenie instrukcji iteracyjnej do-while oraz instrukcji przełączającej switch
pozwala na zorganizowanie prostego, ale użytecznego, menu konsolowego.

background image

Instrukcja przełączająca switch + iteracja do-while = proste menu

Instrukcja przełączająca switch + iteracja do-while = proste menu

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

39

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

. . .
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();
. . .

background image

Typ zmiennej sterującej a typ wartości przypadku

Typ zmiennej sterującej a typ wartości przypadku

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

40

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

background image

Instrukcja przełączająca switch — przykład wykorzystania

Instrukcja przełączająca switch — przykład wykorzystania

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

41

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

background image

Instrukcja przełączająca switch — uwagi dodatkowe

Instrukcja przełączająca switch — uwagi dodatkowe

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

42

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

switch( error_code )
{
case -1 : cout << ”Blad!”;
break;

case 0 : cout << ”OK!”;
break;
}

Instrukcje nie muszą stanowić bloku:

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.

background image

Instrukcja iteracyjna while

Instrukcja iteracyjna while

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

43

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

while( wyra enie )

ż

instrukcja

while( wyra enie )

ż

{
ci g instrukcji

ą

}

Gdy iterowana jest jedna instrukcja:

Gdy iterowany jest ciąg instrukcji:

wyrażenie

instrukcja

prawda

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.

background image

Instrukcja iteracyjna while — sylwestrowe odliczanie ;-)

Instrukcja iteracyjna while — sylwestrowe odliczanie ;-)

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

44

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

background image

Od instrukcji while do instrukcji for

Od instrukcji while do instrukcji for

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

45

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

int licznik;

while( )
{
;

;
}

licznik = 10;

licznik > 0

licznik--

cout << endl << licznik << "..."

Inicjalizacja

Warunek

Ciało iteracji

Modyfikacja

int licznik;

for( ; ; )

licznik = 10

licznik > 0

licznik--

cout << endl << licznik << "..."

Inicjalizacja

Warunek

Modyfikacja

Ciało iteracji

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.

background image

Instrukcja iteracyjna for — ogólny schemat

Instrukcja iteracyjna for — ogólny schemat

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

46

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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-- << "..."

)

;

int licznik

;

for( licznik = 10; licznik > 0;

printf( ”\n%d...”, licznik-- )

)

;

C ++

ANSI C 89

background image

Instrukcje break i continue — wspomaganie iteracji i instrukcji switch

Instrukcje break i continue — wspomaganie iteracji i instrukcji switch

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

47

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

switch( klawisz )
{
case '1' : full_disk_format();
break;
case '2' : quick_disk_format();
break;
case '3' : check_disk();
break;
}

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.

klawisz = getchar();

while( klawisz != '\n' )
{
if( klawisz == 'k' )
break;
else
. . .
}

background image

Instrukcje break i continue — wspomaganie iteracji i instrukcji switch

Instrukcje break i continue — wspomaganie iteracji i instrukcji switch

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

48

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

. . .

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

}
. . .

background image

Iteracyjne przetwarzanie ciągów liczbowych

Iteracyjne przetwarzanie ciągów liczbowych

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

49

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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.

background image

Wyznaczanie sumy ciągu liczb o znanej liczbie elementów

Wyznaczanie sumy ciągu liczb o znanej liczbie elementów

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

50

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

const int

MAKS_LB_KURSOW = 24

;

int main()
{
float

kurs

,

sumaryczny

;

int

lb_kursow

;

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

#include <cstdlib>
#include <iostream>
using namespace std;

background image

Iteracyjne przetwarzanie ciągów liczbowych

Iteracyjne przetwarzanie ciągów liczbowych

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

51

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

Problem 2

Uzupełnić poprzedni program o wyznaczanie kursu minimalnego i maksy-
malnego.

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?

3.50 3.52 3.48

• • •

3.47

1

2

3

24

3.50

3.52 3.48

• • •

3.47

1

2

3

24

Ten element potraktujemy
osobno — on będzie startową
wartością minimalną,
maksymalną i sumaryczną.

Te elementy obsłużymy
iteracyjnie, począwszy od
drugiego, porównując z
minimum, maksimum i
doliczając do sumy.

background image

Wyznaczanie sumy, min. i maks. ciągu liczb o znanej liczbie elementów

Wyznaczanie sumy, min. i maks. ciągu liczb o znanej liczbie elementów

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

52

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

#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

background image

Wyznaczanie sumy, min. i maks. ciągu liczb o znanej liczbie elementów

Wyznaczanie sumy, min. i maks. ciągu liczb o znanej liczbie elementów

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

53

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u


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

background image

Iteracyjne przetwarzanie ciągów liczbowych

Iteracyjne przetwarzanie ciągów liczbowych

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

54

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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.

background image

Iteracyjne przetwarzanie ciągów liczbowych

Iteracyjne przetwarzanie ciągów liczbowych

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

55

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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.

background image

Suma, średnia, minimum, maksimum dla nieograniczonego ciągu liczb

Suma, średnia, minimum, maksimum dla nieograniczonego ciągu liczb

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

56

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

#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

background image

Suma, średnia, minimum, maksimum dla nieograniczonego ciągu liczb

Suma, średnia, minimum, maksimum dla nieograniczonego ciągu liczb

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

57

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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

background image

Suma, średnia, minimum, maksimum dla nieograniczonego ciągu liczb

Suma, średnia, minimum, maksimum dla nieograniczonego ciągu liczb

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

58

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u


cout << endl << "Nacisnij Enter by zakonczyc...";
cin.ignore();
cin.get();

return EXIT_SUCCESS;
}

2/3

background image

To co poprzednio ale inaczej — wersja mocno niestrukturalna!

To co poprzednio ale inaczej — wersja mocno niestrukturalna!

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

59

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

#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

background image

Iteracja

Iteracja

for

for

bez warunku staje się pętlą,

bez warunku staje się pętlą,

break

break

pozwoli na jej zakończenie

pozwoli na jej zakończenie

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

60

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

for(

sumaryczny = licznik = 0

; ;

licznik++

)

{
cout << '>' << flush;
cin >> czas;

// 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

Brak warunku — to jest pętla

background image

Być może nie wprowadzono żadnych danych

Być może nie wprowadzono żadnych danych

Podstawy programowania w C++

Podstawy programowania w C++

Copyright © Roman Simiński

61

Strona :

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

I n s t r u k c j e s t e r u j ą c e w y k o n a n i e m p r o g r a m u

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


Document Outline


Wyszukiwarka

Podobne podstrony:
cxx w02 id 126188 Nieznany
RBD W02
w02
RBD W02
Gazownictwo w02
inf2 w02
AISD W02
2wekten w02
KiDUM p w02 CG
c cxx w04
Biochemia - W02 - 09.10.2000, Wykład II
anl1 w02 zima2012 id 65272 Nieznany (2)
c cxx w09
anl1 w02 lato2009 id 6527

więcej podobnych podstron