Задать вопрос
12 апреля, 00:22

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

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.

+5
Ответы (2)
  1. 12 апреля, 00:51
    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. 12 апреля, 02:07
    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 ...» по предмету 📗 Информатика. Развернутая система поиска нашего сайта обязательно приведёт вас к нужной информации. Как вариант - оцените ответы на похожие вопросы. Но если вдруг и это не помогло - задавайте свой вопрос знающим оппонентам, которые быстро дадут на него ответ!
Искать готовые ответы
Похожие вопросы по информатике
Uses crt; var n, s, s1, s2, k:integer; begin writeln ('Введите число: ') ; readln (n) ; s:=0; s1:=0; s2:=0; while n>0 do begin inc (k) ; if k mod 2 = 0 then begin s:=s+n mod 10; n:=n div 10; end else begin s1:=s1+n mod 10; n:=n div 10; end;
Ответы (1)
Program a2; var n, i, min, max, x:integer; begin Writeln ('Введите колицество человек в классе:') ; Readln (n) ; Writeln ('Введите рост 1 ученика:') ; readln (x) ; min:=x; max:=x; for i:=2 to n do begin Writeln ('Введите рост ', i,' ученика:') ;
Ответы (1)
Выдаёт ошибку: операнды имеют неприводимые типы. Где я ошиблась? (Программа написана на языке Pascal ABC) Program Home; Uses CRT; Var a: integer; b: real; Begin WriteLn ('Введите еденицу измереня: килограмм, миллиграмм, грамм, тонна, центнер') ;
Ответы (1)
Почему выводится ноль в программе? program pr1; var a: real; n: longint; function power (a:real; n:longint) : real; begin var i: integer; var anew: real; anew:=a; for i: = 2 to n do begin a:=a*anew; end; end; begin readln (a, n) ;
Ответы (1)
Объясните строчку (c:=10*c+a mod 10; a : = a div 10;) program pr36; function qwer (var a, b: integer) : integer; var c: integer; begin c:=0; while a > 0 do begin c:=10*c+a mod 10; a : = a div 10; end; qwer: = c; end; var a, b: integer;
Ответы (1)