9 svar
119 visningar
mekatronik behöver inte mer hjälp
mekatronik 625
Postad: 21 aug 2022 13:07 Redigerad: 21 aug 2022 13:10

typedef structar, beräkna tidsskillnad

Hej, jag sitter med en uppgift där man skall ställa upp en struct och beräkna tidsskillnaden mellan end och begin (två olika tider). Det jag inte riktigt förstår är följande steg i lösningen:

Förstår inte varför läraren valt att addera 60 sekunder och sen tar minutes--?

Finns det kanske något bättre sätt att skriva denna void funktion på? Det verkar väldigt komplicerat att göra såhär för att skriva en funktion som beräknar differens.

 

Väldigt konstig syntax när man kan skriva end->seconds += 60; istället....

Bubo 7347
Postad: 21 aug 2022 13:23

Du kan ju räkna igenom diffen mellan 2min52s och 4min20s.

Då blir det nog tydligare vilket problem de här kodraderna löser. Man kan lösa det på olika sätt, men här har vi ett sätt som fungerar.

Bubo 7347
Postad: 21 aug 2022 13:24
mekatronik skrev:när man kan skriva end->seconds += 60; istället....

Ja, det hade ju varit snyggt på den raden.

mekatronik 625
Postad: 22 aug 2022 14:21
Bubo skrev:

Du kan ju räkna igenom diffen mellan 2min52s och 4min20s.

Då blir det nog tydligare vilket problem de här kodraderna löser. Man kan lösa det på olika sätt, men här har vi ett sätt som fungerar.

Hej,

 

Då förstår jag, lite otydligt men jag kollade igenom lite exempel online. Lite svårt att förstå logiken fortfarande men kan nog memorisera metoden.

 

Tack!

Bubo 7347
Postad: 22 aug 2022 15:00

Man ändrar t.ex. 12 min 3 s till 11 min 63 s om man behöver dra bort fyra sekunder eller mer.

Fermatrix 7841 – Fd. Medlem
Postad: 22 aug 2022 15:14

ite svårt att förstå logiken fortfarande men kan nog memorisera metoden.

Nej, du ska absolut inte blint memorera metoden. Du ska se till att du förstår varför. Bubo har gett en förklaring och ett exempel du kan prova. Om du inte förstår metoden så kommer du sannolikt inte förstå något liknande. Försök göra det Bubo tipas om och om du inte kan förstå problemet så får vi försöka visa/förklara djupare eller på ett annat sätt. Men att ge upp tycker jag inte du skall göra!

mekatronik 625
Postad: 22 aug 2022 18:11
Bubo skrev:

Man ändrar t.ex. 12 min 3 s till 11 min 63 s om man behöver dra bort fyra sekunder eller mer.

Jaha okej, men är det inte lite onödigt att göra detta om man använder #include <time.h> i koden?

Bubo 7347
Postad: 22 aug 2022 18:27

Det kanske det är. Jag vet inte vad time.h innehåller.

anders_k 237
Postad: 22 aug 2022 19:28

Det är precis som du skulle ha gjort med papper och penna.

1 minut är 60 sekunder. 1 timme 60 min

Så om du har 2m32s och vill dra ifrån 1m34s eftersom 32s är mindre än 34s så får du "låna" 1 minut.

if (end->seconds < begin->seconds) {
  end->seconds = end->seconds + 60;
  end->minutes--;
}

dvs 2m32 blir 1m92s och sedan kan du subtrahera 1m34s så får du kvar 58s

samma princip gäller förstås för timmar också.

Ett annat alternativ vore att göra om alla tiderna till sekunder, subtrahera och sedan omvandla tillbaks. Det görs mycket i time.h

2m32 - 1m34s = 152s - 94s = 58s

I riktig kod kör man med funktioner från time.h som t.ex.

double difftime( time_t time_end, time_t time_beg );
mekatronik 625
Postad: 22 aug 2022 21:54
anders_k skrev:

Det är precis som du skulle ha gjort med papper och penna.

1 minut är 60 sekunder. 1 timme 60 min

Så om du har 2m32s och vill dra ifrån 1m34s eftersom 32s är mindre än 34s så får du "låna" 1 minut.

if (end->seconds < begin->seconds) {
  end->seconds = end->seconds + 60;
  end->minutes--;
}

dvs 2m32 blir 1m92s och sedan kan du subtrahera 1m34s så får du kvar 58s

samma princip gäller förstås för timmar också.

Ett annat alternativ vore att göra om alla tiderna till sekunder, subtrahera och sedan omvandla tillbaks. Det görs mycket i time.h

2m32 - 1m34s = 152s - 94s = 58s

I riktig kod kör man med funktioner från time.h som t.ex.

double difftime( time_t time_end, time_t time_beg );

Tack så mycket, nu förstod jag hur logiken gick till där! Det var också som jag misstänkte att man också kunde använda time.h för att underlätta.

 

Tack!

Svara
Close