hjälp med primtalsprogram!

Diskussioner om programmering

Moderatorer: Fanta_gbg, e5frog, stonan, Zlasher, hollowman

Re: hjälp med primtalsprogram!

Inläggav carlsson » 23 augusti 2013, 10:01

Själva radnumren har jag för mig är sparade i tokeniserad form? I alla fall innehåller varje rad en 16-bitars pekare till minnesadrssen för nästa radnummer. För sekventiell körning spelar då avståndet mellan varje radnummer ingen roll, utan bara vid olika former av hopp.
Användarvisningsbild
carlsson
VIC-20 Guru
VIC-20 Guru
 
Inlägg: 2325
Blev medlem: 10 oktober 2007, 16:24
Ort: Västerås

Re: hjälp med primtalsprogram!

Inläggav e5frog » 23 augusti 2013, 20:41

Aha, ja, jag hade kanske inte valt att göra det i BASIC även om det går snabbare i emulator. Kanske hade jag provat att kompilera BASIC:en - om jag kunde lista ut hur man gör och fick tag i rätt program.

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

Re: hjälp med primtalsprogram!

Inläggav huruvida » 23 januari 2014, 12:14

hejsan igen!

Har haft lite paus med projektet, och har lite funderingar kring sparning av resultatet (som är viktigast).
Har bestämt mig för att ha resultatet på en diskett i en SEQ fil. jag kan skapa och öppna en sådan, men konstigt nog
funkar det inte att printa.

skapar filen med :
SAVE "ASD,S,W"
sedan provar jag programmet:
10 OPEN 1,8,4, "ASD,S,W"
20 PRINT#1, "HEJ"
30 CLOSE 1

men sen när jag loadar och listar ASD, så syns det inget. Har googlat och sökt men hittar inget...
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 e5frog » 23 januari 2014, 12:37

Jag tror du kan skippa SAVE"ASD,S,W"...

I din programlistning använder du rätt metod för att spara HEJ i textformat i filen med namnet ASD.
Du kan inte ladda denna med "LOAD" du måste köra OPEN filnummer,8,15,"ASD,S,R" (som betyder sequential, read).
Sedan hämtar du data ur filen så här:
GET#filnummer,A$ eller flera data samtidigt GET#filnummer,A$,B$,C$.

Så du kan hämta ditt HEJ och skriva ut det så här:
50 OPEN 6,8,15,"ASD,S,R":GET#6,A$:PRINTA$
60 CLOSE 6

Ska man köra mycket filhantering kan man lägga det i en subrutin.
Jag har för mig att om man inte stänger filen kan man hämta nästa data med GET#6,A$ också - om man sparat flera strängar.


Se pdf-dokumentets sida 26:
http://www.bombjack.org/commodore/commo ... _Guide.pdf
Kolla in mitt Fairchild System bild-galleri:
fairchild fairchild fairchild Bild fairchild fairchild fairchild
Användarvisningsbild
e5frog
Moderator
Moderator
 
Inlägg: 2761
Blev medlem: 8 augusti 2007, 18:16
Ort: Älvängen

Re: hjälp med primtalsprogram!

Inläggav huruvida » 23 januari 2014, 13:34

tack för svar!

