Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Astron. Kalender

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Input



Anmeldungsdatum: 28.07.2014
Beiträge: 59

BeitragVerfasst am: 20.03.2015, 09:13    Titel: Astron. Kalender Antworten mit Zitat

Hallo liebes Forum. Hab da mal einen astronomischen Kalender gebastelt und wollte nun fragen, ob ich diesen noch etwas dopen kann, damit er schneller läuft. Ich hab die Werte mit dem Faktor 3 gekürzt und allen Schnickschnack weggelassen.

Code:

dim as integer s,tag,wota,woche,monat,jahr,phase,drak,finst,saros
Open "Phase.txt" For Output As #1
print #1," Jahr:"," Monat:"," Tag:"," Wochentag:"," Woche:"," Mondphase:"," Drak.Mt.:"," Finst.Jhr.:"," Sarosperiode:"
print #1,""
do

if wota>6 then wota=0:woche+=1
if s mod 850481=0 then phase=0:monat+=1
if s mod 10518975=0 then jahr=jahr+1:monat=1:woche=1:tag=0
if s mod 783712=0 then drak+=1
if s mod 9982658=0 then finst+=1
if s mod 191581894=0 then saros+=1

if s mod 28800=0 then
tag+=1:wota+=1:phase+=1
print #1,jahr,monat,tag,wota,woche,phase,drak,finst,saros
end if

s+=1
loop until jahr>7000
close
shell "START Notepad.exe Phase.txt"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 20.03.2015, 12:31    Titel: Antworten mit Zitat

Also grundsätzlich ist Modulo eine relative langsame Operation, aber die brauchst du hier auch gar nicht.

Vereinfacht gesagt: Du hast hier eine Zählvariable, die in jedem Schleifendurchlauf um eins größer wird. Schau dir die Zeile an:
Code:
if s mod 850481=0

Wie oft prüfst du unnötigerweise, ob s mod 850481 0 ist? Genau, 850480 mal!
Es wäre wesentlich geschickter, wenn du einfach mehrere Counter verwendest:
Code:

if drakCounter = 0 then
drakCounter = 783712
drak += 1
....
drakCounter  -= 1

_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.


Zuletzt bearbeitet von Jojo am 20.03.2015, 15:26, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Input



Anmeldungsdatum: 28.07.2014
Beiträge: 59

BeitragVerfasst am: 20.03.2015, 13:22    Titel: Antworten mit Zitat

Vielen Dank; läuft jetzt wie ein Uhrwerk!! Daumen rauf!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1278
Wohnort: Ruhrpott

BeitragVerfasst am: 20.03.2015, 13:23    Titel: Antworten mit Zitat

Hallo Input!

Auch wenn ich die von dir verwendeten Zahlen nicht wirklich nachvollziehen kann, Berechnungen dieser Art sind ein klarer Fall für einen 5-dimensionalen (leicht abgewandelten) Bresenham - Algorithmus :
Code:
Dim As Integer s,tag,wota,woche,monat,jahr,phase,drak,finst,saros
Dim As Integer rtag,rwota,rwoche,rmonat,rjahr,rphase,rdrak,rfinst,rsaros,intervall

Open "Phase.txt" For Output As #1
Print #1," Jahr:"," Monat:"," Tag:"," Wochentag:"," Woche:"," Mondphase:"," Drak.Mt.:"," Finst.Jhr.:"," Sarosperiode:"
Print #1,""

jahr = 1
monat = 1
woche = 1
drak = 1
finst = 1
saros = 1

intervall = 28800

Do

   If wota>6 Then wota=0:woche+=1
   
   rphase += intervall
   If rphase >= 850481 Then
      rphase -= 850481
      phase=0
      monat+=1
   EndIf
   
   rjahr += intervall
   If rjahr >= 10518975 Then
      rjahr -= 10518975
      jahr += 1
      monat = 1
      woche = 1
      tag = 0
      Locate 1,1
      Print jahr
   EndIf
   
   rdrak += intervall
   If rdrak >= 783712 Then
      rdrak -= 783712
      drak += 1
   EndIf
   
   rfinst += intervall
   If rfinst >= 9982658 Then
      rfinst -= 9982658
      finst += 1
   EndIf
   
   rsaros += intervall
   If rsaros >= 191581894 Then
      rsaros -= 191581894
      saros += 1
   EndIf
   
   tag+=1:wota+=1:phase+=1
   Print #1,jahr,monat,tag,wota,woche,phase,drak,finst,saros
      
Loop Until jahr>7000

Close
Shell "START Notepad.exe Phase.txt"


Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Input



Anmeldungsdatum: 28.07.2014
Beiträge: 59

BeitragVerfasst am: 20.03.2015, 17:17    Titel: Antworten mit Zitat

Danke dir; werde das mal bei Gelegenheit genauer anschaun. zwinkern

Gruss: Input

Edit: Hab noch etwas dran gebastelt, läuft perfekt. Vielen Dank nochmal!!

Code:

Dim As Integer tag,wota,woche,monat,jahr,phase,drak,finst,meton,saros,intervall
Dim As Integer rtag,rwota,rwoche,rmonat,rjahr,rphase,rdrak,rfinst,rmeton,rsaros
Dim As Integer gtag,gwoche,gmonat,gdrak,gjahr,gmeton

Open "Phase.txt" For Output As #1
Print #1," Jahr:"," Monat:"," Tag:"," Wota:"," Woche:"," Mopha:",
Print #1," Drak.:"," Finst.:"," Meton:"," Saros:","Detail:"
Print #1,"":tag=1:jahr=1:monat=1:wota=1:woche=1:drak=1:finst=1:meton=1:saros=1:intervall=86400
Do
   
If wota>7 Then wota=1:woche+=1:gwoche+=1
If rphase>=2551443 Then rphase-=2551443:phase=0:monat+=1:gmonat+=1
If rjahr>=31556926 Then rjahr-=31556926:jahr+=1:monat=1:woche=1:tag=1:gjahr+=1:Print #1,jahr,monat,tag,wota,woche,phase,drak,finst,meton,saros,"Jahr"
If rdrak>=2351136 Then rdrak-=2351136:drak+=1:gdrak+=1
If rfinst>=29947977 Then rfinst-=29947977:finst+=1:Print #1,jahr,monat,tag,wota,woche,phase,drak,finst,meton,saros,"Finst"
If rmeton>=605623818 Then rmeton-=605623818:meton+=1:gmeton+=1:Print #1,jahr,monat,tag,wota,woche,phase,drak,finst,meton,saros,"Meton":print #1,""
If rsaros>=569003867 Then rsaros-=569003867:saros+=1:Print #1,jahr,monat,tag,wota,woche,phase,drak,finst,meton,saros,"Saros":print #1,""

tag+=1:wota+=1:phase+=1:rphase+=intervall:rjahr+=intervall:rdrak+=intervall
rfinst+=intervall:rmeton+=intervall:rsaros+=intervall:gtag+=1
Loop Until jahr>7000

print #1,""
print #1,"Tage:         ";gtag-2
print #1,"Wochen:       ";gwoche
print #1,"Monate:       ";gmonat
print #1,"Drakon. Mte.: ";gdrak
print #1,"Jahre:        ";gjahr
print #1,"Finst. Jahre: ";finst
print #1,"Metonzyklen:  ";gmeton
print #1,"Sarosperioden:";saros

Close:Shell "START Notepad.exe Phase.txt"
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz