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

  1. ¢    Kurs programov*n)  "C"  '*st 6.¢ ------------------------------------¢¢  ù=37,»=92,²=123,å=91,ñ=93,ó=39,א=38¢Θ definice znaku procenta, obr*cen[ho lom)tka, lev[ slo(en[ z*vorky, lev[ a prav[ lomen[ z*vorky, apostrofu.¢Θ a nov% znaku and¢¢    Hodnoty a druhy prom%nn`ch I¢¢  Sna(il jsem se z)skat trochu p@ehled o pou()van`ch prom%nn`ch na&)m C['kem, ale to se mi nepoda@ilo. Prohl[dnut)m origin*ln)ho popisu v angli'tin% jsem se p@esv%d'il, (e v p@ekladu nic d+le(it[ho nechyb), i kdy( jsou v n%m stra&n[ v%ci vinou doslovn`ch p@eklad+.¢  Norm*ln) C['ka pou()vaj) n%kolik druh+ prom%nn`ch. Typ char je v(dy jednobajtov`. ⇨)seln[ typy jsou minim*ln% dvoubajtov[, a to jako cel* ')sla nebo s desetinnou te'kou r+zn`ch d[lek. Char a celo')seln[, 'ili int mohou b`t bez znam[nka, nebo znam[nkov[, tedy jejich hodnoty mohou b`t i z*porn[. Jejich rozli&en) se prov*d) modifik*tory signed a unsigned.   Na&e C['ko nem* p@esn% popsan[ druhy prom%nn`ch, pokud se k origin*ln)m verz)m nedod*val manu*l ti&t%n`. Podle zku&enost) lze usoudit, (e znam[nkov[ modifik*tory odm)t*. Typ char je bran` jako neznam[nkov` v hodnot*ch 0 - 255. Typ int je dvoubajtov` a tiskne se jako znam[nkov`. Tedy v hodnot*ch -32768 a( ⇩32767. P@esto se n%kdy chov* jako neznam[nkov`, 'ili s hodnotami 0 a( 65535. Konkr[tn% v uveden[m programu se pou()v* na "poukov*n)" pam%ti v oblasti jej) horn) poloviny. Tuto anom*lii zat)m vysv%tlit nem+(u. ¢¢  Z hlediska um)st%n) v pam%ti jsou prom%nn[ lok*ln) a glob*ln). Maj) n%kolik variac), kter[ zat)m nejsou d+le(it[.¢  Lok*ln) jsou viditeln[ jen ve funkci, v n)( byly deklarovan[. Jejich adresa se m+(e p@ed*vat funkc)m volan`m. Po opu&t%n) b%hu funkce se likviduj), proto(e jsou um)st%ny v pam%ti typu z*sobn)k, kter* se p@i n*vratu uvoln). Tento syst[m pr*ce p@irozen% omezuje jejich maxim*ln) velikost. V na&ich odkladech ]daj o horn) hranici chyb), nebo jsem ho p@ehl[dl. Je jisto, (e prom%nn* pro ulo(en) obr*zku n%kolikan*sobn% p@ekro'ila hranici pro C['ko na ST, i kdy( to podle p@)ru'ky m%lo j)t. Na mal[m ATARI jsem ji ani jako lok*ln) deklarovat nezkou&el.¢  Glob*ln) prom%nn[ jsou deklarov*ny vn% funkc), tak(e je mohou v&echny pou()vat, nebo p@esn%ji ty od m)sta deklarace prom%nn[. Jejich maxim*n) d[lka nebude m)t takov[ probl[my jako lok*ln), ale p@esn` ]daj mi op%t chyb).¢¢¢    Pointery a adresov[ oper*tory II¢¢¢  Minule jsem se zmioval o vlastnosti jm[na @et%zcov[ prom%nn[. Toti( (e samo je ukazatelem na @et%zec, proto se u n%j nepou()v* adresov` oper*tor. To m+(ete n*zorn% vid%t na funkc)ch gets╱$ nebo strcpy╱$, jim( se p@ed* pouze samotn` n*zev. Neplat) to ale u standartn) funkce scanf╱$, u n)( je oper*tor א t@eba. Vysv%tlit se to asi ned*, prost% to tak je.¢  Je&t% mus)m poznamenat, (e pojem @et%zec je nevhodn% zvolen`. Spr*vn% jsem m%l ps*t pole, proto(e @et%zec je sice pole, ale ne ka(d[ pole je @et%zec.¢  U(it) pointeru jako n*hradu p@)kaz+ PEEK a POKE je velmi snadn[. Pointery se prost% deklaruj) jako typ char. To znamen*, (e budou ukazovat na prom%nn[ velikosti jednoho bajtu, co( je p@esn% jedno pam%tov[ m)sto. Samotn` pointer m* hodnotu v%t&), proto(e mus) adresov% obs*hnout celou pam%④. ╱Z@ejm% je typu int, proto(e takov` jsem bez probl[m+ pou(il p@i p@ed*v*n) pointeru volan[ funkci v jednom rozpracovan[m programu.$.¢  Po deklaraci sta') pointeru p@i@adit (*danou fyzickou adresu a ji( se m+(e ')st, nebo zapisovat. Vypad* to tak:¢¢    char ✓p_adr;¢    p_adr = 708;¢    ✓p_adr = 4;¢¢nebo m)sto posledn)ho @*dku:¢    p_adrå708ñ = 4;¢¢  Zde by do&lo k nastaven) jednoho z barvov`ch registr+.¢¢¢          Bitov[ operace I¢¢¢  Jazyk C umo(uje p@)m[ bitov[ operace s hodnotami prom%nn`ch. N%kter[ verze jen s neznam[nkovan`mi, jin[ i se znam[nkov`mi ')sly. Nejp@ehledn%j&) je samoz@ejm% toto d%lat s jednobajtov`mi hodnotami.¢  Seznam oper*tor+:¢   א ╱znak and$ bitov` sou'in    AND¢   |            bitov` sou'et    OR¢ st@)&ka    exklus)vn) sou'et    XOR¢  <<            posun doleva¢  >>            posun doprava¢ vlnovka        jedni'kov` dopln%k¢¢  V p@ilo(en[m programu jsou pou(ity bitov` sou'in pro vymaskov*n) pot@ebn[ho bitu z cel[ho bajtu. D*le bitov[ posuny, jinak tak[ rotace.¢  Po'et posun+ ur'uje parametr uveden` za oper*torem.¢  V`raz x<<4 d* hodnotu, v n)( je p+vodn) obsah prom%nn[ x posunut o 'ty@i bity doleva. X z+stane zde beze zm%ny. Tak je to vyu(ito v hardkop)rce. Pokud by se m%l obsah x zm%nit, musel by se z v`razu st*t tento p@)kaz:¢  x=x<<4; nebo tak[ x<<=4;.¢¢¢     Popis programu Harkop)rka.¢¢¢  Ke kursu je p@ilo(en dvoj) v`pis programu v proveden) pro mal[ ATARI a pro 16 bitov[ po')ta'e. ②e&)m t)m '*ste'n% dotaz z minule na tisk obr*zk+ na PC. P@i jeho p@)padn[m p@enosu nezapom%te zvolit konverzi Returnu na standartn) konec odstavce CR a LF.¢  Nejd@)ve tedy jak je to s p@enositelnost) program+ mezi po')ta'i. Bez probl[m+ jsou z*kladn) v%ci nepou()v*j)c) speciality jednotliv`ch typ+ po')ta'+. Tedy standartn) vstupy a v`stupy z kl*vesnice a na obrazovku.¢  Uv*d%n` program byl v z*kladn)m stavu odlad%n na ATARI ST, dopracov*n) dal&)ch funkc) ji( prob)halo zvl*&④. Prvn)m rozd)lem je pou(it) povel+ include<> a deklarac) funkc) definovan`ch p@)mo v programu. P@)kaz preprocesoru include<> ukazuje na soubory s deklaracemi knihovnick`ch funkc). Ono by to za&e &lo bez toho, ale s nejist`m v`sledkem. Tyto z*le(itosti se p@i p@enosu na mal[ ATARI uma(ou.¢  V definic)ch funkc) jsou uv*d%ny typy parametr+ funkci p@ed*van`ch a n*vratov[ hodnoty. Sta') op%t zru&it. ¢  Ukazov*tko na otev)ran` soubor je typu pointer ╱z nejasn`ch d+vod+$. U n*s se pou(ije oby'ejn` typ int, proto(e nepoda@en` pokus o otev@en) ╱zav@en)$ souboru vrac) z*pornou hodnotu.¢  N%kter[ stejn[ p@)kazy se jmenuj) trochu jinak, jako cputc, copen. Funkce scanf╱$, pou(it* pro zad*n) ')seln`ch hodnot, n*m chyb). Proto je nahrazena 'ten)m @et%zce s n*sledn`m p@evodem na ')slo.¢  Po t%chto, zjevn% minim*ln)ch ]prav*ch, se mi program rozeb%hnul i na mal[m ATARI. Oproti verzi "16-cti bitov[" je v n%m dodate'n% dod%l*no n%kolik specialit. P@edev&)m je nastaven grafick` monochromatick` md  a obr*zek je p@)mo ulo(en do videoram. Ti&t%n* data se m+(ou pos)lat i do souboru. To je vlastn% d*no jednotn`m zp+sobem otev)r*n) r+zn`ch za@)zen), na tom nebylo t@eba nic slo(it% vym`&let.¢  P@id*na byla funkce v`pisu obsahu disku. Tak jak je, m+(e b`t pou(ita i u jin`ch program+, pokud nebude vadit, (e si natvrdo otev)r* kan*l '.5. Norm*ln) funkce copen╱$ si sama najde voln` kan*l, ale tu nen) mo(n[ pou()t pro adres*@. Proto je vyu(ita funkce open╱$.¢  Pozm%n%n* je logika od@*dkov*n) pro dvojpr+chodov` tisk, proto(e se p@edpokl*d* na tisk*rn% nastaven[ automatick[ od@*dkov*n). Proto je vys)l*n povel inverzn)ho posunu v*lce.¢  Na "velk[" verzi je dod%l*no jen p@)m[ na'ten) cel[ho obr*zku nar*z. ╱P@)&t% to ud%l*m i na mal[m ATARI.$ Zato nem* v`pis adres*@e a na')st obr*zky m+(e jen z adres*@e, z n%ho( je spou&t%na.¢  V%t&ina nov`ch jev+ vyskytuj)c)ch se v programu je vysv%tlena v textu kursu. Mimo to obsahuje v`pis je&t% definici @et%zcov`ch konstant v ]vodu programu a vol*n) funkce pro nastaven) grafick[ho mdu. Ta vrac) hl*&en) o prob%hl[ operaci, kter[ sice ukl*d*m do prom%nn[ ale bez dal&)ho vyu(it).¢  Volby menu se prov*d) zad*v*n)m p)smenem, kter[ m+(e b`t velk[ i mal[, pouze n*vrat mus) b`t potvrzen jenom velk`m znakem.¢  P@i psan) programu jsem ud%lal spoustu chyb, z nich( z*kladn) byly nadeklarov*n) prom%nn`ch o jedno m)sto krat&) a naps*n) v`razu x/2 m)sto x/=2, tak(e sice doch*zelo k v`po'tu, ale v`sledek se neukl*dal zp%t do prom%nn[.¢  Z doby odladov*n) programu z+stala kontrola po'tu zpracovan`ch dat ve funkci hardcopy╱$, konkr[tn% @*dek IF╱e>7680$. Te⇦ u( je zbyte'n`, proto(e kdyby skute'n% do&lo k p@ete'en) prom%nn[, tak p@)kaz return; ukon') 'innost funkce. To se ned%je, ale stejn% likvidace podm)nky zp+sob) vytuhnut) p@i chodu a j* nev)m pro'. Je to p@)pad programu (ij)c)ho si svou vlastn) inteligenc) nez*visle na sv[m tv+rci.¢¢                     -ZB-¢