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

Code: Select all

cellrowvec(1,:)=[]
{...} 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