Menu

Multiple de 4 [Résolu]

Asma - 16 mai 2017 à 20:25 - Dernière réponse :  Asma
- 17 mai 2017 à 21:27
Bonjour, l' exercise demande de afficher les multiples de 4 entre 20 et 80. Je veut savoir ci CE programme est juste et merci.
# include< iostream>
using namespace std;
int main(){
int i,m;
cout<<"les multiples de 4 entre 20 et 80 sont ";
For (i=5;i<21;i++){
m=4*i;
court<<m<<endl;
}
return 0;
}



EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.





Afficher la suite 

7 réponses

Répondre au sujet
jordane45 20588 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - Modifié par jordane45 le 16/05/2017 à 22:50
0
Utile
3
Bonjour,

Oui mais non....

Déjà .. entre 4 et 80 .. j'aurai pensé que le 4 était inclus .. donc dans ta boucle i = 4...

Mais bon.. maintenant... si je te demande de faire le même programme mais que tu laisses l'utilisateur choisir l'interval de début et de fin... ta boucle ne fonctionnera plus...

Mathématiquement.. pour savoir si un nombre est un multiple de 4 il suffit de diviser ce nombre par 4 et de voir si ça tombe juste ou si il y a des virgules....
Pour faire cette vérificaiton.. il me semble qu'il existe (même en c++) .. le MODULO.

Je ne fais pas de c++ .. mais je pense qu'un prog de ce genre répond à la question :
#include <iostream>     // std::cout, std::end

int main () {
  int i,deb,fin;
  deb = 1;
  fin = 80;
  For (i=deb;i<=fin;i++){
    if (i % 4 == 0 ) {
      // a est un multiple de 4
      std::cout<<i<<endl;
    }
  }
  return 0;
}


Cordialement, 
Jordane                                                                 
Merci pour ta reponse .
Oui tas raison mais si le programme ne demande pas a l'utilisateur de donner le debut et la fin ma reponse serait juste ?
Et estce qu'on peut ecrire comme ca ou c'est faux
#include<iostream>
using namespace std;
int main(){
int deb,fin,i;
deb=20;
fin=80;
for(i=deb;i<=fin;i=i+4){
cout<<i<<endl;
}
return 0;
}
Dalfab 326 Messages postés dimanche 7 février 2016Date d'inscription 21 avril 2018 Dernière intervention > Asma - 17 mai 2017 à 20:17
Ne fonctionne que si deb est multiple de 4, sinon on a tout faux (par exemple deb=19, on aura 19, 23, 27...)
Il faut remplacer deb par le premier multiple de 4 qui n'est pas avant deb, qui serait :
 (deb+3)/4*4
ou
  if ( deb % 4 != 0 ) deb += 3 - (deb%4); 
.
Asma > Dalfab 326 Messages postés dimanche 7 février 2016Date d'inscription 21 avril 2018 Dernière intervention - 17 mai 2017 à 21:27
Oui merçi infiniment . you're the best man :)
Commenter la réponse de jordane45
Dalfab 326 Messages postés dimanche 7 février 2016Date d'inscription 21 avril 2018 Dernière intervention - 17 mai 2017 à 04:38
0
Utile
1
Bonjour,
Ton code est correct mais tu utilises tes connaissances mathématiques pour contourner ce que l'exercice cherche à te faire faire. Les deux nombres "magiques" 5 et 21 sont respectivement le 1er diviseur par 4 valide à partir de 20 et le suivant du diviseur par 4 de 80.
Le code de jordane répond à l’esprit de l'exercice
for (int i = deb ;  i <= fin ;  ++i ) {
    if ( i % 4 == 0 )  std::cout << i << std::endl;
}
Ta méthode est plus optimale, mais pour la rendre compatible avec des limites et un diviseur quelconque devrait s'écrire
const int debut = 20;
const int fin = 80;
const int diviseur = 4;
for ( int i = (debut+diviseur-1)/diviseur ; i <= fin/diviseur ; ++i ) {
    std::cout << i*diviseur << std::endl;
}
Le point de départ est complexe, il permet de diviser en arrondissant au dessus pour obtenir le 1er diviseur qui sera après la borne initiale.
Merci Dalfab .
Quand tu as fait la methode plus generale il semble un peut complexe que la methode du modulo qui est en meme temp simple et compatible avec tout changement de donnés.
Merçi beaucoup pour ton aide . :D
Commenter la réponse de Dalfab
0
Utile
Merci pour votre temps :).
Vous avez raison la methode du modulo est globale .
Commenter la réponse de Asma