Ir ao conteúdo
  • Cadastre-se

trabalho busca binaria


Unnamed10
Ir à solução Resolvido por Unnamed10,

Posts recomendados

o trabalho e esse

Pesquise sobre busca binária. Desenvolva um código que lê números de um arquivo externo (adote um padrão, um número por linha ou algum caractere de separação), os ordena e em seguida pede ao usuário que informe um número. Procure o número, dentre os números lidos do arquivo, usando a busca binária.

 

o codigo que escrevi e esse:

 

#include <stdio.h>
#include <stdlib.h>
 
 
int main() {
 
    int i,j,tamanhovetor,pesquisa;
    printf("#####################################################\n");
    printf("#################Programa busca binaria##############\n");
    printf("#####################################################\n");
    printf("Este programa le os numeros de um arquivo .txt, os ordena em um vetor,\ne retorna ao usuario a posicao em que o numero solicitado se encontra no vetor.\n");
    printf("Renomei-e o arquivo a ser lido para ordenar.txt, e cole-o na mesma pasta do programa.\n");
    printf("Os numeros no arquivos devem ser separados cada numero em uma linha, e na primeira linha deve conter o a quantidade de linhas que possui o arquivo.\n");
    FILE *file;
    file = fopen ("ordenar.txt", "r");
    fscanf(file,"%d",&tamanhovetor);
    int vetor[tamanhovetor],aux;
 
    if (file == NULL) {
       printf ("Houve um erro ao abrir o arquivo.\n");
    }
    for (i=0;i<tamanhovetor;i++){
        fscanf(file,"%d",&vetor);
        printf("%d\n",vetor);
    }
    i = 0;
    j = 0;
    while(i<tamanhovetor)
        {
        while(j < vetor-1)
            {
            if(vetor[j] > vetor [j +1])
            {
                aux = vetor[j];
                vetor[j]=vetor[j + 1];
                vetor[j + 1] = aux;
            }
            j++;
        }
        i++;
        j = 0;
    }
    i = 0;
    printf("Digite o elemento que deseja pesquisa no vetor: ");
    scanf("%d", &pesquisa);
    return 0;
 }
 
estou compilando pelo codeblocks no mac book, esta me retornando o seguinte:
 

#####################################################

#################Programa busca binaria##############

#####################################################

Este programa le os numeros de um arquivo .txt, os ordena em um vetor,

e retorna ao usuario a posicao em que o numero solicitado se encontra no vetor.

Renomei-e o arquivo a ser lido para ordenar.txt, e cole-o na mesma pasta do programa.

Os numeros no arquivos devem ser separados cada numero em uma linha, e na primeira linha deve conter o a quantidade de linhas que possui o arquivo.

2

 

Process returned -1 (0xFFFFFFFF)   execution time : 0.460 s

Press ENTER to continue.

 
 
 
 
 
 
 

mais uma informacao eu criei um ordenar.txt para teste e esta dentro da pasta do programa, preciso corrigir este erro e terminar o codigo, o erro que me refiro e este 2, o codigo deveria imprimir os numeros que estão no arquivo e depois ordena-los para eu poder criar o codigo que fara a busca e retornara a posicao do numero. se for preciso mudar algo no codigo eu mudo, postei esse problema em varios foruns e ninguem conseguiu me dizer nada ate agora

Link para o comentário
Compartilhar em outros sites

Eu testei seu código. O problema está na leitura do arquivo. Os métodos utilizados não carregam os dados na memória corretamente. Estude esse código que faz essa tarefa:

