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

Sliter litt med denne øvingen, alle tips og tilbakemeldinger godtas med stor takknemmlighet.

Øving 9

http://itgk.idi.ntnu.no/oving/oving9-matlab.pdf

http://itgk.idi.ntnu.no/oving/exercise2.txt

http://itgk.idi.ntnu.no/oving/timeplan.csv

Sliter merkelig nok med alt.

Klarer ikke lese inn filen ovenfor med den "korrekte måten"
bruker

Code: Select all

>> h = load(exercise2.txt)
??? Attempt to reference field of non-structure array.
 
>> h = load(exercise2.txt,''-ascii'')
??? Attempt to reference field of non-structure array.
 
Klarer derimot å laste filen om jeg skriver bare

Code: Select all

load exercise2.txt,
Hva skjer?

Videre så skal jeg lage en funksjon, om sorterer og systematiserer. Dette ble vanskelig! Altså 2c, tenkte den var lettere enn 2b. Her er koden min som ikke fungerer.

Code: Select all

clear all
clc

load exercise2.txt

a = sort(exercise2(:))     % omgjør matrisen til en vektor med stigende verdi
b = length(a);             % Finner lengden til denne vektoren
k=1;
d(k,1)=a(1,1)
d(k,2)=0

for i = 1:(b-1)
    if a(i,1)==a(i+1,1)    % Sammenligner to ledd
    d(k,2) = d(k,2) + 1;   % Dersom disse er like teller                                 % funksjonen en opp
    else
    k = k + 1;             % Dersom tallene ikke er like går                             % funksjonen videre
    d(k,1)=a(i,1);         % Går til neste rad, og setter                               % det første elementet
    end                    % Likt som a.
end

d
Blir riv ruskende galt. Videre sliter jeg med resten av øvingen og ... =(
sittet noen timer nå, og prøvd på alt mulig rart. Noen som kan hjelpe?
"Å 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

1) load exercise.txt eller
2) load('exercise.txt')

Code: Select all

load exercise2.txt;
A = exercise2;
[m n] = size(A);
Av = A(:);
B = unique(Av);
C = zeros(numel(B),1);
fid = fopen('nyfil.txt','w');

for k = 1:numel(B)
    C(k) = numel(find(Av==B(k)));
end
fprintf(fid,'%d: %d\n',[B C]);
fclose(fid);
drgz
Fermat
Fermat
Posts: 757
Joined: 24/12-2008 23:22

4a)

Code: Select all

function tp = tpTilCell(fil)
[fid err] = fopen(fil,'r');
if ~isempty(err)
    error(err);
end
tp = cell(8,5);
d = 1;
while ~feof(fid)
    str = fgetl(fid);
    strc = regexp(str,',','split');
    tp(:,d) = strc;
    d = d+1;
end
fclose(fid);
end
4b)

Code: Select all

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
Gjør ingen sjekker på input, men regner med at det ikke kreves.

Resten får du vel til selv? :)

Burde nesten ta ITGK med MATLAB selv. Synd vi bare hadde ubrukelig jsp den gang jeg hadde det.
Last edited by drgz on 02/11-2011 22:52, edited 1 time in total.
Nebuchadnezzar
Fibonacci
Fibonacci
Posts: 5648
Joined: 24/05-2009 14:16
Location: NTNU

Nå tror jeg at jeg fikk til 2c. Klr meg ihodet, litt fordi du gjør ting helt annerledes enn vi har lært. Vi lærer myyye løkker vi. Men jeg er oppegående, så klarer å tweake ting litt.

Denne burde fungere for 2b)

Code: Select all

clear all
c3;
clc
i = 1;

h

while numel(C)>10
    
    if C(i)==min(C)
    C(i)=[];
    B(i)=[];
    end
    i = i + 1;
end

k = [ B , C ]
Litt baklengs å først gjøre 2c, også bruke det til å gjøre 2b. Men jaja. Skal vi se på de neste oppgavene da. Tusen takk for hjelpen. Kommer ikke til å skrive av, da jeg er forferdelig dårlig til å koke. Men skal se over nøye ^^

EDIT: Forstod absolutt null av 4a. Ser at omtrent absolutt alt av funksjoner og kommandoer er nytt for meg. Eneste jeg ser at du gjør er at du lager en tabell, og skjører en while løkke. Testet også funksjonen og den ville ikke kjøre... Sikkert bare meg som gjør noe galt, men dette er litt frustrerende.
Last edited by Nebuchadnezzar on 02/11-2011 22:34, edited 1 time in total.
"Å 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

Jo tidligere du innser at løkker i MATLAB ikke er effektivt i MATLAB, jo bedre. Selvsagt, noen ganger må du ha det uansett, men det beste er som regel å unngå det hvis du kan.

Nå vet jeg ikke hva av funksjoner dere har lov til å bruke på eksamen, vil f.eks alle innebygde funksjoner være lov så lenge de ikke spesifiserer at dere skal skrive funksjonen fra scratch?
Nebuchadnezzar
Fibonacci
Fibonacci
Posts: 5648
Joined: 24/05-2009 14:16
Location: NTNU

