quarta-feira, 7 de março de 2012

Vetores Vazios em C

Fala galera tudo bom?
vou passar um questionamento de C que fiz ao professor da minha disciplina

Opa tudo bom?
Eu estou com uma dúvida em C que está me tirando o sono, já pensei, procurei e não encontrei como verificar se uma posição do vetor está vazio ou ainda não foi declarado, em java, php e python e bem simples mais em C ainda não achei

Observe que não existe, a princípio a posição vazia.
Minha sugestão: ao iniciar o vetor, coloque um valor inválido, exemplo -1. Desta forma, você pode verificar se a posição é igual a -1, ou seja, ainda não tem valor válido.

Outra resposta sobre vetores de char

Vamos supor um array de char de 10 posicoes. O nome dele será vetor:

char vetor[10];

/* Nesse momento, o espaço (10 chars) foi alocado na area de memoria estática. */
/* Neste instante, quando será o conteúdo do array? LIXO. */

/* De praxe, você deve inicializar essa área de memória com um conteúdo que, para você, é o "VAZIO". Abaixo, vou inicializar cada posição com 'espacos em branco' */

memset(vetor, ' ', 10); /* 1o.parametro: o endereço da primeira posição; 2o.parâmetro: qual o char que preencherá cada posição; 3o. parâmetro: quantos bytes serão preenchidos) */

/* Aí, para saber se uma posição está vazia, é só ver o seu conteudo: */
if(vetor[3] == ' ')
{
// Está vazia!
}

/****************************/

Enfim: você inicializa as posições do array com o que quer você considere como vazio. Aí você usa o vetor, grava valores em suas posições. Para saber se uma posição do array está vazia, faça um simples teste como o acima.

terça-feira, 28 de fevereiro de 2012

Recursividade

Em Ciência da computação, a recursividade é a definição de uma subrotina (função ou método) que pode invocar a si mesma. A grande vantagem da recursão está na possibilidade de usar um programa de computador finito para definir, analisar ou produzir um estoque potencialmente infinito de sentenças, designs ou outros dados.
Wikipédia

Então vamos usar um fatorial para exemplificar
uma função em c que calcule o fatorial de um numero x sem recursividade

int fatorial (int x){
int i;
i = x - 1;
for (i; i!=1; i--)
x = x * i;
return x;
}

Então podemos considerar que:

fatorial de 5 é igual a 5 multiplicado pelo fatorial de 4;
fatorial de 4 é igual a 4 multiplicado pelo fatorial de 3;
fatorial de 3 é igual a 3 multiplicado pelo fatorial de 2 que é 2


fatorial de x = x * fatorial de ( x -1 );

Logo em C a função fatorial recursiva fica.


int fatorial (int x){
if(x<2)
return x;
return fatorial(x-1) * x;
}