J'écris une fonction qui trouvera le nombre avec le nombre maximum de diviseurs mais la fonction ne renvoie rien. Quelqu'un peut-il signaler mon erreur?

Ceci est la question

Écrivez un programme C ++ qui crée un tableau d'entiers comportant 30 éléments. Obtenez une entrée dans ce tableau (dans la fonction principale). Après cela, passez ce tableau à une fonction appelée "Find_Max_Divisors" à l'aide du pointeur de référence. La fonction "Find_Max_Divisors" doit trouver (et renvoyer) dans le tableau le nombre qui a le plus grand nombre de diviseurs. En fin de compte, la fonction principale affiche ce nombre ayant le plus grand nombre de diviseurs.

#include <iostream>
using namespace std;

int main ()
{
    int arr[30];
    int* array = &arr[30];
    cout << "Please enter values of the array" << endl;
    for (int i=0; i<30; i++)
    {
        cin >> arr[i];
    }
    cout << "Number with most divisors in array is " << endl;
    int Find_Max_Divisors (*array);
}

int Find_Max_Divisors (int p[])
{
    int count=0, max_divisor, max_counter, prev=0, repeat=0, divisor;
    for (int i=2; i<=30; i++)
        {
            if (p[i]%i==0)
            {
                count++;
            }
            if (count > prev)
            {
                prev = count;
                divisor = p[i];
            }
            if (count==max_counter && max_counter!=0)
            {
                cout << p[i] <<" has maximum of "<< count <<" divisors.\n";
            }
        max_counter = prev;
        max_divisor = divisor;
        repeat++;
        }
        return count;
}
c++
0
Omer Aman 8 mai 2020 à 00:44

4 réponses

Meilleure réponse

Vous n'avez pas besoin de pointeurs pour faire que ce code simple peut résoudre votre problème, changez simplement la taille de votre tableau comme vous le souhaitez, je teste avec un tableau de taille 4 ici

#include <iostream>
using namespace std;

int Find_Max_Divisors(int p[])
{
    int count = 0, max = 0;
    for (int i = 0; i < 4; i++) {
        for (int j = 1; j < p[i] / 2; j++) {
            if (p[i] % j == 0) {
                count++;
            }
        }
        if (count > max)
            max = p[i];
    }
    return max;
}
int main()
{
    int arr[30];
    // int* array = &arr[30];
    cout << "Please enter values of the array" << endl;
    for (int i = 0; i < 4; i++) {
        cin >> arr[i];
    }
    int value = Find_Max_Divisors(arr);
    cout << "Number with most divisors in array is " << value << endl;
}
0
drescherjm 7 mai 2020 à 23:12

Changement

int Find_Max_Divisors (*array);

À

int value = Find_Max_Divisors(arr);

Vous pouvez supprimer complètement la variable array.

Il est fort possible que vous ayez également besoin de mettre votre fonction avant main.

1
Jeffrey 7 mai 2020 à 21:57

Tout d'abord, vous déclarez un tableau de 30 éléments

int arr[30];

Mais ici, vous faites pointer le pointeur vers la sortie de arr.

int* array = &arr[30];

Je suppose que vous voulez faire pointer le pointeur vers arr, si je ne me trompe pas, vous pouvez faire comme:

int *array = &arr[0]; // or int * array = arr;

Ensuite, lorsque vous appelez la fonction Find_Max_Divisors, vous devez passer à:

int return_value = Find_Max_Divisors(array);

Encore une chose, dans cette fonction:

for (int i=2; i<=30; i++)

Lorsque i=30, p[i] repasse en sortie de limite. Ça devrait être:

for (int i=2; i< 30; i++)
1
Hitokiri 8 mai 2020 à 04:44

Il y a plusieurs erreurs dans votre code:

  • Premièrement, si votre fonction main doit connaître les fonctions qu'elle appelle, vous devez les déclarer au préalable. Ajoutez simplement une ligne Find_Max_Divisors (int p[]); avant la fonction principale.

  • Un tableau en C ou C ++ est un pointeur, lorsque vous ne l'appelez que par son nom. Alors appelez Find_Max_Divisors (arr) et débarrassez-vous de cette affreuse affectation de pointeur.

  • Dans la dernière ligne, essayez simplement d'appeler la fonction, mais ne la mettez jamais en stdout, vous devriez la changer en ceci:

cout << "Number with most divisors in array is " << Find_Max_Divisors(arr) << endl;

Ce que vous avez réellement fait avec int Find_Max_Divisors (*array); était de déclarer une nouvelle variable et non d'appeler une fonction.

0
void 7 mai 2020 à 22:06