NAGYPONTOSSÁGÚ EGÉSZ-ARITMETIKA TARTALOM

Hasonló dokumentumok
NAGYPONTOSSÁGÚ RACIONÁLIS-ARITMETIKA EXCEL VISUAL BASIC KÖRNYEZETBEN TARTALOM

Közismereti informatika 2.zh T-M szakirány

A feladat. A főprogram

Programozás alapjai. 5. előadás

Algoritmizálás és adatmodellezés tanítása 1. előadás

Készítette: Nagy Tibor István

Negatív alapú számrendszerek

SZÁMÍTÓGÉPI GRAFIKA MARKEREK

Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók

Rendezések. A föltöltés nemcsak az r-re vonatkozik, hanem az s-re is. Ez használható föl a további rendezések

Aritmetikai kifejezések lengyelformára hozása

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei. Atomerőművek üzemtana

Java II. I A Java programozási nyelv alapelemei

INFORMATIKA javítókulcs 2016

Algoritmizálás + kódolás C++ nyelven és Pascalban

Klasszikus algebra előadás. Waldhauser Tamás április 28.

és az instanceof operátor

1. előadás: Halmazelmélet, számfogalom, teljes

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Programozási tételek általánosítása 2. Szlávi Péter 2015

SZÁMÍTÓGÉPI GRAFIKA VÁGÁS

Sztringkezelő függvények. A string típusú változók kezelése, használata és szerepük a feldolgozás során

Apple Swift kurzus 3. gyakorlat

Algoritmusok Tervezése. 4. Előadás Visual Basic 1. Dr. Bécsi Tamás

Programozási technikák Pál László. Sapientia EMTE, Csíkszereda, 2009/2010

6. A Pascal nyelv utasításai

1. előadás. Lineáris algebra numerikus módszerei. Hibaszámítás Számábrázolás Kerekítés, levágás Klasszikus hibaanalízis Abszolút hiba Relatív hiba

1. A feladatról. 2. Az áramkör leírása. Mechatronika, Optika és Gépészeti Informatika Tanszék D528. Léptetőmotor vezérlése

ködös határ (félreértés, hiba)

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Feltételezés: A file strukturálisan helyes, tanszékenként nem üres, de az adott listázási feladatban kikötött számút nem haladja meg.

5. Fejezet : Lebegőpontos számok. Lebegőpontos számok

Nagypontosságú aritmetika I.

Informatika terméktervezőknek

Dinamikus modellek szerkezete, SDG modellek

Algoritmusok helyességének bizonyítása. A Floyd-módszer

Nagy Gábor compalg.inf.elte.hu/ nagy ősz

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

A MATLAB alapjai. Kezdő lépések. Változók. Aktuális mappa Parancs ablak. Előzmények. Részei

C programozási nyelv

Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás

Algoritmizálás és adatmodellezés tanítása beadandó feladat: Algtan1 tanári beadandó /99 1

Delphi programozás IV.

Programozás(A szakirány) II. beadandó feladat Farkas András HP6S15 1. csoport Veszprémi Anna / Hudoba Péter

A C# PROGRAMOZÁSI NYELV

Dokumentáció az 1. feladatsorhoz (egyszerű, rövidített kivitelben)

Adatbázis Rendszerek II. 5. PLSQL Csomagok 16/1B IT MAN

A feladat címe, rövid emlékeztetje

Programozási nyelvek (ADA)

2018, Diszkrét matematika

KOVÁCS BÉLA, MATEMATIKA I.

5. Fejezet : Lebegőpontos számok

Interfészek. PPT 2007/2008 tavasz.

Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás

1. Gyakorlat. Rövid elméleti összefoglaló. <tárolási osztály>típus <típus > változónév <= kezdőérték><, >;

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Megoldott feladatok. Informatika

A Pascal programozási nyelvben minden programnak a következő szerkezete van:

Segédlet az Informatika alapjai I. című tárgy számrendszerek fejezetéhez

1. fogalom. Add meg az összeadásban szereplő számok elnevezéseit! Milyen tulajdonságai vannak az összeadásnak? Hogyan ellenőrizzük az összeadást?

Hatványozás. A hatványozás azonosságai

First Prev Next Last Go Back Full Screen Close Quit. Matematika I

Programozási Nyelvek: C++

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

4. Fejezet : Az egész számok (integer) ábrázolása

ABSZTRAKCIÓ FÜGGVÉNYEKKEL (ELJÁRÁSOKKAL)

