%% 9  For-satser i Matlab
%% 9.1 Mindre tjôt med For
% Takeaways
% När nästan samma kod ska utföras fler gånger kan man göra koden kortare, lättare att läsa, förstå och kontrollera i efterhand.
% Man kapslar in det som är repetitivt i en For-sats, som ska följa en viss mall, se nedan.
% Kommandot  sum( u )  summerar alla koordinater i vektorn  u .
% Kommandot  clf  suddar det aktuella figurfönstret. Användbart när man vill göra  hold on  före första plotten.
% Man kan animera en plot genom att använda en For-sats.
% Kommandot  pause( tid )  pausar exekveringen av kod  tid  sekunder.
% Med kommandot  waitforbuttonpress  kan man förhindra att  en plott ritas innan man klickar på ritytan.
% När man skriver kod inträffar det ofta att man vill göra nästan samma sak flera gånger. Ett exempel är när vi illusterade en studsande boll med olika utfallsvinklar. Det blir ganska tjatigt att kopiera och klistra in samma kod och sen göra små förändringar i den. Dessutom blir koden svår att läsa, förstå och kontrollera i efterhand.
% Repetitiva uppgifter kan med fördel hanteras genom inkapsling av  kod in så kallade For-satser. Vanligtvis körs koden man skrivit i den ordning den står, uppifrån och ner. Med en For-sats kan man tillfälligt avbryta den ordningen och hoppa tillbaka till ett tidigare ställe i koden och köra den igen. Det verkar ju meningslöst, men finnesen med en For-sats är att man kan byta värde på en variabel (som kallas index) varje gång man kör igenom den kod som är inklapslad i den.
% Allmänna strukturen för en For-sats är
%     for index = vektor
%               rader med kommandon som ska utföras
%     end
% Nyckelorden  for och  end  kapslar in kod som ska utföras flera gånger. Index kan man sätta till vilken tillåten bokstav (eller vilket namn) som helst. Vektor ska vara en rad- eller kolonnvektor med koordinater som index i tur och ordning antar som värde. Så länge index inte hunnit i genom alla koordinater i vektor kommer Matlab att återvända till  for  när koden kommit fram till  end och ge index nästa koordinat i vektor som värde. När index antar sista koordinaten i vektor som värde fortsätter Matlab utföra  kod som följer på  end, när exekveringen kommer dit.
% Eftersom For-satser hoppar tillbaka och sen går framåt i koden kallas de ofta för "snurror" eller "loopar".
% Exempel  Låt Matlab i tur och ordning skriva ut  i = 0, i = 2, i = 4,  ... , i = 10.



% Uppgift 9.1
% Beräkna summan av kuben av alla udda tal mellan 5 och 27 med en For-sats.
% Lösning



% Med
% sum( u )
% får man summan av alla koordinaterna i  u .
%
% Uppgift 8.2
% Låt Matlab rita upp bollbanor för en boll som studsas i backen med vinkel \alpha i föhållande till lodlinjen, där \alpha = 10^{\circ},\, 20^{\circ},\ldots,80^{\circ}
% Lösning
% Sen tidigare har vi m-fillen bollbana.m , som med kommandot
% [ x_v , y_v , T ]  = bollban( vinkel_i_grader)
% där  x_v  och  y_b  är listor (vektorer) på x- respektive y-koordinater där bollen befinner sig vid olika tidpunkter. T är tiden det tar för bollen att åter ta mark. Den behöver vi inte nu, så vi hoppar över den.



% Med
% clf
% rensar man figurfönstret om det finns nåt i det innan. Användbart i kod och vill ha  hold on före första plotten (annars kommer man rita ovan på det som redan finns där).
%
%% 9.2  Animering av plot med For-sats
% Varje graf som Matlab ritar består ju av flera (ibland mycket korta) linjesegment. Genom att rita dessa i tur och ordning, med ett kort uppehåll emellan,  kan man ge intryck av att grafer ritas successivt (i stället för att bara se slutprodukten).
% Uppgift 9.3
% Låt Matlab rita grafen till f(x) = \sin(2x) / x\,,  där x avtar från 3\pi mot 0.
% Lösning



% Med kommandot
% pause( tid )
% kan man få Matlab att pausa utförande av kod en bestämd tid mätt i sekunder.
% Med kommandot
% waitforbuttonpress
% får man Matlab att vänta på ett klick i en figur innan resten av kommandona  utförs.
%
%% 9.3  Nästlade For-satser
% Takeaway
% Man kan ha nästlade användning av att sätta en For-sats innuti en annnan, men det bör utnyttjas sparsamt, eftersom det tenderar att göra koden svårläst och svårkontrollerad.
% Genom att sätta namn på en plott kan man i ett figurfönster komma åt egenskaper hos plotten, t.ex. att ta bort den med
%              boll = plot( ... )
%        set( boll , 'Visible' , 'off' )
% Ibland räcker det inte bara med en For-sats för att åstadkomma det man vill. Tänk dig att du vill kolla bollbanan ovan med olika vinklar och samtidigt animera så att du ser bollen röra sig. Strukturern skulle då bli så här
%     for vinkel = vinklar_grader % Olika vinklar
%         ...
%         for i = i_vals % Animering
%             ...
%         end
%     end
% Vi har en For-sats inkapslad i en annan. Man talar då om nästlade loopar.
% Egentligen ska man försöka undvika sådant, eftersom det tenderar att göra koden svår att begripa efteråt.
%
% Uppgift 9.4
% Animera den studsande bollen i uppgift 7.3 (i filen text_lab3b).



% Om man sätter namn på en plott ( sätter  en variabel till plotkommandot) kan man sedan komma åt den plotten i fiugrfönstret med variabelns namn och t.ex. släcka ner den plotten i figuren:
%       boll = plot( ... )
%    set( boll , 'Visible' , 'off' )