%% 11  If - satser (villkorssatser)
% Takeaways
% Med en If-sats kan man få Matlab att utföra olika kod i olika fall.
% En If-sats  ska följa ett särskilt mönster. Se nedan.
% Vilken kod som ska utföras styrs av villkor.
% Man kan vektorisera en funktion med en For-sats.
% Med nyckelordet  break  kan man avbryta körning av en For-sats och en While-sats.
% Ibland vill man utföra olika kod beroende på t.ex. vilket värde en (eller flera) variabel (variabler) har vid tllfället.
% Du kanske t.ex. vill l definiera en funktionen \mathrm{belopp}(x) i Matlab, som för negativa värde på x ger resultatet -x och för icke-negativa x ger x\,. Nu har ju Matlab den inbyggda funktionen  abs  för detta, som dessutom är vektoreriserad (kan användas koordinatvis på en vektor).
% I Matlab kan situationer som denna hanteras med en If-sats (aka villkorssats).
% Den allmänna strukturer för en sådan är
%     if villkor
%         kommandon som ska uföras om villkoret är uppfylt
%     else   % Behöver inte vara med. Optional.
%         kommandon som annars ska utföras
%     end
% När Matlab kommer till raden med  if  kontrolleras om villkoret är uppfyllt. Är den det, körs den omedlbart följande konden. Annars hoppar Matlab till raden med  else och utför de kommandon som står efter det (om  else  finns). När Matlab kommer till  end utförs koden efter det nyckelordet.
% Har man flera vilkor kan man utöka If-satsen med ett eller flera  elseif . T.ex.
%     if villkor 1
%              kommandon som ska uföras om villkor 1 är uppfylt
%     elseif villkor 2     % Optional.
%              kommandon som ska uföras om villkor 2 är uppfylt
%     elseif villkor 3    % Optional
%              kommandon som ska uföras om villkor 3 är uppfylt
%     else   % Optional.
%              kommandon som annars ska utföras
%     end
% Här "rasslar" Matlab igenom koden tills den hittar ett villkor som är uppfylt. Inträffar det utförs den koden som står efrer aktuellt  elseif för att sedan fortsätta efter  end , Hittas inget uppfyllt villkor är det koden efter (eventuellt) else  som utförs.
%
% Uppgift 11.1
% a) Skriv en egen funktion  belopp som till  x  ordnar abslutbeloppet av x . Testa den på  -3  och  5 .
% b) Plotta grafen.
% Lösning
% Vi gör en m-fil med namnet belopp.m  där vi sparar koden
% function res = belopp( x )
%     if x < 0
%         res = -x ;
%     else
%         res = x ;
%     end



% När vi ska plotta uppstår ett problem, eftersom funktionen inte är vektoriserad: för en vektor av x-värden  x_v  blir villkoret  x_v < 0  inte meningsfullt. Det finns två alternativ att hantera detta. Ett är att vektoriser funktionen, det andra är att lösa det i samband med plottningen. Vi väljer det senare.



% Vi skulle också kunna löst detta i en ny m.fil belopp_vektoreriserad. m med hjälp av belopp.m
% function res = belopp_vektoriserad( x )
%                 % x kan nu vara vektor
%     res = [ ] ;
%         % Tom lista som ska fyllas på
%     for  xi = x % En koordinat i taget
%          res = [ res  belopp( xi ) ] ;
%         end
%     end
%
% Uppgift 11.2
% a)  Kal och Ada har öppnat en Internet-butik och vill med en prispolicy locka kunder att handla mycket. När man köper för belopp
%  < 400 SEK görs påslag för hantering med  9% och för leverans med 125 SEK,
% som är minst 400 SEK är levereansen gratis, men påslaget för hantering är kvar om beloppet är < 1000 SEK
% för belopp som är minst 1000 SEK är leverens och hantering gratis. Dessutom ges en rabatt på 12% på det som överstiger 1000 SEK.
% De har hört att du ska bli civilingenjör och vill ha din hjälp att ta fram en funktion som räknar ut kundens totalkostnad för inköpet.
% b)  De vill ha en graf över totalkonsnaden som funktion av det belopp man handlar för i butiken.
% Lösning
% Du skriver en m-fil  total_kostnad.m  där du sparar följade
% function res = total_kostnad( belopp )
%     b = belopp ;
%     grans1 = 400 ;
%     grans2 = 1000 ;
%     hantering = 0.09 ;
%     leverens = 125 ;
%     rabatt = 0.12 ;
%     if b < grans1
%         res = b * ( 1 + hantering ) + leverens ;
%     elseif b < grans2
%         res = b * ( 1 + hantering ) ;
%     else
%         res = grans2 + ( b - grans2 ) * ( 1 - rabatt) ;
%     end
% Vi testar och ser om det funkar



% Så ville ju Ada och Kal ha en graf också, men attans också! Funktionen klara inte av att hatera vektorer koordinatvis. Du gör en abrovinsch för att hantera detta:



% Et voilá! Du levererade!
%
% Uppgfit 11.3
% Skriv kod som låter användaren gissa ett dolt tal mellan 10 och 40. Vid fel svar ska man få nytt försök och få red på om den felaktiga gissningen var mindre eller större än det dolda talet.
% Vid rätt svar ska man få veta hur många försök som krävdes för rätt svar.



% (Texten kommer i Matlabs kommandofönster!)
% Eftersom vi kör en evig loop behöver vi avbryta utföradet av den på nåt sätt. Det ska förstås ske när man gissar rätt svar.
% Nyckelordet
% break
% stoppar den loop (While- eller For-sats) det är (närmast) inkapslat i och hoppar till loppens  end .