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
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;
;
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
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ą.
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ą.
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ą.
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
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:
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!" )
. . .
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
???
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?
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";
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.
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!
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.
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.
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
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
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.
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
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.
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
.
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
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
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
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
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.
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;
}
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
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
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
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?
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
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
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
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.
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;
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.
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();
. . .
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;
}
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
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.
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.
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;
}
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.
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
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
. . .
}
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
}
. . .
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.
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;
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.
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
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
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.
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.
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
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
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
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
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
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