Var f: file of integer; i, n, x, t, k, max: integer; s: integer; begin randomize; write('n='); readln(n); assign(f, 'numbers.dat'); rewrite(f); max : = -1; for i : = 1 to n do begin x : = random(4800) + 20; write(f, x); write(x, ' '); if x > max then max : = x; end; writeln; seek(f, 0); k : = 0; while not eof(f) do begin read(f, x); t : = x; s : = 0; while t > 0 do begin s : = s + sqr(t mod 10); t : = t div 10; end; if x mod s = 0 then k : = k + 1; if x > max - 50 then write(x, ' '); end; writeln; writeln(k); end.
aeykin
06.07.2020
Const n = 15; var a: array[1..n] of integer; i, max, min: integer; // тут будут храниться номера min и max begin randomize; {заполнение и вывод массива} write('исходный массив: '); for i: = 1 to n do begin a[i]: =random(21)-10; write(' ',a[i]) end; writeln; {поиск максимума и минимума} max: =1; min: =1; // проверять начинаем со второго элемента, // потому, что в первую очередь будем сравнивать с первым // (т.к. max = 1 и min = 1) for i: = 2 to n do begin if a[i]> a[max] then max: =i; if a[i]< a[min] then min: =i; // поскольку тут стоят знаки строго больше и строго меньше, // будут найдены только первый встретившийся максимум // и первый встретившийся минимум. // если бы стояли знаки больше или равно(> =) и меньше или равно(< =), // то найдены были бы последние встретившиеся max и min // то есть, например, в первом случае в массиве: // 1 2 3 4 5 2 5 1 // были бы найдены: min = 1, max = 5 // во втором случае в том же массиве были бы найдены: // min = 8, max = 7 end; // сколько элементов между пятым и первым ? - три. // между восьмым и седьмым ? - ноль // общая формула: // искомое кол-во элементов = |номермаксимума-номерминимума|-1 // значение берём по модулю потому, // что как минимальный элемент может стоять после максимального, // так и максимальный после минимального // то есть без модуля было бы так: 5-1-1 = 3, 7-8-1 = -2 // а с модулем так: |5-1|-1 = 3, |7-8|-1 = 0 // формула может выдать -1 в том случае, когда минимум равен максимум, // то есть когда все элементы массива равны. // на этот случай можно вывести соответствующее сообщение, или просто вывести ноль. writeln('max = a[',max,'] = ',a[max]); writeln('min = a[',min,'] = ',a[min]); i: =abs(max-min)-1; // перепишем сюда получившееся значение, // чтобы потом ещё раз его не высчитывать if i = -1 then writeln('все элементы массива равны.') else writeln('кол-во элементов между max и min = ',i); end. пример: исходный массив: 5 -2 -5 5 6 -7 7 -6 6 3 -4 6 -8 7 1 max = a[7] = 7 min = a[13] = -8 кол-во элементов между max и min = 5