primtalstvillingar
hej, jag undrar på vad är felet i min kod, eller om jag anroper funktionen på ett icke riktigt metod.
vi ska hitta primtalstvillingar till och med talet 661.
function r = primtal(p)
n=p;
for n = 3:2:659
if primtal(p) & primtal(p+2)
disp([p p+2])
end
end
eller behöver vi sätte det här koden i denna koden: som jag gör här
function r = primtal(n)
r = true; % sätter första platsen i 'i' lik true.
for i = 2:floor(sqrt(n)) % i for-satsen testas ett primtal genom att dela talet med 2,3, osv.
if mod(n, i) == 0 % om division går jämnt upp för något värde på i, så är talet inte primtal
r = false; % och talet får värdet falsk.
return; % sedan avbryts functionen.
% OM talet är ett primtal utförs aldrig return-satsen utan
% funktionen avslutas när for-loopen kört klart.
% primtal betyder deles med sig självt och noll.
end
for p = 3:2:659
n=p;
if primtal(p) & primtal(p+2)
disp([p p+2])
end
end
end
Två tips för att får svar:
1. Använd "Infoga programmeringskod" så att koden blir rätt indenterad och lätt att läsa.
2. Skriv vad som blir fel.
Hej igen, här är koden men när jag anropar funktionen prim(3) till exempel, får jag bara logiskt värde, men jag vill att den ska returnera alla primtal till och med talet 3
Du har en funktion som undersöker om n är ett primtal.
över for 3:2:659
så kan du t.ex skriva
primtal = 2
och sedan efter disp([p p+2]) kan du lägga till
primtal = [primtal p]
så får du en lista med alla hittade primtal
(Det finns andra sätt att lösa det på.)
EDIT: aha, det funkar inte, då du letar efter primtalstvillingar. Principen funkar dock, men koden får skrivas om.
Använd "Infoga programmeringskod" istället, symbolen i editorn är {;}.
Och indentera koden, det går knappt att läsa...
Hej, igen , jag har nu försökt å skriva om koden men det är fortfarande samma, jag får inte returnerat primtalstvillingar.
Skrivs ingenting ut?
Om du skriver in själva programkoden här, och inte bara en bild, så kan vi provköra.
function r = prim(n)
t=n;
r = true; % sätter första platsen i 'i' lik true.
for i = 2:floor(sqrt(t)) % i for-satsen testas ett primtal genom att dela talet med 2,3, osv.
if mod(t, i) == 0 % om division går jämnt upp för något värde på i, så är talet inte primtal
r = false; % och talet får värdet falsk.
for n = 3:2:659
if prim(n) & prim(n+2)
r = disp([n n+2]);
return; % sedan avbryts functionen.
end
end
%r = [prim n];
% OM talet är ett primtal utförs aldrig return-satsen utan
% funktionen avslutas när for-loopen kört klart.
% primtal betyder deles med sig självt och noll.
end
end
Jag tror några av dina "end" är på helt fel ställe. Kan du indentera koden så att programflödet framgår?
hej, jag undrar på vad betyder indentera koden
hej, igen, nu förstår jag
function r = prim(n)
t=n;
r = true; % sätter första platsen i 'i' lik true.
for i = 2:floor(sqrt(t)) % i for-satsen testas ett primtal genom att dela talet med 2,3, osv.
if mod(t, i) == 0 % om division går jämnt upp för något värde på i, så är talet inte primtal
r = false; % och talet får värdet falsk.
for n = 3:2:659
if prim(n) & prim(n+2)
r = disp([n n+2]);
return; % sedan avbryts functionen.
end
end
end
end
end
detta är kod för en den externa funktionen prim. men vi måste definiera den i matlab.
När man definerar en extern funktion placerar man den i en separat m-fil. Filnamnet behöver vara samma som funktionsnamnet.
Funktionen behöver också ofta ligga i samma map som huvudprogrammet för att Matlab ska hitta den.
och jag har sparat den genom att klicka på save as och anget samma namn som på funktionen.
men när jag nu har skrivit koden för att returnera alla primtalstvillingar till och med talet 661.
koden är
n=p;
for p = 3:2:659
if prim(p) & prim(p+2)
r = disp([p p+2]);
end
end
får jag udefinierad variabel p.
Bra att du försökte indentera. Det ser dock fortfarande inte bra ut. Men om du använder "Infoga programmeringskod" (ikonen näst längst ut till höger, som jag försökt säga några gånger nu) så kommer det troligen snart vara läsbart.
function r = prim(n)
t=n;
r = true; % sätter första platsen i 'r' lik true.
for i = 2:floor(sqrt(t)) % i for-satsen testas ett primtal genom att dela talet med 2,3, osv.
if mod(t, i) == 0 % om division går jämnt upp för något värde på i, så är talet inte primtal
r = false; % och talet får värdet falsk.
for n = 3:2:659
if prim(n) & prim(n+2)
r = disp([n n+2]);
return; % sedan avbryts functionen.
end
end
end
end
end
Bra :)
function r = prim(n)
t=n;
r = true; % sätter första platsen i 'r' lik true.
for i = 2:floor(sqrt(t)) % i for-satsen testas ett primtal genom att dela talet med 2,3, osv.
if mod(t, i) == 0 % om division går jämnt upp för något värde på i, så är talet inte primtal
r = false; % och talet får värdet falsk.
for n = 3:2:659
if prim(n) & prim(n+2)
r = disp([n n+2]);
return; % sedan avbryts functionen.
end
end
end
end
end
Är det så här du menar?
Om du skriver en "if" så ska motsvarande end vara på samma nivå. Samma för "for" m.fl.
function r = prim(n)
t=n;
r = true; % sätter första platsen i 'r' lik true.
for i = 2:floor(sqrt(t)) % i for-satsen testas ett primtal genom att dela talet med 2,3, osv.
if mod(t, i) == 0 % om division går jämnt upp för något värde på i, så är talet inte primtal
r = false; % och talet får värdet falsk.
return;
end
end
end
for n = 3:2:659
if prim(n) & prim(n+2)
%skriv ut (n, n+2)
end
end
Något sådant istället kanske?