Ir ao conteúdo

Retornando valor errado!


cesarniki

Posts recomendados

Postado

Seguinte, tenho um vetor de 20 posições, eu so vou parar quando valor inserido for 0 ou quando preencher as 20 posições. dai eu tenho que passar o vetor para uma função soma() para somar todos os elementos do vetor, só que o valor final ta saindo errado. Creio que esta no final da função quando ele chama a função novamente. alguém pode me ajudar?

---------------------------------código------------------------------------


#include <iostream>
using namespace std;
int total=0;
int soma(int vet[20],int i=1){
if (i==20)
return 0;
total += vet[i];
return soma(vet,i+1)+total;
}

int main()
{
int vetor[20];
int i=0, cont=0;
do {
cout << "informe valor para vetor" << endl;
i++;
cin >> vetor[i];
cont++;
}while (vetor[i]!=0/* && cont<20*/);
cout<<soma(vetor)<< endl;
return 0;
}

:wacko:

Postado

Olá César,

Dê uma olhada, qualquer dúvida no código é só dar um grito. ;)

Acredito que você esteja estudando recursão. Aquele incremento que você faz não é necessário, visto que o valor corrente atribuído à variável total é empilhado e depois desempilhado e somado consecutivamente com os retornos da função.

Também fiquei na dúvida se ao digitar 0 o programa encerraria completamente ou faria o somatório dos valores digitados até então. Eu modifiquei para esta última forma.

#include <iostream>
#define NUM 20
using namespace std;

int soma(int vet[NUM], int i, const int j)
{
int total;

if (i > j)
return 0;

total = vet[i];

return soma(vet, i + 1, j) + total;
}

int main()
{
int vetor[NUM];
int i = 0;

do {

cout << "Informe um valor para o vetor[" << i << "]: ";
cin >> vetor[i];

} while ( (vetor[i++] != 0) && (i < NUM) );

cout << endl << "Somatorio: " << soma(vetor, 0, --i) << endl;

return 0;
}

Abs.

LNW

Postado

Montei um exemplo também e adicionei comentários.


#include <iostream>
#define NUM 20

using namespace std;

int soma(int vet[NUM], int i)
{
if ( vet[i] == 0 || i == NUM ) // Verifica se a posição do array é 0 ou se chegou no limite
return 0;

return vet[i] + soma(vet, ++i);
}

int main(void)
{
int vetor[NUM] = {0}; // inicializa o array com o valor 0
int i = 0;

do
{
cout << "informe valor para vetor" << endl;
cin >> vetor[i];
} while ( vetor[i++] != 0 && i < NUM); // Verifica se o valor digita é 0 (e incrementa o "i" para a proxima rodada) ou atingiu o limite.

cout << soma(vetor, 0) << endl;

return 0;
}

Espero que ajude no entendimento.

  • Moderador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

Este tópico foi arquivado e está fechado para 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...