Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.02.2014, 11:04   #1
kaznachey1993
Пользователь
 
Регистрация: 18.09.2011
Сообщений: 57
По умолчанию Денежна еденица

Украинский денежную единицу - 1 гривну можно разменять монетами по 1, 2, 5, 10, 25 и 50 копеек. Составить алгоритм, определяющий сколькими способами это можно сделать?
kaznachey1993 вне форума Ответить с цитированием
Старый 14.02.2014, 11:39   #2
kaznachey1993
Пользователь
 
Регистрация: 18.09.2011
Сообщений: 57
По умолчанию

Посмотрите где ошибка
Код:
const mon:array[0..5] of byte=(1,2,5,10,25,50); 
      n=6; 
var i:integer; 
    c:array[1..6] of byte; 
    coin,peres:byte;

procedure next(max,sum:integer); 
var i:integer; 
begin 
if sum=0 then 
  begin 
   inc(peres); 
   exit; 
  end else if sum>=mon[max] then 
   begin 
     inc(c[max]); 
     next(max,sum-mon[max]); 
     dec(c[max]); 
   end; 
if max<>0 then next(max-1,sum); 
end;
begin 
coin:=10; 
peres:=0; 
next(n-1,coin); 
writeln('Способов уплаты:',peres);
readln; 
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 14.02.2014 в 12:42.
kaznachey1993 вне форума Ответить с цитированием
Старый 14.02.2014, 12:44   #3
009
Пользователь
 
Регистрация: 09.02.2014
Сообщений: 33
По умолчанию

Код:
const mon:array[0..5] of byte=(1,2,5,10,25,50);
n=100;
var i,peres:integer;

procedure next(max,sum:integer);
var i:integer;
begin
if sum=0 then
begin
inc(peres);
exit;
end else 
for i:=max to 5 do
if sum-mon[i]>=0 then next(i,sum-mon[i]);
end;
begin
for i:=0 to 5 do
next(i,n-mon[i]);
writeln('Способов уплаты:',peres);
readln;
end.
009 вне форума Ответить с цитированием
Старый 14.02.2014, 13:06   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

так устроит?

Код:
const
   n=5;
   mon:array[0..n] of byte=(1,2,5,10,25,50);
var
  coin,peres:integer;

procedure next(max,sum:integer);
begin
if sum=0 then
  begin
   inc(peres);
   exit;
  end
  else
  if sum>=mon[max] then
   begin
     next(max,sum-mon[max]);
   end;
 if max>0 then next(max-1,sum);
end;

begin
  coin := 100; {дано 100 копеек}
  peres:=0;
  next(n,coin);
  writeln('Способов уплаты:',peres);
readln;
end.
в массиве C происходило накопление вариантов. Но, раз Вы его не используете, я его позволил выпилить из кода...


to 009
"некузявно" использовать переменную peres без её иницилизации! В начале программы туда надо занести ноль.
Да-да, я знаю, что компилятор (с) Borland и так подобные переменные иницилизирует нулём, но обращаться к переменной до того, как в неё что-то записали - чревато и как минимум - не этично!

Последний раз редактировалось Serge_Bliznykov; 14.02.2014 в 13:10.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
мнимая еденица C++; Rudeboy Помощь студентам 5 04.06.2010 12:28