tecaj c poglavje dodeljevanje vrednosti in logicne primerjave skozi to celotno poglavje so podana razlicna obmocja vrednosti spremenljivk ta se nanasajo na obmocje vrednosti ki jih je mozno dodeliti neki spremenljivki vas prevajalnik lahko za nekatere od teh spremenljivk uporablja drugacna obmocja saj ansi c standard ne definira specificnih mej za vsak tip spremenljivk oglejte si dokumentacijo vasega prevajalnika za tocna obmocja vrednosti za vsakega od tipov spremenljivk stavki za dodeljevanje vrednosti celostevilskim spremenljivkam primer programa intasign c nalozite program intasign c in si ga oglejte kot primer dodeljevalnih stavkov na zacetku definiramo tri spremenljivke za uporabo v programu ostalo pa so serije ilustracij razlicnih vrst dodeljevalnih stavkov vse tri spremenljivke so definirane v eni vrstici in imajo na zacetku v njih shranjene neznane vrednosti prvi dve vrstici dodeljevalnih stavkov vrstici in dodelijo numericne vrednosti spremenljivkam a in b naslednjih pet pa prikaze pet osnovnih aritmeticnih funkcij in njihovo uporabo peta se imenuje modulo operator in nam daje ostanek pri deljenju dveh spremenljivk lahko ga uporabimo le na celostevilskih spremenljivkah kar bomo podrobneje definirali kasneje vrstici in ilustrirata kako lahko zdruzujemo nekaj spremenljivk v relativno kompleksne matematicne izraze vsi zgornji primeri naj ne bi potrebovali dodatnih komentarjev treba je povedati le se to da nobena izmed enacb ni posebno uporabna razen kot ilustracija prioriteta operatorjev je zelo pomembna tema katero bomo morali pozneje bolj podrobno predelati sedaj pa bomo potrebovali le nekaj pravil ko imate mesane aritmeticne izraze se mnozenje in deljenje izvedeta pred sestevanjem in odstevanjem ce so vse operacije na istem logicnem nivoju za izraz a b c d torej velja da se najprej izvedeta mnozenje in deljenje nato pa sledi se sestevanje v primeru a b c d pa sestevanje sledi deljenju vendar pa nastopi pred mnozenjem ker so operacije na dveh razlicnih logicnih nivojih kot je to definirano z oklepaji izrazi v vrsticah in so veljavni taksni kot so vendar pa bomo pozneje v tem poglavju videli da obstaja nacin zapisati te izraze tako da dobimo veliko bolj kompaktno kodo koda ki izgleda precej cudno to nas pripelje do vrstic in ki se vam bodo morda zdele zelo nenavadne c jevski prevajalnik pregleduje dodelitvene stavke od desne proti levi kar se morda zdi nekoliko nenavadno saj mi ne beremo na ta nacin kar se izkaze v zelo uporabnem konstruktu ki ga lahko vidite tukaj prevajalnik najde vrednost jo dodeli c ju nato pa nadaljuje proti levi kjer ugotovi da se mora zadnja vrednost dodelitit b ju ker smatra da je bil rezultat zadnjega izracuna dodeli to vrednost tudi b ju in nadaljuje z iskanjem proti levi in tako dodeli vrednost tudi a ju to je zelo uporaben konstrukt ko zelite inicializirati skupino spremenljivk stavek v vrstici prikaze da lahko naredimo nekaj izracunov in tako pridemo do vrednosti ki se bo dodelila vsem trem spremenljivkam vrednosti ki so jih imeli a b in c pred zacetkom stavka v vrstici se uporabijo za izracun vrednosti katera se potem dodeli vsem trem spremenljivkam kot pomoc pri razumevanju je vrstica podana z oklepaji da zdruzimo pogoje na razumljiv nacin vrstici in sta identicna stavka program nima nobenega izpisa zato bo prevajanje in poganjanje tega programa zelo nezanimivo ker ste se ze naucili kako izpisati celostevilcne razultate s pomocjo printf funkcije bi bilo v vase dobro da bi dodali nekaj izhodnih stavkov in tako ugotovili ce posamezni stavki pocnejo to kar ste od njih pricakovali morali pa boste dodati stavek include stdio h na zacetek programa da bi lahko uporabljali printf stavke prav tako lahko dodajate svoje dodeljevalne stavke in si tako pridobite nekaj izkusenj za delo z njimi najprej definicije sele nato pa izvrsevalni stavki sedaj bi bil dober trenutek za predhodno definicijo pravila ki se ga morate drzati v c ju definicije spremenljvk so vedno podane pred izvrsevalnimi stavki v vsakem programskem bloku zato so spremenljivke definirane na zacetku sklopa v tem in tudi v vsakem drugem c jevskem programu ce boste novo spremenljvko poskusali definirati po nekaj izvajalnih stavkih vam bo prevajalnik javil napako programski sklop je enota enega ali vec stavkov ki so omejeni z zavitim oklepajem sklop je lahko tudi prazen vendar za to ni prave potrebe razen kot rezerviranje prostora v zgodnji fazi programskega razvoja vec o sklopih bomo povedali kasneje dodatni tipi podatkov primer programa mortypes c nalaganje in editiranje programa mortypes c bo ilustriralo kako lahko uporabite se druge vrste podatkovnih tipov se enkrat smo definirali nekaj celostevilskih spremenljivk katere vam bi morale biti jasne dodali pa smo se dva nova tipa char in float tip podatkov char je zelo podoben integerjem le da lahko zavzame numericne vrednosti med in na vecino implementacij c ja na mikroracunalnikih saj je ponavadi shranjen v enem bytu pomnilnika nekatere implementacije c ja uporabljajo za hranjenje char spremenljivk vecje elemente pomnilnika in zato dobi vecje obmocje vrednosti tip podatkov char se ponavadi uporablja za ascii podatki ki so bolj znani pod imenom besedilo besedilo ki ga trenutno berete je bilo napisano na racunalniku z urejevalnikom besedila ki je shranjeval tekst v racunalnik tako da je vsak znak shranil v en byte pomnilnika na drugi strani pa tip podatka int skoraj vsi mikroracunalniki shranjujejo v dva byta pomnilnika nekateri pa tudi v vec saj je vecina novejsih racunalnikov bitnih in shranjujejo int spremenljivke v stiri byte pomnilnika zapomnite si da ceprav je bil tip char namenjen temu da hrani predstavitev ascii znaka ga lahko ucinkovito uporabimo za hranjenje manjsih vrednosti ce to zelimo vec o tem bomo povedali v sedmem poglavju ko bomo obdelali nize mesanje tipov podatkov sedaj bi se izplacalo razloziti nacin s katerim c obravnava tipa char in int vecina operacij v c ju ki je zasnovana za delovanje z int tipom bo enako dobro delovala s char tipom saj sta oba celostevilska kar pomeni da nimata decimalnega dela te operacije kadar se bodo izvajale na spremenljivkah char bodo namrec pretvorjene v tip int zato je mogoce char in int tip med seboj mesati na skoraj vse mogoce nacine prevajalnik se ne bo zmedel mogoce pa je da se boste vi dobro je da se na to ne zanasate prevec pac pa uporabljate pravilne tipe tam kjer morajo biti uporabljeni drugi novi tip podatkov je tip float ki se mu pravi tudi podatek s plavajoco vejico to je tip podatka ki ima ponavadi zelo veliko obmocje vrednosti precej veliko stevilo pomembnih mest potrebno pa je veliko stevilo racunalniskih besed za njegovo hranjenje s float tipom podatka je povezana decimalna vejica in za hranjenje posamezne spremenljivke tipa float je potrebno nekaj bytov pomnilnika kako uporabiti nove tipe podatkov prve tri vrstice programa dodelijo vrednosti vsem devetim definiranim spremenljivkam tako da imamo podatke katere lahko izmenjujemo med razlicnimi tipi ker je kot smo ze omenili tip podatka char pravzaprav celostevilski tip ki se avtomatsko pretvori v tip int ko je to potrebno ni potrebno upostevati nicesar posebnega kadar pretvarjamo tip char v int prav tako pa lahko podatkovno polje tipa char dodelimo int spremenljivki ce pa spreminjamo v drugo smer lahko int spremenljivko dodelimo spremenljivki tipa char kar se bo prevedlo pravilno ce je vrednost v obmocju vrednosti tipa char ponavadi od do ce pa je vrednost izven obmocja tipa char prevajalnik zavrze najbolj pomembne bite in uporabi najmanj pomembne vrstica prikaze enostavnost pretvarjanja int v float spremenljivki float preprosto dodelimo novo vrednost pravilno pretvorbo pa bo naredil sam sistem kadar pa float pretvarjamo v int pa se pojavi tezava ker ima stevilo s plavajoco vejico decimalni del se mora sistem odlociti kaj bo z njim naredil ponavadi se ta del odreze in tako dobimo celo stevilo ta program ne generira nikakrsnega izpisa pa tudi nismo se povedali kako izpisujemo char in float spremenljivke zato se ne morete poglobiti program in se poigrati z rezultati to bomo obdelali v naslednjem programu prevedite in pozenite program ko ste se prepricali da veste kako deluje morda vam bo prevajalnik javil opozorila glede pretvarjanja tipov ta lahko ignorirate zaradi majhnih vrednosti ki jih uporabljamo za ilustracijo posameznih tipov podatkov nekatere tipicne velikosti ta seznam prikazuje nekatere tipicne vrednosti za razlicne tipe ki so dosegljivi v c ju vas prevajalnik lahko ponuja razlicne meje in velikosti saj so med posameznimi prevajalniki lahko razlike te vrednosti veljajo za microsoft visual c verzijo bits in visual c verzijo bits ime tipa biti obmocje bit system char to signed char to unsigned char to short to unsigned short to int to unsigned int to long to unsigned long to float e digits double e digits long double e digits bit system char to signed char to unsigned char to short to unsigned short to int to unsigned int to long to unsigned long to float e digits double e digits long double e digits marljiv student bo opazil da je edina razlika med tema dvema seznamoma v velikosti in mejah spremenljivk tipa int tako predznacenih kot nepredznacenih ansi c standard namrec pravi da ima int naravno velikost ki je pogojena s sistemom kjer se program izvaja tako da se obmocja v zgornjem seznamu popolnoma skladajo s tem standardom poudariti pa je treba se eno stvar glede zgornje tabele ali je tip char predznacen ali ne je cisto v rokah pisca prevajalnika pisci microsoftovega prevajalnika so se kot vecina drugih piscev prevajalnikov odlocili da definirajo tip char kot signed char vseeno pa imate sami moznost to spremeniti saj vecina prevajalnikov ponuja moznost preklopa na izbiro da je char v resnici unsigned char za ugotavljanje meja obmocij vrednosti je na voljo nekaj koristnih konstant kot primer sta imeni int min in int max na voljo v datoteki limits h kot konstanti ki ju lahko uporabite v svoji kodi int max je najvecje mozno stevilo ki ga lahko shranite v tip spremenljivke int z danim prevajalnikom ko boste zamenjali prevajalnik kar boste nekega dne gotovo storili se bo int max nanasal na najvecjo vrednost int za tisti prevajalnik cetudi boste nekoc delali na operacijskem sistemu s ali celo bitno strukturo se bo int max se zmeraj nanasal na najvecji int na tistem racunalniku datoteka limits h vsebuje veliko stevilo takih meja vse pa so vam dosegljive tako da to datoteko vkljucite v svoj program je tekstovna datoteka ki jo lahko odprete v vsakem urejevalniku besedila in preucite kar bi za vas tudi bila dobra vaja v tem trenutku veliko tipov spremenljivk primer programa lottypes c nalozite program lottypes c in si ga oglejte ta datoteka vsebuje vecino standardnih enostavnih tipov podatkov ki so na voljo v programskem jeziku c preglejte dokumentacijo vasega prevajalnika za celoten seznam tipov ki so na voljo v njem obstajajo se drugi tipi vendar so to sestavljeni tipi na primer polja in strukture ki pa jih bomo obdelali pozneje oglejte si program najprej definiramo enostaven int nato pa se long int nato sledi short int ki ima obmocje vrednosti ki je lahko enaki tisti ki jo ima int naslednji tip je unsigned ki ima enako obmocje kot int le da nima predznaka treba je poudariti da ko deklariramo tipe long short ali unsigned besedica int ni nujno potrebna in jo vecina izkusenih programerjev izpusca vas prevajalnik ima lahko za spremenljivke zelo razlicna obmocja zato preglejte njegovo dokumentacijo za natancna obmocja teh tipov tip double je za stevilo s plavajoco vejico vendar pokriva vecje obmocje kot tip float in ima vec pomembnih mest za bolj natancno racunanje zahteva pa tudi vec pomnilnika za hranjenje kot enostavni float long double pokriva mnogo vecje obmocje vrednosti in hrani vec pomembnih mest vendar pa tudi racunanje z njim traja dalj casa zaradi vecje velikosti podatkov ki jih uporabljamo na tej tocki je potrebna se ena opomba vas prevajalnik najbrz nima moznosti racunanja s stevili s plavajoco vejico lahko pa racuna z double stevili s plavajoco vejico float stevila bo zato spremenil v double in nato racunal z njimi tako da bomo potrebovali le eno matematicno knjiznico za vas je to seveda nevidno zato vam o tem ni potrebno prevec razmisljati zaradi tega boste morda pomislili da bi bilo najbolje vsako spremenljivko s plavajoco vejico definirati kot double saj se vse te spremenljivke pretvorijo v tip double vendar pa to ni vedno dobra ideja spremenljivka float bo zasedla stiri byte pomnilnika double pa osem in ce imate za hranjenje veliko podatkov s plavajoco vejico vam bo tip double zahteval veliko vec pomnilnika ce ne rabite dodatnega obmocja vrednosti ali dodatnih pomembnih mest raje kot double uporabite float prevajalnik naredi vse podatke s plavajoco vejico kot je to vrednost v vrstici konstante double ze sam po sebi nekateri prevajalniki bodo morda sporocili opozorilo zaradi vrstice kjer prirejamo spremenljivki double spremenljivko tipa float zaenkrat lahko to opozorilo mirno ignorirate ko definiramo podatkovne tipe podamo numericno vrednost vsaki od spremenljivk da bi lahko prikazali nacine kako vsako od njih izpisujemo na zaslon nekateri pozni dodatki ko se programski jezik razvija se mu dodajajo dodatni konstrukti da bi zadovoljili neke prej spregledane potrebe dve novi rezervirani besedi sta bili dodani c ju zaradi izdaje ansi c standarda le ti nista prikazani v primerih programov bosta pa obravnavani v tem tecaju to sta besedi const in volatile in se uporabljata za sporocanje prevajalniku da so to spremenljivke ki zahtevajo posebno pozornost konstanto deklariramo z rezervirano besedo const oznacuje pa vrednost katere programsko ne moremo spreminjati ce boste pomotoma skusali spremeniti vrednost ki je definirano kot konstanta vam bo prevajalnik javil napako deklarirati zadevo kot const pomeni olajsati delo optimizatorju in omogociti da bo program tekel nekoliko hitreje ker konstantam ne moremo vrednosti dolocati v izvajalnih stavkih jih moramo vedno inicializirati ce je uporabljena beseda volatile deklarira vrednost ki jo lahko spreminja program lahko pa jo tudi spremeni nek zunanji vpliv kot je recimo racunalniska ura ki bi recimo povecala vrednost shranjene spremenljivke to prepreci optimizatorju da bi optimiziral stvari za katere misli da se ne bodo spreminjale vendar pa se z njimi to lahko zgodi tu so podani primeri uporabe obeh tipov konstant const int index const index const float big value volatile const int index volatile int index znaki za pretvorbo sledeca tabela je seznam nekaterih pretvorniskih znakov in nacin kako jih uporabimo v printf stavkih kompleten seznam teh znakov bi moral biti prilozen dokumentaciji danega prevajalnika ni se potrebno da razumete vse morali pa bi vedeti da je pri teh stavkih prisotna velika prilagodljivost ko se jo boste naucili uporabljati d desetiska notacija i desetiska notacija razsiritev novega standarda ansi o osmiska notacija x sestnajstiska notacija u nepredznacena notacija c znak character s niz string f notacija s plavajoco vejico pred vsakega izmed teh znakov moramo postaviti znak za procent da nakazemo katerega tipa izpis zelimo naslednja polja pa lahko postavimo med ta dva znaka leva poravnava v polju n stevilo ki doloca najmanjso sirino polja locilo med n in m m stevilo pomembnih decimalnih mest za stevila s plavajoco vejico l da nakazemo long vsi ti znaki so ze uporabljeni v programu lottypes c z izjemo notacije niza katero bomo obdelali pozneje vrstice od do prikazujejo kako lahko dolocimo poljubno sirino polja v katerega se izpise spremenljivka vrstici in pa prikazeta kako dolocimo sirino polja s pomocjo programske kontrole sirina polja za izpis tip float v vrsticah od do bi morala biti jasna sama po sebi prevedite in pozenite program ter ugotovite kaksen vpliv imajo posamezna polja na izpis sedaj imate zmoznost izpisa kakrsnegakoli podatkovnega polja in dobro bi bilo ce bi pogledali prejsnje programe in ugotovili ce lahko polja prikazete na nacin ki si ga sami zelite zdruzevanje razlicnih tipov primer programa combine c oglejte si datoteko combine c kjer so primeri kombiniranja spremenljivk razlicnih tipov v programu velikokrat moramo mnoziti spremenljivko tipa int s spremenljivko tipa float in c nam to dovoljuje z uvedbo skupine strogih pravil ki se jih drzi pri relizaciji takih kombinacij v programu deklariramo pet spremenljivk treh razlicnih tipov v vrsticah do tri od njih pa tudi inicializiramo tako da imamo nekaj podatkov s katerimi lahko delamo vrstica nam pokaze primer ko int spremenljivko pristejemo float spremenljivki rezultat pa dodelimo spremenljivki tipa char za kontrolo tipa ki ga pristevamo uporabimo t i kasto ki ji nakazemo z definicijo tipa v katerega zelimo pretvarjati ki ga zapisemo v oklepaj pred spremenljivko to prisili oba tipa da se pretvorita v tip char pred sestevanjem v nekaterih primerih uporabe kaste se mora bitna struktura spremeniti od znotraj da bi lahko dobili tip ki ga zelimo vrstice od do izvedejo enako sestevanje z uporabo razlicnih kast da bi dobili koncni rezultat to pomeni da je sestevanje v vseh treh primerih razlicno ker sestevamo razlicne tipe lahko bi se celo zgodilo da dobimo razlicne rezultate vrstice od do nam ilustrirajo uporabo kaste pri mnozenju dveh float spremenljivk v dveh primerih se vmesni rezultat pretvori v tip int koncni rezultat pa se s pomocjo kaste zopet pretvori nazaj v tip float marljiv student bo opazil da rezultat teh treh vrstic ne bo nujno enak prevedite in pozenite ta program ko ga boste prevedli se lahko zgodi da boste dobili veliko opozoril zaradi pretvarjanja tipov katere pa lahko zaenkrat se ignorirate v tem programu demonstriramo stvari katere lahko naredite niso pa nujno dobre v pravih programih lahko pa se znebimo vseh opozoril tako da v program pri pretvarjanju tipov vkljucujemo kaste logicne primerjave primer programa compares c nalozite in si oglejte program ki vsebuje veliko primerov primerjalnih stavkov v c ju zacnemo z deklaracijo in inicializacijo devetih spremenljivk za uporabo v programu prva skupina primerjalnih stavkov predstavlja najenostavnejso vrsto primerjav saj med seboj enostavno primerjamo dve spremenljivki katerokoli od spremenljivk bi lahko zamenjali s konstanto pa bi primerjava se zmeraj bila legalna vendar pa je primerjava dveh spremenljivk bolj splosna prva primerjava preverja ce je vrednost x a enaka vrednosti y a in uporablja dvojni enacaj za primerjavo ker sta x in y enaka dobi z vrednost tu bi lahko uporabili enojni enacaj kar pa bi imelo drugacen pomen kot bomo to videli kasneje druga primerjava preverja ce je trenutna vrednost x a vecja od trenutne vrednosti y a tretja primerjava vpelje nov operator negacijo ki je predstavljena s klicajem ki se lahko uporabi za invertiranje rezultata logicne primerjave cetrta preverja ce je vrednost b ja manjsa ali enaka vrednosti c ja zadnja pa preveri ce vrednost r a ni enaka vrednosti s a kot smo se naucili ze v prejsnjem poglavju ce je rezultat primerjave resnicen se bo izvedel stavek ki sledi if stavku rezultati pa so dani v komentarju mozne so tudi primerjave manjse od in vecje ali enako vendar jih v tem primeru nismo omenili dobro bi bilo ce bi omenili drugacen format if stavka v tem primeru prehod v novo vrsto kot locitev stavkov ni potreben ce pa postavimo pogojni stavek v isto vrsto kot if stavek izboljsamo citljivost celotnega programa se vec primerjav primerjave v drugi skupini so ze nekoliko bolj zapletene ce zacnemo s prvo primerjavo najdemo v oklepaju nenavadno skupino pogojev da bi jih razumeli moramo razumeti kaj v c ju pravzaprav pomeni resnicno in neresnicno neresnicno je definirano kot vrednost nic resnicno pa je katerakoli druga od nic razlicna vrednost vsaka celostevilska ali znakovna spremenljivka se lahko uporablja kot rezultat testa resnicno neresnicno tudi rezultat lahko priredimo int ali char spremeniljivki poglejte si prvo primerjavo v drugi skupini primerjalnih stavkov pogojni stavek r s bo ocenjen kot resnicen saj smo r u v vrstici dodelili vrednost torej bo rezultat primerjave nenicelno stevilo pri vseh dobrih prevajalnikih za c bo postavljena na pravilo dobrega programiranja bi bilo da tako dobljene enke ne uporabljamo v izracunih pac pa le za logicno kontrolo ceprav sta obe primerjani spremenljivki tipa float bo logicni rezultat tipa int nazadnje rezultat dodelimo celostevilski spremenljivki x ce bi tu uporabili dvojni enacaj bi se fantomska vrednost to je ena primerjala z x om ker pa smo uporabili enojni enacaj se vrednost priredi x u kot da stavek ne bi bil v oklepaju ker je bil rezultat primerjave v oklepaju nenicelen je bil celoten izraz ocenjen kot resnicen smo x u dodelili novo vrednost z ju pa smo dodelili vrednost v tem stavku smo predelali kar nekaj snovi zato si ga preden nadaljujete oglejte se enkrat stvari ki si jih velja zapomniti so vrednosti ki jih zavzameta izraza resnicno in neresnicno ter to da lahko v primerjalnemu stavku priredimo vec stvari vrednost prirejena x u je bila verjetno toda edina zahteva je to da je bilo to nenicelno stevilo ansi c standard pravi da mora biti rezultat primerjalnih operacij or enak ali ne definira pa rezultata operacije enacenja ce boste predvideli da bo ta vrednost ali in jo boste uporabili le za kontrolo ne boste imeli tezav primer v vrstici bi vam nekaj od zgornjih trditev pomagal razjasniti v tem primeru x u priredimo vrednost y a in ker je rezultat je pogoj nenicelen kar pomeni da je resnicen z dodelimo vrednost tretji primer v drugi skupini v vrstici primerja vrednost x a z niclo ce je rezultat resnicen torej x ni nic potem z ju priredimo vrednost kar se bo tudi zgodilo zadnji primer v tej skupini predstavlja isti koncept saj bo rezultat resnicen ce je x razlicen od nic primerjava z niclo v vrstici pravzaprav sploh ni potrebna in rezultat primerjave je resnicen tretji in cetrti primer v tej skupini so tako logicno enaki seveda pa z ju vsakic priredimo drugo vrednost dodatni primerjalni koncepti tretja skupina primerjav nam bo predstavila neka dodatne koncepte to sta logicna in ter ali operatorja vrednost priredimo vsem trem spremenljivkam preprosto zato da imamo neke podatke s katerimi lahko operiramo prva primerjava v tej skupini nam predstavi nov operator ki je logicni in ki je resnicen ce sta resnicni obe strani celoten izraz se tako prebere ce je x enak y in ce je x enak potem je rezultat resnicen ker to velja z ju dodelimo vrednost operator in lahko uporabljamo le s celostevilskimi spremenljivkami torej tipa float in double tu ne prideta v postev naslednja primerjava v tej skupini uvede operator to je logicni ali ki je resnicen ce je vsaj ena izmed strani resnicna stavek se prebere kot ce je x vecji od y ali ce je z vecji od potem je rezultat resnicen ker je z vecji od ni pomembno ce je x vecji od y saj mora biti le eden od pogojev resnicen pa je tudi rezultat resnicen tak tu tudi je zato z ju priredimo vrednost podobno kot v prejsnjem primeru tudi tu ne moremo uporabljati tipov float in double logicno vrednotenje short circuit kadar vrednotimo sestavljen stavek vrednotenje poteka z leve proti desni in ko je izid zagotovljen se vrednotenje ustavi tako se v primeru and stavka ko je eden od pogojev neresnicen vrednotenje ustavi saj tudi dodatni resnicni pogoji ne morejo povzrociti da bi bil tudi celoten rezultat resnicen v primeru or stavka pa se vrednotenje ustavi ko je eden od pogojev resnicen saj je kljub kakrsnimkoli naslednjim pogojem nemogoce da bi bil rezultat neresnicen temu pravimo tudi short circuit evaluation saj se ostali pogoji ne vrednotijo ce gremo na naslednji primer v tretji skupini najdemo tri enostavne spremenljivke uporabljene v pogojnem delu primerjave ker so vse tri razlicne od nic so vse tri resnicne torej je tudi and stavek resnicen zato z ju priredimo vrednost bodite pozorni da spremenljivk r s in t ne bi mogli uporabiti na tak nacin saj so tipa float ce nadaljujemo na vrstici najdemo tri prireditvene stavke v primerjalnem delu if stavka ce ste razumeli zgornjo diskusijo vam ne bo tezko razumeti da vsem trem spremenljivkam po vrsti priredimo njihove nove vrednosti rezultat od vseh treh je razlicen od nic kar pomeni da je rezultat resnicen to je trik bodite pazljivi zadnji primer v tretji skupini vsebuje nekaksen trik ker pa smo ga ze obdelali zgoraj ne zvemo nic novega opazili boste da je prvi del primerjave neresnicen saj x trenutno ni enak ostali deli primerjave se ne vrednotijo saj je to logicni and in je v vsakem primeru neresnicen ce bi bil program odvisen od dodelitve vrednosti y u ne bi deloval saj se vrednotenje konca po prvem pogoju ki je neresnicen podobno spremenljivki z ne dodelimo vrednosti prav tako pa ne spremenimo r a to je zato ker c kot smo ze povedali uporablja short circuit evaluation potencialna problematicna obmocja zadnja skupina prikazuje tri moznosti kjer lahko zaidete v tezave vse tri imajo podoben rezultat to je nepravilno ravnanje z z jem vendar pa se to dogaja iz razlicnih razlogov v vrstici se primerjava ovrednoti kot resnicna vendar pa podpicje ki sledi drugemu oklepaju zakljuci if stavek zato se prireditveni stavek ki vsebuje z vedno izvede kot naslednji stavek if stavek torej nima nobenega vpliva zaradi napacno postavljenega podpicja v resnici je to nicti stavek ki je sicer veljaven v c ju vendar pa programer verjetno ni hotel zapisati dodatnega podpicja stavek v vrstici je bolj jasen saj bo spremenljivka x vedno enaka sama sebi neenacaj ne bo nikoli izpolnjen torej celoten stavek ne bo nikoli izveden pac pa je le izgubljen trud stavek v vrstici bo x u vedno priredil vrednost primerjava bo vedno neresnicna pogojni del if stavka se torej nikoli ne bo izvedel pogojni stavek je izredno pomemben in ga morate podrobno razumeti da boste lahko pisali ucinkovite c jevske programe ce se vam katerikoli del snovi zdi nerazumljiv ga preucite se enkrat dokler ne boste prepricani da ga razumete lahko se zgodi da boste dobili veliko opozoril zaradi konverzije tipov ki jih lahko ignorirate ali pa v program zapisete kaste dodajte nekaj izpisa da boste videli rezultate nekaterih operacij nejasni del c ja primer programa cryptic c v c ju obstajajo trije konstrukti ki se ne bodo zdeli smiselni ko jih boste prvic videli saj jih je tezko razumeti intuitivno vendar pa lahko izboljsajo ucinkovitost prevedene kode in jih izkuseni programerji s pridom uporabljajo ravno zato jih morate videti in se jih nauciti saj se bodo pojavljali v vecini ce ne kar v vseh programih ki jih boste srecali v publikacijah nalozite in si oglejte program cryptic c za primer teh treh novih konstruktov v tem programu je nekaj spremenljivk definiranih in inicializiranih za poznejso uporabo stavek v vrstici enostavno doda vrednosti x kar vas ne bi smelo presenetiti tudi naslednja dva stavka dodata x u vendar pa to ni takoj razvidno to je res ker je tako definirano torej po definiciji c ja dvojni plus pred ali po spremenljivki poveca to spremenljivko za dodatno ce sta plusa pred spremenljivko se ta poveca pred uporabo ce pa sta za njo pa se poveca po uporabo v vrstici vrednost y a dodelimo z ju nato pa y povecamo saj sta plusa za spremenljivko v zadnjem stavku te skupine vrstica vrednost y a najprej povecamo nato pa njegovo vrednost dodelimo spremenljivki z pravilna izraza za ta dva konstrukta sta predekrement in postdekrement naslednja skupina stavkov prikazuje zmanjsanje spremenljivke za eno definicija je enaka za dekrement kot za inkrement ce sta minusa pred spremenljivko se ta najprej zmanjsa in nato uporabi ce pa sta minusa za spremenljivko pa jo najprej uporabimo in nato zmanjsamo pravilna izraza pa sta predekrement in postdekrement ta konstrukt boste v svojih programih veliko uporabljali nejasni aritmeticni operator se en uporaben vendar nejasen operator je aritmeticni operator ta operator uporabljamo za spreminjanje neke spremenljivke za konstantno vrednost stavek v vrstici pristeje vrednosti spremenljivke a stavek v vrstici naredi isto vendar pa to zopet ni intuitivno jasno katerokoli izmed stirih aritmeticih funkcij lahko uporabljamo na ta nacin tako da postavimo zeleno operacijo pred enacaj in izpustimo drugo sklicevanje na spremenljivko treba je poudariti da je lahko izraz na desni strani aritmeticnega operatorja katerikoli veljaven izraz v c ju primeri so enostavni za lazje razumevanje tega novega operatorja kot velja za inkrement in dekrement tudi aritmeticni operator izkuseni programerji veliko uporabljajo zato bi se vam izplacalo da ga dobro razumete pogojni izrazi pogojni izrazi so tako nejasni kot zadnja dva konstrukta vendar se jih zopet splaca razumeti saj so zelo uporabni sestavljajo jih trije izrazi loceni z vprasajem ter dvopicjem najprej se ovrednoti izraz pred vprasajem da se ugotovi ali je resnicen ali neresnicen ce je resnicen se ovrednoti izraz med vprasajem in dvopicjem ce pa izraz ni resnicen pa se ovrednoti izraz za dvopicjem rezultat enega od vrednotenj se uporabi za prireditev kot je to prikazano v vrstici koncni rezultat je enak tistemu ki ga dobimo s pomocjo if else stavka to je prikazano v vrsticah od do v tej skupini stavkov pogojni izrazi imajo to prednost da je z njimi koda bolj kompaktna ter da se prevede na manj strojnih ukazov v koncnem programu vrstice in tega primera so podane da prikazejo kako spremenljivki c dodeliti vecjo od vrednosti a in b in kako dodeliti manjso od teh dveh vrednosti c ju bodite pozorni kako ucinkovita je koda v tem primeru pisati jasno ali nejasno nekaj studentov je izjavilo da jim ti trije nekoliko nejasni konstrukti niso vsec in da jih enostavno ne bodo uporabljali to bi bilo v redu ce jim ne bi bilo treba brati programov ki so jih napisali drugi ljudje ali pa te programe celo uporabljati v svojih nasli boste veliko funkcij ki jih boste lahko uporabili v svojih programih rabili pa bodo malenkostne spremembe za katere pa bo potrebno razumevanje izposojene funkcije zato bo v vaso korist da se teh konstruktov naucite in jih tudi uporabljate uporabljeni bodo tudi v nadaljevanju tega tecaja tako da se boste prisiljeni z njimi spopasti to je bilo dolgo poglavje vendar pa je vsebovalo pomembne snovi ki vam bodo v veliko pomoc da boste zaceli programirati v c ju v naslednjem poglavju se bomo posvetili gradbenim enotam programov funkcijam takrat boste ze imeli dovolj osnovnega znanja za pisanje smiselnih programov stilski nasveti po tem poglavju nimamo kaksnih posebnih stilskih nasvetov razen stilskih metod predstavljenih v primerih programov vecina teh programov je netipicnih za c saj na primer skoraj nikoli nimamo potrebe v program napisati seznam vseh moznih primerjav te programe lahko uporabljate kot vodnike do dobrega stila programiranja ceprav niso pravi programi kaj je l vrednost in kaj r vrednost figure vcasih boste kje zasledili pojma l value ali r value v gradivu o c ju ali v dokumentaciji za vas prevajalnik vsaka spremenljivka ima r vrednost ki je definirana kot dejanska vrednost shranjena v spremenljivki ima pa tudi l vrednost ki je definirana kot ime spremenljivke tako bi imela spremenljivka predstavljena graficno na sliki l vrednost index in r vrednost saj je to dejanska vrednost shranjena v spremenljivki definicija te spremenljivke bi se torej glasila int index programerske naloge napisite program ki bo stel od do izpisoval steta stevila in njihove kvadrate za vsako stevilo posebej napisite program ki steje od do in izpisuje stevne vrednosti in njihova inverzna stevila na pet decimalk natancno za to bo potrebno stevilo s plavajoco vejico napisite program ki bo stel od do izpisal pa le stevila med in vsakega v svojo vrsto za ta program uporabite operator inkrement povratek na kazalo prehod na poglavje copyright coronado enterprises last update march prevedel saso kuntaric