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.
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..
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.
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 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.
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();
}
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.
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
}
}
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.
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.
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
}
}