Задача 18 Урок 15
Primary tabs
Дан массив длиной N (не более 100 элементов). Проверить, что в нем в встречаются все числа от 0 до k, где 0≤k
Указание: Проверку массива на соответствие условиям задачи вынести в подпрограмму (функцию).
type Arr=array [1..30] of integer; var i, k, min, max:integer; a: Arr; function proverka(b:arr; j:integer): boolean; var m, p, i, f, z:integer; begin m:=10; p:=20; z:=0; result:= false; for i:= m to p do for f:=1 to j do if b[i]=f then begin z+=1; if z=5 then result:= true; break; end; end; begin randomize(); min:=1; max:=60; for i:=low(a) to high(a) do begin a[i]:= min+random(max-min+1); write(a[i],' '); end; a[10]:=0; {for i:=10 to 15 do //посмотреть, что будет, если все числа найдутся a[i+1]:=a[i]+1; } k:=5; if proverka(a,k) then writeln('da') else writeln('net'); readln(); end.
- Log in to post comments
- 520 reads
vedro-compota
Sat, 07/20/2024 - 19:52
Permalink
function proverka(b:arr; j
--
1) при обходе массива нет нужды использовать никакие начальные и конечных значения индексов, их можно получить динамически (low и high) в данном случае, судя по всему мы обходим не весь массив, очень похоже что это не правильный код
2) Если хотя бы одно из значений в массиве не встрелось - уже можно выходить из обоих циклов, дважды применив break
_____________
матфак вгу и остальная классика =)
drl
Tue, 07/23/2024 - 10:54
Permalink
Исправления
drl
Tue, 07/23/2024 - 11:12
Permalink
Или так
false присваивается, когда внутренний цикл пройден
vedro-compota
Sat, 07/27/2024 - 18:43
Permalink
небольшое замечание
-- можно было бы сразу выставить флаг, и для втрого брейка использовать поверку флага, это бы сделало второе сравнение более просытам, пределагаю переписать именно функцию в этом ключе, остальное можно не дублировать
_____________
матфак вгу и остальная классика =)