---
title: "Växel till en kassa - ännu ett enkelt problem"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/172136-växel-till-en-kassa-ännu-ett-enkelt-problem"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "enrosabanan"
published: "2008-06-11T15:50:12.000Z"
updated: "2008-06-13T06:57:49.000Z"
replies: 16
views: 2981
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/172136-växel-till-en-kassa-ännu-ett-enkelt-problem"
---

# Växel till en kassa - ännu ett enkelt problem

## #1 — enrosabanan, 2008-06-11T15:50Z

Nu behöver jag lite hjälp här igen av någon vänlig själ. 

Jag har gjort ett program som registrerar köp av en kund, problemet handlar om växeln. Nu visas växeln bara i hur mycket som ska ges tillbaka till kunden men programmet ska skriva ut hur många 500, 100, 50, 20, 10, 5 och 1 lappar/kronor som kunden ska ha tillbaka med. Jag har inte en aning om hur jag ska göra detta, ni behöver ju inte skriva ner exakt hur koden ska se ut utan till en början räcker det med att ni ger mig lite råd och hjälp. 

Tack!

Permalänk: https://www.webforum.nu/p/172136

## #2 — Ledel, 2008-06-11T16:31Z

Säg att växeln anges av v, så är det enklaste att:
Är v \>= \[högsta växelbelopp\] ?
    I så fall, ger v / \[högsta växelbelopp\] det antalet sedlar av den typen kunden skall ha. Dra sedan bort \[högsta växelbelopp\] \* antal från v.
Sen fortsätter du tills v == 0. Lämpligtvis i en loop, och alla belopp i en fin array.
Det är min idé, vet inte om den är bäst, men jag hade gjort så!

Edit: Tänkte inte alls på vad jag skrev när jag förklarade verkar det som..

Permalänk: https://www.webforum.nu/p/2117735

## #3 — colione, 2008-06-11T20:13Z

Ahh, typisk skoluppgift. Fick precis likadan fast i Java när jag pluggade. Du bör ha ganska bra exempel på tänket bakom i din kursbok. Om inte så borde era kursledare kunna vara väldigt behjälplig.

Permalänk: https://www.webforum.nu/p/2117767

## #4 — HiDensity, 2008-06-11T20:19Z

Jag hade samma uppgift i en C++kurs för ett par år sen.
Jag gillar inte att ge färdiga svar.. så jag klistrar bara in en bit av koden så du ser idén.. 

```
    int kostar;
    int betalade;

    cout << "Kostar: ";
    cin >> kostar;
    cout << "Betalade: ";
    cin >> betalade;
    
    int tillbaka = betalade - kostar; //beräkna summa som ska tillbaka

    int hundra = tillbaka / 100; //antal hundralappar
    tillbaka = tillbaka % 100; //rest
    int femtio = tillbaka / 50;
    tillbaka = tillbaka % 50;
```

