0 / 0 / 0
Регистрация: 19.12.2022
Сообщений: 25
1

Проверка делимости 3 чисел на 11

01.03.2023, 11:33. Показов 138. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Помогите решить задачу Известен следующий признак делимости числа n на 11:
для делимости на 11 необходимо, чтобы разность между суммой цифр, стоящих на четных местах, и суммой цифр, стоящих на нечетных местах, делилась на 11.
Написать процедуры проверки признака делимости. Даны три натуральных числа. Проверить для каждого из них, делятся ли они на 11.
Вот моя программа:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure kr11(a: integer);
Var i, snc, sch: integer;
Begin
While a>0 do Begin
 inc(i);
 if i mod 2 =0 then sch:= sch + (a mod 10)
               else snc:= snc + (a mod 10);
 a:= a div 10;
 end;
 if (sch-snc) mod 11 = 0 then writeln('YES')
                       else writeln('NO')
end;
Var a,b,c: integer;
Begin
 readln(a);
 kr11(a);
 readln(b);
 kr11(b);
 readln(c);
 kr11(c);
end.
Проблема в том, что она не всегда работает корректно для трёх чисел. Как это исправить?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.03.2023, 11:33
Ответы с готовыми решениями:

Проверка делимости чисел
Даны два целых числа a и b. Если a делится на b или b делится на a, то вывести 1, иначе – любое...

Ввод чисел и проверка их делимости
Программа осуществляет ввод чисел и проверяет их делимость на 2 и 3. Сообщение о том, что введенное...

Обработка целых чисел. Проверка делимости
Рассматривается множество целых чисел, принадлежащих числовому отрезку , которые являются простыми...

Обработка целых чисел. Проверка делимости
Обозначим через S сумму делителей числа, не являющихся простыми, кроме единицы и самого числа. Если...

Проверка делимости на 16
Как сделать программу, которая предоставляет переменной типа byte стоимость 1,если переменная типа...

4
1069 / 482 / 314
Регистрация: 05.04.2013
Сообщений: 2,112
01.03.2023, 13:25 2
Лучший ответ Сообщение было отмечено Chelove234 как решение

Решение

Цитата Сообщение от Chelove234 Посмотреть сообщение
Проблема в том, что она не всегда работает корректно для трёх чисел. Как это исправить?
В целом вроде все верно, но вы забыли проинициировать переменные. и они у вас скорее всего в начале процедуры принимают рандомные значения.
Pascal
1
2
3
  i := 0;
  sch := 0;
  snc := 0;
Добавлено через 1 минуту
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure kr11(a: integer);
Var i, snc, sch: integer;
Begin
 
  i := 0;
  sch := 0;
  snc := 0;
 
While a>0 do Begin
 inc(i);
 if i mod 2 =0 then sch:= sch + (a mod 10)
               else snc:= snc + (a mod 10);
 a:= a div 10;
 end;
 if (sch-snc) mod 11 = 0 then writeln('YES')
                       else writeln('NO')
end;
Var a,b,c: integer;
Begin
 readln(a);
 kr11(a);
 readln(b);
 kr11(b);
 readln(c);
 kr11(c);
 readln;
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7534 / 4394 / 2785
Регистрация: 22.11.2013
Сообщений: 12,588
Записей в блоге: 1
01.03.2023, 20:16 3
Порассуждаем.
1)
Основной блок программы: три числа -- это же цикл?
Pascal
1
2
3
for i:=2 downto 0 do begin
  Read(t); kr11(t);
end;
2) разность цифр на четных и нечетных местах -- ее можно вычислять сразу, без отдельных сумм
Причём, для чередования знака очередной цифры значительно проще менять знак суммы
Pascal
1
2
3
4
5
s:=0;
while n<>0 do begin
  s:=-s+n mod 10;
  n:=n div 10;
end;
3) по хорошему, вместо процедуры просится функция:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function IsMultiple11(n: Integer): Boolean;
var s: Integer;
begin
  s:=0;
  while n<>0 do begin
    s:=-s+n mod 10;
    n:=n div 10;
  end;
  IsMultiple11:=0=s mod 11;
end;
 
var i, t: Integer;
begin
  for i:=2 downto 0 do begin
    Read(t);
    WriteLn(IsMultiple11(t));
  end;
end.
Добавлено через 7 минут
4)
С третьей стороны для влезающих в Integer чисел легко ведь написать
Pascal
1
2
3
4
function IsMultiple11(n: Integer): Boolean;
begin
  IsMultiple11:=0=n mod 11;
end;
Тоже заметили, да? Смысл мудрить что-то с признаком делимости на 11 появляется только тогда, когда число длинное и не влазит в Integer:
Pascal
1
2
3
4
5
6
function IsMultiple11(const n: String): Boolean;
var s, i: Integer;
begin
  s:=0; for i:=1 to Length(n) do s:=-s+Ord(n[i])-Ord('0');
  IsMultiple11:=0=s mod 11;
end;
Здесь нет проверки на то, что в n только цифры, но и задание не требует проверки ввода на корректность
0
0 / 0 / 0
Регистрация: 19.12.2022
Сообщений: 25
02.03.2023, 14:25  [ТС] 4
У меня условие практической такое(и мы изучаем процедуры, поэтому функции использовать нельзя)
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7534 / 4394 / 2785
Регистрация: 22.11.2013
Сообщений: 12,588
Записей в блоге: 1
02.03.2023, 20:22 5
Pascal
1
2
3
4
5
6
procedure TestMultiple11(const n: String);
var s, i: Integer;
begin
  s:=0; for i:=1 to Length(n) do s:=-s+Ord(n[i])-Ord('0');
  WriteLn(0=s mod 11);
end;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.03.2023, 20:22
Помогаю со студенческими работами здесь

Проверка делимости на 11
Доброго времени суток! Помогите, пожалуйста, есть задачка. Нужно определить вероятность деления ...

Проверка делимости числа на 11
Проверьте, делится ли число на 11 по следующему признаку: число делится на 11, если у него разность...

Проверка делимости числа
Генератор случайных чисел выдает целое число в диапазоне от 1 до 100. Определить,являетсяэто число...

Проверка делимости числа на 11.
Число делится на 11 если сумма цифр, стоящих на нечетных позициях в числе, равно сумме цифр,...

Проверка делимости числа
void __fastcall TForm1::Button1Click(TObject *Sender) { int x; x=StrToInt(Edit1-&gt;Text); ...

Проверка делимости с условиями
Задача : Рассматривается множество целых чисел, принадлежащих числовому отрезку , у которых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru