Небольшая проблема с программой, которая имеет массив и две функции, является случайной, но это не должно быть - PullRequest
0 голосов
/ 21 ноября 2018
bool sal_sk(int sal) //  If sal is a composite figure, then  true, if its not then false.
{ 

    for (int i = 2; i <= sal; i++) {
        if (sal%i == 0)
            return true;
        else
            return false;


    }
}

int lkd(int a, int b) // Checks the gcd 
{ 
    int c;
    while (b > 0) 
    {
        c = b;
        b = a % b;
        a = c;
    }
    return a;

}

int main() 
{
    int ok;

    do 
    {
        int n;//Number of elements 
        int*a; //Given number array variable

        cout << "Put in the number of elements" << endl;
        std::cin >> n;

        a = new int[n];

        cout << "Enter the array elements" << endl;
        for (int i = 0; i < n; i++) {
            std::cin >> *a;
        }
        int rez = a[0];

        for (int i = 1; i < n; i++) {
            if (sal_sk(a[i] == true))
                rez = lkd(rez, a[i]);

        }
        delete[] a;
        cout << "Composite figure gcd is  " << rez << endl;

        cout << " Do you want to continue(1) or to end (0)?" << endl;
        cin >> ok;// Asks the user to enter in if he wants to continue or to end

    }   while (ok == 1);
}

Эй, ребята, у меня есть две функции, которые проверяют наибольший общий делитель составных фигур в массиве, но это случайно и почему.Например, если я ввожу 3 элемента 4 6 9, иногда он печатает, что gcd равен 3, но иногда он печатает, что это 1, что правильно, но это происходит в случайные моменты времени, и если я ввожу 9 4 6, он говорит, что gcd2, я просто не понимаю. Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

bool sal_sk (int sal) возвращает true, если sal даже false, если это не так, потому что вы всегда возвращаетесь на первой итерации цикла, как упомянул @ FrancoisAndrieux.

bool sal_sk(int sal) //  If sal is a composite figure, then  true, if its not then false.
{ 

    for (int i = 2; i <= sal; i++) {
        if (sal%i == 0)
            return true; 
        else
            return false;


    }
}

Чтобы вернуть true в составномвнесите следующие изменения.

bool sal_sk(int sal) //  If sal is a composite figure, then  true, if its not then false.
{ 

    for (int i = 2; i < sal; i++) {
        if (sal%i == 0)
            return true;   // Has some factor other than 1 and itself
    }
    return false; // Does not have a factor other than 1 and itself
}

Еще одна ошибка здесь:

for (int i = 1; i < n; i++) {
    if (sal_sk(a[i] == true))
        rez = lkd(rez, a[i]);

}

Этот код передает true или false в sal_sk() в зависимости от того, a[i] !=0

Вместо этого вы хотите:

for (int i = 1; i < n; i++) {
    if (sal_sk(a[i]))
        rez = lkd(rez, a[i]);
}

Это также ошибка:

cout << "Enter the array elements" << endl;
for (int i = 0; i < n; i++) {
    std::cin >> *a; // This puts the value in a[0] always!
}

Код должен быть:

cout << "Enter the array elements" << endl;
for (int i = 0; i < n; i++) {
    std::cin >> a[i]; // Put the value in the array at index i
}
0 голосов
/ 21 ноября 2018

Код здесь:

    cout << "Enter the array elements" << endl;
    for (int i = 0; i < n; i++) {
        std::cin >> *a;
    }

не заполняет все элементы массива, а просто перезаписывает первую запись.

Это далеко не единственная проблема с вашим кодом.В частности, sal_sk не делает то, что, по вашему мнению, делает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...