IT ØVING 9 - En del sprøsmål

Det er god trening å prate matematikk. Her er det fritt fram for alle. Obs: Ikke spør om hjelp til oppgaver i dette underforumet.

Moderators: Vektormannen, espen180, Aleks855, Solar Plexsus, Gustav, Nebuchadnezzar, Janhaa

Nebuchadnezzar
Fibonacci
Fibonacci
Posts: 5648
Joined: 24/05-2009 14:16
Location: NTNU

settTidspunkt('timeplan.csv',2,2,'Fysikk')
??? Subscript indices must either be real positive integers or logicals.

Error in ==> settTidspunkt at 7
tp(tidsp,dag) = {fag};

--------------------------

Det var da som bare... Gud jeg er elendig i it...
"Å vite hva man ikke vet er og en slags allvitenhet" - Piet Hein
https://s.ntnu.no/Integralkokeboken
Lektor - Matematikk, Fysikk og Informatikk
espen180
Gauss
Gauss
Posts: 2578
Joined: 03/03-2008 15:07
Location: Trondheim

I så fall er feilen nok i linje 3. Prøv å fjerne denne.

Det som skjer er at du bytter ut tidsp (her 2) med tidsp-7 (her -5), som ikke er en gyldig indeksverdi.
drgz
Fermat
Fermat
Posts: 757
Joined: 24/12-2008 23:22

Nebuchadnezzar wrote:
function tp = settTidspunkt(tptab,dag,tidsp,fag)
tp = tpTilCell(tptab);
tidsp = tidsp-7;
if numel(tidsp) > 1
tp(tidsp,dag) = repmat({fag},numel(tidsp),1);
else
tp(tidsp,dag) = fag;
end
Trodde du sa du ikke skulle koke jeg ;)

Som jeg skrev da jeg limte inn koden her på forumet så går det an å gjøre masse sjekker for å sørge for at input er riktig (f.eks tok jeg utgangspunkt i at man ikke har timer før kl 8 (ergo -7 på indeks). Ellers var det en glipp der jeg glemte {} rundt "fag".
Nebuchadnezzar
Fibonacci
Fibonacci
Posts: 5648
Joined: 24/05-2009 14:16
Location: NTNU

Sjekker om den kjører, kommer nok til å sitte oppe i natt for å skrive =)

Litt av problemet mitt, er at jeg ikke klarer å skrive CSV filen inn i en matrise som har domenet utenfor funksjonen.

Klipp og lim er en fin ting for å se hvordan ting fungerer

Tenkte time 1 2 3 4 jeg, jaja =)

Litt trøtt.
"Å vite hva man ikke vet er og en slags allvitenhet" - Piet Hein
https://s.ntnu.no/Integralkokeboken
Lektor - Matematikk, Fysikk og Informatikk
Nebuchadnezzar
Fibonacci
Fibonacci
Posts: 5648
Joined: 24/05-2009 14:16
Location: NTNU

Fikser resten i morgen, dette var vanskelig
"Å vite hva man ikke vet er og en slags allvitenhet" - Piet Hein
https://s.ntnu.no/Integralkokeboken
Lektor - Matematikk, Fysikk og Informatikk
drgz
Fermat
Fermat
Posts: 757
Joined: 24/12-2008 23:22

Nebuchadnezzar wrote:Sjekker om den kjører, kommer nok til å sitte oppe i natt for å skrive =)

Litt av problemet mitt, er at jeg ikke klarer å skrive CSV filen inn i en matrise som har domenet utenfor funksjonen.
Du får jo tilbake en cell--array fra funksjonen, holder ikke det? Hvis du tror at du klarer å lage en "matrise" med strenger av forskjellig lengde så må du nok tro om igjen. ;) (Eneste måten å gjøre det på er å "padde" strengene med tomrom (whitespace) slik at de er like lange; da kan du få alle lagret i en "vanlig" matrise.)

F.eks

Code: Select all

a = 'bil';
b = 'sjokolade';
d = length(b)-length(a);
C = [b; a repmat(' ',1,d)];
Hvis du skal gjøre det på denne måten må du ha en variabel som hele tiden viser til lengden av den lengste strengen som allerede er i matrisen din (eventuelt et tall du vet er større enn enhver input). Så det går an, men i mine øyne en svært dårlig løsning, spesielt når man har muligheten til å bruke celler.
Nebuchadnezzar
Fibonacci
Fibonacci
Posts: 5648
Joined: 24/05-2009 14:16
Location: NTNU

Tror jeg bare gir opp. Litt av problemet mitt er at jeg tror jeg ikke vet hva oppgaven spørr etter...


Litt av problemene mine er at alle disse funksjonene arbeider uavhengig av hverandre og i forhold til timplan.csv filen.

For eksempel, jeg kan fint laste den Timeplen.csv, inn i en celle. MEN denne cellen kan kun bli brukt inne i lastefunksjonen. Prøver jeg å gjøre noe frekt som

k = tpTilCeller('timeplan.csv')

også bruke k, videre fungerer ikke dette.

Dersom jeg skal lage en funksjon som tar inn en verdi, og putter denne inn i denne cellen. Går det fint. Men den blir ikke lagret! Neste gang henter bare lastefunksjonen samme CSV fil, som ikke er forandret...

Og det virker så merkelig at jeg skal lage tre funksjoner, som uavhengig av hverandre ikke fungerer.
"Å vite hva man ikke vet er og en slags allvitenhet" - Piet Hein
https://s.ntnu.no/Integralkokeboken
Lektor - Matematikk, Fysikk og Informatikk
drgz
Fermat
Fermat
Posts: 757
Joined: 24/12-2008 23:22

