<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>GilgaLab</title>
	<atom:link href="http://www.gilgalab.com.br/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.gilgalab.com.br</link>
	<description></description>
	<lastBuildDate>Sat, 19 Sep 2009 17:23:37 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Radix Sort</title>
		<link>http://www.gilgalab.com.br/2009/09/19/radix-sort/</link>
		<comments>http://www.gilgalab.com.br/2009/09/19/radix-sort/#comments</comments>
		<pubDate>Sat, 19 Sep 2009 17:05:44 +0000</pubDate>
		<dc:creator>Henrique</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[radix]]></category>
		<category><![CDATA[sort]]></category>

		<guid isPermaLink="false">http://www.gilgalab.com.br/?p=59</guid>
		<description><![CDATA[Estive lendo sobre alguns algoritmos de organização e me deparei com o Radix Sort.
Pela definição da NIST:

Definition: A multiple pass distribution sort algorithm that distributes each item to a bucket according to part of the item's key beginning with the least significant part of the key. After each pass, items are collected from the buckets, [...]]]></description>
			<content:encoded><![CDATA[<p>Estive lendo sobre alguns algoritmos de organização e me deparei com o Radix Sort.<br />
Pela definição da NIST:</p>
<p><quote><br />
<b>Definition:</b> A multiple pass distribution sort algorithm that distributes each item to a bucket according to part of the item's key beginning with the least significant part of the key. After each pass, items are collected from the buckets, keeping the items in order, then redistributed according to the next most significant part of the key.<br />
</quote></p>
<p>Tradução livre:<br />
<b>Definição:</b> Um algorítmo de organização de vários passos que distribui cada item para um bucket de acordo com parte da chave do item, começando pela parte menos significativa da chave. Após cada passo, os items são recolhidos dos buckets, mantendo os itens em ordem e então redistribuindo de acordo com a próxima parte mais significativa da chave.</p>
<p>Pelas leituras que fiz por aí, um método que me pareceu bastante interessante é aplicar esse algorítmo a cada bit da nossa informação. É claro que isso vai depender da aplicação do algorítmo. No caso que irei trabalhar aqui, estaremos ordenando um vetor com números inteiros positivos.</p>
<p>Vamos supor o seguinte array:</p>
<p>int vetor = {12,22,13,16,31}</p>
<p>Descrevendo cada um desses valores em binário:<br />
12 - 01100<br />
22 - 10110<br />
13 - 01101<br />
16 - 10000<br />
31 - 11111</p>
<p>Pela descrição do algorítmo e pelo método adotado, devemos começar organizando nossa informação pelo bit menos significativo de cada um dos números em nosso array, ou seja, pegamos o bit mais a direita do array e distribuímos os valores em 2 buckets. O bucket onde o bit que estamos olhando é 0 ou ou bucket onde o bit que estamos olhando é 1. Ilustrando isso, temos:</p>
<p>0110<b style="text-weight: bolder; color:red;">0</b> - 12<br />
1011<b style="text-weight: bolder; color:red;">0</b> - 22<br />
0110<b style="text-weight: bolder; color:red;">1</b> - 13<br />
1000<b style="text-weight: bolder; color:red;">0</b> - 16<br />
1111<b style="text-weight: bolder; color:red;">1</b> - 31</p>
<p>Começamos olhando para os bits que estão em negrito. Quando encontrarmos um bit 0, jogamos aquele número para o bucket0. Quando encontrarmos um bit 1, jogamos aquele número para o bucket1. Nossos buckets estão dessa forma agora então:</p>
<p>bucket0 = {12, 22, 16}<br />
bucket1 = {13, 31}</p>
<p>Agora nós devolvemos os valores para dentro do nosso vetor na ordem em que se encontram dentro dos bukets. Primeiro colocamos dentro do vetor todos os valores do bucket0 e depois todos os valores do bucket1. Nosso vetor ficará da seguinte maneira:</p>
<p>vetor = {12, 22, 16, 13, 31}</p>
<p>Agora nós repetimos o processo para o nosso novo vetor, utilizando o próximo bit mais significativo.</p>
<p>011<b style="text-weight: bolder; color:red;">0</b>0 - 12<br />
101<b style="text-weight: bolder; color:red;">1</b>0 - 22<br />
100<b style="text-weight: bolder; color:red;">0</b>0 - 16<br />
011<b style="text-weight: bolder; color:red;">0</b>1 - 13<br />
111<b style="text-weight: bolder; color:red;">1</b>1 - 31</p>
<p>Nossos buckets ficam:</p>
<p>bucket0 = {12, 16, 13}<br />
bucket1 = {22, 31}</p>
<p>Nosso novo vetor:</p>
<p>vetor = {12, 16, 13, 22, 31}</p>
<p>Repetimos o processo para o próximo bit mais significativo em nosso novo vetor:</p>
<p>01<b style="text-weight: bolder; color:red;">1</b>00 - 12<br />
10<b style="text-weight: bolder; color:red;">0</b>00 - 16<br />
01<b style="text-weight: bolder; color:red;">1</b>01 - 13<br />
11<b style="text-weight: bolder; color:red;">0</b>10 - 22<br />
11<b style="text-weight: bolder; color:red;">1</b>11 - 31</p>
<p>Nossos buckets ficam:</p>
<p>bucket0 = {16, 22}<br />
bucket1 = {12, 13, 31}</p>
<p>Nosso novo vetor:</p>
<p>vetor = {16, 22, 12, 13, 31}</p>
<p>Repetimos o processo para o próximo bit mais significativo em nosso novo vetor:</p>
<p>1<b style="text-weight: bolder; color:red;">0</b>000 - 16<br />
1<b style="text-weight: bolder; color:red;">1</b>010 - 22<br />
0<b style="text-weight: bolder; color:red;">1</b>100 - 12<br />
0<b style="text-weight: bolder; color:red;">1</b>101 - 13<br />
1<b style="text-weight: bolder; color:red;">1</b>111 - 31</p>
<p>Nossos buckets ficam:</p>
<p>bucket0 = {16}<br />
bucket1 = {22, 12, 13, 31}</p>
<p>Nosso novo vetor:</p>
<p>vetor = {16,22,12,13,31}</p>
<p>Até então não parece nada arrumado não é mesmo? Mas o útimo passo vai nos revelar algo fantástico! :D</p>
<p>Repetimos o processo para o próximo bit mais significativo em nosso novo vetor:</p>
<p><b style="text-weight: bolder; color:red;">1</b>0000 - 16<br />
<b style="text-weight: bolder; color:red;">1</b>1010 - 22<br />
<b style="text-weight: bolder; color:red;">0</b>1100 - 12<br />
<b style="text-weight: bolder; color:red;">0</b>1101 - 13<br />
<b style="text-weight: bolder; color:red;">1</b>1111 - 31</p>
<p>Nossos buckets ficam:</p>
<p>bucket0 = {12, 13}<br />
bucket1 = {16, 22, 31}</p>
<p>Nosso novo (e último) vetor:</p>
<p>vetor = {12, 13, 16, 22, 31}</p>
<p>Aha! Fantástico!</p>
<p>O mais interessante disso tudo é a velocidade desse algorítmo. Em alguns testes que fiz aqui, consegui organizar 20 milhoes de números em apenas 9,3 segundos!<br />
Irei demonstrar a seguir uma versão um pouco mais lenta do algorítmo que desenvolvi porém de mais fácil entendimento. Logo após irei demonstrar a versão do mesmo algorítmo que foi capaz de organizar 100 milhões de números em 15,56 segundos.</p>
<p><b>O algorítmo 'simples'</b></p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339933;">#include &lt;time.h&gt;</span>
&nbsp;
<span style="color: #993333;">typedef</span> <span style="color: #993333;">struct</span> lista <span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> num<span style="color: #339933;">;</span>
    <span style="color: #993333;">struct</span> lista <span style="color: #339933;">*</span>prox<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> lista<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> radix_sort<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*,</span> <span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> insere<span style="color: #009900;">&#40;</span>lista <span style="color: #339933;">**,</span> <span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">int</span> pop<span style="color: #009900;">&#40;</span>lista <span style="color: #339933;">**</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> imprime<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span>vetor<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> tamanho <span style="color: #339933;">=</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> vetor<span style="color: #009900;">&#91;</span>tamanho<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
&nbsp;
    srand<span style="color: #009900;">&#40;</span>time<span style="color: #009900;">&#40;</span>NULL<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> tamanho<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> rand<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> tamanho<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    imprime<span style="color: #009900;">&#40;</span>vetor<span style="color: #339933;">,</span> tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    radix_sort<span style="color: #009900;">&#40;</span>vetor<span style="color: #339933;">,</span> tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    imprime<span style="color: #009900;">&#40;</span>vetor<span style="color: #339933;">,</span> tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> insere<span style="color: #009900;">&#40;</span>lista <span style="color: #339933;">**</span>l<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> valor<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    lista <span style="color: #339933;">*</span>aux <span style="color: #339933;">=</span> <span style="color: #339933;">*</span>l<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>l <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #339933;">*</span>l <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>lista <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>lista<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>l<span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>num <span style="color: #339933;">=</span> valor<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>l<span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>prox <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>aux<span style="color: #339933;">-&gt;</span>prox <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span> aux <span style="color: #339933;">=</span> aux<span style="color: #339933;">-&gt;</span>prox<span style="color: #339933;">;</span>
        aux<span style="color: #339933;">-&gt;</span>prox <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>lista <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>lista<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        aux <span style="color: #339933;">=</span> aux<span style="color: #339933;">-&gt;</span>prox<span style="color: #339933;">;</span>
        aux<span style="color: #339933;">-&gt;</span>num <span style="color: #339933;">=</span> valor<span style="color: #339933;">;</span>
        aux<span style="color: #339933;">-&gt;</span>prox <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> pop<span style="color: #009900;">&#40;</span>lista <span style="color: #339933;">**</span>l<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> ret<span style="color: #339933;">;</span>
    lista <span style="color: #339933;">*</span>aux<span style="color: #339933;">;</span>
&nbsp;
    ret <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>l<span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>num<span style="color: #339933;">;</span>
    aux <span style="color: #339933;">=</span> <span style="color: #339933;">*</span>l<span style="color: #339933;">;</span>
    <span style="color: #339933;">*</span>l <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>l<span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span>prox<span style="color: #339933;">;</span>
    free<span style="color: #009900;">&#40;</span>aux<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> ret<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> radix_sort<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span>vetor<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> tamanho<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
&nbsp;
    lista <span style="color: #339933;">*</span>bucket0 <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
    lista <span style="color: #339933;">*</span>bucket1 <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> i<span style="color: #339933;">,</span> j<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> numero_bits<span style="color: #339933;">;</span>
&nbsp;
    numero_bits <span style="color: #339933;">=</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> numero_bits<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>j <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> tamanho<span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;&gt;</span> i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0xf</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
                insere<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>bucket0<span style="color: #339933;">,</span> vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">else</span>
                insere<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>bucket1<span style="color: #339933;">,</span> vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        j <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>bucket0 <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> pop<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>bucket0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            j<span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
        <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>bucket1 <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> pop<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>bucket1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            j<span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> imprime<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span>vetor<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> tamanho<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> tamanho<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d &quot;</span><span style="color: #339933;">,</span> vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><a href="wp-content/uploads/2009/09/radix.c" target="_blank">[radix.c]</a></p>
<p>Essa é a versão 'simples' do algorítmo. Ele utiliza listas para ficar mais simples a inserção e remoção dos registros de nossos buckets. O problema com isso é que conforme aumentamos a quantidade de elementos que queremos organizar o programa fica mais lento. A verdadeira função de ordenação aqui é a função 'radix_sort'. As outras funções fazem parte da implementação da lista.<br />
Vamos então dar uma olhada no programa.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">...
    <span style="color: #993333;">int</span> tamanho <span style="color: #339933;">=</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> vetor<span style="color: #009900;">&#91;</span>tamanho<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
&nbsp;
    srand<span style="color: #009900;">&#40;</span>time<span style="color: #009900;">&#40;</span>NULL<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> tamanho<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> rand<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> tamanho<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
...</pre></div></div>

<p>Simplesmente declaramos um array com 20 posições e colocamos números randomicos nele que vão de 0 a 19. Esse é o vetor que desejamos ordenar.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> radix_sort<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span>vetor<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> tamanho<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
&nbsp;
    lista <span style="color: #339933;">*</span>bucket0 <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
    lista <span style="color: #339933;">*</span>bucket1 <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> i<span style="color: #339933;">,</span> j<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> numero_bits<span style="color: #339933;">;</span>
&nbsp;
    numero_bits <span style="color: #339933;">=</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">*</span> <span style="color: #0000dd;">8</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> numero_bits<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// Primeiro loop</span>
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>j <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> tamanho<span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// Segundo loop</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;&gt;</span> i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0xf</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span>
                insere<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>bucket0<span style="color: #339933;">,</span> vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">else</span>
                insere<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>bucket1<span style="color: #339933;">,</span> vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        j <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>bucket0 <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> pop<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>bucket0<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            j<span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
        <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>bucket1 <span style="color: #339933;">!=</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> pop<span style="color: #009900;">&#40;</span><span style="color: #339933;">&amp;</span>bucket1<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            j<span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Como na explicação sobre o algorítmo, estou usando aqui 2 buckets e o vetor com os dados. O bucket0 recebe os números cujo bit atual sendo verificado é 0, e o bucket 1 recebe os números cujo bit atual sendo verificado é 1.<br />
A variável 'numero_bits' se refere a quantos bits nós iremos verificar para realizar a ordenação. No caso como estamos organizando números inteiros, em teoria (mais tarde discutirei uma maneira melhor de determinar esse número) faz sentido percorremos todos os bits do mesmo. sizeof(int) retorna o número de bytes de um int, se multiplicamos esse valor por 8 temos o número de bits.<br />
O primeiro loop se refere a qual bit estamos olhando e o segundo loop passa por cada elemento para determinar se o bit é 0 ou 1 e jogar o número em seu respectivo bucket.<br />
Acredito que a linha que mais chama a atenção aqui é a linha 13. Vamos a explicação então! Imagine que estou trabalhando com um número de 4 bits apenas que se encontra em vetor[0]. O que essa linha faz é pegar o número inteiro e fazer uma lógica AND com o valor 0xf (eu poderia ter usado 0x1). Suponhamos que o numero no nosso vetor é 4. Então a lógica fica assim:</p>
<p>Deslocar o valor dentro de vetor[0] para a direita em 0 bits (primeira interação).<br />
Em hexa: 0x4 &#038; 0xf<br />
Em binario: 010<b style="text-weight: bolder; color:red;">0</b> &#038; 111<b style="text-weight: bolder; color:red;">1</b><br />
Resultado: 0100</p>
<p>Deslocar o valor dentro de vetor[0] para a direita em 1 bit (segunda interação).<br />
Em hexa: 0x2 &#038; 0xf<br />
Em binario: 001<b style="text-weight: bolder; color:red;">0</b> &#038; 111<b style="text-weight: bolder; color:red;">1</b><br />
Resultado: 0010</p>
<p>Deslocar o valor dentro de vetor[0] para a direita em 2 bits (terceira interação).<br />
Em hexa: 0x1 &#038; 0xf<br />
Em binario: 000<b style="text-weight: bolder; color:red;">1</b> &#038; 111<b style="text-weight: bolder; color:red;">1</b><br />
Resultado: 0001</p>
<p>Deslocar o valor dentro de vetor[0] para a direita em 3 bits (quarta interação).<br />
Em hexa: 0x0 &#038; 0xf<br />
Em binario: 000<b style="text-weight: bolder; color:red;">0</b> &#038; 111<b style="text-weight: bolder; color:red;">1</b><br />
Resultado: 0000</p>
<p>O que nos interessa aqui é o bit menos significativo, ou seja, o bit mais a direita. Quando realizamos essa lógica AND, o último bit será 0 ou 1. Se o último bit for 0, temos um número par e então o número deve ser colocado no bucket0. Se o último bit for 1, temos um número ímpar e então o número deve ser colocado no bucket1. O deslocamento que fazemos para a direita é apenas para colocar o bit que desejamos verificar na posição menos significativa do número para que possamos saber se ele deve ir ao bucket0 ou ao bucket1.<br />
A lógica que segue é apenas referente a 'remontar' o vetor com todos os valores que estão no bucket0 e depois todos os valores que estão no bucket1.</p>
<p><b>O algorítmo um pouco menos simples</b></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339933;">#include &lt;time.h&gt;</span>
<span style="color: #339933;">#include &lt;math.h&gt;</span>
&nbsp;
<span style="color: #993333;">void</span> radix_sort<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*,</span> <span style="color: #993333;">int</span><span style="color: #339933;">,</span> <span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> imprime<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span>vetor<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> tamanho <span style="color: #339933;">=</span> <span style="color: #0000dd;">20</span><span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> <span style="color: #339933;">*</span>vetor<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> maior <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    clock_t inicio<span style="color: #339933;">,</span> fim<span style="color: #339933;">;</span>
    <span style="color: #993333;">float</span> periodo<span style="color: #339933;">;</span>
&nbsp;
    vetor <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    srand<span style="color: #009900;">&#40;</span>time<span style="color: #009900;">&#40;</span>NULL<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> tamanho<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>rand<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> maior<span style="color: #009900;">&#41;</span>
            maior <span style="color: #339933;">=</span> vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    imprime<span style="color: #009900;">&#40;</span>vetor<span style="color: #339933;">,</span> tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    inicio <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    radix_sort<span style="color: #009900;">&#40;</span>vetor<span style="color: #339933;">,</span> tamanho<span style="color: #339933;">,</span> maior<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    fim <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    periodo <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">float</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">float</span><span style="color: #009900;">&#41;</span>fim<span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">float</span><span style="color: #009900;">&#41;</span>inicio<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>CLOCKS_PER_SEC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Tempo: %.15f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> periodo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    imprime<span style="color: #009900;">&#40;</span>vetor<span style="color: #339933;">,</span> tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> radix_sort<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span>vetor<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> tamanho<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> maior<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #993333;">int</span> i<span style="color: #339933;">,</span> j<span style="color: #339933;">,</span> k<span style="color: #339933;">,</span> l<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> numero_bits<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #993333;">int</span> <span style="color: #339933;">**</span>temp<span style="color: #339933;">;</span>
&nbsp;
    temp <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">**</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    numero_bits <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>log<span style="color: #009900;">&#40;</span>maior<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>log<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> numero_bits<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        k <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        l <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>j <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> tamanho<span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;&gt;</span> i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0xf</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>k<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>l<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'0'</span><span style="color: #339933;">;</span>
        temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>l<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'0'</span><span style="color: #339933;">;</span>
&nbsp;
        j <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'0'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            j<span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        k<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'0'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            j<span style="color: #339933;">++;</span>
            k<span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> imprime<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span>vetor<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> tamanho<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> tamanho<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d &quot;</span><span style="color: #339933;">,</span> vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><a href="wp-content/uploads/2009/09/radix2.c" target="_blank">[radix2.c]</a></p>
<p>Considerações:</p>
<ul>
<li>Essa implementação do algorítmo é apenas para números maiores que 0</li>
<li>Para compilar com o gcc nçao esqueça de compilar o código com -lm para a biblioteca math</li>
</ul>
<p>As chamadas feitas para a função clock() antes e depois da chamada de radix_sort() são para que possamos visualizar quanto tempo a execução do algorítmo levou.<br />
A primeira pequena diferença que vemos nesse código é na linha 12, onde agora declaramos nossa variável vetor como um ponteiro para que possamos alocar o espaço necessário para ela em runtime. Isso se faz necessário pois quando executarmos o programa para organizar 20 milhões de registros, não seria possível alocar o espaço necessário na stack.<br />
A segunda pequena diferença que vemos nesse código está na linha 22, onde garantimos que o número sorteado é no mínimo 1.<br />
A terceira pequena diferença é que agora nós já identificamos qual é o maior número do nosso vetor. Isso será útil mais a frente.<br />
As grandes diferenças começam dentro da função radix_sort().<br />
A primeira coisa para se notar é que não usamos mais listas. Inserir e retirar items de um array é mais rápido, logo é isso que usaremos. Nosso bucket agora é a variável temp; temp[0] é o bucket0 e temp[1] é o bucket1.<br />
A segunda coisa a se notar é a forma de como calculamos o numero de bits. Essa linha é de extrema imoprtância pois ela reflete diretamente na perfomance do algorítmo. Suponha que estamos trabalhando em uma plataforma onde a variável int tem 32 bits. Suponha também que o maior número que se encontra em nosso array é o número 230.<br />
Vamos representar então o número 230 em binário:<br />
000000000000000000000000<b style="text-weight: bolder; color:red;">11100110</b></p>
<p>São 32 bits, apenas 8 bits significativos e 24 bits não significativos. A partir do momento que organizamos os números usando todos os bits significativos é inútil que façamos a verificação para os dígitos não significativos pois eles irão sempre ser colocados no bucket0 e sempre na mesma ordem.<br />
Para entender o cálculo utilizado, precisamos lembrar um pouco da matemática da escola.<br />
2^x = 16<br />
Quanto vale x?<br />
log(base 2) de 16 = x<br />
x = 4</p>
<p>Ou seja, para representarmos 16 números precisamos de 4 bits. Sabemos que o a contagem para os números binários começa em 0, logo com esses 4 bits podemos contar de 0 a 15. Para que o número 16 fosse considerado precisamos adicionar mais 1 bit.<br />
Logo, para representar o número 16 temos: (log(base 2) de 16)+1<br />
Como em C não temos uma forma de calcular log em base 2. nós usamos uma propriedade matemática que diz:</p>
<p>log em base x de y = (log y) / (log x)<br />
Para os que não se lembram log sem menção de base é log em base 10.</p>
<p>Voltando então ao nosso exemplo do número 230. Se calcularmos:<br />
log(base 2) de 230 = x<br />
x = 7,85</p>
<p>Não há possibilidade de termos 0.85 bit. Em C variáveis int se arredondam pra baixo. Logo em nosso caso x vale 7.<br />
2^7 = 128<br />
Não é o suficiente, e matemáticamente falando 7,85 seria arredondado de fato para 8. É por essa razão que somamos 1.<br />
2^8 = 256<br />
Agora sim temos espaço o bastante para o valor 230.</p>
<p>Caso não tenha ficado muito clara a explicação, tente ler novamente e se precisar relembre um pouco de logarítmos. Tenho certeza que ficará mais claro.</p>
<p>O resto da lógica que segue é basicamente o mesmo. Como precisamos de uma forma de identificar quando os números de nosso bucket acabaram, eu optei por dizer que o último número do bucket é 0. É por essa razão que o esse algorítmo só é capaz de organizar números maiores que 0.<br />
Todo o resto é basicamente o mesmo já apresentado antes.</p>
<p><b>Observações</b><br />
Se você testou esses algorítmos deve ter percebido que são bastante rápidos. Eu quis determinar o quão rápida essa segunda implementação apresentada é quando comparada ao quicksort e os resultados são impressionantes.</p>
<p>Eis então os algorítmos usados:</p>
<p><b>Quicksort</b></p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339933;">#include &lt;time.h&gt;</span>
<span style="color: #339933;">#include &lt;string.h&gt;</span>
&nbsp;
<span style="color: #993333;">void</span> quicksort<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> left<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> right<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> <span style="color: #339933;">*</span>v<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> swap<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> j<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> <span style="color: #339933;">**</span>v<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">**</span>argv<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #993333;">int</span> MAX<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>argc <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Use: %s numero<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	MAX<span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> <span style="color: #339933;">*</span>vetor<span style="color: #339933;">;</span>
    clock_t inicio<span style="color: #339933;">,</span> fim<span style="color: #339933;">;</span>
    <span style="color: #993333;">float</span> periodo<span style="color: #339933;">;</span>
&nbsp;
	vetor <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>MAX<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	srand<span style="color: #009900;">&#40;</span>time<span style="color: #009900;">&#40;</span>NULL<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> MAX<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> rand<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> MAX<span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	inicio <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
	quicksort<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">0</span><span style="color: #339933;">,</span> MAX<span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">,</span> vetor<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	fim <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    periodo <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">float</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">float</span><span style="color: #009900;">&#41;</span>fim<span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">float</span><span style="color: #009900;">&#41;</span>inicio<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>CLOCKS_PER_SEC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Tempo: %.15f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> periodo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> quicksort<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> left<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> right<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> <span style="color: #339933;">*</span>v<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> pivot <span style="color: #339933;">=</span> v<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#40;</span>left<span style="color: #339933;">+</span>right<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> i <span style="color: #339933;">=</span> left<span style="color: #339933;">;</span>
	<span style="color: #993333;">int</span> j <span style="color: #339933;">=</span> right<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> left <span style="color: #339933;">&lt;</span> right <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
&nbsp;
		<span style="color: #b1b100;">do</span> <span style="color: #009900;">&#123;</span>
&nbsp;
			<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>v<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&lt;</span> pivot<span style="color: #009900;">&#41;</span> i<span style="color: #339933;">++;</span>
			<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>v<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> pivot<span style="color: #009900;">&#41;</span> j<span style="color: #339933;">--;</span>
&nbsp;
			<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> i <span style="color: #339933;">&lt;=</span> j <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				swap<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span> j<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>v<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				i<span style="color: #339933;">++;</span>
				j<span style="color: #339933;">--;</span>
			<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
		<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span> i <span style="color: #339933;">&lt;=</span> j <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		quicksort<span style="color: #009900;">&#40;</span>left<span style="color: #339933;">,</span> j<span style="color: #339933;">,</span> v<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		quicksort<span style="color: #009900;">&#40;</span>i<span style="color: #339933;">,</span> right<span style="color: #339933;">,</span> v<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> swap<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> i<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> j<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> <span style="color: #339933;">**</span>v<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
	<span style="color: #993333;">int</span> aux<span style="color: #339933;">;</span>
&nbsp;
	aux <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>v<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>v<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>v<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span>v<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> aux<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><b>Radixsort</b></p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &lt;stdio.h&gt;</span>
<span style="color: #339933;">#include &lt;stdlib.h&gt;</span>
<span style="color: #339933;">#include &lt;time.h&gt;</span>
<span style="color: #339933;">#include &lt;math.h&gt;</span>
&nbsp;
<span style="color: #993333;">void</span> radix_sort<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*,</span> <span style="color: #993333;">int</span><span style="color: #339933;">,</span> <span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #993333;">void</span> imprime<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span>vetor<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> argc<span style="color: #339933;">,</span> <span style="color: #993333;">char</span> <span style="color: #339933;">**</span>argv<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> tamanho<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> <span style="color: #339933;">*</span>vetor<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> maior <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
    clock_t inicio<span style="color: #339933;">,</span> fim<span style="color: #339933;">;</span>
    <span style="color: #993333;">float</span> periodo<span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>argc <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Use: %s numero<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #b1b100;">return</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	tamanho <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span>argv<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    vetor <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    srand<span style="color: #009900;">&#40;</span>time<span style="color: #009900;">&#40;</span>NULL<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> tamanho<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>rand<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;</span> maior<span style="color: #009900;">&#41;</span>
            maior <span style="color: #339933;">=</span> vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//imprime(vetor, tamanho);</span>
    <span style="color: #666666; font-style: italic;">//printf(&quot;\n&quot;);</span>
&nbsp;
    inicio <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    radix_sort<span style="color: #009900;">&#40;</span>vetor<span style="color: #339933;">,</span> tamanho<span style="color: #339933;">,</span> maior<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    fim <span style="color: #339933;">=</span> clock<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    periodo <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">float</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">float</span><span style="color: #009900;">&#41;</span>fim<span style="color: #339933;">-</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">float</span><span style="color: #009900;">&#41;</span>inicio<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>CLOCKS_PER_SEC<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Tempo: %.15f<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> periodo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">//imprime(vetor, tamanho);</span>
    <span style="color: #666666; font-style: italic;">//printf(&quot;\n&quot;);</span>
&nbsp;
    <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> radix_sort<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span>vetor<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> tamanho<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> maior<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #993333;">int</span> i<span style="color: #339933;">,</span> j<span style="color: #339933;">,</span> k<span style="color: #339933;">,</span> l<span style="color: #339933;">;</span>
    <span style="color: #993333;">int</span> numero_bits<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #993333;">int</span> <span style="color: #339933;">**</span>temp<span style="color: #339933;">;</span>
&nbsp;
    temp <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">**</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">*</span>tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    numero_bits <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>log<span style="color: #009900;">&#40;</span>maior<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span>log<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> numero_bits<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        k <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        l <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>j <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> j <span style="color: #339933;">&lt;</span> tamanho<span style="color: #339933;">;</span> j<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">&gt;&gt;</span> i<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0xf</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>k<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>l<span style="color: #339933;">++</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'0'</span><span style="color: #339933;">;</span>
        temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>l<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">'0'</span><span style="color: #339933;">;</span>
&nbsp;
        j <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'0'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            j<span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        k<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span>temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span> <span style="color: #339933;">!=</span> <span style="color: #ff0000;">'0'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            vetor<span style="color: #009900;">&#91;</span>j<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> temp<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span>k<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
            j<span style="color: #339933;">++;</span>
            k<span style="color: #339933;">++;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> imprime<span style="color: #009900;">&#40;</span><span style="color: #993333;">int</span> <span style="color: #339933;">*</span>vetor<span style="color: #339933;">,</span> <span style="color: #993333;">int</span> tamanho<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
    <span style="color: #993333;">int</span> i<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> tamanho<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
        <span style="color: #000066;">printf</span><span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;%d &quot;</span><span style="color: #339933;">,</span> vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><a href="wp-content/uploads/2009/09/radixsort.c" target="_blank">[Radixsort]</a><br />
<a href="wp-content/uploads/2009/09/quick.c" target="_blank">[Quicksort]</a></p>
<p>Dados da máquina onde o teste foi feito:</p>
<p>$ uname -a<br />
Linux myhost 2.6.30-ARCH #1 SMP PREEMPT Mon Aug 17 16:06:45 CEST 2009 x86_64 Intel(R) Core(TM)2 Duo CPU E7400 @ 2.80GHz GenuineIntel GNU/Linux<br />
4GB Ram DDR2 800MHz</p>
<p>Eis então uma tabela comparativa do tempo de execução dos algorítmos para quando o maior valor que pode existir dentro do vetor é o próprio tamanho do vetor.<br />
O tempo é dado em segundos</p>
<table>
<tr>
<td><b>Numero elementos</b></td>
<td><b>Radix Sort (s)</b></td>
<td><b>Quick Sort (s)</b></td>
</tr>
<tr>
<td>10</td>
<td>0.000000000000000</td>
<td>0.000000000000000</td>
</tr>
<tr>
<td>1000</td>
<td>0.000000000000000</td>
<td>0.000000000000000</td>
</tr>
<tr>
<td>100 mil</td>
<td>0.019999999552965</td>
<td>0.009999999776483</td>
</tr>
<tr>
<td>1 milhão</td>
<td>0.310000002384186</td>
<td>0.219999998807907</td>
</tr>
<tr>
<td>10 milhões</td>
<td>3.759999990463257</td>
<td>2.549999952316284</td>
</tr>
<tr>
<td>100 milhões</td>
<td>42.380001068115234</td>
<td>28.530000686645508</td>
</tr>
</table>
<p>Ao que parece, quicksort vence em todos os testes.<br />
Agora façamos a seguinte alteração nos dois códigos:</p>
<p>No código do quicksort, trocamos</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">		vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> rand<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> MAX<span style="color: #339933;">;</span></pre></div></div>

<p>por</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">		vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> rand<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #0000dd;">1023</span><span style="color: #339933;">;</span></pre></div></div>

<p>No código do radixsort, trocamos</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">		vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>rand<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> tamanho<span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span></pre></div></div>

<p>por</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">		vetor<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>rand<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">%</span> <span style="color: #0000dd;">1022</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">+</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span></pre></div></div>

<p>Eis os novos resultados:</p>
<table>
<tr>
<td><b>Numero elementos</b></td>
<td><b>Radix Sort (s)</b></td>
<td><b>Quick Sort (s)</b></td>
</tr>
<tr>
<td>10</td>
<td>0.000000000000000</td>
<td>0.000000000000000</td>
</tr>
<tr>
<td>1000</td>
<td>0.000000000000000</td>
<td>0.000000000000000</td>
</tr>
<tr>
<td>100 mil</td>
<td>0.009999999776483</td>
<td>0.009999999776483</td>
</tr>
<tr>
<td>1 milhão</td>
<td>0.159999996423721</td>
<td>0.180000007152557</td>
</tr>
<tr>
<td>10 milhões</td>
<td>1.559999942779541</td>
<td>2.059999942779541</td>
</tr>
<tr>
<td>100 milhões</td>
<td>15.560000419616699</td>
<td>22.809999465942383</td>
</tr>
</table>
<p>O Radixsort vence todas as comparações!<br />
Logo, dependendo do tipo de dados que se deseja ordenar (caracteres por exemplo), o Radixsort pode ter uma performance superior a do Quicksort.</p>
<p>As implementações do Radixsort aqui apresentadas ainda podem ser otimizadas eu acredito, podendo apresentar uma performance ainda maior!</p>
<p><b>Referências</b></p>
<p><a href="http://www.itl.nist.gov/div897/sqg/dads/HTML/radixsort.html" target="_blank">http://www.itl.nist.gov/div897/sqg/dads/HTML/radixsort.html</a><br />
<a href="http://www.jimloy.com/computer/radix.htm" target="_blank">http://www.jimloy.com/computer/radix.htm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gilgalab.com.br/2009/09/19/radix-sort/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lancamento: Dive Into Python 3</title>
		<link>http://www.gilgalab.com.br/2009/09/18/lancamento-dive-into-python-3/</link>
		<comments>http://www.gilgalab.com.br/2009/09/18/lancamento-dive-into-python-3/#comments</comments>
		<pubDate>Fri, 18 Sep 2009 14:00:04 +0000</pubDate>
		<dc:creator>Henrique</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.gilgalab.com.br/?p=53</guid>
		<description><![CDATA[Hoje foi lançado o livro 'Dive Into Python 3' de Mark Pilgrim em formato digital . Ao que parece ele também será comercializado a partir de 16 de outubro.
Dei uma lida no primeiro capítulo do livro e me pareceu bom. O autor escreve de forma simples de se entender e começa mostrando código ao invés [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje foi lançado o livro 'Dive Into Python 3' de Mark Pilgrim em formato digital . Ao que parece ele também será comercializado a partir de 16 de outubro.<br />
Dei uma lida no primeiro capítulo do livro e me pareceu bom. O autor escreve de forma simples de se entender e começa mostrando código ao invés de gastar 75 páginas contando histórinha sobre a linguagem.</p>
<p>Link: <a href="http://diveintopython3.org/?dupe=withhonor">Dive Into Python 3</a></p>
<p>Fonte: <a href="http://www.dzone.com/links/dive_into_python_3_2.html">Dzone</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gilgalab.com.br/2009/09/18/lancamento-dive-into-python-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Construindo um editor de texto com Java + Swing &#8211; Parte 1</title>
		<link>http://www.gilgalab.com.br/2009/09/13/construindo-um-editor-de-texto-com-java-swing-parte-1/</link>
		<comments>http://www.gilgalab.com.br/2009/09/13/construindo-um-editor-de-texto-com-java-swing-parte-1/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 22:54:54 +0000</pubDate>
		<dc:creator>Henrique</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[swing gui java]]></category>

		<guid isPermaLink="false">http://localhost:8008/wordpress/?p=27</guid>
		<description><![CDATA[É, eu sei que faz tempo que não escrevo. Faltou paciência/tempo/paciência/inspiração/paciência e por ai vai...
Bom, estou de volta e atualmente brincando um pouco com Java para construir GUIs (Graphical User Interfaces). Num tutorial que terá sabe-se lá quantas partes vou abordar como criar um editor de texto simples em Java. Esse editor de texto se [...]]]></description>
			<content:encoded><![CDATA[<p>É, eu sei que faz tempo que não escrevo. Faltou paciência/tempo/paciência/inspiração/paciência e por ai vai...<br />
Bom, estou de volta e atualmente brincando um pouco com Java para construir GUIs (Graphical User Interfaces). Num tutorial que terá sabe-se lá quantas partes vou abordar como criar um editor de texto simples em Java. Esse editor de texto se propõe (pelo menos por enquanto) a possuir as seguintes funcionalidades:</p>
<ul>
<li>Edição de arquivos em abas</li>
<li>Salvar documentos</li>
<li>Copiar texto através de um menu</li>
<li>Colar texto através de um menu</li>
<li>Mostrar uma caixinha de "Sobre o Editor"</li>
</ul>
<p>É possível que conforme eu vá mexendo no editor e aprendendo truques novos eu adicione coisas novas.<br />
Nessa primeira parte do tutorial irei mostrar os seguintes conceitos:</p>
<ul>
<li>Como criar uma janela com Swing</li>
<li>Como adicionar componentes a janela</li>
<li>Como criar um menu para a janela</li>
<li>Como tratar eventos no seu menu</li>
<li>Como criar um painel com abas</li>
</ul>
<p>Wow! Não imaginei que eram tantos assuntos hehehe. Bom, a intenção aqui é de ser mais um guia e não uma referência completa. Conforme discuto cada assunto, colocarei informações básicas e links apontando para lugares onde pode-se obter maiores informações (basicamente para a Javadoc).<br />
Tendo escrito tanto, hora de ir para a parte interessante da coisa... a programação!</p>
<p><strong>Como criar uma janela com Swing</strong><br />
Rapidamente antes de começar, preciso dizer uma coisinha. Eu estou assumindo que você, leitor, tem ao menos um leve conhecimento de Java (sintaxe e um pouquinho de nada de orientação a objetos). Caso não tenha, pode seguir em frente, mas recomendo ler algum material falando um pouco sobre a linguagem.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JFrame</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> JanelaSimples <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JFrame</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> JanelaSimples<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setTitle</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Minha primeira janela&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setSize</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">640</span>,<span style="color: #cc66cc;">480</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setDefaultCloseOperation</span><span style="color: #009900;">&#40;</span>EXIT_ON_CLOSE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">new</span> JanelaSimples<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><a href="wp-content/uploads/2009/09/JanelaSimples.java" target="_blank">[JanelaSimples.java]</a></p>
<p>Para compilar:<br />
javac JanelaSimples.java</p>
<p>Para executar:<br />
java JanelaSimples</p>
<p>Não coloque a extensão .class ou .java quando for executar a aplicação pois não irá funcionar.</p>
<p>Deu pra ver que é uma janela bastante útil. Você consegue redimensionar, fechar e... e é isso :)<br />
Mesmo não servindo para muita coisa já deu um gostinho, então vamos as partes desse programa.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> JanelaSimples <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JFrame</span> <span style="color: #009900;">&#123;</span></pre></div></div>

<p>Aqui estamos criando a nossa classe JanelaSimples e herdando toda a funcionalidade de JFrame, que é a classe responsável pelos métodos que criam a nossa janela.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">public</span> JanelaSimples<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setTitle</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Minha primeira janela&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setSize</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">640</span>,<span style="color: #cc66cc;">480</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setDefaultCloseOperation</span><span style="color: #009900;">&#40;</span>EXIT_ON_CLOSE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Em primeiro lugar, todas os métodos que estão sendo invocados foram herdados da classe JFrame, e é por isso que eu os chamo com 'this.'.<br />
O que estes métodos estão fazendo? Na respectiva sequencia:<br />
Definindo o titulo da janela para "Minha primeira janela"<br />
Definindo o tamanho da janela para 640x480<br />
Definindo que a janela deve ser exibida<br />
Definindo que a operação padrão para quando você fechar a janela é a de que o programa deve terminar</p>
<p>Tudo muito simples.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">new</span> JanelaSimples<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Como esse é o nosso programa principal ele precisa de uma função main que serve de ponto de entrada para ele. Nossa função main simplesmente instancia a classe JanelaSimples. Quando a instancia é criada, o construtor (explicado logo acima) é chamado e a nossa janela se faz visível.</p>
<p><strong>Como adicionar componentes a janela</strong></p>
<p>Agora que já sabemos criar a janela, vamos adicionar uma caixa de texto a ela. Para isso, usaremos o mesmo código da JanelaSimples.java e adicionaremos alguns comandos no construtor da classe. O construtora ficará da seguinte maneira:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JFrame</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JTextPane</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> JanelaSimples <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JFrame</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> JanelaSimples<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003399;">JTextPane</span> texto <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JTextPane</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setTitle</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Minha primeira janela&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setSize</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">640</span>,<span style="color: #cc66cc;">480</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>texto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setDefaultCloseOperation</span><span style="color: #009900;">&#40;</span>EXIT_ON_CLOSE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">new</span> JanelaSimples<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><a href="wp-content/uploads/2009/09/JanelaSimples-2.java" target="_blank">[JanelaSimples-2.java]</a></p>
<p>Se quiser compilar este exemplo, renomeie o arquivo para JanelaSimples.java e use as instruções fornecidas acima.<br />
Daqui pra frente eu evitarei re-escrever todo o código o tempo todo e colarei apenas as novas partes que foram adicionadas. Para acessar o código todo, por favor use os arquivos que estão linkados em cada seção :)<br />
Este novo código não mudou muito. As novidades aqui são:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JTextPane</span><span style="color: #339933;">;</span>
...
		<span style="color: #003399;">JTextPane</span> texto <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JTextPane</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		...
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>texto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Adicionei o import referente a classe JTextPane que nos fornece uma caixa de texto. Dentro do construtor eu simplesmente crio uma instancia da class JTextPane e adiciono essa instancia a minha janela. O método 'add()' também foi herdado de JFrame.<br />
Você vai perceber que o componente está usando a janela toda. Isso pode ser mudado, e será discutido quando estivermos falando de layouts da janela.<br />
Todo componente que você desejar criar, basta instancia-lo e então adiciona-lo a janela utilizando o método 'add()'.<br />
Se você deseja maiores informações sobre os métodos que a classe JFrame implementa e seus respectivos protótipos, de uma olhada na documentação do <a href="http://java.sun.com/j2se/1.4.2/docs/api/javax/swing/JFrame.html" target="_blank">JFrame</a></p>
<p><strong>Como criar um menu para a janela</strong></p>
<p>Até então tudo muito interessante. Vamos adicionar um pouco de emoção agora e criar um menu para a nossa linda janela que não faz muita coisa.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JFrame</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JTextPane</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JMenuBar</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JMenu</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JMenuItem</span><span style="color: #339933;">;</span>
...
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> JanelaSimples<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003399;">JMenuBar</span> barra <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JMenuBar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">JMenu</span> menuArquivo <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JMenu</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Arquivo&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">JMenuItem</span> arqSair <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JMenuItem</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Sair&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		menuArquivo.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>arqSair<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		barra.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>menuArquivo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setJMenuBar</span><span style="color: #009900;">&#40;</span>barra<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		...
	<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><a href="wp-content/uploads/2009/09/JanelaSimples-3.java" target="_blank">[JanelaSimples-3.java]</a></p>
<p>E o nosso programa está crescendo!<br />
Só para esclarecer; um menu é feito de basicamente três partes:<br />
A barra de menus<br />
Os menus<br />
Os items dos menus<br />
Como pode-se perceber nós adicionamos três novos imports em nosso código que se referem a cada um desses items. Em nosso construtor então nós instanciamos uma barra de menu (JMenuBar), instanciamos um menu (JMenu) e finalmente instanciamos um item para o menu (JMenuItem). Depois de cada um dos items instanciados e configurados conforme desejamos, basta associa-los conforme feito no código.<br />
Adicionamos o item 'arqSair' dentro do menu 'menuArquivo'. Adicionamos o menu 'menuArquivo' a barra de menu 'barra' e por fim chamamos o método setJMenuBar para adicionar o menu a nossa janela.<br />
Para adicionar o menu nós utilizamos o método especial setJMenuBar pois ele já configura o nosso menu para ser mostrado da maneira esperada no topo da janela.</p>
<p><strong>Como tratar eventos no seu menu</strong></p>
<p>Eu estou achando esse programa cada vez mais empolgante! :D (espero que vocês também)<br />
Como deu pra notar, o nosso menu 'Sair' não faz absolutamente nada :(<br />
Iremos abordar agora um tipo simples de evento, e falar um pouquinho sobre alguns tipos de eventos que existem. Ao longo dos próximos tutoriais de como criar o nosso editor de texto iremos falando mais sobre esse assunto e explorando novos eventos.<br />
Vamos então colocar uma funcionalidade nesse item 'Sair' para que ele faça aquilo que ele promete :)</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">...
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.event.ActionListener</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.event.ActionEvent</span><span style="color: #339933;">;</span>
&nbsp;
...
&nbsp;
		<span style="color: #003399;">JMenuItem</span> arqSair <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JMenuItem</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Sair&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		arqSair.<span style="color: #006633;">addActionListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ActionListener</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> actionPerformed<span style="color: #009900;">&#40;</span><span style="color: #003399;">ActionEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #003399;">System</span>.<span style="color: #006633;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		menuArquivo.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>arqSair<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		barra.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>menuArquivo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setJMenuBar</span><span style="color: #009900;">&#40;</span>barra<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
...</pre></div></div>

<p><a href="wp-content/uploads/2009/09/JanelaSimples-4.java" target="_blank">[JanelaSimples-4.java]</a></p>
<p>Mais dois imports para nos auxiliar e um trecho de código um tanto quanto diferente. Deixe-me falar um pouco sobre eventos e listeners e especialmente sobre o ActionListener e o ActionEvent.<br />
Eventos, como o nome sugere, são coisas que acontecem ao seu programa. Quando o usuário interage com o programa ao clicar em algo, digitar algo, movimentar o mouse ou coisas do genêro, um evento está acontecendo. O nosso programa sabe desses eventos através do chamamos de Listeners.<br />
Os Listeners ficam 'ouvindo' o programa por eventos que aconteçam. Quando um evento acontece, o Listener invoca o método associado ao tipo de evento.<br />
O ActionListener é um Listener para os eventos mais comums, como um clique ou como quando o usuário pressiona Enter ou Space. O evento que é lido por um ActionListener é um ActionEvent. Quando você tem um item em seu menu e clica com o botão direito ou esquerdo nele você gerou um ActionEvent. Se voce selectionar o menu e apertar Enter, você gerou um ActionEvent nele.<br />
Possuindo essa noção de Listener e Event, vamos reanalizar o código acima.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">	arqSair.<span style="color: #006633;">addActionListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ActionListener</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> actionPerformed<span style="color: #009900;">&#40;</span><span style="color: #003399;">ActionEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #003399;">System</span>.<span style="color: #006633;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>O componente JMenuItem possui um método que nos permite associar a instancia de uma classe que trata eventos do tipo ActionEvent ao seu ActionListener.<br />
Sempre que um ActionEvent acontecer o método 'actionPerformed' dessa instancia será chamado para tratar do evento.<br />
No nosso caso, para não precisarmos escrever toda uma classe para isso, nós criamos uma instancia anonima de ActionListener explicitando o nosso método actionPerfomed. Quando a ação ocorrer, esse método será executado e em nosso caso irá fazer com que a aplicação encerre.<br />
O parametro que o método recebe contém informações sobre o evento, tais como: De onde veio o evento, quando o evento aconteceu, quais teclas estavam pressionadas quando o evento occoreu e etc... Para maiores informações sobre o que se pode tirar do ActionEvent, acesse <a href="http://java.sun.com/javase/6/docs/api/java/awt/event/ActionEvent.html" target="_blank">esse link</a><br />
Com isso, encerramos a breve introdução a eventos. Se ficaram algumas dúvidas, não se preocupe pois iremos falar mais sobre eles no futuro.</p>
<p><strong>Como criar um painel com abas</strong></p>
<p>Nosso editor de texto já está ganhando forma e agora é hora de dar a ele a primeira funcionalidade prometida: Abas!<br />
Vamos criar então um painel de abas onde cada aba será uma caixa de texto diferente para escrevermos.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JFrame</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JTextPane</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JMenuBar</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JMenu</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JMenuItem</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.event.ActionListener</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.awt.event.ActionEvent</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// JTabbedPane para nosso painel de abas!</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">javax.swing.JTabbedPane</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> JanelaSimples <span style="color: #000000; font-weight: bold;">extends</span> <span style="color: #003399;">JFrame</span> <span style="color: #009900;">&#123;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> JanelaSimples<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #003399;">JMenuBar</span> barra <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JMenuBar</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">JMenu</span> menuArquivo <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JMenu</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Arquivo&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #003399;">JMenuItem</span> arqSair <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JMenuItem</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Sair&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		arqSair.<span style="color: #006633;">addActionListener</span><span style="color: #009900;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">ActionListener</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> actionPerformed<span style="color: #009900;">&#40;</span><span style="color: #003399;">ActionEvent</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #003399;">System</span>.<span style="color: #006633;">exit</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		menuArquivo.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>arqSair<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		barra.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>menuArquivo<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setJMenuBar</span><span style="color: #009900;">&#40;</span>barra<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #003399;">JTextPane</span> texto <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JTextPane</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setTitle</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Minha primeira janela&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setSize</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">640</span>,<span style="color: #cc66cc;">480</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #008000; font-style: italic; font-weight: bold;">/**
		 * A caixa de texto não é mais adicionada a janela
		 * e sim ao painel de abas
		 */</span>
		<span style="color: #666666; font-style: italic;">//this.add(texto); &amp;lt;--- comentado!</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setDefaultCloseOperation</span><span style="color: #009900;">&#40;</span>EXIT_ON_CLOSE<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #008000; font-style: italic; font-weight: bold;">/**
		 * Criar o painel e adiciona-lo a janela
		 */</span>
		<span style="color: #003399;">JTabbedPane</span> painel <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JTabbedPane</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		painel.<span style="color: #006633;">addTab</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Aba 1&quot;</span>, texto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>painel<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">setVisible</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span>
&nbsp;
	<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		<span style="color: #000000; font-weight: bold;">new</span> JanelaSimples<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><a href="wp-content/uploads/2009/09/JanelaSimples-5.java" target="_blank">[JanelaSimples-5.java]</a></p>
<p>Coloquei o código completo para não nos perdermos. As partes novas estão comentadas para serem mais facilmente identificadas.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">...
&nbsp;
		<span style="color: #666666; font-style: italic;">//this.add(texto); &amp;lt;--- comentado!</span>
&nbsp;
		...
&nbsp;
		<span style="color: #008000; font-style: italic; font-weight: bold;">/**
		 * Criar o painel e adiciona-lo a janela
		 */</span>
		<span style="color: #003399;">JTabbedPane</span> painel <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #003399;">JTabbedPane</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		painel.<span style="color: #006633;">addTab</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Aba 1&quot;</span>, texto<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">add</span><span style="color: #009900;">&#40;</span>painel<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		...</pre></div></div>

<p>Até aqui, bastante simples. Criamos um JTabbedPane, que é o nosso painel com abas e adicionamos uma aba com o título "Aba 1" e o componente que ela irá exibir é a nossa caixa de texto. Adicionamos então o painel a janela. Vejam que comentei a linha que adicionava a caixa de texto a janela já que agora a caixa de texto faz parte do painel de abas.</p>
<p><strong>Próximo episódio</strong></p>
<p>Bem pessoal, por hoje é só :)<br />
Na próxima parte iremos abordar os seguintes temas:</p>
<ul>
<li>Criação do menu 'Novo'</li>
<li>Criação do menu 'Salvar'</li>
<li>Criação do menu 'Salvar Como'</li>
<li>Criação do menu 'Sobre'</li>
</ul>
<p>Talvez eu aborde mais coisas, mas não sei ainda.<br />
Até a próxima :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gilgalab.com.br/2009/09/13/construindo-um-editor-de-texto-com-java-swing-parte-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Dica: Source Code Highlighter</title>
		<link>http://www.gilgalab.com.br/2008/03/22/dica-source-code-highlighter/</link>
		<comments>http://www.gilgalab.com.br/2008/03/22/dica-source-code-highlighter/#comments</comments>
		<pubDate>Sat, 22 Mar 2008 13:36:28 +0000</pubDate>
		<dc:creator>Henrique</dc:creator>
				<category><![CDATA[Outros]]></category>

		<guid isPermaLink="false">http://artofcoding.wordpress.com/2008/03/22/dica-source-code-highlighter/</guid>
		<description><![CDATA[Fala pessoal!
Quando estava escrevendo os posts aqui para o blog, precisava de uma ferramenta que me ajudasse a colorir o código e me fornecesse o html para ele colorido. Depois de experimentar várias ferramentas por aí, a mais bacana que encontrei e com suporte ao maior número de linguagens foi o Quick Highliter.


Você digita o [...]]]></description>
			<content:encoded><![CDATA[<p>Fala pessoal!</p>
<p>Quando estava escrevendo os posts aqui para o blog, precisava de uma ferramenta que me ajudasse a colorir o código e me fornecesse o html para ele colorido. Depois de experimentar várias ferramentas por aí, a mais bacana que encontrei e com suporte ao maior número de linguagens foi o <a href="http://quickhighlighter.com/">Quick Highliter</a>.</p>
<p><a href="http://artofcoding.files.wordpress.com/2008/03/quickhighlighter.jpg" title="quickhighlighter.jpg"></a></p>
<div style="text-align:center;"><a href="http://artofcoding.files.wordpress.com/2008/03/quickhighlighter.jpg" target="_blank" title="quickhighlighter.jpg"><img src="http://artofcoding.files.wordpress.com/2008/03/quickhighlighter.thumbnail.jpg" alt="quickhighlighter.jpg" /></a></div>
<p>Você digita o código na linguagem desejada, seleciona no drop down a linguagem que está utilizando, define as opções que deseja e seu código sai colorido! Outra coisa bacana é que ele também faz indentação.<br />
Para aqueles que gostam de um código fácil de ler e bem organizado, tá ai uma ótima dica.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gilgalab.com.br/2008/03/22/dica-source-code-highlighter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java: Conectando-se ao MySQL</title>
		<link>http://www.gilgalab.com.br/2008/03/21/java-conectando-se-ao-mysql/</link>
		<comments>http://www.gilgalab.com.br/2008/03/21/java-conectando-se-ao-mysql/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 18:47:02 +0000</pubDate>
		<dc:creator>Henrique</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://artofcoding.wordpress.com/?p=8</guid>
		<description><![CDATA[Olá pessoas,
Aqui estou de novo tentando voltar a postar hehehe. Hoje vou mostrar um exemplo simples de classe em Java para se conectar ao MySQL, para que mais pra frente eu possa mostrar algumas coisas bacanas para se fazer com JSP + TagLibs + MySQL + Servlets :) (Não sou grande fã de usar frameworks [...]]]></description>
			<content:encoded><![CDATA[<p>Olá pessoas,</p>
<p>Aqui estou de novo tentando voltar a postar hehehe. Hoje vou mostrar um exemplo simples de classe em Java para se conectar ao MySQL, para que mais pra frente eu possa mostrar algumas coisas bacanas para se fazer com JSP + TagLibs + MySQL + Servlets :) (Não sou grande fã de usar frameworks quando ainda não conheço bem a linguagem).<br />
Bom, chega de lenga lenga, e vamos ao que interessa :D</p>
<p>Para poder brincar você vai precisar do MyConnector/J instalado. Ele pode ser obtido em: <a href="http://dev.mysql.com/downloads/connector/j/5.1.html" title="Mysql Connector/J 5.1" target="_blank">http://dev.mysql.com/downloads/connector/j/5.1.html!</a><br />
Ao baixar o Connector/J você encontrará dentro do .zip (ou do .tar.gz) um arquivo com o nome parecido com: <b>mysql-connector-java-5.1.5-bin.jar</b>. Certifique-se que você adicionará esse arquivo ao seu CLASSPATH pois ele será necessário para que os exemplos que usaremos funcionem.</p>
<p>Agora vamos criar um banco de dados simples para utilizarmos nos nossos exemplos:</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">DATABASE</span> projeto;
<span style="color: #993333; font-weight: bold;">USE</span> projeto;
<span style="color: #993333; font-weight: bold;">CREATE</span> <span style="color: #993333; font-weight: bold;">TABLE</span> usuario <span style="color: #66cc66;">&#40;</span>
   id_usuario INT <span style="color: #993333; font-weight: bold;">NOT</span> <span style="color: #993333; font-weight: bold;">NULL</span> <span style="color: #993333; font-weight: bold;">PRIMARY</span> <span style="color: #993333; font-weight: bold;">KEY</span> <span style="color: #993333; font-weight: bold;">AUTO_INCREMENT</span>
   <span style="color: #66cc66;">,</span>nome VARCHAR<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">100</span><span style="color: #66cc66;">&#41;</span>
   <span style="color: #66cc66;">,</span>idade INT<span style="color: #66cc66;">&#40;</span><span style="color: #cc66cc;">3</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>E aqui inserimos alguns dados, para podermos consulta-los.</p>

<div class="wp_syntax"><div class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> usuario <span style="color: #66cc66;">&#40;</span>
   nome
   <span style="color: #66cc66;">,</span>idade
<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>
   <span style="color: #ff0000;">&quot;Henrique&quot;</span>
   <span style="color: #66cc66;">,</span><span style="color: #cc66cc;">22</span>
<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> usuario <span style="color: #66cc66;">&#40;</span>
   nome
   <span style="color: #66cc66;">,</span>idade
<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>
   <span style="color: #ff0000;">&quot;José&quot;</span>
   <span style="color: #66cc66;">,</span><span style="color: #cc66cc;">35</span>
<span style="color: #66cc66;">&#41;</span>;
&nbsp;
<span style="color: #993333; font-weight: bold;">INSERT</span> <span style="color: #993333; font-weight: bold;">INTO</span> usuario <span style="color: #66cc66;">&#40;</span>
   nome
   <span style="color: #66cc66;">,</span>idade
<span style="color: #66cc66;">&#41;</span> <span style="color: #993333; font-weight: bold;">VALUES</span> <span style="color: #66cc66;">&#40;</span>
   <span style="color: #ff0000;">&quot;Andreia&quot;</span>
   <span style="color: #66cc66;">,</span><span style="color: #cc66cc;">21</span>
<span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>Vou começar com uma classe bem simples, que simplesmente se conecta ao MySQL, e ao longo do texto vamos incrementa-la para que faça mais coisas. Vamos então a primeira classe:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.heap.db</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.DriverManager</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.SQLException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.Connection</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> MySQL <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> host<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> user<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> pass<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> database<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Connection</span> c<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * Construtor da classe
     *
     * @param host Host em que se deseja conectar
     * @param database Nome do database em que se deseja conectar
     * @param user Nome do usuário
     * @param pass Senha do usuário
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> MySQL<span style="color: #009900;">&#40;</span> <span style="color: #003399;">String</span> host, <span style="color: #003399;">String</span> database, <span style="color: #003399;">String</span> user, <span style="color: #003399;">String</span> pass <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">pass</span> <span style="color: #339933;">=</span> pass<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">user</span> <span style="color: #339933;">=</span> user<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">host</span> <span style="color: #339933;">=</span> host<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">database</span> <span style="color: #339933;">=</span> database<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * Método que estabelece a conexão com o banco de dados
     *
     * @return True se conseguir conectar, falso em caso contrário.
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> connect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">boolean</span> isConnected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">String</span> url<span style="color: #339933;">;</span>
&nbsp;
        url <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;jdbc:mysql://&quot;</span><span style="color: #339933;">+</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">host</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;/&quot;</span>
              <span style="color: #339933;">+</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">database</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;?&quot;</span>
              <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;user=&quot;</span><span style="color: #339933;">+</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">user</span>
              <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&amp;password=&quot;</span><span style="color: #339933;">+</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">pass</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">Class</span>.<span style="color: #006633;">forName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;com.mysql.jdbc.Driver&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">newInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">c</span> <span style="color: #339933;">=</span> <span style="color: #003399;">DriverManager</span>.<span style="color: #006633;">getConnection</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            isConnected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span> <span style="color: #003399;">SQLException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            isConnected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span> <span style="color: #003399;">ClassNotFoundException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            isConnected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span> <span style="color: #003399;">InstantiationException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            isConnected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span> <span style="color: #003399;">IllegalAccessException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            isConnected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> isConnected<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Código bastante simples como podemos perceber. A primeira linha indica que essa classe pertence ao pacote <b>com.heap.db</b>. É importante ressaltar isso, porque teremos de importar esse código para dentro da nossa classe que será o nosso programa de verdade, que chamará o método de conexão. Perceba também que no código eu não faço nenhum tratamento especial para as exceptions, apenos imprimo o erro. Essa não é uma técnica muito bacana, pois podemos perder informações. Eu gost de criar uma outra classe que faça o handle das exceptions e salve os erros em algum lugar, para que eu possa consulta-los se ncessário, mas em nosso caso aqui é o bastante apenas imprimi-las.</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.heap.db.MySQL</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> TesteDB <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        MySQL db <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MySQL<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;localhost&quot;</span>,<span style="color: #0000ff;">&quot;projeto&quot;</span>,<span style="color: #0000ff;">&quot;root&quot;</span>,<span style="color: #0000ff;">&quot;12345&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> db.<span style="color: #006633;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
          <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Conectado!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Logo na primeira linha desse código é feito o import da classe que se conecta ao MySQL. No método main() criamos uma instancia da classe MySQL com os parametros para especificar onde estamos conectando, e logo na sequência chamamos o método para conectar.<br />
Agora é hora de testar isso tudo. Então apenas para motivos de esclarecimento, vamos dar uma olhada em como ficou a estrutura do nosso diretório.</p>
<p>C:\Projeto<br />
¦&nbsp;&nbsp;&nbsp;TesteDB.class<br />
¦&nbsp;&nbsp;&nbsp;TesteDB.java<br />
¦<br />
+---com<br />
¦&nbsp;&nbsp;&nbsp;+---heap<br />
¦&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+---db<br />
¦&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySQL.class<br />
¦&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySQL.java<br />
¦<br />
+---lib<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mysql-connector-java-5.1.5-bin.jar</p>
<p>No meu caso já se pode ver os arquivos .class pois já compilei o código, mas aqui vai a forma como iremos compilar:</p>
<p>À partir da raiz do projeto (No meu caso aqui C:\Projeto (Sim, estou usando windows porque estou escrevendo isso do computador do trabalho :|))<br />
<b>javac -cp . com\heap\db\MySQL.java</b><br />
<b>javac -cp . TesteDB.java</b></p>
<p>Agora que tudo está compilado, basta rodar!</p>
<p><b>java TesteDB</b><br />
<i>java.lang.ClassNotFoundException: com.mysql.jdbc.Driver<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at java.net.URLClassLoader$1.run(URLClassLoader.java:200)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at java.security.AccessController.doPrivileged(Native Method)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at java.net.URLClassLoader.findClass(URLClassLoader.java:188)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at java.lang.ClassLoader.loadClass(ClassLoader.java:306)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at java.lang.ClassLoader.loadClass(ClassLoader.java:251)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at java.lang.Class.forName0(Native Method)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at java.lang.Class.forName(Class.java:169)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at com.heap.db.MySQL.connect(MySQL.java:32)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at TesteDB.main(TesteDB.java:7)<br />
com.mysql.jdbc.Driver</i></p>
<p>Oops! Algo saiu errado. Lembram-se no começo quando eu disse que precisavamos do Mysql Connector/J e que ele estivesse no CLASSPATH? Bem, como da pra notar na estrutura de diretórios, eu coloquei o Connector/J no diretório lib porém não fiz referência a essa lib quando fui rodar o programa, o que causou o erro. Então vamos rodar o comando correto e ver o que acontece:</p>
<p><b>java -cp .;lib\mysql-connector-java-5.1.5-bin.jar TesteDB</b><br />
<i>jdbc:mysql://localhost/projeto?user=root&amp;password=12345<br />
Conectado!</i></p>
<p>Como pode perceber, agora parece que tudo funcionou! A opção -cp do comando java diz ao interpretador qual o CLASSPATH a utilizar. Nesse caso mandei que utilizasse o diretório atual, e o arquivo .jar do Connector/J.</p>
<p>Muito legal isso tudo, porém uma classe que simplesmente conecta no banco é bastante inútil. Vamos então melhorar a nossa classe MySQL, adicionando algums métodos para que possamos consultar dados.</p>
<p>O primeiro método que irei adicionar é um que recebe uma query como parametro e retorna um ResultSet. O ResultSet nada mais é do que um resource que representa a tabela. Eis o código:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * Esse método executa a query dada, e retorna um ResultSet
     * Talvez fosse melhor idéia fazer esse método lançar uma exception
     * a faze-lo retornar null como eu fiz, porém isso é apenas um exemplo
     * para demonstrar a funcionalidade do comando execute
     *
     * @param query String contendo a query que se deseja executar
     * @return ResultSet em caso de estar tudo Ok, null em caso de erro.
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">ResultSet</span> executar<span style="color: #009900;">&#40;</span> <span style="color: #003399;">String</span> query <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">Statement</span> st<span style="color: #339933;">;</span>
        <span style="color: #003399;">ResultSet</span> rs<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            st <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">c</span>.<span style="color: #006633;">createStatement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            rs <span style="color: #339933;">=</span> st.<span style="color: #006633;">executeQuery</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">return</span> rs<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span> <span style="color: #003399;">SQLException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Nesse trecho de código, criamos um <b>Statement</b> a partir da nossa conexão. O objeto <b>Statement</b> nos permite executar comando no nosso banco de dados.<br />
E para testar esse código, nós iremos rodar uma query contra o nosso banco de dados que criamos no começo desse texto. O nosso código da classe TesteDB vai ficar dessa maneira:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.ResultSet</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.SQLException</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.heap.db.MySQL</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> TesteDB <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        MySQL db <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MySQL<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;localhost&quot;</span>,<span style="color: #0000ff;">&quot;projeto&quot;</span>,<span style="color: #0000ff;">&quot;root&quot;</span>,<span style="color: #0000ff;">&quot;12345&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">String</span> query<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> db.<span style="color: #006633;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Conectado!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Rodando uma query contra o banco&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            query <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;select * from usuario&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">ResultSet</span> rs <span style="color: #339933;">=</span> db.<span style="color: #006633;">executar</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> rs <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// Verifica se a query retornou algo</span>
                    <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> rs.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #666666; font-style: italic;">// Podemos referenciar a coluna pelo índice</span>
                        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Id: &quot;</span> <span style="color: #339933;">+</span> rs.<span style="color: #006633;">getInt</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                        <span style="color: #666666; font-style: italic;">// Ou pelo seu nome</span>
                        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Nome: &quot;</span> <span style="color: #339933;">+</span> rs.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;nome&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Idade: &quot;</span> <span style="color: #339933;">+</span> rs.<span style="color: #006633;">getInt</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;idade&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;----------------------------&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
          <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span> <span style="color: #003399;">SQLException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
              e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Recompile e rode esse código da mesma forma que fizemos lá em cima, você deve ter uma saída como essa:</p>
<p><i>jdbc:mysql://localhost/projeto?user=root&amp;password=12345<br />
Conectado!<br />
Rodando uma query contra o banco<br />
Id: 1<br />
Nome: Henrique<br />
Idade: 22<br />
----------------------------<br />
Id: 2<br />
Nome: Jos‚<br />
Idade: 35<br />
----------------------------<br />
Id: 3<br />
Nome: Andreia<br />
Idade: 21<br />
----------------------------</i></p>
<p>No código você pode reparar que eu referenciei as colunas tanto utilizando um índice (cada coluna tem um índice numérico que vai de 1, representando a primeira coluna da tabela, até N onde N é o número de colunas na tabela). Repare também que para cada tipo de dados que a tabela possui utilizamos um método get distinto. Para a lista de métodos get que se pode utilizar, consulte a documentação do <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/sql/ResultSet.html"> ResultSet </a>.<br />
Já melhoramso bastante! Agora nossa classe já tem uma função, ela consulta dados na nossa base! Vamos ver então como podemos ecrever um método para inserir dados em nossa tabela. De volta na classe MySQL adicione o seguinte método:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;">    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * Executa uma query como update, delete ou insert.
     * Retorna o número de registros afetados quando falamos de um update ou delete
     * ou retorna 1 quando o insert é bem sucedido. Em outros casos retorna -1
     *
     * @param query A query que se deseja executar
     * @return 0 para um insert bem sucedido. -1 para erro
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> inserir<span style="color: #009900;">&#40;</span> <span style="color: #003399;">String</span> query <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">Statement</span> st<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> result <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            st <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">c</span>.<span style="color: #006633;">createStatement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            result <span style="color: #339933;">=</span> st.<span style="color: #006633;">executeUpdate</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span> <span style="color: #003399;">SQLException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> result<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p>Esse método poderá ser utilizado tanto para inserir dados, como para apagar ou atualizar. Novamente criamos um <b>Statement</b> e chamamos um método para executar a nossa query. Para maiores informações sobre os métodos da classe <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/sql/Statement.html">Statement</a> consulte a documentação.</p>
<p>Vejamos então como ficou a nossa classe MySQL completa, e um programa de exemplo que a utiliza.</p>
<p><b>MySQL.java</b></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">package</span> <span style="color: #006699;">com.heap.db</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.DriverManager</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.ResultSet</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.SQLException</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.Connection</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.Statement</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> MySQL <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> host<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> user<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> pass<span style="color: #339933;">;</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #003399;">String</span> database<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">Connection</span> c<span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * Construtor da classe
     *
     * @param host Host em que se deseja conectar
     * @param database Nome do database em que se deseja conectar
     * @param user Nome do usuário
     * @param pass Senha do usuário
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> MySQL<span style="color: #009900;">&#40;</span> <span style="color: #003399;">String</span> host, <span style="color: #003399;">String</span> database, <span style="color: #003399;">String</span> user, <span style="color: #003399;">String</span> pass <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">pass</span> <span style="color: #339933;">=</span> pass<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">user</span> <span style="color: #339933;">=</span> user<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">host</span> <span style="color: #339933;">=</span> host<span style="color: #339933;">;</span>
        <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">database</span> <span style="color: #339933;">=</span> database<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * Método que estabelece a conexão com o banco de dados
     *
     * @return True se conseguir conectar, falso em caso contrário.
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">boolean</span> connect<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000066; font-weight: bold;">boolean</span> isConnected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">String</span> url<span style="color: #339933;">;</span>
&nbsp;
        url <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;jdbc:mysql://&quot;</span><span style="color: #339933;">+</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">host</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;/&quot;</span>
              <span style="color: #339933;">+</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">database</span><span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;?&quot;</span>
              <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;user=&quot;</span><span style="color: #339933;">+</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">user</span>
              <span style="color: #339933;">+</span><span style="color: #0000ff;">&quot;&amp;password=&quot;</span><span style="color: #339933;">+</span><span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">pass</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #000000; font-weight: bold;">Class</span>.<span style="color: #006633;">forName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;com.mysql.jdbc.Driver&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">newInstance</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">c</span> <span style="color: #339933;">=</span> <span style="color: #003399;">DriverManager</span>.<span style="color: #006633;">getConnection</span><span style="color: #009900;">&#40;</span>url<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            isConnected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">true</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span><span style="color: #009900;">&#40;</span> <span style="color: #003399;">SQLException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            isConnected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span> <span style="color: #003399;">ClassNotFoundException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            isConnected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span> <span style="color: #003399;">InstantiationException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            isConnected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span> <span style="color: #003399;">IllegalAccessException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span>e.<span style="color: #006633;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            isConnected <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> isConnected<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * Esse método executa a query dada, e retorna um ResultSet
     * Talvez fosse melhor idéia fazer esse método lançar uma exception
     * a faze-lo retornar null como eu fiz, porém isso é apenas um exemplo
     * para demonstrar a funcionalidade do comando execute
     *
     * @param query String contendo a query que se deseja executar
     * @return ResultSet em caso de estar tudo Ok, null em caso de erro.
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #003399;">ResultSet</span> executar<span style="color: #009900;">&#40;</span> <span style="color: #003399;">String</span> query <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">Statement</span> st<span style="color: #339933;">;</span>
        <span style="color: #003399;">ResultSet</span> rs<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            st <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">c</span>.<span style="color: #006633;">createStatement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            rs <span style="color: #339933;">=</span> st.<span style="color: #006633;">executeQuery</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">return</span> rs<span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span> <span style="color: #003399;">SQLException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #008000; font-style: italic; font-weight: bold;">/**
     * Executa uma query como update, delete ou insert.
     * Retorna o número de registros afetados quando falamos de um update ou delete
     * ou retorna 1 quando o insert é bem sucedido. Em outros casos retorna -1
     *
     * @param query A query que se deseja executar
     * @return 0 para um insert bem sucedido. -1 para erro
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">int</span> inserir<span style="color: #009900;">&#40;</span> <span style="color: #003399;">String</span> query <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #003399;">Statement</span> st<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> result <span style="color: #339933;">=</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
            st <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">this</span>.<span style="color: #006633;">c</span>.<span style="color: #006633;">createStatement</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            result <span style="color: #339933;">=</span> st.<span style="color: #006633;">executeUpdate</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span> <span style="color: #003399;">SQLException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">return</span> result<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><b>TesteDB.java</b></p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.ResultSet</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">java.sql.SQLException</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">import</span> <span style="color: #006699;">com.heap.db.MySQL</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">class</span> TesteDB <span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000066; font-weight: bold;">void</span> main <span style="color: #009900;">&#40;</span><span style="color: #003399;">String</span> <span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> args<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        MySQL db <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> MySQL<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;localhost&quot;</span>,<span style="color: #0000ff;">&quot;projeto&quot;</span>,<span style="color: #0000ff;">&quot;root&quot;</span>,<span style="color: #0000ff;">&quot;12345&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #003399;">String</span> query<span style="color: #339933;">;</span>
        <span style="color: #000066; font-weight: bold;">int</span> result<span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> db.<span style="color: #006633;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Conectado!&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Rodando uma query contra o banco&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
            query <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;select * from usuario&quot;</span><span style="color: #339933;">;</span>
            <span style="color: #003399;">ResultSet</span> rs <span style="color: #339933;">=</span> db.<span style="color: #006633;">executar</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000000; font-weight: bold;">try</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> rs <span style="color: #339933;">!=</span> <span style="color: #000066; font-weight: bold;">null</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">// Verifica se a query retornou algo</span>
                    <span style="color: #000000; font-weight: bold;">while</span> <span style="color: #009900;">&#40;</span> rs.<span style="color: #006633;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #666666; font-style: italic;">// Podemos referenciar a coluna pelo índice</span>
                        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Id: &quot;</span> <span style="color: #339933;">+</span> rs.<span style="color: #006633;">getInt</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
                        <span style="color: #666666; font-style: italic;">// Ou pelo seu nome</span>
                        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Nome: &quot;</span> <span style="color: #339933;">+</span> rs.<span style="color: #006633;">getString</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;nome&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Idade: &quot;</span> <span style="color: #339933;">+</span> rs.<span style="color: #006633;">getInt</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;idade&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;----------------------------&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                    <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
          <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">catch</span> <span style="color: #009900;">&#40;</span> <span style="color: #003399;">SQLException</span> e <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
              e.<span style="color: #006633;">printStackTrace</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
&nbsp;
          <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Inserindo dados na tabela&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          query <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;insert into usuario (nome, idade) values ('Maria',23)&quot;</span><span style="color: #339933;">;</span>
          result <span style="color: #339933;">=</span> db.<span style="color: #006633;">inserir</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>  result <span style="color: #339933;">&gt;</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
              <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Dado inserido com sucesso! Resutlt = &quot;</span> <span style="color: #339933;">+</span> result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
              <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Erro inserindo dado.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
&nbsp;
          query <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;update usuario set idade = 99&quot;</span><span style="color: #339933;">;</span>
          result <span style="color: #339933;">=</span> db.<span style="color: #006633;">inserir</span><span style="color: #009900;">&#40;</span>query<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>  result <span style="color: #339933;">&gt;</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
              <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Dado inserido com sucesso! Resutlt = &quot;</span> <span style="color: #339933;">+</span> result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
              <span style="color: #003399;">System</span>.<span style="color: #006633;">out</span>.<span style="color: #006633;">println</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Erro inserindo dado.&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
          <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>O procedimento para compilar e rodar é o mesmo que seguimos lá no começo.<br />
Bom, por hoje é só pessoas! Espero que esse pequeno tutorial possa ajudar aqueles que como eu estão começando! Continuem estudando e boa sorte!<br />
No próximo vamos falar de coisas pouco mais avançadas e ainda mais divertidas.</p>
<p>Para maiores informações consulte os links:<br />
<a target="_blank" href="http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-basic.html">MySQL AB: Basic JDBC Concepts</a><br />
<a target="_blank" href="http://java.sun.com/j2se/1.5.0/docs/api/overview-summary.html">Java Documentation</a><br />
<a target="_blank" href="http://www.google.com">Google</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.gilgalab.com.br/2008/03/21/java-conectando-se-ao-mysql/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>PL/SQL Oracle: Identificando o último dia da semana no mês</title>
		<link>http://www.gilgalab.com.br/2008/01/29/plsql-oracle-identificando-o-ultimo-dia-da-semana-no-mes/</link>
		<comments>http://www.gilgalab.com.br/2008/01/29/plsql-oracle-identificando-o-ultimo-dia-da-semana-no-mes/#comments</comments>
		<pubDate>Tue, 29 Jan 2008 16:05:48 +0000</pubDate>
		<dc:creator>Henrique</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PL/SQL]]></category>

		<guid isPermaLink="false">http://artofcoding.wordpress.com/?p=6</guid>
		<description><![CDATA[Fala pessoal!
Fiquei sumido desde o primeiro post. A vida está uma correria, e mal tenho tido tempo de fazer qualquer coisa :&#124;
Bom, estava no trabalho dia desses e precisava de uma lógica para identificar qual é o último dia do mês que caia durante a semana. Depois de pesquisar um pouco como poderia fazer isso, [...]]]></description>
			<content:encoded><![CDATA[<p>Fala pessoal!</p>
<p>Fiquei sumido desde o primeiro post. A vida está uma correria, e mal tenho tido tempo de fazer qualquer coisa :|<br />
Bom, estava no trabalho dia desses e precisava de uma lógica para identificar qual é o último dia do mês que caia durante a semana. Depois de pesquisar um pouco como poderia fazer isso, e pensar por alguns instante, cheguei ao seguinte código.</p>
<div>
<div class="oracle8">
<ol>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;"><span style="color:#993333;font-weight:bold;text-transform:uppercase;">DECLARE</span></div>
</li>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;">&nbsp; &nbsp;v_ultimo_dia <span style="color:#993333;font-weight:bold;text-transform:uppercase;">VARCHAR2</span><span style="color:#66cc66;">&#40;</span><span style="color:#cc66cc;">10</span><span style="color:#66cc66;">&#41;</span>;</div>
</li>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;">&nbsp;</div>
</li>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;"><span style="color:#993333;font-weight:bold;text-transform:uppercase;">BEGIN</span></div>
</li>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;">&nbsp;</div>
</li>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;">&nbsp; &nbsp;v_ultimo_dia := <span style="color:#993333;font-weight:bold;text-transform:uppercase;">TO_CHAR</span><span style="color:#66cc66;">&#40;</span><span style="color:#993333;font-weight:bold;text-transform:uppercase;">LAST_DAY</span><span style="color:#66cc66;">&#40;</span><span style="color:#993333;font-weight:bold;text-transform:uppercase;">SYSDATE</span><span style="color:#66cc66;">&#41;</span>,<span style="color:#ff0000;">'D'</span><span style="color:#66cc66;">&#41;</span>;</div>
</li>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;">&nbsp; &nbsp;<span style="color:#993333;font-weight:bold;text-transform:uppercase;">IF</span> v_ultimo_dia = <span style="color:#cc66cc;">7</span> <span style="color:#993333;font-weight:bold;text-transform:uppercase;">THEN</span>&nbsp; <span style="color:#808080;font-style:italic;">-- Sabado</span></div>
</li>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;">&nbsp; &nbsp; &nbsp; v_ultimo_dia := <span style="color:#993333;font-weight:bold;text-transform:uppercase;">TO_CHAR</span><span style="color:#66cc66;">&#40;</span><span style="color:#66cc66;">&#40;</span><span style="color:#993333;font-weight:bold;text-transform:uppercase;">LAST_DAY</span><span style="color:#66cc66;">&#40;</span><span style="color:#993333;font-weight:bold;text-transform:uppercase;">SYSDATE</span><span style="color:#66cc66;">&#41;</span>-<span style="color:#cc66cc;">1</span><span style="color:#66cc66;">&#41;</span>,<span style="color:#ff0000;">'DD/MM/YYYY'</span><span style="color:#66cc66;">&#41;</span>;</div>
</li>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;">&nbsp; &nbsp;<span style="color:#993333;font-weight:bold;text-transform:uppercase;">ELSIF</span> v_ultimo_dia = <span style="color:#cc66cc;">1</span> <span style="color:#993333;font-weight:bold;text-transform:uppercase;">THEN</span> <span style="color:#808080;font-style:italic;">-- Domingo</span></div>
</li>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;">&nbsp; &nbsp; &nbsp; v_ultimo_dia := <span style="color:#993333;font-weight:bold;text-transform:uppercase;">TO_CHAR</span><span style="color:#66cc66;">&#40;</span><span style="color:#66cc66;">&#40;</span><span style="color:#993333;font-weight:bold;text-transform:uppercase;">LAST_DAY</span><span style="color:#66cc66;">&#40;</span><span style="color:#993333;font-weight:bold;text-transform:uppercase;">SYSDATE</span><span style="color:#66cc66;">&#41;</span>-<span style="color:#cc66cc;">2</span><span style="color:#66cc66;">&#41;</span>,<span style="color:#ff0000;">'DD/MM/YYYY'</span><span style="color:#66cc66;">&#41;</span>;</div>
</li>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;">&nbsp; &nbsp;<span style="color:#993333;font-weight:bold;text-transform:uppercase;">ELSE</span></div>
</li>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;">&nbsp; &nbsp; &nbsp; v_ultimo_dia := <span style="color:#993333;font-weight:bold;text-transform:uppercase;">TO_CHAR</span><span style="color:#66cc66;">&#40;</span><span style="color:#66cc66;">&#40;</span><span style="color:#993333;font-weight:bold;text-transform:uppercase;">LAST_DAY</span><span style="color:#66cc66;">&#40;</span><span style="color:#993333;font-weight:bold;text-transform:uppercase;">SYSDATE</span><span style="color:#66cc66;">&#41;</span><span style="color:#66cc66;">&#41;</span>,<span style="color:#ff0000;">'DD/MM/YYYY'</span><span style="color:#66cc66;">&#41;</span>;</div>
</li>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;">&nbsp; &nbsp;<span style="color:#993333;font-weight:bold;text-transform:uppercase;">END</span> <span style="color:#993333;font-weight:bold;text-transform:uppercase;">IF</span>;</div>
</li>
<li>
<div style="font-family:'Courier New', Courier, monospace;font-weight:normal;"><span style="color:#993333;font-weight:bold;text-transform:uppercase;">END</span>; </div>
</li>
</ol>
</div>
</div>
<p>A variável "v_ultimo_dia" agora contém a data no formato DD/MM/YYYY do último dia do mês atual.<br />
E essa foi uma dica rápida para hoje.<br />
De agora em diante, quando o tempo para postar for curto, pretendo tentar postar dicas rápidas, e eventualmente postar textos mais detalhados sobre coisas mais específicas.<br />
Espero que todos aproveitem.</p>
<p>Até o próximo ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gilgalab.com.br/2008/01/29/plsql-oracle-identificando-o-ultimo-dia-da-semana-no-mes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bootstrap Simples</title>
		<link>http://www.gilgalab.com.br/2007/11/02/bootstrap-simples/</link>
		<comments>http://www.gilgalab.com.br/2007/11/02/bootstrap-simples/#comments</comments>
		<pubDate>Fri, 02 Nov 2007 23:41:15 +0000</pubDate>
		<dc:creator>Henrique</dc:creator>
				<category><![CDATA[Assembly]]></category>
		<category><![CDATA[Sistemas Operacionais]]></category>

		<guid isPermaLink="false">http://artofcoding.wordpress.com/2007/11/02/bootstrap-simples/</guid>
		<description><![CDATA[Introdução
Esse fim de semana andei estudando um pouco de assembly. Decidi fazer um bootstrap para ver se me animava um pouco, e acabou me voltando a vontade de realmente brincar de criar o meu sistema operacional. Como tudo precisa de um começo, decidi que o bootstrap seria um belo lugar para começar.
Vejamos então como é [...]]]></description>
			<content:encoded><![CDATA[<p><b>Introdução</b></p>
<p>Esse fim de semana andei estudando um pouco de assembly. Decidi fazer um bootstrap para ver se me animava um pouco, e acabou me voltando a vontade de realmente brincar de criar o meu sistema operacional. Como tudo precisa de um começo, decidi que o bootstrap seria um belo lugar para começar.<br />
Vejamos então como é que fazemos para dar um boot na maquina e o que é que a(o) BIOS (Basic Input Output System) espera para iniciar o sistema operacional.<br />
Quando o computador inicia e o POST termina, a BIOS faz uma chamada para ler o primeiro setor do disco que está definido como primário no setup. Funciona assim:</p>
<p>a) Olha o primeiro setor do disco definido no setup<br />
b) Encontrou setor de boot válido?<br />
c) Sim. Lê o setor e carrega o código para o <del>segmento</del> endereço 7C00h na memória. (Valeu pela correção Muzgo :)<br />
d) Não. Parte para o próximo dispositivo da lista de boot e vai para a) até encontrar.<br />
e) Caso não encontre em nenhum dos dispositivos, exibe mensagem de erro padrão da BIOS.</p>
<p>A Lista de software que usei:<br />
1. NASM - Para compilar o código<br />
2. QEMU - Maquina virtual que uso para testar o setor de boot<br />
3. dd   - Utilizado para escrever os dados no disco</p>
<p><b>O setor de boot</b></p>
<p>Quando definimos o disco no qual desejamos dar o boot, a BIOS chama uma interrupção (19h se nao me engano), para ler o primeiro setor desse disco. O primeiro setor é o que se encontra na posição CHS (Cylinder Head Sector) 0:0:1. Cada setor no disco tem 512 bytes, então como a BIOS lê o primeiro setor do disco, nosso 'programa' precisa ter 512 bytes ou menos. Meu objetivo aqui não é de falar muito sobre HCS, maiores informações você pode encontrar <a href="http://en.wikipedia.org/wiki/Cylinder-head-sector">aqui</a>.<br />
O que identifica se temos um setor de boot válido ou não?<br />
O setor de boot tem uma 'assinatura', os últimos dois bytes do setor devem ser '0xAA55'. Quando essa assinatura é encontrada, os 512 bytes são carregados para a memória na posição 7C00h e o programa é executado.</p>
<p><b>O código</b></p>
<p>Como já diria o conde Drácula em 'Castlevania: Symphony of the Night': "Enough talk!".<br />
Vamos dar uma olhada então em um código bem simples, que imprime uma string na tela.</p>

<div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">; Boot.asm</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">ORG</span> <span style="color: #0000ff;">7C00h</span>                   <span style="color: #666666; font-style: italic;">; Posição onde estaremos quando o código for</span>
&nbsp;
                            <span style="color: #666666; font-style: italic;">; carregado para a memória</span>
&nbsp;
mymsg<span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">db</span> <span style="color: #7f007f;">'Olá Setor de BOOT'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">10</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0</span>
&nbsp;
<span style="color: #00007f; font-weight: bold;">xor</span> <span style="color: #00007f;">ax</span><span style="color: #339933;">,</span><span style="color: #00007f;">ax</span>                   <span style="color: #666666; font-style: italic;">; Limpando ax</span>
&nbsp;
<span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">si</span><span style="color: #339933;">,</span>mymsg                <span style="color: #666666; font-style: italic;">; Nossa mensagem em SI</span>
&nbsp;
putstr<span style="color: #339933;">:</span>
        <span style="color: #00007f; font-weight: bold;">lodsb</span>               <span style="color: #666666; font-style: italic;">; Coloca o byte apontado em SI em AL, e incrementa</span>
                            <span style="color: #666666; font-style: italic;">; o contador</span>
&nbsp;
        <span style="color: #00007f; font-weight: bold;">or</span> <span style="color: #00007f;">al</span><span style="color: #339933;">,</span><span style="color: #00007f;">al</span>            <span style="color: #666666; font-style: italic;">; Verificamos se encontramos o byte '0' da string</span>
        <span style="color: #00007f; font-weight: bold;">jz</span> hang<span style="color: #666666; font-style: italic;">;            ; Se sim, paramos de imprimir</span>
        <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ah</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0x0E</span>         <span style="color: #666666; font-style: italic;">; Função para escrever</span>
&nbsp;
        <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">bx</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0x0007</span>       <span style="color: #666666; font-style: italic;">; Define a página e a cor onde escrevemos</span>
        <span style="color: #00007f; font-weight: bold;">int</span> <span style="color: #0000ff;">0x10</span>            <span style="color: #666666; font-style: italic;">; Interrupção de video</span>
        <span style="color: #00007f; font-weight: bold;">jmp</span> putstr          <span style="color: #666666; font-style: italic;">; Imprimir proximo caracter</span>
&nbsp;
hang<span style="color: #339933;">:</span>
        <span style="color: #00007f; font-weight: bold;">jmp</span> hang            <span style="color: #666666; font-style: italic;">; Após impressão, entramos em loop infinito</span>
&nbsp;
times <span style="color: #0000ff;">512</span><span style="color: #339933;">-</span><span style="color: #009900; font-weight: bold;">&#40;</span>$<span style="color: #339933;">-</span>$$<span style="color: #009900; font-weight: bold;">&#41;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">2</span> <span style="color: #000000; font-weight: bold;">DB</span> <span style="color: #0000ff;">0</span>     <span style="color: #666666; font-style: italic;">; Preenchemos o resto da memória com '0's</span>
&nbsp;
                            <span style="color: #666666; font-style: italic;">; até 510 bytes</span>
<span style="color: #000000; font-weight: bold;">DW</span> <span style="color: #0000ff;">0xAA55</span>                   <span style="color: #666666; font-style: italic;">; Assinatura do setor de boot</span></pre></div></div>

<p>Acredito que o código esteja auto explicativo. Você deve precisar manjar um pouco de assembly, então se não entendeu o código, procure estudar um pouquinho de assembly.<br />
Vamos agora compilar o nosso código, criar um disco para o QEMU, e escrever o nosso setor de boot no disco.</p>
<p>$ nasm boot.asm -f bin -o boot.bin<br />
$ qemu-img create /tmp/boot.img -f qcow 1M<br />
$ dd if=boot.bin of=/tmp/boot.img</p>
<p>Com isso feito, basta agora executar o QEMU e dizer que desejamos usar o arquivo /tmp/boot.img como nosso disco.</p>
<p>$ qemu /tmp/boot.img -m 16</p>
<p>O resultado é a nossa frase impressa logo após a BIOS fazer o POST.</p>
<p><b>Colocando código no Disco</b></p>
<p>Bom, agora que já sabemos dar o boot, está na hora de colocarmos código no disco e executar esse código. Esse é um processo um pouco mais complicado, mas vamos que vamos!<br />
A idéia agora é fazer com que o nosso programa de boot chame um binario que esteja gravado no disco e o execute. Então precisaremos escrever dois programas distintos: Um para ser o nosso setor de boot, e um que será chamado por ele. "Show me the code"</p>

<div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">; Boot2.asm</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">ORG</span> <span style="color: #0000ff;">7C00h</span>
&nbsp;
<span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">si</span><span style="color: #339933;">,</span>msg
&nbsp;
prntMsg<span style="color: #339933;">:</span>                    <span style="color: #666666; font-style: italic;">; Imprime a mensagem em SI</span>
  <span style="color: #00007f; font-weight: bold;">lodsb</span>
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ah</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0x0E</span>
&nbsp;
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">bx</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0x0007</span>
  <span style="color: #00007f; font-weight: bold;">int</span> <span style="color: #0000ff;">10h</span>
  <span style="color: #00007f; font-weight: bold;">or</span> <span style="color: #00007f;">al</span><span style="color: #339933;">,</span><span style="color: #00007f;">al</span>
&nbsp;
  <span style="color: #00007f; font-weight: bold;">jnz</span> prntMsg
&nbsp;
<span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #009900; font-weight: bold;">&#91;</span>drv<span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span><span style="color: #00007f;">dl</span>                <span style="color: #666666; font-style: italic;">; DL contém o identificador da unidade em que </span>
                            <span style="color: #666666; font-style: italic;">; o setor de boot foi encontrado</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; Inicializar o disco. Aqui colocamos a cabeça do disco no inicio dele</span>
&nbsp;
<span style="color: #339933;">.</span>diskSetup
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ax</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0</span>        <span style="color: #666666; font-style: italic;">; Função para resetar o disco rígido</span>
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">dl</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">&#91;</span>drv<span style="color: #009900; font-weight: bold;">&#93;</span>    <span style="color: #666666; font-style: italic;">; O drive que vamos resetar</span>
&nbsp;
  <span style="color: #00007f; font-weight: bold;">int</span> <span style="color: #0000ff;">13h</span>         <span style="color: #666666; font-style: italic;">; Chama a interrupção de disco</span>
  <span style="color: #00007f; font-weight: bold;">jc</span> <span style="color: #339933;">.</span>diskSetup   <span style="color: #666666; font-style: italic;">; Se der erro, tentamos de novo</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; Após resetar o disco, colocaremos a cabeça no setor que o programa se </span>
&nbsp;
<span style="color: #666666; font-style: italic;">; encontra e carregamos o programa na memória</span>
&nbsp;
<span style="color: #339933;">.</span>diskRead
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ah</span><span style="color: #339933;">,</span><span style="color: #0000ff;">02h</span>    <span style="color: #666666; font-style: italic;">; Função para ler o disco</span>
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">al</span><span style="color: #339933;">,</span><span style="color: #0000ff;">3</span>      <span style="color: #666666; font-style: italic;">; Ler 3 setores (512 * 3 bytes)</span>
&nbsp;
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ch</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0</span>      <span style="color: #666666; font-style: italic;">; Apontar para o cilindro 0</span>
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">cl</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0x02</span>   <span style="color: #666666; font-style: italic;">; Ler a partir do setor 2 (2, 3 e 4)</span>
&nbsp;
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">dh</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0</span>      <span style="color: #666666; font-style: italic;">; Cabeça 0</span>
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">dl</span><span style="color: #339933;">,</span><span style="color: #009900; font-weight: bold;">&#91;</span>drv<span style="color: #009900; font-weight: bold;">&#93;</span>  <span style="color: #666666; font-style: italic;">; Disco de onde queremos ler os dados</span>
&nbsp;
<span style="color: #666666; font-style: italic;">; Os dados que lemos com essa função são armazenados em ES:BX</span>
<span style="color: #666666; font-style: italic;">; No nosso caso aqui entao teremos 1000h:0</span>
&nbsp;
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">bx</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0x1000</span>
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">es</span><span style="color: #339933;">,</span><span style="color: #00007f;">bx</span>
&nbsp;
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">bx</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0</span>
&nbsp;
  <span style="color: #00007f; font-weight: bold;">int</span> <span style="color: #0000ff;">13h</span>       <span style="color: #666666; font-style: italic;">; Interrupção do disco</span>
  <span style="color: #00007f; font-weight: bold;">jc</span> <span style="color: #339933;">.</span>diskRead  <span style="color: #666666; font-style: italic;">; Em caso de erro, tenta de novo</span>
&nbsp;
<span style="color: #00007f; font-weight: bold;">jmp</span> <span style="color: #0000ff;">1000h</span><span style="color: #339933;">:</span><span style="color: #0000ff;">0</span><span style="color: #666666; font-style: italic;">;    ; Aqui nós pulamos para o nosso código que acaba de ser</span>
                <span style="color: #666666; font-style: italic;">; carregado na memória</span>
&nbsp;
hang<span style="color: #339933;">:</span>
  <span style="color: #00007f; font-weight: bold;">jmp</span> hang      <span style="color: #666666; font-style: italic;">; Loop infinito</span>
&nbsp;
drv <span style="color: #000000; font-weight: bold;">db</span> <span style="color: #0000ff;">0</span>
msg <span style="color: #000000; font-weight: bold;">db</span> <span style="color: #7f007f;">'Chamando programa do HD'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">13</span><span style="color: #339933;">,</span><span style="color: #0000ff;">10</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0</span>
&nbsp;
times <span style="color: #0000ff;">512</span><span style="color: #339933;">-</span><span style="color: #009900; font-weight: bold;">&#40;</span>$<span style="color: #339933;">-</span>$$<span style="color: #009900; font-weight: bold;">&#41;</span><span style="color: #339933;">-</span><span style="color: #0000ff;">2</span> <span style="color: #000000; font-weight: bold;">db</span> <span style="color: #0000ff;">0</span>   <span style="color: #666666; font-style: italic;">; Completa o espaço do setor que sobra com 0s</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">DW</span> <span style="color: #0000ff;">0xAA55</span>                 <span style="color: #666666; font-style: italic;">; Assinatura do setor de boot nos ultimos dois bytes</span></pre></div></div>

<p>Esse código então, como da para perceber, lê o código do disco, coloca o código na posição de memória 1000h:0 e pula para lá para começar a execução. Bom, precisamos agora então do programa que desejamos ler do disco e executar. Esse programa, assim como o primeiro exemplo vai simplesmente imprimir uma mensagem na tela.</p>

<div class="wp_syntax"><div class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">;  Programa.asm</span>
&nbsp;
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ax</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">1000h</span>           <span style="color: #666666; font-style: italic;">; Atualizar os registros de segmentos</span>
&nbsp;
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ds</span><span style="color: #339933;">,</span> <span style="color: #00007f;">ax</span>
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">es</span><span style="color: #339933;">,</span> <span style="color: #00007f;">ax</span>
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">si</span><span style="color: #339933;">,</span> msg             <span style="color: #666666; font-style: italic;">; Mensagem em SI</span>
&nbsp;
putstr<span style="color: #339933;">:</span>
  <span style="color: #00007f; font-weight: bold;">lodsb</span>
  <span style="color: #00007f; font-weight: bold;">or</span> <span style="color: #00007f;">al</span><span style="color: #339933;">,</span><span style="color: #00007f;">al</span>
  <span style="color: #00007f; font-weight: bold;">jz</span> hang
&nbsp;
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">ah</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0x0E</span>
  <span style="color: #00007f; font-weight: bold;">mov</span> <span style="color: #00007f;">bx</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0x0007</span>
  <span style="color: #00007f; font-weight: bold;">int</span> <span style="color: #0000ff;">0x10</span>
&nbsp;
  <span style="color: #00007f; font-weight: bold;">jmp</span> putstr
&nbsp;
hang<span style="color: #339933;">:</span>
  <span style="color: #00007f; font-weight: bold;">jmp</span> hang
&nbsp;
msg     <span style="color: #000000; font-weight: bold;">db</span> <span style="color: #7f007f;">'Bla bla bla!'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">13</span><span style="color: #339933;">,</span><span style="color: #0000ff;">10</span><span style="color: #339933;">,</span><span style="color: #0000ff;">0</span></pre></div></div>

<p>Nesse programa nós atualizamos os registros de segmento para o mesmo endereço onde carregamos o programa do nosso HD, e executamos a rotina basica de imprimir a mensagem na tela, e entrar em loop infinito.<br />
Para executar esse exemplo, os paso são parecidos. Vejamos:</p>
<p>$ nasm boot2.asm -f bin -o boot2.bin<br />
$ nasm programa.asm -f bin -o programa.bin<br />
$ qemu-img create ./boot2.img -f qcow 1M<br />
$ dd if=boot2.bin of=./boot2.img<br />
$ dd if=programa.bin of=./boot2.img bs=512 seek=1<br />
$ qemu ./boot.img -m 16</p>
<p>O comando '$ dd if=programa.bin of=./boot2.img bs=512 seek=1' coloca o nosso código no segundo setor do disco, pois conforme definimos em nosso código, é la que nosso bootstrap está esperando encontra-lo.</p>
<p><b>Conclusão</b><br />
Bom pessoal, é isso ai. Como o tpitulo disse, é um bootstrap simples, apenas para dar um gostinho de como funciona, e trazer mais animo para maiores pesquisas.<br />
Espero que tenham gostado e que possa ser útil para alguém.</p>
<p>Até o próxmo :D</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gilgalab.com.br/2007/11/02/bootstrap-simples/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Introdução</title>
		<link>http://www.gilgalab.com.br/2007/10/28/hello-world-2/</link>
		<comments>http://www.gilgalab.com.br/2007/10/28/hello-world-2/#comments</comments>
		<pubDate>Sun, 28 Oct 2007 19:53:37 +0000</pubDate>
		<dc:creator>Henrique</dc:creator>
				<category><![CDATA[Outros]]></category>

		<guid isPermaLink="false">http://localhost:8008/wordpress/?p=24</guid>
		<description><![CDATA[O objetivo aqui é bastante simples. Demonstrar códigos diversos, demonstrar seu funcionamento e procurar trazer de forma simples e prática o conhecimento. Não pretendo colocar apenas código em uma única linguagem específica, ou sobre um tópico específico; irei escrever sobre aquilo que estiver pesquisando no momento, ou que venha a ser de meu interesse.
Sinta-se a [...]]]></description>
			<content:encoded><![CDATA[<p>O objetivo aqui é bastante simples. Demonstrar códigos diversos, demonstrar seu funcionamento e procurar trazer de forma simples e prática o conhecimento. Não pretendo colocar apenas código em uma única linguagem específica, ou sobre um tópico específico; irei escrever sobre aquilo que estiver pesquisando no momento, ou que venha a ser de meu interesse.</p>
<p>Sinta-se a vontade para mandar sugestões ou comentários!</p>
<p>Regards,</p>
]]></content:encoded>
			<wfw:commentRss>http://www.gilgalab.com.br/2007/10/28/hello-world-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
