Das OFFIZIELLE PROFAN SUPPORT FORUM
Einsteigerfragen
PROFAN-Programmierung
Helfer & Tools
Anregungen & Vorschläge
PROFAN-NEWS
Die Regeln!
2 - PROFAN-Programmierung

 Neues Thema  |  Zur Übersicht  |  Suchen  |  Einloggen   Vorherige Nachricht  |  Nächste Nachricht 
 Re: Konsolenanwendung in xProfanX4?
Autor: Arndt Lindner (80.150.206.---)
Datum:   05.07.21 12:13

Hallo Markus,

für Dein Problem mit der Consolausgabe habe ich leider keine Lösung. Ich habe mich aber auch mit Primzahlberechnungen beschäftigt und ein kleines Primzahlsieb geschrieben. Kürzlich habe ich dazu eine kleine Assemblerroutine geschrieben, die die Berechnungen extrem beschleunigt. Mit meiner i5-7400 CPU und 16 GB RAM braucht das Programm 56 min zur Berechnung und Abspeicherung der 16.252.325 Primzahlen, die kleiner als 300.000.000 sind.
 
   ASM "fillw",4
   MOV  EAX,par1
   MOV  EBX,par3
   MOV  EDX,par2
   MOV  ECX,par4
   CLD
 sch:
   ADD  EAX,EDX
   MOV  [EAX],EBX
   LOOP  sch
   ENDASM
 
 
 declare longint ende, i, j, k, n, atime, etime, btime, sek, min, stu, mp
 declare string fn
 
   WindowTitle "Primzahlsieb"
   WindowStyle 15
   Window 10,10-1000,900
 
 AppendMenubar 300,"End"
 AppendMenubar 301,"Primzahlen berechnen bis ..."
 AppendMenubar 302,"Berechne"
 
 UserMessages $10
 
 mp = 1000
 ende = 0
 whilenot ende
 waitinput
   if menuitem(300) || (%UMessage = $10)
     ende = 1
   elseif Menuitem(301)
     mp = input$("Primzahlen bis:","Eingabe",mp)
   elseif Menuitem(302)
     declare memory pz
     dim pz,4*(mp+1)
     fn = savefile$("Primzahldatei","prim.txt")
     assign #1,fn
     rewrite #1
     atime = &gettickcount
     clear pz
     fillw(pz+4,4,1,mp)
     Print "Array gefüllt"
     j = 0
     for i,2,mp
       if long(pz,4*i) == 1
         inc j
         print #1,i
         case j mod 1000 == 0 : print i      ' Es wird nur jede 1000. Primzahl auf dem Bildschirm ausgegeben
         k = mp\i - 1
         case k > 0 : fillw(pz+4*i,4*i,0,k)
       endif
     endfor
     etime = &gettickcount
     close #1
     dispose pz
     btime = etime - atime
     sek = btime/1000
     min = sek/60
     stu = min/60
     set("decimals",0)
     print str$(j) + " Primzahlen bis "+str$(mp)+" berechnet in "+str$(stu)+":"+str$(min mod 60)+":"+str$(sek mod 60)+":"+str$(btime mod 1000)
     print #1,str$(j) + " Primzahlen bis "+str$(mp)+" berechnet in "+str$(stu)+":"+str$(min mod 60)+":"+str$(sek mod 60)+":"+str$(btime mod 1000)
   endif
 endwhile
 end
 


Vielleicht ist eine Anregung für Dich dabei oder kannst Du mir noch einen Tip geben? Zur Zeit denke ich über eine anfängliche Abschätzung der Rechenzeit und eine Umstellung des Bereichs mit Long-Variablen auf ein Bitfeld nach.

Gruß
Arndt

 Beitrag beantworten  |  Foren-Liste  |  Alle Antworten   Neuerer Beitrag  |  Älteres Thema 

 Beiträge Autor  Datum
 Konsolenanwendung in xProfanX4?  Neu
Markus Barkholz 04.07.21 20:33 
 Re: Konsolenanwendung in xProfanX4?  Neu
Arndt Lindner 05.07.21 12:13 
 Re: Konsolenanwendung in xProfanX4?  Neu
Markus Barkholz 05.07.21 20:21 
 Re: Konsolenanwendung in xProfanX4?  Neu
Arndt Lindner 06.07.21 20:11 
 Re: Konsolenanwendung in xProfanX4?  Neu
Heinz Brill 05.07.21 17:15 
 Re: Konsolenanwendung in xProfanX4?  Neu
Markus Barkholz 05.07.21 20:23 


 Foren-Liste  |  Zur Registrierung 
 Benutzerlogin
 Benutzername:
 Passwort:
 Login-Daten speichern:
   
 Passwort vergessen?
E-Mail-Adresse oder Username unten eingeben. Dann wird Dir per e-Mail ein neues Passwort zugeschickt.

phorum.org