Side 1 av 1

Problemstilling

Lagt inn: 16/06-2011 19:41
av Arctagon
Jeg er ikke sikker på hvilket felt dette omhandler, så jeg beklager den lite informerende tittelen. Uansett, dette er ingen matematikkoppgave fra en bok, men derimot et praktisk problem jeg gjerne vil løse for å kunne kalkurere dens verdi.

Det starter med 20 sekunder som teller nedover. Hvert fjerde sekund vil det legges til to sekunder. Hvor lang tid tar det før denne 'telleren' når null? Jeg er litt usikker på hvilken fremgangsmetode som vil være optimal å bruke.

All hjelp er satt stor pris på.

Lagt inn: 16/06-2011 19:59
av Markonan
Er det nødvendig for deg å finne en analytisk løsning for det?

Her er et program i python som løser problemet for deg. (Bare bytt ut variabelen tid=20 med den verdien du vil teste).

For tid=20 får jeg 38 som svar.

Kode: Velg alt

tid = 20
legg = 0
teller = 0

while (tid > 0):
   teller = teller+1;
   legg = legg + 1;
   tid = tid-1;
   if(legg == 4):
      tid = tid+2;
      legg = 0;

print(teller);
(Utskrift av sekunder i nedtellingen der det legges til 2 sekunder. Funksjon ikke inkludert i programmet over.) :P

Kode: Velg alt

16
14
12
10
8
6
4
2
0
Edit:
Og da fikk jeg et spørsmål til deg. Den skal kanskje ikke legge til tid når nedtellingen når null, selv om det er på et av de "fjerde sekundene"? Da blir svaret i så fall 36.

Lagt inn: 16/06-2011 20:16
av Markonan
I tilfelle det riktige svaret skal være 36 og jeg ikke er her, så er dette programkoden for det:

Kode: Velg alt

tid = 20
legg = 0
teller = 0

while (tid > 0):
   teller = teller+1;
   legg = legg + 1;
   tid = tid-1;
   if(legg == 4 and tid > 0):
      tid = tid+2;
      legg = 0;

print(teller);

Lagt inn: 16/06-2011 21:08
av Arctagon
Markonan skrev:Er det nødvendig for deg å finne en analytisk løsning for det?
Det er så klart lett å komme fram til et riktig svar, men det er bare tungvint og tar tid. Derfor lurte jeg på om det var en lett måte å regne det ut på matematisk, men jeg ville skjønt det om det ikke var mulig, ettersom mengden gjenstående sekunder som det legges to sekunder til forandrer seg hele tiden.
Her er et program i python som løser problemet for deg. (Bare bytt ut variabelen tid=20 med den verdien du vil teste).

For tid=20 får jeg 38 som svar.

Kode: Velg alt

tid = 20
legg = 0
teller = 0

while (tid > 0):
   teller = teller+1;
   legg = legg + 1;
   tid = tid-1;
   if(legg == 4):
      tid = tid+2;
      legg = 0;

print(teller);
Jeg er ikke familiær med Python, men ettersom programmeringsspråk har så mange likhetstrekk seg imellom, skjønner jeg hva som skjer.
Edit:
Og da fikk jeg et spørsmål til deg. Den skal kanskje ikke legge til tid når nedtellingen når null, selv om det er på et av de "fjerde sekundene"? Da blir svaret i så fall 36.
Når telleren er 0 så skal det ikke legges til 2, nei, så 36 er riktig. Det var det jeg også kom fram til gjennom den tungvinte metoden.

Hvilket program bruker du for å utføre kodesekvensen? Jeg kan eventuelt transkribere koden til Flash og utføre det der.

Lagt inn: 16/06-2011 21:27
av Markonan
Jeg kjører linux så jeg kan kompilere og kjøre filen med en kommando.

For actionscript blir det noe sånt:

Kode: Velg alt

var tid = 20;
var legg = 0;
var teller = 0;

while (tid > 0) {
   teller = teller+1;
   legg = legg+1;
   tid = tid-1;
   if(legg == 4 && tid > 0) {
      tid = tid+2;
      legg = 0;
   }
}
trace(teller);
Tror det skal funke direkte.

Lagt inn: 16/06-2011 22:48
av Arctagon
Da slapp jeg å transkibere det selv også. Og det fungerte som en drøm. Tusen takk!

Hvordan fikk du til å skrive ut sekunder i nedtellingen der det legges til to sekunder? Jeg kan fjerne 'trace (teller)' og legge inn 'trace (tid)' i if-en, men da regner den med 18 også av en eller annen grunn.

Kode: Velg alt

18
16
14
12
10
8
6
4

Lagt inn: 16/06-2011 22:58
av Markonan
Du har tenkt riktig.

Bare legg den inn før tid = tid+2; :wink:

Lagt inn: 16/06-2011 23:24
av Arctagon
Så klart, jeg tenkte problemet kanskje var at den la til 2 før den skrev ut tiden, men jeg overså det faktum at den utfører i rekkefølge nedover. Takk for hjelpen!

Lagt inn: 17/06-2011 12:42
av Integralen
Det tar ikke 36 sekunder, det tar 71 sekunder!

20
19
18
17

+2

19
18
17
16

+2

18
17
16
15

+2

17
16
15
14

+2

16
15
14
13

+2

15
14
13
12

+2

14
13
12
11

+2

13
12
11
10

+2

12
11
10
09

+2

11
10
09
08

+2

10
09
08
07

+2

09
08
07
06

+2

08
07
06
05

+2

07
06
05
04

+2

06
05
04
03

+2

05
04
03
02

+2

04
03
02
01

+2

03
02
01
00

Der 20 er den 1.sekund og 01 den 71.sekund.Total 71 sekunder.