\documentclass[a4paper]{article}

\usepackage{slovene}

\title{\v{S}este vaje iz ra\v{c}unalni\v{s}tva I}
\author{Alen Kramar}
\date{17. 11. 1998}

\begin{document}

\maketitle

\begin {abstract}
  Na teh vajah bomo izdelali dva podprograma, ki ju bomo vklju\v{c}ili
  v \texttt{KVADRAT.C}. Uporabili bomo stavka \texttt{WHILE} in
  \texttt{FOR}, nato pa bomo na\v{s} kvadrat spremenili v pravokotnik
  in zapolnili z zvezdicami.
\end {abstract}

\section*{Izdelava podprograma za izris osnovnice in vmesnice v
  programu kvadrat.c}

\subsection*{Podprogram za izris osnovnice}

Izrisali bomo osnovnico, ki bo \v{s}iroka, kot \v{z}eljena \v{s}irina.

Najprej se moramo vpra\v{s}ati \emph{kaj} bomo naredili in potem
\emph{kako} bomo to naredili. Po premisleku pridemo do spoznanja, da
bomo to izvedli s pomo\v{c}jo funkcije, ki jo bomo poimenovali
\texttt{izris\_osnovnice}. Ta funkcija nam bo izpisovala ,,+`` in
,,-`` -- slednje bomo izvedli z stavkom {\em for}. Na\v{s} stavek
\texttt{for} nam bo risal ,,-`` tako dolgo, dokler bo vrednost
\v{s}tevca \texttt{i} (za\v{c}etna vrednost \texttt{i = 1}) ustrezala
pogoju $\texttt{i} \leq \texttt{sirina} -2$. Ko ta pogoj ne bo
ve\v{c} izpolnjen, pa se bo izpisal \v{s}e zadnji ,,+``.

\subsubsection*{ Stavek \texttt{for}}

V tem podprogramu smo uporabili stavek \texttt{for}, ki je sestavljen
na slede\v{c} na\v{c}in:
%
\[
\texttt{for} (\texttt{izraz1;} \texttt{izraz2;} \texttt{izraz3})
\texttt{stavek};
\]
%
Kaj pa to pomeni?
%
\begin{enumerate}
\item izra\v{c}unaj \texttt{izraz1};
\item \label{zanka} \v{c}e je pogoj, kot ga dolo\v{c}a \texttt{izraz2}
  izpolnjen (resni\v{c}en), ...
\item ... potem izvedi \texttt{stavek};
\item izra\v{c}unaj \texttt{izraz3} in se vrni na \ref{zanka}.
\end{enumerate}

\subsection*{Podrprogram za izris vmesnice}

Sedaj moramo izdelati \v{s}e funkcijo \texttt{izrisi\_vmesnice}.
Ta funkcija je napisana na podoben na\v{c}in kot
\texttt{izrisi\_osnovnico}, samo da v stavku \texttt{for} ne bomo
izpisoval  ,,-`` in  ,,+``  ampak  ,,~`` in ,,|``.

Sedaj smo naredili doma\v{c}o nalogo.

\section*{Zanka \texttt{do} ... \texttt{while}}

Zanko \texttt{do-while}  uporablajmo tam, kjer imamo dolo\v{c}en
stavek, ki naj bi se izvajal toliko \v{c}asa, dokler bo vrednost
izraza izpolnjena (resni\v{c}na).

Zanko \texttt{do-while} bomo vrinili v glavni program (\texttt{main}),
da nam bo program izrisal na\v{s} poljuben kvadrat ve\v{c}krat ne da
bi ponovno zaganjali program.

