\documentclass[10pt, a4paper]{article}
\usepackage{slovene}

\author{Jurij Rici}
\title{\v{C}etrte vaje iz ra\v{c}unalni\v{s}tva I}
\date{3. 11. 1998}

\begin{document}

\maketitle

Od zadnji\v{c}:  Naredili smo program, ki  je od\v{c}ital \v{s}tevilo,
ki je omejeno - je tipa  int. To \v{s}tevilo bi radi zapisali, tako da
se  izpi\v{s}e vsaka  \v{s}tevka  \v{s}tevila z  besedami  in sicer  v
obratnem  vrstnem redu.  Npr.\ \v{c}e  imamo \v{s}tevilo  173,  bi radi
dobili \texttt{tri sedem ena}.

Vpra\v{s}amo se:
%
\begin{itemize}
\item Kako bi to sedaj naredili?
\item Kaj in kje moramo to spremeniti?
\end{itemize}
%
\emph{Namig}: Uporabi \texttt{if} stavek.

Kak\v{s}na je oblika \texttt{if} stavka ?

Ta stavek ima slede\v{c}o obliko. Zapi\v{s}emo:
%
\begin{center}
 \begin{verbatim}
  if (pogoj)
  {
    stavek ;
  };
 \end{verbatim}
\end{center}
%
\v{C}e je pogoj zadovoljen (izpolnjen), se bo \texttt{stavek} izvedel.

\section*{Izpis \v{s}tevk z besedami}

Definirali bomo funkcijo, ki bo \v{s}tevke izpisovala z besedami.

\subsection*{Funkcije -- \v{s}e enkrat}

Vsaka funkcija ima \emph{telo} in \emph{glavo}: v glavi funkcije
opi\v{s}emo  \emph{kaj} funkcija po\v{c}ne in v in v njenem
opi\v{s}emo \emph{kako} to po\v{c}ne.

Poleg tega ima funkcija tudi dve \emph{pojavitvi}: \emph{definicijo}
in \emph{uporabo} (slednja je seveda lahko ve\v{c}kratna). Druga\v{c}e
povedano v prvi pojavitvi funkcije funkcijo opi\v{s}emo, v drugi
pa jo uporabimo -- jo kli\v{c}emo.

\subsection*{Na\v{s}a funkcija}

Zanima nas, ali bo funkcija kaj vrnila? Ne in zato je tipa
\texttt{void}.

{\tt
\begin{verbatim}
void izpis_stevke (int stevka)
{
  if (stevka == 0)  prinf(" nic");
  if (stevka == 1)  prinf(" ena");
  if (stevka == 2)  prinf(" dve");
  if (stevka == 3)  prinf(" tri");
  if (stevka == 4)  prinf(" stiri");
  if (stevka == 5)  prinf(" pet");
  if (stevka == 6)  prinf(" sest");
  if (stevka == 7)  prinf(" sedem");
  if (stevka == 8)  prinf(" osem");
  if (stevka == 9)  prinf(" devet");
} /* izpis_stevke */
\end{verbatim}
}

\v{C}e \v{z}elimo, da nam program za\v{c}ne novi zagon v novi vrsti,
moramo nekoliko popraviti funkcijo \texttt{izpisi}.

Zakaj funkcijo \texttt{izpisi}? Zato ker nam ona izpisuje \v{s}tevke.

Kje moramo popraviti? Funkcija \texttt{izpisi} najprej naracuna
koli\v{c}nik in stevko. Nato po vrsti izpise stevko in se preostali del
stevila (koli\v{c}nik). V primeru, ko je koli\v{c}nik enak 0, ni
potrebno izpisati ni\v{c}esar ve\v{c}, ampak samo \v{s}e
zaklju\v{c}imo izpisovanje s prehodom v novo vrstico:
%
{\tt
\begin{verbatim}
if (kolicnik != 0)
  izpisi(kolicnik);
else
  printf("\n");
\end{verbatim}
}

\subsection*{Izpisovanje \v{s}tevke malo druga\v{c}e}

Sedaj bi radi naredili to funkcijo nekoliko druga\v{c}e.
Uporabili bom  \texttt{switch} stavek.

Kak\v{s}no obliko ima switch stavek? Ta stavek ima slede\v{c}o obliko
(glej tudi pomo\v{c} (\textit{HELP}) v programu):
%
{\tt
\begin{verbatim}
switch (spremenljivka)
{
case vrednost_1: stavek_1; break;
case vrednost_2: stavek_2; break;
...
case vrednost_n: stavek_n; break;
}
\end{verbatim}
}
%
\v{C}e je vrednost spremenljivka \texttt{vrednost\_i} (i=1,2,...,n),
se izvede \texttt{stavek\_i}.

Kaj pa \v{c}e imamo dve vrednosti hkrati? Potem se izvedeta obe.

Izvedejo se vsi stavki od prvega navzdol. \v{C}e mislimo, da je to
nepotrebno, uporabimo \texttt{break} stavek. Ko pridemo do ustreznega
stavka, nam ukaz \texttt{break} prekine izvajanje \texttt{switch}
stavka.  Torej izvede se tisti del programa, ki ustreza stavkom. Tako
dobimo:
%
{\tt
\begin{verbatim}
void izpisi_stevko(int stevka)
{
  switch (stevka)
  {
  case 0: printf(" nic"); break;
  case 1: printf(" ena"); break;
  case 2: printf(" dve"); break;
  case 3: printf(" tri"); break;
  case 4: printf(" stiri"); break;
  case 5: printf(" pet"); break;
  case 6: printf(" sest"); break;
  case 7: printf(" sedem"); break;
  case 8: printf(" osem"); break;
  case 9: printf(" devet");
  }/* switch */
} /* izpisi_stevko */
\end{verbatim}
}

\section*{Izpisovanje \v{s}tevil \v{s}e druga\v{c}e}

Kaj pa \v{c}e \v{z}elimo \v{s}tevke zapisati v istem vrstnem redu, kot
so bile vpisane (to je \texttt{ena sedem tri})? Kateri del programa
moramo spremeniti?

Spremeniti moramo funkcijo \texttt{izpisi}. Funkcija \texttt{izpisi}
nam izpisuje \v{s}tevke. Kako to po\v{c}ne?

Ker nam funkcija najprej izpisuje \v{s}tevko, potem pa koli\v{c}nik
(preostanek \v{s}tevila), moramo zamenjati vrstni red: najprej mora
izpisuje koli\v{c}nik in \v{s}ele nato \v{s}tevko.

Kaj pa \v{c}e \v{z}elimo \v{s}tevke zapisati v istem \emph{in}
obratnem vrstnem redu? V tem primeru izpi\v{s}emo \v{s}tevko, nato
izpi\v{s}emo koli\v{c}nik (za izpis tega bo poskrbela funkcija
\texttt{izpisi}) in na koncu \v{s}e enkrat izpi\v{s}emo \v{s}tevko.

Na koncu pa \v{z}elimo popraviti \v{s}e ves program tako, da se bo
izvedel ve\v{c}krat zaporedoma, ne da bi ga zaganjali vsaki\v{c}
posebej. Pri tem pa bi se izvajanje prekinilo \v{s}ele takrat, ko bi
odtipkali dolo\v{c}eno \v{s}tevilo. Uporabimo zanko \texttt{while} v
glavnem programu.

\end{document}





