C# help !
#2
Отправлено 28 сентября 2006 - 02:47
$kr = 845.45; $money = array(500,100,50,25,10,5,2,1,0.5,0.2,0.1,0.05); for($j=0, $c=count($money); $j<$c; $j++) { $tmp = floor($kr/$money[$j]); if($tmp>=1) { $kr -= $money[$j]*$tmp; echo ($money[$j]<1?($money[$j]*100).' senti':$money[$j].' krooni').': '.$tmp."\n"; } }
Гы, тестить надо с числом 693.85.
Сообщение изменено: dmitry.eu (28 сентября 2006 - 02:58 )
#11
Отправлено 01 октября 2006 - 21:20
А пока вопрос к тем, кто программит на Си шарпе.
Вот моя програмка, по той же самой теме. Она работает, но не так,как хотелось бы. Когда дело доходит до центов, то она не округляет остаточную сумму. Например, когда вводим 95 центов, то в остатке получается 4,99 сентов, вместо 5.
Как это исправить?
using System;
using System.Collections.Generic;
using System.Text;
namespace Cash2
{
class Program
{
static void Main(string[] args)
{
int[] kr = { 500, 100, 50, 25, 10, 5, 2, 1, 50,20,10,5 };
Console.Write("Введите сумму денег для подсчета купюр: ");
double money = double.Parse(Console.ReadLine());
for (int i = 0; i < 12; i++)
{
int temp = (int)(money / kr[i]);
if (i == 7)
money *= 100;
money -= kr[i]*temp;
if (temp != 0)
Console.WriteLine("Купюра: {0} {2}, Количество: {1} шт.", kr[i], temp, ((i > 7) ? "сентов" : "крон"));
Console.WriteLine(money);
}
}
}
}
#12
Отправлено 02 октября 2006 - 08:17
Вот моя програмка, по той же самой теме. Она работает, но не так,как хотелось бы. Когда дело доходит до центов, то она не округляет остаточную сумму. Например, когда вводим 95 центов, то в остатке получается 4,99 сентов, вместо 5.
Как это исправить?
// project created on 2/10/2006 at 8:32 A
using System;
using System.Text;
namespace Cash2
{
class Program
{
static void Main(string[] args)
{
int[] kr = { 500, 100, 50, 25, 10, 5, 2, 1, 50,20,10,5 };
Console.Write("Введите сумму денег для подсчета купюр: ");
double money = double.Parse(Console.ReadLine());
for (int i = 0; i < 12; i++)
{
int temp = (int)(money / kr[i]);
if (i == 8)
money *= 100;
money -= kr[i]*temp;
if (temp != 0)
Console.WriteLine("Купюра: {0} {2}, Количество: {1} шт.", kr[i], temp, ((i > 7) ? "сентов" : "крон"));
if ( i < 11) Console.WriteLine(money);//чтоб остаток после 5 сэнтов не выдавал
}
}
}
}
Сообщение изменено: БугаГа (02 октября 2006 - 08:19 )
#13
Отправлено 02 октября 2006 - 08:30
http://www.tud.ttu.e...d/EestiRaha.cpp
писал препод, думаю должно работать
#14
Отправлено 02 октября 2006 - 12:04
протестируем программу с числом 1,75
по 20 центов - 3 шт.
по 10 - 1 шт.
по 5 - 1 шт.
в консоле видно, что программа не берет 50 центов, а значит (if==7), а не ==8
НО когда мы исправим эту ошибку, то при той же самой сумме остаток будет равен 4 центам
Приходим к тому, с чего начали - проблема с округлением
Акей, к сожалению я не могу посмотреть твой вариант на Си, не мог бы ты переписать программку на Си #?
#15
Отправлено 02 октября 2006 - 23:20
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { int[] cp = {50000, 10000, 5000, 2500, 1000, 500, 100, 50, 20, 10, 5}; double money = double.Parse(Console.ReadLine()); int x = (int)(money * 100); int i = 0; while ((x != 0) && (i < cp.Length)) { int cnt = 0; while (x - cp[i] >= 0) { x -= cp[i]; cnt++; } if (cnt > 0) if (cp[i] >= 100) Console.WriteLine("{0} по {1} крон", cnt, cp[i] / 100); else Console.WriteLine("{0} по {1} центов", cnt, cp[i]); i++; } } } }
#16
Отправлено 03 октября 2006 - 08:45
using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { int[] krons = {500,100,50,25,10,5,2,1}; int[] cents = {50,20,10,5}; float inFloat; if (float.TryParse(Console.ReadLine(), out inFloat)) { //For Krons for (int i = 0; i < krons.Length; i++) { if ((int)(inFloat / krons[i]) > 0) { Console.WriteLine("po {0} kron - {1}",krons[i],(int)(inFloat/krons[i])); inFloat -= (float)(krons[i] * (int)(inFloat / krons[i])); } } inFloat = (int)(inFloat * 100); if (inFloat > 0) { for (int i = 0; i < cents.Length; i++) { if ((int)(inFloat / cents[i]) > 0) { Console.WriteLine("po {0} centov - {1}", cents[i], (int)(inFloat / cents[i])); inFloat -= (int)(cents[i] * (int)(inFloat / cents[i])); } } } } else { Console.WriteLine("Error not number."); } } } }Всё работает, багов не должно быть.