Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 04.09.2011, 16:09   #1 (permalink)
sam93
Member
 
Регистрация: 09.08.2011
Сообщений: 15
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Помогите отладить программу

дано М-монахов и N-пирогов
монахи едят пироги в зависимости от ранга
1-ого ранга 10 пирогов, 2-ого 5, 3-его 0,5
сколько было 1-=ого 2ого 3его рангов монахов в отдельности?

вот моёмо. но паскаль ругается

{n - kol-vo pirogov,
m - kol-vo monahov,
r1,r2,r3 - sootvetstvenno rangi monahov. }

Program Monahi;
var
n, r1, r2, r3: real;
i,m : byte;
begin
writeln('Vvedite kol-vo pirogov = ');
read(n);
writeln('Vvedite kol-vo monahov = ');
read(m);
r1:=0;
r2:=0;
r3:=0;
for i:=1 to m do
if (n mod 10) >= 10) then
r1:=r1+1;
else if ((n mod 5)>=5) then
r2:=r2+1;
else if ((n mod 0.5)>=0.5) then
r3:=r3+1;
writeln('r1 = ',r1,'r2 = ',r2,'r3 = ',r3);
readln();
end.

Замечание:
Название темы конкретизировал. Модератор.
sam93 вне форума   Ответить с цитированием

Старый 04.09.2011, 16:09
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Наверняка вы найдете важное в решении проблемы, если полистаете похожие темы

Помогите довести до ума программу
Помогите написать программу

Старый 04.09.2011, 19:38   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

И правильно ругается! В частности, потому что операции div и mod - сугубо целочисленные, и конструкции вида (n mod 0.5) абсолютно неприемлемы.
Кроме того, совершенно неправильно построен алгоритм решения задачи. Итак, имеем:

10*r1 + 5*r2 + 0.5*r3 = n
r1 + r2 + r3 = m

Чтобы не возиться с дробями, умножим обе части первого уравнения на 2:

20*r1 + 10*r2 + r3 = 2*n
r1 + r2 + r3 = m

Итак, имеем два уравнения с тремя неизвестными. Но есть еще условия - уравнения диофантовы, то есть система должна иметь решение в целых числах.
Строить программу можно по-разному, я предпочел метод прямого перебора.
1. Задаем числа m и n.
2. Определяем максимально возможное r1 (обозначено r1max), которое есть
2*n div 20
при этом минимальное r1 есть 0.
3. Строим цикл по r1 от максимума до минимума, при этом для каждого r1 определяем максимальное r2 (r2max).
4. Строим цикл по r2 тоже от максимального до минимального, в котором по r1 и r2 определяем два значения r3 из первого и второго уравнений, и в случае их совпадения выводим результат на экран.
5. Если для данных m и n не удается подобрать ни одной подходящей комбинации, выводим на экран сообщение о том, что решения нет. Для этого в программе предусмотрен булевский флажок b.

Формат переменных взят знаковым целым (Integer), потому что промежуточные результаты могут быть и отрицательными. Да и монахов может быть много, а уж пирогов - тем более.

Итого:
Код:
Program Monahi;
var
 n, m, r1, r2, r1max, r2max, r3_1, r3_2 : Integer;
 b : boolean;
begin
 write('Vvedite kol-vo pirogov = ');
 readln(n);
 write('Vvedite kol-vo monahov = ');
 readln(m);
 b:=true;
 r1max:=2*n div 20;
 for r1:=r1max downto 0 do
  begin
   r2max:=(2*n-r1*20) div 10;
   for r2:=r2max downto 0 do
    begin
     r3_1:=2*n-r1*20-r2*10;
     r3_2:=m-r1-r2;
     If r3_1=r3_2 then
      begin
       b:=false;
       writeln('r1= ',r1);
       writeln('r2= ',r2);
       writeln('r3= ',r3_1);
       writeln;
      end;
    end;
  end;
 if b then writeln('Net resheniya!');
 readln;
end.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 10:52.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.