Du lager et program for å håndtere tippingkuponger for fotballresultat. En tippekupong representeres med en 12 x 3 matrise med sannhetsverdier, hvor hver rad er en kamp og en kolonne angir om spilleren har tippet hjemmeseier, uavgjort eller borteseier for kampen.
Du ønsker å kunne analysere tippekuponger, og finne ut om en kupong er gyldig utfylt og hvor mange rett den har. Du har allerede laget et script opprett_kuponger.m
som lager en rekke testkuponger og en fasitkupong du kan bruke til testing.
Skriv en funksjon som tar inn to tippekuponger, en gjetning og en med korrekte resultat, som returnerer en logisk variabel som sier om kupongen er gyldig, en liste over kampene hvor tippingen var korrekt, og antall korrekte resultat.
Utdelt kode opprett_kuponger.m
kupong1 = [ true false false;
false true false;
true false false;
true false false;
false false true;
false true false;
false true false;
false true false;
false false true;
true false true;
false false true;
true false false ];
kupong2 = [ false true false;
false true false;
true false false;
false false true;
false true false;
false true false;
true false false;
false true false;
false true false;
false false true;
false false true;
true false false ];
kupong3 = [ true true true;
true true true;
true true true;
true true true;
true true true;
true true true;
true true true;
true true true;
true true true;
true true true;
true true true;
true true true ];
fasit_kupong = [ false true false;
false true false;
true false false;
false false true;
false false true;
false false true;
false false true;
true false false;
false true false;
true false false;
true false false;
false false true ];
assert(all(size(kupong1) == [12, 3]));
assert(all(size(kupong2) == [12, 3]));
assert(all(size(kupong3) == [12, 3]));
assert(all(size(fasit_kupong) == [12, 3]));
Videoforklaring (33:08)
Del 1 (8:14) Del 2 (4:29) Del 3 (8:14) Del 4 (12:11) Introduksjon av problemet, om retur av flere parametre, og konstruksjon av funksjonens ytre. Problemoppdeling, bruk av lokale funksjoner/hjelpefunksjoner til å gjenspeile dette, og løsning av hovedfunksjonen. Kode for å avgjøre om en kupong er gyldig eller ikke. Kode for å avgjøre på hvilke rader en kupong treffer en fasit, og test av hele funksjonen.
Løsningsforslag Hvis du har prøvd selv, trykk her for å se svaret...
function [ er_gyldig, treff, antall_treff ] = analyser_tippekupong(gjetninger, fasit)
er_gyldig = er_kupong_gyldig(gjetninger);
treff = finn_treff(gjetninger, fasit);
antall_treff = length(treff);
end
function retur = er_kupong_gyldig(kupong)
%% Vektorisert løsning
antall_kryss_per_rad = sum(kupong, 2);
er_rad_gyldig = antall_kryss_per_rad == 1;
retur = all(er_rad_gyldig);
%% Uvektorisert kan den skrives slik:
% for i = 1:size(kupong, 1)
% n_kryss = 0;
% for j = 1:size(kupong, 2)
% if kupong(i, j)
% n_kryss = n_kryss + 1;
% end
% end
% if n_kryss ~= 1
% retur = false;
% return;
% end
% end
% retur = true;
end
function retur = finn_treff(kupong, fasit)
%% Vektorisert kan den skrives slik:
% retur = find(any(kupong & fasit, 2));
%% Uvektorisert kode følger.
retur = [];
for i = 1:size(kupong, 1)
for j = 1:size(kupong, 2)
if kupong(i, j) && fasit(i, j)
retur(end+1) = i;
end
end
end
end