| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Не могу найти ошибку. |
| Автор: Svit 19.10.2004, 17:37 | ||
Задача: разбить число на 1коп, 5коп, 10коп, ... ,5000руб всеми возможными способами. Алгоритм вроде правильный, а в коде где-то ошибка. Посмотрите пожалуйста З.Ы:мне здавать завтра...
|
| Автор: podval 19.10.2004, 20:18 |
| Перенесено из раздела "Алгоритмы". |
| Автор: Girder 20.10.2004, 01:14 | ||
| Мдя... ну да ладно... Надеюсь что правильно понял смысл задания и что ты утром просмотришь
Удачи. |
| Автор: p0s0l 20.10.2004, 01:58 |
| Имхо, надо вывести все возможные варианты получения заданной суммы. Вот только не понятно, до какой степени вариантизировать ? Можно же и миллион рублей сложить копейками... |
| Автор: Girder 20.10.2004, 08:34 |
| p0s0l я думаю человек хочет для любой суммы денег, узнать из каких купюр можно её собрать Т.в. можно просто добавить запрос количества вариантов сумм купюр... а далее просто. Вначале задать для рублей(перед циклом) i:=8... потом i:=7 или i:=6(в зависимости от первого вхождения). При достижении i:=0 и если счетчик еще не равен 0 то, использовать только массив по копейкам. А если количество вариантов превышает сумму размеров массивов под рубли и копейки, то можно вообще перейти к произвольной выборки из массивов. PS: А что планируется выпуск 5000 купюр? |
| Автор: Alex101 20.10.2004, 15:23 | ||
| Вот, попытался написать, проверьте, компилера нет. Нужно подправить под конкретные условия.
Программа написана "навскидку", так что сорри, но идея, думаю, понятна. P.S. А почему эту тему убрали из раздела "Алгоритмы"? Там ей самое место, ИМХО. |
| Автор: p0s0l 20.10.2004, 15:54 |
| Alex101, вместо if Res_Rub[i] then надо if Res_Rub[i] <> 0 then, остальное - всё правильно (по синтаксису). Только при запуске вываливается ошибка деления на нуль в строке: for i:=1 to (Sum-sum_find) div Rub[pos]*i do Если поставить перед этой строкой проверку: if Rup[pos] <> 0 then то ошибки не возникает, но опять же, проверил числа 7 и 10, в файле получаются странные варианты: 7 = 1 рублей 1купюр 2 рублей 3купюр 1 рублей 7купюр 0 рублей 3купюр 10 = 1 рублей 10купюр 0 рублей 4купюр 0 рублей 1купюр |
| Автор: Alex101 20.10.2004, 16:16 | ||
| Может массив Rub неправильно инициализируется? Мне просто вообще не на чем проверить сейчас. P.S. А в Паскале не прокатывает такое: if value then... Не тоже самое, что и if value<>0 then... ? Да! Надо поменять местами:
|
| Автор: Ptica 20.10.2004, 16:26 | ||
| Alex101 Если в Паскале написано if value then... то это значит, что value - логическая (boolean) переменная (или функция). Вот это было бы правильно (но это просто умозрительный пример):
|
| Автор: p0s0l 20.10.2004, 16:34 |
| Допёрло: там описка Rub[pos]:=0; надо Res_Rub[pos]:=0; А проверку if pos>8... надо оставить где была... Если это исправить, то будут выданы все варианты (не проверял, но их для 100 выдаёт много = 2499 вариантов) |
| Автор: Alex101 20.10.2004, 17:26 | ||||
Ну да, именно это я и имел в виду (то есть не испольуем вообще эту купюру), извините. Лучше проверить для чего-то небольшого, например для 10 - вручную подсчитать можно.
А мне что-то показалось, что надо менять местами. Это не тестировался случай, когда одно из решений получается при добавлении самой большой купюры. |
| Автор: maxim1000 20.10.2004, 17:30 | ||
скорее всего, потому, что человек не просил решенияч задачки он просил только проверить, правильная ли у него программа... |
| Автор: Svit 3.11.2004, 21:04 |
| Спасибо всем, особенно Alex101! |