2016-02-29, 20:33
  #493
Medlem
matteyass avatar
Citat:
Ursprungligen postat av bigkjell85
Ja okej, det visste jag inte. Har testat och lagt till positionen för slutläget i sekvensen.

Jag kommer nu fram till längsta sekvensen, dess start-slut position och vilket nummer det gäller.

Jag vill ha samma information för alla siffror (0-9).

Min första tanke är att implementera for k = 0:9 någonstans?

Är det möjligt att ha for-loop inuti en annan for-loop?
Vill du lära dig en användbar sak inom programmering? Antag att du har en funktion som kan kolla sekvensen av 1or i en lista, och inget annat. Du har skrivit din funktion färdigt, och den gör det den ska. Sen vill du kunna använda den till att kolla andra tal. Går det att göra?

I MATLAB så visar det sig vara enkelt. Om du har en lista med tal, x, så kan du köra x == 3 så kommer du få tillbaka en lista som har en 0a på de platser som x inte har en 3a, och en 1a på de platser x har en 3a. Ett kort exempel:
Så om du har din funktion som kollar sekvenser av 1or så är det ganska enkelt att även göra en funktion som kollar sekvenser av 9or, eller 5or, eller varför inte 35or! (Funktioner kan använda andra funktioner, utan några större konstigheter.)

Det man kan ta ut av det här är att det lönar sig att skriva kod som går att återanvända; hur man gör det är något som kommer med erfarenhet. Från det här perspektivet blir det även ett exempel på "divide and conquer." Det kanske ser ut som att du har 10 olika problem om du ska kolla sekvenser av siffrorna [0..9], men här går det alltså att definiera ett basfall och sen "dela upp" dina till synes olika problem till flera instanser av samma bas-problem, vilket gör dom enkla att "erövra" med en enda kodsnutt. Det är inte riktigt så man brukar beskriva divide and conquer, men det är nära nog.

Just för den här uppgiften blir det inte sån stor kodskillnad att använda det här konceptet, men det blir kanske enklare att fundera på problemet på det här viset, samt kod som är återanvändbar är en bra vana att ha. Kan du slänga ihop något som klarar de här bitarna? Ditt egna förslag är nog enklare i det här fallet, så om du vill ha snabba resultat är det nog det som gäller. :)
Citera
2016-03-01, 01:08
  #494
Medlem
Zaxxons avatar
Citat:
Ursprungligen postat av matteyas
Vill du lära dig en användbar sak inom programmering?
Våga använda "goto Cleanup" i C++.
Citera
2016-03-01, 01:51
  #495
Medlem
matteyass avatar
Citat:
Ursprungligen postat av Zaxxon
Våga använda "goto Cleanup" i C++.
C++-funderingar! Kom inte här och skräms på det där viset. ^_^
Citera
2016-03-01, 18:37
  #496
Medlem
Quicksandts avatar
http://i.imgur.com/vCUxJuT.png
Behöver hjälp med denna uppgift. Är total nybörjare när det kommer till matlab.
Fråga 1 angående förarbete så kan man åtminstone börja med att plotta upp en graf antar jag.
Men får inte matlab att göra det när jag använder koden:
clear variables
close all
clc
x = 0:0.1:5;
y = ((1-exp(-x.^2))/(3*x.^2));
plot(x,y)

Resultatet blir endast en vit ruta.
Wolfs graf:
http://www.wolframalpha.com/input/?i=%281-e^%28-x^2%29%29%2F%283x^2%29

Hur skriver man förövrigt oändligheten i matlab?
__________________
Senast redigerad av Quicksandt 2016-03-01 kl. 18:41.
Citera
2016-03-01, 21:07
  #497
Medlem
QuantumFools avatar
Citat:
Ursprungligen postat av Quicksandt
http://i.imgur.com/vCUxJuT.png
Behöver hjälp med denna uppgift. Är total nybörjare när det kommer till matlab.
Fråga 1 angående förarbete så kan man åtminstone börja med att plotta upp en graf antar jag.
Men får inte matlab att göra det när jag använder koden:
clear variables
close all
clc
x = 0:0.1:5;
y = ((1-exp(-x.^2))/(3*x.^2));
plot(x,y)

