segunda-feira, 25 de abril de 2011

Ponteiros

http://www.juliobattisti.com.br/tutoriais/katiaduarte/cbasico007.asp - Ponteiros - descrições e usos
http://www.juliobattisti.com.br/tutoriais/katiaduarte/cbasico008.asp - Ponteiros - chamadas por referência
http://www.juliobattisti.com.br/tutoriais/katiaduarte/cbasico009.asp - Ponteiros - alocação dinâmica

Texto na íntegra: http://www.2shared.com/file/bkYn4ZW9/PONTEIROS.html

sexta-feira, 15 de abril de 2011

Série de Fibonacci em C (Com recursão)

#include<stdio.h>
void preencherSerieFibonacciRec(int v[],int tam)
{
 int fim=tam-1;
 if(tam==1)v[0]=0;
 if(tam==2)v[0]=0;v[1]=1;
 if(tam>2)
 {
  preencherSerieFibonacciRec(v,fim);
  v[fim]=v[fim-1]+v[fim-2];
 }

}
int main (void)
{
 int v[30],tam,i;
 printf("Informe o tamnho da serie de fibonacci (maximo=30):\n");
 scanf("%d",&tam);
 preencherSerieFibonacciRec(v,tam);
 while(tam>30)
 {
  printf("Informe um valor ate 30!");
  scanf("%i",&tam);
 }
 for(i=0;i<tam;i++) printf("%d ",v[i]);
 getchar();
 getchar();
}

Inserção por busca binária

#include<stdio.h>
int adicPorInsPesqBin(int tam,int v[],int pesq)
{
 int ini=0,fim=tam-1,i=0;

 while(ini<=fim)
 {
  int meio;
  meio=(ini+fim)/2;
  if(v[i]==pesq)
  {
   return -1;
  } 
  else if(v[meio]<pesq)
  {
   ini=meio+1;
  }
  else if(v[meio]>pesq)
  {
   fim=meio-1;
  }
  i++;
 }

 while(ini<=tam)
 {
  v[tam]=v[tam-1];
  tam--;
 }
 v[ini]=pesq;
 return ini;

}
int main (void)
{
 int v[4]={4,5,12,22},pos,x,i,k;
 printf("Informe o valor a ser inserido: ");
 scanf("%d",&x);
 pos=adicPorInsPesqBin(5,v,x);
 printf("O valor foi inserido na posicao: %d. (Se o programa retornou -1, significa que o valor a ser inserido ja existe no vetor\n)",pos);
 printf("\n\n");
 if(pos==-1)k=4;
 else k=5;
 for(i=0;i<k;i++)
 {
  printf("%d\t",v[i]);
 }
 return 0;
}

quinta-feira, 14 de abril de 2011

Nível de complexidade dos algoritmos

Complexidade n - Quando uma operação é realizada em cada elemento de entrada (ex. inserção)
Complexidade log n - Quando se divide o problema em outros menores (ex. busca binária)
Complexidade n log n - Quando se divide o problema em outros menores e depois os resultados de cada um são unidos (ex. merge, quick)
Complexidade quadrática - Quando há 2 loops (um encaixado no outro) (ex. seleção)
Complexidade cúbica - Quando há 3 loops (um encaixado nos outros dois)
Complexidade exponencial - Quando se utiliza a "força bruta" na resolução

sábado, 9 de abril de 2011

Ordenação de vetores em C (Método da bolha)

#include<stdio.h>
#include<string.h>
void ordenaVetorString(char v[][40], int tam)
{
int i,j;
char aux[40];
for(j=0;j<tam-1;j++){
for(i=0;i<tam-1;i++){
if(strcmp(v[i],v[i+1])>0){
strcpy(aux,v[i]);
strcpy(v[i],v[i+1]);
strcpy(v[i+1],aux);}}}
}
int main ()
{
char nome[10][40],i;
printf("Informe os nomes dos alunos:\n");
for(i=0;i<10;i++){
printf("Nome pos %d: ",i+1);
gets(nome[i]);}
ordenaVetorString(nome,10);
for(i=0;i<10;i++){
printf(nome[i]);
printf("\n");}
return 0;
}

terça-feira, 5 de abril de 2011

Adivinhe o número!

Programa em C que escolhe um número aleatório entre 1 e 1000. Duas pessoas tentam adivinhar o número gerado pelo pc. O participante que inicia o jogo também é escolhido de forma aleatória.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(){
char jogador[2][40];
int turno,secreto,lance;
srand(time(NULL));
printf("Nome do jogador 1:");
gets(jogador[0]);
printf("Nome do jogador 2:");
gets(jogador[1]);
turno = rand() % 2;
secreto = (rand() % 1000) + 1;
do {
printf("Lance do jogador %s:", jogador[turno] );
scanf("%d",&lance);
if(lance==secreto) {
printf("Jogador %s ganhou!\n", jogador[turno] );
} else if(lance > secreto) {
printf("O numero eh menor!\n");
} else {
printf("O numero eh maior!\n");
}
if(turno==0)turno=1;
else turno=0;
} while (lance!=secreto);
getchar();
}

domingo, 3 de abril de 2011

Conversão de base

Converte um valor em uma base escolhida para a base decimal.


#include<stdio.h>
#include<math.h>
#include<string.h>
int BASTODEC(int base,char v[],int qtd)
{
int numdec=0,x,exp=0;
if (base==16)
{
for(x=qtd-1;x>=0;x--)
{
if(v[x]=='A' || v[x]=='a') v[x]=58;
if(v[x]=='B' || v[x]=='b') v[x]=59;
if(v[x]=='C' || v[x]=='c') v[x]=60;
if(v[x]=='D' || v[x]=='d') v[x]=61;
if(v[x]=='E' || v[x]=='e') v[x]=62;
if(v[x]=='F' || v[x]=='f') v[x]=63;
}
}
for(x=qtd-1;x>=0;x--)
{
numdec=numdec+(v[x]-48)*pow(float (base),exp++);
}
return int(numdec);
}
int main ()
{
int base,qt;
char num[10],k;
printf("Informe a base que deseja usar: ");
scanf("%d",&base);
getchar();
printf("\nInforme o numero que sera transformado a partir da base escolhida anteriormente (ate 9 digitos): ");
gets(num);
qt=strlen(num);
printf("\nO valor informado convertido em decimal eh: %d.\n\n",BASTODEC(base,num,qt));
getchar();
}