rekursivt funktion
hej, när jag skrivar denna koden på matlab får jag att (Error in mindec2bin (line 12),bin = [mindec2bin(floor(dec/2)) bit];) . och jag undrar på vad är fel med koden, och värför infogar vi det logiska värdet bit=true;
uppgiften säger: skriv en rekursiv funktion som givet ett heltal på decimalform beräknar och returnerar den binära representationen av talet som ett logiskt fält. där true motsvarar
en etta och false en nolla.
function bin = mindec2bin(dec)
if dec == 0
bin=false;
elseif dec == 1
bin = true;
else
bit=true;
if mod(dec,2)==0
bit=false;
end
end
bin = [mindec2bin(floor(dec/2)), bit];
end
Du säger att du skriver koden, och sen att du undrar varför 'bit' finns där.
Hur mycket har du skrivit själv av den?
hej, igen, med att skriva mener jag att jag kör den på matlab
men alltså jag förstår att
if dec == 0 betyder om heltalen är noll så ska den logiska functionen returnera false,
elseif dec == 1, om vi har heltalen 1 returnerar funktionen true.
men sedan förstår jag inte värför inför de i facit bit- delen, men gällende
if mod(dec,2)==0 % dvs om divisionen går jämnt upp så returnerar funktionen false.
till slut bin= [mindec2bin(floor(dec/2)), bit] betyder att funktionen ska skriva ut [ värdet av mindec2bin(avrundet värde av(dec/2), logiskt värde av bit]
Näst sista och näst näst sista raderna verkar ha blivit omkastade.
hej igen nu har jag ändrat på dem, ser det rätt ut, men värför infogar dem vektorn bit.
function bin = mindec2bin(dec) % en funktion som omvandlar mellan decimal tal till binär tal.
if dec == 0 % om decimaltalet är noll returnera false.
bin=false;
elseif dec == 1
bin = true;
else
bit=true;
if mod(dec,2)==0
bit=false;
end
bin = [mindec2bin(floor(dec/2)), bit];
end
end
eller kan vi till exempel använda ett annat kod.
bit är lägsta biten i talet, 0 eller 1. Vi tar reda på den, anropar mindec2bin på resten av talet och lägger sen vår bit sist.
Varför inte provköra?
hej, jag har provköret mindec2bin(10) och fick 1 0 1 0, så detta ser rätt ut.
så med bit, menar dom att om sista biten är noll så ska funktionen returnera false då 0/2 ger rest noll efter division, och
om sista biten är 1 så returnerar funktionen true, eftersom 1/2 ger resten 1 efter division.
Om talet är större än 1 så returnerar funktionen inte true eller false utan en lista som den sätter ihop med bit (lägsta biten) sist.
hej, igen, menar du att denna raden 'bin = [mindec2bin(floor(dec/2)), bit];' betyder att om talet är större än ett så ska funktionen returnera en lista som den sätter ihop med lägsta biten sist.
Nej, raderna i början av funktionen tar hand om fallen 0 och 1.
men vilken rad tar hand om fallen som är större än ett, är det de radene som börjar på bit=true
Talet heter 'dec' och man testar först om det är 0 och sedan om det är 1.
hej, igen, detta betyder att dessa raderna tar reda på lägsta biten i talet.
else
bit=true;
if mod(dec,2)==0
bit=false;
end
och med denna raden
bin = [mindec2bin(floor(dec/2)), bit];
anropar vi mindec2bin på resten av talet och lägger sen vår bit sist.
dvs när vi anropar mindec2bin på resten av talet körs funktionen på nytt.
Ja, den anropar sig själv för att göra resten av jobbet.
tack så mycket nu forstår jag bättre