\documentclass[a4paper]{article}

\usepackage[latin2]{inputenc}
\usepackage{slovene}

\title{
   RAČUNALNIŠTVO I
\\ 1997/98
}
\author{3.\ domača naloga}

\begin{document}
\maketitle
\thispagestyle{empty}

Kot osnova za vaše delo morajo obvezno biti moduli iz prve, oziroma
druge domače naloge, ali tisti, ki smo jih skupaj sestavili na vajah
oziroma predavanjih. Te module najdete v našem WWW sestavku ali na
področju
%
\[
\texttt{Z:}
  \backslash\texttt{Predavanja}
  \backslash\texttt{Polde}
  \enspace .
\]

\begin{enumerate}
\item
%
  V prvi domači nalogi smo naredili izvedbeni modul za
  več\-na\-tan\-čnos\-tno aritmetiko v jeziku c.  V drugi domači
  nalogi smo nato izdelali definicijski modul \texttt{Cint} za
  več\-na\-tan\-čnos\-tno aritmetiko v jeziku c++ (razred
  \texttt{Cint}). V tej domači nalogi bomo napisali še izvedbeni modul
  \texttt{Cint} istoimenskega razreda.

  \noindent \textsc{Naloga:}
%
  \emph{Napišite izvedbeni in testni modul \texttt{Cint} za delo z
    več\-na\-tan\-čnos\-tno aritmetiko nad celimi števili poljubne
    natančnosti.}

  Nad predmeti iz razreda celih števil \texttt{Cint} (,,\textbf{C}lass
  \textbf{int}eger``) lahko izvajamo osnovne računske operacije
  (prištevanje, odštevanje, množenje in deljenje) ter pretvorbe
  (prirejanja) med različnimi predstavitvami. Poleg notranje
  predstavitve celih števil, ki jo uporablja razred \texttt{Cint},
  modul pozna še običajno predstavitev (\texttt{long}) in predstavitev
  z nizom (\texttt{char~*}). Razred \texttt{Cint} je definiran kot:

{\tt
\begin{verbatim}
class Cint {
/* Desc:    Razred stevil za vec-natancnostno racunanje. Razred
            omogoca spremembo predstavitve iz long in iz niza (string,
            char *). V predstavitvi kot niz ima obliko (brez
            narekovajev): "<predznak><stevke>". Predznak je lahko "+",
            "-", ali "" (nic). V slednjem primeru se privzame, da je
            predznak "+" -- to je, stevilo je nenegativno. Razred
            omogoca tudi spremembo predstavitve nazaj v niz.

*/

//--------------------------------------------------------------------
//---------------------------------------------[ ZASEBNO, NE SKILI!! ]
private:
  int mPredznak;                // predznak stevila
  int mStevStevk;               // stevilo stevk
  int * mStevke;                // same stevke; njihovo stevilo se
                                // spreminja po potrebi

//--------------------------------------------------------------------
//-----------------------------------------------------------[ JAVNO ]
public:

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - -[ ustvarjanje / unicevanje ]
  Cint();
/* Desc:   Konstruktor. Ustvari novo stevilo z vrednostjo nic.
   Parms:  -
   Result:
   Pre:
   Post:   this = 0
*/

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  Cint(char * stev);
  Cint(int stev);
/* Desc:   Konstruktor. Ustvari novo stevilo z vrednostjo stev. Ce
           vrednosti stev ne moremo prirediti ima predmet vrednost 0.
   Parms:  stev -- prepisovano stevilo (po vrednosti)
   Result:
   Pre:
   Post:   (this = stev) OR (this = 0)
*/

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  bool Priredi(char * stev);
  bool Priredi(long stev);
  bool Priredi(Cint stev);
/* Desc:   Stevilo, ki ga predstavlja stev, prepisemo v ta predmet. Ce
           je predmet pred tem hranil neko drugo vrednost, slednjo
           pozabimo. Ce prepisa ne moremo izvesti, vrnemo false.
   Parms:  stev -- prepisovano stevilo (po vrednosti)
   Result: RESULT
   Pre:
   Post:   IF (RESULT) THEN this = stev ENDIF
*/

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  ~Cint();
/* Desc:   Destruktor.
   Parms:  -
   Result:
   Pre:
   Post:
*/

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - [ matematicne operacije ]
  bool Pristej(Cint stev);
/* Desc:   Pristejemo stevilo stev. Ce pristevanja ne moremo izvesti,
           naznacimo to z vrnitvijo vrednosti false.
   Parms:  stev -- pristevatelj (po vrednosti)
   Result: RESULT
           ( Ce rezultat ustreza pogojem, funkcija vrne T, sicer F. )
   Pre:
   Post:   IF RESULT THEN this'= this + stev
           ELSE this' = this ENDIF
*/

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  bool Odstej(Cint stev);
/* Desc:   Odstejemo stevilo stev. Ce odstevanja ne moremo izvesti,
           naznacimo to z vrnitvijo vrednosti false.
   Parms:  stev -- odstevatelj (po vrednosti)
   Result: RESULT
           ( Ker rezultat vedno ustreza pogojem, nam funkcija vrne T. )
   Pre:
   Post:   IF RESULT THEN this'= this - stev
           ELSE this' = this ENDIF
*/

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  bool Zmnozi(Cint stev);
/* Desc:   Stevilo, ki ga predstavlja ta predmet, zmnozimo s stev. Ce
           mnozenja ne moremo izvesti, naznacimo to z vrnitvijo
           vrednosti false.
   Parms:  stev -- faktor (po vrednosti)
   Result: RESULT
           ( Ce rezultat ustreza pogojem, funkcija vrne T, sicer F. )
   Pre:
   Post:   IF RESULT THEN this'= this * stev
           ELSE this' = this ENDIF
*/

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  bool Zdeli(Cint stev, Cint &ostanek);
/* Desc:   Stevilo, ki ga predstavlja ta predmet, zdelimo s stev.
           Kolicnik deljenja se shrani v ta predmet, ostanek pa v
           ostanek. Ce deljenja ne moremo izvesti (recimo stev = 0),
           naznacimo to z vrnitvijo vrednosti false.
   Parms:  stev -- delitelj (po vrednosti)
           ostanek -- ostanek (po referenci)
   Result: RESULT
   Pre:
   Post:   IF RESULT THEN
             (this= this' * stev + ostanek) AND
             (|stev| < ostanek <= 0)
           ELSE this' = this ENDIF
*/

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// - - - - - - - - - - - - - - - - - - - - - - - - - [ poizvedovanja ]
  char * Vrednost();
/* Desc:   Stevilo, ki ga predstavlja ta predmet, vrnemo v
           predstavitvi niza. Uporabnik mora po uporabi sprostiti
           pomnilnik (prostor), v katerem je shranjeno vrnejno
           stevilo. Ce stevilu ne moremo spremeniti predstavitve,
           vrnemo NULL.
   Parms:  -
   Result: RESULT
   Pre:
   Post:   IF (RESULT <> NULL) THEN RESULT = this ENDIF
*/

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  int Primerjaj(Cint stev);
/* Desc:   Stevilo, ki ga predstavlja ta predmet, primerjamo s stev.
           Vrnemo -1, 0 ali +1 (glej spodaj).
   Parms:  stev -- primerjanec (po vrednosti)
   Result: RESULT
   Pre:
   Post:   IF    (this < stev) THEN RESULT = -1
           ELSIF (this = stev) THEN RESULT =  0
           ELSIF (this > stev) THEN RESULT = +1
           ENDIF
*/

}; // Cint
\end{verbatim}
}

  Testni modul naj omogoča podobne operacije, kot testna modula v prvi
  in drugi domači nalogi: seštevanje (\texttt{S}), odštevanje
  (\texttt{O}), množenje (\texttt{M}) in deljenje (\texttt{D}). Pri
  deljenju naj se količnik shrani v \texttt{stev2} in ostanek v
  \texttt{stev1} -- \texttt{stev1} in \texttt{stev2} sta števili, ki
  ju uporablja testni modul in smo ju srečali že v prejšnjih domačih
  nalogah.
