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
Este blog foi criado devido à dificuldade que estou tendo de encontrar alguns códigos de algoritmos na net. Sei que, assim como eu, outros procuram o mesmo conteúdo. Espero estar ajudando. Todas as contribuições serão bem-vindas.
segunda-feira, 25 de abril de 2011
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();
}
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;
}
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
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;
}
#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();
}
#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();
}
#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();
}
Assinar:
Postagens (Atom)