гипотеза Коллатца, чтобы напечатать число объектов и последовательность, используя класс

    #include<iostream>
using namespace std;
class ulam
{
int num;
double prod;
int cot;
public:
ulam(){cot=0;}
ulam(int x)
{
num=x;
}

void process()
{
for(int i=0;num==1;i++)
{
cout<<num<<endl;
if((num%2) == 0)
{
prod=num/2;
}
else
{
prod=(3*num)+1;
}
num=prod;
cot++;
}
}
void display()
{
cout<<"the number of steps required is: "<<cot;
}
};
int main()
{
int n;
cout<<"enter the number"<<endl;
cin>>n;
ulam obj(n);
obj.process();
obj.display();
}

когда я пишу этот код, значение кроватки становится значением мусора, я думаю. я не могу понять, где я ошибся. Я использовал класс, потому что я чувствую, что это более разборчиво. но главная цель этой программы — найти количество шагов, необходимое для того, чтобы число достигло одного, и напечатать всю последовательность чисел. для тех, кто не знает о гипотезе Коллатца https://en.wikipedia.org/wiki/Collatz_conjecture

2

Решение

Ваше условие для цикла for внутри функции процесса неверно. так должно быть num!=1, Вам нужно инициализировать cot тоже. Вам не нужно prod на самом деле.

#include<iostream>
using namespace std;
class ulam
{
int num;
int cot;
public:
ulam()
{
cot=0;
}
ulam(int x)
{
cot=0;
num=x;
}

void process()
{
for(int i=0;num!=1;i++)
{
cout<<num<<endl;
if((num%2) == 0)
{
num=num/2;
}
else
{
num=(3*num)+1;
}
cot++;
}
}
void display()
{
cout<<"the number of steps required is: "<<cot;
}
};
int main()
{
int n;

cout<<"enter the number"<<endl;
cin>>n;
ulam obj(n);
obj.process();
obj.display();

return 0;
}
1

Другие решения

Первая проблема

В конструкторе, где вы инициализируете, когда передается целое число, вы ТАКЖЕ должны инициализировать cot как это:

ulam(int x)
{
cot = 0;
num = x;
}

Еще лучше, так как кроватка всегда будет 0 на строительстве, просто установить cot в 0 как частная переменная, как это:

class ulam
{
int num;
double prod;
int cot = 0;
public:
//....
};

Это означает, что у вас все еще мог бы быть конструктор по умолчанию, который ничего не будет делать, и тот, который принимает целое число, не потребует, чтобы кроватка была установлена ​​в 0,

Вторая проблема

Ваша вторая проблема в том, что условие цикла неверно. Так должно быть num != 1не num == 1, num == 1 будет цикл никогда не будет работать, если 1 не был передан в cin,

0