Подскажите, что нужно изменить, чтобы программа правильно работала(паскаль) Заполнить массив случайными...

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

Подскажите, что нужно изменить, чтобы программа правильно работала(паскаль) Заполнить массив случайными числами в интервале [-100,100] и переставить элементы так, чтобы все положительные элементы стояли в начала массива, а все отрицательные и нули – в конце. Вычислите количество положительных элементов. Пример: Массив: 20 -90 15 -34 10 0 Результат: 20 15 10 -90 -34 0 Количество положительных элементов: 3

Var i,c:integer; w:array[1.10] of integer; a:array[1.10] of integer; begin randomize; for i:=1 to 10 do a[i]:=random(201)-100; for i:=1 to 10 do if a[i]>0 then begin w[i]:=a[i]; c:=c+1; end; writeln('Кол-во положительных элементов: ',c); for i:=1 to 10 do begin if a[i]<=0 then begin a[c]:=w[c];

end; end; writeln('Получившийся массив:'); writeln(' '); for i:=1 to 10 do write(w[i],' '); end.

avatar
задан 9 дней назад

2 Ответа

0

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

  1. Объявление переменных: Переменная c должна быть инициализирована нулем, так как она используется для подсчета количества положительных элементов.

  2. Массивы: Ваша логика перемещения элементов между массивами a и w некорректна. Также массив w используется неправильно, так как он должен содержать положительные элементы, тогда как массив a должен быть переработан, чтобы содержать все элементы в нужном порядке.

  3. Перемещение элементов: Для перемещения элементов необходимо использовать один массив, а не два. Если вы хотите использовать два массива, вам нужно более четко определить, как вы будете распределять элементы по массивам.

  4. Вывод массива: Вы выводите массив w, который не содержит всех элементов в нужном порядке. Необходимо выводить массив a.

Вот исправленный код:

program RearrangeArray;
var
  i, c, posIndex: integer;
  a: array[1.10] of integer;
  rearranged: array[1.10] of integer;
begin
  randomize;
  c := 0;
  posIndex := 1;

  // Заполнение массива случайными числами
  for i := 1 to 10 do
    a[i] := random(201) - 100;

  // Перестановка: сначала положительные, затем отрицательные и нули
  for i := 1 to 10 do
  begin
    if a[i] > 0 then
    begin
      rearranged[posIndex] := a[i];
      posIndex := posIndex + 1;
      c := c + 1;
    end;
  end;

  for i := 1 to 10 do
  begin
    if a[i] 

avatar
ответил 9 дней назад
0

Для того чтобы программа правильно работала, нужно изменить следующее:

  1. Исправить опечатку в строке if a[i]>0 then begin, заменив символ > на более подходящий символ >.
  2. Исправить ошибку в строке a[c]:=w[c];, так как здесь вы пытаетесь присвоить значение из массива w по индексу c массиву a по индексу c, что может привести к ошибке. Нужно переписать эту строку так: a[i]:=w[i];.
  3. В строке for i:=1 to 10 do нужно изменить пределы цикла итерации переменной i внутри цикла, чтобы правильно переставить элементы массива. Вместо for i:=1 to 10 do нужно написать for i:=1 to c do.
  4. Помимо этого, следует добавить вывод исходного массива перед перестановкой элементов для наглядности.

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

avatar
ответил 9 дней назад

Ваш ответ

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