Урок 15. Задача 17.
Primary tabs
Дан массив длиной N (где 10≤N В качестве ответа (если отрезок найден) получите его начальный и конечных индекс - m и p ( 1≤m
Указание: Проверку массива на соответствие условиям задачи вынести в подпрограмму (процедуру, которая вычислит нужные индексы, если есть)
Подсказка: можно использовать функцию проверки отрезка в массиве из предыдущей задачи.
type newArr = array [1..100] of integer;
var i, m, p, F, F_F, k :integer;
Arr_N :newArr;
fl :boolean;
function random_array(Arr_N :newArr) :newArr;
var i, a :integer;
begin
randomize;
a := 10 + random(90); // длина массива
for i := 1 to a do
begin
if i < a then
Arr_N[i] := random(100) // инициализация исходного массива
else
Arr_N[i] := -1; // граница используемых значений
end;
random_array := Arr_N;
end;
function count_array(Arr_N :newArr) :integer;
var i, j :integer;
begin
j := 0;
for i := low(Arr_N) to high(Arr_N) do
begin
if Arr_N[i] = -1 then
break;
j := j + 1;
end;
count_array := j;
end;
function segment_array(A_n :newArr; k, F :integer) :boolean;
var i, j :integer;
fl :boolean;
begin
fl := false;
for i := 0 to k do
begin
for j := 1 to f do
if A_n[j] = i then
begin
fl := true;
break;
end;
if not fl then
break;
end;
segment_array := fl;
end;
procedure segment_index(A_n :newArr; k, F, m, p :integer);
var i, j :integer;
begin
for i := 1 to F do
for j := 0 to k do
if A_n[i] = j then
begin
if j > m then
end;
end;
begin
fl := true;
Arr_N := random_array(Arr_N); // массив
F := count_array(Arr_N); // количество задействованных элементов массива
writeln(F);
for i := low(Arr_N) to high(Arr_N) do
write(Arr_N[i], ' ');
k := F div 8; // конец отрезка
//F_F := k + 1;
fl := segment_array(Arr_N, k, F);
writeln(fl, ' ', k);
readln();
end.- Log in to post comments
- 3229 reads
vedro-compota
Wed, 07/13/2022 - 20:39
Permalink
можно сделать длину массива =
можно сделать длину массива = 15 и решать просто с фиксированной длиной
_____________
матфак вгу и остальная классика =)
Dennis80
Tue, 07/19/2022 - 18:58
Permalink
type newArr = array [1..99]
type newArr = array [1..99] of integer; var k, F :integer; Arr :newArr; fl :boolean; function random_array() :newArr; // создаем массив var i :integer; Arr_N :newArr; begin randomize; for i := 1 to 99 do Arr_N[i] := random(100); random_array := Arr_N; end; function num_in(F :integer; Arr :newArr) :boolean; // ищем отрезок var i, j, k :integer; fl :boolean; begin k := F - 1; // отрезок for i := 0 to k do begin fl := false; for j:= low(Arr) to high(Arr) do if i = Arr[j] then begin fl := true; break; end; if not fl then break; end; num_in := fl; end; procedure index_F(F :integer; Arr :newArr); var i, j, m, p :integer; fl : boolean; begin fl := true; k := F - 1; m := high(Arr); p := low(Arr); for i := 0 to k do for j := low(Arr) to high(Arr) do begin if (i = Arr[j]) and (j < m) then m := j; if (i = Arr[j]) and (j > p) then p := j; end; write('m = ', m, ' p = ', p); end; begin F := 3; Arr := random_array(); //for i := low(Arr) to high(Arr) do //write(Arr[i], ' '); fl := num_in(F, Arr); if fl then index_F(F, Arr); readln(); end.vedro-compota
Wed, 07/20/2022 - 20:16
Permalink
Основная подпрограмма здесь
Основная подпрограмма здесь скорее всего должна:
_____________
матфак вгу и остальная классика =)
Dennis80
Thu, 07/28/2022 - 18:50
Permalink
type newArr = array [1..99]
type newArr = array [1..99] of integer; var k, F, m, p :integer; Arr :newArr; fl :boolean; function random_array() :newArr; // создаем массив var i :integer; Arr_N :newArr; begin randomize; for i := 1 to 99 do Arr_N[i] := random(100); random_array := Arr_N; end; function num_in(F :integer; Arr :newArr) :boolean; // ищем отрезок var i, j, k :integer; fl :boolean; begin k := F - 1; // отрезок for i := 0 to k do begin fl := false; for j:= low(Arr) to high(Arr) do if i = Arr[j] then begin fl := true; break; end; if not fl then break; end; num_in := fl; end; procedure index_F(var fl :boolean; var m, p :integer; k :integer; Arr :newArr); var i, j:integer; begin if fl then begin for i := 0 to k do for j := low(Arr) to high(Arr) do begin if (i = Arr[j]) and (j < m) then m := j; if (i = Arr[j]) and (j > p) then p := j; end; write('m = ', m, ' p = ', p); end else write('Emptiness'); end; begin F := 3; fl := true; Arr := random_array(); fl := num_in(F, Arr); k := F - 1; m := high(Arr); p := low(Arr); index_F(fl, m, p, k, Arr); readln(); end.vedro-compota
Thu, 07/28/2022 - 20:02
Permalink
Идея: передать в основной
Идея: использовать в основной процедуре ранее написанную (из задачи 16) функцию, которая уметь проверять отрезок (см. предыдущую задачу), передавая ей границы очередного отрезка, который надо проверить
- напр. тут я выделил отрезок f=5 m=2 p=6
_____________
матфак вгу и остальная классика =)
Dennis80
Sun, 08/07/2022 - 14:06
Permalink
type newArr = array [1..99]
type newArr = array [1..99] of integer; var k, F, m, p :integer; Arr :newArr; fl :boolean; function random_array() :newArr; // создаем массив var i :integer; Arr_N :newArr; begin randomize; for i := 1 to 99 do Arr_N[i] := random(4); random_array := Arr_N; end; function num_in(var m, p :integer; var fl :boolean; k :integer; Arr :newArr) :boolean; var i, j :integer; begin for i := 0 to k do begin fl := false; for j:= m to p do if i = Arr[j] then begin fl := true; break; end; if not fl then break; end; num_in := fl; end; function len_num(m, p :integer) :integer; var i, j :integer; begin j := 0; for i := m to p do j := j + 1; len_num := j; end; procedure index_F(var m, p :integer; var fl :boolean; k :integer; Arr :newArr); var i, j :integer; begin fl := num_in(m, p, fl, k, Arr); if fl then write('m = ', m, ' p = ', p) else write('Emptiness'); end; begin fl := true; Arr := random_array(); randomize; p := 9; m := p div 2; k := len_num(m, p) div 2; index_F(m, p, fl, k, Arr); readln(); end.vedro-compota
Wed, 08/24/2022 - 19:39
Permalink
Идея: использовать в основной
Идея: использовать в основной процедуре ранее написанную (из задачи 16) функцию, которая уметь проверять отрезок (см. предыдущую задачу, можно целиком без изменений взять функцию num_in() отсюда), передавая ей границы очередного отрезка, который надо проверить
- напр. тут я выделил отрезок f=5 m=2 p=6
_____________
матфак вгу и остальная классика =)
Dennis80
Sun, 09/11/2022 - 09:16
Permalink
type newArr = array [1..99]
type newArr = array [1..99] of integer; var k, F, m, p :integer; Arr :newArr; fl :boolean; function random_array() :newArr; // создаем массив var i :integer; Arr_N :newArr; begin randomize; for i := 1 to 99 do Arr_N[i] := random(7); random_array := Arr_N; end; function num_in(m, p, k :integer; Arr :newArr) :boolean; var i, j :integer; fl :boolean; begin for i := 0 to k do begin fl := false; for j:= m to p do if i = Arr[j] then begin fl := true; break; end; if not fl then break; end; num_in := fl; end; procedure index_F(var m, p :integer; var fl :boolean; k, F :integer; Arr :newArr); var i :integer; begin m := 1; p := F; for i := low(Arr) to (high(Arr) - F) do begin fl := num_in(m, p, k, Arr); if fl then begin writeln('m = ', m, ' ', 'p = ', p); break; end else begin m := m + 1; p := p + 1; end; end; end; begin Arr := random_array(); fl := false; F := 7; k := F - 4; index_F(m, p, fl, k, F, Arr); if not fl then writeln('No'); readln(); end.vedro-compota
Sun, 09/11/2022 - 14:55
Permalink
засчитано
засчитано
_____________
матфак вгу и остальная классика =)