Advertisement
KedrikFeeD

Замещение Т8.Зд3

Jun 9th, 2020
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 9.34 KB | None | 0 0
  1. program zd3;
  2.  {Заранее извиняюсь за грамоздскую программу}
  3. var
  4.   i, j, a, n, m, x, h, f: integer;
  5.   k: array[1..100, 1..100] of integer;
  6.   l: array[1..10000] of integer;
  7.  
  8. begin{Дан двумерный массив К(4,6). Написать программу, выполняющую сортировку
  9.   элементов массива К в порядке возрастания методом пузырька.}
  10.   Writeln('-' * 30);
  11.   Write('Введите количество строк: '); readln(n); //n - количество строк
  12.   Writeln('-' * 30);
  13.   Write('Введите количество столбцов: '); readln(m); //m - количество столбцов
  14.   Writeln('-' * 30);
  15.  
  16.     {Да-да, я снова все усложняю))) Да, спать ночью надо}
  17.     {Знаю, что можно было ограничиться одним методом, но я хотел еще показать второй метод,
  18.      не очень точный, но все же. Ну и там меня понесло на оформление и т.д. В общем, простите меня, если сможете}
  19.    
  20.   writeln('Введите номер, чтобы получить ответ. Чтобы завершить - введите 0 ');
  21.   Writeln('1 - Сортировка методом пузырька через преобразование двумерного массива в одномерный;');
  22.   Writeln('2 - Сортировка без преобразования в одномерный массив, но с погрешностью;');
  23.   Writeln('(Элементы идут по возрастанию сверху вниз и слева направо,');
  24.   Writeln(' но не соблюдают возрастание, если представлять вторую строчку продолжением первой и т.д.)');
  25.   repeat{Цикл работает до (f равно 0) }
  26.     Writeln('-' * 30); {Просто для разделения и более удобного чтения}
  27.     Readln(f);
  28.     if f = 1 then begin{Если введена цифра 1}
  29.       Writeln('-' * 30); {Просто для разделения и более удобного чтения}
  30.       Writeln('Вы выбрали метод преобразование двумерного в одномерный массив:'); writeln; //Просто оформление
  31.       Writeln('Стартовый массив:'); //тоже оформление
  32.        write(' '*3); //для выравнивания нумерации
  33.      for j:=1 to m do
  34.        Write(j:4,'.'); //Нумерация столбцов
  35.       writeln;
  36.       writeln;
  37.       for i := 1 to n do //заполнение двумерного массива случайными числами
  38.       begin
  39.         Write(i, '. '); //нумерация строк
  40.         for j := 1 to m do
  41.         begin
  42.           k[i, j] := random(-100, 100); //случайные числа от -100 до 100
  43.           Write(k[i, j]:5); //вывод элементов
  44.         end;
  45.         Writeln;
  46.         writeln;
  47.       end;
  48.      
  49.       Writeln('-' * 5); writeln; //И снова оформление
  50.       Writeln('Промежуточный одномерный массив: '); //Комментарий
  51.       write('l[', m * n, ']: '); //вывод обозначения и размерности массива l
  52.       h := 1; //Присвоение h числа 1 для дальнейшего использования в цикле
  53.       for i := 1 to n do //Разворачиваем двумерный массив в одномерный
  54.       begin
  55.         for j := 1 to m do
  56.         begin
  57.           l[h] := k[i, j]; //формирование массива l
  58.           write(l[h], ' '); //вывод элемента массива l
  59.           h := h + 1; //порядковый номер элемента массива l (+1)
  60.         end;
  61.       end;
  62.       writeln; writeln; //переход на две строки вниз
  63.       Writeln('-' * 5); //оформление
  64.      
  65.       for i := 1 to n * m - 1 Do //сортировка пузырьком одномерного массива
  66.         for a := 1 to n * m - i Do
  67.           if l[a] > l[a + 1] Then begin
  68.             x := l[a];
  69.             l[a] := l[a + 1];
  70.             l[a + 1] := x
  71.           end;
  72.       Writeln('Итоговый (Сформированный массив): '); //оформление
  73.       h := 1; //Возвращаем h в исходное значение
  74.       write(' '*3); //для выравнивания нумерации
  75.       for j:=1 to m do
  76.         Write(j:4,'.'); //Нумерация столбцов
  77.       writeln; //Перенос строки
  78.       writeln; //Перенос строки для оформления
  79.       for i := 1 to n do //преобразование одномерного массива обратно в двумерный
  80.       begin
  81.         Write(i, '. '); //нумерация строк
  82.         for j := 1 to m do
  83.         begin
  84.           k[i, j] := l[h]; //формирование массива k
  85.           write(k[i, j]:5); //вывод элемента массива k
  86.           h := h + 1; //порядковый номер элемента массива k (+1)
  87.         end;
  88.         Writeln; //перенос на новую строку
  89.         writeln; //перенос на новую строку для оформления
  90.       end;
  91.     end;
  92.    
  93.     if f = 2 then begin{Если введена цифра 2}
  94.       Writeln('-' * 30); {Просто для разделения и более удобного чтения}
  95.       Writeln('Вы выбрали метод без преобразования (С погрешностью)'); Writeln; //Оформление
  96.       Writeln('Стартовый массив:'); //Комментарий
  97.       write(' '*3); //для оформления
  98.       for j:=1 to m do
  99.        Write(j:4,'.'); //Нумерация столбцов
  100.       writeln; //перенос строки
  101.       writeln; //перенос строки для оформления
  102.       for i := 1 to n do //присвоение элементам случайного числа
  103.       begin
  104.         Write(i, '. '); //нумерация строк
  105.         for j := 1 to m do
  106.         begin
  107.           k[i, j] := random(-100, 100); //случайное число от -100 до 100
  108.           Write(k[i, j]:5); //вывод элементов
  109.         end;
  110.         Writeln; //переход на новую строку
  111.         writeln; //переход на новую строку для оформления
  112.       end;
  113.      
  114.       writeln;
  115.       for j := 1 to m do //сортировка столбцов массива методом пузырька
  116.       begin
  117.         for i := 1 to n - 1 Do
  118.           for a := 1 to n - i Do
  119.             if k[a, j] > k[a + 1, j] Then begin
  120.               x := k[a, j];
  121.               k[a, j] := k[a + 1, j];
  122.               k[a + 1, j] := x
  123.             end;
  124.       end;
  125.       Writeln('-' * 5); {Просто для разделения и более удобного чтения}
  126.       Writeln('Легкие элементы "всплыли" наверх:');
  127.       write(' '*3);
  128.       for j:=1 to m do
  129.        Write(j:4,'.'); //Нумерация столбцов
  130.       writeln; //перенос на новую строку
  131.       writeln; //перенос на новую строку для оформления
  132.       for i := 1 to n do //вывод отсортированного по столбцам массива
  133.       begin
  134.         Write(i, '. '); //нумерация строк
  135.         for j := 1 to m do
  136.         begin
  137.           Write(k[i, j]:5);
  138.         end;
  139.         Writeln;
  140.         Writeln;
  141.       end;
  142.      
  143.       writeln;
  144.      
  145.       for j := 1 to n do //сортировка строк методом пузырька
  146.       begin
  147.         for i := 1 to m - 1 Do
  148.           for a := 1 to m - i Do
  149.             if k[j, a] > k[j, a + 1] Then begin
  150.               x := k[j, a];
  151.               k[j, a] := k[j, a + 1];
  152.               k[j, a + 1] := x
  153.             end;
  154.       end;
  155.      
  156.       Writeln('-' * 5); {Просто для разделения и более удобного чтения}
  157.       Writeln('"Легкие" элементы "уехали" влево (Итог):'); //Комментарий
  158.       write(' '*3); //оформление
  159.       for j:=1 to m do
  160.        Write(j:4,'.'); //Нумерация столбцов
  161.       writeln; //переход на новую строку
  162.       writeln; //переход на новую строку для оформления
  163.       for i := 1 to n do //Вывод отсортированного по строкам массива
  164.       begin
  165.         Write(i, '. '); //Нумерация строк
  166.         for j := 1 to m do
  167.         begin
  168.           Write(k[i, j]:5);
  169.         end;
  170.         Writeln; //переход на новую строку
  171.         Writeln; //переход на новую строку для оформления
  172.       end;
  173.     end;
  174.    
  175.   until f = 0; //условие при котором программа завершает свою работу
  176.   Writeln('-' * 30); //оформление
  177. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement