Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

sales

Erro na pesquisa binária

Mensagens Recomendadas

sales

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

Editado por sales
Falta GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

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

Editado por HappyHippyHippo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sales

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 .

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

já corrigiste o problema das chavetas apresentada pelo @pmg ? se sim, apresenta o código que tens (e desta vez tenta por indentado)


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sales

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

Editado por sales

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

ja fiz a indentação e identifiquei a chave que estava faltando

ainda está errado ... faz a indentação como deve ser e mete isso como deve ser. é impossível isso compilar como está


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sales

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;

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

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.

Editado por 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
sales

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 ..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

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)

Editado por 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!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.