В
Все
М
Математика
О
ОБЖ
У
Українська мова
Х
Химия
Д
Другие предметы
Н
Немецкий язык
Б
Беларуская мова
М
Музыка
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
У
Українська література
Р
Русский язык
Ф
Французский язык
П
Психология
О
Обществознание
А
Алгебра
М
МХК
Г
География
И
Информатика
П
Право
А
Английский язык
Г
Геометрия
Қ
Қазақ тiлi
Л
Литература
И
История
Galina2617
Galina2617
25.11.2022 03:17 •  Информатика

Имеется три задания 1. Получить двоичную форму внутреннего представления целого числа в 2-х байтовой ячейке. (число 1689)
2. Получить шестнадцатеричную форму внутреннего представления целого числа в 2-х байтовой ячейке. (число -1689)
3. По шестнадцатеричной форме внутреннего представления целого числа в 2-х байтовой ячейке восстановить само число. (FA53)

Нужно с решением, зараннее ОООЧЕНЬ благодарна)

Показать ответ
Ответ:
AlexCairon5
AlexCairon5
14.08.2022 07:51
С небольшой правкой процедуры, уменьшающей вдвое время ее работы.

procedure KolDel(n: integer; var res: byte);
var
  i: integer;
begin
  res := 2;
  for i := 2 to n div 2 do
    if n mod i = 0 then
      res := res + 1;
end;

var
  m, n, i: longint;
  mx, kd: byte;

begin
  repeat
    writeln('Введите интервал, 2 натуральных числа, второе больше первого');
    readln(m, n);
  until n > m;
  mx := 1;
  for i := m to n do
  begin
    KolDel(i, kd);
    if kd > mx then mx := kd
  end;
  writeln('Наибольшее количество делителей имеют числа:');
  for i := m to n do
  begin
    KolDel(i, kd);
    if kd = mx then write(i, ' ')
  end;
  writeln;
  write('количество=', mx);
  readln
end.

А вот такой вариант работает в 3.5 раза быстрее:

procedure KolDel(n: integer; var res: byte);
var
  i: integer;
begin
  res := 2;
  for i := 2 to n div 2 do
    if n mod i = 0 then
      res := res + 1;
end;

var
  m, n, i: longint;
  mx, kd, k: byte;
  a: array[1..255] of longint;

begin
  repeat
    writeln('Введите интервал, 2 натуральных числа, второе больше первого');
    readln(m, n);
  until n > m;
  mx := 1;
  for i := m to n do
  begin
    KolDel(i, kd);
    if kd > mx then begin mx := kd; k := 1; a[k] := i end
    else
    if kd = mx then begin k := k + 1; a[k] := i end
  end;
  writeln('Наибольшее количество делителей имеют числа:');
  for i := 1 to k do Write(a[i], ' ');
  Writeln;
  Write('Количество=', mx);
  readln
end.

Пример
Введите интервал, 2 натуральных числа, второе больше первого
37 86
Наибольшее количество делителей имеют числа:
60 72 84
Количество=12
0,0(0 оценок)
Ответ:
красотка356
красотка356
14.08.2022 07:51
Procedure KolDel(n:integer; var k:integer);
var i:integer;
begin
k:=0;
for i:=1 to n do
 if n mod i=0 then k:=k+1;
end;
var m,n,i:longint;
md,mx:integer;
begin
repeat
writeln('Введите интервал, 2 натуральных числа, второе больше первого');
readln(m,n);
until n>m;
mx:=1;
for i:=m to n do
 begin
 KolDel(i,md);
 if md>mx then mx:=md;
 end;
writeln('Наибольшее количество делителей имеют числа:');
for i:=m to n do
 begin
 KolDel(i,md);
 if md=mx then write(i,' ');
 end;
writeln;
write('количество=',mx);
readln
end.

Пример:
Введите интервал, 2 натуральных числа, второе больше первого
10 100
Наибольшее количество делителей имеют числа:
60 72 84 90 96
количество=12
0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота