Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program zd3;
- {Заранее извиняюсь за грамоздскую программу}
- var
- i, j, a, n, m, x, h, f: integer;
- k: array[1..100, 1..100] of integer;
- l: array[1..10000] of integer;
- begin{Дан двумерный массив К(4,6). Написать программу, выполняющую сортировку
- элементов массива К в порядке возрастания методом пузырька.}
- Writeln('-' * 30);
- Write('Введите количество строк: '); readln(n); //n - количество строк
- Writeln('-' * 30);
- Write('Введите количество столбцов: '); readln(m); //m - количество столбцов
- Writeln('-' * 30);
- {Да-да, я снова все усложняю))) Да, спать ночью надо}
- {Знаю, что можно было ограничиться одним методом, но я хотел еще показать второй метод,
- не очень точный, но все же. Ну и там меня понесло на оформление и т.д. В общем, простите меня, если сможете}
- writeln('Введите номер, чтобы получить ответ. Чтобы завершить - введите 0 ');
- Writeln('1 - Сортировка методом пузырька через преобразование двумерного массива в одномерный;');
- Writeln('2 - Сортировка без преобразования в одномерный массив, но с погрешностью;');
- Writeln('(Элементы идут по возрастанию сверху вниз и слева направо,');
- Writeln(' но не соблюдают возрастание, если представлять вторую строчку продолжением первой и т.д.)');
- repeat{Цикл работает до (f равно 0) }
- Writeln('-' * 30); {Просто для разделения и более удобного чтения}
- Readln(f);
- if f = 1 then begin{Если введена цифра 1}
- Writeln('-' * 30); {Просто для разделения и более удобного чтения}
- Writeln('Вы выбрали метод преобразование двумерного в одномерный массив:'); writeln; //Просто оформление
- Writeln('Стартовый массив:'); //тоже оформление
- write(' '*3); //для выравнивания нумерации
- for j:=1 to m do
- Write(j:4,'.'); //Нумерация столбцов
- writeln;
- writeln;
- for i := 1 to n do //заполнение двумерного массива случайными числами
- begin
- Write(i, '. '); //нумерация строк
- for j := 1 to m do
- begin
- k[i, j] := random(-100, 100); //случайные числа от -100 до 100
- Write(k[i, j]:5); //вывод элементов
- end;
- Writeln;
- writeln;
- end;
- Writeln('-' * 5); writeln; //И снова оформление
- Writeln('Промежуточный одномерный массив: '); //Комментарий
- write('l[', m * n, ']: '); //вывод обозначения и размерности массива l
- h := 1; //Присвоение h числа 1 для дальнейшего использования в цикле
- for i := 1 to n do //Разворачиваем двумерный массив в одномерный
- begin
- for j := 1 to m do
- begin
- l[h] := k[i, j]; //формирование массива l
- write(l[h], ' '); //вывод элемента массива l
- h := h + 1; //порядковый номер элемента массива l (+1)
- end;
- end;
- writeln; writeln; //переход на две строки вниз
- Writeln('-' * 5); //оформление
- for i := 1 to n * m - 1 Do //сортировка пузырьком одномерного массива
- for a := 1 to n * m - i Do
- if l[a] > l[a + 1] Then begin
- x := l[a];
- l[a] := l[a + 1];
- l[a + 1] := x
- end;
- Writeln('Итоговый (Сформированный массив): '); //оформление
- h := 1; //Возвращаем h в исходное значение
- write(' '*3); //для выравнивания нумерации
- for j:=1 to m do
- Write(j:4,'.'); //Нумерация столбцов
- writeln; //Перенос строки
- writeln; //Перенос строки для оформления
- for i := 1 to n do //преобразование одномерного массива обратно в двумерный
- begin
- Write(i, '. '); //нумерация строк
- for j := 1 to m do
- begin
- k[i, j] := l[h]; //формирование массива k
- write(k[i, j]:5); //вывод элемента массива k
- h := h + 1; //порядковый номер элемента массива k (+1)
- end;
- Writeln; //перенос на новую строку
- writeln; //перенос на новую строку для оформления
- end;
- end;
- if f = 2 then begin{Если введена цифра 2}
- Writeln('-' * 30); {Просто для разделения и более удобного чтения}
- Writeln('Вы выбрали метод без преобразования (С погрешностью)'); Writeln; //Оформление
- Writeln('Стартовый массив:'); //Комментарий
- write(' '*3); //для оформления
- for j:=1 to m do
- Write(j:4,'.'); //Нумерация столбцов
- writeln; //перенос строки
- writeln; //перенос строки для оформления
- for i := 1 to n do //присвоение элементам случайного числа
- begin
- Write(i, '. '); //нумерация строк
- for j := 1 to m do
- begin
- k[i, j] := random(-100, 100); //случайное число от -100 до 100
- Write(k[i, j]:5); //вывод элементов
- end;
- Writeln; //переход на новую строку
- writeln; //переход на новую строку для оформления
- end;
- writeln;
- for j := 1 to m do //сортировка столбцов массива методом пузырька
- begin
- for i := 1 to n - 1 Do
- for a := 1 to n - i Do
- if k[a, j] > k[a + 1, j] Then begin
- x := k[a, j];
- k[a, j] := k[a + 1, j];
- k[a + 1, j] := x
- end;
- end;
- Writeln('-' * 5); {Просто для разделения и более удобного чтения}
- Writeln('Легкие элементы "всплыли" наверх:');
- write(' '*3);
- for j:=1 to m do
- Write(j:4,'.'); //Нумерация столбцов
- writeln; //перенос на новую строку
- writeln; //перенос на новую строку для оформления
- for i := 1 to n do //вывод отсортированного по столбцам массива
- begin
- Write(i, '. '); //нумерация строк
- for j := 1 to m do
- begin
- Write(k[i, j]:5);
- end;
- Writeln;
- Writeln;
- end;
- writeln;
- for j := 1 to n do //сортировка строк методом пузырька
- begin
- for i := 1 to m - 1 Do
- for a := 1 to m - i Do
- if k[j, a] > k[j, a + 1] Then begin
- x := k[j, a];
- k[j, a] := k[j, a + 1];
- k[j, a + 1] := x
- end;
- end;
- Writeln('-' * 5); {Просто для разделения и более удобного чтения}
- Writeln('"Легкие" элементы "уехали" влево (Итог):'); //Комментарий
- write(' '*3); //оформление
- for j:=1 to m do
- Write(j:4,'.'); //Нумерация столбцов
- writeln; //переход на новую строку
- writeln; //переход на новую строку для оформления
- for i := 1 to n do //Вывод отсортированного по строкам массива
- begin
- Write(i, '. '); //Нумерация строк
- for j := 1 to m do
- begin
- Write(k[i, j]:5);
- end;
- Writeln; //переход на новую строку
- Writeln; //переход на новую строку для оформления
- end;
- end;
- until f = 0; //условие при котором программа завершает свою работу
- Writeln('-' * 30); //оформление
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement