Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Lourival_ECA

programa soma de serie PA invertida

Recommended Posts

ao fazer o programa para calcular 1 + 1/2 + .... + 1/N eu escrevi#include <iostream.h>#include <stdlib.h>int main(){ int N, X; float S; cout << " Entre com o valor de N: " ; cin >> N; if ( N > 0) { S = 0; X = 1; while ( X <= N ) { S = 1 / X + S ; X = X ++; } cout << " Soma " << S << "\n"; }else{ cout << " Valor de N invalido " ; } system("PAUSE"); return 0;}porem o resultado sempre é um, ql o erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

float soma(int n){		float reverse=1.0 / n;		if(n==1) return n;		return (reverse + soma(--n));}
Fiz aqui na pressa, mas acho que deve servir.

 

Faltou tratar alguns erros então, mãos a obra!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vou tentar te explicar:

 

Aqui definimos a função soma, onde encontraremos a soma de 1 + ... + 1/N.

float soma(int n){		float reverse=1.0 / n;		if(n==1) return n;		return (reverse + soma(--n));}
Pode-se ver claramente que ela é uma função recursiva, mas como ela funciona?

 

- Passamos como parâmetro um número inteiro N.

- A função calcula um float que denominamos reverse (poderia ter se chamado inverso ou qualquer outra coisa).

- reverse = 1 / N, ou seja, o inverso de N

- Se N for igual a 1 queremos que o programa retorne 1. *

- Caso contrário ele vai retornar reverse + soma(N-1)

 

Opa, aí complicou. Vou tentar esclarecer.

A função está sendo chamada dentro dela própria, daí vem o nome recursiva.

 

Ela vai retornar a soma de N invertido, somado com soma(N-1).

O que é soma(N-1) ? soma(N-1) vai retornar N-1 invertido, somado com soma(N-1-1).

E assim por diante, até que encontremos soma(1), quando o valor passado para a função soma for igual a 1 teremos que ela retornará o próprio 1 e não chamará mais nada, então saberemos que a função terminou. :)

 

Como utilizar a função?

É só chamar a função com soma(N), sendo N o número que queremos a soma 1 + ... + 1/N.

 

Por exemplo, um programa que recebe o N do teclado e imprime 1 + ... + 1/N.

 

/* Incluimos a biblioteca */#include <stdio.h>/* Agora a nossa função mágica */float soma(int n){		float reverse=1.0 / n;		if(n==1) return n;		return (reverse + soma(--n));}/* agora o principal */int main(){	int N;	float somaFinal;		puts("Insira o N: ");	scanf("%d",&N); /* PEGAMOS O N */		somaFinal = soma(N); /* CALCULAMOS A SOMA */		printf("\nO valor de 1 + ... + 1/N é:\n%f", somaFinal); /* IMPRIMIMOS O RESULTADO */		return 0;}
É só salvar como .c e compilar.

 

:)

 

* Esta parte pode ser utilizada para tratamento de erros, por exemplo se o cara entrar com um número negativo etc. Aí vai da sua necessidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.