Vad jag än gör så ger den mig svaret 3 när jag skriver in det du skrivit, också med en alldeles tom SEQ fil. :(

varför hoppa över save? hur ska man göra filen?

Provade med INPUT# som resulterade i 31 istället.
Användarvisningsbild
huruvida
Nybörjare
Nybörjare
 
Inlägg: 23
Blev medlem: 27 juni 2012, 15:52
Ort: Uppsala

hjälp med primtalsprogram!

Inläggav bjonte » 23 januari 2014, 15:12

huruvida skrev:SAVE "ASD,S,W"


Vad detta gör vet jag knappt. Det torde väl spara ditt basicprogram. Det här behövs inte för att skapa en fil.

huruvida skrev:sedan provar jag programmet:
10 OPEN 1,8,4, "ASD,S,W"
20 PRINT#1, "HEJ"
30 CLOSE 1


Detta räcker för att skapa och fylla filen.

Det som hände innan var troligen att du sparar ett tomt basicprogram, försöker öppna en ny fil med samma namn och det misslyckas eftersom filen redan finns, sedan öppnar du basicprogrammet och läser det.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1858
Blev medlem: 17 april 2006, 23:12

Re: hjälp med primtalsprogram!

Inläggav huruvida » 23 januari 2014, 16:33

ok!

hur kan man då ändra på filen?
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 e5frog » 23 januari 2014, 19:19

Man kan nog röra sig i en SEQ-fil och ändra poster (har inte koll på det exakt) men annars kan man skriva över filen (ersätta) med:
SAVE"@0:filename",8 eller
OPEN 1,8,15,"@0:filename,S,W": CLOSE 1.
Den första 1541:an har en bugg som kan visa sig här men jag har hört att det är väldigt liten risk att man råkar ut för det.

Kör en scratch på filen som finns nu och kör om från början.
OPEN 1,8,15,"S0:filename": CLOSE 1

Den där 0:an som är med efter första tecknet är ett arv från PET-tiden, har för mig att man valde sida eller drive, på din C64 är det 0 som gäller, man kan t.ex. skriva LOAD"0:program",8 om man vill men det finns inga alternativ på C64 med en "vanlig" drive i alla fall så det går fint att skippa det i det läget.

Ja, SAVE används för att spara basic-programmet inte för att hantera en SEQ-fil.
Har du sparat basic-listningen och sedan pillar i den som om det var en SEQ-fil så kanske det blir konstigt.


Här är lite kort information också:
http://www.c64-wiki.com/index.php/VIC-1541


När jag sparade high-score-lista i Taipan gjorde jag så här:

Kod: Markera allt
3000 REM ------------------------------
3001 REM ADDITIONAL STUFF
3002 REM ------------------------------
10000 PRINT"  lET'S CHECK THE OLD lOGBOOK...";
10001 GOSUB120
10005 DIMHN$(20),HP(20):FORQJ=1TO20:HP(QJ)=0:NEXTQJ:QJ=1
10010 QR$=CHR$(13)
10015 OPEN1,8,15:OPEN2,8,2,"LOGBOOK,S,R"
10020 IFST=0THENINPUT#2,HN$(QJ),HP(QJ):QJ=QJ+1:GOTO10020
10025 CLOSE2:QP=INT(TM/AT/100):IFAT<0THEN10046
10030 FORQI=1TO20
10040 IFHP(QI)<QPTHENQT=HP(QI):QT$=HN$(QI):HP(QI)=QP:HN$(QI)=A$:A$=QT$:QP=QT
10045 NEXTQI
10046 PRINT"{clear}{space*13}tAIPAN lOGBOOK":PRINTS$;
10047 PRINT" hONG{space*20}rATING":PRINT"{home}{down*2}":FORQI=1TO20
10051 IFHP(QI)<>0THENPRINT" ........................";MID$(STR$(HP(QI)),2)
10052 IFLEN(HN$(QI))>0ANDHP(QI)<>0THENPRINT" {up}";HN$(QI)
10054 IFQI=1THENPRINT
10055 NEXTQI:IFAT=-1THEN10090
10057 IFAT=-2THEN20000
10058 PRINT#1,"S:LOGBOOK":OPEN2,8,2,"LOGBOOK,S,W"
10060 FORQI=1TO20:PRINT#2,HN$(QI);QR$;HP(QI):NEXTQI
10065 POKE198,0:INPUT" pLAY AGAIN";Q$
10080 CLOSE2:IFQ$="Y"THENCLR:CLOSE1:GOTO10
10085 CLOSE1:GOTO20000
10090 CLOSE1:GOSUB110
10095 RETURN
10100 REM ------------------------------
10101 REM END OF LOGBOOK
10102 REM ------------------------------


10015 öppnar fil 2, läser in denna, stänger sedan
10058 har för mig att jag scratchar filen och sparar en ny med samma namn istället för att ersätta den...


Jaaa... efter att ha kikat på anvisningarna jag fick av Carlsson så ser jag vad problemet är nu.
viewtopic.php?f=10&t=5549

Kör du OPEN x,8,15 så är det bara en kommandokanal du har öppnat med 15, du öppnar inga filer så utan bara suddar hela filer, byter namn etc etc . OPEN x,8,1 ska funka bättre eller x,8,2 eller x,8,3 osv osv...
I koden ovan har jag kommandokanal på fil 1: 1,drive,15 därför finns det bara en open där. Nästa open 2,8,2 är själva filen som fil 2, skriver till den med PRINT#2 på rad 10060 och läser med INPUT#2 på 10020 - fast jag stänger och öppnar igen då man (väl) inte kan ha öppet för både läsning och skrivning samtidigt?

Detta är enda gången jag programmerat sådant här så det är inte djupt förankrat, det var mest kassettband för mig på den gamla goda tiden.


Programmer's Reference Guide har säkert information om sådant här också:
http://www.commodore.ca/manuals/c64_pro ... erence.htm
Kolla in mitt Fairchild System bild-galleri:
fairchild fairchild fairchild Bild fairchild fairchild fairchild
Användarvisningsbild
e5frog
Moderator
Moderator
 
Inlägg: 2761
Blev medlem: 8 augusti 2007, 18:16
Ort: Älvängen

Re: hjälp med primtalsprogram!

Inläggav bjonte » 23 januari 2014, 20:21

SEQ-filer går inte att ändra i. Man skriver över helt. REL-filer är tänkta att vara gjorda för mer slumpmässig access, men ge dig inte in i det för man kan bara peta på 256 bytes i taget.
Användarvisningsbild
bjonte
Stormästare
Stormästare
 
Inlägg: 1858
Blev medlem: 17 april 2006, 23:12

Re: hjälp med primtalsprogram!

Inläggav carlsson » 1 februari 2014, 17:11

Jag hade för mig att det fanns ett ,A(ppend) som alternativ till ,R(ead) och ,W(rite) men efter att ha kollat genom manualen verkar så inte vara fallet. Förmodligen blandar jag ihop 1541 med något helt annat system.
Användarvisningsbild
carlsson
VIC-20 Guru
VIC-20 Guru
 
Inlägg: 2325
Blev medlem: 10 oktober 2007, 16:24
Ort: Västerås

Re: hjälp med primtalsprogram!

Inläggav huruvida » 22 december 2014, 12:31

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 Redreamer » 22 december 2014, 14:45

Kul! Läste lite hastigt igenom första hälften. Du funderade aldrig på att göra en teoretisk analys på vilket som skulle bli det största primtalet 64'an kunde räkna ut? Fast det tror jag iof är väldigt komplext eftersom man säkerligen behöver veta hur basic jobbar. Men du hade ju lite koll på att den rundar av över en viss gräns.
Kul iaf =)
It always return one day!
Användarvisningsbild
Redreamer
Stormästare
Stormästare
 
Inlägg: 1362
Blev medlem: 1 maj 2005, 10:07
Ort: Borås

Re: hjälp med primtalsprogram!

Inläggav huruvida » 12 januari 2015, 13:26

Jag gjorde på så sätt att se vilket som är närmast 1 miljard, därmed kom metoden jag använde i slutet, tack för läsning ;)
Användarvisningsbild
huruvida
Nybörjare
Nybörjare
 
Inlägg: 23
Blev medlem: 27 juni 2012, 15:52
Ort: Uppsala

Föregående

Återgå till Programmering/prog.-verktyg

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 1 gäst

Banners

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