background image

Ten dokument został pobrany ze strony 

http://it.hk.pl/

Lekcja 20 : Typ logiczny i wyliczeniowy

Wprowadzenie

Znasz ju

ż

 podstawowe typy danych i operatory. W ostatnim czasie przedstawiłem Ci tablice, p

ę

tle

i wiele ró

ż

nych przydatnych instrukcji. W tej lekcji poznasz 2 kolejne typy danych, z czego jeden jest

bardzo wa

ż

ny i u

ż

ywasz go nie

ś

wiadomie niemal przez cały czas trwania tego kursu. 

Typ logiczny

Typ   logiczny   jest   tak   naprawd

ę

  jednym   z   najprostszych   typów   j

ę

zyka   C++.   Zmienna   typu

logicznego mo

ż

e bowiem przyjmowa

ć

 tylko dwie warto

ś

ci: prawd

ę

 albo fałsz. 

Typ logiczny w C++ to: 

bool - typ logiczny (przyjmuje tylko 2 warto

ś

ci: true lub false

Typ logiczny jest w rzeczywisto

ś

ci bardzo cz

ę

sto wykorzystywany, nawet je

ś

li nie u

ż

ywali

ś

my do

tej pory zmiennej typu  bool. Tak naprawd

ę

 w ka

ż

dym wyra

ż

eniu logicznym, kiedy mamy operatory

&&  lub  ||  oraz kiedy u

ż

ywamy instrukcji warunkowej lub operatora warunkowego, tam tak naprawd

ę

jest wykorzystywany typ logiczny. 

Zacznijmy   jednak   od   pocz

ą

tku.   Oto   prosty   przykład,   w   którym   tworzymy   zmienn

ą

  typu  bool 

i wypisujemy jej warto

ść

 na ekran. 

#include<iostream>

using namespace 

std

;

int

 

main

 

()

{

  bool 

logiczny

;

  logiczny

=true;

  cout

 <<

"Zmienna logiczny ma wartosc "

<<

logiczny

<<

'\n'

;

  logiczny

=false;

  

cout 

<<

"Zmienna logiczny ma teraz wartosc "

<<

logiczny

<<

'\n'

;

  

logiczny

=2;

  cout 

<<

"Zmienna logiczny ma teraz wartosc "

<<

logiczny

<<

'\n'

;

  cout 

<<

"\nNacisnij ENTER aby zakonczyc...\n"

;

  getchar

();

  return 

0

;

}

Autor: Marcin Nabiałek    Kontakt e-mail: 

it-developer@wp.pl

Dokument jest chroniony prawem autorskim © 2004

background image

Ten dokument został pobrany ze strony 

http://it.hk.pl/

W przykładowym programie mo

ż

na tak naprawd

ę

 dostrzec wiele wydawałoby si

ę

 dziwnych rzeczy.

Przede wszystkim, kiedy zmienna ma warto

ść

 true, na ekran zostaje wypisane 1, a kiedy zmienna ma

warto

ść

 false na ekran zostaje wypisane 0. 

Faktycznie - tak zostało przyj

ę

te w j

ę

zyku C++, jednak w rzeczywisto

ś

ci to nie b

ę

dzie miało dla

Ciebie 

ż

adnego znaczenia. Tak naprawd

ę

 poza celami poznawczymi, tak jak tutaj, nikt nie wypisuje

warto

ś

ci   zmiennej   typu   logicznego   na   ekran,   bo   nie   jest   to   tak   naprawd

ę

  w  

ż

aden   sposób

uzasadnione. 

Dziwniejsz

ą

  spraw

ą

  jest   to,  

ż

e   zmiennej   zostaje   przypisana   warto

ść

  liczbowa  2,   mimo  

ż

e

wspominałem,  

ż

e  zmienna  typu   logicznego   mo

ż

e   przyjmowa

ć

  tylko   dwie  warto

ś

ci:   false   albo   true.

Rzeczywi

ś

cie   tak   wła

ś

nie   jest,   jednak   dokonuj

ą

c   przypisania   jakiejkolwiek   warto

ś

ci   niezerowej   do

zmiennej logicznej, zostaje ona potraktowana jako prawda, czyli  true  (Tylko 0 jest traktowane jako
fałsz, czyli false). 

Potwierdza to wynik po wypisaniu na ekran - zmienna nie ma bowiem warto

ś

ci 2, tylko 1, a 1 jak

ju

ż

 wspomniałem przy wypisaniu warto

ś

ci zmiennej typu logicznego, oznacza po prostu true. Jak wi

ę

c

widzisz wszystko si

ę

 zgadza. 

Typ logiczny a instrukcje warunkowe

W   rzeczywisto

ś

ci   wsz

ę

dzie   tam,   gdzie   s

ą

  stosowane   instrukcje   warunkowe   if,   operatory

warunkowe, czy instrukcja switch, tam niejawnie jest stosowany typ logiczny. 

Przykładowo,   wyra

ż

enie  2<3  zwraca   warto

ść

  logiczn

ą

 true,   a   wyra

ż

enie  5!=5  zwraca   warto

ść

logiczn

ą

 false.   Wła

ś

nie   tego   typu   wyra

ż

enia   s

ą

  stosowane   we   wspomnianych   przeze   mnie

konstrukcjach. Na dodatek, równie

ż

 we wszystkich typach p

ę

tli jako warunki ko

ń

cowe pojawiaj

ą

 si

ę

wyra

ż

enia, które w rzeczywisto

ś

ci zwracaj

ą

 true lub false

Mam   nadziej

ę

,  

ż

e   tym   sposobem   przekonałem   Ci

ę

,  

ż

e   typ   logiczny   jest   bardzo   powszechnie

stosowany w j

ę

zyku C++. Jest on zarazem bardzo prostym typem, wi

ę

c nie ma co dłu

ż

ej zastanawia

ć

si

ę

 nad jego znaczeniem, tylko po prostu 

ś

wiadomie go u

ż

ywa

ć

 w swoich programach. 

Je

ś

li spojrzysz na program znajduj

ą

cy si

ę

 w lekcji  

Instrukcja break

, to zwró

ć

 uwag

ę

 na zmienn

ą

end.   To   wła

ś

nie   typowa   zmienna   typu   logicznego,   chocia

ż

  wtedy   u

ż

yli

ś

my   typu  unsigned   int  z

prostego powodu, 

ż

e typ logiczny nie był Ci wtedy jeszcze znany. 

Postaraj si

ę

 teraz zmieni

ć

 program tak, aby został u

ż

yty typ logiczny a działanie si

ę

 nie zmieniło.

Zmie

ń

 równie

ż

 przypisania warto

ś

ci na warto

ś

ci typowe dla typu logicznego (true i false zamiast 1 i 0).

Typ wyliczeniowy - wprowadzenie

Wszystkie typy, które do tej pory udało Ci si

ę

 pozna

ć

 charakteryzowała jedna wspólna cecha - do

zmiennej tego typu mogli

ś

my przypisa

ć

 wszystkie dopuszczalne warto

ś

ci dla danego typu. Dla

typu  całkowitego  mogli

ś

my  przypisa

ć

 dowoln

ą

 liczb

ę

 całkowit

ą

  z pewnego zakresu,  a  do zmiennej

typu znakowego mogli

ś

my przypisa

ć

 dowolny znak. 

Oczywi

ś

cie   takie   podej

ś

cie   mo

ż

e   wydawa

ć

  Ci   si

ę

  całkiem   poprawne.   Rzeczywi

ś

cie,   w   wielu

wypadkach jest to po

żą

dane, a wr

ę

cz idealne rozwi

ą

zanie. Co jednak, gdyby

ś

my chcieli ograniczy

ć

ten   zbiór   warto

ś

ci?   Co   gdyby

ś

my   chcieli   na   przykład   stworzy

ć

 nowy   typ,   dla   którego  s

ą

dopuszczalne tylko 3 warto

ś

ci

Autor: Marcin Nabiałek    Kontakt e-mail: 

it-developer@wp.pl

Dokument jest chroniony prawem autorskim © 2004

background image

Ten dokument został pobrany ze strony 

http://it.hk.pl/

Po pierwsze, takie podej

ś

cie mo

ż

e by

ć

 uzasadnione. Powiedzmy, 

ż

e chcemy na przykład napisa

ć

program o ró

ż

nych pojazdach i uznajemy, 

ż

e w programie chcemy mie

ć

 pojazdy nale

żą

ce do jednego

z   trzech   typów   (np.   bezsilnikowe,   jednosilnikowe   i   wielosilnikowe).   Nie   chcemy   mie

ć

  mo

ż

liwo

ś

ci

przypisywania do typu pojazdu 

ż

adnej innej warto

ś

ci. 

Mo

ż

emy   podej

ść

  w   ró

ż

ny   sposób   do   problemu.   Na   przykład   mo

ż

emy   zało

ż

y

ć

,  

ż

e   b

ę

dziemy

zawsze   pami

ę

ta

ć

,  

ż

e   nie   wolno   nam   przypisa

ć

  do   pewnej   zmiennej   typu   np.   całkowitego   innych

warto

ś

ci   poza   0   (bezsilnikowe),   1   (jednosilnikowe)   i   2(wielosilnikowe).   Nie   musz

ę

  Ci

ę

  chyba

zapewnia

ć

ż

e jest to podej

ś

cie zupełnie nie na miejscu, bowiem nawet Ty w ko

ń

cu zapomnisz, co

znaczy 0, co 1 a co 2 i w ko

ń

cu przypiszesz do zmiennej inn

ą

 warto

ść

 np. 3. 

Troch

ę

 innym podej

ś

ciem byłoby sprawdzanie za pomoc

ą

 instrukcji warunkowej, czy przypisujemy

do   zmiennej   dopuszczaln

ą

  warto

ść

,   a   je

ś

li   nie,   to   podj

ę

cie   pewnych  

ś

rodków   zaradczych.   To

rozwi

ą

zanie oczywi

ś

cie jest nieco lepsze, jednak nadal nie byłoby tym czego oczekujemy. 

Przede   wszystkim   musieliby

ś

my   wsz

ę

dzie   za   pomoc

ą

  instrukcji   warunkowej   sprawdza

ć

,   czy

warto

ść

 jest dopuszczalna dla naszego "nowego typu" - nie musz

ę

 Ci

ę

 przekonywa

ć

ż

e zaciemniłoby

to w znacznym stopniu kod Twojego programu. 

Dodatkowo,   nadal   zmiennej   przypisywaliby

ś

my   zwykłe   liczby   typu   0,   1,   2,   co   przy   pierwszym

spojrzeniu na kod Twojego programu, nie znaczy oczywi

ś

cie zupełnie nic. Nale

ż

ałoby stworzy

ć

 gdzie

ś

na pocz

ą

tku programu komentarz, 

ż

e 0 to pojazdy bezsilnikowe, 1 to pojazdy jednosilnikowe, a 2 to

pojazdy wielosilnikowe. 

Tak   naprawd

ę

  za   ka

ż

dym   razem,   kiedy   Ty   lub   kto

ś

  inny   chciałby   doda

ć

  co

ś

  do   programu,

musiałby sobie ponownie przypomina

ć

 co znaczy 0, co znaczy 1, a co znaczy 2. 

Typ wyliczeniowy pozwoli Ci natomiast  tworzy

ć

 nowe typy danych  i to bez wi

ę

kszego wysiłku.

Dodatkowo, cał

ą

 odpowiedzialno

ść

 za poprawno

ść

 typu danych przerzucisz na kompilator

Typ wyliczeniowy - podstawy

Wiesz ju

ż

 w przybli

ż

eniu do czego słu

ż

y typ wyliczeniowy - za jego pomoc

ą

 tworzysz typy danych,

dla których zmienne mog

ą

 przyjmowa

ć

 tylko pewn

ą

 okre

ś

lon

ą

 liczb

ę

 warto

ś

ci. To kompilator a nie Ty

zatroszczy si

ę

, aby nie przypisa

ć

 do zmiennej nowego typu 

ż

adnej innej warto

ś

ci. 

Schematycznie definicj

ę

 typu wyliczeniowego zapisujemy tak: 

enum 

nazwaTypu

 {

pierwszaWartosc

drugaWartosc

, ..., 

ostatniaWartosc

};

Od razu zaznacz

ę

ż

e jest to uproszczona definicja typu, jednak w naszym przykładzie

dotycz

ą

cym pojazdów, taka definicja mogłaby w zupełno

ś

ci wystarczy

ć

nazwaTypu  to wymy

ś

lona przez nas nazwa typu, a warto

ś

ci to nazwy dopuszczalnych warto

ś

ci

dla naszego typu, ale musz

ą

 to by

ć

 zwykłe nazwy - takie jak nazwy zmiennych. Niestety nie mo

ż

emy

tutaj napisa

ć

 0, 1 czy 2, bowiem nie s

ą

 to poprawne nazwy zmiennych (a w rzeczywisto

ś

ci poprawne

nazwy identyfikatorów). 

Autor: Marcin Nabiałek    Kontakt e-mail: 

it-developer@wp.pl

Dokument jest chroniony prawem autorskim © 2004

background image

Ten dokument został pobrany ze strony 

http://it.hk.pl/

Poni

ż

ej przedstawiam przykładowy program z u

ż

yciem typu wyliczeniowego: 

#include<iostream>

using namespace 

std

;

int

 

main

 

()

{

  

// utworzenie typu

  enum 

typPojazdu

 {

bezsilnikowe

jednosilnikowe

wielosilnikowe

}; 

  // utworzenie zmiennej noweg typu

  typPojazdu 

mojPojazd

// lub enum typPojazdu mojPojazd;

  mojPojazd

=

bezsilnikowe

;

 // przypisanie wartosci zmiennej

  if (

mojPojazd

==

bezsilnikowe

)

  

   cout 

<<

"Twoj pojazd nie ma silnika.\n"

;

  else  

     cout

 <<

"Twoj pojazd ma silnik.\n"

;

  mojPojazd

=

wielosilnikowe

;

 // przypisanie nowej wartosci zmiennej

  if (

mojPojazd

==

jednosilnikowe

)

 

    cout

 <<

"A teraz Twoj pojazd ma tylko jeden silnik.\n"

;

  else

     cout 

<<

"A teraz Twoj pojazd ma wiecej niz jeden silnik.\n"

;

  cout 

<<

"\nNacisnij ENTER aby zakonczyc...\n"

;

  getchar

();

  return 

0

;

}

Jak widzisz, program jest całkiem prosty - na pocz

ą

tku tworzymy nasz typ wyliczeniowy o nazwie

typPojazduz trzema dopuszczalnymi warto

ś

ciami. Pó

ź

niej tworzymy zmienn

ą

 naszego nowego typu

(zauwa

ż

ż

e w tym miejscu mo

ż

na, cho

ć

 nie trzeba doda

ć

 po raz drugi słowo enum). 

Nast

ę

pnie, jak widzisz, dokonujemy przypisania warto

ś

ci do zmiennej. Spróbuj przypisa

ć

 do

zmiennej jakiekolwiek inne warto

ś

ci (poza tymi trzema wymienionymi w definicji typu) i zobaczysz, 

ż

e

kompilator zaprotestuje. Zauwa

ż

 te

ż

ż

e wszystkie inne operacje s

ą

 jak w przypadku zwykłego typu -

mo

ż

emy bez problemu dokonywa

ć

 chocia

ż

by operacji porównania. 

Typ wyliczeniowy a typ całkowity

Zacznijmy od przykładu - zmodyfikuj

ę

 teraz nieco nasz pocz

ą

tkowy program, aby ukaza

ć

 Ci

pewne zjawisko: 

Autor: Marcin Nabiałek    Kontakt e-mail: 

it-developer@wp.pl

Dokument jest chroniony prawem autorskim © 2004

background image

Ten dokument został pobrany ze strony 

http://it.hk.pl/

#include<iostream>

using namespace 

std

;

int

 

main

 

()

{

  enum

 

typPojazdu

 {

bezsilnikowe

, j

ednosilnikowe

wielosilnikowe

}; 

  typPojazdu

 

mojPojazd

  mojPojazd

=

bezsilnikowe

  cout

 <<

"Pojazd teraz to "

<<

mojPojazd

<<

'\n'

;

  mojPojazd

=j

ednosilnikowe

  cout 

<<

"Pojazd teraz to "

<<

mojPojazd

<<

'\n'

;

  mojPojazd

=

wielosilnikowe

  cout

 <<

"Pojazd teraz to "

<<

mojPojazd

<<

'\n'

  cout 

<<

"\nNacisnij ENTER aby zakonczyc...\n"

;

  getchar

();

  return 

0

;

}

Jak widzisz, w programie usiłujemy wypisa

ć

 warto

ść

 naszej zmiennej i za ka

ż

dym razem

otrzymujemy liczby całkowite: 0, 1 i 2. 

Od razu chc

ę

 zaznaczy

ć

ż

e to zjawisko jest zupełnie inne ni

ż

 zjawisko wyst

ę

puj

ą

ce w przypadku

typu logicznego. Tam równie

ż

, gdy chcieli

ś

my wypisa

ć

 warto

ść

 zmiennej logicznej, otrzymywali

ś

my

na ekranie warto

ś

ci liczbowe. 

O ile jednak w tamtym wypadku tak zostało przyj

ę

te, 

ż

e prawda zostanie wypisana jako 1, a fałsz

jako 0, to tutaj to nie jest 

ż

adne przyj

ę

cie podczas wypisania - taka jest rzeczywista warto

ść

 zmiennej!

Je

ś

li zastanawia Ci

ę

, dlaczego tak jest, to napisz

ę

 krótko - typ wyliczeniowy jest w rzeczywisto

ś

ci

typem całkowitym! Zapami

ę

taj to sobie dobrze, bowiem wynika z tego kilka kwestii. 

Teraz czas przedstawi

ć

 pełny schematyczny sposób definicji typu wyliczeniowego. A wygl

ą

da on

nast

ę

puj

ą

co: 

enum 

nazwaTypu

 {

nazwa1

=

wartosc1

nazwa2

=

wartosc2

, ..., 

 nazwaN

=

wartoscN}

;

Jak   zatem   mo

ż

esz   si

ę

  ju

ż

  domy

ś

li

ć

,   w   poprzednim   wypadku   podali

ś

my   jedynie   nazwy

dopuszczalnych warto

ś

ci typu, a nie podali

ś

my ich rzeczywistych warto

ś

ci. Oznaczone tutaj wartosc1,

wartosc2 itd. to warto

ś

ci całkowite - zatem ka

ż

dej naszej warto

ś

ci typu w rzeczywisto

ś

ci odpowiada

pewna warto

ść

 całkowita. 

Zanim   wyja

ś

ni

ę

  Ci   do   czego   mo

ż

e   posłu

ż

y

ć

  rzeczywista   warto

ść

  całkowita,   postaram   Ci   si

ę

przybli

ż

y

ć

 kilka reguł dotycz

ą

cych przypisywania warto

ś

ci w typie numerycznym. 

Po pierwsze, nie musimy koniecznie okre

ś

la

ć

 warto

ś

ci całkowitych (tak wła

ś

nie zrobili

ś

my w

pierwszym przykładzie), bowiem mo

ż

e to nam nie by

ć

 do niczego potrzebne. 

Warto

ś

ci   przypisane   poszczególnym   warto

ś

ciom   naszego   typu   mog

ą

  by

ć

 tylko   całkowite  -

niestety nie mo

ż

na przypisywa

ć

 tam warto

ś

ci zmiennoprzecinkowych, a wszystko to dlatego, 

ż

e typ

wyliczeniowy jest typem całkowitym (a nie na przykład typem float). 

Autor: Marcin Nabiałek    Kontakt e-mail: 

it-developer@wp.pl

Dokument jest chroniony prawem autorskim © 2004

background image

Ten dokument został pobrany ze strony 

http://it.hk.pl/

Je

ś

li nie okre

ś

limy pocz

ą

tkowej warto

ś

ci całkowitej, to domy

ś

lnie wyliczanie zacznie si

ę

 od 0

Ka

ż

da nast

ę

pna warto

ść

 b

ę

dzie o 1 wi

ę

ksza, o ile nie okre

ś

limy inaczej. Dlatego te

ż

 je

ś

li nie

okre

ś

limy w ogóle warto

ś

ci to pierwsza warto

ść

 0, a ka

ż

da nast

ę

pna jest o 1 wi

ę

ksza, czyli 1, 2, 3 itd. 

Mo

ż

emy w dowolnym miejscu okre

ś

li

ć

 rzeczywist

ą

 warto

ść

 całkowit

ą

, pami

ę

taj

ą

c, 

ż

e je

ś

li dla

nast

ę

pnej warto

ś

ci nie b

ę

dzie okre

ś

lona  rzeczywista  warto

ść

 całkowita, to wówczas b

ę

dzie ona o 1

wi

ę

ksza od podanej jawnie. 

Rzeczywiste  warto

ś

ci całkowite mog

ą

 si

ę

 powtarza

ć

  - zazwyczaj jednak i tak okre

ś

lisz ró

ż

ne

warto

ś

ci, ale czasami ta cecha mo

ż

e si

ę

 przyda

ć

Teraz   troch

ę

  przykładów, 

ż

eby  zobrazowa

ć

  Ci  przedstawione  powy

ż

ej  reguły  i  upewni

ć

  si

ę

,  

ż

e

wszystko rozumiesz. Nie b

ę

d

ę

 ju

ż

 ich komentował: 

enum 

mojTyp

 {

a

b

c

d

e

,

 f

g

};

 // wartosci: 0, 1, 2, 3, 4, 5, 6

enum 

mojTyp

 {

a

=

3

b

c

d

e

,

 f

g

}; 

// wartosci: 3, 4, 5, 6, 7, 8, 9

enum 

mojTyp 

{

a

b

c

d

=

0

e

,

 f

g

}; 

// wartosci: 0, 1, 2, 0, 1, 2, 3

enum 

mojTyp

 {

a

=

3

b

c

=

3

d

e

=

2

f

g

=

7

};

 // wartosci: 3, 4, 3, 4, 2, 3, 7

enum 

mojTyp

 {

a

=

3

b

=

3

c

=

3

d

=

3

e

=

3

,

 f

=

3

g

=

3

}; 

// wartosci: 3, 3, 3, 3, 3, 3, 3

enum 

mojTyp

 {

a

=

60

b

=

0

c

d

e

,

 f,

 

g

}; 

// wartosci: 60, 0, 1, 2, 3, 4, 5

Mam nadziej

ę

ż

e powy

ż

sze przykłady rozja

ś

niły Ci, w jaki sposób s

ą

 wyznaczane warto

ś

ci dla

poszczególnych elementów. 

Mimo,  

ż

e   jak   ju

ż

  wiesz,   zmienna   typu   wyliczeniowego   tak   naprawd

ę

  przyjmuje   rzeczywisto

ś

ci

całkowite, to jednak nie b

ę

dziemy mogli przypisa

ć

 do niej warto

ś

ci całkowitej. Jest to wła

ś

nie t

ą

 du

żą

zalet

ą

 - osi

ą

gn

ę

li

ś

my to co chcieli

ś

my. 

W  powy

ż

szych przykładach nawet je

ś

li a miałoby warto

ść

 0, to do zmiennej mo

ż

emy przypisa

ć

tylko a, natomiast warto

ś

ci 0 przypisa

ć

 nie mo

ż

emy. Dzi

ę

ki temu unikn

ę

li

ś

my przypisywania nic nie

znacz

ą

cych warto

ś

ci i konieczno

ś

ci czytania komentarzy, co oznacza np. warto

ść

 0 dla danego typu

wyliczeniowego. 

Wykorzystanie warto

ś

ci dla typu wyliczeniowego

Chc

ę

 Ci w ko

ń

cu pokaza

ć

, do czego mog

ą

 si

ę

 przyda

ć

 równie

ż

 warto

ś

ci całkowite zmiennych typu

wyliczeniowego. W  tym celu rozszerzymy nasz typ pojazdów i zało

ż

ymy, 

ż

e dla podanej pr

ę

dko

ś

ci

chcemy okre

ś

li

ć

 jak

ą

 cz

ęść

 pr

ę

dko

ś

ci generuje jeden silnik. 

W   powy

ż

szym   przykładzie   zauwa

ż

ysz,  

ż

e   dokonuj

ą

c   zwykłych   operacji   arytmetycznych   typu

dodawanie, mno

ż

enie itd. (tutaj akurat dzielenie) zmiennej typu wyliczeniowego ze zwykłymi liczbami

całkowitymi, taka zmienna zachowuje si

ę

 wła

ś

nie jak zwykła liczba, czyli jej warto

ść

 całkowita mo

ż

e

zosta

ć

 wykorzystana. 

Autor: Marcin Nabiałek    Kontakt e-mail: 

it-developer@wp.pl

Dokument jest chroniony prawem autorskim © 2004

background image

Ten dokument został pobrany ze strony 

http://it.hk.pl/

#include<iostream>

using namespace 

std

;

int

 

main

 

()

{

  int 

ktory

;

  int 

predkosc

;

  float 

predkoscSilnika

;

  enum 

typPojazdu 

bezsilnikowe

=

0

jednosilnikowe

dwusilnikowe

czterosilnikowe

=

4

,

wielosilnikowe

=

10

}; 

  enum 

typPojazdu

 

mojPojazd

  cout

 <<

"Nacisnij cyfre odpowiadajaca Twojemu typowi pojazdu i ENTER\n"

;

  // te wartosci tutaj NIE MUSZA sie zgadzac z wartosciami w typie wyliczeniowym

  cout

 <<

"1 - Pojazd bezsilinikowy\n"

;

  cout 

<<

"2 - Pojazd jednosilnikowy\n"

;

  cout 

<<

"3 - Pojazd dwusilnikowy\n"

;

  cout 

<<

"4 - Pojazd czterosinilnikowy\n"

;

  

cout

 <<

"5 - Pojazd wielosilnikowy\n"

;

  cin >>

ktory

;

  cin

.

ignore

();

  switch (

ktory

)

  {
     case 

1

mojPojazd

=

bezsilnikowe

; break;

     case 

2

mojPojazd

=

jednosilnikowe

; break;

     case 

3

mojPojazd

=

dwusilnikowe

; break;

     case 

4

mojPojazd

=

czterosilnikowe

; break;

     case 

5

mojPojazd

=

wielosilnikowe

; break;

     default: 

mojPojazd

=

bezsilnikowe

;           

  }
 

 cout 

<<

"Podaj predkosc Twojego pojazdu (wieksza od zera): "

;

 

 cin 

>>

predkosc

;

  

cin

.

ignore

();

  if (

mojPojazd

==

bezsilnikowe

)

     predkoscSilnika

=

0

;

  else
   

  predkoscSilnika

=

predkosc

/

mojPojazd

;

  if (

predkoscSilnika

==

0

)

     

cout 

<<

"Gratulacje. Cala predkosc "

<<

predkosc

          <<

" tworzysz swoimi nogami\n"

;

  else
    

 cout

 <<

"Predkosc jednego silnika to okolo "

<<

predkoscSilnika

          <<

" bo "

<<

predkoscSilnika

<<

'*'

<<

mojPojazd

<<

'='

<<

predkosc

<<

'\n'

;

  cout 

<<

"\nNacisnij ENTER aby zakonczyc...\n"

;

  getchar

();

  return 

0

;

}

Autor: Marcin Nabiałek    Kontakt e-mail: 

it-developer@wp.pl

Dokument jest chroniony prawem autorskim © 2004

background image

Ten dokument został pobrany ze strony 

http://it.hk.pl/

Podsumowanie

W tej lekcji przedstawiłem Ci dwa nowe typy danych: typ logiczny i typ wyliczeniowy. Oba typy s

ą

wa

ż

ne w j

ę

zyku C++, a bez typu logicznego tak naprawd

ę

 nie da si

ę

 w ogóle obej

ść

. Dlatego je

ś

li nie

wszystko udało Ci si

ę

 zrozumie

ć

, zach

ę

cam do ponownego przeczytania tej lekcji. 

Autor: Marcin Nabiałek    Kontakt e-mail: 

it-developer@wp.pl

Dokument jest chroniony prawem autorskim © 2004