Задание 17 Урок 15

Задание 17 Урок 15

Даны два массива по 20 элементов каждый (заполните случайными числами, так чтобы среди элементов массива при очередном запуске программы могли встретиться и отрицательные и положительные числа).
Сравните каждый 3-ий элемент 1-ого массива с каждый 2-ым элементов 2-ого массива - сравнение проводите пока не закончится та выборка, которая короче.

Например пусть мы имеем два массива (запишу лишь начальные элементы):

1 | 2 | -10 | 5 | 0 | 12 | 2 | 8 ....
0 | 3 | 4 | 9 | 7 | 5 | -8 | 3.....

для них программа должна вывести:

-10 меньше 3
12 больше 9

- других сравнений не последует, так как новых из "каждых третьих элементов" в 1-ом массиве больше нет.

type arr = array[1..20] of integer;
var i,min,max : integer;
  first_array, second_array: arr;

function check_reinitialization(z_array: arr; mn,mx: integer): arr;
var z,u : integer;
  c : boolean;

function reinitialization(): arr;
var k : integer;
begin
  mn := -30;
  mx := 30;
  randomize;
  for k := low(z_array) to high(z_array) do
    z_array[k] := mn + random(mx - mn + 1);
  result := z_array;
end;

begin
  u := 0;
  repeat
    for z := low(z_array) to high(z_array) do
      if z_array[1] >= 0 then// если первое значение положительное или равно 0
        begin
          if z_array[z] < 0 then
            begin
              c := true;
              break;
            end
          else// если все 0 или положительные
            if (z_array[z] >= 0) and (z = high(z_array)) then
              c := false;
        end
      else// если первое значение отрицательное
        if z_array[z] > 0 then
          begin
            c := true;
            break;
          end
        else// если все отрицательные
          if (z_array[z] < 0) and (z = high(z_array)) then
            c := false;
    if  c = false then
      z_array := reinitialization()
    else
      u += 1;
  until u = 1;
  result := z_array;
end;

procedure print(c_array: arr);
var p : integer;
begin
  for p := low(c_array) to high(c_array) do
    write('|', c_array[p],'|');
end;

procedure third_vs_second(f_array,s_array: arr);
var f,s : integer;

procedure comparision(value_f,value_s : integer);
begin
  if value_f = value_s then
    write(value_f, ' равно ', value_s)
  else
    if value_f > value_s then
      write(value_f, ' больше ', value_s)
    else
      write(value_f, ' меньше ', value_s);
  writeln();
end;

begin
  s := 2;
  for f := low(f_array) to high(f_array) do
    if ((f mod 3) = 0) then
      begin
        comparision(f_array[f],s_array[s]);// если как в примере
        s += 2;
       {repeat// если каждый третий первого с каждым вторым второго
          comparision(f_array[f],s_array[s]);
          s += 2;
        until s = high(s_array);
        s := 2;}
      end;
end;

begin
  min := -30;
  max := 30;
  randomize;
  for i := low(first_array) to high(first_array) do
    first_array[i] := min + random(max - min + 1);
  for i := low(second_array) to high(second_array) do
    second_array[i] := min + random(max - min + 1);
  first_array := check_reinitialization(first_array,min,max);
  second_array := check_reinitialization(second_array,min,max);
  print(first_array);
  writeln();
  print(second_array);
  writeln();
  third_vs_second(first_array,second_array);
  readln();
end.

консоль

|-14||-19||21||-14||21||25||0||-16||30||-11||-1||30||-17||23||1||9||-7||14||-9||-17|
|-30||-13||5||1||-9||-9||-19||3||-7||-3||6||6||12||-16||-20||-18||8||23||1||-1|
21 больше -13
25 больше 1
30 больше -9
30 больше 3
1 больше -3
14 больше 6
|10||1||19||-19||20||30||14||-6||-16||27||-16||20||-17||6||-10||-23||2||2||-1||4|
|-14||0||12||9||24||8||-30||11||-5||9||-27||-11||-2||-25||-17||-2||-4||24||-22||15|
19 больше 0
30 больше 9
-16 меньше 8
20 больше 11
-10 меньше 9
2 больше -11
vedro-compota's picture

уйти от использования вложенных фукций

_____________
матфак вгу и остальная классика =)