Script och funktion
Uppgift:
Upprepa föregående uppgift (dvs gör en funktion där du matar in numret på en månad (1 = januari) och där funktionen returnerar antalet dagar i denna månad.), men använd switch/case-satser. Skriv ett testprogram som läser in månaden som en siffra och sen anropar funktionen och skriver ut hur många dagar månaden har. Skriv även ut månadens namn (utan if-satser).
lösning:
function days = daysOfMonth2(month)
%function days = daysOfMonth2(month)
%
% Returns the number of days the given month has
switch month
case 2
days = 28;
case {4, 6, 9, 11}
days = 30;
case {1, 3, 5, 7, 8, 10, 12}
days = 31;
otherwise
disp('ERROR, not a valid month!')
days = 0;
end
% Script testDaysOfMonth2
month = input('Ange en månad med hjälp av en siffra, 1 = jan, ... 12 = dec: ');
months = {'Januari', 'Februari', 'Mars', 'April', 'Maj', 'Juni', ...
'Juli', 'Augusti', 'September', 'Oktober', 'November', 'December'};
disp([months(month) ' har ', num2str(daysOfMonth2(month)), ' dagar.'])
Har svårt med att veta vad man ska ha i script delen. I denna uppgift användaren ger månaden med en siffra men matlab accepterar inte "month"
I andra raden de har skrivit månaderna i ett radvektor. Smart, kunde inte alls komma på att man kan göra sådär.
Då är month månaderna indexering och months är ett radvektor med månadernas namn. Hur vet man att man ska använda hakparentes här ? och varför matlab accepterar inte month = input('Ange en månad med hjälp av en siffra, 1 = jan, ... 12 = dec: ');
Varför det går inte köra koden? Den skriver ut bara första meningen i script testet.
Vad är din fråga?
Det ser ut som du har funktionen och koden som skall testa den i samma fil.
Funktionen skall vara i en separat fil, som skall heta samma sak som funktionen, med tillägget '.m'.
Matsmats skrev:Det ser ut som du har funktionen och koden som skall testa den i samma fil.
Funktionen skall vara i en separat fil, som skall heta samma sak som funktionen, med tillägget '.m'.
Vah ska inte testet och funktionen vara i samma fil?
Nej, det är inte så lämpligt. Du vill ju kunna använda din funktion från alla möjliga script, funktioner, etc.
Jag brukar göra en fil med funktionen, <funktionsnamn>.m och en fil som testar den, cmd_<funktionsnamn>.m
Hmmm nu förstår jag inte vad du menar. Varför använder man änns script-filer?? Varför kallas min fil för script-fil? jag tryckte på "new file" när jag skapade den.
Menar du att funktionen som man skriver kan man testa med kod från andra script oavsett vad den andra scripten heter?
Nu har jag skapat ett annat script och la in test koden där. Men jag kan fortfarande inte köra funktionen. Jag får bara upp den första raden i koden alltså , month = input('Ange en månad med hjälp av en siffra, 1 = jan, ... 12 = dec: ');
En scriptfil innehåller MATLAB-kommandon men börjar inte med 'function'.
Att köra den är samma sak som att skriva motsvarande kommandon i kommandofönstret.
Du måste också kalla funktionsfilen daysOfMonth2, MATLAB anropar funktionen med användande av filnamnet, inte namnet som står efter 'function'.
Kolla i editorn, du ser att det finns ett varningstecken uppe till höger och sedan orange:a markeringar på rader där MATLAB tycker något är konstigt. Klicka på varningstriangeln så får du information om saker MATLAB ogillar.
Nu funkar det!😮
Så koden som ska testa funktionen med skrivas i en sparat script-fil. Wow det var häftigt att man kan komma åt funktionen från andra script.
Hörni tack för all hjälp🙏!