В массиве из 20 целых чисел найдите наибольший элемент среди отрицательных и поменяйте его местами с...

Тематика Информатика
Уровень 10 - 11 классы
Pascal массив целые числа отрицательные элементы наибольший элемент замена элементов алгоритм программирование переменные ошибки кода
0

В массиве из 20 целых чисел найдите наибольший элемент среди отрицательных и поменяйте его местами с первым элементом. Вот начал делать, а потом не знаю как дальше:

const k=20; var a:array[1.k] of integer; g,i,max:=integer; begin for i:=1 to n do begin a[i]:=random(20)-10; write(a[i],' '); max:=a[i]; for i:=1 to n do if a[i]<0 then max:=a[i]; writeln('max=',max); end;

Дальше не знаю, там по-моему надо ввести переменную (в моём случае "g") и мне кажется там ошибка в поиске максимально среди отрицательных элементов. Помогите пожалуйста.

avatar
задан месяц назад

2 Ответа

0

Давайте доработаем ваш код:

const k = 20; var a: array[1.k] of integer; i, max, g, temp: integer; begin randomize; for i := 1 to k do begin

a[i] := random(20) - 10;
write(a[i], ' ');

end;

max := -11; // устанавливаем начальное значение максимального отрицательного элемента

for i := 1 to k do begin

if (a[i] < 0) and (a[i] > max) then
begin
  max := a[i];
  g := i; // сохраняем индекс максимального отрицательного элемента
end;

end;

writeln('Max negative number:', max);

// меняем местами максимальный отрицательный элемент и первый элемент temp := a[1]; a[1] := a[g]; a[g] := temp;

// выводим измененный массив writeln('Array after swapping:'); for i := 1 to k do begin

write(a[i], ' ');

end; end.

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

avatar
ответил месяц назад
0

Конечно, я помогу. Давайте разберем по шагам, что необходимо сделать для выполнения задания.

  1. Инициализация массива и заполнение его случайными числами.
  2. Поиск наибольшего отрицательного элемента.
  3. Замена найденного элемента с первым элементом массива.

Ваш код нуждается в некоторых исправлениях и доработках. Вот как это можно сделать:

const
  k = 20;
var
  a: array[1.k] of integer;
  i, maxIndex: integer;
  max: integer;
begin
  // Заполнение массива случайными числами и вывод на экран
  Randomize;
  for i := 1 to k do
  begin
    a[i] := Random(21) - 10; // Генерация случайного числа в диапазоне [-10.10]
    write(a[i], ' ');
  end;
  writeln;

  // Инициализация переменных для поиска
  max := -11; // Заведомо меньше любого элемента в массиве (так как минимальное значение -10)
  maxIndex := -1; // Индекс для хранения позиции наибольшего отрицательного элемента

  // Поиск наибольшего отрицательного элемента
  for i := 1 to k do
  begin
    if (a[i] < 0) and (a[i] > max) then
    begin
      max := a[i];
      maxIndex := i;
    end;
  end;

  // Проверка, найден ли отрицательный элемент
  if maxIndex  -1 then
  begin
    // Обмен первого элемента и наибольшего отрицательного элемента
    a[maxIndex] := a[1];
    a[1] := max;

    // Вывод измененного массива
    writeln('Массив после замены:');
    for i := 1 to k do
      write(a[i], ' ');
    writeln;
  end
  else
    writeln('Отрицательных элементов в массиве нет.');
end.

Объяснение:

  1. Заполнение массива и вывод: Мы заполняем массив случайными числами в диапазоне от -10 до 10 и выводим его на экран.

  2. Поиск наибольшего отрицательного элемента: Инициализируем max значением -11 (так как это меньше минимального возможного значения в массиве). maxIndex изначально установим в -1, чтобы понимать, найден ли отрицательный элемент. Мы проходим по массиву и ищем наибольший отрицательный элемент. Если такой элемент найден, сохраняем его значение в max, а его индекс в maxIndex.

  3. Замена элемента: Если maxIndex не равен -1, то есть был найден отрицательный элемент, мы меняем его местами с первым элементом массива. В противном случае выводим сообщение о том, что отрицательных элементов в массиве нет.

Этот код выполнит требуемые действия и корректно обработает массив.

avatar
ответил месяц назад

Ваш ответ

Вопросы по теме