FórumGdH

Página Inicial do Guia do Hardware

Registrar FAQ Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Voltar   FórumGdH > Profissional > Programação, scripts, web e banco de dados
Bem-vindo ao FórumGdH
Não se esqueça de se registrar, é grátis . Nós temos 754.118 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.

Resposta
 
Opções do Tópico
Antigo 03-09-2008, 2:40   #1 (permalink)
nicksertecon
Newbie
 
Avatar de nicksertecon
 
Registrado em: Mar 2008
Mensagens: 17
Reputação: 0 nicksertecon está indo no caminho certo
Padrão Exercicios com Recursividade...

Fiz uns exercícios em Linguagem C e gostaria da análise para que funcione direitinho:

1) Escrever um programa que leia um vetor de elementos ordenados que use uma função booleana recursiva que efetue pesquisa binária sobre um vetor de inteiros, que permita verificar se um valor pesquisado existe ou não no vetor.
Código:
#include <stdio.h> #include <stdlib.h> int busca (int ch, int e, int d, int v[]){ if (e == d-1) return d; // base da recursao else { int m = (e + d)/2; if (v[m] < ch) return busca (ch, m, d, v); else return busca (ch, e, m, v);} } int main(void) { int *vet, num, chave, i, ini, fim; printf ("\nNumero de Elementos: "); // quantidade de elementos do vetor scanf ("%d", &num); vet = (int *) malloc (sizeof (int) * num); // alocando memoria para o vetor printf ("Entre apenas com numeros inteiros positivos em ordem crescente: "); for (i = 0; i < num; i++){ scanf ("%d", &vet[i]); // carregando o vetor de numeros if (vet[i] < 0) printf ("\nErro: Digite apenas numeros positivos crescentes!"); } printf ("Numero que deseja buscar no vetor: "); scanf ("%d", &chave); if (chave == busca (chave, ini, fim, vet)) printf ("Numero encontrado \n%d", busca (chave, ini, fim, vet)); else printf ("Numero nao consta nesta sequencia!"); return EXIT_SUCCESS; }
2) Fazer uma função recursiva que calcule o valor da série S descrita a seguir para um valor n > 0 a ser fornecido como parâmetro para a mesma:
S = 1 + 1/2! + 1/3! + ... 1/n!
OBS: A função fatorial também deve ser recursiva.
Código:
#include <stdio.h> #include <stdlib.h> int fatorial (int n){ if (n == 0) return 1; else return n * fatorial (n-1); } float soma_s (int n){ if (n== -1) return 0; else { float s; printf ("%d\n", n); s = 1.0 / fatorial (soma_s(n-1)); return s;} } int main (void) { int num; printf ("\nInforme o numero para a sequencia da soma: "); scanf ("%d", &num); printf ("\nO fatorial %d\n", fatorial (num)); printf ("\nA soma e %.6f\n", soma_s(num)); return EXIT_SUCCESS; }
nicksertecon está offline   Responder com Quote
Antigo 03-09-2008, 2:47   #2 (permalink)
nicksertecon
Newbie
 
Avatar de nicksertecon
 
Registrado em: Mar 2008
Mensagens: 17
Reputação: 0 nicksertecon está indo no caminho certo
Padrão Esclarecimentos sobre o tópico

Fiz estes programinhas, mas ainda não obtive o resultado esperado.
Dessa forma gostaria que comentassem onde estão os erros, ok!
nicksertecon está offline   Responder com Quote
Antigo 03-09-2008, 6:53   #3 (permalink)
OoDragooNoO
General de Pijama
 
Avatar de OoDragooNoO
 
Registrado em: Sep 2006
Localização: Porto Alegre ~ RS
Idade: 24
Mensagens: 3.548
Reputação: 21 OoDragooNoO Sua luz ofusca a todosOoDragooNoO Sua luz ofusca a todosOoDragooNoO Sua luz ofusca a todosOoDragooNoO Sua luz ofusca a todosOoDragooNoO Sua luz ofusca a todos
Padrão

Citação:
Postado Originalmente por nicksertecon Ver Mensagens
Fiz estes programinhas, mas ainda não obtive o resultado esperado.
Dessa forma gostaria que comentassem onde estão os erros, ok!
seria uma boa tu dizer que tipos de erros ocorrem :S
e se nao ocorre nenhum erro de compilaçao, qual o resultado esperado e qual o resultado obtido

flw xD/
__________________
DragaO~
um Otaku que programa em PHP e que tambem tem um blog

novo post : PHP : Extraindo arquivos zipados
OoDragooNoO está offline   Responder com Quote
Antigo 03-09-2008, 11:15   #4 (permalink)
nicksertecon
Newbie
 
Avatar de nicksertecon
 
Registrado em: Mar 2008
Mensagens: 17
Reputação: 0 nicksertecon está indo no caminho certo
Padrão

Citação:
Postado Originalmente por OoDragooNoO Ver Mensagens
seria uma boa tu dizer que tipos de erros ocorrem :S
e se nao ocorre nenhum erro de compilaçao, qual o resultado esperado e qual o resultado obtido

flw xD/
OoDragooNoO,
No caso do primeiro programa, o que acontece é que não está retornando o resultado da pesquisa, ou seja, a função recursiva não está respondendo ao main.
Quanto ao segundo, o erro é que o resultado para a soma de 1/n! tá dando sempre 1.0000, não mostrando os valores reais (float) que deveria.
Abraços!!!
nicksertecon está offline   Responder com Quote
Antigo 03-09-2008, 15:21   #5 (permalink)
Pirituba
Membro Senior
 
Avatar de Pirituba
 
Registrado em: Sep 2006
Localização: São Carlos
Idade: 30
Mensagens: 208
Reputação: 23 Pirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atenção
Enviar mensagem via MSN para Pirituba
Padrão

Salve!

No primeiro programa vc não esta inicializando as variáveis ini = 0; e fim = num -1; pra passa-las.

Código:
int busca (int ch, int i, int d, int v[]){ int m; if (i == d) // se ini == fim return v[d]; // base da recursao else { m = (i + d)/2; if(v[m] == ch) return v[m]; if (v[m] < ch) return busca (ch, m + 1, d, v); else return busca (ch, i, m - 1, v); } }
Código:
printf ("Numero que deseja buscar no vetor: "); scanf ("%d", &chave); if (chave == busca (chave, ini, fim - 1, vet)) // fim = num; printf ("Numero encontrado \n%d", chave); // não coloca a função aqui naum senaum vc vai chamar o processo todo novamente else printf ("Numero nao consta nesta sequencia!");
Abraço;
__________________
O mundo é um moinho.

Poker mundo novo pra mim e cheio de diversidade.
Alguém aih domina? Preciso de um mentor........ que não cobre nada para transmitir conhecimento.
Pirituba está offline   Responder com Quote
Antigo 05-09-2008, 10:59   #6 (permalink)
nicksertecon
Newbie
 
Avatar de nicksertecon
 
Registrado em: Mar 2008
Mensagens: 17
Reputação: 0 nicksertecon está indo no caminho certo
Padrão

Olá Pirituba...
Fiz o que vc sugeriu, inicializando as variáveis ini e fim, mas continua dando erro, informando que o número não consta na sequência, mesmo que esteja lá!
Abraços!!!
nicksertecon está offline   Responder com Quote
Antigo 05-09-2008, 18:26   #7 (permalink)
Pirituba
Membro Senior
 
Avatar de Pirituba
 
Registrado em: Sep 2006
Localização: São Carlos
Idade: 30
Mensagens: 208
Reputação: 23 Pirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atenção
Enviar mensagem via MSN para Pirituba
Padrão

Salve....

Dah uma olhada nas alterações que eu fiz... no código que eu postei acima, o que vc deve fazer é o seguinte, pega um vetor pequeno e analisa caso a caso, quando o valor existe, quando ele é maior que todos os valores, quando ele é menor que todos, aih vc vai entender onde estão os problemas no seu código;

abraço
__________________
O mundo é um moinho.

Poker mundo novo pra mim e cheio de diversidade.
Alguém aih domina? Preciso de um mentor........ que não cobre nada para transmitir conhecimento.
Pirituba está offline   Responder com Quote
Antigo 06-09-2008, 16:29   #8 (permalink)
nicksertecon
Newbie
 
Avatar de nicksertecon
 
Registrado em: Mar 2008
Mensagens: 17
Reputação: 0 nicksertecon está indo no caminho certo
Padrão

Pirituba...
Consegui fazer com suas dicas e analisando outros exemplos!
Tenho outra aplicação com fila circular, mas não vou postar aqui por ser muito grande.
Posso enviar pro teu e-mail pra análise?
Obrigado, ok!
nicksertecon está offline   Responder com Quote
Antigo 06-09-2008, 21:46   #9 (permalink)
Pirituba
Membro Senior
 
Avatar de Pirituba
 
Registrado em: Sep 2006
Localização: São Carlos
Idade: 30
Mensagens: 208
Reputação: 23 Pirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atençãoPirituba É esplêndido e chama muita atenção
Enviar mensagem via MSN para Pirituba
Padrão

Manda aih, vou tentar responder o mais rápido blz.... falow
__________________
O mundo é um moinho.

Poker mundo novo pra mim e cheio de diversidade.
Alguém aih domina? Preciso de um mentor........ que não cobre nada para transmitir conhecimento.
Pirituba está offline   Responder com Quote
Antigo 17-09-2008, 17:57   #10 (permalink)
roger_oli
Newbie
 
Registrado em: Sep 2008
Mensagens: 1
Reputação: 0 roger_oli está indo no caminho certo
Padrão

nicksertecon

mude o seguinte no segundo exercício:
  • linha 13: if (n== 1) return 1;
  • linha 19: vc num ta somando, entaum tem que fazer assim:
s = 1.0 / fatorial(n)+ (soma_s(n-1));

o primeiro exercício eu respondo amanhã que ainda não deu tempo de ver.
Falow
roger_oli está offline   Responder com Quote
Antigo 16-10-2008, 1:22   #11 (permalink)
nicksertecon
Newbie
 
Avatar de nicksertecon
 
Registrado em: Mar 2008
Mensagens: 17
Reputação: 0 nicksertecon está indo no caminho certo
Padrão Vlw a força Roger...

Consegui resolver!
Apliquei as mudanças sugeridas e ficou tudo funcionando!
Abraços!!!
nicksertecon está offline   Responder com Quote
Resposta


Opções do Tópico

Regras de Mensagens
Você não pode criar tópicos
Você não pode postar respostas
Você não pode anexar arquivos
Você não pode editar suas mensagens

Código vB está Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Ir para...


Horários baseados na GMT -3. Agora são 14:07.