webForumDet fria alternativet

C# hjälp tack!

.NET

6 svar · 2 767 visningar · startad av Cleashy

Medlem sedan sep. 20127 inlägg
Frågan#1

Tja, har i uppgift att göra en sk växel-kassa. Såhär ska den se ut i slutändan;
http://www.webforum.nu/attachment.php?attachmentid=23413&stc=1&d=1347373470

Mitt problem nu är att försöka få double, uint och int att gå ihop utan att returen av sedlar & mynt skrivs i decimaler också.

Detta är mitt försök av en lösning (jo, den är åt helvete än sålänge :) );
int betalade; //erhållna beloppet
double totalsum; //totala bellopet
int tillbaka;
int resultat;
uint roundingOffAmount;

        Console.Write("Ange totalsumma: "); totalsum = double.Parse(Console.ReadLine());
        Console.Write("Ange erhållet belopp: "); betalade = int.Parse(Console.ReadLine());
        tillbaka = betalade - totalsum;

        betalade = (uint)Math.Round(totalsum);
        roundingOffAmount = betalade - totalsum;

        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;

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

        resultat = tillbaka / 5;
        Console.WriteLine("Antal 5-kronor: {0}", resultat);
        tillbaka = tillbaka % 5;

        resultat = tillbaka / 1;
        Console.WriteLine("Antal 1-kronor: {0}", resultat);
        tillbaka = tillbaka % 1;

Någon som känner sig manad? Tack i förhand!

helpqt.jpg
Medlem sedan juni 200032 967 inlägg
#2

Flyttas från C/C++.

Välkommen till webForum!

Medlem sedan sep. 20127 inlägg
#3

Tack för flytten. Inte för att vara den där, men du kan markera den som löst, efter först 2h slit (innan jag publicerade tråden) och sedan 3½h slit på det, lyckades ja fixa det! Får la tacka kaffekokarens tuffa uppdrag här bredvid mig!

Medlem sedan juni 200032 967 inlägg
#4

Det som vore supernajs, vore om du lade in lösningen i ett nytt inlägg, och sedan markerade det inlägget som lösning på problemet.

Någon annan kan ju komma hit utan en lika tuff kaffekokare som din. :)

Bra att du löste det!

(Jag beklagar också att det tog ett par timmar för din tråd att publiceras - av någon anledning hade den fångats upp som spam av forummjukvaran...)

Medlem sedan sep. 20127 inlägg
#5

Convertade bara "totalsum" till en int ist; "tillbaka = betalade - (int)totalsum;" för att det inte skulle vara en error över hela skiten.
I och med att man är ganska ny i programmeringsvärlden så krävdes en del google.

Kaffekokare+1l muggtermos, de går hem i alla fall :) Och ingen fara alls, viktigaste är att man lyckades lösa det!

Medlem sedan sep. 20127 inlägg
#6

Nu är man inne i "the finale", endast en grej kvar som verkligen INTE vill funka .. :'<

I den första while-loopen så måste man ju såklart ha en "break;", men lägger jag den i slutet så hoppas if-satsen (som är inuti while-loopen) över dit och låter den inte ge användaren ett nytt försök till att knappa in totalsumman igen. Någon som kan ge förslag på hur jag ska lösa problemet?

            int betalade; // Erhållna beloppet
            double totalsum; // Totala bellopet
            uint subTotal;
            int tillbaka;
            int resultat;
            double roundingOffAmount;

            while (true)
            {
                try
                {
                    // Hämtar det totala samt erhållna beloppet
                    Console.Write("Ange totalsumma: "); totalsum = double.Parse(Console.ReadLine());

                    if (totalsum < 0.50)
                    {
                        Console.BackgroundColor = ConsoleColor.Red;
                        Console.WriteLine("Totalsumman är för liten. Köpet kunde inte genomföras!");
                        Console.ResetColor();
                    }
                }
                catch
                {

                    Console.BackgroundColor = ConsoleColor.Red;
                    Console.WriteLine("Var vänlig och ange belopp i form av en siffra!");
                    Console.ResetColor();
                }
            }

            while (true)
            {
                try
                {
                    Console.Write("Ange erhållet belopp: "); betalade = int.Parse(Console.ReadLine());
                    break;
                }
                catch
                {
                    Console.BackgroundColor = ConsoleColor.Red;
                    Console.WriteLine("Var vänlig och ange belopp i form av en heltals-siffra!");
                    Console.ResetColor();
                }
            }
            // Radbrytning (ej kommit på hur man gör det på ett "finare" sätt ännu.
            Console.WriteLine();

            //Kvitto
            Console.WriteLine("KVITTO");
            Console.WriteLine("---------------------");

            Console.WriteLine("Totalt: {0}", totalsum);
            //Öresavrundning
            subTotal = (uint)Math.Round(totalsum);
            roundingOffAmount = subTotal - totalsum;
            Console.WriteLine("Öresavrundning: {0:f2}", roundingOffAmount);
            // Räknar ut Växeln
            tillbaka = betalade - (int)totalsum;
            Console.WriteLine("Att betala: {0}", subTotal);
            Console.WriteLine("Kontant: {0}", betalade);
            Console.WriteLine("Tillbaka: {0}", tillbaka);

            Console.WriteLine("---------------------");
            Console.WriteLine();
            resultat = tillbaka / 500;

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

            resultat = tillbaka / 100;

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

            resultat = tillbaka / 50;

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

            resultat = tillbaka / 20;

            if (resultat > 0)
            {
                Console.WriteLine("Antal 20-lappar: {0}", resultat);
                tillbaka = tillbaka % 20;
            }

            resultat = tillbaka / 5;

            if (resultat > 0)
            {
                Console.WriteLine("Antal 5-kronor: {0}", resultat);
                tillbaka = tillbaka % 5;
            }

            resultat = tillbaka / 1;

            if (resultat > 0)
            {
                Console.WriteLine("Antal 1-kronor: {0}", resultat);
                tillbaka = tillbaka % 1;
            }

PS: Ni kan kolla på bilden i första inlägget på hur den ser ut när den exekveras!

Tack i förhand!

Medlem sedan sep. 20127 inlägg
#7

Ännu en post som man faktiskt lyckades fixa! Snabbare denna gång.

Misstaget jag gjorde innan är att jag la in en break; utan en else term.

if (totalsum < 0.50)
{
Console.BackgroundColor = ConsoleColor.Red;
Console.WriteLine("Totalsumman är för liten. Köpet kunde inte genomföras!");
Console.ResetColor();
}
else
break;

så funkar det!

263 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)