10 svar
96 visningar
I am Me är nöjd med hjälpen
I am Me 679
Postad: 29 okt 2022 16:00 Redigerad: 29 okt 2022 16:27

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. 

 

 

Fermatrix 7841 – Fd. Medlem
Postad: 29 okt 2022 16:10

Vad är din fråga?

Matsmats 567 – Livehjälpare
Postad: 29 okt 2022 16:34

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'.

I am Me 679
Postad: 29 okt 2022 16:50
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? 

Matsmats 567 – Livehjälpare
Postad: 29 okt 2022 16:57

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

I am Me 679
Postad: 29 okt 2022 17:22

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. 

I am Me 679
Postad: 29 okt 2022 17:33

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: ');

Matsmats 567 – Livehjälpare
Postad: 29 okt 2022 17:38

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.

I am Me 679
Postad: 29 okt 2022 17:54

Nu funkar det!😮

I am Me 679
Postad: 29 okt 2022 17:58

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. 

I am Me 679
Postad: 29 okt 2022 18:02 Redigerad: 29 okt 2022 18:03

Hörni tack för all hjälp🙏!

 

Svara Avbryt
Close