Задать вопрос
17 октября, 07:33

Превратить функцию в процедуру

function KolDel (n:integer) : integer;

var i, k:integer;

begin

k:=0;

for i:=1 to n do

if n mod i=0 then

k:=k+1;

KolDel:=k;

end;

var m, n, i:longint;

mx:byte;

begin

repeat

writeln ('Введите интервал, 2 натуральных числа, второе болше первого') ;

readln (m, n) ;

until n>m;

mx:=1;

for i:=m to n do

if KolDel (i) >mx then mx:=KolDel (i) ;

writeln ('Наибольшее количество делителей имеют числа:') ;

for i:=m to n do

if KolDel (i) = mx then write (i,' ') ;

writeln;

write ('количество=', mx) ;

readln

end.

+1
Ответы (2)
  1. 17 октября, 09:34
    0
    С небольшой правкой процедуры, уменьшающей вдвое время ее работы.

    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
  2. 17 октября, 10:50
    0
    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
Знаете ответ на вопрос?
Не уверены в ответе?
Правильный ответ на вопрос 👍 «Превратить функцию в процедуру function KolDel (n:integer) : integer; var i, k:integer; begin k:=0; for i:=1 to n do if n mod i=0 then ...» по предмету 📗 Информатика. Развернутая система поиска нашего сайта обязательно приведёт вас к нужной информации. Как вариант - оцените ответы на похожие вопросы. Но если вдруг и это не помогло - задавайте свой вопрос знающим оппонентам, которые быстро дадут на него ответ!
Искать готовые ответы