12 svar
1362 visningar
barcode är nöjd med hjälpen
barcode 162 – Avstängd
Postad: 27 jun 2017 18:36

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. 

barcode 162 – Avstängd
Postad: 27 jun 2017 18:48

Det är inte vacker, men tror att jag lyckades? 

Stokastisk 3597 – Fd. Medlem
Postad: 27 jun 2017 18:50 Redigerad: 27 jun 2017 18:50

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?

barcode 162 – Avstängd
Postad: 27 jun 2017 19:13 Redigerad: 27 jun 2017 19:14
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.

barcode 162 – Avstängd
Postad: 27 jun 2017 19:19

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.

Stokastisk 3597 – Fd. Medlem
Postad: 27 jun 2017 19:21
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.

barcode 162 – Avstängd
Postad: 27 jun 2017 19:26
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.

Stokastisk 3597 – Fd. Medlem
Postad: 27 jun 2017 19:34
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).

barcode 162 – Avstängd
Postad: 27 jun 2017 19:47 Redigerad: 27 jun 2017 19:50

Vad det så du menade ? Tog bort int uttagHundra också.

Stokastisk 3597 – Fd. Medlem
Postad: 27 jun 2017 19:51

Nästan, jag menade att int uttagF = ... ska vara

int uttagF = (int)(uttagHundra/500.0)*500;

int uttagH = uttagHundra - uttagF.

barcode 162 – Avstängd
Postad: 27 jun 2017 19:54

Okej tack, en fråga varför skriver du .../500.0? vad är för skillnad en att skriva .../500?

Stokastisk 3597 – Fd. Medlem
Postad: 27 jun 2017 19:59

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

barcode 162 – Avstängd
Postad: 27 jun 2017 20:01

Juste dom beskrev det i boken. Tack för påminnelsen ska ta med det i vidare arbete :). 

Svara Avbryt
Close