Задача 1 Урок 20
Primary tabs
У вас есть функция:
program my_program; type b = array[1..10] of integer; // объявление типа function filling_array( min, max : integer ) : b; var count, i, j, l, k, number : integer; arr : b; begin count := 0; k := 1; randomize; // вызов процедуры while( count < 10 ) do begin number := random( max - (min + 1) + min ) ; // случайные числa write( number, ' ' ); j := 0; for i := low( arr ) to k do begin if( arr[i] <> number ) then begin j += 1; if( j = k ) then begin count += 1; k += 1; arr[count] := number; end; end else break; end; end; filling_array := arr; // возвращаем значение функции end;
- Что делает эта функция?
- В данной функции есть лишние переменные, перепишите код так, чтобы они не использовались.
Функция возвращает массив целых уникальных чисел и выдает все промежуточные результаты генерации случайного числа number в диапазоне от 0 до max-2. Так как длина массива равна 10, то число number должно быть не меньше 9, а max - не менее 11 для заполнения массива всеми уникальными числами от 0 до 9 включительно, иначе в строке 15 будет постоянный выход из цикла for до заполнения массива, а цикл while будет бесконечным.
Лишние переменные: min - в выражении на строке 11 сокращается, l - изначально не задействована, j и k - в цикле проверки предыдущих чисел и заполнения массива можно сократить, снизив вложенность условий.
program my_program;
type b = array [1..10] of integer;
function filling_array(max: integer): b;
var count, i, number: integer;
arr: b;
begin
count := 1;
randomize;
while count <= 10 do
begin
number := random(max - 1); // = max - 2 + 1
write(number, ' ');
for i := 1 to count do
begin
if arr[i] = number then break;
if (i = count) and (arr[i] <> number) then
begin
arr[count] := number;
count += 1;
end;
end;
end;
filling_array := arr;
end;
//Проверка
var a: b;
maxf, c: integer;
begin
maxf := 11;
a := filling_array(maxf);
writeln();
for c := 1 to 10 do write(a[c], ' ');
readln();
end.- Log in to post comments
- 1294 reads