RAČUNALNIŠTVO I 1997/98

1. domača naloga

1. december 1997

1. Naredite izvedbeni modul za naslednji definicijski modul, ki definira opearcije nad (poljubno) natančnimi celimi števili:

                                    /* maximal precision */
#define ART_cMaxPrecision   10
typedef unsigned int ART_tDigit;        /* one digit */
typedef struct {                        /* multiple precision number */
  int          sign;                    /* sign of the number +1 / -1 */
  ART_tDigit digits[ART-cMaxPrecision]; /* digits of number */
} ART_tNumber;
bool ART_Add(const ART_tNumber num1, const ART_tNumber num2,
             ART_tNumber * result);
/* Desc:    Sestejemo stevili num1 in num2 v result. Ce je result
            premajhno stevilo (premalo stevk), naznacimo to z
            vrnitvijo vrednost false.
   Parms:   num1 -- prvi sestevanec (prenesen po vrednosti)
            num2 -- drugi sestevanec (prenesen po vrednosti)
            result -- vsota (prenesena po referenci)
   Result:  result->precision >= Size(num1 + num2)
   Pre:
   Post:    IF RESULT THEN result= num1 + num2
*/
bool ART_Sub(const ART_tNumber num1, const ART_tNumber num2,
             ART_tNumber * result);
/* Desc:    Odstejemo od stevila num1 num2 in razliko shranimo
            v result. Ce je result premajhno stevilo (premalo stevk),
            naznacimo to z vrnitvijo vrednost false.
   Parms:   num1 -- odstevanec (prenesen po vrednosti)
            num2 -- odstevatelj (prenesen po vrednosti)
            result -- razlika (prenesena po referenci)
   Result:  result->precision >= Size(num1 - num2)
   Pre:
   Post:    IF RESULT THEN result= num1 - num2
*/

2. Napišite testni program za zgornji definicijski modul. Program naj se obnaša podobno kot namizni kalkulator. Kalkulator vedno uporablja dve števili: zadnje in predzadnje. Na začetku imata obe števili vrednost 0. Nato nad njima lahko opravljamo naslednje operacije:

Vpisi: vrednost zadnjega števila postane vrednost predzadnjega števila, vrednost zadnjega števila pa preberemo z zaslona;

Sestej: seštej vrednosti zadnjih dveh števil, potem vrednost zadnjega števila postane vrednost predzadnjega števila, vsota pa postane nova vrednost zadnjega števila;

Odstej: podobno kot seštevanje, le da od predzadnjega števila odštejemo zadnje število in razlika postane novo zadnje število;

Zamenjaj: medsebojno zamenjaj vrednosti zadnjega in predzadnjega števila;

Izpisi: izpiši vrednost zadnjega števila;

Testni program naj prebere ukaze s standardnega vhoda, kjer je vsak ukaz v svoji vrstici. Ukazi so dolgi eno črko (velike črke v opisih ukazov), kateri neposredno sledijo morebitni podatki (pri vpisu števila. Primer ukaznega niza je:

V2345
V1234
O
V-1111
S
I

Izpiše se 0.

Rok za oddajo: 21.12.1997.