\input cwebmac
% Zé Augusto 8/98

\documentclass[language=brazil,structure=flat]{cweb}

%% Escrevendo em português:
\usepackage[brazil]{babel}
\usepackage[T1]{fontenc}
%----------------------------

\setlength{\topmargin}{-0.5in}
\setlength{\textheight}{9in}
\setlength{\oddsidemargin}{-.125in}
\setlength{\evensidemargin}{-.125in}
\setlength{\textwidth}{6.75in}

\title{Ordenação por Seleção}
\author{Zé Augusto}
\date{São Paulo, \today}

\begin{document}

\maketitle

\tableofcontents


\N{2}{1}Um exemplo bem simples de \texttt{CWEB} usando \LaTeX.
Aqui está implementado o algoritmo de ordenação por seleção que recebe
como entrada um inteiro positivo \PB{\|n} seguido por \PB{\|n} inteiros.
Como saída, o programa imprime os inteiros lidos em ordem crescente.

\fi

\N{3}{2}Estrutura geral do programa.
Vamos descrever a estrutura geral do programa.

\Y\B\X3:Arquivos a serem incluídos\X\6
\X4:Programa Principal\X\par
\fi

\M{3}Precisamos incluir as definições padrões de I/O.

\Y\B\4\X3:Arquivos a serem incluídos\X${}\E{}$\6
\8\#\&{include} \.{<stdio.h>}\par
\U2.\fi

\N{3}{4}Definição do programa principal.

\Y\B\4\X4:Programa Principal\X${}\E{}$\6
\&{int} \\{main}(\,)\1\1\2\2\6
${}\{{}$\5
\1\X6:Variáveis locais de \PB{\\{main}}\X\6
\X5:leitura dos dados de entrada\X\6
\X7:Ordenação propriamente dita\X\6
\X10:Impressão do vetor ordenado\X\&{return} \T{0};\6
\4${}\}{}$\2\par
\U2.\fi

\M{5}Vamos fazer a leitura dos dados de entrada. Estes serão digitados
pelo usuário.

\Y\B\4\X5:leitura dos dados de entrada\X${}\E{}$\6
\\{printf}(\.{"Entre\ com\ a\ quantid}\)\.{ade\ de\ inteiros\ a\ se}\)\.{rem\
ordenados:\ "});\6
${}\\{scanf}(\.{"\%d"},\39{\AND}\|n);{}$\6
${}\\{printf}(\.{"Entre\ com\ os\ \%d\ int}\)\.{eiros\ a\ serem\ ordena}\)%
\.{dos:\ "},\39\|n);{}$\6
\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\|n;{}$ ${}\|i\PP){}$\1\5
${}\\{scanf}(\.{"\%d"},\39{\AND}\|v[\|i]){}$;\2\par
\U4.\fi

\M{6}Acho melhor definir as variáveis locais que usamos, antes que eu me
esqueça. Vamos definir também uma constante \PB{\.{MAX}} que limitará o
tamanho máximo do vetor a ser ordenado.

\Y\B\4\D$\.{MAX}$ \5
\T{100}\par
\Y\B\4\X6:Variáveis locais de \PB{\\{main}}\X${}\E{}$\6
\&{int} \|n${},{}$ \|i${},{}$ \|v[\.{MAX}];\par
\A9.
\U4.\fi

\M{7}A ordenação consiste em se encontrar o índice do maior elemento do
vetor, dentre os elementos com índices de \PB{\T{0}} até \PB{\|m}.
Inicialmente,
\PB{$\|m\K\|n-\T{1}$}. Esse elemento é colocado na posição \PB{\|m} e, então, %
\PB{\|m} é
decrementado de \PB{\T{1}}.

\Y\B\4\X7:Ordenação propriamente dita\X${}\E{}$\6
\&{for} ${}(\|m\K\|n-\T{1};{}$ ${}\|m>\T{0};{}$ ${}\|m\MM){}$\5
${}\{{}$\1\6
\X8:Encontre o índice \PB{\\{maior}} do maior elemento em \PB{\|v[\T{0..}\|m]}%
\X\6
\\{aux}${}\K\|v[\\{maior}];{}$\6
${}\|v[\\{maior}]\K\|v[\|m];{}$\6
${}\|v[\|m]\K\\{aux};{}$\6
\4${}\}{}$\2\par
\U4.\fi

\M{8}\B\X8:Encontre o índice \PB{\\{maior}} do maior elemento em \PB{\|v[%
\T{0..}\|m]}\X${}\E{}$\6
$\\{maior}\K\T{0};{}$\6
\&{for} ${}(\|i\K\T{1};{}$ ${}\|i\Z\|m;{}$ ${}\|i\PP){}$\1\6
\&{if} ${}(\|v[\|i]>\|v[\\{maior}]){}$\1\5
${}\\{maior}\K\|i{}$;\2\2\par
\U7.\fi

\M{9}Opa. Acabamos usando mais variáveis locais. Precisamos defini-las.

\Y\B\4\X6:Variáveis locais de \PB{\\{main}}\X${}\mathrel+\E{}$\6
\&{int} \\{maior}${},{}$ \\{aux}${},{}$ \|m;\par
\fi

\M{10}Por último, a impressão do vetor ordenado.
\Y\B\4\X10:Impressão do vetor ordenado\X${}\E{}$\6
\\{printf}(\.{"Impressão\ do\ vetor\ }\)\.{ordenado:\ "});\6
\&{for} ${}(\|i\K\T{0};{}$ ${}\|i<\|n;{}$ ${}\|i\PP){}$\1\5
${}\\{printf}(\.{"\%d\ "},\39\|v[\|i]);{}$\2\6
\\{printf}(\.{"\\n"});\par
\U4.\fi

\M{11}

\cwebIndexIntro{%
Aqui vai uma lista de identificadores usados e onde eles aparecem.
Entradas grifadas indicam os lugares de definições. Mensagens de erros
também são mostradas.
}

\end{document}
\fi

\inx
\fin
\con