V glavnem programu, definiramo novo spremenljivko / kosntanto
\emph{najmanj\v{s}a \v{s}irina} -- \texttt{najmanjsa\_sirina}. To
storimo na slede\v{c}i na\v{c}in:
%
\begin{itemize}
\item definiramo jo moramo na za\v{c}etku programa, da je takoj vidna;
\item in \texttt{const int najmanjsa\_sirina = 2}, kar pomeni, da je
  \texttt{najmanjsa\_sirina} konstantno (v prograu se ne spreminja
  \v{s}tevilo, ki ima vrednost 2.
\end{itemize}
%
Tako definirano konstanto uporabimo na dveh mestih v programu:
%
\begin{itemize}
\item v izstopnem pogoju \texttt{do-while} zanke v glavni funkciji in
\item pri izpisu navodil uporabniku, kaj naj vpi\v{s}e.
\end{itemize}
%
Zaradi definicije konstante sedaj samo na enem mestu lahko popravimo
najmanj\v{s}o \v{s}irino, sprememba pa se bo odra\v{z}ala na obeh
mestih. To pomeni la\v{z}je vzdr\v{z}evanje programa.

\section*{Popravljanje oziroma kraj\v{s}anje programa}

Na\v{s} kvadrat bomo zapolnili z ,,\texttt{*}`` ter funkciji za izris
osnovnice in vmesnice malo popravili, oziroma skraj\v{s}ali.

\v{C}e bolj natanko pogledamo funkciji \texttt{izrisi\_osnovnico} in
\texttt{izrisi\_vmesnico}, vidimo da se razlikujeta samo v tem kaj katera
funkcija izpi\v{s}e -- ena ,,\texttt{+}`` in ,,\texttt{-}``, druga pa
,,\texttt{|}`` in ,,\texttt{~}``).

V programih ni priporo\v{c}ljivo imeti dve zelo podobni kodi na dveh
razli\v{c}nih koncih. Zato bomo napisali novo funkcijo
\texttt{izrisi\_daljico} in jo bost auporabljali obe na\v{s}i funkciji
za izris osnovnice in vmesnice. Pri definiranju te funkcije si bomo
pomagali z \emph{uporabo parametrov}. Funkcija bo imela tri parametre:
%
\begin{itemize}
\item znak na kraji\v{s}\v{c}ih daljice,
\item znak med kraji\v{s}\v{c}ema daljice in
\item koliko znakov bo dolga daljica.
\end{itemize}
%
Znaka prenesemo kot spremenljivki tipa \texttt{char}.

Osnovnico bomo izrisali, tako da bomo klicali funkcijo
\texttt{izrisi\_daljico}. Podobno bomo izrisali tudi vmesnico. Ker smo
napisali novo funkcijo, nam ni ve\v{c} potrebno imeti tako
obse\v{z}nih in zapletenih funkcij za izris osnovnice in vmesnice.
Zato ju lahko skr\v{c}imo.

Kvadrat zapolnimo z ,,\texttt{*}`` tako, da pri izrisu vmesnice
daljico izri\v{s}emo z znakom ,,\texttt{*}`` namesto z ,,\texttt{~}``.


\section*{Pravokotnik}

Poskusimo sedaj na\v{s} kvadrat spremeniti v poljuben pravokotnik. To
izvedemo tako, da najprej prebermo \v{s}irino in dol\v{z}ino in nato
bomo \v{s}e narisali pravokotnik.

Dol\v{z}ino in \v{s}irino preberemo s funkcijo
\texttt{preberi\_sirino}.  Ko program prevedemo, nas bo dvakrat
vpra\v{s}al po dol\v{z}ini stranice, kjer bo prvi\v{c} mi\v{s}ljena
\v{s}irina in drufi\v{c} dol\v{z}ina pravokotnika.  To dvoumje moramo
popraviti.

Popravimo ga lahko tako, da napi\v{s}emo dve funkciji: eno, ki bo
izpisala \texttt{Vpisi sirino} in drugo, ki bo izpisala \texttt{Vpisi
  sirino}. Ker se ti funkciji razlikujeta samo v bedsedah
\texttt{sirino} in \texttt{visino}, bomo definirali le eno funkcijo
(razlog glej zgoraj pri definiciji funkcije \texttt{izpisi\_daljico}),
ki bo kot parameter imela niz (\textit{string}), katerega vrednost bo
bodisi \texttt{visino} ali \texttt{sirino}.

Tako je v glavo funkcije \texttt{preberi\_velikost} potrebno dodati
parameter \texttt{char * velikost}. Sedaj moramo v isti funkciji
\v{s}e malce popraviti klic funkcije \texttt{printf} in sicer tako, da
nas bo uporabil spremenljivko \texttt{velikost}, ki je parameter
funkcije.

Kako izgleda celoten program izgleda, si lahko ogledate na na\v{s}em
podreo\v{c}ju pod imenom \texttt{pravokotnik.c}.

\end{document}
