Page 4 of 5
Posted: 03/11-2011 11:15
by Nebuchadnezzar
Code: Select all
fprintf('/n')
tall = 0;
sum = 0;
b = input('Skriv inn en karakter: ');
if round(b)==b
h=1;
else
h=0;
end
if b > 0 && b<7 && h==1
while b > 0 && b<7 && h==1
sum = sum + b;
tall = tall + 1;
b = input('Skriv inn enda en karakter: ');
if round(b)==b
h=1;
else
h=0;
end
end
fprintf('Gjennomsnittet av karakterene ble %d /n',sum/tall)
else
fprintf('Du skrev ikke inn noen gydlige karakterer \n')
end
Posted: 03/11-2011 19:36
by gill
Code: Select all
function [elements sum]=funcunderN(N)
a=0;
count=0;
i=0;
matrix=[];
while a<=N
i=i+1;
a=a+i^2;
count=count+1;
matrix(i)=a;
end
if a>=N
a=a-i^2;
count=count-1;
matrix=matrix(1:i-1);
end
sum=count;
elements=sum(matrix);
jeg får ikke skrevet elements med denne koden her.
Posted: 03/11-2011 20:48
by ojmik
gill wrote:jeg får ikke skrevet elements med denne koden her.
Når du kjører dårlig kode i matlab så får du en feilmelding. Denne er svært nyttig for å finne ut hvor feilen din er lokalisert. Når du kjører koden du skrev inn overfor får du feilmeldingen:
Code: Select all
>> [a b]=funcunderN(5)
??? Index exceeds matrix dimensions.
Error in ==> funcunderN at 41
elements=sum(matrix);
Programmet gir deg beskjed om en feil på linje 41, og at "Index exceeds matrix dimensions". Grovt oversatt betyr det at elementet du ba om ikke finnes i matrisen.
Nå bør du tenke at dette virker noe merkelig ettersom sum ikke er en matrise men en funksjon. Hvorfor skal matlab tolke funksjonen sum som en matrise?
Hvis du ser like over, på linje 39 finner du at der har du definert sum til å være en variabel. Samtidig har du definert sum som variabel til returnering i linje en.
Siden du i m-fila di har definert sum som en variabel kan ikke matlab lenger bruke sum-funksjonen. Gi nytt navn til variabelen og du bør være i boks.
Posted: 08/11-2011 10:33
by gill
Code: Select all
function isitalike=comparestrings(a,b)
n=length(a);
m=length(b);
c=logical(0);
y=m;
z=n;
f=0;
if m>n
temp=a;
a=b;
b=temp;
end
for i=1:n
c=strcmp(a(i),b(1));
if c
j=1;
if length(a(i:n))>=length(b)
for k=1:length(b)
while a(i)==b(j)
if j==length(b)
if z>y
disp('b is in a')
f=1;
else
disp('a is in b')
f=1;
end
end
j=j+1;
i=i+1;
end
end
end
end
end
koden over får jeg feilmeldingen
Code: Select all
>> b
b =
vg
>> a
a =
detvgdet
>> comparestrings(a,b)
b is in a
??? Attempted to access b(3); index out of bounds because numel(b)=2.
Error in ==> comparestrings at 39
while a(i)==b(j)
>>
men jeg prøver å kutte av sammenligningen med
for k=1:length(b)
etter lengde av b skulle den hoppe over if definert over tenkte jeg. Hvorfor gjør den ikke det?
Posted: 08/11-2011 10:41
by Nebuchadnezzar
% Oppgave 2 a)
% Alternativ I
Code: Select all
function Y = Omvend1( a )
p=length(a);
for i=1:p
g(i)=a(p-i+1);
end
Y=g;
end
% Alternativ II
Code: Select all
function Y = Omvend(a)
Y = fliplr(a);
end
% Oppgave 2 b)
% Alternativ I
Code: Select all
function Y = Snur(a)
b = length(a);
c = 0;
for i=1:b
if a(i)==a(b-i+1)
c = c + 1;
end
end
if c < round(b/2)
Y = 0;
else Y = 1;
end
% Alternativ II
Code: Select all
function Y=Palindrom(a)
b = strrep(a,' ','');
if strcmpi(b,fliplr(b))
Y=1;
else
Y=0;
end
end
% Oppgave 2 c)
Code: Select all
function Y = Finn(b,a)
if strfind(a,b)>0
Y=1;
else
Y=0;
end
end
Posted: 16/11-2011 13:23
by gill
Jeg lurer på hva de mner med første fallgruve her at man ikke kan bruke en vektor med 1 og 0 lagret med double som true false statement
http://bildr.no/view/1027433
Dette skriptet fungerte i hvert fall
Code: Select all
h=[1 0 1];
for i=1:length(h)
if h(i)
disp('yes')
end
end
Posted: 16/11-2011 13:33
by Vektormannen
Er 1 og 0 lagret som double?
Posted: 16/11-2011 13:39
by gill
vektoren h blir lagret som vanlig double?
Kjører if true eller false for h som er double var det jeg tenkte?
Posted: 16/11-2011 13:43
by Vektormannen
Det er vel ikke vektoren, men tallene i den, som lagres som integer, double, osv. Datatypen til tallene avhenger av hvor stor presisjon som trengs. Når du skriver h = [1 0 1] så tviler jeg på at MATLAB lagrer disse heltallene som double (altså desimaltall med høy presisjon.) Prøv heller å skrive h = [1.0 0.0 1.0]. Da går det kanskje ikke.
Posted: 16/11-2011 14:20
by gill
funker med desimaltall og:
http://bildr.no/view/1027446
h blir lagret om double
oopps ingen vits i å ta med variabelen i som ble med i workspace
Posted: 16/11-2011 14:56
by drgz
A = ceil(16*rand(20,1));
idx_log = A>10;
idx_double = double(idx_log);
Kaller du deretter
A(idx_log)
får du listet opp alle elementene i A som er større enn 10. Prøver du å kalle A(idx_double) vil du få feilmeldingen "Subscript indices must either be real positive integers or logicals.", med andre ord en mulig fallgruve hvis du ikke tenker deg om.
Posted: 17/11-2011 15:07
by gill
Jeg lurer på det de sier nederst til venstre i øverste ark til venstre
http://bildr.no/view/1028232
at man kan slette en hel rekke eller kolonne men når jeg gjør det i matlab får jeg:
Code: Select all
>> cellrowvec={1:3, 'hello', 'e', [1:3;4:6];1:3, 'hello', 'e', [1:3;4:6]}
cellrowvec =
[1x3 double] 'hello' 'e' [2x3 double]
[1x3 double] 'hello' 'e' [2x3 double]
>> cellrowvec{1,:}=[ ]
??? The right hand side of this assignment has too few values to satisfy
the left hand side.
>>
Posted: 17/11-2011 17:09
by espen180
Prøv
{...} refererer til innholdet i en gitt celle, mens (...) refererer til selve cellen.
Posted: 18/11-2011 22:45
by gill
http://itgk.idi.ntnu.no/oving/lf/aud2-t ... 6392pl.pdf
lurer på flytskjemaet i oppgave 1e:
jeg tenkte at å sette i=1 og temp=list(1) skulle være et parallellogram og ikke en vanlig firkant siden det var en input og at i=i+1 skulle være firkant mens temp=list(i) skulle være parallellogram men det var det ikke i fasit. Hvordan kan i=1 være en process?
Posted: 22/11-2011 16:02
by gill
jeg lurte på oppgave 2c og spørsmålet
I hvilken dimensjon lagres x-posisjonene dersom
spillbrettet lagres som en to-dimensjonal MATLAB-tabell ?
hva er en todimensjonal MATLAB-tabell?
http://itgk.idi.ntnu.no/eksamen/gamle_e ... Matlab.pdf
fasit
http://itgk.idi.ntnu.no/eksamen/gamle_e ... b%20LF.pdf