home *** CD-ROM | disk | FTP | other *** search
/ Flop Magazin 32 / Flop_Magazin_32_1994_06_Raster_cs_Side_A.atr / kursc4.cap < prev    next >
Text File  |  2023-02-26  |  8KB  |  1 lines

  1.     Kurs programov*n)  "C"  '*st 4.¢¢¢  ù=37,»=92,²=123,å=91,ñ=93,ó=39¢Θ definice znaku procenta, obr*cen[ho lom)tka, lev[ slo(en[ z*vorky, lev[ a prav[ lomen[ z*vorky, apostrofu.¢¢  ¢         Podm)nky a cykly III.¢¢¢  Z*kladn)m cyklem pro opakovan[ prob)h*n) je p@)kaz WHILE. Jeho syntaxe  v C['ku:¢¢     while╱<v`raz>$¢    ²¢       p@)kaz;¢       p@)kaz;¢       p@)kaz;¢    }¢¢  P@)kaz je mo(n[ popsat jako podm)nku s opakov*n)m, proto(e blok p@)kaz+ uveden`ch za WHILE se prov*d), dokud nen) spln%na podm)nka. Pokud nastane situace, (e ke spln%n) nikdy nedojde, program se "zacykl)" a pom+(e jen RESET po')ta'e. Zda studen` 'i jen programov% @)zen` z*le() na dan[m syst[mu.¢  Ji( d@)ve popisovan` p@)kaz FOR je vlastn% rozveden` p@)kaz WHILE a dalo by se ()t i bez n%j. Jeho 'innost je samoz@ejm% mo(n[ celou popsat jednoduch`m WHILE s p@id*n)m @ady podm)nek a p@i@azovac)ch p@)kaz+.¢  Podobn`m p@)kazem je i DO - WHILE. Jeho syntaxe:¢¢    do ²¢       p@)kaz;¢       p@)kaz;¢       p@)kaz;¢    } while╱<v`raz>$;¢¢  V&im%te si pravidel pro psan) st@edn)ku - p)&e se povinn% za posledn)m @*dkem p@)kazu. Pou(it` zp+sob z*pisu slo(en`ch z*vorek, 'ili uzav)rek bloku p@)kaz+, je doporu'en`, odli&) tak na prvn) pohled p@)kaz do-while od jednoduch[ho while.¢  Z*sadn)m rozd)lem je zkoum*n) podm)nky a( na konci bloku. Proto prob%hne cyklus minim*ln% jednou.¢  Oba druhy cykl+ jsou @)zeny logick`m v`razem uveden`m v kulat`ch z*vork*ch za kl)'ov`m slovem while. Pro prvn) pokusy s cykly je z@ejm% nejjednodu&&) pou()t 'ten) z kl*vesnice a v podm)nce testovat v`skyt ur'it[ho znaku, nap@)klad:¢¢       while ╱a != óQó$¢         a=getchar╱$;¢¢kde cyklus prob)h*, dokud nen) stistknuta kl*vesa Q. Uzav@en) znaku do apostrof+ vyj*d@uje znakovu konstantu, p@evede vlastn% znak na jeho ASCCI hodnotu, tedy na ')slo. Znakov* konstanta m+(e b`t pouze jednom)stn* a dl*le se od @et%zce l)&) t)m, (e ten je uzav@en` v uvozovk*ch. Pokud uvid)te mezi apostrofy sled dvou znak+ jako je obr*cen[ lom)tko a mal[ n, uv%domte si, (e jde skute'n% jen o jednu znakovou konstantu, zde konkr[tn% o @)d)c) kd od@*dkov*n) ╱LF$.¢   K t[to kapitole nen) p@ilo(en (*dn` programov` v`pis s p@)klady, proto(e na tvorbu zaj)mav%j&)ch progr*mk+ dosud chyb) mo(nost komunikace.¢¢¢   Vstup a v`stup, definice funkc) I.¢¢  Pro za'*tek se pod)vejme na zdrojov` v`pis programu X p@ilo(en[ho na disket% s jazykem "C". P@)ru'ka se zmiuje o n%jak[ demonstraci vstupu a v`stupu.¢  Po vyti&t%n) na pap)r vid)m, (e program obsahuje t@i '*sti - hlavn) funkci main╱$ a dv% dal&) definovan[ u(ivatelem. S tou definic) to nen) tak hork[ - (*dn[ deklarace 'i snad vytv*@en) hlavi'kov`ch soubor+, jak se slu&) a pat@). Je to zato jednoduch[, nebo④ sta') napsat funkce podle obecn[ syntaxe a u( to chod).¢  Na druh` pohled je vid%t, (e zdrojov` v`pis je napsan` velmi nep@ehledn%, (*dn[ odr*(en) mezerami a podobn%. Rad%ji uvedu jako prost` fakt, (e program simuluje funkci DOSu kop)rov*n) z obrazov[ho editoru do souboru a opa'n%.¢  Hlavn) '*st programu vyp)&e jm[no programu a v druh[ @*dce nab)dne mo(n[ povely. Cel` zbytek tvo@) cyklus FOR ve zvl*&tn) nekone'n[ ]prav%. Prost`m vynech*n)m parametr+ se doc)l) nekone'n[ho opakov*n) cyklu. Z*vorky obsahuj) pouze zbyl[ odd%lovac) st@edn)ky, kter[ jsou povinn[. Takov` cyklus se d* ukon'it jen n*siln`mi p@)kazy break a return. Srovnejte si to s BASICem - zde takov* divo'ina nen) v+bec mo(n*.¢  P@)kaz je z kl*vesnice 'ten n*m zn*mou funkc) getchar╱$, jej)( v`stup je upraven funkc) tolower╱$. Tato p@ev*d) velk* p)smena na mal*, ostatn) nech*v* beze zm%ny. Program pak m+(e reagovat na povely zad*van[ mal`mi i velk`mi p)smeny bez nutnosti ps*t dvoj) podm)nky. Jist% dobr[, pokud n*m pro zad*v*n) sta') anglick* abeceda.¢  N*sleduj)c) '*st programu je uzav@ena do cyklu while, kter` obsahuje jedin` p@)kaz switch╱$, proto za n)m nejsou pou(ity uzav)rky bloku. Smyslem podm)nky cyklu je hl)d*n) zad*n) pr*zdn[ho znaku RETURN. V takov[m p@)pad% vn%j&) cyklus for╱$ vr*t) pr+b%h programu zp%t na nov[ 'ten) povelu z kl*vesnice. Program by fungoval stejn% dob@e i bez cyklu while╱$, ale doch*zelo by ke hroucen) tisku chybov[ho hl*&en).¢  P@ep)na' switch╱$ obsahuje t@i mo(n[  volby a d*le o&et@en) nespr*vn`ch zad*n). V takov[m p@)pad% vyp)&e zpr*vu zad*n) neplatn[ho p@)kazu a zopakuje mo(n[ volby - nyn) ji( s n*pov%dou jejich v`znamu.¢   P@i volb% 'ten) je vol*na funkce rfile╱$, pro z*pis wfile╱$. Ukon'en) programu prov*d) p@)kaz return. Ten ru&) v(dy funkci, ve kter[ je obsa(en, je-li to pr*v% funkce main╱$, zru&) cel` program.¢  Vlastn) operace 'ten) a z*pisu jsou nadefinov*ny jako samostatn[ funkce. Do&lo tak ke zp@ehledn%n) programu. Vol*n) podprogram+ zn*me samoz@ejm% i z BASICu, ale v n%m by ji( nebylo mo(n[ v kazd[ funci zvl*&④ deklarovat prom%nnou c stejn[ho jm[na, p@itom naprosto nez*visl[. ②)k* se tomu lok*ln) prom%nn* a jej) obsah je p@)stupn` b%(n% jen ve funkci, v n)( byla deklarov*na. V&im%me si, (e definovan[ funkce 'ten) a z*pisu nepou()vaj) (*dn[ parametry, tak(e se p)&) s pr*zdn`mi kulat`mi z*vorkami.¢  V programu je pou(ito n%kolik dosud neprobran`ch funkc), proto je nyn) stru'n% pop)&u.¢  Funkce gets╱string$ by m%la b`t podobn* p@)kazu INPUT z BASICu. Na')t* z kl*vesnice @et%zec znak+ do prom%nn[ typu char. Podle nejasn[ho popisu v p@ru'ce je z@ejm% d[lka vstupn)ho @et%zce omezena na 120 znak+.¢  Pro o&et@en) zad*van[ho jm[na souboru je pou(ita funkce normalize╱fname,fext$¢kde je jako druh` parametr dosazen @et%zec "C". Program je tedy zam%@en na pr*ci se zdrojov`mi texty v jazyce. V&im%te si rozd)lu mezi @et%zcem "C" a znakovou konstantou óCó, kter* se ohrani'uje apostrofy.¢  Funkce upravuje zad*van` @et%zec do podoby standartn) specifikace souboru. P@evede tedy mal* p)smena na velk*, dosad) n*zev za@)zen) jako D: pokud chyb) a p@ipoj) zadan` extender nen)-li uveden. V popisu chyb) vliv druh[ho parametru funkce. Podle m`ch zb%(n`ch pokus+ je druh` parametr pro extender nepovinn`. Pokud se v&ak neuvede, nelze jej funkci p@edat napsan` do prvn)ho parametru. Jinak m* z@ejm% prioritu extender zad*van` p@)mo ve jm[nu souboru, teprve nen)-li uveden, dosad) se obsah druh[ho parametru. ╱Chce to je&t% zkou&et.$¢  Pro otev@en) souboru je pou(ita funkce copen╱fn,mode$. Je to jedna ze dvou mo(nost) a to ta podobn%j&) standartn)m funkc)m jazyka. Prvn) argument je typu char a slou() k p@ed*n) specifikace souboru, druh` vol) 'innost - 'ten), z*pis a p@ipisov*n). Pou(ity jsou standartn% znaky r a w, ale nejsou uzav@eny do uvozovek, ale do apostrof+. To je odli&n[ od normy C.¢  Funkce vrac) ')slo IOCB, kter[ slou() pro p@)stup na soubor, nebo z*porn[ ')slo chyby p@i ne]sp%chu. Proto je nutn[ volat funkci pomoc) prom%nn[ typu int.¢  Chybu v programu kontroluje b%(n* podm)nka, dojde-li k n), vyp)&e zpr*vu i s jej)m ')slem.¢  Soubor se zav)r* funkc) cclose╱i$, kde je jako argument pou(ito ')slo IOCB vr*cen[ funkc) copen.¢  Funkce cgetc╱i$ a cputc╱c,i$ jsou op%t podobn[ t%m v BASICu, ale podle p@)ru'ky pracuj) se znaky, nikoliv s ')sly. Parametry je op%t ')slo IOCB dodan[ funkc) copen a pro z*pis znakov* prom%nn*.¢¢          Vzorov` p@)klad.¢¢  Jako zad*n) jsem vybral jednoduch` &koln) p@)klad ukl*daj)c) nalezen) nejv%t&)ho a nejmen&)ho ')sla z dan[ @ady ')sel. Druz) redakto@i se mi trochu sm%j), ale j* jsem ji( skute'n% pot@eboval zjistit tyto hodnoty p@i zpracov*n) n%kter`ch dat.╱&lo o samply$¢  M+(ete se sami zamyslet nad vhodn`m algoritmem @e&en). ③koln) ]lohy rad) nap@)klad pou()t nejv%t&) a nejmen&) zobraziteln[ ')slo a s t%mito porovn*vat vstupuj)c) data. J* jsem dal p@ednost algoritmu, kter` je naprosto univerz*ln) a najde hledan[ hodnoty na kter[mkoliv po')ta'i.¢  Vlastn) program vznikl malou ]pravou d@)ve popisovan[ho origin*ln)ho X.C. Hlavn) main╱$ slou() i zde jako menu, samostatn* funkce extrem╱$ otev@e zvolen` soubor a najde v n%m nejv%t&) a nejmen&) pou(it[ ')slo.¢¢                 -ZB-¢