Урок 15 задача 11(новая)

Урок 15 задача 11 (новая задача)

Пусть есть процедура, которая умеет сдвигать массив влево на 1 элемент, начиная с указанного символа (устанавливая последний элемент равным нулю):

type newArr = array [1..5] of integer;
  
procedure shiftArr(var promArr: newArr; k:integer);
var j:integer;
begin
  for j:=k to 4 do
    promArr[j]:=promArr[j+1];
  promArr[high(promArr)]:=0;
end;

Задача: У вас есть исходный массив случайных целых чисел из 5 элементов. Пользователь вводит три числа целых числа, сохраните их во второй массив и затем проведите сдвиг элементов исходного массива, для каждого случая их совпадения с элементами из второго массива, для сдвига используйте процедуру shiftArr().
Пример 1:

Исходный массив: 1 5 6 8 9
Числа пользователя:
2
4
5
Ответ:
1 6 8 9 0

Пример 2:

Исходный массив: 1 5 6 8 9
Числа пользователя:
8
4
6
Ответ:
1 5 9 0 0

Пример 3:

Исходный массив: 1 5 6 5 9
Числа пользователя:
5
4
6
Ответ:
1 9 0 0 0
program project1;

type newArr = array [1..5] of integer;

type newArr1 = array [1..3] of integer;

var numArr: newArr;
    usrArr: newArr1;
    i: integer;

procedure shiftArr(var promArr: newArr; k:integer);
var j:integer;
begin
  for j:=k to 4 do
    promArr[j]:=promArr[j+1];
    promArr[high(promArr)]:=0;
end;

function unicalArr(var promArr:newArr; promArr1:newArr1):newArr;
var x,y:integer;

begin
  for x := 1 to 3 do
    for y := 1 to 5 do
    begin
      if((promArr1[x]=promArr[y]))then
      begin
        shiftArr(numArr,y);
      end;
      result:=promArr;
    end;
end;

begin
  for i:=1 to 3 do
  begin
    write('Введите ',i,' элемент массива: '); readln(usrArr[i]);
  end;
  writeln();
  for i:=1 to 5 do
  begin
    write('Введите ',i,' элемент массива: '); readln(numArr[i]);
  end;
  writeln();
  unicalArr(numArr,usrArr);
  for i:=1 to 5 do
  begin
    write(numArr[i],'|');
  end;
  readln();
end.                   
vedro-compota's picture

1)

function unicalArr(var promArr:newArr; promArr1:newArr1):newArr;
var x,y:integer;
 
begin
  for x := 1 to 3 do
    for y := 1 to 5 do
    begin
      if((promArr1[x]=promArr[y]))then
      begin
        shiftArr(numArr,y);
      end;
      result:=promArr;
    end;
end;

-- result нет смысла присваивать каждый раз в цикле

2)

function unicalArr(var promArr:newArr; promArr1:newArr1):newArr;

-- нужно возвращать значение (для чего функция и нужна) или обработывать по ссылке (случай с процедурой)

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

program project1;

type newArr = array [1..5] of integer;

type newArr1 = array [1..3] of integer;

var numArr: newArr;
    usrArr: newArr1;
    i: integer;

procedure shiftArr(var promArr: newArr; k:integer);
var j:integer;
begin
  for j:=k to 4 do
    promArr[j]:=promArr[j+1];
    promArr[high(promArr)]:=0;
end;

procedure arrComparison(var promArr:newArr; promArr1:newArr1);
var x,y:integer;

begin
  for x := 1 to 3 do
    for y := 1 to 5 do
    begin
      if((promArr1[x]=promArr[y]))then
      begin
        shiftArr(numArr,y);
      end;
    end;
end;

begin
  for i:=1 to 3 do
  begin
    write('Введите ',i,' элемент массива: '); readln(usrArr[i]);
  end;
  writeln();
  for i:=1 to 5 do
  begin
    write('Введите ',i,' элемент массива: '); readln(numArr[i]);
  end;
  writeln();
  arrComparison(numArr,usrArr);
  for i:=1 to 5 do
  begin
    write(numArr[i],'|');
  end;
  readln();
end. 
vedro-compota's picture

решение засчитано

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