hjälp med primtalsprogram!

Diskussioner om programmering

Moderatorer: Fanta_gbg, e5frog, stonan, Zlasher, hollowman

hjälp med primtalsprogram!

Inläggav huruvida » 9 augusti 2013, 13:17

Hejsan! :D

Jag gör just nu mitt gymnasiearbete med att programmera i basic på en C64 emulator. jag använder mig av simon's basic plug-in.
Jag gör ett program som skall räkna och skriva alla primtal mellan 1 och 1 miljard. Det mesta är färdigt, men det enda jag behöver
är något sätt att skriva i och läsa av en virtuell floppy disk. Har läst flera böcker med olika commands men inte hittat något sådant...
Snälla hjälp mig!
Användarvisningsbild
huruvida
Nybörjare
Nybörjare
 
Inlägg: 23
Blev medlem: 27 juni 2012, 15:52
Ort: Uppsala

Re: hjälp med primtalsprogram!

Inläggav Zeela » 9 augusti 2013, 14:18

Du vill alltså läsa och skriva data till/från en fil med C64:ans basic?

Här har du en bok i ämnet:
http://www.scribd.com/doc/55326181/Comm ... c-Tutorial

Se bara till att du har en d64-fil mountad i emulatorn så "det sitter en diskett i".
Användarvisningsbild
Zeela
Stormästare
Stormästare
 
Inlägg: 845
Blev medlem: 9 maj 2005, 19:11
Ort: Sverige, Åtvldaberg

Re: hjälp med primtalsprogram!

Inläggav huruvida » 9 augusti 2013, 23:58

tack!

skall läsa igenom direkt. :)
Användarvisningsbild
huruvida
Nybörjare
Nybörjare
 
Inlägg: 23
Blev medlem: 27 juni 2012, 15:52
Ort: Uppsala

Re: hjälp med primtalsprogram!

Inläggav hedning » 10 augusti 2013, 08:42

huruvida skrev:Jag gör just nu mitt gymnasiearbete med att programmera i basic på en C64 emulator.


Hur coolt är inte det? Hur kommer dagens ungdom på något sådant?
...::] Genesis Project - Accept No Limits [::...
SX-64, C64GS, silver badge c64, Brödbox, C64C, C64G, Drean C64C, VIC20, Plus/4, C16, C116, C128, C128D, Atari 520 STfm, Atari 1040 ST, Atari Falcon 030, Amiga 500, Amiga 600, Amiga 1200, CDTV.
Användarvisningsbild
hedning
Stormästare
Stormästare
 
Inlägg: 1852
Blev medlem: 15 mars 2009, 20:33
Ort: Lund

Re: hjälp med primtalsprogram!

Inläggav sledge » 10 augusti 2013, 17:39

Hur coolt som helst!
Användarvisningsbild
sledge
Stormästare
Stormästare
 
Inlägg: 741
Blev medlem: 2 oktober 2007, 14:45
Ort: Hammarö

Re: hjälp med primtalsprogram!

Inläggav e5frog » 18 augusti 2013, 15:26

Anledningen är lärare, pappa eller annan vuxen med C64 kanske. ;-)

Om han använder WinVICE så får man väl rekommendera Alt + W vid körning.

Det finns över 78000 primtal under en miljon, de blir snabbt tresiffriga... så de får inte plats på en 171kB disksida...
Om någon vill klistra in i WinVICE:

Kod: Markera allt
0 printchr$(147):l=1000000:b=2:c=3
1 forn=ctol:ford=bto(n-1):ifn/d=int(n/d)then3
2 nextd:printn;
3 nextn
run


Istället för printn får man lägga in kod för att skriva till en fil, handlar väl mest om att öppna en fil och sedan skriva till den med print# kommandot. Sen får man väl kolla om disken är full och be användaren byta disk.
Hade man kört på riktig hårdvara kanske man skulle skickat datan till skrivaren.

Lägger man ett annat fönster ovanpå WinVICE x64 fönster så får man upp hastigheten 3ggr eller något sådant, lite mer än 4800% kom min upp på, tyvärr kör den bara på en processor.
Kolla in mitt Fairchild System bild-galleri:
fairchild fairchild fairchild Bild fairchild fairchild fairchild
Användarvisningsbild
e5frog
Moderator
Moderator
 
