Задать вопрос
18 октября, 16:49

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

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.

+2
Ответы (2)
  1. 18 октября, 17:16
    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
  2. 18 октября, 20:43
    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
Знаете ответ?
Сомневаетесь в ответе?
Найдите правильный ответ на вопрос ✅ «Превратить функцию в процедуру function KolDel (n:integer) : integer; var i, k:integer; begin k:=0; for i:=1 to n do if n mod i=0 then ...» по предмету 📘 Информатика, а если вы сомневаетесь в правильности ответов или ответ отсутствует, то попробуйте воспользоваться умным поиском на сайте и найти ответы на похожие вопросы.
Смотреть другие ответы
Похожие вопросы по информатике
Сделать так чтобы Writeln был заменен другим словом и повторялься не больше двух раз program choise; var N_M:integer; writeln (' введи номер месяца ') ; readln (N_M) ; case N_M of 1:writeln (' январь ') ; 2:writeln (' февраль ') ;
Ответы (1)
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)
Запиши программу в Паскале для вычисления площади прямоугольника со сторонами c и m. 1) begin writeln ('Введи длину и ширину прямоугольника c и m') ; readln (c, m) ; s:=c*m; writeln ('s=', s) ; readln; 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)