Code : Tout sélectionner
;***********************************************
;Titre :*nombre_premier (methode eratosthene)
;Auteur : Zorro
;Date :06/10/2016
;Heure :22:54:16
;Version Purebasic : PureBasic 5.50 (Windows - x86)
;Version de l'editeur :EPB V2.64
; Libairies necessaire : Aucune
;***********************************************
;{- Enumerations / DataSections
;{ Windows
Enumeration
#Win
EndEnumeration
;}
;{ Gadgets
Enumeration
#Editor
#Button_go
#Button_stop
#String_depart
#String_arrive
#progress_bar
#chrono
EndEnumeration
;}
Global start.q,arrive.q,Flag,Flag2,N.q
Global Sortie.s
Global mem_np=2
Global Addition=2
Declare openwindow_win()
Declare boss1(bidon)
Declare boss2(bidon)
Declare boss3(bidon)
Declare boss4(bidon)
Declare.s eratosthenes(start,n)
Declare paire_impaire(nombre)
Define.l Event
;}
OpenWindow_Win()
;{- Event loop
Repeat
Event = WaitWindowEvent(12)
Select Event
; ///////////////////
Case #PB_Event_Gadget
Select EventGadget()
Case #Editor
Case #Button_go
start.q=val(GetGadgetText(#String_depart))
N.q=val(GetGadgetText(#String_arrive))
if paire_impaire(start.q) =#true
start.q=start.q+1
Endif
ClearGadgetItems(#editor)
SetGadgetAttribute(#progress_bar, #PB_ProgressBar_Maximum, N)
TempsDepart.f = ElapsedMilliseconds()
;calldebugger
eratosthenes(start,N)
TempsEcoule.f = (ElapsedMilliseconds()-TempsDepart.f )/1000 ; en secondes
SetGadgetText(#chrono,"Temp:"+strF( TempsEcoule.f,3 )+" secondes")
SetGadgetText(#editor, Sortie.s)
Case #String_depart
start=val(GetGadgetText(#String_depart))
Case #String_arrive
arrive=val(GetGadgetText(#String_arrive))
EndSelect
; ////////////////////////
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Win
CloseWindow(#Win)
Break
EndSelect
EndSelect
Forever
;
;}
; procedure zone
Procedure OpenWindow_Win()
If OpenWindow(#Win, 457, 159, 400, 400, "nombre premier", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
EditorGadget(#Editor, 20, 75, 355, 300)
ButtonGadget(#Button_go, 20, 5, 85, 30, "GO")
ButtonGadget(#Button_stop, 130, 5, 85, 30, "Stop")
StringGadget(#String_depart, 230, 10, 130, 20, "1", #PB_String_Numeric)
StringGadget(#String_arrive, 230, 40, 130, 20, "80000000", #PB_String_Numeric)
ProgressBarGadget(#progress_bar, 20,385, 355, 10, 0, 100)
TextGadget(#chrono,20,40,200,15,"Temp:"+"0.00")
EndIf
EndProcedure
Procedure.s eratosthenes(start,N)
Dim N(N+10);
Sortie.s=""
if Start<2
Sortie.s=Sortie.s+"2"+" "+chr(10)
Endif
For X = start To N Step 2
Divis = 0
For Y = 2 To Sqr(X)
If mod(X , Y )= 0
Divis + 1
EndIf
Next Y
If Divis = 0 and x<>1
Sortie.s=Sortie.s+Str(X)+" "+chr(10)
EndIf
Event =WaitWindowEvent(2)
if event=#PB_Event_Gadget
Select EventGadget()
Case #Button_stop
SetGadgetText(#editor, Sortie.s)
ProcedureReturn Sortie.s
Endselect
Endif
SetGadgetState(#progress_bar, x)
Next X
ProcedureReturn Sortie.s
EndProcedure
Procedure paire_impaire(nombre)
If nombre % 2 <> 0 ; nombre impaire
retour = #false
Else ; nombre paire
retour= #True ; paire
EndIf
ProcedureReturn retour
EndProcedure
;Epb