Alt er lov på eksamen ja, så lenge ikke annet står spesifisert. Tenker at jeg gjerne kan bruke avanserte funksjoner. Men da må jeg lære meg å bruke disse først.

For eksempel har vi brukt

Code: Select all

length(b)
og ikke

Code: Select all

enumel(b)
osv osv.

Du gjør også noe merkelig med å åpne og lukke noen tekst filer, som jeg finnersvært merkelig... Jaja... Kanskje det ikke er meningen at jeg skal forstå alt heller =(

EDIT: Nå kjørte koden din, skal lese gjennom den med lupe. Selv om alt ser gresk ut foreløpig. Mener 4a. 2`en er grei :D
"Å 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

Hvordan kjører du koden da? Tanken er at du kjører den ved å skrive f.eks A = tpTilCell('filnavn.type').

Ellers kan jeg sikkert skrive hva som skjer i koden

Code: Select all

[fid err] = fopen(fil,'r'); % Åpne fil gitt som input
if ~isempty(err) % sjekk om fopen klarer å åpne
    error(err); % hvis ikke, gi feil og stopp koden
end
tp = cell(8,5); % init. cell-array
d = 1; % teller
while ~feof(fid) % så lenge du ikke har nådd siste linje
    str = fgetl(fid); % leser du ut linje for linje og lagrer til str-variabel
    strc = regexp(str,',','split'); % split innhold i str-variabel på alle komma
    tp(:,d) = strc; % og lagre strc (cell-array) som kolonner i tp
    d = d+1; % inkrementer teller
end % end while
fclose(fid); % lukk fil
end % end function
drgz
Fermat
Fermat
Posts: 757
Joined: 24/12-2008 23:22

Nebuchadnezzar wrote:Alt er lov på eksamen ja, så lenge ikke annet står spesifisert. Tenker at jeg gjerne kan bruke avanserte funksjoner. Men da må jeg lære meg å bruke disse først.

For eksempel har vi brukt

Code: Select all

length(b)
og ikke

Code: Select all

enumel(b)
osv osv.
numel() og length() er i to sider av samme sak for Nx1 eller 1xN vektorer, se http://stackoverflow.com/questions/3119 ... -functions . Jeg burde nok ha gått over til mer konsekvent bruk som de skriver på SO, men har bare blitt en vane. :S
Nebuchadnezzar wrote: Du gjør også noe merkelig med å åpne og lukke noen tekst filer, som jeg finnersvært merkelig... Jaja... Kanskje det ikke er meningen at jeg skal forstå alt heller =(
Trodde fopen og fclose var pensum jeg (mener å ha lest det på den NTNU tråden på diskusjon.no)
Nebuchadnezzar wrote: EDIT: Nå kjørte koden din, skal lese gjennom den med lupe. Selv om alt ser gresk ut foreløpig. Mener 4a. 2`en er grei :D
:)
Last edited by drgz on 02/11-2011 23:07, edited 1 time in total.
Nebuchadnezzar
Fibonacci
Fibonacci
Posts: 5648
Joined: 24/05-2009 14:16
Location: NTNU

Er sikkert pensum, men jeg / vi har ikke lært det enda.

I kveld er første gang jeg prøver å hente inn informasjon fra filer i matlab, og ærlig talt så er 80% av funksjonene du brukte i koden din, koder jeg aldri har sett før. Men det er jo slikt en lærer av.

så ja, nå leser jeg meg opp på hvordan jeg skal lage menyer og slikt, som vi heller ikke har hatt om før. Blir artig. Står heldigvis litt i boka.
"Å 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

Code: Select all

clc 
clear all 

fid = fopen('poenggrenser_2011.txt');
data = textscan(fid, '%q %q' , 'delimiter' , ',');

antall = 0;
karakterer = [];

fag     = data{1};
grenser = data{2};

for i = 1:length(grenser)
    if strcmpi(grenser(i), 'alle')
        antall = antall + 1;
        continue
    end
    
    navn = char(fag(i));
    if length(navn) > 4
        if strcmpi(navn(1:4), 'NTNU')
            karakterer = [ karakterer str2double(grenser(i)) ];
        end
    end
end

fclose(fid);
Noen grunn til at denne koden ikke kjører? Er 3b...
"Å 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

Hvis du fjerner semikolonet fra fopen-funksjonen, ser du at du får igjen

Code: Select all

fid= -1 
altså klarer ikke MATLAB å påne filen. Grunnen er at du har skrevet feil filformat. Det skal være .csv, ikke .txt. Hvis du fikser dette, kjører koden problemfritt.
Nebuchadnezzar
Fibonacci
Fibonacci
Posts: 5648
Joined: 24/05-2009 14:16
Location: NTNU

Får heller ikke 4b til å kjøre
"Å 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

Hvordan ser koden din ut?
Nebuchadnezzar
Fibonacci
Fibonacci
Posts: 5648
Joined: 24/05-2009 14:16
Location: NTNU

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
"Å 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

Det eneste jeg ser er at linje 7 burde være

Code: Select all

tp(tidsp,dag) = {fag}; 
gitt at tp er en cell array og fag er en streng. Ellers vil du vel få en error om konversjon fra cell til char klasse.
Post Reply