  | 
					
						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, 08: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, 11: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, 14:26, insgesamt einmal bearbeitet | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		Input
 
 
  Anmeldungsdatum: 28.07.2014 Beiträge: 59
 
  | 
		
			
				 Verfasst am: 20.03.2015, 12:22    Titel:  | 
				     | 
			 
			
				
  | 
			 
			
				Vielen Dank; läuft jetzt wie ein Uhrwerk!!   | 
			 
		  | 
	 
	
		| Nach oben | 
		 | 
	 
	
		  | 
	 
	
		grindstone
 
 
  Anmeldungsdatum: 03.10.2010 Beiträge: 1283 Wohnort: Ruhrpott
  | 
		
			
				 Verfasst am: 20.03.2015, 12: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, 16: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.
  | 
   
 
     |