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

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

Votre réponse

10 réponses

BunoCS 14091 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention - 24 nov. 2013 à 16:52
0
Merci
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 245 Messages postés dimanche 25 décembre 2011Date d'inscription 3 septembre 2018 Dernière intervention - Modifié par stell-91 le 24/11/2013 à 17:07
0
Merci
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 245 Messages postés dimanche 25 décembre 2011Date d'inscription 3 septembre 2018 Dernière intervention - Modifié par stell-91 le 24/11/2013 à 17:00
0
Merci
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 14091 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention - 24 nov. 2013 à 17:24
0
Merci
Il manque des accolades:

...
else
{
  // ton code ici
} 
return 0;
Commenter la réponse de BunoCS
stell-91 245 Messages postés dimanche 25 décembre 2011Date d'inscription 3 septembre 2018 Dernière intervention - Modifié par stell-91 le 24/11/2013 à 17:32
0
Merci
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 245 Messages postés dimanche 25 décembre 2011Date d'inscription 3 septembre 2018 Dernière intervention - 24 nov. 2013 à 18:04
0
Merci
Et sinon la boucle est correct ?
Commenter la réponse de stell-91
BunoCS 14091 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention - Modifié par BunoCS le 24/11/2013 à 18:09
0
Merci
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 245 Messages postés dimanche 25 décembre 2011Date d'inscription 3 septembre 2018 Dernière intervention - 24 nov. 2013 à 18:12
0
Merci
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 14091 Messages postés lundi 11 juillet 2005Date d'inscriptionModérateurStatut 20 septembre 2018 Dernière intervention - 24 nov. 2013 à 18:14
0
Merci
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 245 Messages postés dimanche 25 décembre 2011Date d'inscription 3 septembre 2018 Dernière intervention - 24 nov. 2013 à 18:17
0
Merci
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.