Задача 12 Урок 15
Primary tabs
Напишите программу, которая будет заполнять массив из 10 элементов случайными числами из диапазона от 0 до 20, при этом в полученном массиве не должно быть одинаковых значений.
function check(a:array of integer; k:integer):integer;
var i,h:integer;
begin
h:=0;
for i:=low(a) to high(a) do
if (a[i]=k) then h:=1;
result:=h;
end;
var
mas: array [1..10] of integer;
i,j,k,y,flag:integer;
begin
randomize();
mas[1]:=random(20);
y:=0;
for i:=1 to 10 do
begin
k:=random(20);
flag:=check(mas,k);
if(flag=0) then
mas[i]:=k
else
begin
mas[i]:=-1;
y:=y+1;
end;
end;
repeat
for j:=1 to 10 do
if(mas[j]=-1) then
begin
k:=random(20);
flag:=check(mas,k);
if(flag=0) then
begin
mas[j]:=k;
y:=y-1;
end;
end;
until (y=0);
for i:=1 to 10 do
write(mas[i],' ');
end. Консоль:
3 16 4 2 8 5 10 18 0 6
- Log in to post comments
- 691 reads
vedro-compota
Wed, 02/16/2022 - 19:29
Permalink
1)
1)
-- лучше возвращать boolean
2) Условие выхода из цикла формирование массива - достижение условия заполнения всего массива. Также элемент должен записываться в массив только тогда, когда мы знаем что он уникальный
_____________
матфак вгу и остальная классика =)
Lena
Thu, 02/17/2022 - 16:15
Permalink
function check(a:array of
function check(a:array of integer; k:integer;j:integer):boolean; var i:integer; h:boolean; begin h:=true; for i:=1 to j do if (a[i]=k) then h:=false; result:=h; end; var mas: array [1..10] of integer; i,j,k,y:integer; flag:boolean; begin randomize(); mas[1]:=random(20); for i:=1 to 10 do begin repeat k:=random(20); flag:=check(mas,k,i-1); until (flag); mas[i]:=k; end; for i:=1 to 10 do write(mas[i],' '); end.