%==============================================================================
%TODO
%
%==============================================================================


\documentclass[a4paper]{article}

\newcommand{\Prog}[1]{\texttt{#1}}

\setlength\textwidth{6.5in}
\setlength\oddsidemargin{0in}
\setlength\evensidemargin{0in}

\setlength\textheight{9in}

\setlength\topmargin{0in}
\setlength\headheight{0in}
\setlength\headsep{0in}
\setlength\footskip{.3in}

\usepackage{latexsym}
\usepackage[spanish]{babel}

\title{Pr\'actico 4a \\ (de entrega obligatoria)}
\author{B. Gonzalez Kriegel - N. Wolovick}

\begin{document}
\maketitle

Traducir a ensamlador ARC uno de los 4 c\'odigos escritos en el lenguaje de los comandos
guardados de Dijkstra (Dgcl).
Estos programas fueron derivados en AyED1 y est\'an en el apunte ``C\'alculo de Programas''.

Se deber\'a seguir de la mejor manera posible la estructura del programa original,
para ello deber\'a transformar de manera conveniente las variables, expresiones y estructuras de
control, en instrucciones ARC.

\smallskip

El c\'odigo, que ser\'a el resultado final del trabajo, deber\'a estar comentado, indicando las
relaciones entre variables y arreglos con registros y posiciones de memoria, asi como que sentencia
o parte de sentencia implementa cada instrucci\'on del ARC ISA.

Adem\'as en los ejercicios del 0 al 4 habr\'a que definir un arreglo en la memoria para probar ejecuciones
y en el caso del ejercicio 5 s\'olo basta con cargar los registros que representen $x$ e $y$ con el contenido
de dos posiciones de memoria.

\smallskip

Enviar el c\'odigo debidamente testeado en el ARCSim, junto con el n\'umero de grupo y nombres de los
integrantes a {\bf \Prog{odc@hal.famaf.unc.edu.ar}} antes del viernes 19 de Mayo, fecha del
2do. parcial.
El ejercicio resuelto significa 2 puntos para cada integrante del grupo en el segundo parcial
que ser\'a por un total de 8 puntos.
Los programas enviados que tengan alg\'un error podr\'an ser corregidos y reenviados cuantas veces
sea necesario hasta el d\'{\i}a y hora del parcial.

\smallskip

Los programas 4 y 5 tienen mayor dificultad, por lo que no son obligatorios.
Sin embargo, las primeras \emph{personas} que envien estos programas sin recibir ayuda alguna en la resoluci\'on,
tendr\'an 2 puntos m\'as en el parcial, adem\'as de los que puedan conseguir con el ejercicio grupal y el parcial escrito.
No se permite que una misma persona acumule m\'as de 4 puntos resolviendo estos ejercicios.


\paragraph{0 - Todos los Elementos Positivos (p.147 - ej.3a)}
	\Prog{
	\begin{small}
	\begin{center}
	\begin{tabbing}
		[ \= con N: Int, A: array [0,N) of Int; var n,r: Int \\
		\> $\{R: N \geq 0\}$ \\
		\> n,r := 0,True \\
		\> $\{P: r=(\forall.i : 0\leq i<n : A.i\geq 0) \}$ \\
		\> {\bf do}\= \\
		\> \>	$\Box$ \= smtg. \kill
		\> \>	\> n$\neq$N $\rightarrow$ n,r := n+1,r and A.n$\geq$0 \\
		\> {\bf od} \\
		\> $\{Q: r=(\forall.i : 0\leq i<N : A.i\geq 0) \}$ \\
		]
	\end{tabbing}
	\end{center}
	\end{small}
	}	


\paragraph{1 - Alg\'un Elemento Positivo (p.147 - ej.3b)}
	\Prog{
	\begin{small}
	\begin{center}
	\begin{tabbing}
		[ \= con N: Int, A: array [0,N) of Int; var n,r: Int \\
		\> $\{R: N \geq 0\}$ \\
		\> n,r := 0,False \\
		\> $\{P: r=(\exists.i : 0\leq i<n : A.i\geq 0) \}$ \\
		\> {\bf do}\= \\
		\> \>	$\Box$ \= smtg. \kill
		\> \>	\> n$\neq$N $\rightarrow$ n,r := n+1,r or A.n$\geq$0 \\
		\> {\bf od} \\
		\> $\{Q: r=(\exists.i : 0\leq i<N : A.i\geq 0) \}$ \\
		]
	\end{tabbing}
	\end{center}
	\end{small}
	}	

\pagebreak

\paragraph{2 - M\'aximo Elemento (p.147 - ej.4)}
	\Prog{
	\begin{small}
	\begin{center}
	\begin{tabbing}
		[ \= con N: Int, A: array [0,N) of Int; var n,r: Int \\
		\> $\{R: N \geq 0\}$ \\
		\> n,r := 0,$- \infty$ \\
		\> $\{P: r=(Max.i : 0\leq i<n : A.i) \}$ \\
		\> {\bf do}\= \\
		\> \>	$\Box$ \= smtg. \kill
		\> \>	\> n$\neq$N $\rightarrow$ n,r := n+1,r max A.n \\
		\> {\bf od} \\
		\> $\{Q: r=(Max.i : 0\leq i<N : A.i) \}$ \\
		]
	\end{tabbing}
	\end{center}
	\end{small}
	}	


\paragraph{3 - Cantidad de Elementos Pares (p.147 - ej.5)}
	\Prog{
	\begin{small}
	\begin{center}
	\begin{tabbing}
		[ \= con N: Int, A: array [0,N) of Int; var n,r: Int \\
		\> $\{R: N \geq 0\}$ \\
		\> n,r := 0,0 \\
		\> $\{P: r=(N.i : 0\leq i<n : A.i\ mod\ 2 = 0) \}$ \\
		\> {\bf do}\= \\
		\> \>	$\Box$ \= smtg. \kill
		\> \>	\> n$\neq$N $\rightarrow$ \= {\bf if} \= \\
		\> \>	\> 			\> 	\>$\Box$\=  \kill
		\> \>	\> 			\> 	\> \> A.n mod 2 = 0 $\rightarrow$ n,r := r+1,n+1 \\
		\> \>	\> 			\> 	\> $\Box$ \> A.n mod 2 $\neq$ 0 $\rightarrow$ n := n+1 \\		
		\> \>	\> 			\> {\bf fi}  \\
		\> {\bf od} \\
		\> $\{Q: r=(N.i : 0\leq i<N : A.i\ mod\ 2 = 0) \}$ \\
		]
	\end{tabbing}
	\end{center}
	\end{small}
	}	


\paragraph{4 - Segmento de Suma M\'axima (p.144)}
	\Prog{
	\begin{small}
	\begin{center}
	\begin{tabbing}
		[ \= con N: Int, A: array [0,N) of Int; var n,r,u: Int \\
		\> $\{R: N \geq 0\}$ \\
		\> n,r := 0,0 \\
		\> $\{P: r=(Max.p.q : 0\leq p\leq q\leq n : sum.p.q) \wedge 0\leq n\leq N \wedge
			u=(Max.p : 0\leq p\leq n : sum.p.n)\}$ \\
		\> $[sum.p.q = (\sum i: p\leq i<q:A.i)]$ \\
		\> {\bf do}\= \\
		\> \>	$\Box$ \= smtg. \kill
		\> \>	\> n$\neq$N $\rightarrow$ \= u := (A.n+u) max 0 \\
		\> \>	\> 			\> r := r max u \\
		\> \>	\> 			\> n := n+1 \\
		\> {\bf od} \\
		\> $\{Q: r=(Max.p.q : 0\leq p\leq q\leq N : sum.p.q) \}$ \\
		\> $[sum.p.q = (\sum i: p\leq i<q:A.i)]$ \\
		]
	\end{tabbing}
	\end{center}
	\end{small}
	}	



\paragraph{5 - Divisi\'on Entera Mejorada (p.138)}
	\Prog{
	\begin{small}
	\begin{center}
	\begin{tabbing}
		[ \= var x,y,q,r,d,dd: Int \\
		\> $\{R: x\geq 0 \wedge y\geq 0\}$ \\
		\> q,r := 0,x \\
		\> $\{Q: x=q\times y+r \wedge 0\leq r\}$ \\
		\> {\bf do}\= \\
		\> \>	$\Box$ \= smtg. \kill
		\> \>	\> r$\geq$y $\rightarrow$ \= d,dd := 1,y \\
		\> \>	\> 			\> {\bf do} \= \\
		\> \>	\> 			\> 	\> r$\geq 2\times$dd $\rightarrow$ \= d,dd := $2\times$d,$2\times$dd \\
		\> \>	\> 			\> {\bf od} \\
		\> \>	\> 			\> q,r := q+d,r-dd \\
		\> {\bf od} \\
		\> $\{Q: x=q\times y+r \wedge 0\leq r \wedge r<y\}$ \\
		]
	\end{tabbing}
	\end{center}
	\end{small}
	}	


\end{document}
