Obligatorisk uppgift MATLAB för kurserna 5DV104, 5DV105, HT09 - Lottorader

Uppgiften består av att konstruera ett programsystem i Matlab som kan rätta lottorader. Programmet ska kunna rätta s.k. flerveckors spel. Man ska kunna initiera programmet genom att mata in ett antal lottorader, motsvarande ett flerveckors spel, som sparas på fil (använd save()). Vid senare körning läses flerveckors spelet in från fil (använd load()) och svarar med hur många rätt varje spelad lottorad har samt hur många tilläggsnummer som är rätt för varje spelad rad.

Uppgiften ska lösas individuellt eller i par om två personer och redovisas framför dator i datorsal senast tisdag den 3 november kl. 17.00.

Redovisningen består av att man visar koden på skärmen för handledare och demokör sitt program. Antingen blir man godkänd eller så får man komplettera. Kompletteringarna ska helst vara gjorda innan 17.00 tisdag 3 november!

Hur spelas lotto

När man spelar en lottorad kryssar man i exakt 7 tal i intervallet [1, 35]. Givet aktuell rätt rad (RR) innehållande 7 tal i intervallet [1, 35] så innebär rättning att man kontrollerar hur många av talen i RR som finns i varje spelad rad. Dessutom dras vid varje dragning 4 s. k. tilläggsnummer (TN). Dessa 4 tal får inte vara samma som något i RR. Rättning innebär också att kontrollera hur många korrekta tilläggsnummer som finns i varje spelad rad.

Implementation

Implementera programsystemet som en funktion med anropssekvens enligt

function [corr_ordinary, corr_additional]=lotto(state)

där corr_ordinary(1) säger antal rätt i rad 1, corr_ordinary(2) säger antal rätt i rad 2 o.s.v. upp till antal rader i lottosystemet.

På liknande sätt säger corr_additional(k) hur många av tilläggsnumren som finns i rad k.

Modularisering

För att få ett lättöverskådligt program delar vi upp programmet i funktioner. Själva programmet vill vi därför att det ser ut som nedan. Respektive funktion ska du/ni skriva. Förhoppningsvis förstår man vad respektive funktion ska/bör utföra. Förutom de som indikeras nedan bör kontroll av antal rätt givet en viss rad implementeras i en egen funktion.

function [corr_ordinary, corr_additional]=lotto(state)
%Rätta n stycken lottorader
%Anrop: [corr_ordinary, corr_additional]=lotto(state)
%state=1 om inmatning av spelade rader ska göras
%annars läses lottorader från fil
%corr_ordinary(1:n) = antal rätt i repsektive lottorad
%corr_additional(1:n) = antal rätta tilläggsnummer i resp. rad
% corr_ordinary=[];
corr_additional=[];
if state == 1 %Mata in spelade rader och spara på fil
lottospel=lotto_input();
save lottorader lottospel
% Matrisen lottospel (n*7) innehåller n lottorader
lottospel %Kontrollutskrift
elseif exist('lottorader.mat','file')
%Rätta lottospelet som representeras i matrisen lottospel
load lottorader lottospel
lottospel %Kontrollutskrift
[corr_ordinary, corr_additional]=correct(lottospel);
printout(lottospel,corr_ordinary,corr_additional); %Skriv ut på lämpligt sätt else disp('Filen lottorader finns inte!') end %of if

Validering av indata

Med validering av indata menas att koden gör rimlighetskontroll av inmatningar som användaren gör från tangentbordet.

T.ex. ska man inte tillåta att samma tal matas in flera gånger till en och samma lottorad. Kan behöva kollas då spelade rader matas in, då rätt rad matas in och då motsvarande för tilläggsnummer matas in. Alltså skriver man en lämplig funktion som klarar av inmatning av "en rad med ett visst antal element". Funktionshuvudet skulle kunna vara function row=in_validate(k)där k= antal element som ska läsas in till raden row.