Maths et autres

Résolu
Signaler
Messages postés
73
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
21 octobre 2010
-
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
-
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 ?

#include <stdio.h>
#include <math.h>
#include <stdlib.h>


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 ?

merci bcp
jph

J-Ph

12 réponses

Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
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) !!!

Jean-François
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
Ce calcule est parfaitement correct. Ce n'est pas la taille d'un pointeur que l'on calcule mais la taille de la valeur pointée par le pointeur.

char c[] = "Bonjour";
printf("%d\n", sizeof(*c));

Affiche bien 1

C++ (@++)<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
Au passage, c'est quoi l'erreur que provoque system("pause") ?

C++ (@++)<!--
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
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
Messages postés
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
30
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.

ciao...
BruNews, MVP VC++
Messages postés
73
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
21 octobre 2010

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
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Pour system() il faut l'include de stdlib.h ou de process.h donc ça devrait passer !

C'est quel compilateur ?
C'est quel libellé d'erreur précisemment ?

Jean-François
Messages postés
73
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
21 octobre 2010

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

#include <stdio.h>
#include <math.h>
#include <stdlib.h>


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








J-Ph
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
Les accolades ne sont pas appairées dans main() (3 ouvertes, 2 fermées)


int main(void)
{
   int i;

   for (i = 101; i < 500; i++)
   {
      if (estPremier(i))
      {
         printf ("%d\n",i);
      }
   }
   system("pause");
}








Jean-François
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
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)

C++ (@++)<!--
Messages postés
73
Date d'inscription
mercredi 25 juillet 2007
Statut
Membre
Dernière intervention
21 octobre 2010

ok, merci, c gentil mais, je voudrais tous les afficher ( 2;3;5;7;et... jusqu'a 499, commenty dois je procéder ?

MERCI

J-Ph
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009
1
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

Jean-François