12.12.2011, 14:28 | #1 (permalink) |
Новичок
Регистрация: 01.11.2011
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Подпрограмма Pascal
_Для делимости числа на 9 необходимо, чтобы сумма цифр числа делилась на 9. Написать подпрограмму-процедуру проверки делимости числа N на 9 по выше указанной технологии. Если число делится, то выдать результат деления, если не делится, то выдать сообщение "Число не делится без остатка на 9". Число N вводить с клавиатуры. Program PP; Var M,N,S:Longint; Procedure DELEN (N1:Real); Begin If (N1 mod 9=0) Then Writeln ('N=',N) Else Writeln ('chislo ne delitsja bez ostatka na 9'); End; Begin Writeln ('N='); Readln(N); S:=0; While N<>0 Do Begin M:=N mod 10; N:=N div 10; S:=S+M; N:=S mod 9; End; DELEN(N); Write(N); End. |
12.12.2011, 14:28 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
На нашем форуме уже встречались похожие топики, посмотрите их Pascal RGR Pascal |
12.12.2011, 15:10 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Хорошо, пожалуйста - но исправлять придется много:
1. Как же это Вы параметр процедуры задаёте в формате Real, а потом пытаетесь его целочисленно (mod) делить? Нет, не пойдет: операции div и mod определены только для целочисленных форматов (Integer, LongInt, Word, Byte). 2. При обращении к процедуре вы подставляете параметр N - но только вот ведь беда какая: это самое N в процессе выполнения подсчета суммы цифр числа успевает уменьшиться аж до нуля! Как я понимаю, подставлять надо не N, а S. 3. Очень странный вывод ответа о делимости - либо "не делится", либо само число (или сумма цифр). Не лучше ли так и написать - дескать, делится? Или не делится. Итого: Код:
Var N:Longint; M,S:Byte; Procedure DELEN(N1:Byte); Begin If (N1 mod 9=0) Then Writeln ('chislo delitsja bez ostatka na 9') Else Writeln ('chislo ne delitsja bez ostatka na 9'); End; Begin Write('N= '); Readln(N); S:=0; While N<>0 Do Begin M:=N mod 10; N:=N div 10; S:=S+M; End; DELEN(S); Readln; End. |
12.12.2011, 20:18 | #3 (permalink) |
Новичок
Регистрация: 01.11.2011
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
спасибо большое!
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|