Algoritmizálás és adatmodellezés tanítása 4. előadás

DOKUMENTÁCIÓ KÉSZÍTETTE: Naszári László I. évf. levelező Informatika tanári szak 2003.

Már megismert fogalmak áttekintése

Java II. I A Java programozási nyelv alapelemei

Információk. Ismétlés II. Ismétlés. Ismétlés III. A PROGRAMOZÁS ALAPJAI 2. Készítette: Vénné Meskó Katalin. Algoritmus. Algoritmus ábrázolása

Harmadik gyakorlat. Számrendszerek

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Számelmélet I.

S z á m í t ó g é p e s a l a p i s m e r e t e k

Egész számok. pozitív egész számok: 1; 2; 3; 4;... negatív egész számok: 1; 2; 3; 4;...

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Demográfiai modellek (folytatás)

SZÁMÉRTÉKEK (ÁT)KÓDOLÁSA

Eljárások, függvények

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Szkriptnyelvek. 1. UNIX shell

0.1. Mi az a standard be- és kimenet? A két mintafeladat leírása

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Raszteres elemzés végrehajtása QGIS GRASS moduljával 1.7 dr. Siki Zoltán

Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!

Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás

Absztrakt adattípus - algebrai specifikáció - Lists (paraméteres) module imports end exports parameters variables sorts operations equations

Occam 1. Készítette: Szabó Éva

Programozás alapjai. 7. előadás

Python bevezető foglalkozás Python bevezető foglalkozás

Cekla. Készítette Doxygen Tue Sep :13:44

2018, Funkcionális programozás

5. A kiterjesztési elv, nyelvi változók

Az Összegfokozatos listázás téma 2. gyakorlata

Bevezetés a programozásba Előadás: A const

Algoritmusok - pszeudókód... 1

Komputeralgebra Rendszerek

Átírás:

NAGYPONTOSSÁGÚ EGÉSZ-ARITMETIKA TARTALOM 0. A feladat... 2 1. Az Egész számok ábrázolásai... 2 2. A műveletek szignatúrája... 3 3. A keretprogram... 4 4. Technikai tanácsok... 7 5. Elegancianövelő lehetőségek a FreePascal-ban operátorok... 7 6. További feladatok... 8

0. A FELADAT nagypontossággal számolni az (pozitív) egész számok körében. A megvalósítandó műveletek: Összeadás Kivonás Eggyel növelés és csökkentés Szorzás Maradékos osztás: egész hányados és maradék Azonosság reláció Rendezési reláció Konverziók (String nagypontosságú egész) A fenti műveletek mind előjel nélküli, mind előjeles változatokra létezzenek. A mellékelt keretprogram felhasznál egy unitot, amelyben a megoldás részletei találhatók; így maga a program akár késznek is tekinthető lenne. Tisztázzuk az egyes műveletek alkalmazási szintaktikáját (=szignatúra), amelyet figyelembe véve kell megírni, és kell elhelyezni a keretprogramban az őket megvalósító függvényeket, ill. eljárásokat. Így minden pillanatban majdnem kész programmal végezhető a próbálkozás, és a tetejében tetszőleges sorrendben haladhatunk a fejlesztés során. A keretprogram fő szegmense egy kis (félkész) tesztprogram, amely a kívánt műveleteket megmozgatja, csupán az ellenőrzés kedvéért. Talán hasznos, ha a feladat megoldása előtt rápillantunk egy lehetséges megoldást jelentő program futására. 1. AZ EGÉSZ SZÁMOK ÁBRÁZOLÁSAI Konstans MaxPont:Egész(255) [=a jegyek maximális száma-1] Típus TSzamJegy=Byte TNNEgesz=Tömb(0..MaxPont:TSzamJegy) TEloJel=(Neg,Poz) TEgesz=Rekord hossz:0..maxpont [=a legnagyobb, nem 0 nagyságrend] elojel:telojel jegy:tnnegesz End 2

2. A MŰVELETEK SZIGNATÚRÁJA Nem-negatív egészek (TNNEgesz) aritmetikája: Függvény Hosszusag(Konstans anne:tnnegesz):egész {legnagyobb nem 0 nagyságrend; de anne=0 esetén 0} Eljárás BeolvasNN(kerd:String; Változó anne:tnnegesz) Eljárás KiirNNE(elo:String; Konstans anne:tnnegesz; uto:string) Függvény EgyenloeNNE(Konstans anne,bnne:tnnegesz):logikai Függvény NagyobbeNNE(Konstans anne,bnne:tnnegesz):logikai Eljárás NovelNNE(Konstans anne:tnnegesz Változó bnne:tnnegesz) Eljárás CsokkentNNE(Konstans anne:tnnegesz Változó bnne:tnnegesz) Eljárás OsszeadNNE(Konstans anne,bnne:tnnegesz Változó cnne:tnnegesz) Eljárás KivonNNE(Konstans anne,bnne:tnnegesz Változó cnne:tnnegesz) [Ef: anne>=bnne] Eljárás SzorozNNE(Konstans anne,bnne:tnnegesz Változó cnne:tnnegesz) [Ef: anne>=bnne] Eljárás OsztNNE(Konstans anne,bnne:tnnegesz Változó hnne,mnne:tnnegesz) [Ef: bnne<>0] Függvény NNE2String(Konstans anne:tnnegesz):string [Ef: Hosszúság(aNNE)<256] Eljárás String2NNE(Konstans s:string, Változó anne:tnnegesz) [Ef: 0<Hosszúság(s)<256] (Előjeles) Egészek (TEgesz) aritmetikája: Eljárás BeolvasE(kerd:String; Változó ae:tegesz) Eljárás KiirE(elo:String; Konstans ae:tegesz; uto:string) Függvény EgyenloeE(Konstans ae,be:tegesz):logikai Eljárás NovelE(Konstans ae:tegesz; Változó be:tegesz) Eljárás CsokkentE(Konstans ae:tegesz; Változó be:tegesz) Függvény NagyobbeE(Konstans ae,be:tegesz):logikai Eljárás OsszeadE(Konstans ae,be:tegesz; Változó ce:tegesz) Eljárás KivonE(Konstans ae,be:tegesz; Változó ce:tegesz) Eljárás SzorozE(Konstans ae,be:tegesz; Változó ce:tegesz) Eljárás OsztE(Konstans ae,be:tegesz; Változó he,me:tegesz) {Ef: be<>0} Eljárás NNE2E(Konstans anne:tnnegesz; Változó ae:tegesz) Függvény SgnE(Konstans ae:tegesz):egész Függvény NEHibaE:Logikai A hibakezelést (azaz az NEHiba unit-beli, nem exportált változó beállítását) most a keretprogramban elvégezni nem lehet, a többit, azaz a lényegi funkciót viszont igen. Vegye észre a műveletekben alkalmazott névlogikát! 3

