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

stell-91 239 Messages postés dimanche 25 décembre 2011Date d'inscription 23 avril 2018 Dernière intervention - 24 nov. 2013 à 15:51 - Dernière réponse : stell-91 239 Messages postés dimanche 25 décembre 2011Date d'inscription 23 avril 2018 Dernière intervention
- 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

Merci pour votre aide
Afficher la suite 

10 réponses

Répondre au sujet
BunoCS 13769 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 24 nov. 2013 à 16:52
0
Utile
Hello,
En rajoutant les balises code, on voit bien qu'il manque des accolades après le else.
'fin, il me semble ;)
Commenter la réponse de BunoCS
stell-91 239 Messages postés dimanche 25 décembre 2011Date d'inscription 23 avril 2018 Dernière intervention - Modifié par stell-91 le 24/11/2013 à 17:07
0
Utile
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
Commenter la réponse de stell-91
stell-91 239 Messages postés dimanche 25 décembre 2011Date d'inscription 23 avril 2018 Dernière intervention - Modifié par stell-91 le 24/11/2013 à 17:00
0
Utile
Je pense qu'il y a un probleme dans ma boucle j'arrive pas a la bloqué.
Commenter la réponse de stell-91
BunoCS 13769 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 24 nov. 2013 à 17:24
0
Utile
Il manque des accolades:

...
else
{
  // ton code ici
} 
return 0;
Commenter la réponse de BunoCS
stell-91 239 Messages postés dimanche 25 décembre 2011Date d'inscription 23 avril 2018 Dernière intervention - Modifié par stell-91 le 24/11/2013 à 17:32
0
Utile
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
Commenter la réponse de stell-91
stell-91 239 Messages postés dimanche 25 décembre 2011Date d'inscription 23 avril 2018 Dernière intervention - 24 nov. 2013 à 18:04
0
Utile
Et sinon la boucle est correct ?
Commenter la réponse de stell-91
BunoCS 13769 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - Modifié par BunoCS le 24/11/2013 à 18:09
0
Utile
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 ...
Commenter la réponse de BunoCS
stell-91 239 Messages postés dimanche 25 décembre 2011Date d'inscription 23 avril 2018 Dernière intervention - 24 nov. 2013 à 18:12
0
Utile
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
Commenter la réponse de stell-91
BunoCS 13769 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 24 nov. 2013 à 18:14
0
Utile
Normal.
Tu as mis un %d dans le printf() mais tu as oublié de mettre la variable ;)
Commenter la réponse de BunoCS
stell-91 239 Messages postés dimanche 25 décembre 2011Date d'inscription 23 avril 2018 Dernière intervention - 24 nov. 2013 à 18:17
0
Utile
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;
}
Commenter la réponse de stell-91

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.