Родились сегодня:
goldssky@yandex.ru


Лидеры рейтинга

ID: 226425

Konstantin Shvetski

Модератор

768

Россия, Северодвинск


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

342

Россия, пос. Теплоозёрск, ЕАО


ID: 401284

Михаил Александров

Академик

278

Россия, Санкт-Петербург


ID: 325460

CradleA

Мастер-Эксперт

211

Беларусь, Минск


ID: 137394

Megaloman

Мастер-Эксперт

148

Беларусь, Гомель


ID: 400815

alexleonsm

6-й класс

130


ID: 400669

epimkin

Профессионал

120


8.8.15

09.05.2021

JS: 2.8.21
CSS: 4.5.5
jQuery: 3.6.0
DataForLocalStorage: 2021-05-14 03:16:12-standard


Создание программ на языках Pascal, Delphi и Lazarus.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)

Консультация онлайн # 200367

Раздел: Pascal / Delphi / Lazarus
Автор вопроса: Ericsson (Посетитель)
Дата: 03.03.2021, 05:26 Консультация закрыта
Поступило ответов: 1

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

Ответ # 280798 от puporev
Здравствуйте, 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;

Во вложении предлагаемый вид формы.

puporev

Профессор
03.03.2021, 06:55
5
Мини-форум консультации # 200367

Нет сообщений в мини-форуме

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Лучшие эксперты раздела

puporev

Профессор

Рейтинг: 111

Зенченко Константин Николаевич

Старший модератор

Рейтинг: 74

Степанов Иван /REDDS

4-й класс

Рейтинг: 1

Лысков Игорь Витальевич

Мастер-Эксперт

Рейтинг: 0

Асмик Гаряка

Советник

Рейтинг: 0

Орловский Дмитрий

Мастер-Эксперт

Рейтинг: 0