3. A KERETPROGRAM Program NagyEgesz; (* keretprogram az 1. nagypontosságú gyakorlathoz Jelölés (a műveletek "postfixumához"): NNE = Nem negatív egész (azaz nincs előjel) E = Egész (előjeles) Az alábbiakban részletezett eljárások és függvények (NEHiba Boolean változó, NullaNNE:TPozEgesz konstans) megtalálhatók az NE_Unit-ban. A keretprogramot egészítsük ki minél több, a unitban egyébként definiált alprogrammal (elfedve a unitbeli definíciójukat)! *) Uses {$IFNDEF FPC -- nem FreePascal=TurboPascal} Newdelay, {$ENDIF} Crt,NE_Unit; (* Az NE_Unit interface részének egy részlete: Function Hosszusag(Const anne:tnnegesz):integer; {legnagyobb nem 0 nagyságrendű azaz -1, ha az értéke 0} Procedure BeolvasNNE(kerd:String; Var anne:tnnegesz); Procedure KiirNNE(elo:String; Const anne:tnnegesz; uto:string); Function EgyenloeNNE(Const anne,bnne:tnnegesz):boolean; Function NagyobbeNNE(Const anne,bnne:tnnegesz):boolean; Procedure NovelNNE(Const anne:tnnegesz; Var bnne:tnnegesz); Procedure CsokkentNNE(Const anne:tnnegesz; Var bnne:tnnegesz); Procedure OsszeadNNE(Const anne,bnne:tnnegesz; Var cnne:tnnegesz); Procedure KivonNNE(Const anne,bnne:tnnegesz; Var cnne:tnnegesz); Procedure SzorozNNE(Const anne,bnne:tnnegesz; Var cnne:tnnegesz); {Ef: anne>=bnne} Function NNE2String(Const anne:tnnegesz):string; {Ef: Hosszusag(aNNE)<256} Procedure String2NNE(Const s:string, Var anne:tnnegesz); {Ef: 0<Length(s)<256} {Egész-aritmetika:} Procedure BeolvasE(kerd:String; Var ae:tegesz); Procedure KiirE(elo:String; Const ae:tegesz; uto:string); Function EgyenloeE(Const ae,be:tegesz):boolean; Procedure NovelE(Const ae:tegesz; Var be:tegesz); Procedure CsokkentE(Const ae:tegesz; Var be:tegesz); Function NagyobbeE(Const ae,be:tegesz):boolean; Procedure OsszeadE(Const ae,be:tegesz; Var ce:tegesz); Procedure KivonE(Const ae,be:tegesz; Var ce:tegesz); Procedure SzorozE(Const ae,be:tegesz; Var ce:tegesz); Procedure OsztE(Const ae,be:tegesz; Var hanyados,maradek:tegesz); {Ef: be<>0} Procedure NNE2E(Const anne:tnnegesz; Var ae:tegesz); Function SgnE(Const ae:tegesz):integer; Function NEHibaE:Boolean; Const NullaNNE:TPozSzam=(0,...,0); NullaE:TEgesz=(hossz:0;elojel:Poz;jegy:(0,...,0)) MaxPont=...; {a jegyek maximális száma-1} 4

*) Var NEHiba:Boolean; {volt-e hiba bármi nagypontosságú müvelet elvégzésekor} (* *) ide jönnek a fenti rutinok "saját" változatai, a fenti szingnatúrával: (* Pl.: Function EgyenloeNNE(Const anne,bnne:tnnegesz):boolean; {...} Function EgyenloeE(Const ae,be:tegesz):boolean; {...} Procedure OsszeadNNE(Const anne,bnne:tnnegesz; Var cnne:tnnegesz); {...} Procedure OsszeadE(Const ae,be:tegesz; Var ce:tegesz); {...} *) Const IgenNem:Array[Boolean] of String=('nem','igen'); Var anne,bnne,cnne,hnne,mnne:tnnegesz; ae,be,ce,he,me:tegesz; ClrScr; {Elöjel nélüli egészek tesztje: -------------------------------------} Writeln('---- Elöjel nélüli egészek tesztje ----'+UjSor); BeolvasNNE('a(NemNegEgész):',aNNE); BeolvasNNE('b(NemNegEgész):',bNNE); KiirNNE(UjSor+'',aNNE,''); KiirNNE('=',bNNE,' = '); Writeln(EgyenloeNNE(aNNE,bNNE)); KiirNNE('',aNNE,''); KiirNNE('>',bNNE,' = '); Writeln(NagyobbeNNE(aNNE,bNNE)); NovelNNE(aNNE,cNNE); KiirNNE(UjSor,aNNE,''); KiirNNE('+1 = ',cnne,''); CsokkentNNE(aNNE,cNNE); If NEHibaE then KiirNNE(UjSor+'Nem lehet csökkenteni ',anne,'-t'); End Else 5

KiirNNE(UjSor,aNNE,''); KiirNNE('-1 = ',cnne,''); OsszeadNNE(aNNE,bNNE,cNNE); KiirNNE(UjSor,aNNE,''); KiirNNE('+',bNNE,''); KiirNNE(' = ',cnne,''); KivonNNE(aNNE,bNNE,cNNE); If NEHibaE then KiirNNE(UjSor+'Nem lehet kivonni ',anne,'-ból/böl '); KiirNNE('',bNNE,'-t!'); End Else KiirNNE(UjSor,aNNE,''); KiirNNE('-',bNNE,''); KiirNNE(' = ',cnne,''); SzorozNNE(aNNE,bNNE,cNNE); KiirNNE(UjSor,aNNE,''); KiirNNE('*',bNNE,''); KiirNNE(' = ',cnne,''); OsztNNE(aNNE,bNNE,hNNE,mNNE); KiirNNE(UjSor,aNNE,''); KiirNNE(' és ',bnne,''); Write(' osztása során képződött-e hiba = ',IgenNem[NEHibaE]); KiirNNE(UjSor,aNNE,''); KiirNNE(' Div ',bnne,''); KiirNNE(' = ',hnne,''); KiirNNE(UjSor,aNNE,''); KiirNNE(' Mod ',bnne,''); KiirNNE(' = ',mnne,''); ReadKey; {Elöjeles egészek tesztje: ------------------------------------------} Writeln(UjSor+UjSor+'---- Elöjeles egészek tesztje ----'+UjSor); KonvNNE_E(aNNE,aE); KonvNNE_E(bNNE,bE); KiirE('a(egész):',aE,''); KiirE(' és b(egész):',be,''); KiirE(UjSor+UjSor,aE,''); KiirE('=',bE,' = '); Writeln(EgyenloeE(aE,bE)); KiirE('',aE,''); KiirE('>',bE,' = '); Writeln(NagyobbeE(aE,bE)); NovelE(aE,cE); KiirE(UjSor,aE,''); KiirE('+1 = ',ce,''); CsokkentE(aE,cE); KiirE(UjSor,aE,''); KiirE('-1 = ',ce,''); OsszeadE(aE,bE,cE); KiirE(UjSor,aE,''); KiirE('+',bE,''); KiirE(' = ',ce,''); KivonE(aE,bE,cE); KiirE(UjSor,aE,''); KiirE('-',bE,''); KiirE(' = ',ce,''); OsztE(aE,bE,hE,mE); KiirE(UjSor,aE,''); KiirE(' és ',be,''); Write(' osztása során képződött-e hiba = ',IgenNem[NEHibaE]); KiirE(UjSor,aE,''); KiirE(' Div ',be,''); KiirE(' = ',he,''); KiirE(UjSor,aE,''); KiirE(' Mod ',be,''); KiirE(' = ',me,''); BeolvasE(UjSor+UjSor+'a(Egész):',aE); BeolvasE('b(Egész):',bE); KiirE(UjSor+'',aE,''); KiirE('>',bE,' = '); Writeln(NagyobbeE(aE,bE)); 6

