of 124
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
1/124
@ Ing.
Miroslav
Virius,
CSc.,2002
Vydal: Neocortex sPol. s r. o.
Na
Rovnosti
224513,
130
00
Praha
3
TeI.:
284
860
942,284
860
882
http:
/www.neo.czl
Tisk:
EKoN,
dru stvo,
ihlava
Wirrtlrlws.jc
cgistrovan
bchodn
nmka
Micnl,,xl| 't
,tlr1ttlntIitltt
( ) l l r. zky
1lavouka
h
a
mouchy
o
task
l..tlrcc
'| ip
Ar t
.|irr
riplrrlrrri
ilzvy
tnohou
bjt
ochrannyrni
nnrkarrri
tclxt
tt1.l,is|ttrt'lr
rryrrri
rclrrirrlrryltti
ttitlrrkarni
slrr nj 'ch
lrustn |
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
2/124
- ' l ' l ' i r l i r ' l 'oxt...............
Vy t vt l .c r r nstance'... ' . ....
A r ttltttittckll
sprva
pamti.
'l
SIr li l i
i
r". ikIady
'l
I l i r rzcrt i krv..............
I r lyv progl lt i l l . ...............
. l .t
St 'ztt i t t t t
I
. t , i 'l r .cnyeznam.... ' ' . ' . ' .
l )t ' ( ' l \ ( 'z l l l l ll l (1 ... . . . . . . . . . . . . . . . . . . .
I tr lr lt 'ntr ' lr lrtt 'eL:zi lanlu
.I
l
V y Ic1 t r r 1 | | l c s l [ l p
\
/, i t r ' i ruitnt '
ir()slr 'o
\
| Zri l ' l ; rr l rr i
roirrry
Kolncrtlr i i
. . . . . . . . . . . . .
|( i . l rv i i I t lv l t ' . . . . ..
lil
tl I
)i,
i i t
)i
/
l{ '
l ' ,
1 'l
rl
I
r,
I
9I
rr
't
1
r
.l
,r
I
'1ti
r lti
l i l l
lr ll
l l l '
l i l -=
l l l i
l i l ' i
l i l i i
l l l
l l l l
I l l l
ll l
lll
Ir crr
i
. ik i i l r lI
l :ipis
progutttttt
5. l 't 'oslot 'y.jrt tcrt
...........
| ckliu rcc
ploskrru
nren
S1rtrt lv ii r r rosttlr
jmcn
(
lobiilrri
rostor.jmcn
rrsirrg.............
5.1 Al l ibuty
Nc\| itcl .rtr i lr t rty..........
(l
| ' r r lt t t t t t tl
(| i l toV
typy.'............
(t ,
l)rtlttt tltt...'.' ..'.. .l...
,
l .y1ly
r
rt .r l l t t lt t t............. ' . .
( l ']
|
r lrI lr
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
3/124
Parametry
etod ...........
Nestatick
etody........'..
Statick
etody....'.....
Lokln
promnn
Rekurze..........
Destruktor......
9.6Vlastnosti.............,....
Deklarace
vlastnosti
T i da
Bod.'....
9'7 Ddn
Konstruktor
otomka
base,..............
P edefinovan
etody
a vlastnosti.....
Nepolymorfn chovn
pedefinovanj'ch metod
Po|ymorfni
hovn
metod.............
P k l ad
grafi
k objekty.... ' . .....
Abstraktni
metody,
abstraktn
dy..........'..
Zapc etn
dy,
ape etn
etody
9.tl
Struktury
t dy
l
)
) a l Iastnosti d..............
|0. Rozhran
............. '....
l)ck
arace a irnp|em entace
ozhran......
P ou i t
ozhrani
...... ' . .... ' . ....
K|onovn
bjektt...... ' . .. '
Soznam
ako
(t mr)
tandardn
ontejner......'.
l
().2
ct ovn
pertoru
Zk|adni
ravidla..'......
I)oklaraoc
pet en ho
pertoru.'......
Ncp mo
ietovan
pertory''.....
N ktcr pertory
vo vojice
Komp|exn
s la ' . . .' . . . . . ' .. . . .
Konverzn
portor.'.''...''
lndexovni.....
l().3 dlosti
l)olcgt
ro
d|ost'....
l)r:kIaracc
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
4/124
Uvod
V t to
nize se
seznm te
e
zklady
programovac ho
azyka
C#,
ktt.lt
jo
lravou
ovinkou
po tku et ho
is c i let .
niha
je
ur ena
.ll)|ll,l
tyIn
za te n k rm'
proto
nepedpokldm,
e byste
mli
ja|
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
5/124
trllttili l tttr
whl lr
Ar r, ly l r ' ,
ffir
dh
cl
ob
s
Nav c zkladn nstroje
pro
vyvoj
program l
v C#
jsou
k disptlzt.
zdarma
-
a
pokud
to
nepekaz
njak soudn
procesy'
tak zdallrrl
z lstanou;
prrm
kapitole
Se do tete,
de
a
ak
je
m
ete
skat'
Pokud znte mou knihu
Java
pro
zelen e,
e
vy la v nakladalc|slrl
Neocortex
v roce 2001' zjistite, enkter
sti to nihy se
nii;rlr.I
n
podobaj .
j jsem
si toho v iml. Drivodem
je
pedev m
krllr.r.
trost, e nkter
ysy
C#
jsou
npadn
podobn
odpov daj c m
ysirrrr
Javy, a
proto
i v .klad o nich mus bjt
podobnj'.
Typografick onvence
Kurziva z;namen
ztraznni. P eme ak tak nov zavdn cr
rrlitri
V
popisech
syntaxe
a,ryka
C# ozna uje
ojmy,
kter
e
tolllr
r'a|
tllc vyjasnit
(tzv.
neterminln
symboly).
. l.u n
p eme popisu
Syntaxe symboly, kter ze
p mo l;rs;l|
hr
pr()gramu tzv'
terminln ymboly).
Noproporcionln m
smem
eme
kzky
program t,
ysltr1ly
1rrt-
t a ctak
| ov
lova, dentifiktory p.
'l.cnto
yrnbol
zna ujeonec
p kladu.
|{u i kapozoruje a m sta, ter i zas|ou ivy enou ()Z(||.ttl|hl
|)avoukupozoruje na informace, kter ze
naj tna intcrrlclrr'
71rtr|t
c||ajdc
o
zdrojov
oubory
pik|adri
t to nihy.
T.ato
kona
upozorujena
poznmky
u r en
qdev m
lcruiiiitrt.
zna.i
programovac
azyk
C
nebo
C++. Pokud tento
.jitzyh
rr.ri
rrtu ctc.jcignorovat'
t
J.ato kona upozorr"rjea
poznmky
u r en
cdev n r
]|crri i|. i i lrr,
zna. j
rogramovaci
azyk
Java. Pokud tcnto
azyk
noznii lc. | l l l 'Fl
ignoruvat.
Moucha
upozorujona tno n
progralntorsk
hyby
i| tl i l
t| l l
it
prrlbIcnralick/t
t t s ta '
Zdrojov
exty
p k|ad
l ' l1rIrrotIrrl.jtl vr:xty oolr
k Iat l ii
lrjtrr
l l i lry
si rrtricIt.
rl11|
z it t lct .t tclt rv( l
t t lrcsy WWV .|](\().r
zo str t l lky ttt lv it t t |rr rrt ir
kt lt t t1rt . i t lt r lv t lry
)r()gr i|| l lctr l
)KZIP, a t rl v c l r r tt lt .cst iIrrvr i
' .t t rtL
V
lcx lrt
krr i lry
sc
t t it r
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
6/124
1
Ne
pravdu a neme
Ne za neme
rogranloval,
rr l | i
rytl|trlttt
c scznmit s
pojmy,
kter
budeme
pozdji
potebtrvitt,
)tlv ttle i kr ttcc
nco
o nejen o
po t a-
c h
programovac ch
jazyc|c|r,
r|c rrk
t
algoritmech a objektov
orientovan m rogramovlirr .Mtttl|tz lrt|rtrist zrte; pestovm
doporu uji uto kapitolu
alcs1ltri'llt tlt1
l .c s t,
bychom
si sjednotili
terminoloeii.
1,1
Po ta
o
po ta ch
e astotovo i
jakrl
t
,,stro'j oh
a zpracovnnforma-
c ...S t m vysta id , tcr
po t ir o
lastnnezajimaj , le chtj
vypadat
nformovan.
ovem
prograrntor,
to i ten nejzelenj
ze|en , us
po ta ch
d t
ecc.jen
trochu
c.
S
trochou
zjednoduen ri eme ici, e
b n '
o t a
e skld ze
ry k|anich
st :
l Sou st, ter opravdu
,,po it,,,
edy zpracovv informace,a
rak i
innost echostatn ch
st
o ta e'
e
nuzyv
proce-
sor.
)
opera n
am
slou
pechodn mu
kldn dat
(informac ),
kter
po ta
pracovv,a
progamu'
edy
p kazu'
ter
r uji,
co
m dlat. Pou v
t
pro
ni tak nglick zklatka
RAM
(Ran-
dom Access Memory,
doslova
,pam
s nhodnlm
p stupem..).
Ve,
co
je
v t to
pamti,
se
pi
vypnut
po ita e
trati,
,,zapomene".
l
Vstupn
1Stupn
a zen
lou
o ta i
vjmn informaci s
okol m.Nejb nj
stupn
a izenijsou
klvesnice,my ,
skencr.
atd.Nejobvyklej .stupni a zensobn ch o ta rie obrazov-
ka monitorunebo
iskrna'Pro vstupn v 'stupn a izeni
e
pot|-
vzkratkaV/V nebo lo
(z
ang|ick honpuVoutpuD.
l
Vnj
trval)
pam
lou trval mu kldn
dat a
prograrrrii;
datav
n
se
p
ypnut
o ta e
eztrcej . zpravid|amnoltrr-
nsobn t apacitu
e opera n
am ,
le
prce
s n
c
tak
mnohonsobn
omalej
e
rce
opera n
amt
p ib| i n
i-
s ckr t t).l ako n . j
am
e
pou v aj ev n
rrngnctick
|i s
ky
(pevn
isk,
l iskctrr).ncs c
a st o
rltrivri
kr l I rtpttktn
| isk
(( ' l) .
)vl)).
(' #1 r ;c' +,trir\tt
* b"
l
Bity
opera n
am
opera n
pamti
je
tvoenaelektronickj'mi obvody,
kter mohou m t
dva
dobe rozliiteln staYy
-
nap . vypnuto nebo zapnuto' Jeden
z tchto stavri oblykle odpov d slici 0' druhj'
s lici l
'
Jakkoli
ridaje do
pamti proto
m eme zapisovat
jen
pomoc nul a
jedni ek,
v
tzv.
dvojkov
soustav. Ka dm sto,
na kterm eme apsat
ednu
s lici 0
nebo 1'
oma ujeme
jako
bit. opera n
pam
e
tedy
dlouh
ada
itri.
S
jednotlivfmi
bity v ak obvykle
nepracujeme, nebo
e
to nepohodl-
n.Proto se bity v opera n amti sdru uj do vt ch elkri. V dne -
nch
po ta ch
e zpravidla
pou vaj
kupiny velikosti 8
bitu, kter
se
nazlvaji bajty
(anglicky
byte, tj. slabika).
Aby mohl
po ta
pamt
snadno
pracovat,
jsou jednotliv
bajty,
kter
pam
tvo ,o slovny.
Po te n
ajt
m slo0, nsleduj c
m
slo
atd. Toto
poadov
slo e nazyv adresa bajtu'
(Na
nkte-
r ,ch
po ta ch,
etn PC,
je
zle itost s adresami
trochu slo itj ,
ale to mri emev souvislosti s
azykem
C#
ponechat
stranou.)
Bajty
Adresa
Datov
ypy a
promnn
Nen k jistit, enejmen slo,termri eedenbajt obsahovat,
se skld
z
osmi
nul
a
pedstavuje
v des tkovoustav ulu.
Nejvt-
akov slo e bude skldat
z osmijedni ek v des tkovoustav
pedstawje
55. To
je
alostnmlo; v b rj.ch
programech
e ob-
vykle objevuj daleko vt sla.
roto se
pro
ukldn dat obvykle
pou ivqi
rznelk kupinyza sebounsleduj c chajtri.
Ani to
ovem
nesta . ezmeme-li nap.dva za sebou
nsleduj c
bajty,mri eme o
nich ulo it el sla tozmez d 0 do
65 535
(od
0 do l
11 111111111ll1
ve dvojkov
oustav).okud
nm
ani
o
ncvysta ,
emevz t skupinu 4 nebo teba bajtr. en e
ani to
nc c
rob| m,
o dlat,kdy budeme
potebovat
pom sla' el-
n
s la,
naky nebo t eba
ogickhodnoty
(e
vyjaduji, e
njak
tvrzcn lat eboneplat ).
Mus nrc ody naj t
njakj' zptisob,kteqf nm umo n
eprezentovat
t|rrlrr
iiznj'oh
,druh
.
v
pamtipo ta e .
inj'mi slovy,
mus me ajt
zp tstlb,
iukj'rn
r i t
hodnot
ednozna n
iad me
kupinu bitu,
ktcr tltttlc ttltt toclnotu
cdstavovat
jak
futo hodnofu
po ta i
atkridovrtt.
Brtovy
yp
Mi i rrtro r l
tttlr|..
lrlhrxlnout,
c brrj l hodnotou010000o1 ude
ped-
a|nvtrvtl l ttttk
A.'
' ITr
rkupitrtt
ritti rnii c rr.j inj 'ch
okolnost
ak
1lft.t|nItlvrtvttl
cld.
l l lIrr.ktcrrttri t|cs lktrvr
tlttstav
rodnotu 5.
I Nc: tt lr lrtt 't l lr:rtr\t lrttttr ' l .l
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
7/124
Bajt
se stejnou
hodnotou
ale
mri e j't
i sou st
t ho
elku
s
na-
prosto n 'mvyznamem.
odtudje
vidt,
e
po ta i
esta
nt adresu
bajtu
nebo
bajt r,
ni-
mi
pracuje.Vedle adresy
mus
vdt,
ak
velkj,
risek
_
kolik
bajtu
m vzit
a
jak
mjeho
obsah
nterpretovat.
infmi
slovy,
mus znt
datovy
yp
honoty,
ter
e
tam ulo ena
mus
dt,
zda
de
o cel
s lo,
nak,
ogickou
hodnotu
td.
Datovj.typ
tak r uje
perace,
ter
ze s danou
hodnotou
provdt.
Cel
sla
ze nap klad
tat
ode tat,
naky
|ze spojovat
do etz-
cri, edy do souvisl hoexfu.
|'rttln nn
A dosud
sme
se hodnotami,
lo enj'mi
pamti,
zabyva|i
hlediska
po ta e;yn se na
n
pod vejme hlediska
programtora.
odnotu,
s
n udeme
ht t
e sv m
rogramu
pracovat,
otebujemelo it
do
pamti: Mus me
si vyhradit
m sto
a ci,
ak ho
ypu budou
daje,
kter ude
obsahovat.
akov to
m sto
pro
ukldn
hodnoty budeme
nazyvat
romnn.
Po taude
s
promnnou achinet
pomoc
ej
adresy
(poadov ho
slajej ho
o te nho
ajtu).
Pro
programtora y ale
prce
s
adre-
sou byla
nepohodln'
a
proto
i
pojmenujeme, me
identifilctor.
Tomu se
V
programovn ik eklarace
promnn '.
t4
l
' t r zt | j i
lvit||rttc,
c idonti l .ikator
Il i
} ,{|
||rIt l .
ttt ictt
r r r l t lt l t t t '
(,H 1lt t ?+: || l i t i t :
1.3
Programy
a
programovac
azyky
Budeme-li
od
po ta e
ht t'
aby
zpracovva|
ata,
kter
mu
pedlo-
me,
mus me
mu tak
ci, o
s nimi
m vlastrr
lat
_
mus me
mu
dt
program. Program'
P1dobn
ako
data,
ulo me
o
opera n
a-
mti^
Procesor
um s
daty
provdt uzn
ednoduch
perace.
Um
nap.
se st,
de st'
ynsobit
nebo vydlit
dv
s la,
ame-|i
mu
jejich
adresy,
um
vz t
znak a
zobtazit
ho na displeji
atd.
Proto e
ak do
jeho
pamti
nelze
ulo it
nic
jin ho
ne - sla,
us
blt
tyto
p kazy
vyjdeny
zakdovny
-
tak
s ly .
seln
y'jden
nstrukc
(pikaz r)ro procesor enazlv strojouj, d a e to edin vc, kter
procesor ozum .
Aby
ncbyl ivot
p l i
ednoduchj.,
ou vaj
uzn
procesory
uzn
strojov
k
dy,
tak e
programy
ve
strojov m
du
nejsou obvykle
p cnositcInczi
po ta ir zn .mi
rocesory.
tcdy
jm
ntl
tttttIttrttttit
' i in
r is t i
t5
To ale nen na
programovn
e strojov m
du to nejhor .
e
asi
jasn ,
e
programovn
e strojov m
du
je
velice
namhav ne-
pehledn .
ak o t m ikdo nedl; m sto oho se
pou vaj
zv.
v y
rogramovac
azylql,jako
e
Ada, Basic,
C, C++,
.
,
atak
C#,
Program ve vy m
rogramovacim
azyku
obsahuje
popis
een
rilohy yjdeny
pomoc
ybranj.ch
nglickych
slov
a
p padnomo-
c matematickych vyrazn zapsanych
podobn
jako
v
matematice.
Napsat
program
ve vy m
rogramovac m
azyce je
pochopiteln
dalekosnaz
enapsat
dpov daj c
rog am
e
strojov mdu.
ovemnic nen zaarmo: rogramve lry mrogramovac mazyku
ne|zena
po ta i mo
pustit, ebo
o t a
u nerozum . akov ,to
program
se
proto
mus
bu
pelo it
o skojov ho
du nebo nter-
pretovat.
V obou
p padech
tomu
potebujeme
a l
rogram
nebo
skupinu
programri),
ter o za ns udlaj .
Textovj'soubor,kterj'obsahujezpis
progamu
e vy m
rogramo-
vac m
jazykl,
se
zpravidla nazyv zdrojovy kd nebo zdrojol5l
pro-
gram,
v
programtorsk
antjrce
,zdrojtk,,.
pekladu
o strojov ho
k6du
(kompilaci)
slou i
program
zvan
p eklada ebo|i
kompiltor'
astos n m spolupracuje
et
sestavovac
rogram
nebo|i
inker,
kterj. dok e pojit nkolik nezvisle
pelo en .ch
st
rogramu
do
jednoho
celku. Linker tak
pipoj
nihovny
-
sti
programu,
ter
u nkdonaprogramovaledem ktermri eme en pou vat'
Pekladem
a p padn
slednjm sestaven m)
rogramu
znikne sou-
bor obsahuj c trojovj'
kd, kter''
j i
|ze na
clov m
o ta i
pustit.
Mezi typick
pekldan
rogr Imovaci
azyky
pat
ap. C, C++
neboPascal.
M sto
pekladu
akmri eme nkter 'ch
p padechou it
peciln
program'
kter''
bude st
drojovf
text a
interpretovat o, tj.
provdt
p ikazy,
ter ^v m najde. Typickj.m interpretovanfm
azykem je
klasickj'Basic'.
Interpretovan
rogramy
obvykle b
odstatn omaleji
ne
pekl-
clan
rogramy.
Vedle toho
mus me a
clov ,po tapolu
s na m
programemnstalovat ak nterpreta nrogram.
(]ll.ic
tak trochu zvl tn
pad.
dtojovy kd
programu
napsan ho
v
ltltnttl
iazycc
se
pelo ,
vem
ikoli
do strojov ho
du
po ta e,
ttle t|tr tlnivcrzIn ho
pomocn ho
azyka
ozna ovan ho
icrosaft
.
.lir
re
lrcIj,hr
ilrrrrl llrrsicrt;.icho ot| rvrrrorzc sc
p .ck|daly
o strojov ho
krir|tt rr
1rrr*|r.rltli
crzl. Vistttrl
|ttsiecltr.Nli'|..
o
,t lc|"ttl l ,
tcjn.jako
C#, o
kIt ' t t t t
i
1trrvlrrrr
lr t lc
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
8/124
.||'T'
t lu st
pros(|,crl
NET
Intermediate
Language.,
(MSll,
ncb
en
IL). Ten se
pomoc
dal ho
peklada e
evede
do strojov ho
kdu
c lov ho
po ta e
a|e zpra-
vi|a
a v okam iku,
kdy
program
spust me.
To
znamen, e na c lov m
po ta i
us bjt
peklada ,
te
pekl.
d
z IL do strojov ho
kdu. Tento
po ta
e
nazlv JIT
(z
anglick ho
Just In Time,nebo
p eklprv v dob, kdy
je
to
poteba).
Vc
jc
ale
jet
slo itj :
Na c lov m
po ta i
mus instalovno
prosted
'NET
Framework,
kter krom
peklada ri
IT obsahuje
i dal sou-
sti
potebn ro
bh
program
lytvoenj'ch v
jazyce
C#.
Na zvr jet dopln me, e peklada ibovoln ho programovac htl
jazyka
(i
C#)
zrove kontroluje syntaktickou
sprvnost
programu
.
tey
zdaje
program
napsn
podle
jistj'ch
formln ch
pravidel,
kter
zaru uji, e mu
po ta orozum .
(Syntaktick
sprvnost
programu
bohu el nezaru uje vcnou
sprvnost
programu'
tj.
nezaru lje,
c
program
bude dlat
to' co si
pejeme.)
opera n
yst m
Po ta ez
programov ho
vybaven
by nm nebyl
mnoho
platny.
Proto se s
n m zpravidla dodv
alespo
jeden
zkladn
program,
kterj' se rozebhne
automaticky
hned
po
sputn
o t a e
b i
po
celou dobu jeho provozu. Tento program se nazyv opera n yst ma
,,o iluje..
po ta ,
j.
prij m pokyny
u ivatele, star
se o
jejich
provo-
den a
informuje u ivatele o
v 'sledc ch. Pokyny
mohou bj't vyjdeny
p kazem
apsanjlm
v
p kazov
dce,
kliknut m my
na ikon nebtl
jinj'm
zp rsobem.
opera n syst m
m ov$em
jet
adu dal ch ioh,
z nich
pro
niis
nejd le itj i
e,
e
poskytrrje
sluby dal m
program
m. Star sc
tl
jejich
spou tn ,
pidlovn
pamti, poskytuje
nstroje
pro prci sc
soubory atd.
Kdy nap. hceme
v
programu
otev t oubor,
progrll |
ped
odpoviajic
po adavek
opera n mu yst mu
a ten se
postar1r l
ve
potebn .
Mezi
nejznmj pera n yst my
na osobn ch
po ta ch
at
rizllc
verze Windows a Linuxu.
Programy, vytvoen
jazyce
C#,
mohou
(zarim)
b et
pouzo rur
po ta ch
ybavenj,ch opera n m
yst memWindows
NT vcrzc
4.
Windows 2000 ncbo Windows
XP. na nicb
e
instalovn .NE]..
|lrlr
rrrcwork.
'V
1rrlsIcr|trI
| r r| r
c trrkrJ
ou v
z na c n
\nnntut
l,
((,ll ''
spr lIc r ty
rr r
zi irrzyk). lo ltr l| .tctt lrl
rrzyk
r r klct|rr| i
t r r r r ' r sIi
rrrrHIlcr l|
Nl i , l ' l i t .t t t t tcwtrt l .
IryIy
r i iIntv
ttt .zit l t t rxItrI
t l .gtt lt izt tr:Ii( .MA
Ilrktr
l l l t t rIa r l
I ' l l 1ttt :t.'lrtrtti(1('ft
I Nr
j
rr ltt ttyl l l :rtt-tte,t i l t ' 11
Program algoritmus
Jazyk C#,
podobn
ako
ostatn
rogramovaci
jazyky,
s|rrtri
z
pisu
programu.
U vime, e
program
e
njah
soubor nstrtrkt:i
trfikrrz).
kter
po ta i
kaj , o m
dlat.
Ka y
program
pedstawje
nvod k e en
jak ho
prrrlrl.lrlrt,
'f i
programovn
i
ale mus me
uvdomit, e
po t a
eum
nir|il z1riilrrlr.
jak
probl m
vye it: o musme
udlat my.
Ky u znntc cr:s|tt,
tllt
naj t een ' ri eme
o nau it ak
po ta .
o t a
m
en
tt,
,tt ltt
my - nebo nkdo iny - nau , a co m program.
Algoritmus
Nvod, ktenj.
chceme
pedlo it
o ta i ,
us
m t
u r i t
lastlrtlsti;
nkter z n ch
mohou vypadat
jako
samozejm ,
le
pesto
c
ztlc
uvedeme.
t
Nvod mus
v st k
po adovan mu
v .sledku.
I kdy to mo n
lrypad sm n,nen
to v dy
ednoduch
z|e itost.
Mus me nap.
uv it,
za
jalEch
p edpoklad
ur it .
postup
vede ke sprvn mu
rnj'sledku a zda
budou tyto
pedpoklady
splnny
pro
data, s nimi
bude n nvod
pracovat.
l
Mus se
skldat
z
krokri, kterj'm
po t a
ozum
-
tzv.
elementr.
n ch
krok.
(To
pro
ns znamen,
e ho mus me
umt zapsat
v n-
kter mprogramovac m
azyce,
nejl pev C#.)
l
Tchto
kroku nesm bjt nekone n
mnoho.
Nejde o to' e
bychom
mohli napsat
program'
kter .
e
nekone n
velky; to
se vm asi ne.
poda .
en ale nic t k ho
napsat htky
program'
kter'' nikdy
neskon ,
roto e
se v nm
bude do nekone na
opakovat
ur it
skupina
nstrukc.
Nvod' kterj'tyto
podm nky
spluje,
se obvykle
ozna uje
ako
algo-
ritmu,s,
Na
program
se
m eme
d vat
ako
na zpis algoritmu
v
pro-
grttrntlvac tn
azyce.
Nr: za ncrneprogramovat,
mus me
tedy znt
zprisob,
jak
danj'
pro-
b|nr vy c it'
Pak
mus me
postup
een
apsat
ako
algoritmus", edy
.iuktr
osltlupnost
lementrn ch
rokri.
Pitom e
pou v
bvykle tzv.
mr|txlu ,shtru dol : Nvod
se
rozkld
na men
men rseky,
tlrrsp jcrnc
clcmcntrnim krokrim. P itom
e
samozejmmri e tt,
c
btlt|ctttc
nttsol
pct|choz
ozd|en
upravit, nkter roky
spo.jit,
t tr1klcr
rrtky
p . idat
p.
.
AIgtrri l t t tttrtt t teltrt|tt lr
'jc'jiclr
t rvr 'hrr.ic
tlntlvi'initrrclarriIr;
1 i r r rrnir;h
nIe
1t|.et|1xtkIrir l t
rrttItlsllr itro trtlkr.llt||rtt
rrlgrtttttrlvitcilrtl.jazyka.
o ' j i r r i
tgr1i
|nxr ' l| l t t
t tn1lI.
5|).
As i r r r :jzr t tl r t t j l
sr lrr
r l iIry ). Krrrr lIrrr
4|,
kterzrru-
I l re l r I l t tl I t r lrrltkt|ttlltrl
t lrr1tr lt t l t t trvtteiItrr
t lzykn
lt1*et|1rrrkIr itIrr i i .
Motodn
|bora
drrl l
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
9/124
P klad
Metodu
shora dolri si
uk eme
na nsleduj c m
p kladu:
Mme skupi-
nu N se ln j,ch
romnnj 'ch, ter zna me
[0]'
A[1], . ..
,
A[N-1
.
Takovouto
skupinu
promnnj'ch stejn ho
ypu, se
kterj.mi
m emc
zachuet
ako
s
jedn m
celkem,
nazlvme
pole.
Ze
tedy mme
pole A
s
prvky
AtO],
At1], . . .
,
A [N- l ]. s l a,
z na u j c
ednot l iv
rvky
pole,
se nazyvaJi
indexy.
Na m rkolem
je
uspodat
ole A tak, aby
platila podm nka
Pole
Ato] < At1] . . .
< AtN.1].
oha
,,zpeh ael,,
odnoty' ulo en v prvc ch pole, aby splovaly
podm nku
(l),
se nazyv t dn
ole.
Na m rikolem
tedy
je
set dit
pole A.
N
prvn
pokus
o napsn
algoritmu
tidn o y
mohl lypadat
takto:
1. Najdi v
poli
n
prvek,
kteqi obsahuje
nejmen
hodnofu, a
vym
jeho
obsah
s
prvkem, kterj'
je
na
prvn m m st
(na
m st s indexem
0) .
2. Najdi v
poli
A
prvek,
kter ' obsahuje
druhou
nejmen
hodnofu,
a vym
ho s
prvkem, kterj'
je
na
druh m
m st.
3. ,.. atd.,dokud
nen
pole
set dn .
Ie ejm , e tentopostup povede k c li; pro na e r ely e ale p li
nehod, nebo
program
nemri e
obsahovat
njak
,,..,
atd.,,.Mus me
proto
naj t
ep ormulaci.
Kl em k rispchu
bude nsleduj c
rvaha:
Pot , co
v
prvn m kroku
vyhledme
nejmen
prvek
z cel ho
pole
a dme
ho na
prvn
m sto,
e
nejmen
hodnota
j i
na sv m
m st a
nemus me se o
ni
starat.
Sta
tedy set dit
bytek
flole.
(Znmj'
princip
rozdl a
panuj
se
neuplat.
uje
en
v
politice.)
Ve druh m
kroku
nm
posta
aj t
nejmen
rvek
ze
zbyl ho riseku
pole
At1l, .
.
.
,
A[N-1] a ten dt
na druh
m sto, e
tet m roku
naj t
nejmen odnotu
mezt
A|2), .. .
,
AtN-l] atd' V
posledn m roku
budeme
rledat
e jmen
prvkri
AtN-2],
AtN-1].
Pak bude
pole
set .
dn ,
j. bude
vyhovovat podm nce 1).
5
Ve skute nosti
de
o
iazen
prvlr^
odle
vel kosti,
nikoli o rozdlovni
dtl
t d . esk
rogramtorsk
hant ,rce
se ale zpravidla
mluv o tidn ,
a
prokl
u trt|roto erm nu
zistaneme. ostatn
anglicky
termin sorting
znamen
takt
l t | t ii 'iko|i
azeni.
.'
|'opsant
ctoda se
nazlv t dn
j'brem
(selection
sort) a
je
vhodn
prtl
n ton i
o|c; pro
rozs,lr|
o|c
se
zpravid|apou vtzv.rych|
c l n
quick-
srrrt) ' 'I ir
' jc
vcIrni
clbkt ivni
poslrrp,.1cho
k|ad
aIc
p|.csrrIrrr.jet imco
n i r i
krr iIry.
t rx| r tr l rnrJ i |rr l i lrrnrrcc
iz llap .
c t r : t n r|iIrr
rr iIrv
.1
rcIrr l
|5|.
' tt
1
rt
;
p
1111:p,
(1)
ll l
I
f\ lp
t lrrrnrlrtartr 'ttrtttte
lq
fur'mulace
V imnte
si,
e vlastn
stle opakujeme
podobnou
akci:
Vyhledme
nejmen
rvek v
irseku
pole
a
dme
ho
na
prvn
m sto v
tomto
seku.
Pitom v
ka dmnsleduj c m
kroku
pracujeme se stle
men m
se-
kem
pole'
Zkoumany risek
pole
zain
postupn
prvkem
s indexem
0,
1, . . .
.
N-2.
Zapime
v .sledek
pedelfch
rivah
jako
posloupnost krokri,
kter
bychom
mohli
pova oval za
elementm .
Pi vjpo tu
budeme
pou .
vat
pomocnou
promnnou i, kter
nm
poslou
ako
,po tadlo...
l. Dopromnn vlo hodnotu0.
2'
Mezi
prvky Ati
],
..'
,
AtN-1] najdi
ten, kter 'obsahuje
ncjlrrcrl
hodnotu.
3.
Vym
tuto hodnotu
s hodnotou
prvku,
kterf
je
na
j
-t m
nr slc\.
4. Zvt ihodnotupromnn
1 o 1.
5. Je-li
j
csc lut' k&.
cs
iciosft tn) uisual
cs.HEr
conpilcp
uersion
?.8'B.9465
ots
llicFsoft
(n)
.HEI
Fpane{ork
vcrsion 1.6.3?65
opyright
(C)
}.|iclosoft
cotsporation
26a1.
nll rights
P e$ ge . l .
ltt
( ' l t
1r1 t c' l+'tttt i 't '
-"
'
l 't
t 'tt l
l ,l
t ,t i ,
tt,t,t '
.l l ,
Znakovj, etzec,
ter .
sme
v naem
ruh m
rogramu
1pisovali' se
nlm
neve el a
eden
dek.
roto
sme
ho rozdlili
do
dvou
etzo-
vlch konstant, ter
sme
spojili znam nkem lus:
'.
l uou ky L l r i i
e rn
'
+
.'i ipl
d'bel k dy.
'
l)rtrgram si tyto dva znakov
etzce pojil
v
jeden
a ten
pak
vypsal.
Podobn lze
samozejm pojit i
v ce znakovych etzcri.
Programtoii,
e tina my
Mnoz programtofi p omenteke srrlm programrim bu anglic-
ky
(kdyby
to nlrodou
etl
nkdo
ciz ...) nebo
alespo cesky
(tj.
bez
|t/t k
a rek).
Drivod
je jednoduchj':
U
jsme
si
nazna ili,
e ru-
tlj'oh
prosted ch
e m eme setkat
s ruznj,mi zpri soby kdovn
e -
titty' a
pi
penosu programu
z
jednoho
prosted
do
jin ho
mohou
vzniknout
probl my.
V
na n ize
budeme ov em
pst
komente
drisledn esky, to zna-
tncn i
s
diakritickj.mi
znam nky. I zde
je
drivod
jednoduchy:
Jak
vidite
z teto kratke
veticlE, ceslq;
psane
komentare byvaji spatne
sro-
:umitelne, Nebudeme
si tedy
pidlvat
zbyte nou prci
s lu tn m
ocstiny.
Nav c
programovaci
jazyk
C#
je
ur en
-
alespo
zatim
_
pot|zc pro
Windows,
a
proto
n
prob| my
s
penosem
do
jinj'ch
prosted ehrozi.
'litk
pou vn
znaki
s diakritickj'mi znam nky
v identifiktorech,
|ec|y
vc
jm nech
t d,
romnnfch
ap., nen
p l i
bvykl
*
pede-
vrn
proto,
e
en
mlo
programovac ch
jazryki
to
dovoluje. C#
je
ztttint
sp e estnou
nj'jimkou; vt ina
programovacich
jazykl
po a-
t|rrjc,aby se identi iktory
skldaly
pouze
z
p smen
anglick abecedy
rr z s lic.
v em v
posledn
dob se stle astji
bjevuj
peklada e,
kterprlu vn
rodn chabeced
podporuj .
e to logick :Mri emeJi
r|tivttl sou stcm
sv ho
programu
nezkomolen
jm na,
m eme
se
lttttizc
tlust cditna
probl m,
ktery e me'
roto budeme
t tomo nosti
l , t ,t t i tutt.
Beakupenassemb|y)
Ktly
.isrrrc
si i. ka|i, c pek|adem
drojov ho
progTamu
vznikne
l1trtslitr.:lrry
tlttlrtl l. ,rc ' kal i. j sme
i celou
pravdu.
Pek lada
e skute -
ltrlsti
vylvrr'i .t ctl,tt so nazj'v
assembly
(budeme
o
pekldat
lo-
vettl 'rr. 'r-rl1lr, l l i) '
, . '
V ..
j ltt..tttt
i () l ||Xt| ' l I
ttt trzr l i l
rtI
r r r .r r r r
. i r ly ncr ,l l | c j
t l t()m' zdapouil.
1t.tttt.
tt lt lt i r vr.Ikri
t istttcttrt.
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
20/124
Seskupen
mr e bsahovat
eden
nebo nkolik modulri,
tj. souboru
vc
formtu
PE
pro prosted
NET;
mri e
t
o spustiteln
oubory
(.ex..1"
o dynamick
knihovny
(.dl
l) nebo o
j in
sou sti
rogramri.
Vet||c
toho obsahuje
tzv. manifest, soubor
s dodate n1|mi
nformacemi.
.Soubory
.exe nebo .dll obsahuj
krom instrukc
v
jazyku
IL ta|it|
tzv, metaata.
To
jsou
dopluj c
nformace o datov .ch
typech
-
napi
jak
se
jmenuj
t dyv nich,
jak
maj metody atd.
Tyto informirt'r.
mohou vw ivat
nejen
peklada e,
le i ostatn
programy' nap.
1li
automatick m
generovn
dokumentace.
Z
programri
jsou
dostuprrtl
pomoc tzv. reflexe.
V seskupen
e
tak u|o ena nformace
o verzi a o kultu e
(culturr|
Verze
jsou
slovny'
slo verze seskupen
se skld
z hlavn hrr
rr
vedlej ho sla,
s la
ekladu
a sla evize.
Kultura znamen vlaslrr
jazykovou
mutaci seskupen .
Seskupen
pedstalrrj zk|adni
jednotku
pi
en
otov ch
progrrr
mri. Prosted NET
rozli uje soukrom
a sd len seskupen
(privirlc.
shared assembly).
Soukrom seskupen
sou
sou st
edin
apliklrcr',
sd len seskupen
slou vem
programrim
spoutnfm
v
prosti'cr|l
'NET.
slovniverzi se
pou v
pouze pro
sd len seskupen .
Rozsah t to nihy
nm nedovoli zabyvat se
sd lenfmi seskupen nri.
4t l
|
. l t ,,t t t tult tr , l t+\1i ' l* ltrt l t '
l
Jednoduch
klady
V
minul kapitole
jsme
napsali svrij
prvn program
v C#, ukzali
jsme
si,
ak
ho
pelo it
spustit. V t to apitole si
postupn
uk eme
nkte.
r dal
mo nosti
jaryka
C#.
Mjte
pros m
stle na
pamti,
e
jde
o
rivodn
pehled,
ejich
hlavn m
c lem
e
vytvoit si
prostedky'
kter
nm umo n ukazovat si rozumn p klady,a si za nemevykldat
jazyk
C#,,naostro".
Drobn
ipravy
programu
Pod vejme eznovu
na n
prvn
nebo druhf
program.
Zatimvime, e
zpis
System. onsol .
Wri
eL
ne
'Huja
.')
p edstaluje
p sob,
ak
vypsat
znakovy etzec
'Hujaj'..
Rozeberme
si to
trochu
podrobnji.
Vo|n| Pi vj'sfupu vyu ivme slu eb objekfu, kterj' je pro ns pipraven
v
knihovn
jazyka
C#
(pesnji
v knihovn
prosted
NET Fra.
rnework)
a ktery
se
menuje
System.Con.sole.
etody to hoto objektu
rnimo
jin
umo uj
stup
do standardn ho
lstupu a ten
nj.
Zpis Sys
em. on o e W te
L.i e
'.
H a '. te dy
pedstautje
oln
m tody ,'i
t e L ne
(
)
objektu Sy
em Co o e.
Vol/rn metody
za in
m nem
objektu, za
nim
je
te kou
pipojeno
.jrnntl
mctody. Za
jm nem
metody nsleduj kulat
zvorky,
v
nich
tttohou blt tzv'
parqmetry
metody
(data,
kter
m metoda zpracovat)'
Vrr|/rn
mctody
zprisob , e se metoda spust
*
provedou
se
p kazy'
klcr.jsor"r
n naprogramovny.
tldek N krlyptlt .cbuicmcozdlit vystupuj c ext do nkolika dkri.Vez'
tttttto
ap .
druhj'
program
z
pedchoz
apitoly a upravme
ho tak,
ttlry
v |rr l lutilu krn
koni zapsa| do t dk
,
do
ka dho
v
slo-
vl l.
.|et| ltrttt
ttttltltls l i. joozd l i l ystupuj ic
ext
do
nkolika etzcovj 'ch
krl tt l l t t t t l
t kttt l r l t t
r l ic l r yps ir l
p t r rnoc
ctody ,^]rj teLine(
'
nebo
Inlrr tttlItrtltt
rrr
ypstitti rttlttlt ho
cxlrr
pfc.jdc
na novy
dek.N
Irnr { ln l
y et ly nolt l yput l tt lrrkkr:
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
21/124
/*
Pechod na novy
rdek
C/ l
1 41 , ."a.
crass
lruryKun
{
stat ic void
Maino
{
System.Consol e' 14r i e L
ne
''
' lu o u k ykrjr''
;
System.Console.|drjteLine(, 'p ern
p1' '
;
System.Consol
e.Wri teLi ne
''bel
sk dy.' '
)
;
)
l
Zdrojovy ext
ohoto
programu
ajdete a www v
adresi ap03\0
Jestli e opelo mespust me, ostaneme
1
o u k y
p
ern
p'l
d 'be] sk
dy .
Jazyk C#
ovem nabiz ijin , a v
tomto
p pad
ep een. o
takttl
zapsan ho
nakov ho etzce sice
pechod
na novy dek nemri eme
zapsat
p mo,
ale mri eme do
nj
v|o it
tzv. dic
osloupnost, kterii
pechod
na nov dekvyzna i.
\n
dic
posloupnost
pro p echod
na novy
dek m tvar \n. Vlo me-|i
ji
do lrypisovan ho etzce, ude
metoda |v]an
)
vypadat takto:
stat ic void
l4ain(
t
System.,Conso1e.WriteLjne("luou ky
t i \np ern' '+
upl\nd.bel
k dy.'.
;
l
V .stup
takto upraven ho
programu
bude stejn;f
ako
v
pedchozirrt
p pad.
eho
zdrojovj'1text
najdete na WWW v souboru
zlonZ'l''
v
adres i ap03\01.
t)os|ovnj'
V C#
mme
jet
tet mo nost
-
pou t
zv.
doslovnf
etzec.
I.t:tt
ctzec
m e
obsahovat
i
p mo
zapsany
pechod
na novf dek.Zapisujcrrrc
ho
do
uvozovek,
ped
n ale
um st me
et
znak @
,,zavin ..).
Mcltl
da
Ma n
(
)
s doslovnym
etzcem
ude
m t tvar
publ ic
stat ic void
l4ain()
{
System. onso'l Wri e
L ne
@'.
l u ou ky ri
p
ern
p1
be1
k
dy
'
;
l
V 'stup
programu po
t to iprav bude stejnj.
ako
v
pedchoz ch
ii
padcch.
V imntc si, e entokrt
sme
nepotebovali lit et zcc
rn
rr krrI ik rs t i. a toto
pohodl
sme
ov em zaplat i l i hor
prirvrrtt
zt| lrrirrvi:hocxtu.. luk clruh ' '
ak
1rcli
' r t|ckttl i trttsi
a n it lt1srrr.
soubor
zl om1cs
*/
4Z
.sEre
1
.lt 't l t t rultu' l tc\
i ' l l l t t r lv
4.t
&
Vinual
C#
u lev ho okraje strnky,
nebo kdybychom
je
odsadili,
staly by se
vloen
mezery
jeho
sou st lypsaly by se
i do v .stupu.
Zdrojovy text tohoto
programu najdete na WWW v souboru
zl om3. s
v adresi
ap03\01.
Pou vte-li Visual C#,
nejsp
ste
v .stup
n ho na ich
programri
dosud
nevidli: Konzolov okno
se
po
sputn
rogramu
sice oteve,
ale
pi
ukon en
rogramu
se hned zase
zav e. Pokud chcete u tohoto
prosted
tstat,m ete
pou it
nsleduj c
trik: Jako
posledn p ikaz
v
metod Main
)
napite
p ikaz
System.Consol. ReadLi e(
Tento
p kaz
prisob ,
e
se
program
zastavi a bude
ekat, stisknete
klvesu
Enter; teprve
pak
skon .Upraven
metoda
l.4ain( na eho
posledn ho programu
tedy bude m t var
publ ic
stat ic
void Main()
{
System.Console.| , ' ] r i teLine( ' '1
oU ky \ np e rn ' '+
,'tipl
\nbe1sk
dy.
'
;
System. onsol . ReadLi
e(
I
Jmen
V
pedchoz ch
dstavc ch
sme
si ekli' e
pou vme
bjekt,
kter'.
se
jmenujeSystem. onsol . Tenton ueve pkndlouhj'a eho opako-
van ypisovn
ep jemnrnavn ;
atst i ale mri eme st
rce
uetit' e si
pov me
ak,
mus me i
ale nco
povdt
o
tzv.
prosto-
rech
men.
Ve velkfch
programech a
tak ve velkj'ch
programovfch
knihov-
nch) se vyskytuje obrovsk
mno stv bjektu
a v echny
e
teba
jednozna n
ojmenovat
pidlit
im
identifiktor.
Aby nedo lo e
zmatkrim, zavdi
jazyk
C#
mo nost
pidat
e
jm nu
objektu
et
jak si
,pijnreni,,
za at o do
prostoru
men.
Jm no
bjektu e
pak
skld
z vlastn hodenti rktoru,
ed
terj,
e
te kou
ipojeno
mno
odpov daj c ho
rostoru
men.
Rrizn
bjekty
mohou
mt
tejn
m na,
pokud
sou
v rriznj'ch
rostorech
men.
V na crn pade Systemm no rostorumen a Conso]emno
olr.jcktu.
ll,'
| l l
|)tlkttt|
l)r()granlu
ou vme
c e
men
z
jednoho
rostoru
men,
ttclrtr
rtlkttc|
ott iv tntc
edno m no
pakovan,
m eme
eklada i
i,lci.c
..pi jlrreni..
jrrr no
rostoru
|men
budeme ynechvat.
o
vy. j r t | |.| rrrr:
zv.
| i rck ivrtu
t. '
tr1,. icrir var
urf
tg
7z'o,r/o
'
jtrtt'rti
| | t l tt t ;c t tt t 'i
1 i .
t tr izetrtr.
) | | )P. l . l | l r|,
rrttt l
.
'
1r| .cpsrr l
akl
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
22/124
/* Prostory
jmen
-
soubor zlom4.cs
*/
using System;
crdss lruIyKun
t
publ ic
stat ic void 14ain(
-i
Console.Wr"i eL.ine( ' 'l
u ou k r j . '
;
Console.lr ']r i teLine( ' 'p ern
r ipl ' ,
;
Console.t , ' l r jteL.ine( ' 'd'belsk
dy.' ')
;
I
I
Jeho zdrojorn- text
najdete na WWW
v adresi Ka
p
03
\
0 1.
3.2
Po ta
t'
po t
Promnn
Typ nt
Zat m
jsme
si hrli se znakovj'mi
etzci. Zkusme
nyn napsat
prtr
gram,
ktery
vypo te sou et vou sel
vytiskne ho.
K tomu ale
budeme
poebovat
m sto
v
pamti,
kam
ulo me hodnoty
obou s tanc
'
a
tak
m sto na
ulo en ".fsledku;
in 'mi
slovy, but|c
me
potebovat
promnn .
Abychom
mohli
promnn
pou vat,
mr"rsi
me
po ta i ik.zat,
by
e
vy voiil'
mus me
e
deklaroyat.
K naimprvn m pokusrim pou ijemecel s la, ro n se v jazyce
(.//
pou v
atov .typ int. Deklaraci
promnn
ypu int
v C# m
crrrc
zj
ednodu en
opsat
takto:
int
jm no
=
hodnota1
kde
jm no
je
identifik|or
deklarovan
promnn
a hodnota
peds|rr
vuje hodnotu' kterou
bu8e tato
promnn
obsahovat hned
po
vytvtr|'c
n .
(Pokud
na
po te n
odnot
nez|e i nebo
pokud
ji
v okami|irr
deklarace neznme,
mri eme uto tzv.
inicializaci vynechat')
Nyn m eme
napsat nap. akoqfto
program:
/ / S t n v ou s el
-
soubor Sou et . cs
using System;
c] ass Sou et
I
stat ic void lYain(
I
:
55;
/
P run
s t an ec
:
66;
//
Druh
s t an ec
/ / Sou e t
r
[l :
in t
ln1.
rnL.
(
a
b
c;
r)
{{
*
'
l
.l5,Il,,lhlt lI
, , i
,i .ikltt,lv
{
Console.WriteLine(
. 'Sou et
s e]
{0}
a
{1}
je
{2\,,
'
a
'
b, c);
l
)
V
prvn ch
dvou
dc chmetody
l"]ain() deklarujeme
promnn
a,
resp. b, s
po te n mi
odnotami
55' resp. 66. Ve tet m
dku dekla-
rujeme
promnnou
c, kter
po te n
odnofu
neur me.
Pozdji
do
n
ulo me
sou eta+b,tak e
na
jej
po te n odnot nezle .)
V nsleduj c m
dku vypo teme sou et
a+b a
jeho
hodnotu ulo me
do
promnn c.
opertor
:
zde
tey neznamen
rovnost, a|e
p i azen
- ulo en hodnoty do promnn .
Pod vejme se
na
p kaz,
terj'm vypisujeme
v 'sledek.
Vo1n metody
|dr teLi ne(
)
m nyn
4
parametry
-
znakovy
etzec
promnn a, b
a
c.
Jednotliv
parametry
sou
oddleny
rkami.
Znakov
etzec, kter '
p edvme metod
WriteLine(
),
obsahuje
krom o ekvan ho
extu tak peci rkace
0}, {1
a
1ZI,
kter r uj
m sta,
na nich m tato metoda
lrypsat hodnoty dal ch
parametr
.
Ve
slo en1ich
zvorkch
jsou
poadov
sla
tchto
parametru
(ov em
po tan
od 0), tak e
O]t
namen m sto,
kde vystoup
hodnota
pro-
mnn a,
{1}
pedstavuje
m sto,
kde
se
lyp e
hodnota
promnn b
atd. Po
pelo en
spu tn
yp e ento
program
Sou e t s e155 a 66 je 12 1
Deklarujeme-li
nkolik
promnnj,ch
stejn ho
ypu,
m eme v echny
deklarace
zapsat do
jednoho
dku zajedno
jmno
typu; v
pedchoz m
pikladu
sme
nap.mohli napsat
inLa:55.b:66,c;
Promnnou
jsme
c ale nemuseli deklarovat.
M sto
toho
jsme
mohli
r, i lpsatvyraz
+o
ako
tvrfj 'parametrmetody
,JrieLine(
):
(] r l t l : ,o]e.| , l r
t eLi ne ( '' S ou e t s e l
0}
a
{i}
je
{2}' ' ,
a ' b, a+b);
Zt|rtljov '
text tohoto
programu po
uvedenych
ripravch
najdete na
wWW v souboru
ap03\02\Sou et .
z'
|'rlkttt|
rychtlnr chtli s tat
ak eln sla, amozejm
m
eme.
l) l|t()V},
yp,
pou vanj '
ro
reln s la ' e v C#
nazlv doub]
.
S ta
lcr|yv
p cr|cltoz l t trograrnu
m sto nt
pst
v ude
oubl .
|tr:rlIlrrllis|rt tt icttto
pr()gralnu
aapsat
podobn
ako
v b nm
i.
vtl|.
1rtttIzr:
rr s tr llcselirrrr13rky tijontc osetinnou
e ku.
niciali-
Zl|( 'c
) t1'|| l | l t tyt: l t
r
t )
)|.() l(|
tti ir:t t |
t i l ; r .
va r
r l l t l l r l l
n
r"' .1.
lr
1r(r. l ' :
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
23/124
Druh
mocnina
liorrn|ni
purametr
Zrojovy text akto
upraven ho
rogramu
najdete a
WWW v soubo-
ru
Kap03\O2\Sou et2.cz.estl i e
o
pe lo te
spust te esk1
h
Windows,
vyp e
Sou e t
e . | 55,1 a
66
'2
je
I2I
'3
V imntesi,
e
program p i
rrlstupu
pou il
okln ch
zvyklost ,
.j.
v
reln m
sle
apsaldesetinnou
rku, ikoli
te ku.
Metoda,
terVypo te
odnotu
Nau ili jsme se s tat, od vejmese na dal po etn perace. Nikohtr
asi nepekvapi,
e
pro
ode tn e
pou v
opertor--;
ovem
prtr
nsoben se
pou v
opertor
*,
kte mus me v y,,
Zapsat, a
pro
dlen
pou vme
opertor /
(lom tko).
Jazyk C#
nem ny
zvl tn opertor
pro
operaci
umocovn '
lr
proto
si
nap ememetodu, kter
ho nahrad .Mri e vypadat
takto:
//
|Yetoda
ro
vypo e t ruh
mocnjny e. lych sel
s tatjc
int Dvojmoc(intn)
t
return n*n;
l
Deklarace t to metody za in opt
kl ovj/m slovem
stat.i c,
nebrtl'
jde
o statickou
metodu
(mri eme
i
volat,
i kdy neexistuje
r'|rrri
instance dan dy).Dle
nsleduje slovo
i nt, kter ik, e tato
ttte
toda, ypo te avrti ce|
slo.Dvojmoc
e
identifiktor t to
netody;
zrt
n m v zvorkch
nsleduje specifikace
parametr
t tometody.
Metoda Dvojmoc(
m
teden
formln
parametr
typu
jnt,
ktery
st'
jmenuje
n. Tento
pafametr
pedstavuje
slo,
eho
druhou
mocttitttt
chceme spo tat.
Druhou mocninu sla
n
pedstavuje
yraz
n*n. Slovo
return, kletii
mu
pedchzi,ik, e n*n
e
v .sledek,
kter'' m metoda
DVo.jltttl.
r
vrtit. Proveden
p kazu
eturn tak
prisob ' ese
program z mclrtrly
vrt na m sto, odkud
jsme ji
zavola|i.
Celj'
program,
kterj,metodu
Dvo
moc
)
tak
ou ije'm em t virr
/i
Metoda
pro
v .po etr uh mocn' i
y
-
soubot. voj
cs
r:
ass I'est
I
st.aLic inl Dvo.imoc(int n)
| ' .
V t lttt lett l i tIicc
lt itk tt/tst l lrctt i
t c kr r re l t r r f| r :k c1as l t t y t tccI l i iv t i t t tt .
l
lrtrtslt*
t t Ir |ct t tc
rl lrt
'ttt i l t .Ir.vct||c:i.'Itr.
Irr
v
(. l l
t t r .Irc ' Nr .:t l t i icIt || l l | ,r | |
trqtl '
i
I
l l 'h(t
lU l \() l l ( 'c
i.
tttttslt ltt '1',=rl1
tr l;r lrt l '
I
|
,| l
7tt
l
.:t , l | l t l t . l ,
(i
*'
l
. l t , l l t t tl l t t t . l tl . ' l l i /
tt,l| 47
motody
I{trv| lrrr
nelilly
{
return
n*n;
I
stat ic
void
Maino
{
int
n
:
12 ;
System.
onsol
.
, l r teL
ne (
',Druh
mocnina
s la
{0}
je
);
l
{11",
n,
Dvojmoc(n)
Mohli jsme ovem ak napsat
int
n
:
12 :
int
m
:
Dvojmoc(n);
a
v metod
,dri
eLi ne(
)
vypsat
hodnofu promnn
m;
nj'sledek
y
byl
stejnj'- program
by vypsal
Druh
mocnina
s l
12
je
74 4
Pod vejme
se
b l e na
zpis
Dvojmoc(i),
kter'' p edstavuje
oln
metody
Dvojmoc(
.
Tento
zpisv programu
zprisob ,
epo i ta
rove-
e
p kazy
v tle
t to
metody
a
pitom
si za formln parametr
n closa-
d hodnofu,
kterou
mu
pi.voln
pedme
v tomto p pad
odnotu
ulo enou
v
promnn
.
( kme,
e
sme
metodu
zavolali
se
skute -
nym parametrem i .) Potom na m sto,kde jsme voln metody
zapsa|i,
dosad
v 'sledek.
V imnte
Si tak ,
e
sme
pi
voln
metody
pou ili
samotny
identifi-
ktor,
zat mco i
voln
metody
WrjteL.ine(
jsme
k
jej mu
mnu
museli pipojit
jmno
objekfu,
k
nmu pat i.
Pi
voln
metody
t e
liid1l 51a6;
vdt
samotn
identifiktor.
Zdrcljov1|
oubor
Dvoj
cs
najdete
na
WWW
v
adres i ap03\02.
l)tx| vc.imc
e nyn
na
prvn
dek
deklarace
metody
Dvojmoc(
'
kter
ttt var
..
tI,r.
t ' Dvo.jrnoc
nt
n
ikrrrtc
ll
hlavi ku
metor]y
a obsahuje
v echny
nformace
drile it
1lrr l' j c j
t l l i tn .
de sc
nap.
ozv me, etato
etoda
I
sc.jtttcttu
e
)vrr, i rrror
l
jc
s| l rt ickr i
k l i r lv
|t lvt l ,
r r
).
l
v t . tt t : ysIct| r. :k
y1ltt
rl l
l
rr
1rfl
lrIr, irri
i
ttttls i lttc
r - r. lt| rr l
eltlr. l lr
kutc I ryararnetr
ypu
nt .
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
24/124
3.3
Zk|adn
stup
Pedchoz
programy
mly
jednu
zsad
vadu: Umly
se s t
nebtl
umocnit
pouze
sla, ter
jsme
zapsalrido
programu' Kdybychom
a|c
v y, kdy budeme
cht t
se s tdv
s la,
nli
pepisovat a znovu
pekldat
celf
program,
asi by
ns
programovn
rychle
pestalo
avit.
Je zejm ,
e
potebujemenstroje,
kter by
programu
umo nili
i st
za bhu
vstupn data.
Problematice
vstupri
a v ,stupri v C#
se budeme
vnovat
podrobrr
pozdji;
zatim se
nau me lespo
s t
ednoduch
data
ze standardni
ho vstupu (tedy z klvesnice). Nap eme du V,kter nm poskytrrt.
metody
pro
vstup celj.ch
arelnych
sel znakovj,ch
etzcri.
rotoc
je
budeme
cht t volat,
ani bychom
vytveli
instance
t dy VV, budtrrl
statick .
Ne se
pust me
do
programovn , mus me si
ci kolik vc:
1. T da ystem.Console
bsahuje
metodu
ReadLine(
.
Tuto mett l t| tt
volme bezparametrtt;
pe te
e standardn ho
sfupu
-
tedy
z klri
vesnice
-
znakov
etzeca wt
ho'
2. Y
ptogramu v C#
mri eme znakovy etzec
ulo it
do
instattcr.
knihovn dy
tri ng.
3. Na tenj' znakovy etzec,kter ' obsahuje zpis sla,e tebapI.c
v s tna s lo .
tomu
nm
pos lou
ta ti ck
metody
Toint1''r
,
p padn oDo b e
(
)
knihovn dy y
em. o
ve t.
Vyzbrojeni
tmito
vdomostmi
j i
m eme
zkusit napsat
tdu
tv
Nejjednodu
ude
metoda
I nStri ng
),
kter na tea wt
znakrrvy
etzec..
I
using
System;
statj c s tr i
ng 1nStr i
ng(
//
N a t e
vrt
etzec
{
retunn Console.ReadLine(
l
Metoda 1n]nt(
),
kter na te vricel'
slo, ude
trochu s|o i l ' i i
s tat i c
i nt lnInt(
)
I
//
Na t e
a v r t s ] o
typu
itt l
str ing
s
-
lnStr ing();
inL i
==
onvert.ToInt32(s);
fcl .Ll rn
l;
I
4H
(' lt
1tt
t ;r lt 'ttrt i 't '
'
| . l t 't l t t r*lt tr ' l ie"l , i iAl,t , ly .1 9
&
&P
Nejprve
do promnn
s
typu
stning
u lo me
etzec16,
ter'wt
metoda
ReadLj
e(
.Pakzavolme
metodu
ConVert.ToInt32(s
, kter
se
pokus
pev st
etzec
s
na
selnou
odnofu;
v 'sledek
wt me.
Stru nji
bychom
tuto
metodu
mohli
zapsat
nsleduj c m
zprisobem;
publ
c
stat ic
int
InInt(
)
{
neturn
Convert.ToInt32(
nStr ing(
) );
l
Podobn
bude
vypadat
metoda
InDoub'le(),
ter
bude
s t
vracet
hodnofu ypu double (reln s lo) .
Ce| , vlpis
t i dy
najdete
v
ns|eduj c m
dd|u;
e j
zdrojovy
text
e
na
WWW
v
souboru
ap03\04\01\VV.
s.
Poznamenejme,
e metody
1nint(
)
a InDoubl
(
)
poadu j ,
bychom
ka d
sfupuj c
slo
zapsali
na
samostatnou
dku,
u
-u;i.j"sic
rudu
dal ch
nectnost .
Pozdji
pochopiteln
nap eme
ponku
lep
verzi
t dy
V.
Vytv me
ynamickou
nihovnu
Nyn
mri eme
trrto
t dupou ivat.
Jak?
Prvn , co ns napadne, e okop rovatt duVVdo kd ho z program
,
ve kter m
budeme
potebovat
nco
pe s t.
o
je
ale
velice
ne ikovn
*
pi
kop rovn
mri eme
na
nco
zapomenout,
mri eme
omylem
pou t
tarou
verzi,kter
nebude
dlat'
co potebujeme,
mri e
s stt
ada
dal ch
nep jemnost .
aleko
lep
by
bylo pelo it
i
futo
t du
jcdnou
prov dy
a
pakji
u jen pou vatjako
vou
vlastn
nihovnu.
Abyohom
ovem
mohli
t du
Vpou vat
z
jinychprogramri,
mus me
v n
prov st
nkolik
drobnj,ch
rprav:
Mus me
ci ,
e t idu
VV
iako
cc|ck
a
jej
ednotliv
metody
sm
pou vat
dokoli.
K tomu poslou
sltlvo
pubIic,
k ter
ap eme
ed
lovo
c-l ss
a
ped
eklarace
me-
lrtrl'
Po
to
rprav
ude
t da
V
vypadat
akto:
/
, ' 'ot l I lor
VV.
: l ;
zkl
adn
pr^ostedky
ro
vstup
tt ' , rr; 'y, ,, r ' rrr;
l rtt l r l i r
r l , r , , ' ,
VV
I
lrrr lr l
r ',l ,r l
ir,,lr
lrr;
lrr i jt.rjngo
I
l
r ' l
l l l
lt
(.otr ',olr '.1(r ',rr l l
irrr '(
):
I
.. . ' . , . . , ' ,
vc sklt lct.t rr l l|
1t ' l iIttt lr,c
sIr r i t js|:
)r r ;r l r ll t t t l t tt t . ' '
c
ttIt li
p
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
25/124
publ ic stat ic
inl
InlnL()
t
/*str ing
s
:
InStr ing();
l/
Iytot1
dky
-i
t
i
:
Convert.ToInt32(s);
ll
)ze
pepsat s tru n. i
return
i;*/
//
takto:
'
return
Convert.ToInt32(
nStr i
ng(
;
I
pub'1
c
stat i
c
doubl
InDoubl
(
)
t
r e u
n C
on
ve t .
To
D ub
e
(
TnS
r n
g
(
)
)
;
))
Nvn
tento
soubor
pelo me'
entokrt
ale
nechceme
vytvoit
spustt
teinj,
souborlz,
nyy
knihovnu,
a
proto
pou ijeme
v
p kazov
tlet.
pep nat:
] bra
y.
Program.csc
tedy
zavolme
p kazem
csc
/t: l ibrarY
VV.cs
Pekladem
znikne
soubor
VV.
dl
l, kterj,
pedstavuje
zv.
dynamicktrtt
knihovnu.
Pouit
ynamick
nihovny
Nyn
zkus me
na i
knihovnu
pou t.
Proto e
nm
nejde
o
nic
jinrrr
n o vyzkorr en unk nosti, nap eme ednoduchj, program, klct.i'
pe te
standardn ho
stupu
s lo
l 'yp e
eho
dvojnsobek:
/i
Iest
kni
hovnY
soubor
Pokus.
s
usi
ng
System;
class
]est
I
t
s tat ic
void
lYaino
i
Console.WriteLine( , 'zadej
s ]o:' '
)
int
i
:
VV.InTnt() ;
Consol
.VJri
eLi
ne(
'Jeho
dvojnsobek
e
. .+2*i
)
;
l
)
Tento soubornajdetena WWW v adresi ap03\03'
Pi
p ekladu
ovem
narazime
na
probl m:
T du
V
peklada
reztui
l
pozaduie,
abychom
mu
ekli,
kde
ji
najde.
K tomu
nm
posltltri
tti.
pinae
l,
|,
zaktem
uvedeme
m no
knihovny
(pesn j i
jltt(.tttr
..'
skupcn ) , . jc
bsahuje
d u
V.
P k az
pekladu
ak bu
1
potebujeme
po tat ou in *2*
...
*n.
Po et
irritc| i i tt nr c
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
26/124
P k az
hi
1e
l,odrn nky,
rc|n n
pertory
Typ
bool
5. Vrt me
se
na klok 2.
Kroky
3
a 5 opakujeme'
dokud
e
splnna
podm nka
n > 1.
(Takov trr
opakovn
se obvykle
ozna ujejako
cyklus.)
obsahuje-li
promnn
n hodnotu
0 nebo
l, tento
algoritmus
s kon ,
aniz
kroky
3 a 5
probhnou.
Promnn
s
proto bude
obsahoval
sprvnj'
v .sledek.
obsahuje-li
promnn n cel slo
t
e
1, u lo
e do
s ve 3.
krrt
ku sou in
*n
(tedy n' nebo obsahuje
na
po tku
1)' Pak
se obsah
rl
zmen 1 , tak e s
postupn znikne
sou i n
*(n-1)*...*2.
o.|c
po adovany
n
Takov to
opakovn
krokri 3
a 5
|ze naprogramovat
pomoc
p kazrr
whi e.
(Hovo me
ak
cyklu
whi
1e.) eho
tvar
e
whi|eQl
od
m k a)
|p
azy}
a
zprisob ,
e
progtam bude
provdt
p kazy uzav en
e slo enyc|r
zv orkch,
dokud
j
e sp|nna
p
o dmnka.
Pesn ji:
l
Program
nejprve
vyhodnoti
podm nku
(4isti, za
e
splnna).
l
Pokud
nen ,
p ikaz whi
1e
skon .
o znamen,
e
p kazy,
uza\ c
n mezt
slo enfmi
zvorkami
(nazyvan
tak
,,tlo
cyklu..),
st.
pesko program bude
pokra ovat
p kazem, te
nsledujc
zrl
nimi.
r
Je-li
podm nka splnna,
provedou se
p kazyuzaven
mezi
sloc
nj'mi
zvorkami.
Pak
Se Znovu
vyhodnot podm nka,
a
nen -li
s1r|
nna,
p kazwhj
1e
skon
td.
Podm nka
je
vyraz,
kte|j,
je
bu
pravdiu ,
1 kme,
e
podm nkir
1r'
splnna)
nebo nepravdiuj,( ikitme.
e
podm nka
nen splnna).
Nc;
stji
obsahuje
porovnn hodnot
promnnj'ch
pomoc
zv.
rela r l t ' | t
opertoru
>'
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
27/124
Opertory
' f+a--
x:xopy;
Ve
skute nosti
ovem
nejdejen o
tisporu
pipsan :Pou it chto
opc
rtor r mo uje
peklada i ak rytvoit
rychlej
progam.
S
potrr
t m
tchto opertoru
mri eme
pepsat
yklus
pro
v1ilpo et
aktorilu
tl.l
tvaru
whi e(n
) 1)
{
//
0pakuj,
dokud
je
n )1
s
*:
n; / l
To t o
s: s*n
n
-:1;
ll
To t o
n: n
-
1
)
ovem
zvt en
nebo zmen en
hodnoty
promnn o 1 e natolik t.lrli
t
e
pro
to
jazyk
C#
zav di zv|tni opertory
++
a
- -.
Tyto opertory
m eme zapsat
bu
ped promnnou' na
kterott
tttii
prisobit
(pak
hovo me
prefixov m opertoru),
nebo za ni
(pak hrrvrl
me
o
postfixov m
opertoru).
Postfixovj, opertor
zp sob ,
c
lit-
nejprve
pou ije
nezmnna
hodnota
promnn
a
teprve
pak
sc
lirlrr
hodnota
zvt
nebo zmen .
re rxov'.|
pertor
zprisob ,
e se
nc.i;tt
e
zmn
hodnota
promnn , atato zmnn
hodnota
se
pak pou ijc.
Pkaz
n
-:1;
v metod f ( ) proto m eme nahradit p ikazem
n--:
nebo
- -n
.
V tomto
p pad ezarc| na
tom, zda
pouijeme
prefixovy nebrl
1rrrnl=
fixov '
opertor. Jedin ,
o
potebujeme,
e
zmen ito
1 hodntr(rr
rlrr
enouv
promnn n.
V
pedchoz m j'kladu
jsme
si ale
ekli,
e
pou ijeme-li vc
vyrirrt|
postfixovy opertor
-
*,
vypo te
program hodnotu
vyrazu
z
piivr'r|ttl
hodnoty
promnn a teprve
pak
tuto
hodnotu
zmn . Proto
ltliir'rrtc
cyklus
v
metod
f
(
)
pepsat
akto:
whi le(n
)
1)
I
s
*:
n--;
I
Mo rr
m
to na
prvn pohled
pipad
l o i t
zbytc n
,trt1'.t
ttttt .
v r rc
jazyky,
ocltlbn .iako.jazyky
i rozcn
maj alc svc
vi l:
rri lr.
irl irlrrly a
p lrt . i
hrtlosti
progranritlrlri i
c
zrrri l t
ptrtrivlrl.
tItrr1r't.y
lcx l
1lrrrgt ' t t ttttt
l i tktr l Ip| . i IVcI l( ) ll
t tcIr l tIrrtt
r
r
1111j1|L.1
rlr
WW.\\.
v
sottltttt 'tt
',r1r0
\04\l,rf
I
',i
".
5d l'
ll
1tt
,'
e' l+'ltt ' r"t
I
.le'tltttlitr'li i
1ti'lk
ttrlt '
55
Podm nka
Metoda f
()
tedy
um
po tat
aktorily
celj'ch kladn;fch
se l'ov em
zadme-|ij
jako
skute nj'
parametr
nap. slo
_I,
vrti 1, i kdy
pro
zpom slanen faktoril
definovn. To nen dobr , a
proto
se
to
pokus me
napravit.
Abychom mohli ur it,co m
program
dlat, v zvislosti natom, zda
je
splnna
ur it
podm nka, pou vme
v C#
pikaz
i f .
Jeho
zjednodu-
enj'popis
e
if(po dm nka)
{p kazy
1
\
nebo
if@odm nka)
{p kazy
1\
e|se
|p kazy
2|
(Prvn
mo nost
ozna ujeme
ako
ne
pln
if, druhou
1ako
upln
lr.)
Za
slovem
i f
je
v
zvorkch
zapsna
podm nka.
Pak nsleduje
skupi-
na
pikaz
ve
slo enj'ch
zvorkch, zde
ozna en
p kazy-I.
Pak
mri e
et
nsledovat slovo e] se a za n m
dal skupina
p kazri
e
slo enj.ch zvorkch
(p kazy
-),
Yyznam tohoto
p ikazu
je:
l
Program nejprve
lyhodnot podm nku.
r
Je-li
podm nka
splnna,
provecle
p kazy_l.
V
p pad,
e
jsme
pou ili
variantu S el se,
p esko ip kazy-2.
l
Nen -li
podm nka
splnna,
pesko
kazy-l.
Jestli e
sme
pou.
ili variantu
S
e.l e,
provee
p knzyJ,
jinak
neprovede nic a
pe-
jde
na
p kaz
sleduj c zap ikazem if.
Vyzbrojeni t mto novj'm
poznatkem
se mri eme
pustit
do
riprav
ped-
choz ho
programu.
Prvn ,
co ns mri e napadnout'
je
testovat
ped
ka dlm volnm, zda nhodou nepedvme
funkci
f
(
)
zpom
pa-
ramctr.
Upraven metoda |Va n
)
mri em t tvar
',
.aLic
void lv lain()
I
( ,onsolc.WriteLine( ' ,Zadej
e' l
nezporn
s lo :
' ' ) ;
i rr l n
,VV.lnTnt.();
i f(n >-.
0)
I
(] r l tr. 'o l t . . | ,n]r i
,eI
ne(. 'Faktori1
s 'l a
{0}
je
{1}. ' ' '
I
n. f(n)) :
r ' l ' , r '
I
( lorr, ,olr ' . l l r iLcl
rrr. ( "/adal
si
{O}."
+
''
|.t
Ir l t . | .1
u prtrn ho J:;- l nen def inovn. ., n);
v soubortt
i f(m
l: 0)
{
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
28/124
Zdrojovy
text
programu
po ttl rprav
ajdete
na
WWW
KapO3\04\Fakt3.cs.
lndikace
hyby
I kdy takto
upraveny
program funguje
a v
p pad adn
zporn htl
s la
vyp e
m sto
vysledku
upozornn '
nen
pou it .
postup dobry.
Pokud
bychom
toti chtli
metodu
f
(
)
pou vat
v
programu na
v ce
m stech,
museli bychom
mt
neustle
na
pamti, e
pro
zporn
s li r
nefunguje
sprvn.
Rozumnj
proto bude upravit
de rnici
metody
f ( ) tak, aby v p pad hybn hodnoty skute n ho arametru nevrit
cela
nesmysln '
vysledek.
Jedn m
z asto
pou vanj'ch
programtorsk',ch
trikri
je
wtit
v taktr
vm
p pad odnotu,
kter
signalizuje
chybu.
Faktorilje
v dy
k|atl
n slo,
proto
by
mohla
metoda
f
(
)
v
p pad pom ho
paramelrl|
vracet
nap.
odnofu 0:
static
int
f( int
n)
{
i f(n
(
0) return
0;
'i
nt s:1;
//
Pomocn
while(n
)
1)
{
s
*:
n--;
)
neturn ;
I
Dostane-li
metoda
f
()
nezpomy
parametr,
nebude
podm nka
v
pi|
kazu
i
f
splnna.
^Program
edy
pesko i
kaz etunn
v
i f, vyptlt.lr
hodnotu
faktorifu
a vrt ji.
Pedme-li
t to
metod
tt
)
zporny
1lrt
rametr,
rovede
se
p kaz eturn
O v
if aprogram
Se
Z
metody
1( l
ihned vrt .
Cyklus
whi e se
tedy neprovede.
Tuto
verzi
programu najdete
na
WWW v
souboru
kap03\04\
a
4
'
Vyijimky
Skute nost, e metoda f {) indikuje chybnou hodnotu parall| |l||.
znamenur it
pokrok,
ovem
nijak velkj,.
Po ka d m
oln
rrlclrlrlv
f
(
)
toti budeme
muset
kontroLovat,
da nhodou
nevrtila
0. Me
Itrr|.r
|'4an
)
naeho
programu
pak
bude
mt
tvar
l/
Kdy
()
jndikuje
chybu
Vracenou
odnotou
static
void 14aino
{
Conso'le.|nlr itel'ine(.'Zadej
e 1
nezpor 'n
l ; ] rl : ' '
r 'nt.
..
VV.lnln1.():
int.
m
*
f
(n);
/ /
S ta 1
ne
p ln
if
promnn, obsahuje
vysl
edek
5(r
i lt.tltttultt,. lt l. ' lttillttlr
.7
E
vtj ir ttka
Conso]e.|,Jr. i teLjne( ' 'Faktor ' i
1 s l a
{0}.'
+"
je
{1}.",
n, m);
I
el se
t
Consol e.lalr i teLine(
"ladal
js
j
{0}.
"
+
'.
Faktorj.J zporn ho
s la nen def inovn. ' . , | | ) :
l
)
Pou vn metody f
()
se t m nijak nezjednodu ilo.
Navic
tttt.|trt|
kter vracej hodnoty ( k e jim tak unkce), astoptlrriviitttc 'r'
slo itj ch yrazech,
jako
je
x
:
(f(n)-f(n-1))
/f(n-2)
:
Pokud
bychom opravdu chtli vyu t
chopnosti to
irlr|icc
tlr|thrlr,l
chybu
pomoci
vrcen
hodnoty, museli
bychom
nc.jprvc
vv1ttrr-|l
f
(n),
vrcenou
hodnotuulo i t
do
pomocn rom nIrc
t z|irrttlltl|rrt
zda nedo lo
chyb,
otom
ud|at tot f
(n.1)
a
s
l t l|
''
].
'|{|g|.|
by
pak
byl
nepehlednj',
eho
zpis
by
neodpov dir| l tlcttttt
ti1rir'
e en ho
robl mu.
Proto modern
programovaci
jazyky
pou ivaji
v laktlv.tlt|rt
r l1lir
mechanizmus uljimek.
V tomto rivodu si ho
popi crnc:
ieltt
c|tttt |rr|
nodu en; emri eme e mu ale vyhnout, proto c ttttrrhc rtclrrr|vf|rl
z knihoven
prosted
NET vj'jimky
pou vaj .
Vj'jimka
je
chyba, kterou nedok e
dan meto
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
29/124
d lu
t t o
kapitoly
se dozv mc'
e zpisem
new System.Excepl
on
zprva vlastn
vytvime
nstanci
dy ystem.
xcepti
on.)
Uprav me
tedy
metodu
f
(
)
do
tvaru
stat ic
int
f( int
n)
{
i f(n
(
0)
throw
new
Exception(''Faktori]
nen
definovn.');
i nt s
:
1; / /
Pomocn
romnn, bsahuje
vys l
edek
ll
...
a dle
stejn
jako
pedt m
..
l
Dostane-li
tato metoda
f
(
)
jako
parametr nezpom
s lo,
vyptlr:lc
jeho
faktoril.
Dostane-li
a|e
zpom
s lo,
probhne
p kaz hr.r'w
i
p.og.u- skon
hybovj.m
hl en mlg
Unhand1
d Except i
n:
System.
xcept i
n:
Faktori
l nen
def i
novn
at
Vypo et . f (In t32
)
at
Vypo et . | '4a
n(
)
Tato
zprva
nm oznamuj
e,
e vmik|a
neo eten
jjimka
typtr
,u
tem.Exception,
to v metod
()
t d y
ypo e t ,
terou
sme
vrr| l t| l
v
metod
Mai
)
t d y
1 ipo et .
N program nyn pi patn adan mvstupu vyp ezprvu o c|lylrrr
skon .
o
je
skvl
pi
adn ,
ale skute nj'program
se
takto
c|trrr' l
nemri e;
my Se s
t m v ak
zat m spokoj me.
Pozdji
se
samoz 't.1ttl
nau me
fjimky
zachycovat
a
o etovat.
Tento
programnajdete
p WWW
v souboru
Kap03\04\Fakt5
r:',.
P i
programovn dy
V
sme
pou i l imetody
Convert.ToltrI
. 't
9
Convert.ToDoub]
(
).
Pedme-li
mto
metodm
ako
skr'rte ny
li|tl|=
metr znakovj
etzec,
ter ' nep edstavuje
e l ,
resp.
relrti'
| '.|rr,
vyvolaj
tak vyjimku.
Magick
s|a
Po chv l i
experimentu
s vjpo ty faktorilu zjist me,c prrt |trlr|ttrr|ti
v t
e 12
nedv
n
program
sprvn
j'sledky.
Drvtltl
'|c
;t.r|tlrr=
duchf:
vypo ten
s lo
sou
p l i
elk
a
nevejdou
sc tltl
pittttt-|r
y-
lrrazcn
pro
promnnou ypu
i nt.
|.,| ' t ,k t t t I
ttt it le i l t.t lvt.i1
tait lst itItrvl ittr l
Visrr lrI
SlrrrIirr.Nl i '|'.
l i \ l r l \ ' .r '' ' | ' IF t I
r I i r t I t lp1rv ' t lk t l t r .
lct.(.ttttttt
t it l l i tIt lc.
e
Ilttr lc
Irttt
tt.r lp.t.ttttt
lt lIi| |' lrr
It it l .al
ttt.lttt i
yzttttttt t
tttrIt l
trt
l i r I t t t ' r tv eIr
('
ll
1t1
.,
' lr it,i ,' '
&
rcP
5H
l , lc ' , l tu,, l t t , ' l t i l i i ' l i l ' t r l t '
5r )
S
parametrem
vt m
ne |2, upozomit,
e
e
nco patn;
ejl peopt
vyvolat vljimku.
Nic nm samoejm
nebrn upravit za tek
tIo
metody
do
tvaru
stat ic
in, t f( int n)
I
//
Ir ik s etzc. i vysvt l me
o
nko] ik odstavc t ]e
i f(n
(
0) throw
new Exception( , 'Faktori l
. '+
n
+
nen def .i
ovn,'
i f(n
) 12) throw new
Except ion( ' 'P 1 . i
e lk s lo :' ,
+
n) ;
/*
...
a dle stejn
jako
ped t m
..
*/
)
Jen e akto
zapsan
podm nka
pedstavuje
pravdu skvlj'
zprisob,
ak
si v budoucnu
pidlat
problmy.
V tuto chv li
sice dobe v me,
co
slo
12 znamen, ale a se
k
programu
po
njak dob wt me'
aby-
chom
ho opravili
nebo
upravili,
budeme
muset zdlouhav
pemj' let
nad
jeho
vfzramem.
Co kdy se
pozdji
rozhodneme
pou it k
vjpo-
tu aktorilu
jinj'
dator{'
typ s vt m
ozsahem a budeme
cht t futo
konstantu zmnil? V
programu
se toti
mri e vyskytovat
v ce dvanc-
tck s ruznj,m vyznamem
a my budeme
muset
nad ka dou
pemylet,
z,da
eto
ta,
kterou chceme
zmnit, nebo njak
jin.
Takovj,mto
pimo
zapsanlm
konstantm
(literlrim)
ikaji
program-
toi
,,magick
sl. a
pokud
mo no se
jim
vyhj'baj .
M sto toho
pou-
v a j
ojmenovan konstanty, kter
m eme v C# deklarovat
pomoc
slova const,nap.
r:orrst nt lv lez 12;
V dal m
progamu pak
pou vme
dentirktor
Mez;
pi
akj'chkoli
rpravch
ta
mnit deklaraci
t to konstanty,
nemus me
hledat
jej
pou it programu.
|)oklarace
dy ypo et edy
mri e a inat
/ /
froLrbor ap03\04\fkt6.
s na l,J {W
r
l . t
,.;
Vpo e t
I
c:onsL nt Mez
IZ t
,,
. r l . i r:
nt
f( int n)
I
l l ( r l
(
0) throvv ew
Exception(. 'Faktoril
.+
n
+
''
nen def
novn''
;
i l (n
)
Mez)
1-hrow ewExcept ion( ' 'P l i
e lk
s ]o .: '.
+
nr ;
//
'
.
'
t l ' i
t'
. i . t
tt
pt-.dt,im
..
I t rr v i t tt t t l e
i trrk ii1listt
. | ' r
l i / ,
v t 'l k
s lo :' '
+
n.
opertor
+
tttftetttc
lrrtti|
rrrr
;rrtje'rti. c l zcc
|trlc|not
7/23/2019 C# Pro Zelene - Miroslav Virius (2002)
30/124
3.5 Univerz|n
pis
A
dosud
jsme
programovali
t dy, ter obsahovaly
pouze
static|itl
metody a nevy adovaly vytven nstanc . To ale
nen
v
objektovyt'|t
jazycich
p l i
blykl , a
proto
Se v
tomto
odd lu
nau me
prac()Vlll
-
s instancemi.
T da ext
Zatim
jsme
vypisovali text zadany
pomoc
etzcovj'ch
konstant. N
yrr|
se pokus me za dit, bychom mohli tento text programov mnit.
K ukldn zrrakov .ch
etzc
ou vme
v
C#
knihovn t du
tr't tl.t
Mohli bychom tedy v
hlavn
(a
zat mjedin ) t d a eho
progri|||||l
definovat datovou slo ku typu
string. Proto ev ak budeme s
nir1rt
sem cht t
manipulovat i zptisobem' kterj' t da tr^ing neumoI"trr;t..
vytvo me
i
pro
npis zv| tni du, terou nazveme
TeXt.
Tato
t da ude obsahovat
datovou slo ku npi s typu
stri ng' dtl
rrii
budeme ukldat
po aovany
text; a
proto e
pravidla
objektovi.lrli
programovniikaji,
e s
datovj'mi
slo kami by neml zachzet
ni|'t,|u
jiny
ne metody dan iy, deklarujeme
ji jako
soukromou
*
s
pr".islrt
pov..fmi rvy
pr
vaL