Problème de division

Résolu
teschan - Modifié le 1 déc. 2023 à 15:47
mamiemando Messages postés 33149 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 13 juin 2024 - 3 déc. 2023 à 20:00

Bonjour,

J'ai un souci avec mon programme que je fais. On me demande :

  • demander deux nombres entiers
  • calculer leur quotient et le reste de la division

Voilà mon code source :

#include <iostream>

using namespace std;

int main() {
    float dividende;
    float diviseur;
    float division;
    float reste;
    cout << "bonjour,aujour'hui nous allons demander deux nombres entiers et calculer leur quotient et le reste de la division" << endl;
    cout << "allons-y etape par etape" << endl;
    cout << "d'abord faisons la division" << endl;
    cout << "rentrez un nombre" << endl;
    cin >> dividende;
    cout << "rentrez un second nombre" << endl;
    cin >> diviseur;
    division = dividende / diviseur;
    cout << division << endl;
    cout << "maintenant nous avons le quotient" << endl;
    reste = dividende % diviseur;

    cout << "reste" << endl;
    cout << "nous avons trouver le reste" << endl;
    return 0;
}

Je suis coincée. Merci par avance je programme sous code blocks

1 réponse

mamiemando Messages postés 33149 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 13 juin 2024 7 758
Modifié le 1 déc. 2023 à 15:48

Bonjour,

Ton programme ne compile pas :

(mando@silk) (~) $ g++ toto.cpp 
toto.cpp: In function ‘int main()’:
toto.cpp:20:23: error: invalid operands of types
‘float’ and ‘float’ to binary ‘operator%’
   20 |     reste = dividende % diviseur;
      |             ~~~~~~~~~ ^ ~~~~~~~~
      |             |           |
      |             float       float

Et effectivement, c'est normal. L'opérateur modulo n'est défini que pour des types entiers (probablement non signé, donc le type unsigned int, ou en abrégé unsigned).

Par ailleurs, outre les quelques fautes dans le texte, ta variable division devrait en réalité s'appeler quotient.

Note aussi qu'il est inutile de rouvrir std::cout dans des instructions consécutives. Il vaut mieux toujours utiliser le même flux.

Enfin, pour rendre le code plus lisible, évite les lignes trop longues et mets des espaces autour des opérateurs (ce sont des conventions de codage assez communes, autant prendre les bonnes habitudes tout de suite).

En appliquant toutes ces corrections, on obtient :

#include <iostream>

int main() {
    using namespace std;

    unsigned dividende, diviseur, reste, quotient;
    cout << "bonjour,aujourd'hui nous allons demander deux "
            "nombres entiers et calculer leur quotient et "
            "le reste de la division" << endl
         << "allons-y étape par étape" << endl
         << "d'abord faisons la division" << endl
         << "rentrez un dividende" << endl;
    cin >> dividende;
    cout << "rentrez un diviseur" << endl;
    cin >> diviseur;
    quotient = dividende / diviseur;
    cout << "quotient = " << quotient << endl
         << "maintenant nous avons le quotient" << endl;
    reste = dividende % diviseur;
    cout << "reste = " << reste << endl
         << "nous avons trouvé le reste" << endl;
    return 0;
}

Bonne chance

0

Je ne sais pas si c'est bien vu de commenter un sujet résolu.

On peut faire un modulo sur un entier signé.

Ça marche même avec des entiers négatifs.

0
mamiemando Messages postés 33149 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 13 juin 2024 7 758 > PierrotLeFou
3 déc. 2023 à 20:00

C'est mal vu :-) Non je rigole, si le commentaire est fondé, mais je pensais avoir déjà couvert ce doute. En effet, j'ai dit dans mon message précédent "probablement non signé", car en maths l'opérateur modulo est effectivement bien défini sur Z (entier signé), mais il est probable (pas obligatoire) qu'en réalité l'exercice était imaginé sur N (entier non signé, généralement c'est le cas quand on apprend à faire des divisions euclidiennes). Et effectivement si ça marche avec un entier signé, ça marche a fortiori sur un entier négatif.

0