SzorozE(aE,bE,cE); KiirE(UjSor,aE,''); KiirE('*',bE,''); KiirE(' = ',ce,ujsor); OsztE(aE,bE,hE,mE); KiirE(UjSor,aE,''); KiirE(' és ',be,''); Write(' osztása során képződött-e hiba = ',IgenNem[NEHibaE]); KiirE(UjSor,aE,''); KiirE(' Div ',be,''); KiirE(' = ',he,''); KiirE(UjSor,aE,''); KiirE(' Mod ',be,''); KiirE(' = ',me,''); ReadKey; End. 4. TECHNIKAI TANÁCSOK A keretprogram letöltése: keretprogram. 1 Szüksége lesz a megoldáshoz az NE_Unit félig lefordított kódjaira. 2 (Ezek a FP-hez tartoznak.) Ha mindent (ezt a leírást, a keret forrását, a unit fájljait) egyben meg akar kaparintani, akkor a tömörített állományt töltse le! 3 5. ELEGANCIANÖVELŐ LEHETŐSÉGEK A FREEPASCAL-BAN OPERÁTOROK Itt a szokásos kétváltozós, infix jelölésű műveletekről van szó, mint az azonos-e, kisebb-e, összeadás stb. operátorok. Az ilyen műveleteket ún. operátorként, mint speciális függvényt kell definiálni. A definíció fejsorának szintaxisa: Operator op(const x:t1,y:t2) z:t3; Felhasználásának szintaxisa: Var a:t1 b:t2 c:t3; c:=a op b; (Azaz a T1 és a T2 típusú adatra végezzük el az op műveletet, amelynek eredménye T3 típusú.) Példák: Operator =(Const x,y:tnne) egyenloe:boolean; 1 http://people.inf.elte.hu/szlavi/inforendsz/nagyarit/aritmetika/nagyegesz.pas 2 http://people.inf.elte.hu/szlavi/inforendsz/nagyarit/aritmetika/ne_unit.ppu és http://people.inf.elte.hu/szlavi/inforendsz/nagyarit/aritmetika/ne_unit.o 3 http://people.inf.elte.hu/szlavi/inforendsz/nagyarit/aritmetika/nagypontossaggyak.zip 7

Operator >(Const x,y:tnne) nagyobbe:boolean; Operator +(Const x,y:tnne) osszeg:tnne; 6. TOVÁBBI FELADATOK 1. Alakítsuk át az eddigi műveleteinket operátor jelölésűvé, és írjuk át a próbaprogramot is ennek szellemében! 2. Az előbbi feladat szellemében keressünk olyan eljárásokat, amelyek működési módjukat tekintve inkább függvényekként írandók le! (Ilyen például a String2NNE.) 3. Egészítsük ki a próbaprogramot a még teszteletlen műveletek megmozgatását célzó részekkel! 4. Gondoljuk meg, milyen szituációk maradtak esetlegesen ki a tesztelésből! Tegyük teljessé a tesztelő programot, hogy minél kevesebb inputtal, minél több (lehetőleg az összes) szituáció teszteltté váljon a futtatása révén! 8