Inlägg: 2763
Blev medlem: 8 augusti 2007, 18:16
Ort: Älvängen

Re: hjälp med primtalsprogram!

Inläggav e5frog » 18 augusti 2013, 20:38

Hur länge har du tänkt låta programmet köra, vilken hastighet kommer du upp i?

Jag har kört mitt program sen jag postade, har kommit till 36187 och det tar ju längre och längre tid att testa (med den metoden)...

Om man hade låtit varje bit på en diskett representera ett tal, då skulle den räcka för att markera vilket som var primtal och vilket som inte är det, man börjar med att märka varannan bit av de en miljon bitar som man har valt, sedan var tredje etc etc... Undra om det skulle gå snabbare.
Kolla in mitt Fairchild System bild-galleri:
fairchild fairchild fairchild Bild fairchild fairchild fairchild
Användarvisningsbild
e5frog
Moderator
Moderator
 
Inlägg: 2763
Blev medlem: 8 augusti 2007, 18:16
Ort: Älvängen

Re: hjälp med primtalsprogram!

Inläggav e5frog » 20 augusti 2013, 11:07

Nu har mitt program hunnit ända till 119183.
Kolla in mitt Fairchild System bild-galleri:
fairchild fairchild fairchild Bild fairchild fairchild fairchild
Användarvisningsbild
e5frog
Moderator
Moderator
 
Inlägg: 2763
Blev medlem: 8 augusti 2007, 18:16
Ort: Älvängen

Re: hjälp med primtalsprogram!

Inläggav e5frog » 22 augusti 2013, 16:18

184651
Kolla in mitt Fairchild System bild-galleri:
fairchild fairchild fairchild Bild fairchild fairchild fairchild
Användarvisningsbild
e5frog
Moderator
Moderator
 
Inlägg: 2763
Blev medlem: 8 augusti 2007, 18:16
Ort: Älvängen

Re: hjälp med primtalsprogram!

Inläggav huruvida » 22 augusti 2013, 17:07

Så roligt att ni tycker om det! Varför jag ville göra detta som gymnasiearbete är för att jag hittade en commodore SX-64 i mina farförälders garage
när jag hjälpa dem städa det. Hade inget att göra den sommaren så började programmera. Sen dess har jag haft en god grundkunskap i BASIC och
tänkte att jag kunde använde det i mitt gymnasiearbete!

e5frog:

Kul att få se att det går att göra ett sådant program!
Jag använder mig av CCS 64 (svensk som gjort det!) och där kan man också snabba upp processen.
jag tänkte och använda mig av en virtuell diskett. Har inte den obegränsad filstorlek då?

Hur funkar "if n/d = int (n/d) then3" i din kod?

ett förslag på den koden är att ha "N=C to L step 2" så kommer det gå fortare!
Användarvisningsbild
huruvida
Nybörjare
Nybörjare
 
Inlägg: 23
Blev medlem: 27 juni 2012, 15:52
Ort: Uppsala

Re: hjälp med primtalsprogram!

Inläggav Iggelito » 22 augusti 2013, 17:27

"hittade en commodore SX-64"
<i Homers röst> why you little... </i Homers röst>

;)
Total Chaos / Noice & F4CG
\m/ >.< \m/ ¯ Goatpower ¯ \m/ >.< \m/
http://csdb.dk/scener/?id=1048
Användarvisningsbild
Iggelito
Stormästare
Stormästare
 
Inlägg: 389
Blev medlem: 7 april 2006, 12:39
Ort: InFlamestown (Göteborg)

Re: hjälp med primtalsprogram!

Inläggav carlsson » 22 augusti 2013, 17:43

INT-satsen returnerar heltalsdelen av ett tal. Med andra ord vill e5frog testa om resten blir noll, att N är jämnt delbart med D.

Angående disketter har jag aldrig använt CCS64, men jag vet att i VICE kan man arbeta direkt mot PC:ns hårddisk istället för att använda D64-filer. Däremot vet jag inte hur filhantering på fältnivå fungerar om man gör så, eller hur stora filerna kan växa till att bli.

Man kan väl ansluta en virtuell 1581, då får man lite högre kapacitet. Jag minns inte om VICE har stöd för SFD1001 så man skulle kunna få 1 MB stora disketter.
Användarvisningsbild
carlsson
VIC-20 Guru
VIC-20 Guru
 
