<?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/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Murilo :P</title>
	<atom:link href="http://murilo.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://murilo.wordpress.com</link>
	<description>Computação, programação, web e afins :)</description>
	<lastBuildDate>Tue, 13 Oct 2009 17:53:14 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='murilo.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/505c6f3d42437ca9436084f64ca027a8?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>Murilo :P</title>
		<link>http://murilo.wordpress.com</link>
	</image>
			<item>
		<title>Static Template Matrix &#8211; uma abordagem diferente</title>
		<link>http://murilo.wordpress.com/2009/10/12/static-template-matrix-uma-abordagem-diferente/</link>
		<comments>http://murilo.wordpress.com/2009/10/12/static-template-matrix-uma-abordagem-diferente/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 00:08:50 +0000</pubDate>
		<dc:creator>Murilo Adriano</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Estruturas de Dados]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[matriz]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://murilo.wordpress.com/?p=296</guid>
		<description><![CDATA[Static Template Matrix?

De fato eu nunca vi esse nome em outro lugar, mas foi o nome que eu pensei que se aproxima mais da implementação que veremos nesse post.
Trata-se template de uma matriz (matrix) de duas dimensões de tamanho constante (static). Uma das diferenças dessa matriz é que ao invés de se usar o convencional [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=296&subd=murilo&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h3>Static Template Matrix?</h3>
<p><a rel="attachment wp-att-40" href="http://murilo.wordpress.com/2008/10/01/converter-std-string-para-numero-e-vice-versa/cpp/"><img class="size-full wp-image-40 alignright" style="border:0;" title="C++" src="http://murilo.files.wordpress.com/2008/10/cpp.png?w=120&#038;h=107" alt="C++" width="120" height="107" /></a><br />
De fato eu nunca vi esse nome em outro lugar, mas foi o nome que eu pensei que se aproxima mais da implementação que veremos nesse post.</p>
<p>Trata-se template de uma matriz (matrix) de duas dimensões de tamanho constante (static). Uma das diferenças dessa matriz é que ao invés de se usar o convencional operator[] para acessar os elementos, nessa abordagem iremos utilizar o operator().</p>
<h3>Motivações</h3>
<p>Na realidade, não tem muito mais utilidades práticas do que matrizes normais. Pode ser que pode servir em algo para você. Então minha motivação é puramente de aprendizagem, principalmente da linguagem.</p>
<h3>matrix.h</h3>
<pre>
#ifndef _CLASS_MATRIX_H__
#define _CLASS_MATRIX_H__

/**
 * matrix.h
 * Defines a template type 'matrix' wich is a constant-sized 2-dimensioned
 * 	matrix and generic typed elements.
 *
 * author: Murilo Adriano Vasconcelos
 * website: http://murilo.wordpress.com
 */

template
class matrix
{
    //data matrix
    T data[R][C];

    public:
    //type of the current matrix
    typedef matrix matrix_t;

    //quantity of rows
    const unsigned rows;
    //quantity of columns
    const unsigned columns;

    //default ctor
    matrix(): rows(R), columns(C) {};

    /*ctor wich initializes the matrix filled
      with 'value' elements */
    matrix(const T&amp; value);

    //copy ctor: copies the matrix 'tocopy'
    matrix(const matrix_t&amp; tocopy);

    /*gets and/or set the value of the element
      in the row 'i', column 'j' */
    T&amp; operator()(unsigned i, unsigned j);

    /*gets the value of the element in the
      row 'i', column 'j' */
    const T&amp; operator()(unsigned i, unsigned j) const;

    //copy operator
    matrix_t&amp; operator=(const matrix_t&amp; tocopy);
};

/* class functions definition */

    template
matrix::matrix(const matrix&amp; tocopy): rows(R), columns(C)
{
    for (int i = 0; i &lt; R; i++)
        for (int j = 0; j &lt; C; j++)
            data[i][j] = tocopy(i, j);
}

    template
matrix::matrix(const T&amp; value): rows(R), columns(C)
{
    for (int i = 0; i &lt; R; i++)
        for (int j = 0; j &lt; C; j++)
            data[i][j] = value;
}

template
    matrix&amp;
matrix::operator=(const matrix&amp; tocopy)
{
    for (int i = 0; i &lt; R; i++)
        for (int j = 0; j &lt; C; j++)
            data[i][j] = tocopy(i, j);

    return *this;
}

    template
T&amp; matrix::operator()(unsigned i, unsigned j)
{
    return data[i][j];
}

template
const T&amp; matrix::operator()(unsigned i, unsigned j) const
{
    return data[i][j];
}

#endif</pre>
<h3>main.cpp</h3>
<pre>#include "matrix.h" //our matrix
#include  //cout'ing
#include    //for strings

int main()
{
        //declares a 3x3 matrix filled with "nil"
        matrix mat("nil");

        //modifies the value in the position (1, 1) to C++
        mat(1, 1) = "C++";

        //we can use the const atribbutes rows and columns
        //to check our limits
        for (int i = 0; i &lt; mat.rows; i++) {
                for (int j = 0; j &lt; mat.columns; j++) {
                        //getting, setting the value of matrix elements
                        //is the same way
                        std::cout &lt;&lt; mat(i, j) &lt;&lt; &#39; &#39;;
                }

                std::cout &lt;&lt; &#39;\n&#39;;
        }

        std::cout &lt;&lt; &#39;\n&#39;;

        matrix ones(1), identity;
        //copy
        identity = ones;

        //so silly
        for (int i = 0; i &lt; identity.rows; i++) {
                for (int j = i; j &lt; identity.columns; j++) {
                        if (i != j) {
                                identity(i, j) = identity(j, i) = 0;
                        }
                }
        }

        for (int i = 0; i &lt; identity.rows; i++) {
                for (int j = 0; j &lt; identity.columns; j++) {
                        std::cout &lt;&lt; identity(i, j) &lt;&lt; &#39; &#39;;
                }

                std::cout &lt;&lt; &#39;\n&#39;;
        }

        return 0;
}
</pre>
<p>Como vocês puderam notar, a forma de acesso e modificação (get, set) dos elementos da matriz é da mesma forma. Outra coisa que podemos notar é que passamos o tipo e a quantidade de linhas e colunas direto no template. A quantidade de linha e colunas passada <span style="text-decoration:underline;">deve</span> ser uma constante.</p>
<p>Bom, até mais.</p>
<p><strong><span style="color:#ff0000;">obs.:</span> Eu odeio profundamente o source highlight bugado do WordPress que converte todos os meus &lt; e &gt; e etc. para &amp;lt; &amp;gt;. Por isso os fontes acima não estão com hl.</strong></p>
<p>Agora sim, até mais.</p>
Posted in C/C++, Estruturas de Dados, Programação Tagged: cpp, matriz, template <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/murilo.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/murilo.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/murilo.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/murilo.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/murilo.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/murilo.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/murilo.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/murilo.wordpress.com/296/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/murilo.wordpress.com/296/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/murilo.wordpress.com/296/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=296&subd=murilo&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://murilo.wordpress.com/2009/10/12/static-template-matrix-uma-abordagem-diferente/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/26488a105af7db00ea8e870aebed57b5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Murilo Adriano</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2008/10/cpp.png" medium="image">
			<media:title type="html">C++</media:title>
		</media:content>
	</item>
		<item>
		<title>Regional da Maratona de Programação 2009</title>
		<link>http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/</link>
		<comments>http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 01:31:00 +0000</pubDate>
		<dc:creator>Murilo Adriano</dc:creator>
				<category><![CDATA[Cotidiano]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://murilo.wordpress.com/?p=238</guid>
		<description><![CDATA[Considerações
Bem, eu ainda não tinha escrito nada sobre a fase regional da XIV Maratona de Programação que ocorreu dia 19 de setembro por falta de tempo e porque não havia recebido as fotos do evento.
O primeiro ponto que quero destacar é a estrutura da regional aqui de Goiânia. Não deixou nada a desejar! Ambiente ótimo, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=238&subd=murilo&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h2>Considerações</h2>
<p>Bem, eu ainda não tinha escrito nada sobre a fase regional da XIV Maratona de Programação que ocorreu dia 19 de setembro por falta de tempo e porque não havia recebido as fotos do evento.</p>
<p>O primeiro ponto que quero destacar é a estrutura da regional aqui de Goiânia. Não deixou nada a desejar! Ambiente ótimo, infra-estrutura boa, máquinas, espaço, equipamento, organização. Tenho que parabenizar os professores que organizaram o evento, principalmente os professores Humberto Longo e Cláudio Nogueira do INF-UFG.</p>
<p>Esse ano (2º da regional de Goiânia) participaram 11 equipes de 5 instituições: ALFA (1), IFG-Morrinhos (2), UEG (2), PUC-GO (3) e INF-UFG (3).</p>
<div id="attachment_242" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-242" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08272/"><img class="size-full wp-image-242" title="Local da competição" src="http://murilo.files.wordpress.com/2009/10/dsc08272.jpg?w=640&#038;h=427" alt="Local da competição" width="640" height="427" /></a><p class="wp-caption-text">Local da competição</p></div>
<h2>Antes&#8230;</h2>
<p>Na chegada das equipes, pude reencontrar vários amigos, principalmente da PUC-GO e aí os assuntos ficaram em dia (conversamos sobre computação, lógico). O clima estava típico de uma decisão mesmo: em um segunto estávamos conversando e rindo, no outro estávamos tensos e pensativos.</p>
<div id="attachment_244" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-244" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08250/"><img class="size-full wp-image-244" title="Galera no corredor" src="http://murilo.files.wordpress.com/2009/10/dsc08250.jpg?w=640&#038;h=427" alt="Galera no corredor" width="640" height="427" /></a><p class="wp-caption-text">Galera no corredor</p></div>
<p>Antes de começar o warm-up, tivemos uma &#8220;mini-palestra&#8221; sobre as regras da maratona e de como usar o sistema BOCA e entregas de credenciais, logins/senhas e das plaquinhas que identificam as equipes.</p>
<div id="attachment_243" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-243" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08191/"><img class="size-full wp-image-243" title="Antes do warm-up" src="http://murilo.files.wordpress.com/2009/10/dsc08191.jpg?w=640&#038;h=427" alt="Antes do warm-up" width="640" height="427" /></a><p class="wp-caption-text">Pré-warm-up</p></div>
<p style="text-align:left;">O warm-up foi tranquilo, só pra testes mesmo. Parece que houve um problema no julgamento do problema &#8220;Bolhas e Baldes&#8221; que posteriormente foi solucionado.</p>
<p style="text-align:left;">Fim de warm-up, fomos almoçar. Como o campus é uma cidade a parte, quase todo mundo almoçou no mesmo lugar, tendo calculado o menor caminho ou não <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<h2 style="text-align:left;">Começa a maratona e aí vira tensão&#8230;</h2>
<p style="text-align:left;">Começa a competição e com 6 minutos, minha equipe (UFG &#8211; Monkeys) recebe o primeiro AC da competição: problema B &#8211; &#8220;Alarme&#8221;, Carlitos na implementação. Não sei dizer mas acho que esse foi um dos balões mais rápidos do Brasil.</p>
<p style="text-align:left;">Não demorou e nossa principal rival, a PUC-GO &#8211; Mother Focas, e a UFG &#8211; Sobrevientes do RU conseguiram também seus balões amarelos.</p>
<p style="text-align:left;">
<div id="attachment_255" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-255" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08331/"><img class="size-full wp-image-255" title="Focas" src="http://murilo.files.wordpress.com/2009/10/dsc08331.jpg?w=640&#038;h=427" alt="Os Focas" width="640" height="427" /></a><p class="wp-caption-text">Os Focas: Jackie, Divinera e Marciano</p></div>
<p style="text-align:left;">Até os 3 primeiros balões nós lideramos com uma certa vantagem no tempo. O problema foi quando os Focas conseguiram o quarto balão e nós não. Aí bateu aquele &#8220;caramba, agora fodeo!&#8221;. Aí focamos no problema (que por sinal era muito simples) e mandamos&#8230; Recebemos um NO bem grande e aí bateu o desespero. Consegui achar a lógica, conferi com meus colegas a corretude e, finalmente YES! Na hora olhamos para o Score que estava num telão na nossa frente e vimos que tinhamos passado os Focas (na verdade olhei o score mesmo assim deu um branco não saquei nada e tive que perguntar a nossa posição pra minha equipe [sic]).</p>
<div id="attachment_248" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-248" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08283/"><img class="size-full wp-image-248" title="Alguns balões" src="http://murilo.files.wordpress.com/2009/10/dsc08283.jpg?w=640&#038;h=427" alt="Alguns balões" width="640" height="427" /></a><p class="wp-caption-text">Alguns balões</p></div>
<p style="text-align:center;">
<p style="text-align:left;">Ficamos focados no problema G &#8211; &#8220;Registrador&#8221; e perdemos tempo, muito tempo [sic²]. Quando vimos, tinham 6 equipes com 4 balões, aí de novo bateu o pensamento &#8220;fodeo&#8221;&#8230;</p>
<p style="text-align:left;">No freeze, conseguimos formular um algoritmo pro E &#8211; &#8220;Dragster&#8221; mas aí já era tarde&#8230; Estávamos exaustos e não conseguimos codificá-lo. Enquanto isso, eu estava tentando ter a sacada do F &#8211; &#8220;Torres de Celular&#8221; (pô, tava na cara e eu não enxerguei). E o freeze-time foi isso: Diego e Carlos no Dragster (esse dava hein) e eu tentando algo no Torres de Celular.</p>
<p style="text-align:left;">
<div id="attachment_250" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-250" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08335/"><img class="size-full wp-image-250" title="Nosso quarto balão" src="http://murilo.files.wordpress.com/2009/10/dsc08335.jpg?w=640&#038;h=427" alt="Nosso quarto balão" width="640" height="427" /></a><p class="wp-caption-text">Nosso quarto balão. Monkeys: Murilo, Carlos e Diego</p></div>
<p style="text-align:left;">A cada vez que nós víamos alguem teclando algo no freeze, dava um frio na barriga. Tentamos fazer uns &#8220;cortes&#8221; no registrador e mandamos várias outras vezes.</p>
<h2 style="text-align:left;">Score Final</h2>
<p>Por um problema na rede (ou de juízes engraçadinhos), o score final demorou uma eternidade após a competição a ser apresentado a nós (aproximadamente 4min e 30seg). Anunciado o vencedor, só alegria.</p>
<div id="attachment_256" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-256" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08358/"><img class="size-full wp-image-256" title="Comemoração" src="http://murilo.files.wordpress.com/2009/10/dsc08358.jpg?w=640&#038;h=427" alt="Comemoração" width="640" height="427" /></a><p class="wp-caption-text">Comemoração</p></div>
<h2>Mais algumas fotos</h2>
<div id="attachment_254" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-254" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08326/"><img class="size-full wp-image-254" title="PUC-GO Bit a bit" src="http://murilo.files.wordpress.com/2009/10/dsc08326.jpg?w=640&#038;h=427" alt="PUC-GO Bit a bit" width="640" height="427" /></a><p class="wp-caption-text">PUC-GO Bit a bit: Douttor, Mauricinho e Loos</p></div>
<div id="attachment_253" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-253" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08325/"><img class="size-full wp-image-253" title="UFG - Sons of a Bit" src="http://murilo.files.wordpress.com/2009/10/dsc08325.jpg?w=640&#038;h=427" alt="UFG - Sons of a Bit" width="640" height="427" /></a><p class="wp-caption-text">UFG - Sons of a Bit: Nemo, Will e PC</p></div>
<div id="attachment_251" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-251" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08339/"><img class="size-full wp-image-251" title="UFG - Sobreviventes do RU" src="http://murilo.files.wordpress.com/2009/10/dsc08339.jpg?w=640&#038;h=427" alt="UFG - Sobreviventes do RU" width="640" height="427" /></a><p class="wp-caption-text">UFG - Sobreviventes do RU: Everton, Will e Lup</p></div>
<p><a rel="attachment wp-att-252" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08344/"><img class="aligncenter size-full wp-image-252" title="dsc08344" src="http://murilo.files.wordpress.com/2009/10/dsc08344.jpg?w=640&#038;h=427" alt="dsc08344" width="640" height="427" /></a></p>
<div id="attachment_258" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-258" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08342/"><img class="size-full wp-image-258" title="A única competidora" src="http://murilo.files.wordpress.com/2009/10/dsc08342.jpg?w=640&#038;h=427" alt="A única competidora" width="640" height="427" /></a><p class="wp-caption-text">A única competidora, o japa e o barba</p></div>
<div id="attachment_259" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-259" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08374/"><img class="size-full wp-image-259" title="Os melança" src="http://murilo.files.wordpress.com/2009/10/dsc08374.jpg?w=640&#038;h=427" alt="Os melança" width="640" height="427" /></a><p class="wp-caption-text">Os melança</p></div>
<h2>Premiação</h2>
<p>É&#8230; teve premiação com direito a reitor e tudo mais. Auditório cheio e prêmios para os vencedores <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>As três primeiras equipes ganharam camisetas geeks, medalhas e trófeus além de um livro (alguns dos prêmios concedidos pela SistemasAbertos).</p>
<p>Nós da Monkeys ganhamos uma camiseta personalizada da Maratona de Programação, como essa abaixo do Longo branca.</p>
<div id="attachment_263" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-263" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc04099/"><img class="size-full wp-image-263" title="3º Lugar - UFG - Sons of a Bit" src="http://murilo.files.wordpress.com/2009/10/dsc04099.jpg?w=640&#038;h=480" alt="3º Lugar - UFG - Sons of a Bit" width="640" height="480" /></a><p class="wp-caption-text">3º Lugar - UFG - Sons of a Bit e o coach Humberto Longo</p></div>
<div id="attachment_264" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-264" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc04101/"><img class="size-full wp-image-264" title="2º Lugar - PUC-GO - MotherFocas" src="http://murilo.files.wordpress.com/2009/10/dsc04101.jpg?w=640&#038;h=480" alt="2º Lugar - PUC-GO - MotherFocas" width="640" height="480" /></a><p class="wp-caption-text">2º Lugar - PUC-GO - MotherFocas, pró-reitora de graduação e o coach Alexandre</p></div>
<div id="attachment_266" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-266" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc04103/"><img class="size-full wp-image-266" title="1º Lugar - UFG - Monkeys" src="http://murilo.files.wordpress.com/2009/10/dsc04103.jpg?w=640&#038;h=480" alt="1º Lugar - UFG - Monkeys" width="640" height="480" /></a><p class="wp-caption-text">1º Lugar - UFG - Monkeys, coach: Humberto Longo e o reitor</p></div>
<div id="attachment_262" class="wp-caption aligncenter" style="width: 650px"><a rel="attachment wp-att-262" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/pict0088/"><img class="size-full wp-image-262" title="MONKEYS" src="http://murilo.files.wordpress.com/2009/10/pict0088.jpg?w=640&#038;h=480" alt="MONKEYS" width="640" height="480" /></a><p class="wp-caption-text">MONKEYS</p></div>
<h2>E agora&#8230;</h2>
<div id="attachment_268" class="wp-caption aligncenter" style="width: 387px"><a rel="attachment wp-att-268" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/cartaz/"><img class="size-full wp-image-268" title="Final Nacional em Campinas" src="http://murilo.files.wordpress.com/2009/10/cartaz.jpg?w=377&#038;h=560" alt="Final Nacional em Campinas" width="377" height="560" /></a><p class="wp-caption-text">Final Nacional em Campinas</p></div>
<p>Rumo a Tóquio, ops, Harbin na China!! <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div class="mceTemp mceIEcenter">
<dl class="wp-caption aligncenter">
<dt class="wp-caption-dt"><a rel="attachment wp-att-269" href="http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/dsc08299/"><img class="size-full wp-image-269" title="Ballon Face" src="http://murilo.files.wordpress.com/2009/10/dsc08299.jpg?w=640&#038;h=427" alt="Ballon Face" width="640" height="427" /></a> </dt>
</dl>
</div>
<p>O <a title="Maratona" href="http://www.inf.ufg.br/maratona/" target="_blank">scoreboard, clarifications e etc podem ser visualizados aqui</a>.</p>
Posted in Cotidiano, Programação  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/murilo.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/murilo.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/murilo.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/murilo.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/murilo.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/murilo.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/murilo.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/murilo.wordpress.com/238/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/murilo.wordpress.com/238/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/murilo.wordpress.com/238/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=238&subd=murilo&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://murilo.wordpress.com/2009/10/09/regional-da-maratona-de-programacao-2009/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/26488a105af7db00ea8e870aebed57b5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Murilo Adriano</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08272.jpg" medium="image">
			<media:title type="html">Local da competição</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08250.jpg" medium="image">
			<media:title type="html">Galera no corredor</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08191.jpg" medium="image">
			<media:title type="html">Antes do warm-up</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08331.jpg" medium="image">
			<media:title type="html">Focas</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08283.jpg" medium="image">
			<media:title type="html">Alguns balões</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08335.jpg" medium="image">
			<media:title type="html">Nosso quarto balão</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08358.jpg" medium="image">
			<media:title type="html">Comemoração</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08326.jpg" medium="image">
			<media:title type="html">PUC-GO Bit a bit</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08325.jpg" medium="image">
			<media:title type="html">UFG - Sons of a Bit</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08339.jpg" medium="image">
			<media:title type="html">UFG - Sobreviventes do RU</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08344.jpg" medium="image">
			<media:title type="html">dsc08344</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08342.jpg" medium="image">
			<media:title type="html">A única competidora</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08374.jpg" medium="image">
			<media:title type="html">Os melança</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc04099.jpg" medium="image">
			<media:title type="html">3º Lugar - UFG - Sons of a Bit</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc04101.jpg" medium="image">
			<media:title type="html">2º Lugar - PUC-GO - MotherFocas</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc04103.jpg" medium="image">
			<media:title type="html">1º Lugar - UFG - Monkeys</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/pict0088.jpg" medium="image">
			<media:title type="html">MONKEYS</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/cartaz.jpg" medium="image">
			<media:title type="html">Final Nacional em Campinas</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/dsc08299.jpg" medium="image">
			<media:title type="html">Ballon Face</media:title>
		</media:content>
	</item>
		<item>
		<title>Trabalho Em Equipe</title>
		<link>http://murilo.wordpress.com/2009/10/09/trabalho-em-equipe/</link>
		<comments>http://murilo.wordpress.com/2009/10/09/trabalho-em-equipe/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 16:58:27 +0000</pubDate>
		<dc:creator>Murilo Adriano</dc:creator>
				<category><![CDATA[Cotidiano]]></category>
		<category><![CDATA[equipe]]></category>
		<category><![CDATA[maratona]]></category>

		<guid isPermaLink="false">http://murilo.wordpress.com/?p=231</guid>
		<description><![CDATA[Pessoal não ando postando algo aqui porque estou muito sem tempo mesmo. Meu time (UFG &#8211; Monkeys) passou para a final nacional da maratona de programação, as matérias do período estão bastante árduas e comecei a estagiar na universidade por isso a falta de tempo.
Encerro esse post com uma imagem que achei na grande rede [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=231&subd=murilo&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Pessoal não ando postando algo aqui porque estou muito sem tempo mesmo. Meu time (UFG &#8211; Monkeys) <a href="http://maratona.ime.usp.br/vagas09.html">passou</a> para a final nacional da <a href="http://maratona.ime.usp.br/">maratona de programação</a>, as matérias do período estão bastante árduas e comecei a estagiar na universidade por isso a falta de tempo.</p>
<p>Encerro esse post com uma imagem que achei na grande rede sobre trabalho em equipe:<br />
<a rel="attachment wp-att-232" href="http://murilo.wordpress.com/2009/10/09/trabalho-em-equipe/trab/"><img class="aligncenter size-full wp-image-232" title="Trabalho em Equipe" style="border:0;" src="http://murilo.files.wordpress.com/2009/10/trab.jpg?w=400&#038;h=491" alt="Trabalho em Equipe" width="400" height="491" /></a></p>
<p>Esse é o caminho <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
Posted in Cotidiano Tagged: equipe, maratona <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/murilo.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/murilo.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/murilo.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/murilo.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/murilo.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/murilo.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/murilo.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/murilo.wordpress.com/231/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/murilo.wordpress.com/231/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/murilo.wordpress.com/231/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=231&subd=murilo&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://murilo.wordpress.com/2009/10/09/trabalho-em-equipe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/26488a105af7db00ea8e870aebed57b5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Murilo Adriano</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/10/trab.jpg" medium="image">
			<media:title type="html">Trabalho em Equipe</media:title>
		</media:content>
	</item>
		<item>
		<title>C++: Uma introdução a Threads com boost::thread</title>
		<link>http://murilo.wordpress.com/2009/08/06/c-uma-introducao-a-threads-com-boost-thread/</link>
		<comments>http://murilo.wordpress.com/2009/08/06/c-uma-introducao-a-threads-com-boost-thread/#comments</comments>
		<pubDate>Thu, 06 Aug 2009 21:06:23 +0000</pubDate>
		<dc:creator>Murilo Adriano</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[boost]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[functor]]></category>
		<category><![CDATA[thread]]></category>

		<guid isPermaLink="false">http://murilo.wordpress.com/?p=214</guid>
		<description><![CDATA[Para quem ainda não conhece, Boost é um conjunto de bibliotecas C++ multiplataforma que trabalha bem com a STL e é muito bem aceita na comunidade. Já existem dez bibliotecas Boost incluídas no C++ TR1 e que estarão no C++0x além de muitas outras que estarão no C++0x e que atualmente não estão no TR1.
Para [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=214&subd=murilo&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://murilo.wordpress.com/2009/08/06/c-uma-introducao-a-threads-com-boost-thread/boost/" rel="attachment wp-att-223"><img src="http://murilo.files.wordpress.com/2009/08/boost.png?w=277&#038;h=86" alt="boost" title="boost" width="277" height="86" class="alignright size-full wp-image-223" style="border:0;" /></a>Para quem ainda não conhece, <a href="http://www.boost.org/">Boost</a> é um conjunto de bibliotecas C++ multiplataforma que trabalha bem com a STL e é muito bem aceita na comunidade. Já existem dez bibliotecas Boost incluídas no C++ <a href="http://en.wikipedia.org/wiki/C%2B%2B_Technical">TR1</a> e que estarão no C++0x além de muitas outras que estarão no C++0x e que atualmente não estão no TR1.</p>
<p>Para instalar o boost siga esse <a href="www.boost.org/doc/libs/1_39_0/more/getting_started/index.html">Getting Started</a>.</p>
<p>Fazer threads com boost::thread é muito simples. Basta criar uma função ou um functor e passar pro construtor da classe boost::thread:</p>
<pre class="brush: cpp;">
class functor
{
public: void operator()() {};
};

functor::operator()()
{
	/* content */
}

void function()
{
	/* content */
}

functor obj;
boost::thread tObj(obj); //passa uma cópia de obj
boost::thread tObjRef(boost::ref(obj)); //passa uma referência para obj
boost::thread tFunc(&amp;funcao);

//inicia a execução das threads
tObj.join();
tObjRef.join();
tFunc.join();

//ou pode-se criar grupos de threads

boost::thread_group my_threads;
my_threads.create_thread(obj);
my_threads.create_thread(boost::ref(obj));
my_threads.create_thread(&amp;function);

my_threads.join_all(); //inicia a execução de todas as threads desse grupo
</pre>
<p>Para ilustrar como funciona, fiz dois programinhas simples:</p>
<h3>cin.cpp</h3>
<pre class="brush: cpp;">
#include &lt;iostream&gt;
#include &lt;boost/thread/thread.hpp&gt;
#include &lt;boost/thread/xtime.hpp&gt;

//determina se o usuário já entrou com o número
bool flag = false;

struct in
{
	int n;

	in() : n(0) {};

	void operator()()
	{
		//try to read the number
		while (!(std::cin &gt;&gt; n)) {
			std::cin.clear();
			std::cin.ignore(10000, '\n');

			std::cout &lt;&lt; &quot;Enter a valid number&quot; &lt;&lt; std::endl;
		}

		flag = true;
	}

};

void my_alarm()
{
	while (!flag) {
		//shows the message
		std::cout &lt;&lt; &quot;Enter a number&quot; &lt;&lt; std::endl;

		boost::xtime time;
		boost::xtime_get(&amp;time, boost::TIME_UTC); //current time

		time.sec += 5; //adds 5 secs to time
		//sleep 5 secs
		boost::thread::sleep(time);
	}

	//exiting function
	std::cout &lt;&lt; &quot;Alarm finished&quot; &lt;&lt; std::endl;
}

int main()
{
	in test;

	//create the two threads
	boost::thread tin(boost::ref(test));
	boost::thread tal(&amp;my_alarm);

	//start
	tin.join();
	tal.join();

	//show the user's number
	std::cout &lt;&lt; &quot;Ok &quot; &lt;&lt; test.n &lt;&lt; std::endl;

	return 0;
}
</pre>
<p>Esse programa é composto por duas threads (fora o fluxo principal) uma que é responsável por fazer a leitura de um número e a outra que fica a cada 5 segundos mostrando uma mensagem &#8220;Enter a number&#8221; enquanto o usuário não digitar um número válido. Quando o usuário digita um número válido, a <code>flag</code> é setada e os loops das duas threads são finalizados. Finalmente quando as duas threads são finalizadas, o fluxo normal de <code>main()</code> é reestabelecido e é mostrado o número digitado pelo usuário.</p>
<p>Lembrando que para usar boost::thread é necessário &#8220;linkar&#8221; a biblioteca ao programa. No caso do Linux é necessário linkar também a biblietca pthread em Windows &#8220;linkar&#8221; a win32api. No meu caso preferi usar linkagem estática.</p>
<div style="background:black;color:white;border:#CCC solid 1px;">
<code>murilo@blacksheep:~/programacao/boost$ g++ cin.cpp libboost_thread-gcc43-mt-1_39.a -o cin -lpthread<br />
murilo@blacksheep:~/programacao/boost$ ./cin<br />
Enter a number<br />
Enter a number<br />
naoehumnumero<br />
Enter a valid number<br />
Enter a number<br />
4<br />
Alarm finished<br />
Ok 4<br />
</code>
</div>
<p>O outro exempo que fiz é um programinha que faz a multiplicação de duas matrizes e &#8220;simultaneamente&#8221; (depende de processador e SO) mostra uma barra de progresso com o progresso da operação.</p>
<h3>multiplica.cpp</h3>
<pre class="brush: cpp;">
#include &lt;iostream&gt;
#include &lt;boost/thread/thread.hpp&gt;
#include &lt;boost/thread/xtime.hpp&gt;

const int MAX = 1000;

int A[MAX][MAX];
int B[MAX][MAX];
int C[MAX][MAX];

int porcentagem = 0;

void multiplica()
{
	int soma;	

	for (int i = 0; i &lt; MAX; i++) {
		for (int j = 0; j &lt; MAX; j++) {
			soma = 0;
			for (int k = 0; k &lt; MAX; k++) {
				soma += A[i][k] * B[k][j];
			}

			C[i][j] = soma;
		}
		if (i % 10 == 0) porcentagem++;
	}
}

void barra_de_progresso()
{
	int atual = 0;
	while (porcentagem != 100) {
		if (atual != porcentagem) {
			if (porcentagem % 10 == 0) {
				std::cout &lt;&lt; &quot;\b\b&quot; &lt;&lt; porcentagem &lt;&lt; '%';
			}
			else std::cout &lt;&lt; '=' &lt;&lt; std::flush;

			atual++;
		}
	}
}

int main()
{
	boost::thread tMultiplica(&amp;multiplica);
	boost::thread tProgresso(&amp;barra_de_progresso);

	boost::xtime inicio, fim;
	boost::xtime_get(&amp;inicio, boost::TIME_UTC);

	std::cout &lt;&lt; &quot;Iniciando a multiplicação de matrizes&quot; &lt;&lt; std::endl;

	tMultiplica.join();
	tProgresso.join();

	boost::xtime_get(&amp;fim, boost::TIME_UTC);

	std::cout &lt;&lt; &quot;\n\nProcesso terminado em &quot; &lt;&lt;
		(fim.sec - inicio.sec) &lt;&lt; &quot; segundos&quot; &lt;&lt; std::endl;

	return 0;
}
</pre>
<p>Saída:</p>
<div style="background:black;color:white;border:#CCC solid 1px;">
<code>murilo@blacksheep:~/programacao/boost/thr$ g++ multiplica.cpp libboost_thread-gcc43-mt-1_39.a -lpthread -o multiplica<br />
murilo@blacksheep:~/programacao/boost/thr$ ./multiplica<br />
Iniciando a multiplicação de matrizes<br />
=======10%=======20%=======30%=======40%=======50%=======60%=======70%=======80%=======90%=======100%</p>
<p>Processo terminado em 43 segundos<br />
</code>
</div>
<p>
Claro que o que menos nos importa nesse momento é o valor das matrizes e a multiplicação em si, por isso nem me dei ao trabalho de inicializar as matrizes nem de fazer nada com a matriz resultante.</p>
<p>Acredito que para uma introdução está bom e deu pra mostrar como é fazer programas com boost::thread com esses simples exemplos. Mais exemplos você pode encontrar na pasta libs do boost.</p>
<h3>Links:</h3>
<ul>
<li><a href="http://www.boost.org/doc/libs/1_39_0/doc/html/thread.html">Boost Thread</a></li>
<li><a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1745.pdf">TR1 paper</a></li>
</ul>
Posted in C/C++, Programação Tagged: boost, cpp, functor, thread <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/murilo.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/murilo.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/murilo.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/murilo.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/murilo.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/murilo.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/murilo.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/murilo.wordpress.com/214/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/murilo.wordpress.com/214/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/murilo.wordpress.com/214/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=214&subd=murilo&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://murilo.wordpress.com/2009/08/06/c-uma-introducao-a-threads-com-boost-thread/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/26488a105af7db00ea8e870aebed57b5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Murilo Adriano</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/08/boost.png" medium="image">
			<media:title type="html">boost</media:title>
		</media:content>
	</item>
		<item>
		<title>Como programar em C Orientado a Objetos</title>
		<link>http://murilo.wordpress.com/2009/08/05/como-programar-em-c-orientado-a-objetos/</link>
		<comments>http://murilo.wordpress.com/2009/08/05/como-programar-em-c-orientado-a-objetos/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 07:50:57 +0000</pubDate>
		<dc:creator>Murilo Adriano</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[objetos]]></category>
		<category><![CDATA[oop]]></category>
		<category><![CDATA[struct]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://murilo.wordpress.com/?p=196</guid>
		<description><![CDATA[Olá, hoje eu vou dar um tempo na série &#8220;Coisas simples de se fazer em C++ que alguns ainda complicam&#8221; e irei falar sobre uma experiência minha tentando alguma maneira de programar em C orientado a objetos.
Sei que muitos vão pensar &#8220;pra quê isso?&#8221; ou dizer que é péssimo fazer isso ou coisa parecida, mas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=196&subd=murilo&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Olá, hoje eu vou dar um tempo na série &#8220;<a href="http://murilo.wordpress.com/2009/07/27/aplicar-funcoes-aos-elementos-de-um-conteiner-stl/">Coisas simples de se fazer em C++ que alguns ainda complicam</a>&#8221; e irei falar sobre uma experiência minha tentando alguma maneira de programar em C orientado a objetos.</p>
<p>Sei que muitos vão pensar &#8220;pra quê isso?&#8221; ou dizer que é péssimo fazer isso ou coisa parecida, mas o intuito desse post é outro: é mostrar o que é possível fazer ou até mesmo enxergar alguma utilidade nisso. Nesse blog, procuro colocar <a href="http://murilo.wordpress.com/2009/05/21/como-implementar-facilmente-getters-e-setters-em-c/">coisas diferentes</a>, <a href="http://murilo.wordpress.com/2009/01/14/comparacao-de-desempenho-stdvector-vs-array/">curiosidades</a> sobre <a href="http://murilo.wordpress.com/2008/11/14/direito-de-defesa-ao-cmaismais/">programação e linguagens</a>, porque acho que conteúdo &#8220;normal&#8221; já existem em muitos lugares na grande rede.</p>
<p>O que me instigou a fazer isso foi um post no CODARE <a href="http://codare.net/2009/08/04/c-escondendo-o-conteudo-de-structs-com-tipos-incompletos/">&#8220;C: Escondendo o conteúdo de structs com tipos incompletos&#8221;</a> de autoria do <a href="http://codare.net/author/tmpsantos/">Thiago Santos</a>, no qual ele cita sobre usar com orientação a objetos em C.</p>
<p>Li, achei interessante e quis, vamos dizer assim, dar um cara mais parecida de orientação a objetos ao que ele fez.</p>
<p>O primeiro passo foi pensar em como funcionam os famosos objetos.<br />
Uma classe em uma linguagem orientada a objetos geralmente tem 2 tipos de elementos:</p>
<ul>
<li>Elementos de classe: elementos (funções e variáveis estáticas) que só são criados uma vez, todos os objetos da classe tem acesso ao mesmo elemento.</li>
<li>Elementos de instância (ou objeto): elementos (atributos) que são criadas para cada objeto instanciado.</li>
</ul>
<p>Ou seja:</p>
<pre class="brush: cpp;">
class Animal
{
        int age;
        std::string specie;
        static int count;
public:
        int birthday();
};
</pre>
<p>No exemplo acima, <code>age</code> e <code>specie</code> são elementos de instância, ou seja, cada objeto têm o seus próprios. Já <code>count</code> e <code>birthday()</code> são de classe, pois todos os objetos dessa classe utilizarão o mesmo. O que ocorre no caso de funções é que na chamada da função, um ponteiro do objeto chamador é passado para a função. Isso faz com que não precise a cada instância de objeto criar uma nova função já que elas fazem a mesma coisa.</p>
<p>Algo como:</p>
<pre class="brush: cpp;">
Animal animal, animal2;

//lembrando que é APENAS uma ilustração do que acontece
//não é assim que é realmente implementado mas é a mesma idéia
//uma função só para todos os objetos de uma classe

animal.birthday(); //vtable::animal::birthday(&amp;animal);
animal2.birthday(); //vtable::animal::birthday(&amp;animal2);
</pre>
<p>A função <code>birthday()</code> é a mesma para as duas chamadas, o que muda é o ponteiro para os dados de cada objeto.</p>
<p>A minha implementação seguiu a idéia do Thiago Santos: uma classe <code>person</code> que tem os atributos <code>name</code> e <code>age</code> funções para instanciar, imprimir o nome e idade e deletar o objeto.</p>
<p>Vamos então dar uma olhada no nosso <em>header</em><strong>person.h</strong>:</p>
<pre class="brush: cpp;">
#ifndef PERSON_H__
#define PERSON_H__

//Incomplete type declaration
typedef struct person_private person_private;

typedef struct person {
	//&quot;private&quot; data.
	person_private* data;

	//&quot;class&quot; functions
	void (*free)();
	void (*print)();
} person;

//instatiate a new person
person* new_person(const char*, int);

//pointer to the actual person in the context
person* __actual_person;

//sets the actual person
person* _(person* obj);

#endif
</pre>
<p>Nosso header contém a declaração incompleta de <code>person_private</code> <a href="http://codare.net/2009/08/04/c-escondendo-o-conteudo-de-structs-com-tipos-incompletos/">leia aqui para saber o porquê</a>, a definição da nossa &#8220;classe&#8221; <code>person</code>, as declarações das funções <code>new_person()</code> e <code>_()</code> e um ponteiro <code>__actual_person</code>.</p>
<p>Nossa &#8220;classe&#8221; <code>person</code> contém um ponteiro <code>data</code> para os dados que não poderão ser acessíveis através do objeto (<code>name</code>, <code>age</code>) além de ponteiros para funções (que serão nossos &#8220;métodos&#8221;).</p>
<p>A função <code>new_person</code> simplesmente instancia um objeto do tipo <code>person</code>.</p>
<p>O ponteiro <code>__actual_person</code> irá funcionar como o ponteiro passado para as funções de classe. Através do ponteiro saberemos qual objeto chamou a função.</p>
<p>A função <code>_()</code> seta o ponteiro <code>__actual_person</code> para que as funções sejam corretamente chamadas. Nota: não é thread safe. (hehehe)</p>
<p>Vamos ao nosso <code>person.c</code>:</p>
<pre class="brush: cpp;">
#include &quot;person.h&quot;
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

//private data... visible only by the functions below
struct person_private
{
	char* name;
	int age;
};

//a &quot;manual destructor&quot;
void free_person()
{
	free(__actual_person-&gt;data-&gt;name);
	free(__actual_person-&gt;data);
	free(__actual_person);

        puts(&quot;Person sucessfuly freed!\nBye&quot;);
}

//prints
void print_person()
{
	printf(&quot;%s -: %d\n&quot;, __actual_person-&gt;data-&gt;name,
		 __actual_person-&gt;data-&gt;age);
}

person* new_person(const char* name, int age)
{

	//Allocate the object
	person* new = (person*)malloc(sizeof(person));
	new-&gt;data = (person_private*)malloc(sizeof(person_private));

	//Initialize the data
	new-&gt;data-&gt;name = (char*)malloc(strlen(name) * sizeof(char) + 1);
	strcpy(new-&gt;data-&gt;name, name);

	new-&gt;data-&gt;age = age;

	//Set the functions pointers
	new-&gt;print = print_person;
	new-&gt;free = free_person;

	return new;
}

//must call the objects with this function
person* _(person* obj)
{
	__actual_person = obj;
	return obj;
}
</pre>
<p>O que temos aí é a função <code>_()</code> que seta o objeto atual (<code>__actual_person</code>) para que possa ser utilizado a função com o objeto certo, a função <code>new_person</code> que funciona como nosso construtor, as outras duas funções que são os &#8220;métodos da classe&#8221; <code>print</code> e <code>free</code> e a definição da estrutura <code>person_private</code> que contém os atributos da classe.<br />
Os comentários ajudam no resto <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</p>
<p>Vamos então ver o <code>main.c</code> que é o nosso teste:</p>
<pre class="brush: cpp;">
#include &lt;stdio.h&gt;
#include &quot;person.h&quot;

int main()
{
	//Instantiates 2 persons
	person* person1 = new_person(&quot;Murilo&quot;, 21);
	person* person2 = new_person(&quot;Rovane&quot;, 47);

	//print
	_(person1)-&gt;print();
	_(person2)-&gt;print();

	//free
	_(person1)-&gt;free();
	_(person2)-&gt;free();
}
</pre>
<p>Eis o resultado:</p>
<div style="border:1px #FFF dashed;background:black;color:white;padding:2px;">
<code>murilo@blacksheep:~/programacao/cobject$ gcc main.c person.c<br />
murilo@blacksheep:~/programacao/cobject$ ./a.out<br />
Murilo -: 21<br />
Rovane -: 47<br />
Person sucessfuly freed!<br />
Bye<br />
Person sucessfuly freed!<br />
Bye<br />
</code>
</div>
<p>Nota: deve-se usar sempre a função <code>_()</code> para utilizar o objeto.</p>
<p>Fiquei pensando se tem como fazer uma espécie de gerador de classes nesse formato no próprio C (com macros por exemplo). Vou procurar saber se existe algo a respeito, são 04h40min da mardugada não estou mais com boas idéias.</p>
<p>Qualquer sugestão, bug, idéia, reclamação, estamos aí!</p>
Posted in C/C++, Programação Tagged: c, classes, objetos, oop, struct, tips <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/murilo.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/murilo.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/murilo.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/murilo.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/murilo.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/murilo.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/murilo.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/murilo.wordpress.com/196/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/murilo.wordpress.com/196/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/murilo.wordpress.com/196/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=196&subd=murilo&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://murilo.wordpress.com/2009/08/05/como-programar-em-c-orientado-a-objetos/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/26488a105af7db00ea8e870aebed57b5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Murilo Adriano</media:title>
		</media:content>
	</item>
		<item>
		<title>Coisas simples de se fazer em C++ que alguns ainda complicam #2 – Aplicar funções aos elementos de um contêiner STL</title>
		<link>http://murilo.wordpress.com/2009/07/27/aplicar-funcoes-aos-elementos-de-um-conteiner-stl/</link>
		<comments>http://murilo.wordpress.com/2009/07/27/aplicar-funcoes-aos-elementos-de-um-conteiner-stl/#comments</comments>
		<pubDate>Mon, 27 Jul 2009 22:16:46 +0000</pubDate>
		<dc:creator>Murilo Adriano</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[STL]]></category>

		<guid isPermaLink="false">http://murilo.wordpress.com/?p=190</guid>
		<description><![CDATA[Bom, essa é a segunda parte da série e vamos falar sobre uma maneira simples de aplicar uma função à todos os elementos de um contêiner STL (vector, list, deque, stack, etc) ou à todos os elementos de uma std::string.
Para isso usaremos a função std::transform().
No nosso primeiro exemplo, usaremos transform() com uma função que retorna [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=190&subd=murilo&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Bom, essa é a segunda parte da <a href="http://pt-br.wordpress.com/tag/cppfacil/">série</a> e vamos falar sobre uma maneira simples de aplicar uma função à todos os elementos de um contêiner STL (vector, list, deque, stack, etc) ou à todos os elementos de uma std::string.</p>
<p>Para isso usaremos a função <em>std::transform()</em>.</p>
<p>No nosso primeiro exemplo, usaremos t<em>ransform()</em> com uma função que retorna o quadrado de um número.</p>
<pre class="brush: cpp;">
#include &lt;iostream&gt; //cout
#include &lt;algorithm&gt; //transform()
#include &lt;vector&gt;

using namespace std;

int quadrado(int num)
{
        return num * num;
}

int main()
{
        vector&lt;int&gt; vetor;
        for (int i = 0; i &lt; 10; i++) vetor.push_back(i);

        transform(vetor.begin(), //iterator pro incio do range desejado
                vetor.end(), //iterator para o fim do range
                vetor.begin(), //iterator para conteiner o destino
                quadrado //função a ser aplicada
        );

        //imprime os valores.
        vector&lt;int&gt;::iterator it;
        for (it = vetor.begin(); it != vetor.end(); it++) {
                cout &lt;&lt; *it &lt;&lt; ' ';
        }
        cout &lt;&lt; endl;
        return 0;
}
</pre>
<h3>Saida:</h3>
<p><code style="background:black;color:white;">0 1 4 9 16 25 36 49 64 81</code></p>
<p>No segundo exemplo, mostramos como converter uma std::string para minúsculo com transform():</p>
<pre class="brush: cpp;">
#include &lt;iostream&gt; //cout
#include &lt;algorithm&gt; //transform()
#include &lt;string&gt;
#include &lt;cctype&gt; //tolower, toupper

using namespace std;

int main()
{
        string url = &quot;HTTP://MURILO.WORDPRESS.COM&quot;;
        transform(url.begin(), url.end(), //origem
                url.begin(), //destino
                ::tolower); //função tolower da &lt;cctype&gt; (necessário ::)

        cout &lt;&lt; url &lt;&lt; endl;
        return 0;
}
</pre>
<h3>Saída</h3>
<p><code style="background:black;color:white;">http://murilo.wordpress.com</code></p>
<p>transform() também aceita funções com dois parâmetros, para que possamos aplicar uma função aos valores de dois contêineres e armazenarmos em um:</p>
<pre class="brush: cpp;">
#include &lt;iostream&gt; //cout
#include &lt;algorithm&gt; //transform()
#include &lt;complex&gt;
#include &lt;vector&gt;

using namespace std;

complex&lt;int&gt; func(int real, int imag)
{
        return complex&lt;int&gt;(real, imag);
}

int main()
{
        vector&lt;int&gt; real; //parte real
        vector&lt;int&gt; imag; //parte imaginaria

        real.push_back(1);
        real.push_back(3);
        real.push_back(152);

        imag.push_back(5);
        imag.push_back(8);
        imag.push_back(12);

        vector&lt; complex&lt;int&gt; &gt; complexo(3); //reserva 3 posicoes

        transform(real.begin(), real.end(), //origem
                imag.begin(), //origem do segund
                complexo.begin(), //destino
                func //função
        ); 

        vector&lt; complex&lt;int&gt; &gt;::iterator it;
        for (it = complexo.begin(); it != complexo.end(); it++) {
                cout &lt;&lt; *it &lt;&lt; endl;
        }

        return 0;
}
</pre>
<h3>Saída:</h3>
<p><code style="background:black;color:white;">(1,5)<br />
(3,8)<br />
(152,12)<br />
</code></p>
<p>Até a próxima.<br />
Ver a <a href="http://murilo.wordpress.com/2009/07/26/coisas-simples-de-se-fazer-em-c-que-alguns-ainda-complicam-1-imprimir-valores-de-conteineres-stl/">primeira parte da série</a>.</p>
Posted in C/C++, Programação, STL  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/murilo.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/murilo.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/murilo.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/murilo.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/murilo.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/murilo.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/murilo.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/murilo.wordpress.com/190/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/murilo.wordpress.com/190/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/murilo.wordpress.com/190/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=190&subd=murilo&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://murilo.wordpress.com/2009/07/27/aplicar-funcoes-aos-elementos-de-um-conteiner-stl/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/26488a105af7db00ea8e870aebed57b5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Murilo Adriano</media:title>
		</media:content>
	</item>
		<item>
		<title>Coisas simples de se fazer em C++ que alguns ainda complicam #1 &#8211; Imprimir valores de contêineres STL</title>
		<link>http://murilo.wordpress.com/2009/07/26/coisas-simples-de-se-fazer-em-c-que-alguns-ainda-complicam-1-imprimir-valores-de-conteineres-stl/</link>
		<comments>http://murilo.wordpress.com/2009/07/26/coisas-simples-de-se-fazer-em-c-que-alguns-ainda-complicam-1-imprimir-valores-de-conteineres-stl/#comments</comments>
		<pubDate>Sun, 26 Jul 2009 17:21:27 +0000</pubDate>
		<dc:creator>Murilo Adriano</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[arquivo]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[cppfacil]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[iterator]]></category>
		<category><![CDATA[STL]]></category>
		<category><![CDATA[vector]]></category>

		<guid isPermaLink="false">http://murilo.wordpress.com/?p=184</guid>
		<description><![CDATA[Bom, vou fazer uma série de posts dizendo sobre coisas simples de se fazer em C++ que muitos ainda complicam. A idéia surgiu do post de um colega.
O primeiro post dessa série é sobre como imprimir facilmente todos os valores de um contêiner STL.
Iremos usar para isso, ostream_iterators que fornecem iterators para escrita em streams [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=184&subd=murilo&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Bom, vou fazer uma série de posts dizendo sobre coisas simples de se fazer em C++ que muitos ainda complicam. A idéia surgiu do <a href="http://garotosopa.wordpress.com/2009/05/30/7-coisas-simples-em-php-que-alguns-ainda-complicam/">post de um colega</a>.</p>
<p>O primeiro post dessa série é sobre como imprimir facilmente todos os valores de um contêiner STL.</p>
<p>Iremos usar para isso, <code>ostream_iterator</code>s que fornecem iterators para escrita em streams de saída. <code>ostream_iterator</code> está declarado em <code></code>.</p>
<h3>Vamos ao nosso exemplo:</h3>
<pre class="brush: cpp;">
#include &lt;iostream&gt; //para cout
#include &lt;iterator&gt; //para ostream_iterator
#include &lt;vector&gt;

using namespace std;

int main()
{
        vector&lt;int&gt; v(5);
        v[0] = 1;
        v[1] = 1;
        v[2] = 2;
        v[3] = 3;
        v[4] = 5;

        //copia todo o vetor [begin() -&gt; end()) pro cout com um  &quot;, &quot; de delimitador
        copy(v.begin(), v.end(), ostream_iterator&lt;int&gt;(cout, &quot;, &quot;));
}
</pre>
<h3>Resultado:</h3>
<p><code style="background:black;color:white;"><br />
1, 1, 2, 3, 5,<br />
</code></p>
<p>A seguir um exemplo mais funcional, um gerador de arquivos CSV. Ao invés de usarmos o <code>ostream_iterator(cout, ",")</code>, utilizaremos <code>ostream_iterator(arquivo, ";")</code> que diz que que queremos passar strings para serem escritas em um arquivo de texto com o delimitador <code>";"</code>:</p>
<pre class="brush: cpp;">
#include &lt;fstream&gt; //para ofstream
#include &lt;iostream&gt; //para cerr
#include &lt;iterator&gt; //para ostream_iterator
#include &lt;vector&gt;
#include &lt;string&gt;

#define DELIMITADOR &quot;;&quot;

using namespace std;

int main()
{
        typedef vector&lt; vector&lt;string&gt; &gt; vvs;
        vvs csv(3); 

        //preenchendo
        vector&lt;string&gt; v;
        v[0] = &quot;'Murilo Adriano'&quot;;
        v[1] = &quot;'muriloufg(at)gmail(dot)com'&quot;;
        v[2] = &quot;8888-8888&quot;;
        v[3] = &quot;'murilo.wordpress.com'&quot;;
        csv[0] = v;

        vector&lt;string&gt; v2(4);
        v2[0] = &quot;'Outra Pessoa'&quot;;
        v2[1] = &quot;'outoemail(at)outrohost(dot)com'&quot;;
        v2[2] = &quot;9999-9999&quot;;
        v2[3] = &quot;'website.com'&quot;;
        csv[1] = v2;

        vector&lt;string&gt; v3(4);
        v3[0] = &quot;'Foo Bar'&quot;;
        v3[1] = &quot;'foo(at)bar(dot)com'&quot;;
        v3[2] = &quot;0000-0000&quot;;
        v3[3] = &quot;'foobar.com'&quot;;
        csv[2] = v3;       

        //tenta abrir o arquivo
        ofstream arquivo(&quot;planilha.csv&quot;);
        if (arquivo.is_open()) {
                vvs::iterator it;
                for (it = csv.begin(); it != csv.end(); it++) {
                        //escreve os elementos de cada item do vetor no arquivo
                        copy((*it).begin(), (*it).end(),
                                ostream_iterator&lt;string&gt;(arquivo, DELIMITADOR));

                        //quebra uma linha
                        arquivo &lt;&lt; '\n';
                }

                arquivo.close(); // fecha o arquivo
        }
        else {
                //se não foi possível abrir o arquivo
                cerr &lt;&lt; &quot;Falha ao abrir o arquivo\n&quot; &lt;&lt; endl;
        }
}
</pre>
<p>Após rodar o programa, abra o arquivo gerado no seu software de planilha eletrônica preferido e veja o resultado:</p>
<div id="attachment_185" class="wp-caption aligncenter" style="width: 544px"><a href="http://murilo.files.wordpress.com/2009/07/csv.png"><img src="http://murilo.files.wordpress.com/2009/07/csv.png?w=534&#038;h=86" alt="Arquivo gerado" title="csv" width="534" height="86" class="size-full wp-image-185" /></a><p class="wp-caption-text">Arquivo gerado pelo programa acima aberto no OpenOffice</p></div>
<p>É isso aí pessoal, nos próximos posts exploraremos mais o C++ e STL.<br />
Até a próxima.</p>
Posted in C/C++, Programação Tagged: arquivo, cpp, cppfacil, csv, iterator, STL, vector <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/murilo.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/murilo.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/murilo.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/murilo.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/murilo.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/murilo.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/murilo.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/murilo.wordpress.com/184/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/murilo.wordpress.com/184/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/murilo.wordpress.com/184/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=184&subd=murilo&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://murilo.wordpress.com/2009/07/26/coisas-simples-de-se-fazer-em-c-que-alguns-ainda-complicam-1-imprimir-valores-de-conteineres-stl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/26488a105af7db00ea8e870aebed57b5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Murilo Adriano</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2009/07/csv.png" medium="image">
			<media:title type="html">csv</media:title>
		</media:content>
	</item>
		<item>
		<title>Sobrecarga do operator++ para enums</title>
		<link>http://murilo.wordpress.com/2009/07/25/sobrecarga-operadores-enums/</link>
		<comments>http://murilo.wordpress.com/2009/07/25/sobrecarga-operadores-enums/#comments</comments>
		<pubDate>Sat, 25 Jul 2009 03:35:43 +0000</pubDate>
		<dc:creator>Murilo Adriano</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[enum]]></category>
		<category><![CDATA[sobrecarga]]></category>
		<category><![CDATA[tips]]></category>

		<guid isPermaLink="false">http://murilo.wordpress.com/?p=177</guid>
		<description><![CDATA[Mais uma trick com enums.
A sobrecarga de operadores podem facilitar o manuseio de enums. Abaixo está um exemplo de como pode ser útil a sobrecarga do operator++.

#include &#60;iostream&#62;

using std::cout;
using std::endl;

enum Semana
{
        DOM,
        SEG,
        TER,
 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=177&subd=murilo&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Mais uma <em>trick</em> com <a href="http://murilo.wordpress.com/2009/05/29/o-que-sao-enums-e-como-utiliza-los-melhor-em-c/">enums</a>.</p>
<p>A sobrecarga de operadores podem facilitar o manuseio de <a href="http://murilo.wordpress.com/2009/05/29/o-que-sao-enums-e-como-utiliza-los-melhor-em-c/">enums</a>. Abaixo está um exemplo de como pode ser útil a sobrecarga do operator++.</p>
<pre class="brush: cpp;">
#include &lt;iostream&gt;

using std::cout;
using std::endl;

enum Semana
{
        DOM,
        SEG,
        TER,
        QUA,
        QUI,
        SEX,
        SAB
};

Semana&amp; operator++(Semana&amp; dia) //pré-incremento
{
        return dia = static_cast&lt;Semana&gt;((dia + 1) % 7);
}

Semana&amp; operator++(Semana&amp; dia, int) //pós-incremento
{
        return dia = static_cast&lt;Semana&gt;((dia + 1) % 7);
}

int main()
{
        Semana dia = SEX;
        cout &lt;&lt; dia &lt;&lt; endl; // SEX (5)
        cout &lt;&lt; ++dia &lt;&lt; endl; // SAB (6)
        cout &lt;&lt; ++dia &lt;&lt; endl; // DOM (0)
        dia++; // SEG (1)
        cout &lt;&lt; dia &lt;&lt; endl;
}
</pre>
<p>Quando chegamos no último dia da semana (SAB) e chamamos o operator++, obtemos o primeiro dia da semana graças ao operador módulo (%).</p>
<p><a href="http://jcatki.no-ip.org:8080/fncpp/EnumTricks" target="_blank">Referência</a>.</p>
Posted in C/C++, Programação Tagged: cpp, enum, sobrecarga, tips <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/murilo.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/murilo.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/murilo.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/murilo.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/murilo.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/murilo.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/murilo.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/murilo.wordpress.com/177/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/murilo.wordpress.com/177/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/murilo.wordpress.com/177/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=177&subd=murilo&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://murilo.wordpress.com/2009/07/25/sobrecarga-operadores-enums/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/26488a105af7db00ea8e870aebed57b5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Murilo Adriano</media:title>
		</media:content>
	</item>
		<item>
		<title>Mais Sobre Construtores em C++</title>
		<link>http://murilo.wordpress.com/2009/06/15/construtores-em-cpp/</link>
		<comments>http://murilo.wordpress.com/2009/06/15/construtores-em-cpp/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 02:51:12 +0000</pubDate>
		<dc:creator>Murilo Adriano</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Programação]]></category>

		<guid isPermaLink="false">http://murilo.wordpress.com/?p=166</guid>
		<description><![CDATA[Dessa vez não vou falar muito mas sim exemplifiar um dos features (hehehe) do C++ que são as diferentes maneiras de &#8220;construir&#8221; um objeto. O código está todo em um arquivo para facilidar a visualização aqui no blog.
Eis o código:

#include &#60;iostream&#62;

using std::cout;

class Teste
{
        char tipo;
    [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=166&subd=murilo&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><img src="http://murilo.files.wordpress.com/2008/10/cpp.png?w=120&#038;h=107" style="border:0;float:right;" alt="C++" title="C++" width="120" height="107" class="size-full wp-image-40" />Dessa vez não vou falar muito mas sim exemplifiar um dos <em><a href="http://murilo.files.wordpress.com/2009/06/bug-feature.jpg">features</a></em> (hehehe) do C++ que são as diferentes maneiras de &#8220;construir&#8221; um objeto. O código está todo em um arquivo para facilidar a visualização aqui no blog.</p>
<p>Eis o código:</p>
<pre class="brush: cpp;">
#include &lt;iostream&gt;

using std::cout;

class Teste
{
        char tipo;
        int valorInt;
        char valorChar;
        double valorDouble;

public:
        Teste(const Teste&amp; t)
        {
                tipo = t.getTipo();
                valorInt = t.getValorInt();
                valorChar = t.getValorChar();
                valorDouble = t.getValorDouble();
        }

        Teste(char v)
        {
                tipo = 'c';
                valorInt = 0;
                valorChar = v;
                valorDouble = 0;
        }

        Teste(int v)
        {
                tipo = 'i';
                valorInt = v;
                valorChar = 0;
                valorDouble = 0;
        }

        Teste(double v)
        {
                tipo = 'd';
                valorInt = 0;
                valorChar = 0;
                valorDouble = v;
        }

        char getValorChar() const { return valorChar; };
        int getValorInt() const { return valorInt; };
        double getValorDouble() const { return valorDouble; };
        char getTipo() const { return tipo; };

        void imprimeValor() const
        {
                if (tipo == 'c') cout &lt;&lt; valorChar;
                else if (tipo == 'd') cout &lt;&lt; valorDouble;
                else cout &lt;&lt; valorInt;

                cout &lt;&lt; '\n';
        };

        ~Teste() {};

};

int main()
{
        Teste a = 1;
        Teste b = 'm';
        Teste c = 3.1417;
        Teste d = (Teste)2;
        Teste e = a;
        Teste f(100);
        Teste g = static_cast&lt;Teste&gt;('a');

        a.imprimeValor();
        b.imprimeValor();
        c.imprimeValor();
        d.imprimeValor();
        e.imprimeValor();
        f.imprimeValor();
        g.imprimeValor();

}
</pre>
<p>E a saída correspondente:<br />
<code><br />
1<br />
m<br />
3.1417<br />
2<br />
1<br />
100<br />
a<br />
</code></p>
<p>Internamente todas as formas de construir o objeto fazem a mesma coisa: procuram um <strong>construtor</strong> que espere aquele tipo de parâmetro e cria um objeto (no caso Teste).</p>
<p>Claro que isso pode ser modificado se sobrecarregarmos o operator=, operator() (unário) ou usar a keyword <strong>explicit</strong> na declaração dos construtores.</p>
Posted in C/C++, Programação  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/murilo.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/murilo.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/murilo.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/murilo.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/murilo.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/murilo.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/murilo.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/murilo.wordpress.com/166/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/murilo.wordpress.com/166/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/murilo.wordpress.com/166/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=166&subd=murilo&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://murilo.wordpress.com/2009/06/15/construtores-em-cpp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/26488a105af7db00ea8e870aebed57b5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Murilo Adriano</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2008/10/cpp.png" medium="image">
			<media:title type="html">C++</media:title>
		</media:content>
	</item>
		<item>
		<title>O que são enums e como utilizá-los melhor em C++</title>
		<link>http://murilo.wordpress.com/2009/05/29/o-que-sao-enums-e-como-utiliza-los-melhor-em-c/</link>
		<comments>http://murilo.wordpress.com/2009/05/29/o-que-sao-enums-e-como-utiliza-los-melhor-em-c/#comments</comments>
		<pubDate>Fri, 29 May 2009 04:28:00 +0000</pubDate>
		<dc:creator>Murilo Adriano</dc:creator>
				<category><![CDATA[C/C++]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[c]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[enum]]></category>
		<category><![CDATA[namespace]]></category>

		<guid isPermaLink="false">http://murilo.wordpress.com/?p=155</guid>
		<description><![CDATA[


O que são os enums (C e C++)
Um enum (enumeração) é um tipo definido pelo usuário (programador) que consiste em constantes do tipo int nomeadas.
Um jeito tradicional de se declarar constantes em C e C++ é o seguinte:

#define BRASIL 0
#define ITALIA 1
#define PORTUGAL 2
#define ALEMANHA 3

E eis a maneira de fazer o mesmo utilizando enums:

enum
{
 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=155&subd=murilo&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h3>
<dt class="wp-caption-dt"><img style="border:0;" class="size-full wp-image-40 alignright" title="C++" src="http://murilo.files.wordpress.com/2008/10/cpp.png?w=120&#038;h=107" alt="C++" width="120" height="107" /></dt>
</h3>
<h3>O que são os enums (C e C++)</h3>
<p>Um <code>enum</code> (enumeração) é um tipo definido pelo usuário (programador) que consiste em constantes do tipo <code>int</code> nomeadas.</p>
<p>Um jeito tradicional de se declarar constantes em C e C++ é o seguinte:</p>
<pre class="brush: cpp;">
#define BRASIL 0
#define ITALIA 1
#define PORTUGAL 2
#define ALEMANHA 3
</pre>
<p>E eis a maneira de fazer o mesmo utilizando <code>enum</code>s:</p>
<pre class="brush: cpp;">
enum
{
        BRASIL,
        ITALIA,
        PORTUGAL,
        ALEMANHA
};
</pre>
<p>Pode-se, alternativamente, criar um tipo para seu <code>enum</code>:</p>
<pre class="brush: cpp;">
enum Paises
{
        BRASIL,
        ITALIA,
        PORTUGAL,
        ALEMANHA
};
</pre>
<p>E declarar uma variável desse tipo com:</p>
<pre class="brush: cpp;">
Paises pais; //C++ apenas
enum Paises pais; //C e C++
</pre>
<p>Num enum igual a esses acima, a primeira constante recebe o valor 0 e as subsequentes recebem o valor da constante anterior mais 1. Ou seja, <code>BRASIL</code> é <code>0</code>, <code>ITALIA</code> é <code>1</code>, <code>PORTUGAL</code> é <code>2</code> e <code>ALEMANHA</code> é <code>3</code>.<br />
Podemos também atribuir valores manualmente às constantes como em:</p>
<pre class="brush: cpp;">
enum Paises
{
        BRASIL = 2,
        ITALIA,  //ITALIA é igual a 3 (2 + 1)
        PORTUGAL = 1,
        ALEMANHA  //ALEMANHA é igual a 2 (1 + 1)
};
</pre>
<p>Como podemos perceber no exemplo anterior, a mesma regra se aplica para os <code>enum</code>s com valores manuais, o que não tiver um valor explicitamente inserido receberá o valor do anterior somado em 1. Percebemos também que podem haver constantes com o mesmo valor (<code>BRASIL == ALEMANHA == 2</code>).</p>
<h4>Conversão</h4>
<p>A conversão de uma constante de um <code>enum</code> para um inteiro por exemplo é feita automaticamente. Já o contrário não deve ser permitido pelo compilador.</p>
<pre class="brush: cpp;">
enum Paises
{
        BRASIL,
        ARGENTINA,
        VENEZUELA
};

...

int inteiro = VENEZUELA + 2; //4
Paises pais = 3; //ERRO
</pre>
<h3>Uma melhor maneira de usar<code> enum</code>s em C++</h3>
<p>Veja o exemplo:</p>
<pre class="brush: cpp;">
enum Paises
{
        BRASIL,
        ITALIA,
        ALEMANHA
};

enum Uvas
{
        RUBI,
        ITALIA,
        UMOUTROTIPODEUVA
};
</pre>
<p>Isso irá ocasionar um erro porque <code>ITALIA</code> já foi definido. A saida do meu compilador (g++ 4.3.2) foi a seguinte:</p>
<p><code>murilo@blacksheep:~/$ g++ enums.cpp<br />
enums.cpp:14: error: conflicting declaration ‘ITALIA’<br />
enums.cpp:8: error: ‘</code><code>ITALIA</code><code>’ has a previous declaration as ‘Paises ITALIA’<br />
</code></p>
<p>Mas e agora?? Eu quero ter dois <code>enum</code>s diferentes que representam coisas diferentes mas que podem ter a mesma constante. Como?</p>
<p>A resposta é <code>namespace</code>s!<br />
Em C++ podemos declarar nossos <code>enum</code>s dentro de <code>namespace</code>s e assim termos as constantes em espaços de nomes diferentes. Nada de conflito agora hein g++!!!</p>
<pre class="brush: cpp;">
namespace Paises
{
        enum
        {
                BRASIL,
                ITALIA,
                ALEMANHA
        };
}

namespace Uvas
{
        enum
        {
                RUBI,
                ITALIA,
                UMOUTROTIPODEUVA
        };
}

//*...*//
//Modo de uso:

std::cout &lt;&lt; Uvas::ITALIA;
std::cout &lt;&lt; Paises::ITALIA;
</pre>
<p>É isso aí galera, até a próxima.</p>
Posted in C/C++, Programação Tagged: c, cpp, enum, namespace <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/murilo.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/murilo.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/murilo.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/murilo.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/murilo.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/murilo.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/murilo.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/murilo.wordpress.com/155/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/murilo.wordpress.com/155/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/murilo.wordpress.com/155/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=murilo.wordpress.com&blog=1790278&post=155&subd=murilo&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://murilo.wordpress.com/2009/05/29/o-que-sao-enums-e-como-utiliza-los-melhor-em-c/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/26488a105af7db00ea8e870aebed57b5?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Murilo Adriano</media:title>
		</media:content>

		<media:content url="http://murilo.files.wordpress.com/2008/10/cpp.png" medium="image">
			<media:title type="html">C++</media:title>
		</media:content>
	</item>
	</channel>
</rss>