jeanphilippe37
Messages postés73Date d'inscriptionmercredi 25 juillet 2007StatutMembreDernière intervention21 octobre 2010
-
2 mai 2008 à 00:19
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 2009
-
4 mai 2008 à 12:21
Slt,
j'ai fais un prgm de maths pour savoir les nbrs premiers mais, quand je mets system("pause"), j'ai une erreur, pouvez vous me corriger ?
int estPremier (int nbr)
{
/*Les nombres premiers < 100*/
static int prems[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,
43,47,53,59,61,67,71,73,79,83,89,97};
int i, n;
double d;
/* On suppose que 1 est premier */
if (nbr == 1)
{
return 1;
}
n = sizeof (prems) / sizeof (*prems);
/* D'abord on regarde si n est divisible par les nombres premiers dans le tableau */
for (i = 0; i < n; i++)
{
if (nbr == prems[i])
{
return 1;
}
if (nbr % prems[i] == 0)
{
return 0;
}
}
/* Ensuite, on doit regarder a partir du dernier element du tableau+2 jusqu'a sqrt(nbr)... */
d = sqrt (nbr) + 0.5; /* Le 0.5 permet de tester si c'est un carre parfait... */
i = prems[i-1] + 2;
while (i < d)
{
if (nbr % i == 0)
{
return 0;
}
i += 2;
}
return 1;
}
int main(void)
{
int i;
for (i = 101; i < 500; i++)
{
if (estPremier (i))
{
printf ("%d\n",i);
}
}
system("pause");
return 0;
}
Et également, j'aimerai faire un truc sur l'annimation en c++ sur "console" en c++, comment on fais ça ? et aussi, quelles sont les dimentions de l'écran console ? Pour un jeux ds ce mode, est-ce facile ou pas ?
egalement, pour un jeux en 2d avec scriptes, comment on fait, j'aimerai trouver la bibliothéque scripte, ou je peux la choper ?
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 2 mai 2008 à 01:38
Bonsoir,
Ce calcul est incorrect : n = sizeof(prems) / sizeof(*prems);
C'est n = sizeof(prems) / sizeof(int); (c'est un tableau de "int")
Ce n'est qu'un hazard si le résultat est juste parce que sizeof(pointeur) = sizeof(int) !!!
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 2 mai 2008 à 09:44
Ce n'est pas la taille d'un pointeur qui est calculée mais tout simplement le nombre de valeurs dans le tableau prems (tableau d'entiers et non tableau de pointeurs) et je n'ai rien rigoureusement à changer à ce que j'ai écris !
Jean-François
Vous n’avez pas trouvé la réponse que vous recherchez ?
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 mai 2008 à 10:28
sizeof() devrait donner la taille totale du tableau dans le cas de l'exemple car le tableau est connu de la fonction.
On devrait donc avoir le nombre d'éléments dans n.
Si c'était un param, ce serait bien sizeof(int) à en retour.
Faut absolument se méfier de ce genre de syntaxe et ne pas en prendre l'habitude, source de bugs difficile à retrouver.
jeanphilippe37
Messages postés73Date d'inscriptionmercredi 25 juillet 2007StatutMembreDernière intervention21 octobre 2010 2 mai 2008 à 13:34
re,
merci, mais l'erreur quand je le compile avec sytem("pause") j'ai une erreur de compilation, comment dois-je faire ?
Et également, j'aimerai faire un truc sur l'annimation en c++ sur "console" en c++, comment on fais ça ? et aussi, quelles sont les dimentions de l'écran console ? Pour un jeux ds ce mode, est-ce facile ou pas ?
egalement, pour un jeux en 2d avec scriptes, comment on fait, j'aimerai trouver la bibliothéque scripte, ou je peux la choper ?
merci les gars
ps : Connaissait vous l'école d'ingénieur IMERIR (l'école d'ingénieur en informatique et robotique de perpignan.) ?
J-Ph
jeanphilippe37
Messages postés73Date d'inscriptionmercredi 25 juillet 2007StatutMembreDernière intervention21 octobre 2010 2 mai 2008 à 15:53
re,
j'ai corrige, ms cela merde encore: cette fois, c une erreur d'incolade!!!!!!!!!
60 C:\Documents and Settings\jean-philippe\Mes documents\maths.cpp expected `}' at end of input
int estPremier (int nbr)
{
/*Les nombres premiers < 100*/
static int prems[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,
43,47,53,59,61,67,71,73,79,83,89,97};
int i, n;
double d;
/* On suppose que 1 est premier */
if (nbr == 1)
{
return 1;
}
n = sizeof (prems) / sizeof (*prems);
/* D'abord on regarde si n est divisible par les nombres premiers dans le tableau */
for (i = 0; i < n; i++)
{
if (nbr == prems[i])
{
return 1;
}
if (nbr % prems[i] == 0)
{
return 0;
}
}
/* Ensuite, on doit regarder a partir du dernier element du tableau+2 jusqu'a sqrt(nbr)... */
d = sqrt (nbr) + 0.5; /* Le 0.5 permet de tester si c'est un carre parfait... */
i = prems[i-1] + 2;
while (i < d)
{
if (nbr % i == 0)
{
return 0;
}
i += 2;
}
return 1;
}
int main(void)
{
int i;
for (i = 101; i < 500; i++)
{
if (estPremier (i))
{
printf ("%d\n",i);
system("pause"); }
}
SAKingdom
Messages postés3212Date d'inscriptionlundi 7 novembre 2005StatutMembreDernière intervention16 février 200915 2 mai 2008 à 21:37
jfrancois >>
"Ce n'est pas la taille d'un pointeur que l'on calcule mais la taille de la valeur pointée par le pointeur."
Je parlais du sizeof (*prems)
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 4 mai 2008 à 12:21
Bonjour,
1) en supprimant l'aberation du 1 premier (mettre à la place : if (nbr < 2) return 0;)
2) en faisant commencer la boucle à 0 (ou 1 ou 2) et non à 101
3) en corrigeant l'erreur d'accolades déjà signalée