Inlägg: 2357
Blev medlem: 10 oktober 2007, 16:24
Ort: Västerås

Re: hjälp med primtalsprogram!

Inläggav e5frog » 22 augusti 2013, 18:00

Ja, det går nog lite snabbare att bara köra hälften av talen, jag stoppade ihop något snabbt och enkelt bara utan någon större tankemöda.

Blev ju lite sugen på att testa min "bitar på diskett metod", hade varit kul. Men från BASIC är det kanske inte så smidigt att peta med enskilda bitar. Man kunde laddat upp programmet till diskdriven och låtit det köra på för sig själv.

Det finns en del tricks för att göra sina basic-program lite snabbare, såg någon lista någonstans, Boray och Carlsson har väl gott minne gällande detta annars? Skippa alla mellanrum i koden du ska köra (för utskrift eller presentation kan man ha en mer ögonvänlig version) börja på 0, stega ett steg i taget. Använd långa rader... vad mer? Inga onödiga REM i koden, inga gosub, inte goto heller antar jag om det är möjligt att undvika. Variabler i alla beräkningar, går snabbare än att skriva siffror. Inte aktuellt här kanske men multiplikation är snabbare än ^ t.ex.

Har du någon uppfattning om hur lång tid det kommer att ta att köra igenom processen upp till en miljon?

Man kan också kompilera sin BASIC till maskinkod för att få upp hastigheten. Har aldrig lyckats testa detta själv.
Om man har lite olika förslag

CCS64 är trevlig, använde gärna den i helskärmsläge under DOS på Windows 98 men WinVICE har väl dominerat på senare tid, den är smidig.
Kolla in mitt Fairchild System bild-galleri:
fairchild fairchild fairchild Bild fairchild fairchild fairchild
Användarvisningsbild
e5frog
Moderator
Moderator
 
Inlägg: 2763
Blev medlem: 8 augusti 2007, 18:16
Ort: Älvängen

Re: hjälp med primtalsprogram!

Inläggav carlsson » 22 augusti 2013, 20:11

Mja, om långa radnummer är långsammare än korta är jag inte helt säker på. Det är väl i så fall vid GOTO och liknande som tolken behöver översätta fler siffror till radnummer. När det gäller GOTO och GOSUB går det bra så länge man lägger alla subrutiner i början av listningen, typ så här:

10 GOTO1000
15 REM SUBRUTIN 1
20 RETURN
25 REM SUBRUTIN 2
30 RETURN
....
1000 REM HUVUDPROGRAM
1010 GOSUB 15
1020 GOTO 1010

Det beror på att vid GOTO och GOSUB så kommer Basic att scanna alla radnummer från början av programmet tills den hittar önskad rad.

Undrar om inte ensam punkt . är snabbare än 0, dvs att IF A=. kommer att göra att punkten tolkas som värdet 0, men använder du variabler för återkommande konstanter är det säkert likvärdigt. Det finns fler sådana knep, nu minns jag inte alla.

I fallet med primtal tror jag det viktigaste är att hitta någon smart algoritm om sådan finns, istället för ett primitivt såll. Tyvärr är jag inte insatt i matematiken så jag har ingen algoritm tillgänglig.
Användarvisningsbild
carlsson
VIC-20 Guru
VIC-20 Guru
 
Inlägg: 2357
Blev medlem: 10 oktober 2007, 16:24
Ort: Västerås

Re: hjälp med primtalsprogram!

Inläggav e5frog » 23 augusti 2013, 06:55

Om man har korta radnummer blir väl programmet mer kompakt, det går fortare för tolken att bearbeta, eller är jag fel ute. I ett sådant här program är väl varje liten sparad mikrosekund intressant.
Kolla in mitt Fairchild System bild-galleri:
fairchild fairchild fairchild Bild fairchild fairchild fairchild
Användarvisningsbild
e5frog
Moderator
Moderator
 
Inlägg: 2763
Blev medlem: 8 augusti 2007, 18:16
Ort: Älvängen

Nästa

Återgå till Programmering/prog.-verktyg

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 2 gäster

Banners

BOA Japon Mediapalatset Nostalgibutiken
Quartex Retro Overlays Retroplay Spel och sånt
Super Motaro Söders Serie & Skivhandel vintagegames.se RG 2016
cron