Jump to content

Erro na pesquisa binária


Recommended Posts

Posted (edited)

ola amigos gostaria de obter ajuda de vcs se possível, estou fazendo um algoritmo em C que calcula um fatorial e somatório de um vetor de 15 elementos que com uma pesquisa binaria exibe quando pesquisado o fatorial e somatório do numero, chegou em uma parte da pesquisa binaria que não estou conseguindo resolver, alguém poderia me ajudar por favor

Edited by sales
Falta GeSHi
Posted (edited)

antes do mais, coloca o teu código dentro das tags do geshi.

se não sabes como, verifica no fundo da página onde diz Ajuda.

depois explica exactamente o que o código deveria fazer, porque a tua descrição é ilegível.

no final, apresenta qual é realmente a tua dúvida, dizer que não consigo não diz nada sobre qual é o problema em questão

Edited by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted

Ao tentar dar uma indentação razoável ao teu código verifiquei que te faltam algumas chavetas o que torna o teu código não compilável.

Sugestão: divide o teu programa em várias funções em vez de estar tudo metido dentro da função main.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

vou explicar melhor, é um codigo que o usuario digita 15 valores e eles são armazenados no vetor A depois disso é criado o vetor B com o fatórial dos valores do vetor A e ainda é criado um vetor C com o somatório dos valores do vetor A tenho que criar uma pesquisa binária para o usuario pesquisar o valor desejado e o programa deve informar o valor pesquisado do vetor A, seu fatorial e somatorio .

Posted

Sabes que 13! (13 * 12 * 11 * ... * 3 * 2) ocupa mais do que 32 bits, nao sabes?

E ainda: a biblioteca "Standard" do C tem uma funcao ja feita que serve para pesquisa binaria!

Le sobre bsearch().

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted (edited)

ja fiz a indentação e identifiquei a chave que estava faltando mas nao tem jeito pra esse codigo rodar e nao entendi como adicionar a biblioteca pra pesquisa binaria

Edited by sales
Posted

aqui tens o teu código indentado, vê onde te falta os parênteses e/ou onde tens a mais

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
   int matrizA [2], matrizB[2],matrizC[2], i=0, j, fatorial=1, cont=0, elemento, somatorio, aux;
   char resposta = 's';
   bool parar = false;

   for (i=0; i<2; i++)
   {
       printf ("Digite o %d elemento: ", i);
       scanf ("%d", &matrizA[i]);
   }

   int outra=0;
   for (i=0; i<1; i++)
   {
       outra = matrizA[i];
       for (j=i++; j<2; j++)
       {
           if (matrizA[i] < matrizA[j])
           {
               aux = matrizA[i];
               matrizA[i] = matrizA[j];
               matrizA[j] = aux ;
           }
       }

       for (i=0; i<2; i++)
           printf ("A matriz ordenada A %d \n ", matrizA[i] );

       getch ();
   }

   for (i=0; i<2; i++)
   {
       matrizB[i] = matrizA[i];
   }

   for (cont=0; cont<2; cont++)
   {
       elemento = matrizB[cont];
       fatorial=1;

       while (fatorial < matrizB[cont])
       {
           elemento = fatorial * elemento;
           fatorial == fatorial++;
       }

       printf (" O fatorial de %d %d \n",matrizB[cont], elemento);
       getch ();
   }

   for (i=0; i<2; i++)
   {
       matrizC[i] = matrizA[i];
   }

   for (cont=0; cont<2; cont++)
   {
       elemento = matrizC[cont];
       somatorio=0;

       while (somatorio < matrizC[cont])
       {
           elemento = somatorio + elemento;
           somatorio == somatorio++;
       }

       printf (" O somatorio de %d %d \n",matrizC[cont], elemento);
       getch ();
   }

   //Pesquisa Binária
   int resposta=1, sim = 1, nao = 0, acha = 0, pesquisa, comeco, final, meio;
   while (resposta == 1)
   {
       printf ("Qual o número a ser pesquisado na matriz A? ");
       scanf ("%d", &pesquisa);
       comeco=1;
       final=2;
       acha=0;
       printf ("atribuicao de valores pra final %d \n acha %d \n e comeco %d \n ", final, acha, comeco);
       getch ();

       while (comeco < final) && (acha==0)
       {
           meio = (comeco + final)/2;
           printf ("acha %d \n", acha);
           getch ();
           if (pesquisa == matrizA[meio])
           {
               printf ("achou ");
               achou = 1;
               getch ();
           else
           {
               if (pesquisa > matrizA[meio])
               {
                   final= meio--;
               else
               {
                   comeco = meio++;
               }
           }
       }
   }
}
}

