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: