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

Раздел: Pascal / Delphi / Lazarus
Автор вопроса: Black Widow (Посетитель)
Дата: 14.11.2021, 18:18 Консультация неактивна
Поступило ответов: 2
Уважаемые эксперты! Пожалуйста, помогите! Нужно составить программу с объяснениями к каждой строчке. На языке Pascal.
Задание звучит так: "Составьте программу упорядочения (по возрастанию) элементов одномерного массива А(N), принадлежащих отрезку (O,R)."


Ответ # 1, Megaloman (Мастер-Эксперт)

Код
const                                     { Как константы определим:}
     N = 20;                              { количество элементов массива;}
     O = -99;                             { начальное значение отрезка;}
     R = 99;                              { конечное значение отрезка;}
var
   A : array [1..N] of integer;           { опишем массив, в который занесём исходные значения;}
   i, j : Integer;                        { индексы массива;}
   Aji : Integer;                         { значение элемента массива;}
   maxx : Integer;                        { максимум для генерации случайного числа от 0<=A[i]<maxx=R-O+1;}

begin
     randomize;                           { инициализация генератора случайных чисел;}
     maxx := R-O+1;                       { вычисление верхней границы случайного числа;}

     writeln('Исходный массив A');        { выдача заголовка для печати исходного массива;}
     for i := 1 to N do begin             { цикл по всем элементам массива;}
         A[i] := random(maxx) + O;        { занесение в массив случайного значения O<=A[i]<=R;}
         write(A[i] : 4);                 { печать значения элемента массива;}
         end;
                                          { Сортировка элементов массива по возрастанию;}
     for i := 1 to N do begin             { цикл по всем элементам массива от 1 до N;}
         for j := i to N do begin         { цикл по элементам массива от текущего i до N;}
                                   { если значение текущего элемента i больше значения эллемента массива с бОльшим номером,}
             If (A[i] > A[j]) Then begin  { то меняем значения местами:}
                Aji := A[j];              { для чего заносим значение элемента с бОльшим номером в промежуточную переменную,}
                A[j] := A[i];             { в элемент с бОльшим номером заносим значение текущего элемента;}
                A[i] := Aji;              { в текущий элемент массива заносим мЕньшее значение из промежуточной переменной.}
             end;
         end;
     end;

     writeln;                      { пропустим пустую строку чтобы отделить вывод исходного массива от отсортированного;}
     writeln('Отсортированный массив A'); { выдача заголовка для печати отсортированного массива;}
     for i:=1 to N do begin               { цикл по всем элементам массива;}
         write(A[i] : 4);                 { печать значения элемента массива;}
         end;
     writeln;
end.
В условии задачи не указан тип элементов массива, решено в целых числах, что никак не влияет на логику работы программы при необходимости модифицировать для действительных чисел.

Последнее редактирование 15.11.2021, 16:33 Megaloman (Мастер-Эксперт)


Megaloman

Мастер-Эксперт
15.11.2021, 16:22
5
Огромное спасибо! Не представляю, что бы делала без Вас!
Доброе время суток!
Вариант сортировки по индексам массива:
Код [Pascal]
const
  n=10;{кол-во элементов}
var
  a:array[1..n]of integer;{массив}
  i,Aij,O,R:integer;{используемые переменные}
begin
  randomize;{сброс случайного генератора}
  repeat
    write('Enter O[',1,'..',n-1,']:=');{просим ввести нижний индекс}
    readln(O);{вводим}
  until(1<=O)and(O<n);{проверяем ввод}
  repeat
    write('Enter R[',O+1,'..',n,']:=');{просим ввести верхний индекс}
    readln(R);{вводим}
  until(O<R)and(R<=n);{проверяем ввод}
  writeln('before sort');{выводим массив до сортировки}
  for i:=1 to n do{цикд создания и вывода массива}
    begin
      a[i]:=random(100);{создаем элемент массива}
      write(a[i]:3);{выводим его}
    end;
  writeln;{переводим строку}
  i:=O;{начало "ленивой" сортировки}
  while i<R do{пока текущий индекс меньше верхней гранницы}
    if a[i]>a[i+1] then{если больше меняем}
      begin
        Aij:=a[i];{запоминаем}
        a[i]:=a[i+1];{меняем}
        a[i+1]:=Aij;{востанавливаем}
        i:=O;{в начало сортировки}
      end else inc(i);{к следующему проверяемому элементу}
  writeln('after sort');{выводим результат}
  for i:=1 to n do{цикл вывода}
    write(a[i]:3);{выводим элемент}
end.

Удачи!

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

Старший модератор
16.11.2021, 12:02
5
Спасибо!

Мини-форум консультации # 201687

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

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

ID: 31795

322525

= общий =    15.11.2021, 11:14

принадлежащих отрезку (O,R)


Уточните O,R - индексы элементов массива или сортируемые значения.
=====
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.
smile
Black Widow

Посетитель

ID: 405520

322528

= общий =    15.11.2021, 17:05
Понятия не имею. Ничего не объясняли и не уточняли. Есть только само задание: "Составьте программу упорядочения (по возрастанию) элементов одномерного массива А(N), принадлежащих отрезку (O,R)." Сделайте так, как считаете нужным. Буду очень благодарна!
Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.