%-tecknet kallas [modulus](http://en.wikipedia.org/wiki/Modulo_operation) och "drar ifrån" så många hela tal som går från det första talet. 500 % 100 ger resten 0 tex.  501 % 100 ger resten 1. 499 % 100 ger resten 99.

Permalänk: https://www.webforum.nu/p/2117768

## #5 — enrosabanan, 2008-06-12T00:32Z

Är det samma tänk i C# som C++? 
Det är alltså i C# jag ska göra det.

Permalänk: https://www.webforum.nu/p/2117789

## #6 — HiDensity, 2008-06-12T05:59Z

> **enrosabanan skrev:**
>
> Är det samma tänk i C# som C++? 
> Det är alltså i C# jag ska göra det.

Det här är grundmatte, det är samma tänk i alla språk.

Permalänk: https://www.webforum.nu/p/2117793

## #7 — Pedda, 2008-06-12T06:33Z

> **enrosabanan skrev:**
>
> Är det samma tänk i C# som C++? 
> Det är alltså i C# jag ska göra det.

C# använder också % tecknet som modulus.
Så HiDensity's exempel går nästan att använda rakt av till C#

Exempel i C#

```
int betalade, pris, tillbaka, resultat;

betalade = 1000;
pris = 511;
tillbaka = betalade - pris;

resultat = tillbaka / 500;
Console.WriteLine("Antal 500 lappar: {0}", resultat);
tillbaka = tillbaka % 500;

resultat = tillbaka / 100;
Console.WriteLine("Antal 100 lappar: {0}", resultat);
tillbaka = tillbaka % 100;

resultat = tillbaka / 50;
Console.WriteLine("Antal 50 lappar: {0}", resultat);
tillbaka = tillbaka % 50;

// osv.....
```

Permalänk: https://www.webforum.nu/p/2117797

## #8 — enrosabanan, 2008-06-12T07:10Z

Annars kanske detta går att använda? Vet inte riktigt hur, hehe, jag är inte så duktig på sånt här. Hittade i alla fall detta i några lektionsanteckningar:

> using System;
> using System.Collections.Generic;
> using System.ComponentModel;
> using System.Data;
> using System.Drawing;
> using System.Text;
> using System.Windows.Forms;
> 
> namespace Array
> {
>     public partial class Form1 : Form
>     {
>         public Form1()
>         {
>             InitializeComponent();
>         }
> 
>         private const int antal = 15;
>         private int\[\] talLista = new int\[antal + 1\];
> 
>         private int i = 0;
> 
>        
> 
>         private void btnAddValue_Click(object sender, EventArgs e)
>         {
>             talLista *\= Convert.ToInt32(txtValue.Text);
>             i++; 
>             txtValue.Text = "";
>             listBox1.Items.Clear();
>             for (int j = 0; j \< antal; j++)
>             {
>                 listBox1.Items.Add("talista\[" + j + "\]= " + talLista\[j\].ToString()); 
>             }
>             
>             txtValue.Focus();
>         }
> }*

Permalänk: https://www.webforum.nu/p/2117799

## #9 — Pedda, 2008-06-12T07:16Z

Exemplet där är hur du skapar en array som du fyller med summor från en textbox och sen visar i en listbox, så det har du inte någon större nytta av i din kassaberäkning.

Permalänk: https://www.webforum.nu/p/2117800

## #10 — enrosabanan, 2008-06-12T07:23Z

Jag vet inte riktigt vad jag gör för fel med mitt program men det funkar inte nu i alla fall att få fram hur många lappar/kronor man ska få tillbaka. Lägger in hela koden inom klickeventet så du/ni kan bilda er en uppfattning om hur programmet ser ut. (bry er inte om mina kommentarer i koden, säkert jättekonstiga kommentarer men jag är inget proffs)

> private void btnBerakna_Click(object sender, EventArgs e)
>         {
>             double summamoms, betala, moms, summavaxel, mottaget, tal1, tal3, tal2 = (0.01); //deklarerar double för uträkning av moms
>             try //testar kod inom try för felsökning
>             {
>                 moms = Convert.ToDouble(txtBoxMoms.Text); //konverterar till double och döper om till moms
>                 betala = Convert.ToDouble(txtBoxBetala.Text); //konverterar till double och döper om till betala
>                 tal1 = moms \* (tal2);
>                 tal3 = tal1 + 1;
>                 summamoms = (tal3) \* betala; //gångar ihop moms och betala och ger summan namnet summa
>                 lblMoms.Text = Convert.ToString(summamoms); //skriver ut summan och konverterar till string
> 
>                 mottaget = Convert.ToDouble(txtBoxMottaget.Text); //konverterar till double och döper om till mottaget
>                 summavaxel = mottaget - summamoms; //tar mottaget och subtraherar det med summamoms
>                 lblVaxel.Text = Convert.ToString(summavaxel); //skriver ut hur mycket växel kunden ska få tillbaka och konverterar int till string
> 
>                 double resultat;
> 
>                 resultat = Convert.ToDouble(lblTillbaka.Text);
> 
>                 resultat = summavaxel / 500;
>                 Console.WriteLine("Antal 500 lappar: {0}", resultat);
>                 summavaxel = summavaxel % 500;
> 
>                 resultat = summavaxel / 100;
>                 Console.WriteLine("Antal 100 lappar: {0}", resultat);
>                 summavaxel = summavaxel % 100;
> 
>                 resultat = summavaxel / 50;
>                 Console.WriteLine("Antal 50 lappar: {0}", resultat);
>                 summavaxel = summavaxel % 50;
> 
>                 resultat = summavaxel / 20;
>                 Console.WriteLine("Antal 20 lappar: {0}", resultat);
>                 summavaxel = summavaxel % 20;
> 
>                 resultat = summavaxel / 10;
>                 Console.WriteLine("Antal 10 kronor: {0}", resultat);
>                 summavaxel = summavaxel % 10;
> 
>                 resultat = summavaxel / 5;
>                 Console.WriteLine("Antal 5 kronor: {0}", resultat);
>                 summavaxel = summavaxel % 5;
> 
>                 resultat = summavaxel / 1;
>                 Console.WriteLine("Antal 1 kronor: {0}", resultat);
>                 summavaxel = summavaxel % 1;
> 
>             }
> 
>             catch //om fel inträffar sker det som står inom catch
>             {
>                 lblVaxel.Text = "Alla uppgifter måste fyllas i"; //text inom "" skrivs ut i lblVaxel.Text
>                 lblMoms.Text = "Alla uppgifter måste fyllas i"; //text inom "" skrivs ut i lblMoms.Text
>             }
>         }

Permalänk: https://www.webforum.nu/p/2117801

## #11 — Pedda, 2008-06-12T07:29Z

Mitt exempel var för en Konsoll application så du kan inte använda Console.WriteLine(......)
Jag antar att du har en richtextbox eller något sånt du ska skriva ut resultatet i så du får ändra dom raderna till något som passar din applikation.

Permalänk: https://www.webforum.nu/p/2117802

## #12 — enrosabanan, 2008-06-12T07:46Z

Kan man använda en label och lägga det i? Hur skriver man då? Det funkar inte för mig nu när jag testar...

Permalänk: https://www.webforum.nu/p/2117803

## #13 — Pedda, 2008-06-12T08:17Z

Exempel med label där du ska visa hur många 500 lappar:

```
lbl500Lappar.Text = String.Format("Antal 500 lappar: {0}", resultat);
```

Permalänk: https://www.webforum.nu/p/2117809

## #14 — enrosabanan, 2008-06-12T13:09Z

Finns det något gratisprogram till C#? Jag har lämnat in den datorn nu och har inte programmet. Så jag kan inte göra klart uppgiften. Ja, att det är ett skolarbete har väl alla redan förstått.

Permalänk: https://www.webforum.nu/p/2117856

## #15 — Ledel, 2008-06-12T14:16Z

På <http://www.microsoft.com/express/> kan du hitta, något begränsade, gratisversioner av Visual Studio.

Permalänk: https://www.webforum.nu/p/2117873

## #16 — enrosabanan, 2008-06-12T16:10Z

Så här ser det ut nu, men jag får exempelvis 1,35 500-lappar. Är det på grund av att jag använder double? Hur ska jag göra för att det ska fungera? Om jag bara byter till int fungerar det inte eftersom jag har haft double innan och var tvungen att ha double innan.

> private void btnBerakna_Click(object sender, EventArgs e)
>         {
>             double summamoms, betala, moms, summavaxel, mottaget, tal1, tal3, tal2 = (0.01); //deklarerar double för uträkning av moms
>             try //testar kod inom try för felsökning
>             {
>                 moms = Convert.ToDouble(txtBoxMoms.Text); //konverterar till double och döper om till moms
>                 betala = Convert.ToDouble(txtBoxBetala.Text); //konverterar till double och döper om till betala
>                 tal1 = moms \* (tal2);
>                 tal3 = tal1 + 1;
>                 summamoms = (tal3) \* betala; //gångar ihop moms och betala och ger summan namnet summa
>                 lblMoms.Text = Convert.ToString(summamoms); //skriver ut summan och konverterar till string
> 
>                 mottaget = Convert.ToDouble(txtBoxMottaget.Text); //konverterar till double och döper om till mottaget
>                 summavaxel = mottaget - summamoms; //tar mottaget och subtraherar det med summamoms
>                 lblVaxel.Text = Convert.ToString(summavaxel); //skriver ut hur mycket växel kunden ska få tillbaka och konverterar int till string
> 
>                 double resultat;
> 
>                 resultat = summavaxel / 500;
>                 lbl500lappar.Text = String.Format("Antal 500 lappar: {0}", resultat);
>                 summavaxel = summavaxel % 500;
> 
>                 resultat = summavaxel / 100;
>                 lbl100lappar.Text = String.Format("Antal 100 lappar: {0}", resultat);
>                 summavaxel = summavaxel % 100;
> 
>                 resultat = summavaxel / 50;
>                 lbl50lappar.Text = String.Format("Antal 50 lappar: {0}", resultat);
>                 summavaxel = summavaxel % 50;
> 
>                 resultat = summavaxel / 20;
>                 lbl20lappar.Text = String.Format("Antal 20 lappar: {0}", resultat);
>                 summavaxel = summavaxel % 20;
> 
>                 resultat = summavaxel / 10;
>                 lbl10kronor.Text = String.Format("Antal 10 kronor: {0}", resultat);
>                 summavaxel = summavaxel % 10;
> 
>                 resultat = summavaxel / 5;
>                 lbl5kronor.Text = String.Format("Antal 5 kronor: {0}", resultat);
>                 summavaxel = summavaxel % 5;
> 
>                 resultat = summavaxel / 1;
>                 lbl1kronor.Text = String.Format("Antal 1 kronor: {0}", resultat);
>                 summavaxel = summavaxel % 1;
>                  
> 
>             }
> 
>             catch //om fel inträffar sker det som står inom catch
>             {
>                 lblVaxel.Text = "Alla uppgifter måste fyllas i"; //text inom "" skrivs ut i lblVaxel.Text
>                 lblMoms.Text = "Alla uppgifter måste fyllas i"; //text inom "" skrivs ut i lblMoms.Text
>             }
>         }

Permalänk: https://www.webforum.nu/p/2117888

## #17 — Pedda, 2008-06-13T06:57Z

Ta en titt på klassen Math.
Där finns metoder för att göra beräkningar/förändra tal.
T.ex så finns metoden Floor som jag använder i exemplet nedan.

Slängde även bort alla dina labels och använder en RichTextBox (rtbResultat) för att visa resultatet i.

```
private void btnBerakna_Click(object sender, EventArgs e)
{
    rtbResultat.Clear();

    double summamoms, betala, moms, summavaxel, mottaget, tal1, tal3, tal2 = (0.01); //deklarerar double för uträkning av moms
    try //testar kod inom try för felsökning
    {
        moms = Convert.ToDouble(txtBoxMoms.Text); //konverterar till double och döper om till moms
        betala = Convert.ToDouble(txtBoxBetala.Text); //konverterar till double och döper om till betala
        tal1 = moms * (tal2);
        tal3 = tal1 + 1;
        summamoms = (tal3) * betala; //gångar ihop moms och betala och ger summan namnet summa

        SkrivResultat("Summa moms: "+Convert.ToString(summamoms)); //skriver ut summan och konverterar till string
        
        mottaget = Convert.ToDouble(txtBoxMottaget.Text); //konverterar till double och döper om till mottaget
        summavaxel = mottaget - summamoms; //tar mottaget och subtraherar det med summamoms
        SkrivResultat("Växel: "+Convert.ToString(summavaxel)); //skriver ut hur mycket växel kunden ska få tillbaka och konverterar int till string

        double resultat;

        resultat = Math.Floor(summavaxel / 500);
        SkrivResultat(String.Format("Antal 500 lappar: {0}", resultat));
        summavaxel = summavaxel % 500;

        resultat = Math.Floor(summavaxel / 100);
        SkrivResultat(String.Format("Antal 100 lappar: {0}", resultat));
        summavaxel = summavaxel % 100;

        resultat = Math.Floor(summavaxel / 50);
        SkrivResultat(String.Format("Antal 50 lappar: {0}", resultat));
        summavaxel = summavaxel % 50;

        resultat = Math.Floor(summavaxel / 20);
        SkrivResultat(String.Format("Antal 20 lappar: {0}", resultat));
        summavaxel = summavaxel % 20;

        resultat = Math.Floor(summavaxel / 10);
        SkrivResultat(String.Format("Antal 10 kronor: {0}", resultat));
        summavaxel = summavaxel % 10;

        resultat = Math.Floor(summavaxel / 5);
        SkrivResultat(String.Format("Antal 5 kronor: {0}", resultat));
        summavaxel = summavaxel % 5;

        resultat = Math.Floor(summavaxel / 1);
        SkrivResultat(String.Format("Antal 1 kronor: {0}", resultat));
        summavaxel = summavaxel % 1;

    }

    catch (Exception ex)//om fel inträffar sker det som står inom catch
    {
        rtbResultat.AppendText(ex.Message);
    }
}

private void SkrivResultat(string p)
{
    rtbResultat.AppendText(p + "\n");
}
```

Permalänk: https://www.webforum.nu/p/2117996

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/172136-växel-till-en-kassa-ännu-ett-enkelt-problem
