Ir para conteúdo
Fórum Script Brasil
  • 0

Algoritmo com repetição


Gugsteer

Pergunta

1 resposta a esta questão

Posts Recomendados

  • 0

Olá, deve ser algo do tipo:

#include <iostream>
#include <stdlib.h>
#include <math.h>
using namespace std;

/*
Calcula o fatorial de modo recursivo.
*/
int fatorial(int n){
	if(n<=1)
		return 1;
	else
		return fatorial(n-1)*n;
}

int* listaFatorial(int numeroTermos){
	int limit=4; //limit interno do fatorial, ou seja o maior número que pode ser submetido ao calculo fatorial.
	int fatorial=1;
	int volta=0; //positivo.
	//int lista[numeroTermos];
	int *lista=(int*) malloc(numeroTermos*sizeof(int));
	
	cout<<endl;
	for(int i=1; i<=(numeroTermos); i++){
		if(volta==0){
			if(fatorial<=limit){
			//	cout<<fatorial<<"("<<i<<") ";
			lista[i-1]=fatorial;
				fatorial++;
			}else{
				i--;
				volta++;
				fatorial--;
			}
		}else{
			if(volta%2==1 && fatorial>1){
				fatorial--;
				lista[i-1]=fatorial;
			//	cout<<fatorial<<"("<<i<<") ";
				
			}else if(volta%2==0 && fatorial<limit){
				fatorial++;
				lista[i-1]=fatorial;
			//	cout<<fatorial<<"("<<i<<") ";
			}else{
				i--;
				volta++;
				if(volta%2==0){
					fatorial=1;
				}else{
					fatorial=4;
				}
				
			}
		}
	}
	return lista;
}

int *listaExpoente(int numeroTermos){
	int *lista=(int*) malloc(numeroTermos*sizeof(int));
	for(int i=2; i<=(numeroTermos+1); i++){
		//cout<<i<<" ";
		lista[i-2]=i;
	}
	return lista;
}

void escreveSerie(int numeroTermo){
	int *listaExpoent=listaExpoente(numeroTermo);
	int *listaFatoria=listaFatorial(numeroTermo);
	for(int i=0; i<numeroTermo; i++, listaExpoent++, listaFatoria++){
		if(*listaExpoent%2==0){
			cout<<"(-X^"<<*listaExpoent<<")/"<<*listaFatoria<<"! ";
		}else{
			cout<<"(+X^"<<*listaExpoent<<")/"<<*listaFatoria<<"! ";
		}
	}
}

double calculaSerie(int x, int numeroTermo){
	double resultado=0;
	int *listaExpoent=listaExpoente(numeroTermo);
	int *listaFatoria=listaFatorial(numeroTermo);
	for(int i=0; i<numeroTermo; i++, listaExpoent++, listaFatoria++){
		if(*listaExpoent%2==0){
			resultado-=pow((x*1.0),(1.0*(*listaExpoent)))/fatorial(*listaFatoria);
		}else{
			resultado+=pow((x*1.0),(1.0*(*listaExpoent)))/fatorial(*listaFatoria);
		}
	}
	return resultado;

}
int main(){
	int x=2, numeroTermo=2;
	escreveSerie(numeroTermo);
	cout<<endl<<"serie="<<calculaSerie(x,numeroTermo);
	
}

você pode otimizar o código, pois fiz divido em funções para ficar mais claro a lógica.

até mais.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...