CODINGLISTINGS ★ AMSTRAD/SCHNEIDER CPC: SEŠTEVANJE DOLGIH REALNIH ŠTEVIL ★

Seštevanje Dolgih Realnih Števil (Moj Micro)Coding Listings
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Operacija, ki le ni tako preprosta

aj je res težko sešteti dve števili, saj to znajo že osnovnošolci?! Res ni nobena umetnost; vse to počnemo po že davno utečenem postopku, ki se ga med seštevanjem sploh ne zavedamo. Toda če bi od vas kdo zahteval, da mu podrobno pojasnite, kaj ta postopek pravzaprav obsega, bi uvideli. da odgovor sploh ni tako preprost. Še zlasti tedaj, če vam to vprašanje postavi vaš računalnik. Ta genialni nevednež je sicer kos veliko bolj zapletenim računskim operacijam. ki jih kar hitro opravi, vendar se vztrajno upira temu. da bi dve števili seštel NATANČNO, če sta sestavljeni iz več kot 9 karakterističnih številk. Za to je seveda kriva organizacija memoriranja realnih števil (4 byti mantise + 1 bytezaeksponent). kar sicer pomeni tole: kolikor bytov, toliko natančnosti. Kljub vsemu je računalnik poslušen stroj in če mu boste podrobno razložili, kaj bi od njega radi. bo to vsekakor tudi naredil.

Listing 1 je program v basicu. ki omogoča seštevanje realnih števil s predznakom, obsegajočih do 254/ 255 mest. Jasno je. da je tako dolga števila mogoče vnesti samo kot alfa-numeričen niz (string). nakar podprogram za vnos (vrste 600 - 730) preverja, ali je vnos pravilen, tj. ali je niz sestavljen samo iz cifer, enega predznaka ( + ali -) in ene decimalne vejice. Niz je shranjen v pomnilniku brez predznaka, vendar z decimalno vejico in s pomožno spremenljivko: »zn« in »ceo« poskrbita za predznak in številu celih mest. Če vneseni niz pomeni celo število, na koncu niza dodamo decimalno vejico. Z opisano proceduro vnesemo prvo (a$). potem pa drugo in vsa naslednja števila (b$). pri čimer je tekoči rezultat seštevanja (c$) avtomatsko preslikan v prvo število.

Seštevanje dveh števil se mora začeti s primerjanjem njune dolžine. Zato je v vrsticah 130 - 180 ugotovljena razlika števila mest za decimalno vejico (»razdec«) in pred njo (»razceo«). po potrebi pa je nizom dodano ustrezno število ničel, ki so pred njimi ali za njimi.

Ker program seštev realna števila s predznakom, kar pomeni, da v nekaterih primerih »odšteva«, je treba ugotoviti, katero od dveh števil je večje po absolutni vrednosti. Del programa v vrstah 190 - 250 primerja številčne nize, in sicer številko za številko, začenši od najvišje ravni, ter ugotavlja, kdaj je razlika (»ab«) različna od nič. Pozitivna vrednost spremenljivke »ab« označi. da je prvo število po absolutni vrednosti večje od drugega

V vrstah 260 - 340 je dimenzionirano število cifec v rezultatu (»z«), hkrati pa steče seštevanje, in sicer številko za številko, začenši od najmanjše pomenljive cifre Pri tem so upoštevani predznak rezultata potem to. ali števila seštevamo in nazadnje. če jih odštevamo, od česa je kaj odšteto V vrsticah 320 in 330 je pri seštevanju poskrbljeno za morebiten prenos v višji razred oziroma pri odštevanju odvzem iz višjega razreda. Decimalna vejica je preskočena (vrsta 280) in poskrbljeno je za morebiten orenos vrednosti.

V vrstah 350 - 510 se iz cifer seštevka znova oblikuje alfanumeri-čen niz (»c$«). vhodni števili (»a$« in »b$«) pa sta anulirani, pri čimer je dolžina »a$« shranjena v spremenljivki -duza- (daljša) lndikatorska spremenljivka -nul- onemogoči izpis nepotrebnih sprednjih ničel v rezultatu. Ob nizu »c$« se oblikuje tudi identičen niz »a$« (preslikava-nje rezultata operacije v prvo število). V vrstah 520 - 540 se seštevek izpiše in program se vrne na začetek.

Po vsem. kar ste doslej prebrali, najbrž že verjamete da seštevanje ni kar tako preprosto. Opisani program gladko teče. vendar sorazmerno počasi - za dve števili s približno 250 ciframi potrebuje do 25 sekund V dobršni meri je to posledica počasnosti basica. zato pa je vsaj algoritem preglednejši.

Podprogram za vnos (vrste 600 - 730) je naravnan za udobno delo vendar ni pretirano prijazen. Opozoril vas bo sicer, da ste pri vnosu naredili napako, vendar šele tedaj, ko boste vtipkali tri vrste cifer. Zato sta v listingu 2 in listingu 3 podani še dve varianti, ki ne opozarjata na napačen vnos. temveč kaj takega onemogočita. Toda zato je bilo treba nekaj žrtvovati Medtem ko vnos pri listingu 1 teče v načinu EDIT. kar pomeni, da lahko n»z številk popravljate tako dolgo, dokler ne pritisnete na ENTER, pri drugih dveh variantah napačno vnesene številke m mogoče popraviti. Eksplicitno morate tudi vnesti znak » + «. česar li-sting 1 ne zahteva.

Vrste 620 - 650 v listingu 2 ne dovoljujejo vnosa cifre ali decimalne vejice, dokler ne vnesete predznaka. potem pa zanka v vrstah 700 - 740 nenehno preverja, aii je bila pritisnjena kaka tipka s cifro Z zornega kota prijaznosti je vrsta 730 univerzalna, še zlasti tedaj, če v kakem programu po preverjanju tipk s funkcijo INKEY uporabite ukaz INPUT. Ker je interno skeniranje tipkovnice opravljeno 50-krat v sekundi. bo vaš počasni pritisk na tipko sprožil vrsto .istih kod v vmesnem pomnilniku Če nato sledi INPUT boste prisiljeni, da tak nesmiselen niz izbrišete in šele potem vnesete ustrezen podatek. Skratka vrsta 730 tako dolgo prazni vmesni pomnilnik, dokler ne odmaknete prsta od tipke To je tudi razlog, da tipke 0 - 9 na tekstnem delu tipkovnice ne reagirajo s ponovnim vpisom če jih dalj časa tiščite Varianta v listingu 3 je podobna prejšnji, vendar je izvedba nekoliko elegantnejša. Podrobneje si oglejte vrsto 720: funkcija STRS spremeni število v niz hkrati s predznakom oziroma MESTOM za predznak. Ta program je vedno mogoče prekiniti z ESC, medtem ko mora biti to v varianti 2 predvideno programsko (vrsta 750 listinga 2).

Niti ena od opisanih variant ni zaščitena pred vnosom oziroma pojavom predolgega števila (z več kot 255 mesti), kar se pri večkratnem seštevanju rado zgodi. Predlagam, da to rešite sami.

Naj nazadnje omenlm še nekaj, kar ni neposredno povezano s to tematiko, vendar velja za vsak prispevek. objavl|en v MM. Namreč tole: da ne bi povzročali težav uredništvu in bralcem z listingi. ki ne ustrezajo pravilom (tj. z več kot 60 znaki v vrsti), oblikujte listing svojega programa kot datoteko ASCII s preprostim ukazom:

OPENOUT "lme":LIST #9

Ko je snemanja konec in ko se pojavi READY, odtipkajte

CLOSEOUT

in to bo sprožilo snemanje iz ZADNJEGA BLOKA. Takšno datoteko kot vsako drugo besedilo včitate v AMSWORD. potem pa lahko listing brez velikih težav prikrojite po zahtevah.

Moj Micro

★ PUBLISHER: Moj Micro
★ ANNÉE: 1988
★ CONFIG: 64K + AMSDOS
★ LANGAGE:
★ LiCENCE: LISTING
★ AUTHOR: Dejan Smiljanič
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Sestevanje  Dolgih  Realnih  Stevil    (Moj  Micro)    LISTING    SLOVENIANDATE: 2021-11-21
DL: 116
TYPE: PDF
SiZE: 141Ko
NOTE: 3 pages/PDFlib v1.6

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Coding Src's » Multiplication 8 bits
» Coding Src's » Multiplication par 128
» Coding Src's » Division by 9
» Coding Src's » MOD Constant multiplication (CPC Amstrad International)
» Coding Src's » Division 8 bits
» Coding Src's » Multiplication 16 et 8 bits
Je participe au site:
» Pour ce titre nous ne disposons de fichier executable sur CPC (Saisie du listing) , alors si vous avez ça dans vos cartons ou vous désirez usé vos petit doigts boudinés sur votre clavier faites le nous savoir.
» Vous avez des infos personnel ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop/c
Page créée en 325 millisecondes et consultée 543 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.