Ir ao conteúdo

Posts recomendados

Postado

Olá, bom dia!

 

Tenho uma dúvida quanto ao código que escrevi. O programa pede para que um vetor seja preenchido com N elementos (2<=N<=11) dado por uma sequência em fatorial. Porém, essa sequência deve começar a partir da posição V[1] e não de V[0], ou seja, 1<=P<=N. A entrada deve ser  N e depois um valor X que verificará se o valor pertence a sequência ou não. Nesse caso, a entrada ficaria (4, 5) e a saída (5 está na posição 4). Escrevi e reescrevi o código mas sempre dá erro e não consigo saber onde estou errando. Queria pedir a ajuda para analisar o código e indicar no que eu estou errando.

#include <iostream>
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int fatorial (int n)
{
  if(n == 0)
    return 1;
  else
    return n * fatorial(n-1);
}

int main(){
int i, j, X, N, A, B, C, P, S, L, auxili;

std::cin >> N;

if(N >= 2 && N <= 11)
{
  std::cin >> X;
  int T[N];

  for(i = 0; i <= N; i++)
    {
    if(i == 0)
    {
    continue;
    }
    if(i >= 1)
    {
    A = fatorial(2*(i-1));
    B = fatorial(i);
    C = fatorial(i-1);
    T[i] = (A)/(B*C);
      if(X == T[i])
      {
      L = 1;
      std::cout << X << " esta na posicao " << i << std::endl;
    }
    }
    }

  if(L != 1)
  {
  std::cout << X << " não existe" << std::endl;
  }
}
return 0;
}

 

Postado
2 horas atrás, Hanarge disse:
    A = fatorial(2*(i-1));
    B = fatorial(i);
    C = fatorial(i-1);
 

 

Não entendo a ideia. O que são A, B e C? Poste o enunciado.

 

if(N >= 2 && N <= 11) { std::cin >> X; int T[N];

if(N >= 2 && N <= 11)
{
  std::cin >> X;
  int T[N];

 

N deve ser uma constante. Não pode declarar T[N]. Use T[11]

Postado
1 hora atrás, arfneto disse:

 

Não entendo a ideia. O que são A, B e C? Poste o enunciado.

 

if(N >= 2 && N <= 11) { std::cin >> X; int T[N];

if(N >= 2 && N <= 11)
{
  std::cin >> X;
  int T[N];

 

N deve ser uma constante. Não pode declarar T[N]. Use T[11]

Eu utilizei A, B e  C para particionar a fórmula da série. Segue abaixo o enunciado:

 

ENUNCIADO

Faça um programa em C++ que preencha um vetor com N (2<= N <= 11) números em uma sequência de catalan e, dado um número X de entrada, imprima a posição P (1<= P <= N) do número X de catalan, caso o mesmo exista no vetor.

 

ENTRADA

A entrada contém: um valor inteiro N, correspondente à quantidade de números catalan a serem inseridos no vetor; e um número X, correspondente ao número catalan a ser encontrado. A ordem da sequência é: 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796...

 

SAÍDA

Imprima a mensagem "X esta na posição P" ou "X não existe".

Postado
15 minutos atrás, Hanarge disse:

Eu utilizei A, B e  C para particionar a fórmula da série

  :D agora que disse...

 

Notou que na sua descrição do problema não aparece essa informação e que no programa não há qualquer referência a essa série de números de catalan? Da mesma origem, a fórmula
 

image.png.234ab1ee723597bc6fcc13841da729d6.png

 

E se os números já são conhecidos para que calcular de novo se o enunciado nada fala sobre isso?

 

4 horas atrás, Hanarge disse:

Porém, essa sequência deve começar a partir da posição V[1] e não de V[0], ou seja, 1<=P<=N. A entrada deve ser  N e depois um valor X que verificará se o valor pertence a sequência ou não. Nesse caso, a entrada ficaria (4, 5) e a saída (5 está na posição 4)

 

E onde está isso no enunciado?

 

19 minutos atrás, Hanarge disse:

ENTRADA

A entrada contém: um valor inteiro N, correspondente à quantidade de números catalan a serem inseridos no vetor; e um número X, correspondente ao número catalan a ser encontrado. A ordem da sequência é: 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796...

 

SAÍDA

Imprima a mensagem "X esta na posição P" ou "X não existe"

 

Esse enunciado como um todo é fraco. Se a entrada é um número QUALQUER basta buscar no vetor pela ordem. Se a entrada correspondente à posição do número basta retornar a posição do vetor correspondente.

 

Acho que, pelo simples, deve escrever uma função 
 

        unsigned long catalan(unsigned pos);

 

Que retorna o número da posição pos  e coloca no vetor. 

E uma outra função onde entra com o X e ela retorna o índice do número ou 0 conforme ele esteja ou não no vetor.

 

        int    busca(int X, vetor V[11]);

 

 

Postado

Note que a fórmula fala em (2n)! e não dá pra calcular além de fatorial(20) usando 64bits e inteiros em C. Precisa de um artifício para calcular isso para n = 11.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!