Ю м а б б взи ви а бнви г × а ж

NADA, KTH, Henrik Eriksson och Erik Forslin
2D1343 Datalogi for E

Andrad:
20001214
J 164
Vaxel med minst antal mynt och
sedlar
Varudeklaration:
Hantering av datastrukturer i form av vektorer/poster. Filhantering.
Nar man betalar i en aar brukar det allt som oftast handa att man f
ar vaxel tillbaka. Efter
n
agra inkop brukar mynten och sedlarna kannas tunga i pl
anboken och man borjar undra om
man verkligen behover s
a har mycket sedlar och mynt. Din uppgift blir att skriva ett program
som givet en summa pengar beraknar hur man bildar denna summan med minst antal mynt
och sedlar. Tyvarr ar det ju s
a att de mynt och sedlar som nns tillgangliga varierar over
tiden. Programmet m
aste allts
a kunna lasa in nu aktuella myntslag och utnyttja dessa. For
att forenkla programmeringen n
agot s
a antar vi att alla myntslag ar ett helt antal kronor.
Ditt program skall:
1. Lasa in data om myntslag fr
an en l. P
a len nns forst en kommentarrad, darefter har
varje myntslag tv
a rader. P
a den forsta raden st
ar myntets/sedelns namn och p
a den
andra vardet. Utseende:
{Kommentarrad. De foljande raderna innehaller namn och v
arden}
enkrona
1
tvakrona
2
...
2. S
a lange anvandaren vill kora, fr
aga efter en summa och berakna minsta antal mynt och
sedlar som behovs for att f
a ihop den summan.
Vad heter filen med myntdata:
mynt.txt
Vilken summa onskas (Bryt med tomrad)?
3
Kombination med minst antal mynt och sedlar: 1 enkrona + 1 tv
akrona
Vilken summa onskas (Bryt med tomrad)?
11
Kombination med minst antal mynt och sedlar: 1 enkrona + 1 tia
Vilken summa onskas (Bryt med tomrad)?
Det g
ar inte att losa detta problem genom att hela tiden valja det storsta myntet som ryms
inom summan. Om vi har mynten tiokrona, sexkrona och enkrona och vill bilda summan arton
s
a ar ju tre sexkronor den basta losningen (battre an en tia, en sexkrona och tv
a enkronor).
Du f
ar gora tv
a antaganden for att forenkla programmeringen. Dels f
ar du anta att det
aldrig nns mer an 20 olika slags mynt och sedlar (det kan naturligtvis nnas farre) och
dels f
ar du anta att de st
ar i stigande vardeordning i inlen.
Tips:
Du kan valja att lagra data antingen i en vektor av poster eller i ett antal vektorer (det g
ar
bra att anvanda lankad lagring ocks
a). Beskrivningen nedan anvander sig av en vektor av
poster. Studera gur 1. I guren nns ritat en vektor som best
ar av poster. En post best
ar
av: namn=namnet p
a myntet/sedeln, vaerde=vardet i kronor, max=maximal antal mynt
av denna sort som kan anvandas for att f
a ihop en viss summa, antal=nuvarande antal,
baestAntal=antal mynt av denna sort i den hittills basta kombinationen.
Borja med att lasa in namn och varde f
ar de olika mynten och sedlarna i en procedur,
lagra dessa och skriv ut de inlasta vardena. Glom inte bort att du m
aste h
alla reda p
a
hur m
anga olika myntslag du laser in. Du f
ar sjalv skriva inlen, men vid redovisningen
ska en godtycklig inl p
a ratt format fungera.
En rimligt snabb losning f
ar man om man anvander rekursion och sparar alla resultat
i en vektor. Om man t ex har vardena enl nedan och ska n
a 30, undersoker man forst
hur man kan f
a 29 (=30-1), 20 (=30-10) och 5 (=30-25) p
a basta satt. Man inser efter
litet funderande att m
anga resultat kommer att behova beraknas era g
anger. T ex leder
b
ade 29 och 5 har till att man beraknar antalet satt att f
a 4 (29-25 resp 5-1) i nasta
steg. Darfor ar det bra att ha en vektor, i vilken man lagrar antal steg som kravs for
att f
a varje summa, nar den ar utraknad. Man bor ocks
a lagra hur summan n
as. Nar en
viss summa soks, tittar programmet allts
a forst i vektorn, om den ar utraknad, annars
raknar det ut den och lagger resultatet p
a ratt plats, forutom att det anvander det.
namn: enkrona
namn: tia
namn: tjugofemma
vaerde: 1
vaerde: 10
vaerde: 25
max: 15
max: 3
max: 1
antal: 3
antal: 0
antal: 0
baestAntal: 0
baestAntal: 3
baestAntal: 0
Figur 2: En mojlig datastruktur for problemet
Om man laser in b
ade singular- och pluralform for myntets namn kan man
gora utskriften lite snyggare.
Extrauppgift: