Problème de division
RésoluBonjour,
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
- Problème de division
- Microsoft skype division - Télécharger - Téléphonie & Visio
- Excel diviser par le nombre de cellules remplies ✓ - Forum Excel
- Excel division avec virgule - Forum Excel
- La vidéo à télécharger va 5 fois plus vite que sa vitesse normale. divisez sa vitesse par 5 pour rétablir sa vitesse normale. après cette opération, combien de papillons figurent entre la 17e et la 18e seconde ? ✓ - Forum Montage et acquisition vidéo
- Division euclidienne ti 83 - Forum Logiciels
1 réponse
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
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.
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.