Java variabler
2.6 a) Skriv ett program för en uttagsautomat där man kan skriva in ett belopp, och som visar hur stort uttag man gjorde. Vi antar att automaten bara har hundralappar, så om man skriver till exempel 670 ska det stå:
Uttag: 700 kr
Det som jag har börjat med är
Då min tanke är att jag vill försöka göra en avrundning till det närmsta heltal. För jag vet att man kan avrunda upp t.ex 3,5 till 4. (då man lägger till 0,5). Tänkte om man kunde göra samma sak här? men får inte till det eftersom nu har jag redan ett heltal så då blir det fel.
Det är inte vacker, men tror att jag lyckades?
Kanske något sånt här
int uttag = (int)(helTala/100.0 + 0.5)*100;
Däremot så kan man undra om man vill göra en avrundning till närmsta hundratal, eller om man alltid ska avrunda uppåt?
Stokastisk skrev :Kanske något sånt här
int uttag = (int)(helTala/100.0 + 0.5)*100;
Däremot så kan man undra om man vill göra en avrundning till närmsta hundratal, eller om man alltid ska avrunda uppåt?
Det borde vara "till närmsta hundratal" tycker jag. För om man skriver in ett belopp på 2340 så ska den avrunda till hundratalet. I och med att dom har bara 100 hundralappar.
Det finns en följd uppgift till samma uppgift som lyder såhär
b) Det blir lite svårare om automaten även har 500-lappar. Utöka programmet i uppgift a så att automaten svarar så här istället (om man skriver in 670):
Uttag i 500-sedlar: 500 kr.
Uttag i 100-sedlar: 200 kr.
barcode skrev :Stokastisk skrev :Kanske något sånt här
int uttag = (int)(helTala/100.0 + 0.5)*100;
Däremot så kan man undra om man vill göra en avrundning till närmsta hundratal, eller om man alltid ska avrunda uppåt?
Det borde vara "till närmsta hundratal" tycker jag. För om man skriver in ett belopp på 2340 så ska den avrunda till hundratalet. I och med att dom har bara 100 hundralappar.
Ja, det blir ju helt okej att göra så. Men invändningen blir ju att om jag vill köpa något och ska ta ut pengar för inköpet, så vill jag inte få ut mindre pengar än vad jag förväntade mig. Jag menar alltså inte direkt att det är något fel att avrunda till närmsta hundratal, bara att frågeställningen kan tolkas på olika sätt.
Stokastisk skrev :barcode skrev :Stokastisk skrev :Kanske något sånt här
int uttag = (int)(helTala/100.0 + 0.5)*100;
Däremot så kan man undra om man vill göra en avrundning till närmsta hundratal, eller om man alltid ska avrunda uppåt?
Det borde vara "till närmsta hundratal" tycker jag. För om man skriver in ett belopp på 2340 så ska den avrunda till hundratalet. I och med att dom har bara 100 hundralappar.
Ja, det blir ju helt okej att göra så. Men invändningen blir ju att om jag vill köpa något och ska ta ut pengar för inköpet, så vill jag inte få ut mindre pengar än vad jag förväntade mig. Jag menar alltså inte direkt att det är något fel att avrunda till närmsta hundratal, bara att frågeställningen kan tolkas på olika sätt.
Ja absolut, tänkte också på det lite när jag läste frågan. Men i och med att man måste avrunda för finns bara 100 lappar så kommer man förlora pengar tyvärr.
barcode skrev :Det finns en följd uppgift till samma uppgift som lyder såhär
b) Det blir lite svårare om automaten även har 500-lappar. Utöka programmet i uppgift a så att automaten svarar så här istället (om man skriver in 670):
Uttag i 500-sedlar: 500 kr.
Uttag i 100-sedlar: 200 kr.
För att komma fram till hur många 500 lappar som ska tas ut så får du ta och först avrunda till hela hundratal, sedan dela detta med 500 (och avrunda nedåt). Så om du då har exempelvis 700 kr som ska tas ut så får du att pengarna i 500-sedlar blir (int)(700/500.0) * 500 och pengarna i 100-sedlar blir 700 - (pengarna i 500-sedlar).
Vad det så du menade ? Tog bort int uttagHundra också.
Nästan, jag menade att int uttagF = ... ska vara
int uttagF = (int)(uttagHundra/500.0)*500;
int uttagH = uttagHundra - uttagF.
Okej tack, en fråga varför skriver du .../500.0? vad är för skillnad en att skriva .../500?
Hmm, bra att du frågade det, för jag inser att det blev dumt i detta fall att skriva som jag gjorde. Det blir vettigare att skriva
int uttagF = (uttagHundra/500) * 500;
Men hursomhelst, skillnaden är att om man skriver /500 så kommer det att bli en heltalsdivision, resultatet är alltså ett heltal. Men om man skriver /500.0 så kommer resultatet vara en double, så resultatet är "vanlig" division.
För att ge några exempel så gäller det att
10/3 = 3,
10/3.0 = 3.333333...
7/10 = 0,
7/10.0 = 0.7
5/2 = 2
5/2.0 = 2.5
Juste dom beskrev det i boken. Tack för påminnelsen ska ta med det i vidare arbete :).