Accueil > Forum > > > > generer un nombre premier
generer un nombre premier
mardi 8 mars 2005 à 20:42:02 |
generer un nombre premier

MoveX
|
[code]
var
i: Integer;
Temp: Integer;
begin
Randomize;
Temp:= Random(10)+Random(10)*10+Random(10)*100+Random(10)*1000+Random(10)*10000;
for i:= 2 to Round(Power(Temp,0.5)) do
begin
if Temp mod i<>0
then ButtonGenererClick(Sender); // <============== ici
end;
EditClePublique.Text:=IntToStr(Temp);
[/code]
salut, jessaie de generer un nombre premier, seulement ca plante
apparement une erreur de stackoverflow ou quelque chose comme ca...
peut etre que ca vient de l appel a elle meme (la procedure) si le nombre n est pas premier...
|
|
mardi 8 mars 2005 à 22:48:27 |
Re : generer un nombre premier

neodelphi
|
Réponse acceptée !
Faut que tu trouve un nombre premier au hasard c ça ?
Sinon je croit voir d'ou viend ton probleme : Je suppose que ce code est dans la procedure ButtonGenererClick et que si ton nombre n'est pas premier tu la relance ? Si c'est le cas ya deux gros problemes : - Deja tu teste si i divise ton nombre. Si NON ok on passe au suivant. Si OUI on relance une procedure ButtonGenererClick : mais la tu devrai deja faire un break pour pas tester les si les nombre après i divisent temp puiske t'en a trouvé un. - Ensuite ce qui fait planté c'est le fait que tu fait un appel a ButtonGenererClick. Dans cette méthode si tu trouve pas de nombre premier, tu réapelle ButtonGenereClick, alors que la procedure n'est meme pas achevé, ce qui force le pc a mémoriser le fait que y'a une procedure ButtonGenererClick qui est démarrée et qu'il faudra la finir... On appele ça une fonction récursive puisque qu'elle sappelle elle-meme... Le prob c'est que a force de pas trouver de nombre premier il continu d'appeler cette procedure sans la finir, donc le pc doit memoriser de plus en plus pour savoir ou il en est, et au bou d'un moment ça sature...
Les info sur ou en est le programme dans les procedure on appelle ça la pile (stack), et la tu en demande trop donc dépassement (overflow).
Je sais pas si tu va comprendre ce que je te dit mais c dur a expliquer lol...
Ce qu'il faudrai plutot que tu fasse c'est un truc du genre :
TANT QUE on a pas trouvé de nombre premier FAIRE BEGIN Generer un nombre premier; tester les diviseur et si on en trouve pas on dit que on a trouvé un nombre premier END
neodelphi
|
|
mardi 8 mars 2005 à 23:29:47 |
Re : generer un nombre premier

ni69
|
boucle qui peut se traduire par : repeat[...] until ...
@+ Bonne Prog' Nico
N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! ![]()
|
|
mercredi 9 mars 2005 à 09:15:53 |
Re : generer un nombre premier

sovitec
|
Plusieurs remarques :
1) Pourquoi ne pas écrire Temp := random(100000) ?
2) Il existe une fonction sqrt plus rapide que power(x, 0.5)
3) Tu peux gagner un peu en utilisant Floor plutôt que round
4) Ton test est très lent et devient rédhibitoire pour les grands
nombres. Tu pourrais au moins utiliser le crible d'Erasthotène. Si tu
veux passer à de très grands nombre il faudra envisager des méthodes
telles que Miller-Rabin.
Le reste des problèmes a été soulevé par neodelphi, mais tu n'en donnes
pas assez pour que l'on comprenne exactement d'où vient ton plantage.
|
|
mercredi 9 mars 2005 à 18:50:29 |
Re : generer un nombre premier

