\documentclass[11pt,a4paper]{article}

\usepackage[latin2]{inputenc}
\usepackage{slovene}
\usepackage{epic,eepic}
\usepackage{enlarge}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Dodatna okolja itd.
%---
                                          %% GLAVA in SPLOSNO:
\pagestyle{myheadings}
\markright{%
  \textsc{Računalništvo} I (1998/99):
  Kolokvij 4.~sušca.~1999
}
%----------------------------------------------------[ Ocenjevanje: ]
\newcommand{\Ocena}[1]{\dotfill \_\_~/~\makebox[1.5em][r]{#1}}

%--------------------------------------------------------[ Podpisi: ]
\newlength{\PolStrani}                 % ``pol strani'' za stavljenje
\setlength{\PolStrani}{0.4\textwidth}  % dveh vzporednih stolpcev
\newlength{\VisinaPodpisa}             % visina skatle podpisa
\setlength{\VisinaPodpisa}{1.5cm}
\newlength{\DolzinaPodpisa}            % dolzina crte za podpis
\setlength{\DolzinaPodpisa}{0.80\PolStrani}

\newcommand{\vPodpis}[2]{              % kdo bo podpisal dokument
  \begin{minipage}[c]{\PolStrani}
    \begin{center}
      #1
    \end{center}

    \vspace{\VisinaPodpisa}

    \begin{center}
       \rule{\DolzinaPodpisa}{0.5pt}     % crta za podpis
    \\ \parbox{\DolzinaPodpisa}{#2}
    \end{center}
  \end{minipage}
} % \vPodpis
\makeatother

\newlength{\DolzinaDatuma}             % dolzina crte za datum
\setlength{\DolzinaDatuma}{0.75\PolStrani}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\title{
   RAČUNALNIŠTVO I
\\ 1998/99
}
\author{Kolokvij}
\date{4.~sušca.~1999}

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

Kolokvij sestoji iz devetih nalog, katerih skupno število točk je
\textbf{100}. Vrednosti posameznih nalog so naznačne v spodnji tabeli.

\begin{center}
  \begin{minipage}{0.8\textwidth}
    \begin{enumerate}
    \item naloga: definicija funkcije                    \Ocena{  6}
    \item naloga: parametri funkcije                     \Ocena{ 12}
    \item naloga: Črni Jaka                              \Ocena{ 12}
    \item naloga: nepridiprav pri kartah                 \Ocena{  9}
    \item naloga: izpisovanje kart                       \Ocena{  5}
    \item naloga: in še enkrat izpisovanje kart          \Ocena{ 15}
    \item naloga: razvrščanje kart                       \Ocena{ 14}
    \item naloga: niso samo karte skrivnostne, ampak tudi programi
                                                         \Ocena{  7}
    \item naloga: pa poglejmo, kdo je zmagal pri kartah  \Ocena{ 20}
    \item[\textsc{Skupno}]                       \Ocena{100}
    \end{enumerate}
  \end{minipage}
\end{center}

Čas pisanja je 1 ura in pol (90 minut).

Na kolokviju je dovoljena uporaba zapiskov a nikakor ,,dobrososedske``
pomoči.

Predno pričnete pisati, spodaj vpišite svoje ime in priimek ter se
podpišite.

\vfill

\vPodpis{Ime in Priimek}{(tiskano)}
%
\hfill
%
\vPodpis{Podpis}{(študent)}

\vfil

\begin{center}
  \emph{Veliko uspeha!}
\end{center}

\clearpage

\begin{enumerate}
%--------------------------------------------------------------------
\item
%
  Definicija funkcije sestoji iz glave, pogodbe in telesa.

  \noindent \textsc{Naloga:}
%
  \begin{enumerate}
  \item Iz česa sestoji glava definicije funkcije? Napišite primer
    glave.

    \vfill

  \item Iz česa sestoji pogodba funkcije? Na kratko opišite pomen
    posameznih členov pogodbe.

    \vfill

  \end{enumerate}

\clearpage
%--------------------------------------------------------------------
\item
%
  Vsaka funkcija ima \emph{vhodne} in \emph{izhodne} parametre. Sicer
  prenašamo parametre v funkcijo bodisi po referenci (naslovu) ali po
  vrednosti.

  \noindent \textsc{Naloga:}
%
  \begin{enumerate}
  \item Katera je najbolj bistvena razlika med prenosom parametrov po
    referenci in po vrednosti?

    \vfill

  \item Kakšen prenos se uporablja za vhodne parametre?

    \vfill

  \item Kakšen prenos se uporablja za izhodne parametre?

    \vfill

  \item Za vsakega od parametrov v spodnji glavi funkcije določite ali
    je prenešen po vrednosti ali po referenci.
%
{\tt
\begin{verbatim}
void NekajNaredi (in par1, int par2[100]);
\end{verbatim}
}

    \vfill

  \end{enumerate}

\clearpage
%--------------------------------------------------------------------
\item \label{Jaka1}
%
  Pri igri s kartami imenovani ,,Črni Jaka`` lahko vzemamo karte z
  vrha kupa, dokler njihova vsota ne preseže vrednosti 21. Zmaga tisti
  igralec, katerega vsota je najbližja vrednosti 21 a je ne presega. V
  tej nalogi malce spremenimo pravila in vlečemo karte dokler njihova
  vsota ne preseže vrednosti 21. Kot rezultat funkcija vrne razliko
  med vsoto izvlečenih kart in vrednsotjo 21.

  \noindent \textsc{Naloga:}
%
  Spodaj je napisano telo funkcije, ki skrbi za vlečenje kart. V
  telesu funkcije je napisano le \emph{kaj} počne, vi pa dopišite
  \emph{kako} to naredi -- t.j. napišite kodo funkcije. Pri tem
  upoštevajte, da je na vrhu kupa kart \texttt{karte[0]}, naslednja
  karta je \texttt{karta[1]} itd. Karta \texttt{i} ima vrednost
  \texttt{karta[i]}.
%
{\tt
\begin{verbatim}
int VleciKarte(int karte[52])
{




                     /* nastavi zacetno vsoto na 0 */




                     /* dokler vsota kart ne preseze 21 */




                        /* izvleci karto */




                        /* in pristej njeno vrednost vsoti */




                     /* vrni vsoto zmanjsano za 21 */




} /* VleciKarte */
\end{verbatim}
}


\clearpage
%--------------------------------------------------------------------
\item
%
  Sosedov Miha bi rad malce goljufal pri igri ,,Črni Jaka``.
  Nepridiprav jo kani goljufati tako, da bo sem ter tja pokukal na
  poljubno mesto v kup kart, ki je predstavljen kot tabela 52-ih celih
  števil (glej nalogo \ref{Jaka1}), ter se tako lažje odločil, ali naj
  še vleče karte ali ne. Zato potrebuje funkcijo (podprogram)
  \texttt{Kukaj}, ki bo prebrala s tipkovnice mesto, na katero bo Miha
  pokukal in bo nato vrnila vrednost karte na tem mestu.

  \noindent \textsc{Naloga:}
%
  \begin{enumerate}
  \item Kakšne vhodne in kakšne izhodne parametre ima funkcija
    \texttt{Kukaj}?

    \vfill

  \item Napišite glavo funkcije \texttt{Kukaj}.

    \vfill

  \end{enumerate}

\clearpage
%--------------------------------------------------------------------
\item \label{IzpisKarte}
%
  Pri naši igri s kartami potrebujemo tudi funkcijo, ki bo smiselno
  izpisovala karte, glede na njihovo vrednost. Zato definiramo
  naslednjo funkcijo:
%
{\tt
\begin{verbatim}
void IzpisiKarto(int karta) {
/* Desc:   Funkcija izpise na stdout opis slike na karti, ki ima dano
           vrednost.
   Parms:  karta - vrednost karte (po vrednosti)
   Result: -
   Pre:    -
   Post:   opis karte je izpisan na stdout
*/

  if (karta == 14)      printf("as");
  else if (karta == 13) printf("kralj");
  else if (karta == 12) printf("dama");
  else if (karta == 11) printf("fant");
  else if (karta == 10) printf("desetica");
  else if (karta == 9)  printf("devetica");
  else if (karta == 8)  printf("osmica");
  else if (karta == 7)  printf("sedmica");
  else if (karta == 6)  printf("sestica");
  else if (karta == 5)  printf("petica");
  else if (karta == 4)  printf("stirica");
  else if (karta == 3)  printf("trojka");
  else                  printf("dvojka");

} /* IzpisiKarto */

\end{verbatim}
}

  \noindent \textsc{Naloga:}
%
  Prepišite zgornjo funkcijo z uporabo stavka \texttt{switch}.

\clearpage
%--------------------------------------------------------------------
\item
%
  Nepridiprav Miha želi pri svojem nečednem poslu uporabiti našo
  funkcijo \texttt{IzpisiKarto} iz naloge \ref{IzpisKarte}. Toda Miha
  bi rad najprej preveril kako program deluje. Pričakuje, da bo
  naslednji testni program:
%
{\tt
\begin{verbatim}
int main(void) {

  int karta;

  for (karta= 2; karta < 20; karta++) {
    IzpisiKarto(karta);
    printf("\n");
  }

  return 1;
} /* main */
\end{verbatim}
}
%
  izpisal:
%
{\tt
\begin{verbatim}
dvojka
trojka
stirica
petica
sestica
sedmica
osmica
devetica
desetica
fant
dama
kralj
as
dvojka
trojka
stirica
petica
sestica
\end{verbatim}
}
%
  saj meni, da se najprej izpise prvi niz kart, nato drugi in tako
  naprej. Toda izpiše se:
%
{\tt
\begin{verbatim}
dvojka
trojka
stirica
petica
sestica
sedmica
osmica
devetica
desetica
fant
dama
kralj
as
dvojka
dvojka
dvojka
dvojka
dvojka
\end{verbatim}
}

  \noindent \textsc{Naloga:}
%
  \begin{enumerate}
  \item   Zakaj, opišite, je prišlo do razlike med obema izpisoma?

    \vfill

  \item   Kdo je ,,kriv`` za napako (obkrožite pravilen odgovor):
%
    \begin{itemize}
    \item mi, ki smo programirali \texttt{IzpisiKarto};
    \item Miha, ki je uporabil našo funkcijo.
    \end{itemize}

  \item Kako popraviti napako -- odpraviti razliko? Navedite dve
    bistveno različni možnosti.

    \vfill

  \end{enumerate}

\clearpage
%--------------------------------------------------------------------
\item
%
  Če imamo $n$ kart jih lahko razvrstimo v vrsto na $n!$ načinov, kjer
  je funkcija $n!$ definirana kot $1 \cdot 2 \cdot \cdot \cdot n$.

  \noindent \textsc{Naloga:}
%
  Napišite funkcijo \texttt{Fakulteta}, ki bo izračunala $n!$ s
  pomočjo \emph{rekurzije}.

\clearpage
%--------------------------------------------------------------------
\item
%
  Imamo program:
%
{\tt
\begin{verbatim}
#include <stdio.h>

int Nekaj (int a, int b) {

  if (b == 0)  return a;
  else         return Nekaj(b, a % b);

} /* Nekaj */

int main (void) {

  printf("%d \n", Nekaj(77, 22));
  return 0;

} /* main */
\end{verbatim}
}

  \noindent \textsc{Naloga:} Kaj izpiše program?

  \vfill

  \noindent \textsc{Dodatna naloga:} Znate opisati bolj splošno, kaj
  dela program?

  \vfill

\clearpage
%--------------------------------------------------------------------
\item
%
  Igra kart je zaključena in čas je, da vidimo, kdo je največkrat
  zmagal. Za to bomo uporabili \emph{tračni diagram}.
%
  Tračni diagram sestoji iz trakov, katerih dolžina je sorazmerna
  velikosti količino, ki jo predstavljajo. Včasih pa so lahko
  količine, ki jih želimo predstaviti s tračnim diagramom prevelike in
  moramo omejiti dolžino trakov. V naslednjem primeru so v prvem
  stolpcu zapisane velikosti količin, ki jim sledijo tračni diagrami,
  ki so omejeni na 7 znakov. Pri tem je trak, ki smo ga morali
  ,,odrezati``, označen z znakom \texttt{X} na zadnjem mestu.
%
{\tt
\begin{verbatim}
   4 OOOO
   9 OOOOOOX
   7 OOOOOOO
   0
   2 OO
\end{verbatim}
}
%

  \noindent \textsc{Naloga:}
%
  Napišite podprogram \texttt{TracniDiagram}, ki bo izrisal tašen
  tračni diagram.
%
{\tt
\begin{verbatim}
void TracniDiagram (int stKolicin, int kolicine[MAX_KOLICIN],
                    int najvecjaDolzina) {
/* Desc:    Funkcija izrise tracni diagram za stKolicin kolicin, ki so
            shranjene v tabeli kolicine. Pri tem uposteva, da je
            najdaljsi trak diagrama lahko dolg najvecjaDolzina znakov.
            i-ta vrstica diagrama predstavlja i-to kolicino iz tabele
            kolicin kolicine (0 <= i < stKolicin). Vrstica se pricne s
            stevilsko vrednostjo i-te kolicine, ki jo izpisana na 5
            mest natancno. Sledi presledek in nato trak sestojec iz
            znakov O in dolzine enake velikosti i-te kolicine. Ce je
            ta kolicina vecja od najvecjaDolzina, je trak dolg
            najvecjaKolicina znakov, od katerih je zadnji znak X.
   Parms:   stKolicin - stevilo kolicin v tabeli kolicine (po vrednosti)
            kolicine - tabela kolicin (po referenci)
            najvecjaDolzina - najvecja dolzina traku (po vrednosti)
   Result:  -
   Pre:     (0 <= stKolicin < MAX_KOLICIN) AND
            (0 < najvecjaKolicina) AND
            (FOR 0 <= i < stKolicin: kolicine[i] >= 0)
   Post:    (tracni diagram je izpisan) AND
            (kolicine' = kolicine)
*/
\end{verbatim}
}

  \hfill

{\tt
\begin{verbatim}
} /* TracniDiagram */
\end{verbatim}
}

\clearpage
\mbox{}
\clearpage
%--------------------------------------------------------------------
\end{enumerate}

\end{document}

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