Page 1 of 1
MATLAB: muplisere funksjonen numel(). (Fint med raskt svar:)
Posted: 20/10-2010 19:51
by Hartvix
Hei. Har en oppgave der jeg skal lage min egen funksjon for å telle antall elementer i en liste.
På egen hånd har jeg kommer hit:
Code: Select all
function t = antall(l)
n = 1;
x = -1
while x~=NaN
x = l(n)
n = n+1;
end
t=n
end
Planen var at når neste element i listen ikke eksisterte ville funksjonen gi tilbake nummeret på det siste elementet. Dette gikk altså ikke.
Blir veldig glad om noen gir meg et hint om hva jeg kan bruke i stedet for NaN evt. en helt annen fremgangsmåte.
På forhånd takk!
Posted: 20/10-2010 20:00
by Gommle
http://www.mathworks.com/help/techdoc/ref/catch.html
Å "fange" feilen er en måte.
En annen er å bruke exist()
Posted: 20/10-2010 20:26
by Hartvix
Takk for svaret.
Men du har ikke en litt mindre avansert måte og gjøre dette på?
V.h.a. if, for eller while løkker feks. Det er nemlig rundt der vi er i pensum:)
Posted: 20/10-2010 21:00
by Gustav
Det enkleste jeg kommer på er at du i listen l legger til et nytt element som du er sikker på at ikke befinner seg i listen fra før. F.eks. hvis l består av tall kan du legge til en boolsk variabel, f.eks. False. I python vil koden dermed bli
Code: Select all
def antall(l):
l.append(False) #Legg til False på slutten av lista
n=0
while l[n]!=False:
n+=1
return n
Posted: 20/10-2010 21:18
by Hartvix
Det var jo en kjempegod idé!
Passet meg perfekt. Eneste er at da ville "false" bli lagt til som 0, så hvis listen allerede inneholdt 0 ville dette blitt et problem, så jeg la heller til elementet 'lol' og satser på at ingen vil ha det med i en liste.
Tusen takk for hjelpa!
Posted: 21/10-2010 01:30
by Gommle
Du går på NTNU ja?
Enkleste metoden hittil:
for x = liste
n = n + 1
end
At jeg ikke tenkte på det med en gang :p
Posted: 21/10-2010 08:14
by drgz
skal du telle antall unike elementer, og hva er det dere har lov til å benytte av innebygde funksjoner?
ellers er nok plutarco sin løsning den enkleste uten å benytte seg av innebygde funksjoner.
Posted: 21/10-2010 08:32
by drgz
Gommle wrote:Du går på NTNU ja?
Enkleste metoden hittil:
for x = liste
n = n + 1
end
At jeg ikke tenkte på det med en gang :p
Det der gir ikke helt mening

Posted: 21/10-2010 09:24
by Gustav
Gommle har jo rett. I Python:
Code: Select all
def antall(l):
n=0
for x in l: n+=1
return n
Uvant å ikke bruke innebygde funksjoner. Vanligvis ville man jo bare skrevet
Det fine med python er at syntaksen er så intuitiv;)
Posted: 21/10-2010 09:30
by drgz
plutarco wrote:Gommle har jo rett. I Python:
Code: Select all
def antall(l):
n=0
for x in l: n+=1
return n
Uvant å ikke bruke innebygde funksjoner. Vanligvis ville man jo bare skrevet
Det fine med python er at syntaksen er så intuitiv;)
Det hadde han visst. Prøvde først med noen vektorer, og det gav ikke noe fornuftig svar, men nå med et enklere eksempel funket det. Snodig. For ta det på min kappe.
Ellers enig i at det er uvant å ikke bruke innebygde funksjoner, gjør jo livet så utrolig mye enklere
*Edit:
Lot meg lure av at lista/vektoren må være 1xN for at metoden hans skal fungere, og ikke Nx1 som jeg vanligvis pleier å lage de selv.