Консультация № 200367
03.03.2021, 05:26
0.00 руб.
0 1 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Запросить размерность одномерного массива. Заполнить его случайными числами от -10 до 20. Вставить заданное число в одномерный массив целых чисел:
а) после первого отрицательного элемента; Выводить все промежуточные значения.
б) перед последним четным элементом. Выводить все промежуточные значения
Delphi

Обсуждение

давно
Профессор
401888
1232
03.03.2021, 06:55
общий
это ответ
Здравствуйте, Ericsson!
Можно решить так.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var a,a1:array of integer;
n,k,i,j:integer;
s:string;
begin
//вводим размерность массива
repeat
n:=strtoint(inputbox('','Введите размер массива от 1 до 20 n=','0'));
until n in [1..20];
setlength(a,n);
randomize;
//заполняем его случайными числами от -10 до 20
//и выводим в Лабель
Memo1.Clear;
Memo1.Lines.Add('Исходный массив'+#13#10);
s:='';
for i:=0 to n-1 do
begin
a[i]:=-10+random(31);
s:=s+inttostr(a[i])+' ';
end;
Memo1.Lines.Add(s+#13#10);
//запомним массив для второй вставки
setlength(a1,n);
a1:=a;
//вводим число для вставки
k:=strtoint(inputbox('','Введите целое число для вставки k=','0'));
Memo1.Lines.Add('Число для вставки k='+inttostr(k)+#13#10);
//ищем позицию первого отрицательного элемента
i:=0;
while (i<n)and(a[i]>0) do inc(i);
if i=n then Memo1.Lines.Add('В массиве нет отрицательных элементов'+#13#10)
else
begin
Memo1.Lines.Add('Первый отрицательный элемент='+inttostr(a[i])+' его номер='+inttostr(i+1)+#13#10);
//вставляем число
n:=n+1;
setlength(a,n);
for j:=n-1 downto i+2 do
a[j]:=a[j-1];
a[i+1]:=k;
Memo1.Lines.Add('Вставка числа k после первого отрицательного');
s:='';
for i:=0 to n-1 do
s:=s+inttostr(a[i])+' ';
Memo1.Lines.Add(s+#13#10);
end;
//ищем позицию последнего четного элемента
n:=n-1;//возвращаем начальный размер масссива
i:=n-1; //встаем в конец
while(i>=0)and(a1[i] mod 2<>0)do dec(i); //ишем первый с конца четный
if i=-1 then Memo1.Lines.Add('В массиве нет четных элементов'+#13#10)
else
begin
Memo1.Lines.Add('Последний четный элемент='+inttostr(a1[i])+' его номер='+inttostr(i+1)+#13#10);
//вставляем число
n:=n+1;
setlength(a1,n);
for j:=n-1 downto i+1 do
a1[j]:=a1[j-1];
a1[i]:=k;
Memo1.Lines.Add('Вставка числа k после первого отрицательного'+#13#10);
s:='';
for i:=0 to n-1 do
s:=s+inttostr(a1[i])+' ';
Memo1.Lines.Add(s);
end;
end;

Во вложении предлагаемый вид формы.
Прикрепленные файлы:
78e83c8198e280fe66ad0d94125c599b1f737cc0.jpg
5
Форма ответа