printf ("Deseja pesquisar outro valor para a matriz A? \a \a(sim/nao) ");
scanf ("%d",&resposta );
getch ();
}
IRC : sim, é algo que ainda existe >> #p@p
Posted

as chaves estão certas 17 abertas para 17 fechadas, parênteses também esta dando um erro na compilação na linha

 //

int resposta=1, sim = 1, nao = 0, acha = 0, pesquisa, comeco, final, meio;

Posted

as chaves estão certas 17 abertas para 17 fechadas

achas mesmo que é assim que se verifica ????

int main()
}}}}}} return 0; {{{{{{

6 abertas e 6 fechadas, então está correcto ...

achas que os programadores são pessoas tão paranóicas que querem o código indentado só para ficar bonito ?

NÃO !!!!

os programadores querem o código indentado para ver este tipo de problemas em 2 segundos em vez de 30 minutos !!!

IRC : sim, é algo que ainda existe >> #p@p
Posted (edited)

esta dando um erro na compilação na linha

int resposta=1, sim = 1, nao = 0, acha = 0, pesquisa, comeco, final, meio;

A linguagem C sofreu varias alteracoes ao longo dos anos.

A primeira versao "Standardizada" foi publicada em 1989 (ou 1990 segundo o organismo de "standardizacao").

Depois disso, foi publicado outro Standard em 1999 ... e outro em 2011.

Aparentemente o teu compilador é um compilador para a versao de C de 1989 (que nao aceitava definicoes de variaveis no meio de codigo).

Se eu tiver razao tens, basicamente, duas hipoteses:

a) usa um compilador de C para a versao de 1999 (ou 2011)

b) altera o teu codigo para estar compativel com a versao de 1989

Para a opcao a tens varias hipoteses de download de varios compiladores (o Microsoft Visual Studio é um compilador de C versao 1989 (com extras))

Para a opcao b passa todas as declaracoes para linhas anteriores, antes de qualquer instrucao.

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

estou usando o Bloodshed Dev-C++, eu admito Sr. HappyHippy que não sei indentar nem verifica chaves, este codigo esta muito complicado pra mim, obrigado pela ajuda de vcs, eu desisto ..

Posted (edited)

estou usando o Bloodshed Dev-C++

Nao conheco esse software mas, de acordo com uma pesquisa no Google, ele usa o GCC como compilador.

O GCC tanto pode compilar C de 1989, como C de 1999 (como outras versoes, nem todas "Standardizadas").

Le o manual da aplicacao para saberes como has-de dizer ao compilador propriamente dito para usar a versao de C de 1999.

Usando o compilador isoladamente na linha de comando do Linux (ou Windows), a maneira de pedir C99 é

gcc -std=c99 -pedantic ...

Por enquanto (gcc version 4.7.2), se nao se usar parametros, o compilador é para a linguagem conhecida como GNU89 (esta linguagem é basicamente a versao publicada em 1989 com extras -- mas sem declaracao de variaveis e codigo misturados)

Edited by pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

olha par o código que apresentei e verifica estas condições:

- se uma chaveta foi aberta numa coluna, necessita obrigatóriamente de ser fechada (na mesma coluna) posteriormente

- se uma chaveta foi aberta numa coluna, não podes voltar a abrir (na mesma coluna) sem a fechar

- se uma chaveta foi fechada numa coluna, deverá aparecer imediatamente antes (na mesma coluna) uma aberta

estas não são regras de indentação, mas sim um conjunto de regras de visualização de erros em código bem indentado

IRC : sim, é algo que ainda existe >> #p@p

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.