Exercice c (divisible)
comment faire pour écrire un programme qui affiche si un nombre est divisible par 2,3,4,5,6,7,8,9.
merci
Configuration: Windows XP Internet Explorer 6.0
28 réponses
Plusieurs contributions portent sur l'écriture d'un programme capable d'indiquer si un nombre est divisible par 2, 3, 4, 5, 6, 7, 8 ou 9 en utilisant l'opération modulo et des tests successifs. Des solutions insistent sur tester a % x pour chaque diviseur et non l'inverse, et sur l'usage d'un indicateur booléen pour signaler une divisibilité sans sorties prématurées. Autres précisent que le reste, obtenu par modulo, vaut zéro lorsque le dividende est divisible, et recommandent une gestion robuste des entrées et des cas limites.
-
ContributeurDéjà ce que tu souhaites récupérer, c'est si le nombre rentré, donc a, est divisible par 2,3,4,etc.
Prenons ce que tu as fait :
if(8%a ==0) ==>ici le reste qui sortira du modulo viendra de la division de 8 par a, et non pas de a par 8.
donc déjà pour tout nombre par lequel tu veux diviser a, il te faut mettre a%x où x représnte le nombre que tu veux, 2 ,3,4,5, etc...
Ensuite le deuxième problème vient de ta boucle else : lorsque tu fais le if, si la condition placée entre parenthèses est fausse, il passe à la suivante avec le else nous sommes d'accord.
Cependant, si la condition du else if est vrai, il ne continuera pas plus loin !!! par exemple si on rentre comme nombre 24, qui est divisible par deux, trois et quatre,6 et 8, lorsqu'il fera la boucle "else if (a%4==0)" et comme cela est vrai, alors il ne continuera pas à tester avec 5,6,7,8,9. Donc tu vas louper des nombres !!!
Voici le code que je te propose :
#include <stdlib.h>
#include <stdio.h>
int main (void)
{
int a;
bool existe=false;
printf("entrez le nombre:");
scanf("%d",&a);
while(a==0)
{
printf("veuillez entrez un nombre superieur a 0\n");
scanf("%d",&a);
}
if (((a%2) == 0) && ((3%a) == 0))
{
printf("le nombre est divisible par deux et trois");
existe = true;
}
if (a%2 == 0)
{ printf("le nombre est divisible par deux\n");
existe = true;
}
if (a%3 == 0)
{ printf("le nombre est divisible par trois\n");
existe = true;
}
if (a%4 == 0)
{ printf("le nombre est divisible par quatre\n");
existe = true;
}
if (a%5 == 0)
{ printf("le nombre est divisible par cinq\n");
existe = true;
}
if (a%6 == 0)
{ printf("le nombre est divisible par six\n");
existe = true;
}
if (a%7 == 0)
{ printf("le nombre est divisible par sept\n");
existe = true;
}
if (a%8 == 0)
{ printf("le nombre est divisible par huit\n");
existe = true;
}
if (a%9 == 0)
{ printf("le nombre est divisible par neuf\n");
existe = true;
}
if(!existe)
{ printf("il n'est pas divisible par les nombre de 2 a 9\n");
}
system("PAUSE");
}
Dans ce code j'ai donc inversé les nombres et a dans le modulo, pour qu'un premier problème soit résolu, que 'lon ait le reste de la division de a par le nombre et pas l'inverse.
Ensuite au départ j'ai rajouté une boucle while, que tu peux supprimé bien sur, mais cela évite que lutilisateur qui rentre 0 fasse planter le programme.
A la fin du programme j'ai rajouté system("PAUSE"); pour que celui-ci se mette en pause jusqu'a ce que tu appuies sur une touche.
La nouveauté vient de la variable "existe", que j'ai rajouté, car le "else" à la fin de ton code pour dire que ce n'est pas divisible n'était plus bon.
Cette variable est par défaut mise à "faux" (false). Ensuite, lorsque le programme test le nombre "a" avec chaque nombre à diviser, si la division est bonne alors il met la variable "existe" à "vrai" (existe=true).
Ensuite toute à la fin tu as la boucle (if(!existe)) qui te dira si le nombre "a" n'est pas divisible. En effet le "if(!existe)" signifie que si "existe" est à "faux" et donc que le nombre a entré est non divisible, la boucle s'exécute.
Note : Par opposition,si le test était if(existe), cela signifierait que si la variable existe était placée à "vraie", alors la boucle s'exécuterait.
Dis moi si tu as un truc que tu ne comprends pas.
Loup.
-
bonjour,pleaze vous pouvez me donner la solution de cet éxercice.
voila le problème,
écrire une fonction qui calcul la somme S de 2 entiers positifs a et b
en utilisant la formule d addition donné par S = a+b
en utilisant un algorithme récursif basé sur les faits suivants:si a = 0,alors S =b:sib=0 alors S = a:si a et b sont tous les deux nn nuls.alors S =un ajouté à la somme de a avec (b-1)
en utilisant un algorithme récusif basé sur les faits suivants :si a =0 ,alors S =b;si b=0;alors S=a: si aet b sont tous les deux nn nuls ,alors S= un ajouté à la somme de max (a,b) avec min (a,b)-1. Ici min (a,b) désigne le minimum entre a et b et max(a,b)le maximum entre aet b.
la question est la suivante:
Tester cette fonction en écrivant un programme qui lit les valeurs de a et b,puis calcul leur sommeS. merciiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii beaucoupppppppppppppppppppppppppppppp ,je t attendddddddd ok impatiemment
-
-
il y a un autre dicton, peut importe l'art et la manière, le principal,c'est le resultat, personnellement, comme je disais, j'ai quelque création personnel, qui relève actuellement de mes premières rencontre , avec un ordinateur, et excel, mais comme elle fonctionne, j'essaie de ne pas trop les modifier, des usines a gaz, on dit.. bonne soirée, on sort du sujet...
-
ContributeurComme m'a dit un prof un jour, deux personnes ne programmeront jamais le même programme, car elles ont toutes les deux une facon de penser différente.
Et par la suite , que crée un programme qui fonctionne c'est bien, mais qu'il y a toujours possibilité de réduire le code et de l'améliorer.
Alors moi je dis tant que ca marche c'est le principal :) y a des codes fait par des grosses boites qui marchent même pas alors bon ....
Loup. -
bonjour vaucluse, excuser pour ce matin, la tete dans le C**ma solution,vous étonne, mais ayant appris a selectionner un caractère dans une chaine, je l'ai appliqué sans trop savoir ce que cela allait donné, et vu mon resultat, j'en suis faière, d'y être azrrivé, par ce moyen, que je pense personne n'a pensé, cependant, je constate, que par différent moyen, dans les formules, on peut arriver a un même resultat, ,
donc, au vu des reponses proposés, vous n'avez rien proposer avant le 19 èmè post, le 24 , est bien cependant , il supprime une de mes actions , donc pour ameiorer la réponse demandé comme je le sent...
pourquoi ne pas , faire le tableau comme en post 17 , en supprimant la ligne 3 et en modifiant la ligne 2 , par votre formule ,ainsi modifié
en cellule C2=SI(MOD(A1;C1)=0;"OUI";"NON")
en cellule D2=SI(MOD(A1;D1)=0;"OUI";"NON") et ainsi de suite jusqu'a J2
en plus, si la personne le desire, elle peut même modifier les diviseur sans toucher a la formule
c'est dejà mieux sans saisir 2 chiffre a la base
bonne soirée
mon papa disait c'est en forgeant que l'on devient forgeron.... mais moi, j'applique celle du dessous...
--Quand la base est saine, ceux qui interviennent derrière toi sont heureux
à l'inverse, ils te maudissent ... -
nan, en C / C++, le modlo se fait avec %
-
ContributeurAllons allons, Just1xpa2,pas trop en forme, ce matin?
bonjour d'abord et ensuite, ne me dites pas que vous ne pouvez par regrouper ces formules dans une seule cellule:
Ou alors je vous fais honte:
De A2 a AX, les nombres à diviser,de, B1 a I1 les diviseurs
Et pour faiire référence aux formules de ma 1° proposition:
en B2:
=si((ARRONDI($A2/B$1;0)-$A2/B$1))=0;"O";"X"))
Tirez la formule sur tout le champ, quand vous avez 5 " O" en ligne, verticale, horizontale ou diagonale, vous avez gagné.
Et je vous fais grace du tableau avec ma derniére proposition: message 24
En fait, le code MOD donne le reste d'une division lorsque le dividende n'est pas divisible
BCRDLMNT -
bonjour à tous,
je ne crois pas que le "%" fasse le MODULO, pour moi en C, le modulo, c'est" mod", faut vérifier de toute façon, et
le "%" pour moi affiche la valeur hexadécimale, voir ASCI, ou autre d'une variable ou d'un caractère, mais pas le modulo! -
ContributeurBonjour à tous
Et pour faire encore plus compliqué:
=si(MOD(A1;B1)=0;"OUI";"NON")
Bonne journée -
ContributeurOui en effet :) salutations et bonne nuit.
Loup. -
Bonjour,
Eh bien le demandeur est au abonné absent, semble-t'il !
Salutations
Jean-Pierre -
ContributeurDonc on peut dire que ca ne répond pas à la demande du demandeur? bon ok je sors ^^ :)
-
ContributeurBonsoir
Bien modestement:
en A1 nombre à diviser
en B1 diviseur
En C1=ARRONDI(A1/B1;0)
En D1=A1/B1
En E1=SI(C1=D1;"OUI";"NON")
Ca n'est pas un programme amis ça donne quand même le résultat
BCRDLMNT
-
--
Salutations.
Jean-Pierre -
de quoi ma partie ??
j'ai juste modifier ca
for(i=2 ; i<=9 ; i++) if (a%i == 0) { printf("le nombre est divisible par %d \n", i); existe = true; }
ca permet de tout faire en allant de 2 à 9
-
bon oki je m'incline sniff ^^
-
ContributeurBah figure toi que j'ai relu j'ai rrien compris non plus mdrrrr :)
-
bonjour,
TABLEAU OBTENU PAR LA MANIPULATION DECRITE CI-DESSOUS
81 divisible par 2 3 4 5 6 7 8 9
oui oui
1 0 1 1 1 1 1 0
MANIPULATION A FAIRE DANS LES CELLULES
cellule a1 saisie du nombre a verifie ici "81"
cellule B1" divisible par" C1 "2" D1 "3" jusqu'a "9" en J1
cellule C2=SI(C3=1;" ";SI(C3=0;"oui";))
cellule D2=SI(D3=1;" ";SI(D3=0;"oui";)) aindsi de suite jusqu'a cellule J2
cellule C3=(NBCAR((A1/2))-NBCAR(SUBSTITUE((A1/2);",";)))/NBCAR(",")
cellule D3=(NBCAR((A1/3))-NBCAR(SUBSTITUE((A1/3);",";)))/NBCAR(",")
cellule E3=(NBCAR((A1/4))-NBCAR(SUBSTITUE((A1/4);",";)))/NBCAR(",")
cellule F3=(NBCAR((A1/5))-NBCAR(SUBSTITUE((A1/5);",";)))/NBCAR(",")
cellule G3=(NBCAR((A1/6))-NBCAR(SUBSTITUE((A1/6);",";)))/NBCAR(",")
cellule H3=(NBCAR((A1/7))-NBCAR(SUBSTITUE((A1/7);",";)))/NBCAR(",")
cellule I3=(NBCAR((A1/8))-NBCAR(SUBSTITUE((A1/8);",";)))/NBCAR(",")
cellule J3=(NBCAR((A1/9))-NBCAR(SUBSTITUE((A1/9);",";)))/NBCAR(",")
tu peux mettre en blanc l'ecriture de la ligne 3 afin de ne rien voir
CE QUI DONNE LE RESULTAT SUIVANT
81 divise par 3 oui
81divisé par 9 oui
les autres cases sont vides....
et voila en base d'excel tu mets n'importe quel chiffre en A1 et tu a le resultat voulue,
-
-
tu vois , ton charabia, eh bien ,j'ai rien compris, a l'inverse, le mien tu peux le realiser sur le logiciel.;; bonne soirée, c'est pour me passer le temps, comme je suis seul, et le temps passe plus vitte ainsi, on aide et on fait plaisir en plus
-
ContributeurNon Just1xpa2 tu fais bien de proposer :)
oui oui jaime bien me voir écrire y en a bien qui aime s'écouter parler :) -
mais ca ,je sais pas encore faire, donc....je propose ce que je sais qui fonctionne, a coup sur, tout le monde, n'a pas le niveau de certain, qui le pratique toute la journée, et ce depuis leur plus tendre enfance, c'est comme le vélo, tout s'apprend dans l'ordre, se tenir debout, marcher,ensuite apprendre a monter sur un velo, tenir l'equilibre , pedaler, ... etc
-
bonsoir
vous aimez ecrire vous
#include <stdlib.h> #include <stdio.h> int main (void) { int a, i; bool existe=false; printf("entrez le nombre:"); scanf("%d",&a); while(a<0) { printf("veuillez entrez un nombre superieur a 0\n"); scanf("%d",&a); } if (((a%2) == 0) && ((3%a) == 0)) { printf("le nombre est divisible par deux et trois"); existe = true; } for(i=2 ; i<=9 ; i++) if (a%i == 0) { printf("le nombre est divisible par %d \n", i); existe = true; } if(!existe) printf("il n'est pas divisible par les nombre de 2 a 9\n"); system("PAUSE"); }
- 1
- 2