<?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>Matheus Bratfisch &#187; C</title>
	<atom:link href="http://www.matbra.com/category/c/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.matbra.com</link>
	<description>&#34;Cogito ergo sum&#34;</description>
	<lastBuildDate>Tue, 20 Dec 2011 00:03:21 +0000</lastBuildDate>
	<language>pt</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Adicionando método ao servidor VFS no Minix</title>
		<link>http://www.matbra.com/2010/08/11/adicionando-metodo-ao-servidor-vfs-no-minix/</link>
		<comments>http://www.matbra.com/2010/08/11/adicionando-metodo-ao-servidor-vfs-no-minix/#comments</comments>
		<pubDate>Wed, 11 Aug 2010 04:28:27 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[minix]]></category>
		<category><![CDATA[syscall]]></category>
		<category><![CDATA[vfs]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=810</guid>
		<description><![CDATA[Boa Noite, Primeiramente, o que é VFS? VFS é Virtual File System. É uma camada que existe em muitos sistemas operacionais e também no Minix, que cuida da parte comunicação com o File System. O mesmo foi desenvolvido pelo Balázs Gerófi como tese de Mestrado na universidade de Amsterdam com nome de &#8220;Design and implementation [...]]]></description>
			<content:encoded><![CDATA[<p>Boa Noite,</p>
<p>Primeiramente, o que é VFS? VFS é Virtual File System. É uma camada que existe em muitos sistemas operacionais e também no Minix, que cuida da parte comunicação com o File System. O mesmo foi desenvolvido pelo Balázs Gerófi como tese de Mestrado na universidade de Amsterdam com nome de &#8220;<a href="http://www.minix3.org/doc/gerofi_thesis.pdf" target="_blank">Design and implementation of the MINIX Virtual File system</a>&#8220;. </p>
<p><span id="more-810"></span></p>
<p>Mas por que se comunicar com o servidor VFS? Por que adicionar algo nele? Bom, se você está trabalhando em baixo nível e quer por exemplo acessar diretamente os INODES por algum motivo, você deve inicialmente se comunicar com o servidor VFS. Para realizar a comunicação é simples, mas vamos supor que você queira um método especifico que o mesmo não possue, então você deve cria-lo.</p>
<p>Como fazer isso? </p>
<p>Inicialmente você deve editar o &#8220;/usr/src/include/minix/callnr.h&#8221;. Adicione logo abaixo a linha &#8220;#define GETPGRP		  63&#8243; o seguinte: </p>
<div class="codesnip-container" >
<div class="c codesnip" style="font-family:monospace;"><span class="co2">#define TESTCALL&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 64</span></div>
</div>
<p>Em seguida você deve modificar o servidor VFS e adicionar o que você quer que faça quando a mesma for chamada. Edite inicialmente o &#8220;/usr/src/servers/vfs/table.c&#8221;. Você deve pegar a linha que possui no_sys,	/* 64 = unused	*/<br />
E alterar para: </p>
<div class="codesnip-container" >
<div class="c codesnip" style="font-family:monospace;">do_TESTCALL<span class="sy0">,</span>&nbsp; &nbsp; <span class="coMULTI">/* 64 = unused&nbsp; */</span></div>
</div>
<p>Este será o método chamado quando a syscall de número 64 for executada. </p>
<p>Após isso você deve alterar o &#8220;/usr/src/servers/vfs/proto.h&#8221; que é onde estão definidos os métodos. Adicione o seguinte:</p>
<div class="codesnip-container" >
<div class="c codesnip" style="font-family:monospace;"><span class="coMULTI">/* do_TESTCALL EXAMPLE &nbsp;*/</span><br />
_PROTOTYPE<span class="br0">&#40;</span> <span class="kw4">int</span> do_TESTCALL<span class="sy0">,</span> <span class="br0">&#40;</span><span class="kw4">void</span><span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>Então você deve criar o método propriamente dito dentro do &#8220;/usr/src/servers/vfs/read.c&#8221; (ao menos eu fiz nesse arquivo). Adicione o seguinte código:</p>
<div class="codesnip-container" >
<div class="c codesnip" style="font-family:monospace;"><span class="coMULTI">/*===========================================================================*<br />
&nbsp;*Trabalho: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; do_ver_contig &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;*<br />
&nbsp;*===========================================================================*/</span><br />
PUBLIC <span class="kw4">int</span> do_TESTCALL<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; message m<span class="sy0">;</span>&nbsp; &nbsp; <br />
&nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;Número recebido %d&quot;</span><span class="sy0">,</span> m_in.<span class="me1">fd</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p>Mas como executar? E ver isso tudo funcionando? Como compilar?<br />
Inicialmente acesse &#8220;/usr/src/tools/&#8221; e execute: </p>
<blockquote><p>
$ make libraries
</p></blockquote>
<p>(Este pode ser um processo demorado) </p>
<p>Continue em &#8220;/usr/src/tools&#8221; e execute:</p>
<blockquote><p>
$ make hdboot
</p></blockquote>
<p>Reinicie. </p>
<p>Como testar e ver se está funcionando? Crie um arquivo no seu &#8220;/root&#8221; com o seguinte conteúdo:</p>
<div class="codesnip-container" >
<div class="c codesnip" style="font-family:monospace;"><span class="co2">#include &lt;stdio.h&gt;</span><br />
<span class="co2">#include &lt;unistd.h&gt;</span><br />
<span class="co2">#include &lt;lib.h&gt;</span><br />
<span class="co2">#include &lt;fcntl.h&gt;</span></p>
<p><span class="kw4">int</span> main<span class="br0">&#40;</span><span class="kw4">int</span> argc<span class="sy0">,</span> <span class="kw4">char</span> <span class="sy0">*</span>argv<span class="br0">&#91;</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; <span class="kw4">int</span> fd <span class="sy0">=</span> <span class="nu0">2</span><span class="sy0">;</span><br />
&nbsp; message m<span class="sy0">;</span> <br />
&nbsp; m.<span class="me1">m1_i1</span> <span class="sy0">=</span> fd<span class="sy0">;</span><br />
&nbsp; <a href="http://www.opengroup.org/onlinepubs/009695399/functions/printf.html"><span class="kw3">printf</span></a><span class="br0">&#40;</span><span class="st0">&quot;Number: %d&quot;</span><span class="sy0">,</span> fd<span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; _syscall<span class="br0">&#40;</span>FS<span class="sy0">,</span> 64<span class="sy0">,</span> <span class="sy0">&amp;</span>m<span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; <br />
<span class="br0">&#125;</span></div>
</div>
<p>O que isso é pra fazer? Fazer uma syscall no método 64, passar por mensagem o número 2, então o do_TESTCALL recebe o parametro e imprime o mesmo. Bem inutil, mas isto é pra demonstrar como criar métodos dentro do servidor VFS. </p>
<p><a href='http://www.matbra.com/wp-content/uploads/vfs-call.tar.gz'>Exemplo dos códigos adicionados no servidor VFS</a></p>
<p><a href="http://www.matbra.com/2010/07/26/criando-uma-biblioteca-do-sistema-no-minix/">Criando uma biblioteca do sistema no Minix.</a></p>
<p>Atenciosamente,<br />
Matheus</p>
<p>PS: É um exemplo bobo, mas é para demonstrar como adicionar métodos ao servidor VFS. Provavelmente nos próximos dias publicarei um exemplo, mais real.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2010/08/11/adicionando-metodo-ao-servidor-vfs-no-minix/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Criando uma biblioteca do sistema no Minix.</title>
		<link>http://www.matbra.com/2010/07/26/criando-uma-biblioteca-do-sistema-no-minix/</link>
		<comments>http://www.matbra.com/2010/07/26/criando-uma-biblioteca-do-sistema-no-minix/#comments</comments>
		<pubDate>Mon, 26 Jul 2010 03:57:26 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[creation]]></category>
		<category><![CDATA[learning]]></category>
		<category><![CDATA[library]]></category>
		<category><![CDATA[minix]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=747</guid>
		<description><![CDATA[Antes de tudo acesse /usr/src/include e crie o arquivo Header com a seguinte estrutura: NOME.h _PROTOTYPE(int NOME_DA_FUNCAO, (int PARAM)); Depois disso acesse /usr/src/lib/other e crie o arquivo com a seguinte estrutura: NOME.c #include&#60;lib.h&#62; #include&#60;unistd.h&#62; #include&#60;stdio.h&#62; PUBLIC int NOME_DA_FUNCAO(int PARAM) { // O QUE FAZ? } Edite o arquivo Makefile.in no mesmo diretorio (/usr/src/lib/other). Adicione o [...]]]></description>
			<content:encoded><![CDATA[<p>Antes de tudo acesse /usr/src/include e crie o arquivo Header com a seguinte estrutura:</p>
<p>NOME.h</p>
<blockquote><p>_PROTOTYPE(int NOME_DA_FUNCAO, (int PARAM));</p></blockquote>
<p><span id="more-747"></span></p>
<p>Depois disso acesse /usr/src/lib/other e crie o arquivo com a seguinte estrutura:</p>
<p>NOME.c</p>
<blockquote><p>#include&lt;lib.h&gt;<br />
#include&lt;unistd.h&gt;<br />
#include&lt;stdio.h&gt;</p>
<p>PUBLIC int NOME_DA_FUNCAO(int PARAM) {<br />
// O QUE FAZ?<br />
}</p></blockquote>
<p>Edite o arquivo Makefile.in no mesmo diretorio (/usr/src/lib/other). Adicione o nome do seu arquivo a lista em ordem alfabetica.</p>
<p>O que fazer agora?</p>
<p>Regere o arquivo Makefile</p>
<blockquote><p>$ cd /usr/src/lib/other/<br />
$ make Makefile</p></blockquote>
<p>Gere as bibliotecas: (processo um pouco lento dependendo da maquina)</p>
<blockquote><p>$ cd /usr/src/tools<br />
$ make libraries</p></blockquote>
<p>Quando finalizar sem erros &#8220;compile&#8221; o sistema:</p>
<blockquote><p>$ cd /usr/src/tools<br />
$ make hdboot</p></blockquote>
<p>Ele substituira os arquivos do boot automaticamente, para ter as atualizacoes, reiniciar o sistema.</p>
<p>Como testar? Crie um arquivo no /</p>
<p>testTest.c</p>
<blockquote><p>#include &lt;stdio.h&gt;<br />
#include &lt;unistd.h&gt;<br />
#include &lt;lib.h&gt;<br />
#include &lt;fcntl.h&gt;<br />
#include &lt;NOME.h&gt;</p>
<p>int main(int argc, char *argv[]) {<br />
NOME_DA_FUNCAO(PARAM);<br />
}</p></blockquote>
<p>Agora voce pode criar suas proprias bibliotecas do sistema no Minix.</p>
<p><a href="http://www.matbra.com/wp-content/uploads/Test-Files.tar.gz">Exemplo de biblioteca criada pelo usuario para o Minix</a></p>
<p>Atenciosamente,<br />
Matheus</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2010/07/26/criando-uma-biblioteca-do-sistema-no-minix/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Exercicio em C++</title>
		<link>http://www.matbra.com/2009/09/25/exercicio-em-c/</link>
		<comments>http://www.matbra.com/2009/09/25/exercicio-em-c/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 22:01:31 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[cpp]]></category>
		<category><![CDATA[exercicios]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=548</guid>
		<description><![CDATA[Boa noite, Nos últimos dias uma amiga pediu ajuda para resolver dois exercícios em C++ que o professor dela havia passado. O enunciado dos mesmo são: 1. Faça um programa que leia um numero não determinado de valores inteiros e positivos. Para cada valor lido: se o numero for par, verificar quantos divisores possui e [...]]]></description>
			<content:encoded><![CDATA[<p>Boa noite, </p>
<p>Nos últimos dias uma amiga pediu ajuda para resolver dois exercícios em C++ que o professor dela havia passado. O enunciado dos mesmo são: </p>
<blockquote><p>1. Faça um programa que leia um numero não determinado de valores inteiros e positivos. Para cada valor lido: se o numero for par, verificar quantos divisores possui e escrever esta informação. Se for impar e menor que 12, escrever o seu fatorial. Se for impar e maior que 12, escrever a soma dos números de 1 até ele. </p></blockquote>
<p><a href='http://www.matbra.com/2009/09/25/exercicio-em-c/exercicio1/' rel='attachment wp-att-549'>Resolução C++ do exercicio 1. </a></p>
<blockquote><p>2. Escrever um programa que leia valores, um de cada vez, e conta quantos deles estão em cada um dos intervalos: [0,25], [25, 50], [50, 75] e [75,100].</p></blockquote>
<p><a href='http://www.matbra.com/2009/09/25/exercicio-em-c/exercicio2/' rel='attachment wp-att-550'>Resolução C++ do exercicio 2</a></p>
<p>Matheus</p>
<p>PS: Pra mim é C mas como só ajudei ela não entrei no mérito dessa questão.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/09/25/exercicio-em-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Árvore B, Estrutura de Dados.</title>
		<link>http://www.matbra.com/2009/07/01/arvore-b-estrutura-de-dados/</link>
		<comments>http://www.matbra.com/2009/07/01/arvore-b-estrutura-de-dados/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 03:35:58 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Estrutura de Dados]]></category>
		<category><![CDATA[gráfico]]></category>
		<category><![CDATA[tempo]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=333</guid>
		<description><![CDATA[Boa noite, Neste post vou publicar uma árvore B em C++ desenvolvida por mim e pelo meu colega Olav, como trabalho da aula de estrutura de dados. A mesma le um arquivo de ceps e insere os mesmos em uma árvore e calcula o tempo de inserção para cada item. Infelizmente, me parece que o [...]]]></description>
			<content:encoded><![CDATA[<p>Boa noite, </p>
<p>Neste post vou publicar uma árvore B em C++ desenvolvida por mim e pelo meu colega Olav, como trabalho da aula de estrutura de dados. A mesma le um arquivo de ceps e insere os mesmos em uma árvore e calcula o tempo de inserção para cada item. Infelizmente, me parece que o medidor de tempo não está correto, porém com a árvore está. </p>
<p>Caso você descubra algo errado por favor, reporte-me</p>
<p><a href="http://www.matbra.com/?attachment_id=334">Árvore B </a></p>
<p>Matheus Bratfisch</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/07/01/arvore-b-estrutura-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lista encadeada, Estrutura de dados.</title>
		<link>http://www.matbra.com/2009/05/06/lista-encadeada-estrutura-de-dados/</link>
		<comments>http://www.matbra.com/2009/05/06/lista-encadeada-estrutura-de-dados/#comments</comments>
		<pubDate>Wed, 06 May 2009 04:15:20 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Estrutura de Dados]]></category>
		<category><![CDATA[encadeada]]></category>
		<category><![CDATA[exercicios]]></category>
		<category><![CDATA[lista]]></category>
		<category><![CDATA[Ponteiro]]></category>
		<category><![CDATA[ponteiros]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=152</guid>
		<description><![CDATA[Saudações, Para não perder o costume, irei postar outro exercicio resolvido em uma aula. Dessa vez o exercicio é o seguinte: - Implemenetar o sistema de contabilidade de um mafioso. (outros detalhes continue lendo o post) O enunciado do mesmo se encontra no &#8220;read the rest of this entry&#8221; para não deixar o post muito [...]]]></description>
			<content:encoded><![CDATA[<p>Saudações, </p>
<p>Para não perder o costume, irei postar outro exercicio resolvido em uma aula. Dessa vez o exercicio é o seguinte:<br />
- Implemenetar o sistema de contabilidade de um mafioso. (outros detalhes continue lendo o post)</p>
<p>O enunciado do mesmo se encontra no &#8220;read the rest of this entry&#8221; para não deixar o post muito extenso devido ao longo enunciado. </p>
<p>A resolução do mesmo você pode baixar <a href="http://www.matbra.com/?attachment_id=155" target="_blank">aqui</a>.</p>
<p><span id="more-152"></span></p>
<blockquote><p>Você é um Mafioso informatizado.<br />
Você vai criar um sistema para gerenciar os seus débitos e também as pessoas que devem a você.<br />
Este sistema será baseado em duas listas encadeadas:</p>
<p><a href="http://www.matbra.com/wp-content/uploads/mafia.jpg" target="_blank">(Imagem de exemplo)</a></p>
<p>    * Para isso você vai fazer um programa que manipula mais de uma lista;</p>
<p>    * o programa fará isto com um único conjunto de funções e passagem das diversas listas como parâmetros;<br />
    * como aplicação imaginemos um sistema de contabilidade simples;<br />
    * você vai ter um Plano de Contas constituído por duas listas: débitos e créditos;<br />
    * o mesmo conjunto de funções (que você já implementou) vai poder ser utilizado para isso: você somente precisa ampliar o conjunto de parâmetros da função para passar por referência também a lista que você quer alterar.</p>
<p>A passagem de parâmetro da lista deve ser por referência porque você deseja que as alterações sejam persistentes.</p>
<p>Cada lista de débitos ou créditos é constituída por lançamentos. Cada lançamento possui:</p>
<p>    * um valor real (positivo);<br />
    * um nome. Por exemplo, “Pagar proteção à Mafia”</p>
<p>Estrutura:<br />
tipo tLançamento {<br />
caracter *nome;<br />
real valor;<br />
};</p>
<p>A lista encadeada que conterá os lançamentos terá um elemento de lista definido da seguinte forma:<br />
Estrutura:<br />
tipo tLista {<br />
tLancamento* info;<br />
tLista* proximo;<br />
};<br />
A cabeça de lista de cada lista será uma variável global contendo uma estrutura como abaixo:<br />
tipo cLista {<br />
tLista* lista;<br />
inteiro ultimo;<br />
};</p>
<p>No programa principal você vai definir se vai realizar uma operação de débito ou de crédito e vai chamar as operações sobre listas necessárias, passando a lista correta como parâmetro (por referência) para a função que realiza a operação.</p>
<p>Além das operações básicas que a lIsta vai oferecer, você deve implementar uma operação adicional: totalização. Essa operação funciona assim:</p>
<p>    * percorre a lista, escrevendo o nome e o valor correspondente a cada item (débito ou crédito)<br />
    * soma o valor em uma variável auxiliar<br />
    * escreve ao final o total de débitos ou de créditos, dependendo de qual lista você mandou totalizar.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/05/06/lista-encadeada-estrutura-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lista com ponteiros, Estrutura de Dados.</title>
		<link>http://www.matbra.com/2009/04/29/lista-com-ponteiros-estrutura-de-dados/</link>
		<comments>http://www.matbra.com/2009/04/29/lista-com-ponteiros-estrutura-de-dados/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 23:57:12 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Estrutura de Dados]]></category>
		<category><![CDATA[Sistemas Digitais]]></category>
		<category><![CDATA[exercicios]]></category>
		<category><![CDATA[lista]]></category>
		<category><![CDATA[ponteiros]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=136</guid>
		<description><![CDATA[Boa noite a todos, Como ainda não produzi nada muito bom hoje em casa (no lab produzi algo relaciona a xml-rpc que pretendo postar em breve), resolvi postar mais um dos 198578951 exercicios que estou tendo que fazer para estrutura de dados. O Exercicio de hoje é nada mais nada menos que uma implementação de [...]]]></description>
			<content:encoded><![CDATA[<p>Boa noite a todos, </p>
<p>Como ainda não produzi nada muito bom hoje em casa (no lab produzi algo relaciona a xml-rpc que pretendo postar em breve), resolvi postar mais um dos 198578951 exercicios que estou tendo que fazer para estrutura de dados. O Exercicio de hoje é nada mais nada menos que uma implementação de uma Lista com Ponteiros, ou seja, ela não tem limite de elementos (é claro, se a memoria for infinita). </p>
<p>Como no exercicio anterior, o enunciado fica para a pagina inteira pois é muito grande.</p>
<p>O exercicio resolvido você encontra <a href="http://www.matbra.com/?attachment_id=138">aqui.</a></p>
<p><span id="more-136"></span></p>
<blockquote><p>Uma lista ordenada pode conter Strings de qualquer comprimento < 10000;<br />
• esta lista tem um número de elementos máximo fixo (100) e é implementada como um vetor de ponteiros para Strings;<br />
– utilize as rotinas de lista com vetor que você implementou para a agenda.<br />
• Um novo String é lido primeiramente para dentro de uma variável auxiliar qualquer;<br />
– então é alocada memória para exatamente o seu tamanho e ele é copiado para esta área. Para copiar um String utilize strcpy();<br />
– por fim um lugar na lista é encontrado para ele. A posição escolhida do vetor de ponteiros da lista é instanciada através da atualização dos valores do ponteiro da posição do String na lista com o endereço do string.</p>
<p>Pseudo-código:<br />
constantes MAXLISTA = 100;<br />
tipo tLista {<br />
// Vetor de ponteiros para caracter.<br />
caracter *dados[MAXLISTA];<br />
inteiro último;<br />
};</p>
<p>• Importante: observe que criando uma variável do tipo tLista você não vai estar alocando memória para os strings a serem lidos, apenas para os ponteiros para eles.<br />
Para verificar o comprimento de um String:<br />
– utilize a função strlen();<br />
– esta função devolve o comprimento (em caracteres imprimíveis) de um string.<br />
– Protótipo: int strlen(char *p);</p>
<p>#include <stdio.h><br />
#include <stdlib.h><br />
#include <sting.h><br />
char p[90] = &#8220;Carro&#8221;;<br />
main() {<br />
printf(&#8220;%i&#8221;, strlen(p));<br />
}</p>
<p>• Imprime: 5<br />
• Para copiar um String:<br />
– utilize a função strcpy();<br />
– esta função copia o conteúdo de um string (dado por um apontador) para a posição de memória dada por outro apontador.<br />
– Protótipo: char *strcpy(char *destino, char *fonte);</p>
<p>#include <stdio.h><br />
#include <stdlib.h><br />
#include <sting.h><br />
char p[90] = &#8220;Carro&#8221;;<br />
char lata[20];<br />
main() {<br />
strcpy(lata, p));<br />
printf(&#8220;s%&#8221;, lata);<br />
}<br />
• Imprime: Carro</p>
<p>Detalhes:</p>
<p>• Como você não sabe o comprimento do String que o usuário vai digitar, use primeiro uma variável auxiliar grande (10000 posições) para guardar o que foi<br />
digitado;<br />
• todas as funções de lista ordenada implementadas anteriormente devem ser reimplementadas para utilizar estes Strings;<br />
• para a leitura de um String utilize scanf(&#8220;%s&#8221;, entrada).</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/04/29/lista-com-ponteiros-estrutura-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pilha, com ponteiros, Estrutura de Dados.</title>
		<link>http://www.matbra.com/2009/04/28/pilha-com-ponteiros-estrutura-de-dados/</link>
		<comments>http://www.matbra.com/2009/04/28/pilha-com-ponteiros-estrutura-de-dados/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 02:49:40 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Estrutura de Dados]]></category>
		<category><![CDATA[exercicios]]></category>
		<category><![CDATA[pilha]]></category>
		<category><![CDATA[Ponteiro]]></category>
		<category><![CDATA[resolvidos]]></category>
		<category><![CDATA[Vetor]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=128</guid>
		<description><![CDATA[Então, hoje vou demonstrar um dos outros exercicios que fizemos na aula de estrutura de dados, lembrando mais uma vez que estes são exercicios que eu faço rapidamente e não me importo muito com várias coisas pela falta de tempo. O que irei mostrar hoje é uma Pilha com vetores porém em vez de ele [...]]]></description>
			<content:encoded><![CDATA[<p>Então, hoje vou demonstrar um dos outros exercicios que fizemos na aula de estrutura de dados, lembrando mais uma vez que estes são exercicios que eu faço rapidamente e não me importo muito com várias coisas pela falta de tempo. O que irei mostrar hoje é uma Pilha com vetores porém em vez de ele ter um inteiro indicando o ultimo elemento, o ultimo será um ponteiro para o ultimo elemento da pilha. </p>
<p>Para  ver o enunciado inteiro continue lendo (enunciado grande). </p>
<p>Para baixar o arquivo, <a href="http://www.matbra.com/?attachment_id=130">clique aqui</a>! </p>
<p><span id="more-128"></span></p>
<blockquote><p>Reimplemente o seu programa de pilha com vetor de números inteiros usando como TOPO um ponteiro para inteiro, que você incrementa, decrementa e testa<br />
para saber se a pilha está cheia ou vazia;<br />
• para resolver:<br />
– modifique a estrutura tPilha da seguinte forma:<br />
constantes MAXPILHA = 100;<br />
tipo tPilha {<br />
inteiro dados[MAXPILHA];<br />
inteiro *topo;<br />
};</p>
<p>• Modifique os algoritmos de manipulação da pilha de forma que se utilize ponteiros para inteiro para referenciar os elementos da pilha.<br />
• Exemplo:<br />
Inteiro FUNÇÃO empilha(inteiro dado)<br />
início<br />
SE (pilhaCheia) ENTÃO<br />
RETORNE(ErroPilhaCheia)<br />
SENÃO<br />
// Se houver espaço, incremento o<br />
// ponteiro topo e faço o valor<br />
// apontado por topo receber o novo<br />
// dado.<br />
aPilha.topo <- aPilha.topo + 1;<br />
*(aPilha.topo) <- dado;<br />
RETORNE(aPilha.topo);<br />
FIM SE<br />
fim;</p>
<p>• Lembre-se de adaptar a inicialização da pilha e também os testes de pilha cheia e vazia. Exemplos:</p>
<p>FUNÇÃO inicializaPilha()<br />
início<br />
// Fazemos o topo apontar para um endereço de memória<br />
// anterior ao início do vetor dados para simbolizar<br />
// que a pilha está vazia.<br />
aPilha.topo <- aPilha.dados - 1;<br />
fim;<br />
Booleano FUNÇÃO pilhaVazia()<br />
início<br />
SE (aPilha.topo < aPilha.dados) ENTÃO<br />
// O topo está apontando para um endereço de<br />
// memória anterior ao próprio início da<br />
// pilha. Segundo a nossa definição, isto<br />
// significa que a pilha está vazia.<br />
RETORNE(Verdadeiro)<br />
SENÃO<br />
RETORNE(Falso);<br />
fim;</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/04/28/pilha-com-ponteiros-estrutura-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu com Netbeans Java e C</title>
		<link>http://www.matbra.com/2009/04/27/ubuntu-com-netbeans-java-e-c/</link>
		<comments>http://www.matbra.com/2009/04/27/ubuntu-com-netbeans-java-e-c/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 00:29:22 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[Aprendendo]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Software Livre]]></category>
		<category><![CDATA[9.04]]></category>
		<category><![CDATA[instalação]]></category>
		<category><![CDATA[Netbeans]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=116</guid>
		<description><![CDATA[Boa noite, Hoje pretendia instalar o netbeans 6.5.1 no Ubuntu 64 bits, baixei a versão que eu queria (C/C++) no site do netbeans. Tentava instalar o netbeans com o comando: $ ./netbeans-6.5.1-ml-cpp-linux.sh (PS: Tornei o mesmo executavel antes, com o comando $ chmod +x netbeans-6.5.1-ml-cpp-linux.sh) Recebia a seguinte resposta: x-warrior@x-warrior-desktop:~/Desktop$ ./netbeans-6.5.1-ml-cpp-linux.sh Configuring the installer&#8230; Searching [...]]]></description>
			<content:encoded><![CDATA[<p>Boa noite, </p>
<p>Hoje pretendia instalar o netbeans 6.5.1 no Ubuntu 64 bits, baixei a versão que eu queria (C/C++) no site do <a href="http://www.netbeans.org/index.html" target="_blank">netbeans</a>. Tentava instalar o netbeans com o comando:</p>
<p><em>$ ./netbeans-6.5.1-ml-cpp-linux.sh</em></p>
<p>(PS: Tornei o mesmo executavel antes, com o comando <em>$ chmod +x netbeans-6.5.1-ml-cpp-linux.sh</em>) </p>
<p>Recebia a seguinte resposta: </p>
<blockquote><p>x-warrior@x-warrior-desktop:~/Desktop$ ./netbeans-6.5.1-ml-cpp-linux.sh<br />
Configuring the installer&#8230;<br />
Searching for JVM on the system&#8230;<br />
Extracting installation data&#8230;<br />
Running the installer wizard&#8230;<br />
x-warrior@x-warrior-desktop:~/Desktop$ </p></blockquote>
<p>Porém a parte grafíca não acontecia. Fui olhar o log da seguinte maneira: </p>
<p><em>$ sh netbeans-6.5.1-ml-cpp-linux.sh &#8211;verbose &#8211;output out.txt</em></p>
<p>Analisando o arquivo out.txt pude ver o seguinte erro: </p>
<blockquote><p>[2009-04-27 20:56:18.173]:     	at org.netbeans.installer.Installer.main(Installer.java:78)<br />
[2009-04-27 20:56:18.174]:     &#8230; show message dialog<br />
[2009-04-27 20:56:18.174]:         title: Critical Error<br />
[2009-04-27 20:56:18.174]:         message: An unexpected exception happened in thread main<br />
[2009-04-27 20:56:18.174]:<br />
[2009-04-27 20:56:18.174]:         Exception:<br />
[2009-04-27 20:56:18.174]:           java.lang.NoClassDefFoundError:<br />
[2009-04-27 20:56:18.175]:           Could not initialize class java.awt.Toolkit</p></blockquote>
<p>Infelizmente não sabia como corrigi-lo. Pesquisei um pouco e não achei nada que funcionasse. Então tive a brilhante idéia de instalar pelo synaptic. Instalei o netbeans que estava lá, tudo ocorreu normalmente. Executei o mesmo e fui criar um novo projeto, me deparo que a versão instalada era a para Java. Me decepcionei, afinal precisava mesmo da versão para C/C++. Quando fiz a instalação pelo synaptic percebi que existiam muitas dependencias, tentei instalar novamente a versão para C e vua-la. Consegui instalar a mesma. (Meio na gambiarra eu sei, afinal fiquei com 2 versões de netbeans uma para C e outra para Java, mas sem problemas já que eu utilizo as duas.) </p>
<p>Então caso você queira instalar a versão para C/C++, instale a versão de Java, ou suas dependencias somente e em seguida instale o para C/C++ que tudo vai ocorrer bem. </p>
<p>Ah, para um melhor entendimento editei o menu (Botao direito sobre Applications &#8211; edit menu), ele é muito intuitivo então não vou entrar em mais detalhes. Mas no mesmo editei os Netbeans 6.5 e 6.5.1 para Netbeans 6.5 (Java) e Netbeans 6.5.1 (C/C++). Assim não corro o problema de esquecer e abrir a versão errada perdendo tempo. </p>
<p>Espero que essa <del datetime="2009-04-28T00:18:25+00:00">gambiarra</del> dica ajude vocês. </p>
<p>Abraços,<br />
Matheus</p>
<p>PS: Se alguem tiver a solução decente para conseguir instalar o Netbeans me avise que eu posto aqui. Ou caso eu descubra, postarei também. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/04/27/ubuntu-com-netbeans-java-e-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lista, Estrutura de dados</title>
		<link>http://www.matbra.com/2009/04/25/lista-estrutura-de-dados/</link>
		<comments>http://www.matbra.com/2009/04/25/lista-estrutura-de-dados/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 22:00:37 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Estrutura de Dados]]></category>
		<category><![CDATA[exercicios]]></category>
		<category><![CDATA[lista]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=51</guid>
		<description><![CDATA[Boa tarde, Como estou tendo aula de estrutura de dados estou tentando colocar aqui, alguns dos conceitos que aprendemos em sala, junto ao seu exercicio e uma implementação de um exercicio (desenvolvido rapidamente, muitas vezes). A estrutura apresentada hoje é Lista, uma estrutura de dados linear. Existe também a lista ligada, ou encadeada que também [...]]]></description>
			<content:encoded><![CDATA[<p>Boa tarde,</p>
<p>Como estou tendo aula de estrutura de dados estou tentando colocar aqui, alguns dos conceitos que aprendemos em sala, junto ao seu exercicio e uma implementação de um exercicio (desenvolvido rapidamente, muitas vezes). A estrutura apresentada hoje é Lista, uma estrutura de dados linear. Existe também a lista ligada, ou encadeada que também é conhecida por linear e dinamica (fica pra outro post) e a lista duplamente ligada, ou duplamente encadeada (fica pra outro post também). A pilha e a fila são implementações especiais de listas. A Lista, não possue restrições como suas implementações especiais, e pode receber elementos em qualquer posição, remover de qualquer posição, remover especifico, adicionar em ordem entre outras. </p>
<p>O enunciado do exercicio que foi proposto para lista é o seguinte: </p>
<blockquote><p>  1.   Crie o seu tipo de dados tLista em um headerfile;<br />
   2. esta deverá ser uma lista de elementos do tipo tAgenda;<br />
   3. O tipo tAgenda é um tipo que representa um nome de 30 posições e um número de telefone;<br />
   4. crie uma função maior(a,b) que compare os nomes de duas entradas;<br />
   5. programe todas as funções documentando cada função, inclusive com dicionário de dados;<br />
   6. crie um programa principal que execute todas as funções de lista a partir de um menu. A função procurar específico deverá basear-se no nome em uma Agenda;<br />
   7. além dessas funções, o programa deverá ser capaz de listar a lista em ordem alfabética.
</p></blockquote>
<p>Resolução do mesmo <a href="http://www.matbra.com/?attachment_id=107">aqui</a>. </p>
<p>Até mais,<br />
Matheus</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/04/25/lista-estrutura-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fila, Estrutura de dados</title>
		<link>http://www.matbra.com/2009/04/15/fila-estrutura-de-dados/</link>
		<comments>http://www.matbra.com/2009/04/15/fila-estrutura-de-dados/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 04:11:41 +0000</pubDate>
		<dc:creator>Matheus (X-warrior) Bratfisch</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[Estrutura de Dados]]></category>
		<category><![CDATA[exercicios]]></category>
		<category><![CDATA[fila]]></category>
		<category><![CDATA[programação]]></category>

		<guid isPermaLink="false">http://www.matbra.com/?p=47</guid>
		<description><![CDATA[Boa Noite, Como estou tendo aula de estrutura de dados estou tentando colocar aqui, alguns dos conceitos que aprendemos em sala, junto ao seu exercicio e uma implementação de um exercicio (desenvolvido rapidamente, muitas vezes). A estrutura apresentada hoje é Fila, uma estrutura de dados baseada no principio FIFO (first in, first out) ou seja, [...]]]></description>
			<content:encoded><![CDATA[<p>Boa Noite,</p>
<p>Como estou tendo aula de estrutura de dados estou tentando colocar aqui, alguns dos conceitos que aprendemos em sala, junto ao seu exercicio e uma implementação de um exercicio (desenvolvido rapidamente, muitas vezes). A estrutura apresentada hoje é Fila, uma estrutura de dados baseada no principio FIFO (first in, first out) ou seja, primeiro a entrar é o primeiro a sair. Ela, como a pilha possui duas funções básicas, que é adiciona e remove. Uma adicionando no fim, como uma fila (sem furos, é claro!) e a outra retirando do inicio. </p>
<p>Já faz alguns dias que resolvemos esse exercicio e pra ser sincero não tenho certeza se estou postando a ultima versão que tenho do mesmo, mas acredito que sim. O enunciado do exercicio resolvido foi o seguinte: </p>
<blockquote><p>
    * Implemente todas as operações vistas sobre fila;<br />
    * implemente um programa principal que utilize a fila através de um menu com os seguintes itens: enfileirar, desenfileirar, limpar, mostrar fila, sair do programa. Use a estrutura de programação switch do &#8220;C&#8221; para isto;<br />
    * a fila possuirá tamanho máximo 100, definido como uma constante chamada MAXFILA. Utilize esta constante para a definição da estrutura de dados que será a fila;<br />
    * a fila será referenciada por uma variável global;<br />
    * para implementar a estrutura de dados defina um tipo elementoDaFila que será char[40] e defina a sua fila como um vetor de 100 elementoDaFila .
</p></blockquote>
<p><a href="http://www.matbra.com/?attachment_id=49">Aqui está a implementação da mesma que acredito ser a ultima.</a></p>
<p>Abraços,<br />
Matheus</p>
<p>PS: Com o tempo eu pretendo (não sei se consigo) fazer algumas mudanças nas mesmas assim que for aprendendo novas tecnicas e conceitos relacionados ao assunto, mas como a faculdade ta muito corrida não sei se vai ser possivel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matbra.com/2009/04/15/fila-estrutura-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

