Side 4 av 5

Lagt inn: 03/11-2011 11:15
av Nebuchadnezzar

Kode: Velg alt

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

Lagt inn: 03/11-2011 19:36
av gill

Kode: Velg alt

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.

Lagt inn: 03/11-2011 20:48
av ojmik
gill skrev: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:

Kode: Velg alt

>> [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.

Lagt inn: 08/11-2011 10:33
av gill

Kode: Velg alt

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

Kode: Velg alt

>> 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?

Lagt inn: 08/11-2011 10:41
av Nebuchadnezzar
% Oppgave 2 a)

% Alternativ I

Kode: Velg alt

function Y = Omvend1( a )
p=length(a);
    for i=1:p
    g(i)=a(p-i+1);
    end

Y=g;

end
% Alternativ II

Kode: Velg alt

function Y = Omvend(a)
Y = fliplr(a);
end

% Oppgave 2 b)

% Alternativ I

Kode: Velg alt

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

Kode: Velg alt

function Y=Palindrom(a)
b = strrep(a,' ','');
    if strcmpi(b,fliplr(b))
       Y=1;
    else
       Y=0;
    end
end
% Oppgave 2 c)

Kode: Velg alt

function Y = Finn(b,a)
    if strfind(a,b)>0
        Y=1;
    else
        Y=0;
    end
end

Lagt inn: 16/11-2011 13:23
av 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

Kode: Velg alt


h=[1 0 1];

for i=1:length(h)
    
    if h(i)
        
        disp('yes')
        
    end
    
end

Lagt inn: 16/11-2011 13:33
av Vektormannen
Er 1 og 0 lagret som double?

Lagt inn: 16/11-2011 13:39
av gill
vektoren h blir lagret som vanlig double?

Kjører if true eller false for h som er double var det jeg tenkte?

Lagt inn: 16/11-2011 13:43
av 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.

Lagt inn: 16/11-2011 14:20
av 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

Lagt inn: 16/11-2011 14:56
av 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.

Lagt inn: 17/11-2011 15:07
av 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:

Kode: Velg alt

>> 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.
 
>> 

Lagt inn: 17/11-2011 17:09
av espen180
Prøv

Kode: Velg alt

cellrowvec(1,:)=[]
{...} refererer til innholdet i en gitt celle, mens (...) refererer til selve cellen.

Lagt inn: 18/11-2011 22:45
av 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?

Lagt inn: 22/11-2011 16:02
av 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