MoveX
|
merci pour toutes vos reponses, j ai bien compris ce que vous m avez dit. par contre, j en ai donne suffisament je pense pour que vous voyez d ou vient le bug puisque cest tout ce qu il y a dans mon code pour l instant.
et le bug vient bien du probleme de saturation de la pile...
merci encore pour les fonctions sqrt et floor. tandis que le temp:= random(.... cest parce que j ai recuperer un truc que j avais deja fait mais dans un autre but.... j ai meme pas penser a corriger ca.
|
|
mercredi 9 mars 2005 à 19:06:12 |
Re : generer un nombre premier

MoveX
|
apres reflexion si j ai pas change le random, cest parce que je veux que mon nombre ait un certain nombre de caracteres !! sinon je peux me retrouver avec un nombre a deux chiffres !
|
|
mercredi 9 mars 2005 à 19:59:49 |
Re : generer un nombre premier

neodelphi
|
"Tu pourrais au moins utiliser le crible d'Erasthotène" Mais je croit que ce qu'il veut c'est générer un nombre premier aléatoire... dans ce cas faudrait faire le crible des nombre premiers jusqu'à 10000 et les stocker mais yen a ptete un peu trop... ou alors se fixer un nombre au hasard n := Random(10000) puis d'appliquer un crible d'eratostene et de prendre le premier nombre premier supérieur à n.
neodelphi
|
|
mercredi 9 mars 2005 à 22:26:59 |
Re : generer un nombre premier

Delphiprog
|
Ne vous laissez pas abuser par le titre de ce topic : "generer un nombre premier". Le problème de MoveX provient en réalité d'une non maîtrise de l'utilisation de la récursivité comme l'a expliqué (et compris tout de suite  ) NeoDelphi. MoveX doit revoir son code d'après les recommandations de NeoDelphi et valider sa réponse, rien de plus. Les problèmes de débordement de pile sont le risque premier de la récursivité  . Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient. 
|
|
mercredi 9 mars 2005 à 22:29:05 |
Re : generer un nombre premier

MoveX
|
ok, j ai deja fait un premier test mais je ne suis pas parvenu a grand chose, je vais encore m acharner un peu.
merci a tous pour votre participation
|
|
mercredi 9 mars 2005 à 22:42:47 |
Re : generer un nombre premier

MoveX
|
Réponse acceptée !
voila, j ai reussi !!
[code] var i, Temp, Reste: Integer; begin Randomize; repeat Temp:= Random(10)*100+Random(10)*10+Random(10); for i:=2 to Floor(Sqrt(Temp)) do begin Reste:= Temp mod i; if Reste=0 then Break; if i= Floor(Sqrt(Temp)) then EditClePublique.Text:= IntToStr(Temp); end; until EditClePublique.Text<>''; [\code]
j ai donc evite la recursivite... (cest plus facile)
merci a tous pour vos conseils
|
|
Cette discussion est classée dans : nombre, temp, premier, random, generer
Répondre à ce message
Sujets en rapport avec ce message
Afficher un nombre aléatoire [ par Dagnir ]
Salut, Bon voila mon but :Quand on clic sur mon bouton il y a un nombre (aléatoire) qui s'affiche dans un champ.Dans l'aide j'ai trouvé :function Rand
generer un nombre en plus dans Tedit [ par shell13010 ]
Bonsoir a tous,j'aimerais savoir comment faire pour generer le meme nombre dans un teditexemple: dans mon Tedit il y a un 1 alors lors du click sur le
algorithme de conversion des degrés décimaux en degrés sexagésimaux [ par lidia22 ]
salut a tous;je voulais consernant Comment faire pour convertir des degrés décimaux en degrés sexagésimaux en langage DELPHI?exemple:latitude = <font
Option RANDOM Delphi [ par florian060190 ]
Bonjour, Je suis actuellement en train de réaliser un projet Algorithmique qu'il faudra ensuite executer sur Delphi. Nous avons en cours appri l'outil
Commande random() [ par NivekR ]
Bonsoir à tous et à toute,Voilà, je suis en 1ère année de DEUST Informatique à Orsay et je dois créer une application (celle que l'on veut) avec DELPH
Faire un graphique à partir d'un TClientDataSet [ par jenniguigui ]
Bonjour !Voila, dans ma base j'ai des échantillons avec une date de création, je voudrais afficher un graphique qui représente le nombre d'échantillon
Ajout ligne TMémo [ par TIPECie ]
Bonjour à tous,Je suis en train de réaliser un scanner 3d dans le cadre des TIPE, mais je bloque sur un truc qui va vous paraître ridicule: Comment mo
Delphi ordonner combobox [ par floppy41 ]
Bonjour à tous,j'explique mon probleme : j'ai une liste déroulante générée automatiquement.Cette derniere contient des dates : 01/04/0905/06/09 etc...
urgence probleme recordcount [ par youhibadelphi ]
Salut tlm J'ai besoin de votre aide <p
Livres en rapport
|
Derniers Blogs
COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE?COMMENT MAPPER UNE VUE SQL SUR UNE COLLECTION DE COMPLEX TYPE? par Matthieu MEZIL
Avec EF, les vues doivent être mappées sur des entity types. Le problème c'est que les entity types doivent avoir une clé. Avec EF, nous avons les complex type qui n'ont pas de clé mais les vues ne peuvent pas être mappées dessus. Avec EF4, il est possibl...
Cliquez pour lire la suite de l'article par Matthieu MEZIL [WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL?[WF4] UN BINDING ACTIVITY/ACTIVITYDESIGNER QUI PASSE MAL? par JeremyJeanson
Certain d'entre vous on peut être vécu cette situation embarrassante après quelques temps passer avec WF4 : Au début avec mon " ActivityDesigner" , tout allait bien. Et puis un jour j'ai au des problèmes de " Binding" . Alors nous sommes allé sur le site ...
Cliquez pour lire la suite de l'article par JeremyJeanson MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ?MYTIC - SHAREPOINT 2010 : DéJà UN MYTHE MICROSOFT ? par junarnoalg
La prochaine session de MyTIC aura lieu à Namur, le 23 mars prochain. Pendant presque une heure, nous parlerons de SharePoint 2010. Voici un aperçu du programme.
Accueil : 17h30 Début de la session : 18h00 - Les nouvelles int...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|