skip to main
|
skip to sidebar
Programando
Codigos em C , Java e alguma coisinha em Delphi
segunda-feira, 19 de outubro de 2009
Estrutura de Dados - Busca Binaria, Busca Sequencial, organização do vetor usando Bubble sort e inserção direta
Trabalho que envolve Busca Binaria, Busca Sequencial, organização do vetor usando Bubble sort e inserção direta.
#include
#include
#include
void direta(int *vet, int n)// Faz a ordenação por inserção Direta, recebo como parametros, o vetor e o seu tamanho.
{
int i ,j,v,z;
for (i=0; i < n; i++)//laço que percorre o vetor
{
v = *(vet+i);//uma variavel auxiliar recebe o conteúdo atual do indice do vetor
for (j = i - 1; j >= 0; j--)//j recebe a posição atual do vetor e decrementa até o começo do vetor.
{
if (*(vet+j) <= v)//testa se a posição atual é menor ou igual que a posição anterior, caso não seja , ele vai substitur nos proximos comandos
break;// força a saida do laço
*(vet+(j + 1)) =*(vet+j);//faz a troca jogando o valor maior uma posição adiante.
for(z=0;z
printf("|%d",*(vet+z));
printf("|\n");
}
*(vet+(j + 1)) = v;//faz a posição seguinte receber a posição atual.
}
printf("\nFUNCAO EXECUTADA COM SUCESSO!\n");
}
void busca_binaria(int *v, int n) //Faz uma busca no vetor, passo como parametros o vetor e o tamanho.
{
int e, m, d,num,aux=0;
printf("\nDigite o Numero a ser Pesquisado:\t");
scanf("%d",&num);
e = 0; d = n-1;// aqui, são atribuidas variáveis de controle para o tamanho do vetor. o começo(indice 0) fica na variavel E e o fim (indice maximo-1) na variavel D.
while (e <= d) //condição para percorrer o vetor
{
m = (e + d)/2; //M é a variavel com o indice da metade do vetor
if (v[m] == num)//se a variavel da posição atual é a digitada pelo usuário, o programa termina a busca.
{
printf("\nO numero foi encontrado na posicao: %d do vetor", m);
aux=1;//variavel apenas para verificar se o numero foi encontrado, e se não foi, mostrar uma mensagem de erro.
}
if (v[m] < num) //faz o teste se o numero pesquisado é maior que o comparado atualmente. Por causa desta condição, o vetor deve estar ordenado.
e = m + 1;//reduz o tamanho de pesquisa do vetor, diminuindo o tempo de busca.
else
d = m - 1;//reduz o tamanho de pesquisa do vetor, diminuindo o tempo de busca.
}
if (aux==0)
printf("\nO numero não foi encontrado\n");
else
printf("\nFUNCAO EXECUTADA COM SUCESSO!\n");
}
void busca_sequencial (int *v, int n) //Algoritimo de busca sequencial
{
int m = 0,x;
printf("\nDigite o Numero a ser Pesquisado no vetor:\t");
scanf("%d",&x);
while (m < n && v[m] < x)// Percorre o vetor do começo ao fim procurando o numero.
++m;
if (m < n && v[m] == x)
printf("\nA posição do numero encontrado eh:%d\n",m);
else
printf("\nNão foram encontradas ocorrencias para esta pesquisa!\n");
}
void aloca(int *v,int n)//alocação de memoria em tempo de execução
{
*v =(int*) (malloc(n * sizeof(int)));
if(v==NULL)
{
printf("A ALOCAÇÃO FALHOU\n");
system("pause");
exit(1);
}
}
void gera_vetor(int **vet,int n,int *st)//Função para criar um vetor
{
int i , j , teste;
float x;
srand(time(NULL));//faz com que a cada vez que a função rand seja chamada, traga valores diferentes , pois se não utilizado esta função, ele repete todas as vezes que o programa for executado.
printf("Gerando Vetor... Aguarde por Favor \n STATUS:");
for(i=0;i
*(vet+i)=0;
for(i=0;i
{
do{
teste=0; //variavel que verifica se o numero ja foi gerado anteriormente, ela deve ser zerada toda vez que o laço é iniciado.
*(vet+i)=rand()% n; // Gera um numero randomico
for(j=0;j
{
if(*(vet+i)==*(vet+j)) //testa se o numero ja foi gerado
teste=1; // altera o status da variavel que controla se o numero ja foi gerado .
}
}while(teste==1); //faz um loop até que o teste não seja alterado.
x=i % 100; //faz uma barra de preenchimento a cada 100 numeros
if(x==0)
printf("."); //imprime um ponto, criando uma barra de preenchimento.
}
printf("\nVETOR CRIADO COM SUCESSO!!!\n");
*st=1;
}
void cabecalho()
{
int i;
for(i=0;i<80 data-blogger-escaped-br="" data-blogger-escaped-i=""> printf("%c",178);
printf("%c BEM VINDO AO TRABALHO BIMESTRAL DE ESTRUTURA DE DADOS!!! %c",178,178);
printf("%c ALUNOS:ALAN GUILHERME HOOGEVOONINK 3 SIAN %c",178,178);
printf("%c JOAO PAULO LAZZAROTTO %c",178,178);
for(i=0;i<80 data-blogger-escaped-br="" data-blogger-escaped-i=""> printf("%c",178);
printf("\n");
system("pause");
}
void bubble_sort (int *v, int n)//função bubble sort
{
int i, j,z;
int temp;
for (i=0; i
for (j=0; j
if (v[j]>v[j+1])
{
temp = *(v+j);
v[j] = v[j+1];
v[j+1] = temp;
}
}
void grava_arquivo (int *v, int n)
{
FILE * arq;
int i;
char arquivo[50];
printf("\nDigite o nome do Arquivo a ser salvo:\n");
fflush(stdin);
scanf("%s",arquivo);
arq=fopen(arquivo,"w");//cria o arquivo
if(arq==NULL)//testa se foi criado corretamente
{
printf("\nFail to create FILE\n");
system ("pause");
exit(1);
}
for(i=0;i
fprintf(arq,"%d \t",*(v+i));//grava o vetor no arquivo
fclose(arq);
printf("\nARQUIVO SALVO COM SUCESSO\n");
}
void le_arquivo (int *v,int n,int *st)
{
FILE * arq;
int i ;
char arquivo[50];
*st=1;
printf("\nDigite o nome do Arquivo a ser Lido:\n");
fflush(stdin);
scanf("%s",arquivo);
arq=fopen(arquivo,"r");//abre o arquivo
if(arq==NULL)//testa se foi lido corretamente
{
printf("\nFail to read FILE\n");
system ("pause");
exit(1);
}
for(i=0;i
fscanf(arq,"%d \t",(v+i));
fclose(arq);
printf("\nARQUIVO LIDO COM SUCESSO\n");
}
void mostra_vetor(int *v ,int n)
{
int i;
for(i=0;i
printf("%d \t",*(v+i));
}
int main(int argc, char *argv[])
{
int *vet , menu, status=0 , tam;
cabecalho();
do{
printf("Digite a opcao desejada:\n\n\n \t\t ATENCAO! OBSERVACOES: \n\t Caso um vetor nao tenha sido criado ou lido de um arquivo ,\n\t voce nao podera executar as outras opcoes!\n\t as opcoes de BUSCA so funcionam com vetores ORDENADOS!");
printf("\n\n\n\n");
printf("\t 1-CRIA UM VETOR obs: Vetor desordenado\n\t 2-GRAVA O VETOR NO ARQUIVO\n\t 3-LE UM VETOR DO ARQUIVO\n\t 4-ORGANIZA SEU VETOR (BOBBLE SORT) \n\t 5-ORGANIZA SEU VETOR (INSERCAO DIRETA)\n\t 6-IMPRIME O VETOR \n\t 7-BUSCA SEQUENCIAL\n\t 8-BUSCA BINARIA\n\t 0-SAIR DO PROGRAMA\n\n\n\t DIGITE A OPCAO:\t");
scanf("%d",&menu);
switch (menu)
{
case 1 :
do{
printf("\n\tDIGITE O TAMANHO DO VETOR DESEJADO:\t");
scanf("%d",&tam);
if (tam<=0)
printf("\nTamanho de vetor invalido!, por gentileza, digite um numero positivo maior que zero!\n");
}while(tam <= 0 );
aloca(&vet,tam);
gera_vetor(vet,tam,&status);
system("pause");
system("cls");
break;
case 2 :
if(status==0)
printf("A OPCAO NAO PODE SER ACESSADA POIS NAO EXISTE UM VETOR CARREGADO NA MEMORIA!!!\n UTILIZE UMA DAS OPCOES PREENCHIMENTO DO VETOR\n");
else
grava_arquivo(vet,tam);
system("pause");
system("cls");
break;
case 3:
do{
printf("\n\tDIGITE O TAMANHO DO VETOR A SER LIDO\t");
scanf("%d",&tam);
if (tam<=0)
printf("\nTamanho de vetor invalido!, por gentileza, digite um numero positivo maior que zero!\n");
}while(tam <= 0 );
aloca(&vet,tam);
le_arquivo(vet,tam,&status);
system("pause");
system("cls");
break;
case 4 :
if(status==0)
{
printf("A OPCAO NAO PODE SER ACESSADA POIS NAO EXISTE UM VETOR CARREGADO NA MEMORIA!!!\n UTILIZE UMA DAS OPCOES PREENCHIMENTO DO VETOR\n");
system("pause");
break;
}
bubble_sort(vet,tam);
printf("FUNCAO EXECUTADA COM SUCESSO!!! \n");
system("pause");
system("cls");
break;
case 5 :
if(status==0)
{
printf("A OPCAO NAO PODE SER ACESSADA POIS NAO EXISTE UM VETOR CARREGADO NA MEMORIA!!!\n UTILIZE UMA DAS OPCOES PREENCHIMENTO DO VETOR\n");
system("pause");
break;
}
direta(vet,tam);
system("pause");
system("cls");
break;
case 6:
if(status==0)
{
printf("A OPCAO NAO PODE SER ACESSADA POIS NAO EXISTE UM VETOR CARREGADO NA MEMORIA!!!\n UTILIZE UMA DAS OPCOES PREENCHIMENTO DO VETOR\n");
system("pause");
system("cls");
break;
}
system("cls");
printf("\n\n\n\n\n\n");
mostra_vetor(vet,tam);
printf("\n\n");
system("pause");
system("cls");
break;
case 7 :
if(status==0)
printf("A OPCAO NAO PODE SER ACESSADA POIS NAO EXISTE UM VETOR CARREGADO NA MEMORIA!!!\n UTILIZE UMA DAS OPCOES PREENCHIMENTO DO VETOR\n");
else
busca_sequencial(vet,tam);
system("pause");
system("cls");
break;
case 8 :
if(status==0)
printf("A OPCAO NAO PODE SER ACESSADA POIS NAO EXISTE UM VETOR CARREGADO NA MEMORIA!!!\n UTILIZE UMA DAS OPCOES PREENCHIMENTO DO VETOR\n");
else
busca_binaria(vet,tam);
system("pause");
system("cls");
break;
case 0 :
printf("OBRIGADO POR USAR O SISTEMA!\n");
system("pause");
system("cls");
free(vet);
exit(0);
default :
printf("\nOPCAO INVALIDA!\n");
system("pause");
system("cls");
}
}while(menu!=0);
return 0;
}
Primeiro codigo postado! Caso tenham dúvidas... comentem! eu respondo!! Abraços
Nenhum comentário:
Postar um comentário
Postagem mais recente
Postagem mais antiga
Página inicial
Assinar:
Postar comentários (Atom)
Post's daqui
▼
09
(9)
►
dezembro
(3)
►
novembro
(3)
▼
outubro
(3)
Codigos
Estrutura de Dados - Busca Binaria, Busca Sequenci...
Programando
Seguidores
Quem sou eu
Alan Hoogevoonink
Curitiba, Pr, Brazil
Ver meu perfil completo
Nenhum comentário:
Postar um comentário