%
  Za razliko od prejšnjih testnih modulov naj ta omogoča dostop do
  obeh števil (predmetov iz razreda \texttt{Cint}). V ta namen sta
  spremenjena ukaza za vnos in izpis števil. Za vnos ima ukaz sedaj
  obliko:
%
\[
      \texttt{V} < \textrm{številka} > < \textrm{število} >
\]
%
  kjer \emph{številka}, ki ima vrednost \emph{0} ali \emph{1}, pove, v
  katero od števil se bo shranilo \emph{število}.
%
  Ukaz za izpis ima podobno obliko:
%
\[
      \texttt{I} < \textrm{številka} >
\]
%
  le da \emph{številka} tu pove, katero od števil se bo izpisalo.

  Poleg tega naj testni modul omogoča še primerjanje (ukaz
  \texttt{P}), ki takoj tudi izpiše rezultat primerjanja: \emph{-1},
  \emph{0} ali \emph{1}.

  Sicer je obnašanje testnega modula podobno prejšnjima:
%
{\tt
\begin{verbatim}
V12
V2-1000
O
I2
\end{verbatim}
}
%
  Izpiše se \texttt{-1002}.

%--------------------------------------------------------------------
\item V drugi domači nalogi smo se ukvarjali z večnatančnostnimi
  racionalnimi števili in aritmetiko nad njimi v jeziku c, na vajah pa
  se ukvarjamo s skladom. Sedaj bomo združili oba modula.

  \noindent \textsc{Naloga:}
%
  \begin{itemize}
  \item \emph{Napišite definicijo razreda racionalnih števil
      \texttt{Crac} za večnatančnostno aritmetiko.} Pri tem se
    zgledujte na razred \texttt{Cint} iz prve naloge.
  \item \emph{Napišite definicijo razreda skladov racionalnih števil}
    -- t.j.\ predmetov iz razreda \texttt{Crac}, ki ste ga definirali
    zgoraj. Pri tem se zgledujte na razred \texttt{Sklad} z vaj.
  \end{itemize}

\end{enumerate}

Rok za oddajo: \emph{8.\ 5.\ 1998.~do 19h} v asistentov predal pri
vratarju na FMF ali po elektronski pošti.

\end{document}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% End:
