home *** CD-ROM | disk | FTP | other *** search
/ Flop Magazin 30 / Flop_Magazin_30_1994_04_Raster_cs_Side_A.atr / kursc2.cap < prev    next >
Text File  |  2023-02-26  |  11KB  |  1 lines

  1.     Kurs programov*n)  "C"  '*st 2.¢¢¢  ù=37,»=92,²=123,å=91,ñ=93¢Θ definice znaku procenta, obr*cen[ho lom)tka, lev[ slo(en[ z*vorky, lev[ a prav[ lomen[ z*vorky.¢¢  Proto(e pro ]'ely kursu chyb) n%kter[ d+le(it[ znaky a v ⇨apkovi ji( nejsou (*dn[ voln[ pozice, zvolil jsem po del&)m p@em`&len) jednoduch` zp+sob dodefinov*n) znak+. Jako n*hradu za znak procenta jsem zvolil copyriht, proto(e m* t[m%@ tak[ dv% kole'ka ╱s trochou fantazie$, dal&) dva znaky jsou jednodu&e vyj*d@eny inverzn)mi prot%j&ky, lomen[ z*vorky jsou nahrazeny inverzn)mi kulat`mi.¢  Tento syst[m by m%l b`t p@ehledn%j&) ne( chaos pou(it` v prvn) '*sti. P+vodn% jsem si toti( myslel, (e pro zobrazov*n) v Hypertextu se nesm) pou()t inverze. Nej'iteln%j&) ov&em bude vytisknout si text na tisk*rn% vybaven[ sadou Kamenick`ch.¢¢         Podm)nky a cykly.¢¢  Pro vytv*@en) slo(it%j&)ch program+ jsou pot@ebn[ mo(nosti rozhodov*n) o jeho dal&)m pr+b%hu na z*klad% okam(it`ch stav+. Za'nu s popisem z*kladn) jednoduch[ a slo(en[ podm)nky IF, zn*m[ podle jm[na i z jazyka BASIC.¢  Jej) tvar, ciz)m slovem syntaxe, je ale v C['ku podstatn% jin*.¢¢ /✓  podm)nka jednoduch*  ✓/¢¢    if╱podm)nka$¢    ²¢     p@)kaz ;¢     p@)kaz ;¢     p@)kaz ;¢    }¢¢ /✓  podm)nka slo(en*   ✓/¢¢    if╱podm)nka$¢     ²¢      p@)kaz ;¢      p@)kaz ;¢     }¢     else¢     ²¢      p@)kaz ;¢      p@)kaz ;¢     }¢¢  Uk*zky z*pisu jsou uvedeny koment*@em, nebo-li pozn*mkou. Tato je ohrani'ena sekvenc) znak+ lom)tka a hv%zdi'ky. P@)ru'ka dosti nejasn% tvrd), (e pozn*mka m+(e b`t kdekoliv, kde m+(e b`t norm*ln% mezera. Trp%liv) z*jemci mohou sami experimentovat s mo(nostmi jej)ho um)st%n).¢  D+le(it%j&) je ale vlastn) tvar podm)nky. P@edn% je t@eba si zapamatovat, (e za podm)nkou a kl)'ov`m slovem else se nep)&e st@edn)k! Je-li podm)nka pravdiv*, jsou provedeny p@)kazy uveden[ za n), kter[ jsou uzav@eny do slo(en`ch z*vorek. Tedy ohrani'en) stejn[, jako cel[ho programu. Takov` styl plat) i pro z*pis cykl+. Existuje jedna vyj)mka p@i z*pisu jedin[ho p@)kazu - nemus) b`t uzav@en` v z*vork*ch.¢  Blok p@)kaz+ uveden` za else se prov*d) p@i neplatnosti podm)nky. Pou()v*n) else je roz&)@en)m podm)nky a nen) povinn[.¢  Tvar z*pisu nen) nijak omezovan`. Znak pro p@echod na nov` @*dek, mezi ataristy hovorov% naz`van` RETURN, je z hlediska textu programu pr*zdn`m znakem. Proto v+bec nen) nutn` a jeho vhodn`m pou()v*n)m se pouze dosahuje p@ehlednosti programu. To sam[ plat) i o mezer*ch, p@)padn% znaku tabul*toru. U na&) mal[ verze plat) op%t jist[ omezen) - d[lka programov[ho @*dku je omezena na d[lku 79 znak+. Proto n%jak[ ty "returny" pou()vat mus)me.¢¢  Nyn) m+(eme ji( s p@ehledem vy@e&it ]kol vyd%lit zad*van* ')sla.¢¢  ¢include<stdio.h>¢¢  main╱$¢  ²¢    int i,j,m,n,k,l,o,p,q;¢    i=getchar╱$;¢    j=getchar╱$;¢    if╱j!=0$¢      printf╱"vysledek: ùd»n",i/j$;¢    printf╱"konec"$;¢    o=getchar╱$;¢  }¢¢  V%t&ina p@)kaz+ programu je v*m douf*m jasn*, ale rad%ji zopakuji i poznatky z minul[ '*sti. Prvn) @*dek oznamuje p@eklada'i, (e v programu je pou(it* knihovna funkc) vstup+/v`stup+. V na&) mal[ verzi jazyka C tento p@)kaz nepou()v*me, je uveden jen pro p@ehled.¢  Funkce main bez parametr+ - pr*zdn[ z*vorky - ozna'uje vlastn) program. Jej) u(it) je povinn[. Cel[ t%lo programu je uzav@eno ve slo(en`ch z*vork*ch, nebo pro n*s jejich ekvivalenty.¢  Jako prvn) se p)&) deklarace prom%nn`ch pou()van`ch v dan[ funkci. Zde se jedn* o cel* ')sla. Pozorn` program*tor si v&imne, (e je jich deklarov*no v)ce, ne( je skute'n% pou(ito. Rozs*hlej&) p@eklada'e na tuto skute'nost upozoruj) formou varovn[ho hl*&en). Pro n*s je d+le(it%j&) si uv%domit, (e deklarac) se p@iprav) pam%④ov[ m)sto pro prom%nnou, ale jej) vlastn) hodnota se nijak implicitn% nenastavuje. Je v tuto chv)li zcela n*hodn*. S*m jsem ud%lal chybu u programu PYRAMIDA, kdy( jsem zapom%l prom%nnou vynulovat. Jenom n*hodou program po p@ekladu spo')tal spr*vn% po'et @e&en). Na druh` den v&ak tisknul ]pln` nesmysl, a( jsem (asnul. Modern%j&) kompil*rory umo(uj) slou'it deklaraci a p@i@azen) do jedin[ho p@)kazu, ale ten n*& mi to nebral. Vypadalo by to asi takhle: int f=23;¢  Ji( zn*m`mi funkcemi je provedeno 'ten) d%lence i d%litele z kl*vesnice. Pravd%podobn% bude v uveden[m p@)kladu d%litel v(dy 155, proto(e n*m 'ten) z kl*vesnice funguje n%jak pochybn%.¢  Proto(e nulou po')ta' d%lit neum), je nutn[ o&et@it tuto mo(nost. Sta') na to jednoduch* podm)nka. V`razem r!=0 testuje, zda se prom%nn* r nerovn* nule. Naopak p@i porovn*v*n) rovnosti se logick` oper*tor zapisuje ve tvaru dvou rovn)tek. T)m se li&) od oper*toru matematick[ho pro p@i@azov*n) zapisovan[ho rovn)tkem jedn)m. P@)ru'ka na rozd)l v`slovn% upozoruje, ale st%jn% jsem str*vil '*st doby odla⇦ov*n) pyramidy proto(e jsem napsal rovn)tko do podm)nky jedno.¢  P@i platnosti podm)nky se provede funkce printf╱$, s jej)( pomoc) vyd%l)me zadana ')sla a v`sledek ihned vytiskneme. Funkci jsem neuzav@el do z*vorek, proto(e je jedin`m p@)kazem prov*d%n`m p@i platnosti podm)nky. Nic ale nebr*n) jejich pou(it) pro v%t&) p@ehlednost.¢  N*sleduj)c) funkce printf╱$ vytiskne v ka(d[m p@)pad% zpr*vu o ukon'en) programu, posledn) getchar╱$ slou() ji( jen k pozdr(en) v`sledk+ na monitoru p@ed n*vratem do syst[mu.¢¢¢  /✓  podm)nka vno@en*   ✓/¢¢  main╱$¢  ²¢    int i,j,m,n,k,l,o,p,q;¢    i=getchar╱$;¢    j=getchar╱$;¢    if╱j!=0$¢      if╱i==0$¢       ² printf╱"vysledek: naprost* nula»n"$;¢         printf╱"ur'it% jsi na to pot@eboval po')ta' ?»n"$;¢       }¢      else¢         printf╱"vysledek: ùd»n",i/j$;¢    else¢     ² printf╱"b%(n% ne@e&iteln[ d%len) nulou.»n"$;¢       printf╱"spo')t*me alespo jedodu&&) p@)klad:»n"$;¢       printf╱"1⇩1=ùd»n",1⇩1»n$; }¢    printf╱"konec"$;¢    o=getchar╱$;¢  }¢¢  Na druh[m p@)kladu je p@edvedeno vno@ov*n) podm)nek do sebe a rozv)jeno pravidlo o pou()v*n) uzav)rac)ch z*vorek blok+ p@)kaz+ uveden`ch za podm)nkou.¢  Sledujte, (e p@)kazy za prvn) podm)nkou se uzav@)t nemus), proto(e je uveden pouze jedin`, kter`m je druh* funkce if╱$. Na tom nic nem%n) ani skute'nost, (e ve vno@en[ funkci se uzav)rky pou()t mus), proto(e v n) je p@edeps*n k vykon*n) cel` blok p@)kaz+. Zde je tak[ vid%t, jak v orientaci v programu pom*haj) pr*zdn[ mezery na za'*tc)ch @*dk+.¢¢  Pro tvorbu slo(it%j&)ch program+ by podm)nka bez skokov[ instrukce nesta'ila. Proto existuj) konstrukce zvan[ cykly. Jako prvn) pop)&i cyklus for, kter` je svoj) 'innost) velmi podobn` jeho BASICovsk[mu prot%j&ku.¢  Jeho z*kladn) tvar:¢¢    for╱i=1;i<=9;i⇩⇩$¢      ²¢      p@)kaz 1;¢      p@)kaz 2;¢      p@)kaz x;¢      }¢¢  cyklus je @)zen p@)kazy uvnit@ z*vorek. Jsou rozd%leny na t@i '*sti odd%len[ st@edn)ky. Prvn) z nich ud*v* po'*te'n) nastaven). M+(e sest*vat z v)ce p@)kaz+ odd%len`mi '*rkami. Uveden` z*kladn) tvar je shodn` se z*pisem FOR v BASICu. Druh* '*st je podm)nkou opakov*n) cyklu. V BASICu se p)&e za slovo TO, kter[ je zde nahrazeno kombinac) znak+ je men&) a rovn* se. Samoz@ejm% je mo(n[ ]mysln% napsat konstantu v%t&) a pak pou()t jen znak men&) ╱nebo v%t&)$, ale takov[ @e&en) sni(uje p@ehlednost v ')slech.¢  Ve t@et) '*sti jsou uvedeny p@)kazy prov*d%n[ p@i ka(d[m pr+chodu cyklu. Op%t jich m+(e b`t v)ce odd%len`ch '*rkami. V nejednodu&&)m p@)pad% se jedn* o pravidelnou zm%nu hodnoty @)d)c) prom%nn[ cyklu, tedy p@)r+stek zapisovan` v BASICu za slovo STEP. V uveden[m p@)kladu je pou(it` zkr*cen` z*pis pro jedni'kovou inkrementaci prom%nn[. Analogicky stejn` zp+sob se pou()v* pro dekrementaci, tedy n*zev prom%nn[ n*sledovan` dv%ma znam[nky m)nus.¢¢  N*sleduj)c) p@)klad vytiskne tabulku mal[ n*sobilky a ulo() ji do prom%nn[.¢¢main╱$¢²¢int aå10ñå10ñ,i,j;¢printf╱"         mal*  n*sobilka»n»n"$;¢for╱i=0;i<=9;i⇩⇩$¢ ²for ╱j=0;j<=9;j⇩⇩$¢    printf╱"ù-3d ",aåiñåjñ=i✓j$;¢  printf╱"»n"$;}¢o=getchar╱$;¢}¢¢  V @*dku deklarac) vid)me jako novou v%c pou(it) dvojrozm%rn[ho ')seln[ho pole. Jeho prvky jsou ')slovan[ od nuly, tedy p@i nadimezov*n) rozsahu 10 jsou pou(iteln[ indexy od nuly do dev)tky.¢  Zaj)mav` je tak[ z*pis funkce tisku, kter* poslou() nejen pro vyti&t%n) v`sledku, ale i pro jeho ulo(en) do prom%nn[. Vlastn% je nejprve provedeno p@i@azen) a potom tisk.¢  Na&e mal[ C['ko nem* v)cerozm%rn[ ')seln[ pole. Mus)me se proto spokojit s jedn)m. Obejit) tohoto nedostatku je v principu velmi jednoduch[, ale m+(e se p@i tom program*tor p%kn% zamotat. Sta') p@ipravit pole jednorozm%rn[ o d[lce sou'inu jednotliv`ch index+. Ur'en) dan[ho prvku se provede tak, (e se libovoln% zvolen` index n*sob) rozsahem druh[ho, jeho( okam(it* hodnota se k v`sledku p@i'te. Pamatujte, (e index o maxim*ln) hodnot% 9 m* rozsah 10 pozic, proto(e se po')t* i nulov* pozice. Podle p@)ru'ky ')slice p@i deklaraci prom%nn[ vyjad@uje tuto skute'nou d[lku, mo(n* velikost je tedy o jedni'ku men&). Zat)m jsem na&i verzi v tohto podrobn% nezkoumal.¢  Samoz@ejm% toto libovoln% zvolen[ rozli&en) obou index+ se mus) jednotn% dodr(et v cel[m programu. P@)klad u(it) vysv%tlen[ho postupu najdete v uveden[ pyramid%. Z matematick[ho hlediska t)mto zp+sobem mus) j)t nahradit i v)cerozm%rn[ matice, ale bude to znamenat p%knou pipla'ku.¢  Jako p@)loha k textu kursu jsou uvedeny t@i zdrojov[ v`pisy v na&em DEEP BLUE C. Prvn) z nich obsahuje v&echny drobn[ p@)klady zde uv*d%n[. Samoz@ejm% s t)m rozd)lem, (e deklarace prom%nn`ch je provedena nar*z hned na za'*tku programu. Pro z*jemce z+st*v* mo(nost upravov*n) zejm[na form*tu v`pisu na obrazovku, kter` nen) dota(en` do konce.¢  Druh` v`pis poch*z) od Ji@)ho Svobody a vznikl zcela n*hodn% kdy( Jirka zkou&el srovn*vat na&e mal[ "C" s t)m na AMIZE. Program bere jeden zadan` znak z kl*vesnice, pokud jde o p)smeno, vytiskne na obrazovku v&echny n*sleduj)c) podle abecedy. Rozli&uje p@i tom mal* a velk* p)smena. Nebude-li zad*no p)smeno, program ukon') 'innost vyti&t%n)m zpr*vy.¢  T@et) program je @e&en) hlavolamu PYRAMIDA p@eveden[ do jazyka "C". P@evod jsem uskute'nil analogicky k tvaru programu v BASICu, ani( bych znal jeho skute'nou 'innost. U v%t&)ch program+ by to tak asi d%lat ne&lo. Je dopln%n zkompilovanou verz), aby si program mohli vyzkou&et i odb%ratel[, kte@) se jinak C['kem zab`vat necht%j). P@ekvapilo m% sam[ho, (e oproti TURBOBASICu nen) nijak v`razn% rychlej&). Dal&) mo(nost) porovn*v*n) rychlost) je zkusit kompil*tor TURBOBASICu, nebo naopak spustit program v oby'ejn[m ATARI BASICu p@i vynech*n) funkce m%@)c) 'as.¢  Jinak v%t&inu p@ikl*dan`ch v`pis+ program+ budu uv*d%t bez p@elo(en[ verze, proto(e ty zab)raj) dosti m)sta. Douf*m, (e ze stovek &patn`ch verz) se mn% poda@) d*vat do FLOPu ty funguj)c) kone'n[.¢  Tematicky je kurs "C" dopln%n 'l*nkem amigisty Jirky, bohu(el ale jeho druhou verz). Prvn) verzi napsal s nad&en)m, kdy( se dozv%d%l, (e na mal[m ATARI tak[ tento jazyk existuje a s*m si jej zkusil. Jenom(e jeho druh` projekt - textov* hra - pou()t ne&el, proto(e na&e "C" je velmi omezen[. Cel` 'l*nek proto p@epsal do pochmurn[ho tnu.¢  Nebu⇦te zklaman), proto(e na mal[m po')ta'i se stejn% dobr[ v%ci daj) d%lat jen ve strojov[m jazyce. Na sezn*men) s jazykem na&e mo(nosti sta') a kdo snad bude programovat v "C" v*(n%ji na velk`ch po')ta')ch, vyu(ije znalosti z kursu. A( na ty slo(en[ z*vorky je v&echno stejn[.¢