Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

Expand
titleopprett_kuponger.m
Code Block
titleopprett_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 (mm33:ss08)

Del 1 (8:14)Del 2 (4:29)Del 3 (mm8:ss14)Del 4 (mm12:ss11)
Widget Connector
urlhttps://www.youtube.com/watch?v=3CppbuUFATk
Widget Connector
urlhttps://www.youtube.com/watch?v=3dJdp9RsOaM
 
Widget Connector
urlhttps://www.youtube.com/watch?v=-gYxcc5CavQ
Widget Connector
urlhttps://www.youtube.com/watch?v=SnCna-Ih-ME
 
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

Expand
titleHvis du har prøvd selv, trykk her for å se svaret...
Code Block
titleanalyser_tippekupong.m
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