Du har begynt på et prosjekt i et fag hvor du skal analysere forekomsten av Pokémon Go-monstre i Trondheim. I prosjektet er et område av Trondheim delt i et rutenett, og prosjektdeltakerne loggfører alle gangene de støter på forskjellige Pokémon. Disse dataene lastes opp til en server, hvor de behandles av et program skrevet i Matlab.

Du skal jobbe med å utvide analysekoden, som er skrevet av tidligere prosjektstudenter. Du irriterer deg umiddelbart over at dataene i programmet er samlet i cellelister, som illustrert under. Du bestemmer deg for å gjøre noe med saken.


a) Lag en funksjon som konverterer data for én forekomst fra en celleliste til en struct med et passende format.
b) Deler av programmet jobber på samlinger av forekomstdata. Lag en funksjon som konverterer en cellematrise med forekomstdata til et passende alternativ som bruker structs. Scriptet opprett_pokemon.m lager en cellematrise du kan teste funksjonen med.

 Utdelt kode

opprett_pokemon.m
pkms_celle = { 'Charmander', 8, 'N',  7; 
               'Pikachu',   10, 'J',  8; 
               'Dewgong',    1, 'A',  1; 
               'Exeggutor',  1, 'S', 10 } 

 

Videoforklaring (21:34) 

Del 1 (7:30)Del 2 (4:55)Del 3 (9:09)
Oppgaveintroduksjon, og løsning av oppgave a).

Generelt om valgene man har for å bruke structs til å
representere samlinger med verdier.

Løsning av oppgave b).

Løsningsforslag

forekomst_struct.m
function retur = forekomst_struct(forekomst_celleliste)
    retur.navn = forekomst_celleliste{1};
    retur.antall = forekomst_celleliste{2};
    retur.pos = struct('rad', forekomst_celleliste{3}, ...
                       'kol', forekomst_celleliste{4});
 
	%% Kan også lage siste felt gradvis:
    % retur.pos.rad = forekomst_celleliste{3};
    % retur.pos.kol = forekomst_celleliste{4};
end 
forekomster_struct.m
function retur = forekomster_struct(forekomst_cellematrise)
    retur.navn = forekomst_cellematrise(:, 1)';
    retur.antall = [forekomst_cellematrise{:, 2}];
    retur.pos.kol = forekomst_cellematrise(:, 3)';
    retur.pos.rad = [forekomst_cellematrise{:, 4}];
end 

 

 

  • No labels