Projeto final em linguagem C

Programar em C# no trabalho, C e PHP na faculdade não é legal para a saúde mental. Entre C e C# até que as coisas fluem legal, mas no PHP dá uma revolta não poder usar um update panel nem ter uma IDE potente ao seu dispor.

O bom foi que descobri o que diabos o New do C# esconde de nós quando instanciamos uma classe. Eu acho.

Alocar memória “na mão”, fazer o “garbage collection” manualmente é fods. Cada vez mais gosto do C#! Mas ainda assim os desafios de C acabam sendo interessantes.

Por exemplo, esse trabalho que nosso professor de estrutura de dados passou. Criamos um array de ponteiros de estruturas, salvamos/recuperamos dados de arquivos binário e texto. Deram muitos problemas durante o caminho, mas venci!

Download trabalho estruturas, ponteiros e arquivo binário.

Anúncios

Linguagem C: Bibliotecas próprias

Fala galera!

Neste artigo de hoje, quero abordar um tópico já “rodado”: Funções e Procedimentos. Mas dessa vez, para criar suas próprias bibliotecas.

Quando aprendemos a programar, primeiro nos ensinam a criar um programinha gigantesco, indo da forma estruturada mais mal estruturada possível: De cima pra baixo, esquerda pra direita até o return 0.

Agora você clica aqui e continua lendo.

Bug secreto na busca binária

“Busca binária é um algoritmo notoriamente difícil de programar corretamente. Somente dezessete anos depois da invenção do algoritmo a primeira versão correta do programa foi publicada!”

Fonte.

Começo com essa citação pois fiquei assustado ao tomar conhecimento dela. Dezessete anos, para a computação isso é muito tempo para algo ficar “funcionando errado”. Não imagino que as funções tivessem erros óbvios. Provavelmente funcionavam com uma quantidade N de números em Y condições, mas em algum momento (talvez raro) quebrassem.

Vai dar merda, capitão… Clique e leia mais!

Fila Circular

Num determinado ponto de nossas vidas, precisamos enfrentar as filas. Seja de banco, seja da merenda ou pra pegar o buzão com destino à pqp.

Talvez você faça algo na área de informática e precise enfrentar a Estrutura de Dados! Dai você vai ser o dono da fila.

Como projeto de algoritmos e programação II, fizemos um trabalho sobre filas. Detalhe que não tivemos aulas de estrutura de dados nem nada específico. Depois falam que facul particular é só coisa mastigada.

Apresentaremos hoje. Sinto-me confiante, mas nervoso por ter de explicar 200 linhas de código fonte.

Link para o trabalho: Scribd Rox

Link para baixar o fonte: Easy Share na veia

Kisses and hugs ;)

Cya

Linguagem C: Matrizes, parte 2

Pedrinho tem duas maçãs

e Joãozinho duas matrizes. Coitado do Joãozinho.

Algumas operações entre matrizes

No artigo anterior sobre matrizes, vimos como declarar, preencher in code, via input do usuário e como mostrar na tela. De quebra vimos que passamos matrizes por referência numa função, com a função sãoTomé.

O objetivo deste é realizar operações entre as duas matrizes.

Saca só o esquema!

Linguagem C: Matrizes, parte 1

A união faz a força

e as matrizes.

Quando utilizamos vetores, não existe muita confusão. É uma linha com N espaços para determinados valores. Claro, podemos perder uns bons minutos pensando em algoritmos eficazes para ordenação, busca e outros.

vetor

Mas e quando jogamos um vetor em cima do outro, colamos e dizemos que é uma coisa só?

Clique para continuar lendo…

Triângulo de Pascal e a linguagem C

Quando meu professor de matemática (professor, doutor Pedro Grosso) mostrou a sala sobre o triângulo de pascal (que, segundo algumas pesquisas que fiz, não é exatamente de pascal) achei muito legal e interessante.

Tá, na verdade achei legal não o triângulo, mas o fato de um desocupado fiadamãe ter ficado fazendo números em forma de pirâmide e no final ser reconhecido mundialmente.

omg!

Podemos fazê-lo de duas maneiras. Ou você vai alegremente colocando 1 no topo e nas laterais, realizando a soma se tiver números acima, ou fazendo a formula da combinatória.

Detalhe que a primeira linha não é 1, é 0. A primeira coluna também é 0.

Muito bonito, é intimamente ligado ao binómio de newton, MAS E DAÍ?

Pô, bate o olho no esquema, manow. Tem uma sequencia lógica, podemos criar um programinha pra printar automaticamente as linhas do triângulo =D. E foi isso que o professor pediu.

Acho que devo muito ao professor por ter pedido isso, pois me fez parar para pensar antes de sair programando. Foi nisso também que percebi ser muitas vezes necessário jogar o que temos num papel, analisar, e só depois programar.

A maior parte é fácil e até já temos outros códigos prontos na web. Quando lidamos com linhas e colunas, basicamente usamos dois laços de repetição. Um gera as linhas, e o outro as colunas nessas linhas.

O numero correto das linhas é mais fácil de se encontrar usando a combinatório, já que ensinar o computador a “olhar as linhas anteriores” e fazer uma soma entre os dois numeros seria bem complexo (precisaríamos salvar todos os resultados anteriores em vetores, além de varre-los e somá-los, por ex).

Até ai belezinha. Mas e pra alinhar a desgraça?

What?!

What?!

Joguei o triangulo num papelzinho de loto antigo e fui colocando quadrados para cada espaço do triangulo. Notei que na ultima linha não tinha nenhum. Na penultima um. Na ante-penultima dois, e assim por diante.

Perceba que a primeira linha tem, de espaços, a quantidade de linhas!

A segunda tem a quantidade de linhas, menos um. O decremento ocorre em função da linha que estamos, portanto, o alinhamento do triangulo é dado por total de linhas – numero da linha atual.

Simples né? Demorou um bocado para eu entender isso. Mas pelo menos aprendi a importância de esboços e anotações, elas clarificam o pensamento.

Por fim, o código da versão 2.0 (que tive de fazer de novo, no segundo semestre xD por questão de orgulho, não olhei no fonte e fiz do zero XDD ficou mais organizado dessa vez)

#include
#include

int fatorial(int n);
int comb(int a, int b);
void tab(int n);

int main(int argc, char *argv[])
{
//para deixar genérico, precisaríamos perguntar o user
//o valor de num
int i=0,i2=0,num=8;

for(i = 0; i <= num; i++) { //inicio de linha //tabulamos nela, é o numero total de linhas - o num da linha atual tab(num-i); for(i2 = 0; i2 <= i; i2++) { //usamos 2 pois só vamos até 2 digitos printf("%2d  ",comb(i,i2)); } //fim da linha printf("\n"); } getch(); return 0; } void tab(int n) { int i=0; for(i=0; i <= n; i++) printf("  "); } int fatorial(int n) { if(n == 0) return 1; return (n*fatorial(n-1)); } int comb(int a, int b) { //s2 return complexos //C(a,b) //fat(a) / (fat(b) * fat(a-b)) return (fatorial(a) / (fatorial(b) * fatorial(a-b))); } [/sourcecode] Cya! Que seja útil aos próximos sistemeiros da informática e programadores desafiados.