Resultatet blir endast en vit ruta.
Wolfs graf:
http://www.wolframalpha.com/input/?i=%281-e^%28-x^2%29%29%2F%283x^2%29

Hur skriver man förövrigt oändligheten i matlab?
Du glömde punkten innan divisionstecknet. x är ju en vektor vilket du observerade genom att skriva .^ istället för ^ vid upphöjningarna, men du måste även skriva ./ när du dividerar.
Citera
2016-03-01, 21:52
  #498
Medlem
matteyass avatar
Citat:
Ursprungligen postat av Quicksandt
Hur skriver man förövrigt oändligheten i matlab?
Inf. Notera att inf har stöd för jämförelseoperatorer och signum, så e.g. -inf < inf beter sig som man tänker intuitivt. Nan (not a number) returnerar false på alla comparisons (ja, även nan == nan).

>> sign(-inf)
ans =
-1

>> inf > realmax && -inf < inf
ans =
1

>> k = nan; k == [nan, inf, 0, k]
ans =
0 0 0 0

En sak till, inf beter sig ganska bra med operatorer också; från en programmerares perspektiv. Inf+2 = inf, osv. Inf-inf ger nan däremot, värt att tänka på kanske. Det är lite lustigt beteende egentligen, med tanke på att 1 / 0 ger inf[!], fast man ska förstås försöka undvika nåt som leder till såna fall!

[!] Nan hade mest troligt varit att föredra där, hellre felvärde än att den ger ut nåt som beter sig som en siffra, svårare spåra "tysta" fel. Eftersom MATLAB är baserat på vektorisering så är det säkert det man har fokuserat på; även om det blir en 1/0 för något element i vektorn så ska det inte smälla för hela operationen.
__________________
Senast redigerad av matteyas 2016-03-01 kl. 22:08.
Citera
2016-03-02, 11:12
  #499
Medlem
Citat:
Ursprungligen postat av matteyas
Vill du lära dig en användbar sak inom programmering? Antag att du har en funktion som kan kolla sekvensen av 1or i en lista, och inget annat. Du har skrivit din funktion färdigt, och den gör det den ska. Sen vill du kunna använda den till att kolla andra tal. Går det att göra?


Så nu skulle jag kunna bygga ut mitt huvudprogram? Jag vill ju få utskrivet längsta sekvensen för alla tal.

Att använda en loop i huvudprogrammet, är det en bra idé?

Jag fick ett tips förut att låta longest innehålla 10 elem, ett för antal 0: or, ett för antal 1: or etc.
(x(i) är ju 0, 1, 2, ... 9), longest(x(i)+1) = len ...

Vad nu det betyder?
__________________
Senast redigerad av bigkjell85 2016-03-02 kl. 11:19.
Citera
2016-03-02, 23:34
  #500
Medlem
Citat:
Ursprungligen postat av bigkjell85
Så nu skulle jag kunna bygga ut mitt huvudprogram? Jag vill ju få utskrivet längsta sekvensen för alla tal.

Att använda en loop i huvudprogrammet, är det en bra idé?

Jag fick ett tips förut att låta longest innehålla 10 elem, ett för antal 0: or, ett för antal 1: or etc.
(x(i) är ju 0, 1, 2, ... 9), longest(x(i)+1) = len ...

Vad nu det betyder?
Ja, du kan bygga ut ditt program till att hitta alla sekvenser genom att loopa över talen 0 till 9 och leta efter den längsta sekvensen av varje.

Att låta longest vara en vektor är ett bra sätt att svara kompaktare än att skapa en ny variabel för varje siffra, så länge du har koll på bokföringen av svaren så de hamnar på rätt index.
Bra att veta om matlab är att vektorer börjar indexeras från 1 och inte från 0 vilket är standard inom de flesta programmeringsspråk.
Citera
2016-03-03, 10:09
  #501
