You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 9 Next »

Kodeforståelsesoppgaver (total videotid: 57:11)

OppgaveVideotidBeskrivelse
Oppgave 2.1.1: Matriser og vektorer8:15Opprettelse av matriser og vektorer i Matlab, og tolkning av dimensjoner.
Oppgave 2.1.2: Posisjonsindeksering10:57Hvordan bruk av tall som indeksuttrykk kan tolkes og brukes i Matlab.
Oppgave 2.1.3: Logisk indeksering14:44Hvordan bruk av logiske indeksuttrykk kan tolkes og brukes i Matlab
Oppgave 2.1.4: Forskjell på true\false og 0\17:;53Hvordan true/false er likt og forskjellig fra 0/1 i Matlab.
Oppgave 2.1.5: Posisjonsindeksering4:20Eksempeloppgave om posisjonsindeksering.
Oppgave 2.1.6: Matriseoperasjoner11:02Hvordan matriseoperasjoner og elementvise operasjoner er forskjellige fra hverandre.

Kodeoppgaver (total videotid: 1:13:43)

OppgaveVideotidBeskrivelse
Oppgave 2.2.1: Matrise som datastruktur5:45Hvordan matriser kan passe til å lagre data vi bruker i et program.
Oppgave 2.2.2: Posisjonsindeksering10:56Bruk av posisjonsindeksering til å besvare spørsmål om innholdet i rader i en matrise.
Oppgave 2.2.3: Logisk indeksering12:31Bruk av logisk indeksering til å løse oppgave hvor man trenger element fra en matrise basert på en logisk betingelse.
Oppgave 2.2.4: Mer indeksering7:25Sammensatt indekseringsoppgave.
Oppgave 2.2.5: Innebygde funksjoner og matriser12:42Hvordan innebygde funksjoner kan brukes til å regne med matriser i Matlab.
Oppgave 2.2.6: Extra-spill24:24Større og vanskelig problemløsningsoppgave.

Alle oppgavene på en side

Oppgavevideoer uke 37 - alle oppgaver

Kodeforståelsesoppgaver (total videotid: 57:11)

Oppgave 2.1.1: Matriser og vektorer

Hva skrives ut hvis vi kjører det følgende scriptet?

oppgave_1.m
[1, 2, 3]
[1; 2; 3]
[1, 2, 3; 4, 5, 6]
[1, 2, 3; 4, 5, 6]'
size(1:3)
size((1:3)')

Videoforklaring (8:15)

Svar

ans =
     1     2     3
ans =
     1
     2
     3
ans =
     1     2     3
     4     5     6
ans =
     1     4
     2     5
     3     6
ans =
     1     3
ans =
     3     1

Oppgave 2.1.2: Posisjonsindeksering

Hvilken verdi har M etter at vi kjører dette scriptet?

oppgave_2.m
M = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12];
M(1,2) = 5;
M(end,end) = 90;
M([1,2], 1) = M([2, 3], 1);
M(:,[3, 2]) = M(:, [2, 3]);
M(1:end,:) = M - 1;

Videoforklaring (10:57)

Svar

M =
     4     2     4     3
     8     6     5     7
     8    10     9    89

Oppgave 2.1.3: Logisk indeksering

Hva skrives ut hvis vi kjører det følgende scriptet?

oppgave_3.m
x = 1:5
x([true,false, true, false, true])
x(true)
x > 3
x(ans)
mod(x,2)
mod(x,2) == 0
x < 2 | x >= 4 & mod(x, 2) == 0
x(x < 2 | x >= 4 & mod(x, 2) == 0)

Videoforklaring (14:44)

Svar

x =
     1     2     3     4     5
ans =
     1     3     5
ans =
     1
ans =
     0     0     0     1     1
ans =
     4     5
ans =
     1     0     1     0     1
ans =
     0     1     0     1     0
ans =
     1     0     0     1     0
ans =
     1     4

Oppgave 2.1.4: Forskjell på true/false og 0/1

Hva skrives ut hvis vi kjører det følgende scriptet?

oppgave_4.m
1 + 1
true + true
0 + 0
false + false

x = 1:5
x([true, true, true, true, true])
x([1, 1, 1, 1, 1])
x([false, false, false, false, false])
x([0, 0, 0, 0, 0])

Videoforklaring (7:53)

Svar

ans =
     2
ans =
     2
ans =
     0
ans =
     0
x =
     1     2     3     4     5
ans =
     1     2     3     4     5
ans =
     1     1     1     1     1
ans =
   Empty matrix: 1-by-0
Subscript indices must either be real positive integers or logicals.
Error in oppgave_4 (line 10)
x([0, 0, 0, 0, 0]) 

Oppgave 2.1.5: Posisjonsindeksering

Hva skrives ut hvis vi kjører det følgende scriptet?

oppgave_5.m
alfabet = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', ...
           'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
disp(alfabet([13, 1, 20, 12, 1, 2, 5, 18, 11, 10, 5, 13, 16, 5, 11, 21, 12, 20]));

Videoforklaring (4:20)

Svar

matlaberkjempekult

Oppgave 2.1.6: Matriseoperasjoner

Hva skrives ut hvis vi kjører det følgende scriptet?

oppgave_6.m
A = [ 1, 2; 3, 4 ];
A .* A
A * A
A ./ A
A / A
A .^ 2
A ^ 2

Videoforklaring (11:02)

Svar

ans =
     1     4
     9    16
ans =
     7    10
    15    22
ans =
     1     1
     1     1
ans =
     1     0
     0     1
ans =
     1     4
     9    16
ans =
     7    10
    15    22

