Boucle définir si c'est un carré parfait [Résolu]

Signaler
Messages postés
496
Date d'inscription
dimanche 25 décembre 2011
Statut
Membre
Dernière intervention
20 avril 2021
-
Messages postés
496
Date d'inscription
dimanche 25 décembre 2011
Statut
Membre
Dernière intervention
20 avril 2021
-
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

Merci pour votre aide

10 réponses

Messages postés
496
Date d'inscription
dimanche 25 décembre 2011
Statut
Membre
Dernière intervention
20 avril 2021
2
bonjour,
ok mais je ne vois pas a quelle endroit ?

la reponse que j'ai a chaque fois "c'est n'est pas un carré parfait" et j'ai un super gros nombre aberrant
Messages postés
15060
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
11 juin 2021
94
Hello,
En rajoutant les balises code, on voit bien qu'il manque des accolades après le else.
'fin, il me semble ;)
Messages postés
496
Date d'inscription
dimanche 25 décembre 2011
Statut
Membre
Dernière intervention
20 avril 2021
2
Je pense qu'il y a un probleme dans ma boucle j'arrive pas a la bloqué.
Messages postés
15060
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
11 juin 2021
94
Il manque des accolades:

...
else
{
  // ton code ici
} 
return 0;
Messages postés
496
Date d'inscription
dimanche 25 décembre 2011
Statut
Membre
Dernière intervention
20 avril 2021
2
Comme ça ?

#include <stdio.h>

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;
}

A partir de la ligne 11 et juste avant return 0

ça ne donne rien, je pense que c'est un probleme de synthaxe mais je ne sais pas ou
Messages postés
496
Date d'inscription
dimanche 25 décembre 2011
Statut
Membre
Dernière intervention
20 avril 2021
2
Et sinon la boucle est correct ?
Messages postés
15060
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
11 juin 2021
94
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 ...
Messages postés
496
Date d'inscription
dimanche 25 décembre 2011
Statut
Membre
Dernière intervention
20 avril 2021
2
oui là ça marche avec
(t*t<N)

mais quand ce n'est pas un carré parfait j'ai "ce n'est pas un carré parfait" et un nombre aberrant
Messages postés
15060
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
11 juin 2021
94
Normal.
Tu as mis un %d dans le printf() mais tu as oublié de mettre la variable ;)
Messages postés
496
Date d'inscription
dimanche 25 décembre 2011
Statut
Membre
Dernière intervention
20 avril 2021
2
Merci pour ton aide si efficace :
voilà le code corrigé

#include <stdio.h>

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 \n");


return 0;
}