Nebuchadnezzar wrote:Tror jeg bare gir opp. Litt av problemet mitt er at jeg tror jeg ikke vet hva oppgaven spørr etter...
Det står jo ganske klart svart på hvitt hva de spør etter i oppgaveteksten.
Nebuchadnezzar wrote: For eksempel, jeg kan fint laste den Timeplen.csv, inn i en celle. MEN denne cellen kan kun bli brukt inne i lastefunksjonen. Prøver jeg å gjøre noe frekt som

k = tpTilCeller('timeplan.csv')

også bruke k, videre fungerer ikke dette.
Her tar du feil. Selvsagt kan du bruke k videre; hvis du ikke klarer det så gjør du noe veldig feil. Hvis jeg f.eks i kommandolinja skriver

k = tpTilCeller('timeplan.csv')

så har jeg fortsatt tilgang til variabelen k (ettersom den er lagret i workspace).
Nebuchadnezzar wrote: Dersom jeg skal lage en funksjon som tar inn en verdi, og putter denne inn i denne cellen. Går det fint. Men den blir ikke lagret! Neste gang henter bare lastefunksjonen samme CSV fil, som ikke er forandret...
Nei, funksjonen jeg skrev var kun for å lese csv-filen, konvertere til cellestruktur og endre timeplanen hvis ønskelig. Lagring til csv-fil igjen er noe du må skrive selv (hvis du ser på øvinga så er dette en egen deloppgave; jeg gav deg bare kode til de første to deloppgavene).
Nebuchadnezzar wrote: Og det virker så merkelig at jeg skal lage tre funksjoner, som uavhengig av hverandre ikke fungerer.
Det at du ikke får de til å fungere betyr ikke at de ikke fungerer.
Nebuchadnezzar
Fibonacci
Fibonacci
Posts: 5648
Joined: 24/05-2009 14:16
Location: NTNU

Nå mener jeg at jeg har holdt på å skrive litt på første, og siste oppgave. Velger å ikke levere inn denne øvingen da, den ikke er obligatorisk og at jeg ikke fikk den til.

Setter jeg k = tpTilCeller('timeplan.csv')

Kan jeg bruke k videre, men dette er vel ikke en celle? men en eller annen form for matrise.

fungerer uansett ikke å skrive for eksempel

k(1,1) = [k Fysikk] eller k(1,1) = [k 'Fysikk']

Problemet mitt er at hver gang jeg forandrer en linje i timeplanen, så forandrer den bare denne linjen.

For eksempel kjører jeg først at den skal forandre
gjøre mandag 3time fra fysikk til matte

også tirsdag 2time fra exphil til fysikk

Så vil den hver gang hente ut CSV filen, og ikke en cellematrise. Og ejg får heller ikke lagret hver endring. Skal se på det senere, tror jeg slapper av med litt fysikk først.
"Å vite hva man ikke vet er og en slags allvitenhet" - Piet Hein
https://s.ntnu.no/Integralkokeboken
Lektor - Matematikk, Fysikk og Informatikk
drgz
Fermat
Fermat
Posts: 757
Joined: 24/12-2008 23:22

Nebuchadnezzar wrote:Nå mener jeg at jeg har holdt på å skrive litt på første, og siste oppgave. Velger å ikke levere inn denne øvingen da, den ikke er obligatorisk og at jeg ikke fikk den til.

Setter jeg k = tpTilCeller('timeplan.csv')

Kan jeg bruke k videre, men dette er vel ikke en celle? men en eller annen form for matrise.

fungerer uansett ikke å skrive for eksempel

k(1,1) = [k Fysikk] eller k(1,1) = [k 'Fysikk']

Problemet mitt er at hver gang jeg forandrer en linje i timeplanen, så forandrer den bare denne linjen.

For eksempel kjører jeg først at den skal forandre
gjøre mandag 3time fra fysikk til matte

også tirsdag 2time fra exphil til fysikk

Så vil den hver gang hente ut CSV filen, og ikke en cellematrise. Og ejg får heller ikke lagret hver endring. Skal se på det senere, tror jeg slapper av med litt fysikk først.
Jeg tror du bør lese litt mer i læreboka om de forskjellige datatypene i Matlab, eventuelt bruke mer tid på å lese i dokumentasjonen som følger med programmet (f.eks om cell-arrays og indeksering). Når du har gjort og forstått mer av det vil du se hvor feil det du prøver på i eksempelet over er.
drgz
Fermat
Fermat
Posts: 757
Joined: 24/12-2008 23:22

Code: Select all

function lagreTimeplan(tp,filnavn)
[fid err] = fopen(filnavn,'w');
if ~isempty(err)
    error(err);
end

for k = 1:5
    fagStr = char(tp(:,k));
    for m = 1:8
        fag = strtrim(fagStr(m,:));
        if ~isempty(fag)
            fprintf(fid,'%s',fag);
        end
        if m < 8
            fprintf(fid,',');
        end
    end
    if k < 5
        fprintf(fid,'\n');
    end
end
fclose(fid);
end

Code: Select all

function printTimeplan(tp)

dager = {'Mandag' 'Tirsdag' 'Onsdag' 'Torsdag' 'Fredag'};
klSlett = {'0800' '0900' '1000' '1100' '1200' '1300' '1400' '1500' '1600'}';
for k = 1:5
    idx = strcmpi(tp(:,k),'');
    if sum(idx) == 8
        continue;
    else
        dagStr = [char(klSlett(~idx)) repmat(' - ',length(idx(~idx)),1) char(tp(~idx,k))];
    end
    disp([dager{k} ':']);
    disp(dagStr);
    disp(' ');
end
end
Post Reply