stell-91
Messages postés503Date d'inscriptiondimanche 25 décembre 2011StatutMembreDernière intervention25 janvier 2022
-
Modifié par stell-91 le 24/11/2013 à 16:50
stell-91
Messages postés503Date d'inscriptiondimanche 25 décembre 2011StatutMembreDernière intervention25 janvier 2022
-
24 nov. 2013 à 18:17
Bonjour,
J'aimerai ecrire un programme en C qui me permet de dire si un nombre est un carré parfait
Par exemple 9 est un carré parfait car c'est 3*3 ou 25 est un carré parfait car c'est 5*5 mais 6 n'est pas un carré parfait car c'est 2*3
je pense que vous avez compris
J'ai envie que mon programme dit si ce nombre un carré parfait ou pas si c'est le cas qu'il donne le nombre.
J'ai quand même travaillé :
int main(void) { int N, t; printf("choix de N : "); scanf("%d", &N); if ( N<0) printf("Erreur, ce nombre est negatif"); else t=1; while (t*t<=N) { t=t+1;
} if(t*t==N) printf("C'est un carre parfait = %d\n", t); else printf("Ce n'est pas un carre parfait = %d\n");
return 0; }
J'aimerai savoir pourquoi ça ne marche pas.
Je souhaite utiliser cette méthode mais pas celle avec la racine carré d'un nombre s'il vous plait
BunoCS
Messages postés15393Date d'inscriptionlundi 11 juillet 2005StatutModérateurDernière intervention26 septembre 2023102 Modifié par BunoCS le 24/11/2013 à 18:09
La boucle, oui. la condition d'arrêt non ;)
En fait, tu as écrit:
faire...tant que t² <= N
. Tu vois bien que si tu mets
N=9
, tu vas passer dans ta boucle 4 fois:
t = 1 -> t² < N -> boucle
t = 2 -> t² < N -> boucle
t = 3 -> t² = N -> boucle
t = 4 -> t² > N -> on sort.
En sortie, tu as donc un t supérieur à ce que tu voulais.
2 possibiltés:
- soit tu changes ta condition d'arrêt (le mieux)
while (t*t < N)
- soit, dans le if d'en-dessous, tu utiliser
t-1
@+
Buno, Modo CS-CCM
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
The urgent is done, the impossible is underway. For miracles, envisage a time ...