#include <stdio.h>#include <string.h>#include <stdlib.h>#include <sys/stat.h>int main(){    int i, //Controlador de loop;    qNum = 1;  //Onde será armazenado a quantidade de valores    FILE *fp; //Ponteiro de arquivo    struct stat dadosDoArquivo; //Estrutura de dados valiosos de arquivo    if((fp = fopen("ordenar.txt", "r"))) //Se arquivo aberto com sucesso    {        stat("ordenar.txt", &dadosDoArquivo); //Lê dados valiosos do arquivo    }    else //Se não encontrado    {        printf("O arquivo nao foi encontrado.\n");        fclose(fp); //Destrói o ponteiro        return 0; //Fecha o programa    }    char dados_str[dadosDoArquivo.st_size]; //Variável  onde será armazenadoo os dados do arquivo    /** dadosDoArquivo.st_size indica o tamanho do conteúdo do arquivo em bytes **/    for(i=0; i<dadosDoArquivo.st_size; i++) //Enquanto não carregado todos os dados    {        dados_str[i] = fgetc(fp); //Pega caractere por caractere        if(dados_str[i] == ' ') //Se achar espaço            qNum++; //Haverá um número a mais nos dados    }    dados_str[i] = '\0'; //Substitui o último caractere para indicar fim de frase    int dados_ptr[qNum]; //cria Array de inteiros onde será armazenado os valores    char *pch = strtok(dados_str, " \0"); //Ponteiro que controla tokens de uma string        i = 0;    while (pch != NULL) //Enquanto houver tokens    {        dados_ptr[i] = atoi(pch); //Converte token em inteiro        i++; //Passa para o próximo número        pch = strtok (NULL, " "); //Procura próximo token    }    /** A partir daqui você cria suas implementações **/    //Exibe os números do arquivo como dados inteiros    for(i=0; i<qNum; i++)        printf("%i, ", dados_ptr[i]);    return 0;}
Link para o comentário
Compartilhar em outros sites


#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <sys/stat.h>

 

 

 

int main() {

 

    int i,j,pesquisa,qNum=1,valor,controle_pesquisa = 1, inicio,meio,fim,tamanho_vetor,aux;

 

    FILE *fp;

    struct stat dadosDoArquivo;

 

    if((fp = fopen("ordenar.txt", "r")))

    {

        stat("ordenar.txt", &dadosDoArquivo); //Lê dados valiosos do arquivo

    }

    else //Se não encontrado

    {

        printf("O arquivo nao foi encontrado.\n");

        fclose(fp); //Destrói o ponteiro

        return 0; //Fecha o programa

    }

    char dados_str[dadosDoArquivo.st_size];

 

    for(i=0; i<dadosDoArquivo.st_size; i++) //Enquanto não carregado todos os dados

    {

        dados_str = fgetc(fp); //Pega caractere por caractere

        if(dados_str == ' ') //Se achar espaço

            qNum++; //Haverá um número a mais nos dados

    }

    dados_str = '\0';

    int dados_ptr[qNum];

    char *pch = strtok(dados_str, " \0"); //Ponteiro que controla tokens de uma string

    i = 0;

    while (pch != NULL) //Enquanto houver tokens

    {

        dados_ptr = atoi(pch); //Converte token em inteiro

        i++; //Passa para o próximo número

        pch = strtok (NULL, " "); //Procura próximo token

    }

    dados_str = '\0'; //Substitui o último caractere para indicar fim de frase

 

    i = 0;

    while (pch != NULL) //Enquanto houver tokens

    {

        dados_ptr = atoi(pch); //Converte token em inteiro

        i++; //Passa para o próximo número

        pch = strtok (NULL, " "); //Pro

 

    for(i=0; i<qNum; i++)

        printf("%i, ", dados_ptr);

    

    }

    i = 0;

    j = 0;

    aux = 0;

    while(i<qNum)

        {

        while(j < dados_ptr-1)

            {

            if(dados_ptr[j] > dados_ptr [j +1])

            {

                aux = dados_ptr[j];

                dados_ptr[j]=dados_ptr[j + 1];

                dados_ptr[j + 1] = aux;

            }

            j++;

        }

        i++;

        j = 0;

    }

    i = 0;

    printf("Digite o elemento que deseja pesquisa no vetor: ");

    scanf("%d", &pesquisa);

    inicio = 0;

        fim = qNum - 1;

 

 

        while (inicio <= fim)

        {

 

 

              meio = (inicio + fim) / 2;

 

 

              if (pesquisa == dados_ptr[meio])

              {

                 controle_pesquisa = 0;

                 break;

              }

              else if (pesquisa < dados_ptr[meio])

              {

                 fim = meio - 1;

                 continue;

              }

              else if(pesquisa > dados_ptr[meio])

              {

                 inicio = meio + 1;

                 continue;

              }

              else

              {

                 controle_pesquisa = 1;

                 break;

              }

 

        }

 

        if (controle_pesquisa == 0){

           printf("Elemento %d encontrado! Posicao: %d - Valor: %d", pesquisa, meio, dados_ptr[meio]);

        } else {

           printf("Elemento %d nao encontrado!", pesquisa);

        }

    return 0;

}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!