 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Input
Anmeldungsdatum: 28.07.2014 Beiträge: 59
|
Verfasst am: 20.03.2015, 09:13 Titel: Astron. Kalender |
|
|
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 |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 20.03.2015, 12:31 Titel: |
|
|
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:
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 |
|
 |
Input
Anmeldungsdatum: 28.07.2014 Beiträge: 59
|
Verfasst am: 20.03.2015, 13:22 Titel: |
|
|
Vielen Dank; läuft jetzt wie ein Uhrwerk!!  |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1278 Wohnort: Ruhrpott
|
Verfasst am: 20.03.2015, 13:23 Titel: |
|
|
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 |
|
 |
Input
Anmeldungsdatum: 28.07.2014 Beiträge: 59
|
Verfasst am: 20.03.2015, 17:17 Titel: |
|
|
Danke dir; werde das mal bei Gelegenheit genauer anschaun.
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 |
|
 |
|
|
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.
|
|