August 4, 2005
Jag skulle behöva hjälp med en C++ uppgift, för ett skolarbete.
Men jag vet inte hur jag ska göra...
man ska skriva in ett antal sekunder, och sen visa det i
dagar, timmar, minuter och sekunder.
Ska se ut t.ex. så här :
Antal Sekunder : 31600000.
31600000 sekunder = 365 dagar, 46 minuter, 40 sekunder.
och då ska man använda symboliska konstanter för att representera antalet timmar på en dag, antal minuter på en timme osv.
Men jag vet inte hur man gör dom symboliska konstanterna.
Om någon vet, skriv gärna då 🙂
February 5, 2004
May 8, 2001
Kombinera modulus som tidigare inlägg tipsade om med heltalsdivision:
int resultat = (int)tal1/tal2;
Exempel: tal1=10, tal2=3, resultat=3
Det man gör med (int) är en explicit typomvandling vilket helt enkelt betyder att man berättar för kompilatorn att man är medveten om att man kan förlora information men skiter i det. Om man inte gör typomvandligen klagar kompilatorn eftersom resultatetvaret ju kan bli ett flyttal vilket inte passar så bra att lagra i en int... Blir resultatet ett flyttal så kapas decimaldelen
OBS! Jag har inte testat koden så jag kan inte garantera att den är 100% felfri trots att det bara är en rad. Jag har inte kodat C/C++ på ett bra tag.
Desktop: Gigabyte GA-MA770-DS3 | AMD Phenom II 955 BE | 8GB PC6400 | Samsung 1TB + 500GB | Powercolor HD3870
3DMark 2006: 11932 3DMark Vantage: P5137
Laptop: Macbook Pro 2012 | 8GB | Samsung 830 128GB SSD
HTPC: Mac Mini | 3GB | 500GB
May 8, 2001
ninne wrote: Ok, jag får till allt nu, men ända problemet jag har nu är att, jag får rätt antal dagar, men sen får jag flera tusen timmar och minuter. och nu har jag ingen aning igen.
hur ska göra för att inte få ut över 60 ??
Verkar som om du inte alls får till allt... 😉 Visa vad du gjort så kan jag kanske hjälp dig utan att lösa hela uppgiften åt dig.
Desktop: Gigabyte GA-MA770-DS3 | AMD Phenom II 955 BE | 8GB PC6400 | Samsung 1TB + 500GB | Powercolor HD3870
3DMark 2006: 11932 3DMark Vantage: P5137
Laptop: Macbook Pro 2012 | 8GB | Samsung 830 128GB SSD
HTPC: Mac Mini | 3GB | 500GB
August 4, 2005
const int SEC_IN_MIN = 60;
const int MIN_IN_HOUR = 60;
const int HOUR_IN_DAY = 24;
long sek, min, hour, day;
cout << "Antal sekunder :";
cin >> sek;
min = sek / SEC_IN_MIN % sek;
hour = min / MIN_IN_HOUR % min ;
day = hour / HOUR_IN_DAY % hour ;
cout<<sek<<" sekunder = "<<day<<" dagar, "<<hour<<" timmar, "<<min<<" minuter."<<endl << endl;
Jag vet inte om jag är helt ute och cyklar, men har fått till dagar iaf :S.
Och har kanske gjort lite onödiga grejor i den :), men det var bara medans
jag testade på lite.
May 8, 2001
Ok, här kommer lite tips:
1. Ordningen är bra, minuter, timmar, dagar och sist sek (sek har du har hoppat över i din kod)
2. Du räknar fel, om man har t.ex. 3661 sekunder (1 tim 1 min 1 sek) och vill räkna ut antal minuter så börjar du rätt sek / SEC_IN_MIN (61 min) men sen använder du sek som modulus vilket är fel... Lösningen får du räkna ut själv 😉
3. Ett stort fel är att du räkar hela vägen. Om du använder modulus i samma sats som divisionen så får du rätt antal minuter men du kan inte använda dessa i nästa steg när du ska räkna ut antal timmar eftersom du redan (när du gör rätt) har skalat av min över 60 (<- tips). När du då använder minuterna (1) så är det svårt att få några timmar från det. 1/60 är ju noll. Dock funkar 61 / 60 bättre vilket ju bli ett. Det du kan göra är att först göra heltalsdivisionen för alla värden (ej sek) för att efteråt använda modulus (behövs ej för dagar eftersom det är den största enheten).
Ett alternativ till att dela upp det är ju att alltid utgå från sekunder: t.ex. hour = sek / SEC_IN_MIN / MIN_IN_HOUR %
Hoppas att du förstår något av detta (och inte blir irriterad för att jag inte ger hela svaret på en gång)!?
Desktop: Gigabyte GA-MA770-DS3 | AMD Phenom II 955 BE | 8GB PC6400 | Samsung 1TB + 500GB | Powercolor HD3870
3DMark 2006: 11932 3DMark Vantage: P5137
Laptop: Macbook Pro 2012 | 8GB | Samsung 830 128GB SSD
HTPC: Mac Mini | 3GB | 500GB
1 Guest(s)