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

Criando uma classe em C++


Castro

Pergunta

:wacko:

O que está errado na lógica do método arranjo ? estou usando recursividade, mas também está dando erro na recursividade. Por quê ?

Arquivo .h
=========
class calculando
{
      public:
      int fatorial (int fat);
      float soma ( float num1, float num2);
      int arranjo (int n, int p);
};

int calculando::arranjo (int n, int p) // Arranjo
{
  int arranj = 0;
  while (n >= p)
  {
   n = (n *(n -1));
   p = (p *(p -1));
   arranj = arrranjo(n)/ arranjo(n - p);
};
  return arranj;
};.
Arquivo .cpp ==========
#include <iostream>
#include "calculo.h"
using namespace std;
int main()
{
    int Nfat,valorN, valorP;
    float Nsomando1,Nsomando2;
        
   calculando minhaclasse; // definindo a ocorrência da classe calculo
    cout << "Entre com o valor para aplicar o fatorial" << endl;
    cin >> Nfat;
    cout << "fatorial de " << Nfat << endl;
    cout << minhaclasse.fatorial(Nfat)<< endl;
    
    cout << "Entre com Valor de N e Valor de P callcular o arranjo" << endl;
    cin >> valorN;
    cin >> valorP;
    cout << "Valor do Arranjo " << minhaclasse.arranjo (valorN,valorP) << endl;
    
    cout << "Entre com os valore para fazer a soma" << endl;
    cin >> Nsomando1;
    cin >> Nsomando2;
    cout << "Valor da soma de " << Nsomando1 << " + " << Nsomando2 << endl;
    cout << minhaclasse.soma(Nsomando1,Nsomando2) << endl;
    
    system ("pause");
    return 0;
}

Obrigado

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Na recursão você faz uma chamada de arrranjo que não existe com 3 r´s.

Na mesma função você chama a função arranjo com apenas um parâmetro. Só existe a função arranjo com dois parâmetros.

No C++ você teria que sobrecarregar o arranjo para receber apenas um parametro. Necessariamente o parametro deve ser int nessa função que criou....

Aquele abraço

Link para o comentário
Compartilhar em outros sites

  • 0

:wacko:

Quando você diz:

Na recursão você faz uma chamada de arrranjo que não existe com 3 r´s.

Não entendi a parte do texto em vermelho. Como faço uma chamada de arranjo que não exiiste ? quando faço:

arranj = arrranjo(n)/ arranjo(n - p);

não estou chamando a função ? não estou entendendo. Poderia demonstrar ?

Obrigado

Editado por Castro
Link para o comentário
Compartilhar em outros sites

  • 0

Faz a chamada usando 3 érres, RRR, rrr arrranjo, ARRRANJO.

O nome "arrranjo" não foi definido na sua função. Só existe "arranjo".

arrranjo != arranjo

Sacou?

E outra, está chamando a função arranjo passando apenas um argumento. Você definiu a função recebendo 2 argumentos.

Não vai funcionar a recursão.

Aquele abraço.

Link para o comentário
Compartilhar em outros sites

  • 0
E outra, está chamando a função arranjo passando apenas um argumento. Você definiu a função recebendo 2 argumentos.

Não vai funcionar a recursão.

ow!!!

arranjo(n - p);

ake tem um argumento só!!!

é o argumento n-p

tipo

n=10

p=4

argumento = 10-4 = 6

Link para o comentário
Compartilhar em outros sites

  • 0

ow!!!

arranjo(n - p);

ake tem um argumento só!!!

é o argumento n-p

tipo

n=10

p=4

argumento = 10-4 = 6

phyll...ta parecendo conversa de louco rsrsrs....

você quotou uma frase que eu disse, "você está chamando a função arranjo passando um argumento. Você definiu a função recebendo 2 argumentos..."

int calculando::arranjo (int n, int p) // Arranjo

{

int arranj = 0;

while (n >= p)

{

n = (n *(n -1));

p = (p *(p -1));

arranj = arrranjo(n)/ arranjo(n - p);

};

return arranj;

};

