2017-09-24 3 views
-1

passiert nichts. Ich arbeite an einem Matlab-Projekt. Ich habe die Anweisungen in den Kommentaren im Code aufgelistet.Beim Aufruf der Funktion

%This function will take the number that you put in and give you a 
%value 
%of how many numbers it had to do the mathematical operations on to 
%get to the number 1. 
%If the number inputted is even, start by dividing it by 2. If the 
%result is even, then repeat the process. If the result is odd, then 
%multiply the result by 3 and then add 1. Keep doing this until the 
%number is 1. 

function [s, m] = collatz(num) 
%INPUTS 
%num = the number that the user inputs 
%OUTPUTS 
%s = the number of steps it took to reach the number 1 
%m = the maximum value in that list 

veclist = []; %Creates an empty vector which will hold the list of  
       %numbers 

while num ~= 0 %While the number is not equal to zero 
    if num > 0 %If this number is greater than zero 
     if rem(num,2) == 0 %If the number is even 
      num = num/2; %divide the number by 2 
      veclist = [veclist, num]; %add the number to the vector 

     else %This says if the number is odd 
      num = (num*3) + 1; %Multiply that number by 3 and add 1 
      veclist = [veclist, num]; %Add that number to the list 

     end 
    end 
end 

s = length(veclist) %shows how many elements are in the vector 
m = max(veclist) %shows the max value in the vector 

end 

Kann mir jemand sagen, warum passiert nichts beim Aufruf der Funktion.

I „collatz (5)“ sagen und es gibt nichts

+0

Klingt wie Ihr aktiver Ordner ist falsch (siehe 'pwd'), oder der Dateiname ist falsch (sollte wahrscheinlich' collatz.m') sein. –

+0

@ Dev-iL Wie ändere ich meinen aktiven Ordner? Ich habe meinen Dateinamen als collatz.m eingestellt – user3011219

+0

Im Allgemeinen mit 'cd', zB:' cd c: \ Pfad \ zu \ collatz'. –

Antwort

2

Die Antwort auf Ihre ursprüngliche Frage ist, dass collatz.m nicht auf Ihrem MATLAB-Pfad war. Der einfachste Weg, dies zu lösen, ist, das aktuelle Verzeichnis (mit dem Befehl cd) zu ändern, wo auch immer sich Ihre Datei befindet. Z.B.

cd /Users/farazbukhari/Google Drive/School/MATLAB/Programming Projects/Programming Project 

Der Grund, warum Sie nichts bekommen, ist, weil Sie eine Endlosschleife haben. Sie sagten, dass Ihre Stoppbedingung ist, wenn die Zahl "gleich 1" ist, warum überprüft die while Schleife für 0? Wenn der aktuelle Code 1 erreicht, wird er nur als ungerade Zahl behandelt. Dann wird er zu 4, dann 2, dann 1 und dann 4,2,1 ... ad infinitum.

Die schnelle Lösung in diesem Fall besteht darin, die Schleifenbedingung in while num > 1 zu ändern.

Schließlich Sie wurden Anhängen keine neuen Werte Ihren veclist richtig, die durch Ändern es zu veclist = [veclist, num]; aufgelöst wurde (obwohl dies nicht ideal in Bezug auf Leistung ist). Stattdessen sollten Sie eine veclist einer vernünftigen Größe (z. B. veclist = zeros(10*num,1)) im Voraus zuweisen und einen Zähler beibehalten, den Sie erhöhen, der die letzte Position angibt, in die geschrieben wurde. Auf diese Weise vermeiden Sie die Erstellung von immer größeren Vektoren, wenn die Lösung fortschreitet. Am Ende trimmen Sie einfach alle Nullwerte vom Ende, z. veclist(veclist == 0) = [];.

+0

Okay, änderte ich die while-Schleife Zustand und ich bin immer noch nichts bekommen, wenn run „collatz (5)“ – user3011219

+0

es sieht aus wie 19 auf der Leitung stecken immer, wo ich sagte wenn num> 0 Ich verstehe nicht, warum es ist hier stecken geblieben – user3011219

+1

Mein schlechtes. Es sollte 'while num> 1 'sein. Außerdem ist die umschließende 'if ... end'-Anweisung unnötig. –

Verwandte Themen