Medlem
Citat:
Ursprungligen postat av Linara
Ja, du kan bygga ut ditt program till att hitta alla sekvenser genom att loopa över talen 0 till 9 och leta efter den längsta sekvensen av varje.

Att låta longest vara en vektor är ett bra sätt att svara kompaktare än att skapa en ny variabel för varje siffra, så länge du har koll på bokföringen av svaren så de hamnar på rätt index.
Bra att veta om matlab är att vektorer börjar indexeras från 1 och inte från 0 vilket är standard inom de flesta programmeringsspråk.

Jag är inte riktigt säker på att jag förstår resonemanget i sista stycket.
Just nu har jag longest som utparameter i funktionen och deklarerat den


Ska jag göra longest till en vektor i mitt huvudprogram?
Förvirrande.
Citera
2016-03-03, 11:00
  #502
Medlem
Sen har jag börjat på ett nytt klurigt problem.

Till en början så har jag ett ord eller mening. Typ 'EXEMPEL'. Jag vill hitta dubbletter av bokstäver och radera dom. Till slut är det tänkt att jag ska lyckas göra en matris med ordet/meningen och komplettera med resterande bokstäver i alfabetet, dock är det viktigt att inga dubbletter får finnas i matrisen.


Så hade jag tänkt ungefär på första problemet. Men det funkar ej. Vad gör jag för fel?
Citera
2016-03-03, 12:44
  #503
Medlem
Citat:
Ursprungligen postat av bigkjell85
Jag är inte riktigt säker på att jag förstår resonemanget i sista stycket.
Just nu har jag longest som utparameter i funktionen och deklarerat den


Ska jag göra longest till en vektor i mitt huvudprogram?
Förvirrande.
Ja,enligt förslaget du fick.
Då kan du t.ex initiera longest som:

longest= zeros(10);

Initierar en radvektor med 10 positioner och nollor i alla.
Då kan du låta longest(1) svara mot siffran 0 och lagra hur lång längsta sekvensen av nollor är och longest(2) svara mot siffran 1 och lagra längsta sekvensen av ettor där. (Du kan självklart även välja att låta indexet svara mot andra siffror, t.ex att longest(1) svarar mot siffran 1 och lagrar längden på längsta sekvensen av ettor så länge du har koll på din indexering)

När du sedan loopar över siffrorna 0:9 så fyller du på längden på längsta sekvens för respektive siffra i vektorn.

På samma sätt kan du göra med start=zeros(10) och slut=zeros(10) och lagra dem för respektive siffra i samma position i respektive vektor.
Citera
2016-03-03, 15:22
  #504
Medlem
Citat:
Ursprungligen postat av bigkjell85
Sen har jag börjat på ett nytt klurigt problem.

Till en början så har jag ett ord eller mening. Typ 'EXEMPEL'. Jag vill hitta dubbletter av bokstäver och radera dom. Till slut är det tänkt att jag ska lyckas göra en matris med ordet/meningen och komplettera med resterande bokstäver i alfabetet, dock är det viktigt att inga dubbletter får finnas i matrisen.


Så hade jag tänkt ungefär på första problemet. Men det funkar ej. Vad gör jag för fel?
Du stavar fel, i rad 1 och 2 skriver du length olika.

Det du vill göra i steg 1 finns redan inbyggt som funktion i matlab, om det är ok med en sorterad lista i bokstavsordning. Ta en titt på kommandot unique()

http://se.mathworks.com/help/matlab/ref/unique.html?requestedDomain=www.mathworks.com

Om det är en uppgift att skriva din egen lösning på det så är det naturligvis inte intressant med matlabs egna funktion, men om du bara vill ha unika element som ett delsteg i något annat och det inte finns krav på hur du skall göra det så är det enklare att ta genvägen via det som redan finns
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in