Protótipo da função é int calculando::arranjo(int n, int p);

Se você chama arranjo(n-p), ou seja, passando um argumento , quem seria o n, e quem é o p no prototipo inicial ?

n seria n-p?

ou p seria n-p?

"ISSO NON EQSISTE"

Link para o comentário
Compartilhar em outros sites

  • 0

:huh:

Estou postando a classe com a função e os erros para melhor definir a solução do problema. Ah ! já tirei o terceiro R.

class calculando
{
      public:
      int arranjo (int n, int p);
      float divisao (float dividendo, float divisor);
      
};

int calculando::arranjo (int n, int p) // Arranjo
{
  int arranj = 0;
  while (n >= p)
  {
   n = (n *(n -1));
   p = (p *(p -1));
   arranj = arranjo(n)/ arranjo(n - p);
};
  return arranj;
};

Erros:

2 D:\C++\TesteC++\calculo.cpp In file included from calculo.cpp

D:\C++\TesteC++\calculo.h In member function `int calculando::arranjo(int, int)':

59 D:\C++\TesteC++\calculo.h no matching function for call to `calculando::arranjo(int&)'

note D:\C++\TesteC++\calculo.h:53 candidates are: int calculando::arranjo(int, int)

59 D:\C++\TesteC++\calculo.h no matching function for call to `calculando::arranjo(int)'

note D:\C++\TesteC++\calculo.h:53 candidates are: int calculando::arranjo(int, int)

D:\C++\TesteC++\G__~1.EXE calculo.o: No such file or directory.

D:\C++\TesteC++\G__~1.EXE no input files

Obrigado

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, eu erro 1, 2 vezes...não erro 3.

Não vou ficar repetindo várias vezes o problema. Já disse e já postei uma possível solução.

Se quiser resolver o problema LEIA os meus posts anteriores.

Pelo jeito a dificuldade não está na programação, está na interpretação de textos, como demonstram os posts...

Link para o comentário
Compartilhar em outros sites

  • 0

:wacko:

Ok. Desculpe, mas o fato é que não sei fazer sobrecarca de função, para fazer a recurcividade funcionar. por isso recoloquei o código mom os erros, para partir de um ponto sem erro de digitação.

Se puderfazer a sobrecarga para que eu veja como faz agradeço, Entendi que para usar a função com um argumento, sendo declarado dois, é preciso usar sobrecarga. Mas como fazer isso ?

Um abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Ok. Desculpe, mas o fato é que não sei fazer sobrecarca de função, para fazer a recurcividade funcionar. por isso recoloquei o código mom os erros, para partir de um ponto sem erro de digitação.

Se puderfazer a sobrecarga para que eu veja como faz agradeço, Entendi que para usar a função com um argumento, sendo declarado dois, é preciso usar sobrecarga. Mas como fazer isso ?

Um abraço

Ahh....eu não imaginava que não sabia como fazer a sobrecarga.

Então, sobrecarga a grosso modo é fazer mais de uma função com mesmo nome mas que executam tarefas diferentes ou semelhantes mas não iguais.

No seu caso, você tá querendo apenas que a função sirva para uma recursão simples. Então basta você sobrecarregar, criando outra função com mesmo nome no corpo da sua classe, com um argumento.

O C++ sabe qual função está chamando pelo tipo ou pelo número de argumentos.

class calculando
{
      public:
      int fatorial (int fat);
      float soma ( float num1, float num2);
      int arranjo (int n, int p);
};

int calculando::arranjo (int n, int p) // Arranjo
{
  int arranj = 0;
  while (n >= p)
  {
   n = (n *(n -1));
   p = (p *(p -1));
   arranj = arranjo(n)/ arranjo(n - p);
};
  return arranj;
};

int calculando::arranjo (int n) 
{
 //... Seu código...
};
  return // Seu valor...
};

Dessa forma você executa uma sobrecarga, agora o C++ sabe que função chamar quando se passa apenas um argumento. Agora você deve desenvolver a calculando(int n) para que faça os devidos cálculos.

Abraço

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...