Kodeoppgaver (total videotid: 1:13:43)

Oppgave 2.2.1: Matrise som datastruktur

Vi skal lage et program for å ta vare på rundetidene i et skøyteløp, og analysere de etterpå. Vi har fått oppgitt følgende eksempeldata til bruk under utvikling.

Lag et script som oppretter en passende datastruktur som inneholder disse dataene, og som lagrer den i en variabel.

Videoforklaring (5:45)

Løsningsforslag

opprett_rundetider.m
 rundetider = [ 25, 29, 31, 30; 
                25, 31, 29, 29;
                24, 28, 32, 33 ];

Oppgave 2.2.2: Posisjonsindeksering

Vi ønsker å  kunne få statistikk for løpet til en spesifikk utøver. Lag en funksjon som lar brukeren skrive inn et utøvernummer, og som skriver ut alle rundetidene til den utøveren. Skriv også ut den raskeste rundetiden til den utøveren.

Utdelt kode

Script for å lage testdata: opprett_rundetider.m

Videoforklaring (10:56)

Løsningsforslag

skriv_ut_loeperstat.m
function skriv_ut_loeperstat(rundetider)
    loepernr = input('Skriv inn løpernummer: ');
    loepertider = rundetider(loepernr, :);
    disp(loepertider);
    disp(min(loepertider));
end

Oppgave 2.2.3: Logisk indeksering

Vi ønsker å kunne sammenlikne løpet til to utøvere. Lag en funksjon som lar brukeren skrive inn to utøvernummer, og som skriver ut rundenumrene og rundetidene der den første utøveren var raskere enn den andre.

Utdelt kode

Script for å lage testdata: opprett_rundetider.m

Videoforklaring (12:31)

Løsningsforslag

sammenlikn_loepere.m
function sammenlikn_loepere(rundetider)
    loeper1 = input('Skriv inn nummeret til første løper: ');
    loeper2 = input('Skriv inn nummeret til andre løper: ');
    
    loepertid1 = rundetider(loeper1, :);
    loepertid2 = rundetider(loeper2, :);
 
    er_raskere = loepertid1 < loepertid2;
    raskeste_tider = loepertid1(er_raskere);
    disp(raskeste_tider),
 
    raskeste_rundenr = find(er_raskere);
    disp(raskeste_rundenr);
end

Oppgave 2.2.4: Mer indeksering

Vi ønsker å kunne analysere resultatene i en bestemt runde. Lag en funksjon som ber brukeren skrive inn et rundenummer, og som skriver ut den rundens rundetider hvor tiden var høyere enn gjennomsnittet i den runden.

Utdelt kode

Script for å lage testdata: opprett_rundetider.m

Videoforklaring (7:25)

Løsningsforslag

skriv_ut_tider_over_rundesnitt
function skriv_ut_tider_over_rundesnitt(rundetider)
    rundenr = input('Skriv inn et rundenummer: ');
    tider = rundetider(:, rundenr);
    snitt = mean(tider);
    er_over_snitt = tider > snitt;
 
    tider_over_snitt = rundetider(er_over_snitt, rundenr);
    disp(tider_over_snitt);
end

Oppgave 2.2.5: Innebygde funksjoner og matriser

Vi ønsker å finne den utøveren som vant løpet. Lag en funksjon for å skrive ut utøvernummeret til den utøveren som hadde laveste totale løpstid.

Utdelt kode

Script for å lage testdata: opprett_rundetider.m

Videoforklaring (12:42)

Løsningsforslag

skriv_ut_vinner.m
function skriv_ut_vinner(rundetider)
    totaltider = sum(rundetider, 2);
    disp(find(totaltider == min(totaltider)));
end

Oppgave 2.2.6: Extra-spill

I tippingsspillet Extra leverer spillere et 5 x 5-brett med unike tall mellom 1 og 75. Det trekkes så 47 unike tall mellom 1 og 75. Man kan vinne en premie med tre forskjellige kriterier:

  1. Hvis man fyller det innerste 9x9-området av brettet, kalt bilde.
  2. Hvis man fyller ytterkanten av brettet, kalt ramme.
  3. Hvis man fyller hele brettet.

Et eksempelbrett er avbildet under.


Vi skal lage en simulator av dette spillet i Matlab, for å analysere våre vinnersjanser. Vi har funnet ut at vi kan representere et resultat-brett som en 5x5 matrise med logiske verdier, hvor en posisjon har verdien true hvis det tilsvarende Extra-brettet hadde en verdi der som ble trukket og false ellers.

Lag en funksjon som tar inn et slikt Extra-brett, og som returnerer true hvis brettet er et vinnerbrett og false hvis det ikke er det.


Videoforklaring

Del 1 (8:35)Del 2 (6:38)Del 3 (6:40)Del 4 (2:31)

 

Utdelt kode

Dette scriptet lager noen variabler som inneholder eksempelbrett man kan teste løsningen sin med.

opprett_testbrett.m

Løsningsforslag

er_vinnerbrett.m
function retur = er_vinnerbrett(brett)
    retur = har_fylt_bilde(brett) || har_fylt_ramme(brett);
end
har_fylt_bilde.m
 function retur = har_fylt_bilde(brett)
    bilde = brett(2:4, 2:4);
    kol_har_bare_true = all(bilde);
    retur = all(kol_har_bare_true);
end
har_fylt_ramme.m
 function retur = har_fylt_ramme(brett)
    rad1 = brett(1, :);
    rad5 = brett(5, :);
    kol1 = brett(:, 1);
    kol5 = brett(:, 5);
    retur = all(rad1) && all(rad5) && all(kol1) && all(kol5);
end
  • No labels