Erro no programa: soma não está sendo feita?? [RESOLVIDO]

1. Erro no programa: soma não está sendo feita?? [RESOLVIDO]

Jose Renan
JoseRenan

(usa Ubuntu)

Enviado em 17/09/2011 - 09:43h

olá pessoal, ando meio ausente nessas terras mesmo querendo ser mais participativo é o trabalho e a facul que me ocupam e ocuparão bastante ainda...
Bom, estou fazendo um exercício de programação que não está dando certo:

"Faça um programa que leia um valor N, inteiro e positivo
calcule e mostre a seguinte soma:

S= 1 + 1/2 + 1/3 + ... + 1/N"

Então fiz:

#include <iostream>
using namespace std;
int main ()
{
int n, a;
float b, ac=0;
cout<<"Digite um limite para a divisao: ";
cin>>n;
a=1;
while (a<=n)
{
cout<<"1/"<<a;
if (a!=n) cout<<" + ";
b=1/a;
ac=ac+b;
a++;
}
cout<<endl<<"S= "<<ac;
return 0;
}

Só que a soma está dando somente o número 1. Onde tá o erro que eu não estou vendo?




  


2. MELHOR RESPOSTA

Danilo Renato da Silva
danilo_renato

(usa Ubuntu)

Enviado em 17/09/2011 - 10:13h

José você precisa declarar explicitamente que o dividendo como float, senão a divisão é arredondada.
b=1.0f/a;
E você esqueceu do "1 +" inicial
antes do while: cout << "1 + ";
depois de b = 1.0f/a :
if(a == 1)
ac = 1;

3. Re: Erro no programa: soma não está sendo feita?? [RESOLVIDO]

Jose Renan
JoseRenan

(usa Ubuntu)

Enviado em 17/09/2011 - 10:54h

Agora deu certo! Valeu!

#include <iostream>
using namespace std;
int main ()
{
int n, a;
float b, ac=0;
cout<<"Digite um limite para a divisao: ";
cin>>n;
if (n>1)
{
cout<<"1 + ";
a=2;
while (a<=n)
{
cout<<"1/"<<a;
if (a!=n) cout<<" + ";
b=1./a;
ac=ac+b;
a++;
}
ac++;
}
else
{
cout<<"1";
ac=1;
}
cout<<endl<<endl<<"S= "<<ac;
return 0;
}

Pensei que como b é float. Então a divisão de números inteiros não resulta em float?


4. Re: Erro no programa: soma não está sendo feita?? [RESOLVIDO]

Danilo Renato da Silva
danilo_renato

(usa Ubuntu)

Enviado em 17/09/2011 - 11:03h

Então José, não sei exatamente pq, mas o fato é que precisamos explicitar que estamos utilizando um float para que o resultado não seja arredondado para inteiro. À disposição ;)


5. Re: Erro no programa: soma não está sendo feita?? [RESOLVIDO]

Jose Renan
JoseRenan

(usa Ubuntu)

Enviado em 17/09/2011 - 11:38h

Existe, para a linguagem, diferença entre uma divisão entre números inteiros e entre números reais (ponto flutuante). Se você fizer a divisão entre os inteiros 3 e 2, o resultado não será 1.5, será 1. Já se fizer a divisão entre os números reais (em ponto flutuante) dos deles, então sim obterá 1.5.

O motivo é que há 2 tipos de divisão: a inteira e a decimal.


http://pt.wikiversity.org/wiki/Curso_de_C%2B%2B/Operadores






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts