Задача 15 Урок 15
Primary tabs
Напишите программу, которая будет заполнять массив из 10 элементов случайными числами из диапазона от 0 до 20, при этом в полученном массиве не должно быть одинаковых значений.
type myArr = array [1..10] of integer;
var a:myArr; i, min, max:integer;
function sravni(a:myArr; k:integer): boolean;
var l:integer;
begin
for l:=1 to(k-1) do
if a[k]=a[l] then
begin
result:=false;
break;
end
else
result:=true;
end;
begin
randomize();
min:=0;
max:=20;
for i:=low(a) to high(a) do
begin
repeat
a[i]:= min+random(max-min+1);
writeln(a[i]);
until sravni(a,i);
end;
for i:=low(a) to high(a) do
write(a[i],' ');
readln();
end. - Log in to post comments
- 1643 reads
vedro-compota
Tue, 03/12/2024 - 18:47
Permalink
for l:=1 to(k-1) do
нужен отступ внутри тела цикла
_____________
матфак вгу и остальная классика =)
vedro-compota
Tue, 03/12/2024 - 20:10
Permalink
for l:=1 to(k-1) do
-- избыточно каждый раз присваивать true, можно переписать оптимальнее
_____________
матфак вгу и остальная классика =)
drl
Sat, 03/23/2024 - 19:23
Permalink
исправления
type myArr = array [1..10] of integer; var a:myArr; i, min, max:integer; function sravni(a:myArr; k:integer): boolean; var l:integer; begin result:=true; for l:=1 to(k-1) do if a[k]=a[l] then begin result:=false; break; end; end; begin randomize(); min:=0; max:=20; for i:=low(a) to high(a) do begin repeat a[i]:= min+random(max-min+1); writeln(a[i]); until sravni(a,i); end; for i:=low(a) to high(a) do write(a[i],' '); readln(); end.drl
Sat, 03/23/2024 - 19:25
Permalink
с одной функцией
type myArr = array [1..10] of integer; var k: integer; function sravni:myArr; var a:myArr; i, l, min, max:integer; begin randomize(); min:=0; max:=20; a[low(a)]:=min+random(max-min+1); for i:=low(a) to high(a) do begin l:=0; repeat a[i]:= min+random(max-min+1); for l:=1 to(i-1) do if a[i]=a[l] then break; until (a[i]<>a[l]); end; result:=a; end; begin for k:=low(sravni) to high(sravni) do write(sravni[k], ' '); readln(); end.vedro-compota
Sat, 03/23/2024 - 20:41
Permalink
for i:=low(a) to high(a) do
-- тут можно оптимизировать код, чтобы не проверять каждый раз, небольшое дублирование, зато меньше проверок
см. подробности, в т.ч. с другими комментариями: https://youtu.be/BYx1b28OpQg
_____________
матфак вгу и остальная классика =)
vedro-compota
Sat, 03/23/2024 - 21:06
Permalink
repeat
repeat a[i]:= min+random(max-min+1); unik = true; if i>1 then for l:=1 to(i-1) do if a[i]=a[l] then begin; unik := false; break; end until(unik);-- возможное использование флага
_____________
матфак вгу и остальная классика =)