Помогите отладить программу
дано М-монахов и 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.
|
И правильно ругается! В частности, потому что операции 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; |
Часовой пояс GMT +4, время: 10:53. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.