Tutorials


Quem nunca teve o problema clássico de ter que armazenar uma quantidade X de valores, sem limite máximo e com buscas, remoção e adição em qualquer lugar de forma rápida? Pois bem as listas estão ai exatamente para isso. Claro, poderíamos criar um vetor com um número X, e caso precisa-se, utilizaríamos realloc() para aumentar o vetor. Porém, qualquer coisa que fizéssemos com um vetor (ordernar, busca, remoção, adição) é muito custosa, uma lista ligada nos permite fazer isso de forma rápida, customizáda, e econômica. Vamos explicar aqui a lista duplamente ligada, uma das mais completas, porém vamos mostrar também a teoria de suas variações (lista ligada e lista circular).
(more…)

Uma das coisas mais importantes e pesquisada na programação é a representação de dados no computador, essa área tem o nome de estrutura de dados, sendo uma das áreas principais no estudo da programação para computadores. Existem vários tipo de estrutura de dados clássicos, cada um com sua utilização, hoje vamos estudar como funciona a Pilha.
(more…)

Ola, eu não esqueci de vocês não, apenas estou sem tempo com o final de semestre na faculdade. Então, para não deixar vazio, vamos mostrar como criar arquivos temporários em C.
Arquivos temporários são utilizados para uma vasta gama de utilidades, sendo que a mais comum é a comunicação entre processos. Isso mesmo, você leu direito, para dois processos se comunicarem é mais do que comum utilizarmos arquivos temporários. Isso quer dizer, por exemplo, que a maravilhosa função pipe() nada mais é do que uma criação de arquivos temporários. (more…)

Outro dia, tentando fazer um servidor de bucket-sort, eu me deparei com um problema que a muito tempo eu não via, o quicksort. Pensei então, ai está uma coisa legal de colocar no servidor.
O quicksort é um problema clássico de ordenação em C. Estranhamente, esse algoritmo é ruim na teoria, mas para todos os casos práticos ele é um dos melhores.
Existem várias versões de quicksorte, mas a idéia é sempre a mesma, dividir um vetor, escolher um pivô, ordenar cada vetor em 3 vetores diferentes (menores que o pivô, maiores, e iguais), fazer novamente essa ordenação para cada vetor, e no final, concatenar tudo. Para saber mais (e de onde eu tirei o algorítmo em sí para fazer esse primeiro programa), de uma olhada na Wikipedia.
O programa está no SVN, em um novo repositório chamado C, onde o endereço é: http://svn.geekvault.org/c/quicksort. Para compilar, execute o clássico

./configure
make

Um detalhe sobre os programas feitos de agora em diante, eles sempre terão documentação feita utilizando Doxygen. O que isso quer dizer? Quer dizer que com aqueles poucos comentários que temos nos arquivos de cabeçalho (.h), temos toda a estrutura de documentação vista aqui, o que quer dizer que temos mais um domínio, http://docs.geekvault.org, que em breve terá uma index “bonitinha” com todas as documentações de todos os programas que eu fizer.

Bom, para hoje foram bastantes novidades ;). Em breve teremos outras versões mais complexas do quicksort, atualizadas no svn obviamente.

PS: Caso você não sabia como utilizar o svn, de uma olhada nesse post.

O que é um programa de computador? Antes de aprendermos a programar em uma linguagem que não seja algum tipo de script (.php, .bat ou shell script por exemplo), vamos discutir o que um programa de computador realmente faz. Em uma frase, um programa de computador é:

“Uma seqüência de instruções binárias para o processados executar e enviar resultado para o Kernel do Sistema Operacional, que irá então tratar o resultado como deve.”

(more…)

Aplicações para rede são muito mais simples do que a maioria das pessoas acredita. Elas se baseiam em uma arquitetura cliente/servidor, mais do que explorada, ou seja, todos os grandes problemas das aplicações mais comuns já foram explorados e estudados. O grande problema dessas aplicações é o “debug”, já que em 99% dos casos os servidores irão rodar em máquinas externas, fica extremamente complicado a depuração de um código cliente/servidor, mas com muita calma, conseguimos também “debugar”, talvez em uma forma um pouco mais primitiva, mas conseguimos.

(more…)

Uma das coisas mais básicas em programação, é a utilização de uma lista ligada para armazenar dados. O único grande problema da lista ligada, são os famigerados ponteiros.

 Ponteiros

Por incrível que pareça, ponteiros são extremamente simples, sua teoria pelo menos.
Ponteiros nada mais são do que apontadores para endereços de memória. Por exemplo, digamos que queremos uma função que receba um vetor de inteiros, altere de alguma forma, e retorne o mesmo vetor, como fazer?
Essa é uma situação bem típica, onde a utilização de ponteiros vem a calhar, vamos mostrar um código, e depois explicar aos poucos.


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#define MAX 10
int *modifica(int *v, int n){
  unsigned int i = 0;
  for(i=0;i<n;i++){
    v[i]=10;
  }
  return v;
}
int main(void){
  int *vetor = NULL;
  if((vetor=malloc(sizeof(int)*MAX))==NULL){
    perror(”malloc”);
    return errno;
  }
  memset(vetor,’\0′,sizeof(int)*MAX);
  vetor=modifica(vetor,MAX);
  free(vetor);
  vetor=NULL;
  return 0;
}

Vamos explicar o código aos poucos. (more…)