Народ, Помогите, ЗА СЕКСО
DELETED
Акула пера
3/29/2008, 1:49:18 PM
А на си можно? :)
-=Велла=-
Акула пера
3/29/2008, 9:28:48 PM
(vano-m @ 29.03.2008 - время: 08:35) Двумерные массивы (сортировка и перестановка) :)
Давай задание и методичку.... И на когда... Задание давай сюда в тему, мож все вместе напишем чего )))
JeyLo, наверное, низзя... Бо до Си еще не дошли :)
Как только все лабы на Паскале переделаем, будешь на С писать
Давай задание и методичку.... И на когда... Задание давай сюда в тему, мож все вместе напишем чего )))
JeyLo, наверное, низзя... Бо до Си еще не дошли :)
Как только все лабы на Паскале переделаем, будешь на С писать
DELETED
Акула пера
3/31/2008, 1:32:12 AM
Лабораторная №5. Работп с двумерными массивами. Сортировки и перестановки в массиве.
Задание
Составить программу для работы с двумерным массивом заданного типа, но с произвольными размерами (по колличеству строк и столбцов) в пределах отведенного под массив места. Заполнить массив данными из имеющегося текстового файла, распечатать исзодный массив в выводной текстовый файл. Провести обработку массива в соответствии с заданием, результаты работы вывести в тот же выводной файл.
Вариант №29
Заполнить двумерный массив А (Мх2) элементов числами из текстового файла. Распечатать массив А. Далее каждый столбец массива А упорядочить по возрастанию обменом, затем заполнить по возрастанию одномерный массив В (длинной 2М элементов) методом слияния из обоих столбцов массива А. Оба массива распечатать после сортировок.
Предельное значение числа строк 11. Тип данных - целые.
ДАлее отсканированная методичка)
с описанием и разбором подобного варианта.
Получить код этого сета
Задание
Составить программу для работы с двумерным массивом заданного типа, но с произвольными размерами (по колличеству строк и столбцов) в пределах отведенного под массив места. Заполнить массив данными из имеющегося текстового файла, распечатать исзодный массив в выводной текстовый файл. Провести обработку массива в соответствии с заданием, результаты работы вывести в тот же выводной файл.
Вариант №29
Заполнить двумерный массив А (Мх2) элементов числами из текстового файла. Распечатать массив А. Далее каждый столбец массива А упорядочить по возрастанию обменом, затем заполнить по возрастанию одномерный массив В (длинной 2М элементов) методом слияния из обоих столбцов массива А. Оба массива распечатать после сортировок.
Предельное значение числа строк 11. Тип данных - целые.
ДАлее отсканированная методичка)
с описанием и разбором подобного варианта.
Получить код этого сета
-=Велла=-
Акула пера
3/31/2008, 1:39:44 PM
На когда? Тут надо время на осмысление (ну и еще, чтоб дети мои спали хорошо)
do-do
Мастер
3/31/2008, 2:29:26 PM
"обменом" то бишь метод пузырька ?
mvf23
Профессионал
3/31/2008, 6:01:42 PM
(do-do @ 31.03.2008 - время: 09:29) "обменом" то бишь метод пузырька ?
угу. глянь на 3-ей странице скана.
угу. глянь на 3-ей странице скана.
DELETED
Акула пера
3/31/2008, 11:27:28 PM
(-=Велла=- @ 31.03.2008 - время: 08:39) На когда? Тут надо время на осмысление (ну и еще, чтоб дети мои спали хорошо)
ну неделя есть вобщем.
щас в срочном порядке делаю лабы по физике атмосферы. в субботу пойду инфу здавать)))
ну неделя есть вобщем.
щас в срочном порядке делаю лабы по физике атмосферы. в субботу пойду инфу здавать)))
-=Велла=-
Акула пера
4/1/2008, 2:21:07 AM
засада... я сортировку не умею... еще в универе что-то не пошло... ((((((( соррьки....
DELETED
Акула пера
4/1/2008, 2:26:30 AM
CODE for i := n - 1 downto 1 do
for j := 1 to i do
if a[j] > a[j+1] then
begin
t := a[j];
a[j] := a[j+1];
a[j+1] := t;
end;
for j := 1 to i do
if a[j] > a[j+1] then
begin
t := a[j];
a[j] := a[j+1];
a[j+1] := t;
end;
mvf23
Профессионал
4/1/2008, 6:53:55 AM
(JeyLo @ 31.03.2008 - время: 22:26)
Гм... Ты же вроде не пишешь на паскале? :) Али стырил откуда-нить? :)
Вообще очень аккуратный и лаконичный вариант пузырька, смотреть приятно. Аккуратный пузырек - весчь редкая, бо начинающие порой умудряются нагородить огородов даже на пузырьке, а продвинутые пузырек не юзают (ну разве что под страшными пытками) :)
-=Велла=-, сортировка слиянием (вторая половинка задания) нужна?
Гм... Ты же вроде не пишешь на паскале? :) Али стырил откуда-нить? :)
Вообще очень аккуратный и лаконичный вариант пузырька, смотреть приятно. Аккуратный пузырек - весчь редкая, бо начинающие порой умудряются нагородить огородов даже на пузырьке, а продвинутые пузырек не юзают (ну разве что под страшными пытками) :)
-=Велла=-, сортировка слиянием (вторая половинка задания) нужна?
DELETED
Акула пера
4/2/2008, 4:11:33 AM
Так алгоритм банальнейший. :)
А продвинутые orderы всякие используют, бо данные все уже давно с баз данных идут. А контролы сами сортируют. :)
А продвинутые orderы всякие используют, бо данные все уже давно с баз данных идут. А контролы сами сортируют. :)
-=Велла=-
Акула пера
4/2/2008, 2:01:21 PM
(mvf23 @ 01.04.2008 - время: 03:53) -=Велла=-, сортировка слиянием (вторая половинка задания) нужна?
Я еще методичку даже прочесть не успела )))))
Ну вы пишите там по заданию сортировки, а я тогда ужо красиво все в файлы оформлю, ввод-вывод
Я еще методичку даже прочесть не успела )))))
Ну вы пишите там по заданию сортировки, а я тогда ужо красиво все в файлы оформлю, ввод-вывод
DELETED
Акула пера
4/3/2008, 3:14:52 AM
(-=Велла=- @ 02.04.2008 - время: 10:01) (mvf23 @ 01.04.2008 - время: 03:53) -=Велла=-, сортировка слиянием (вторая половинка задания) нужна?
Я еще методичку даже прочесть не успела )))))
Ну вы пишите там по заданию сортировки, а я тогда ужо красиво все в файлы оформлю, ввод-вывод
напиши пожалуйсто про сортировку. до нее я сам дошел. и сортировку не смог.
Я еще методичку даже прочесть не успела )))))
Ну вы пишите там по заданию сортировки, а я тогда ужо красиво все в файлы оформлю, ввод-вывод
напиши пожалуйсто про сортировку. до нее я сам дошел. и сортировку не смог.
DELETED
Акула пера
4/3/2008, 3:18:23 AM
(-=Велла=- @ 31.03.2008 - время: 22:21) засада... я сортировку не умею... еще в универе что-то не пошло... ((((((( соррьки....
А "Программирование интерационных формул для расчета функций"?
А "Программирование интерационных формул для расчета функций"?
do-do
Мастер
4/3/2008, 2:31:15 PM
Усе! Совет - используя дебагер прогони код - тогда осознаешь (!!) как всплывает пузырек
CODE
(***************************[sxn.io]*******************************)
(* *)
(* File : Buble-Gum.pas *)
(* Created: 01/04/2008 *)
(* Reason : работа с двумерными массивами (лаб. работа N 5) *)
(* Product: сортировка и перестановка в массиве *)
(* Author : do-do *)
(* Purpose: сортировка двумерного массива методом вставки *)
(* Данные (тип:integer) считываются из текстового файла *)
(* d:\lab1\dat1.txt *)
(* Данные в файле записаны в 2е колонки *)
(* Программа выводит следующие кода завершения *)
(* 128 - файл с данными отсутсвует *)
(* 129 - элемент массива не целый *)
(* n - здесь n-1 числ успешно считанных строк массива *)
(* ДО возникновения ошибки *)
(* 0 - нормальное завершение программы *)
(***************************[sxn.io]*******************************)
program buble_gum;
const
M=11; (* размер массива *)
MyFileName='d:\lab1\datI.txt'; (* файл с тестовым массивом *)
Type
MyArray1= array[1..2*M] of integer; (* рабочий одномерный массив *)
MyArray2= array[1..M,1..2] of integer; (* рабочий двумерный массив *)
VAR
B:MyArray1;
X:MyArray2;
procedure ListArray2 (var Y:MyArray2); (*процедура распечатки (в строчку) матрицы Y*)
var j:byte;
begin
Writeln;
for j:=1 to M DO write('(',Y[j,1],':',Y[j,2],') ');
Writeln;
end; (*ListArray2*)
procedure OpenMyFile; (*открыть файл, считать массив*)
var
f:text; (* задаем файл *)
i:byte;
begin
Assign(f,MyFileName);
{$I-}
(* выключили проверку ошибок ввода *)
Reset(f);
IF IOResult <> 0 then
begin writeln('File ', MyFileName, ' not found. Stop - 128'); halt(128); end
else
begin
{$I+}
for i:=1 to M do
begin
IF SeekEOLn(f) then begin writeln('Error in READ. Stop [',i,']'); halt(i);end;
{$I-}
readln(f,X[i,1],X[i,2]);
IF IOResult <> 0 then
begin writeln('Error in array. Stop - 129 [',i,']'); halt(129); end
{$I+}
end
end;
Close(f);
(*Инициализируем Одномерный массив - сливаем двумерный X в одномерный*)
For i:=1 to M DO Begin B[i]:=X[i,1];B[i+M]:=X[i,2];End;
Writeln('ListArray. Step 1');
ListArray2(X);
end; (* OpenMyFile *)
procedure Bubble2(L:byte;comment:string); (* сортируем столбик L глобального массива X *)
var i,j : byte;
t:integer;
begin
(*Тело подпрограммы сортировки - берем НАМ известную *)
for i:=M-1 downto 1 do
for j:= 1 to i do IF X[j,L] > X[j+1,L] then
begin t:=X[j,L]; X[j,L]:=X[j+1,L]; X[j+1,L]:=t; end;
Writeln(comment);
ListArray2(X); (*Выводим отсортированный столбик, другой нас мало интересует*)
end;(* Bubble2 *)
procedure Bubble1; (* сортируем одномерный массив B *)
var i,j:byte;
t:integer;
begin
Writeln('Not Sorting array ');
For i:=1 to 2*M do write (B[i]:8);
Writeln;
(* Используем известную нам процедуру сортировки *)
for i:=M-1 downto 1 do
for j:= 1 to i do IF B[j] > B[j+1] then
begin t:=B[j]; B[j]:=B[j+1]; B[j+1]:=t; end;
Writeln('Sorting array ');
For i:=1 to 2*M do write(B[i]:8);
writeln;
end;(* Bubble1 *)
BEGIN (*Тело программы*)
OpenMyFile;
Bubble2(1,'Sorting 1 Column');
Bubble2(2,'Sorting 2 Column');
Bubble1;
END.
CODE
(***************************[sxn.io]*******************************)
(* *)
(* File : Buble-Gum.pas *)
(* Created: 01/04/2008 *)
(* Reason : работа с двумерными массивами (лаб. работа N 5) *)
(* Product: сортировка и перестановка в массиве *)
(* Author : do-do *)
(* Purpose: сортировка двумерного массива методом вставки *)
(* Данные (тип:integer) считываются из текстового файла *)
(* d:\lab1\dat1.txt *)
(* Данные в файле записаны в 2е колонки *)
(* Программа выводит следующие кода завершения *)
(* 128 - файл с данными отсутсвует *)
(* 129 - элемент массива не целый *)
(* n - здесь n-1 числ успешно считанных строк массива *)
(* ДО возникновения ошибки *)
(* 0 - нормальное завершение программы *)
(***************************[sxn.io]*******************************)
program buble_gum;
const
M=11; (* размер массива *)
MyFileName='d:\lab1\datI.txt'; (* файл с тестовым массивом *)
Type
MyArray1= array[1..2*M] of integer; (* рабочий одномерный массив *)
MyArray2= array[1..M,1..2] of integer; (* рабочий двумерный массив *)
VAR
B:MyArray1;
X:MyArray2;
procedure ListArray2 (var Y:MyArray2); (*процедура распечатки (в строчку) матрицы Y*)
var j:byte;
begin
Writeln;
for j:=1 to M DO write('(',Y[j,1],':',Y[j,2],') ');
Writeln;
end; (*ListArray2*)
procedure OpenMyFile; (*открыть файл, считать массив*)
var
f:text; (* задаем файл *)
i:byte;
begin
Assign(f,MyFileName);
{$I-}
(* выключили проверку ошибок ввода *)
Reset(f);
IF IOResult <> 0 then
begin writeln('File ', MyFileName, ' not found. Stop - 128'); halt(128); end
else
begin
{$I+}
for i:=1 to M do
begin
IF SeekEOLn(f) then begin writeln('Error in READ. Stop [',i,']'); halt(i);end;
{$I-}
readln(f,X[i,1],X[i,2]);
IF IOResult <> 0 then
begin writeln('Error in array. Stop - 129 [',i,']'); halt(129); end
{$I+}
end
end;
Close(f);
(*Инициализируем Одномерный массив - сливаем двумерный X в одномерный*)
For i:=1 to M DO Begin B[i]:=X[i,1];B[i+M]:=X[i,2];End;
Writeln('ListArray. Step 1');
ListArray2(X);
end; (* OpenMyFile *)
procedure Bubble2(L:byte;comment:string); (* сортируем столбик L глобального массива X *)
var i,j : byte;
t:integer;
begin
(*Тело подпрограммы сортировки - берем НАМ известную *)
for i:=M-1 downto 1 do
for j:= 1 to i do IF X[j,L] > X[j+1,L] then
begin t:=X[j,L]; X[j,L]:=X[j+1,L]; X[j+1,L]:=t; end;
Writeln(comment);
ListArray2(X); (*Выводим отсортированный столбик, другой нас мало интересует*)
end;(* Bubble2 *)
procedure Bubble1; (* сортируем одномерный массив B *)
var i,j:byte;
t:integer;
begin
Writeln('Not Sorting array ');
For i:=1 to 2*M do write (B[i]:8);
Writeln;
(* Используем известную нам процедуру сортировки *)
for i:=M-1 downto 1 do
for j:= 1 to i do IF B[j] > B[j+1] then
begin t:=B[j]; B[j]:=B[j+1]; B[j+1]:=t; end;
Writeln('Sorting array ');
For i:=1 to 2*M do write(B[i]:8);
writeln;
end;(* Bubble1 *)
BEGIN (*Тело программы*)
OpenMyFile;
Bubble2(1,'Sorting 1 Column');
Bubble2(2,'Sorting 2 Column');
Bubble1;
END.
mvf23
Профессионал
4/3/2008, 7:18:02 PM
(do-do @ 03.04.2008 - время: 10:31) Усе! Совет - используя дебагер прогони код - тогда осознаешь (!!) как всплывает пузырек
CODE
(***************************[sxn.io]*******************************)
если бы я был преподавателем по поводу этой программы я бы вынес такой вердикт:
1) самый главный косяк - не понято задание:
заполнить по возрастанию одномерный массив В (длинной 2М элементов) методом слияния из обоих столбцов массива А.
Метод слияния - это когда из двух и более упорядоченных последовательностей собирают одну. Гугли, или читай методичку (Стр. 3. скана) Вывод: решена только половина задания. Оценка не выше "трёх"
2) использовано процедурное программирование... А мы его не изучали. Вывод: писал не сам. Значит будем оценивать того программиста, которой это написал в три раза строже...
3) за счет проверок корректности очень усложнены операции ввода-вывода. Этого не требовалось, мы этого не изучали. Вывод: писал не сам.
4) не совсем корректное использование процедурного программирования. Логически разные задачи выполняются в одной процедуре. Смысл процедур в их универсальности, в возможности их многократного использования. Если я попытаюсь отсортировать массив, используя указанные процедуры - то мне обязательно придется выводить какие-то данные на экран. Если я захочу считать файл, то мне придется задать его имя константой, задать два массива с определенными именами и т.п. Вывод: процедурное программирования использовано неверно.
5) каментоф много, но форматирование кода "хромает". 3 оператора в одной строке - явный перебор. Плюс помесь CamelCase, AllCaps и всех маленьких букв, хоть это и паскаль, но хороший программист должен придерживаться одного стиля...
Вывод: низачод. На пересдачу.
CODE
(***************************[sxn.io]*******************************)
если бы я был преподавателем по поводу этой программы я бы вынес такой вердикт:
1) самый главный косяк - не понято задание:
заполнить по возрастанию одномерный массив В (длинной 2М элементов) методом слияния из обоих столбцов массива А.
Метод слияния - это когда из двух и более упорядоченных последовательностей собирают одну. Гугли, или читай методичку (Стр. 3. скана) Вывод: решена только половина задания. Оценка не выше "трёх"
2) использовано процедурное программирование... А мы его не изучали. Вывод: писал не сам. Значит будем оценивать того программиста, которой это написал в три раза строже...
3) за счет проверок корректности очень усложнены операции ввода-вывода. Этого не требовалось, мы этого не изучали. Вывод: писал не сам.
4) не совсем корректное использование процедурного программирования. Логически разные задачи выполняются в одной процедуре. Смысл процедур в их универсальности, в возможности их многократного использования. Если я попытаюсь отсортировать массив, используя указанные процедуры - то мне обязательно придется выводить какие-то данные на экран. Если я захочу считать файл, то мне придется задать его имя константой, задать два массива с определенными именами и т.п. Вывод: процедурное программирования использовано неверно.
5) каментоф много, но форматирование кода "хромает". 3 оператора в одной строке - явный перебор. Плюс помесь CamelCase, AllCaps и всех маленьких букв, хоть это и паскаль, но хороший программист должен придерживаться одного стиля...
Вывод: низачод. На пересдачу.
do-do
Мастер
4/3/2008, 7:46:22 PM
На пересдачу
Как грится НАХ. Делал на коленке, больше времени ушло на шапку.
Если надо СЛИТЬ 2а упорядоченных массива в один B - сливаешь после выполнения 2ой процедуры сортировки (оба столбца УЖЕ отсортированы) всего то...Т.е. делаешь процедуру Swap2Array - например, и применяешь (массив то глобальный) после 2х предыдущих сортировок.
К божескому виду пусть соискатель приводит.... я вообще хотел все через любимые динамические массивы сделать.... (универсально в высшей степени), но судя по первой лабе... им этого не нужно :)
Методички пущай студенты читают - оно полезнее, я ток первый лист глянул, как оформлять лабу :)
Главное робит прожка, простые ошибки ловит. Кому надо, думаю трансформирует (а лучше напишет новую) по своему вкусу (кстати, в этом случае процедуры очень полезны)
P.S. Методически правильнее эту задачу решать с помощью ObjectPascal (его расширения в Pascal 7) Тут заводим метод, сортировка одномерного массива, сортировка многомерного.... и проч. понятнее было бы по любому
Как грится НАХ. Делал на коленке, больше времени ушло на шапку.
Если надо СЛИТЬ 2а упорядоченных массива в один B - сливаешь после выполнения 2ой процедуры сортировки (оба столбца УЖЕ отсортированы) всего то...Т.е. делаешь процедуру Swap2Array - например, и применяешь (массив то глобальный) после 2х предыдущих сортировок.
К божескому виду пусть соискатель приводит.... я вообще хотел все через любимые динамические массивы сделать.... (универсально в высшей степени), но судя по первой лабе... им этого не нужно :)
Методички пущай студенты читают - оно полезнее, я ток первый лист глянул, как оформлять лабу :)
Главное робит прожка, простые ошибки ловит. Кому надо, думаю трансформирует (а лучше напишет новую) по своему вкусу (кстати, в этом случае процедуры очень полезны)
P.S. Методически правильнее эту задачу решать с помощью ObjectPascal (его расширения в Pascal 7) Тут заводим метод, сортировка одномерного массива, сортировка многомерного.... и проч. понятнее было бы по любому
mvf23
Профессионал
4/3/2008, 8:43:52 PM
(do-do @ 03.04.2008 - время: 15:46) Тут заводим метод, сортировка одномерного массива, сортировка многомерного.... и проч. понятнее было бы по любому
Да ну... Имхо, все это "от лукавого": имхо линейный, процедурный или объектый стиль программирования - это вовсе не главное, в такой задаче... Главное - это сортировкам научить.
Дональд Кнут считаейтся одним из наиболее выдающихся программистов 20го века, просто потому что он алгоритмы правильные знает и умеет придумывать. При этом я совсем не уверен - знаком ли он со всеми премудростями объектного программирования.
Думаю если бы тебя сразу вгрузили классами, шаблонами, инкасуляциями, сложными наследованиями, друзьями класса, абстрактными методами, публичными и приватными членами класса и прочими премудростями объектного программирования - то напрочь бы отбили все желание программировать :) Так что МЕТОДИЧЕСКИ, с точки зрения методики преподавания - все правильно.
Так что всему свое время. Для меня например нет никакой разницы - написать такую программу с использованием средств объектного программирования или без него, она же простенькая совсем. Городить тут классы, процедуры и т.п. имхо только код удлинять :) А использовать тут динамические массивы - вообще изврат. 50% кода будет посвящено обслуживанию динамических массивов. Работать будет медленнее, да и вообще непонятно зачем оно нужно, если максимальный размер массива - 11 элементов. :)
Да ну... Имхо, все это "от лукавого": имхо линейный, процедурный или объектый стиль программирования - это вовсе не главное, в такой задаче... Главное - это сортировкам научить.
Дональд Кнут считаейтся одним из наиболее выдающихся программистов 20го века, просто потому что он алгоритмы правильные знает и умеет придумывать. При этом я совсем не уверен - знаком ли он со всеми премудростями объектного программирования.
Думаю если бы тебя сразу вгрузили классами, шаблонами, инкасуляциями, сложными наследованиями, друзьями класса, абстрактными методами, публичными и приватными членами класса и прочими премудростями объектного программирования - то напрочь бы отбили все желание программировать :) Так что МЕТОДИЧЕСКИ, с точки зрения методики преподавания - все правильно.
Так что всему свое время. Для меня например нет никакой разницы - написать такую программу с использованием средств объектного программирования или без него, она же простенькая совсем. Городить тут классы, процедуры и т.п. имхо только код удлинять :) А использовать тут динамические массивы - вообще изврат. 50% кода будет посвящено обслуживанию динамических массивов. Работать будет медленнее, да и вообще непонятно зачем оно нужно, если максимальный размер массива - 11 элементов. :)
do-do
Мастер
4/3/2008, 11:50:31 PM
(mvf23 @ 03.04.2008 - время: 16:43) Работать будет медленнее, да и вообще непонятно зачем оно нужно, если максимальный размер массива - 11 элементов. :)
Когда я вкурил Объектный Паскаль - а это было, ну шоб не соврать совсем году так в 92-93 (тогда еще Борланд распродавала за смешные бабки дистрибутивы семерки) МНЕ ОН ОДНОЗНАЧНО был понятнее, чем просто линейный. Но паскаль я много лет уж не пользую - пришлось вспомнить :) Хотя конечно, шоб зачет получить - делать надо проще и быстрее (а чего быстрее списать уже готовую прогу :) )
Я бы челу не Кнута советовал почитать (будет он с mix разбираться :)? ) а книжку Жемчужины программирования. Джон Бентли
Там и сортировка есть и оптимизация :)
Когда я вкурил Объектный Паскаль - а это было, ну шоб не соврать совсем году так в 92-93 (тогда еще Борланд распродавала за смешные бабки дистрибутивы семерки) МНЕ ОН ОДНОЗНАЧНО был понятнее, чем просто линейный. Но паскаль я много лет уж не пользую - пришлось вспомнить :) Хотя конечно, шоб зачет получить - делать надо проще и быстрее (а чего быстрее списать уже готовую прогу :) )
Я бы челу не Кнута советовал почитать (будет он с mix разбираться :)? ) а книжку Жемчужины программирования. Джон Бентли
Там и сортировка есть и оптимизация :)
mvf23
Профессионал
4/3/2008, 11:55:00 PM
Ну ладно уж, так и быть... Потратил 25 минут личного времени. Чтобы преподаватель(ница) был(а) довольна за основу взял пример из методички.
Вообще оценивая строго я бы за этот пример из методички "пятерку" бы не поставил. В частности можешь передать своему преподавателю, что использование меток и операторов GOTO - дурной тон. Хотя лучше не стоит, а то ещё расстроится :) Короче преподаватель всегда прав, так что пусть наслаждается...
CODE program SortNum;
{ Программа Лабораторной работы №5 Вариант №29. vano-m, студент группы sxn.io
Выполнена под чутким руководством Веллы, do-do, mvf и JeyLo. }
var
A : array [1..11,1..2] of integer;
B : array [1..22] of integer;
M,i,j,t,ic,kc : integer;
Fin, Fout : text;
label
Vvod_M;
begin
{ Открытие входного и выходного файлов }
assign(Fout, 'UMNIK5.RES');
rewrite(Fout);
assign(Fin,'D:\LAB1\DATI.TXT');
reset(Fin);
{ Ввод количества строк массива }
Vvod_M:
writeln('Введите число строк массива');
readln(M);
if (M < 2) or (M > 11) then
begin
writeln('Недопустимое значение!');
goto Vvod_M;
end;
{ заполнение массива числами из файла }
for i := 1 to M do
for j := 1 to 2 do read(Fin,A[i,j]);
{ Закрытие входного файла }
close (Fin);
{ Распечатка исходного массива }
writeln(Fout,'Исходный массив A из ',M,'x2 элементов');
for i := 1 to M do
begin
for j:=1 to 2 do write(Fout, A[i,j]:6); { печать текущей строки }
writeln(Fout);
end;
writeln(Fout);
{ сортировка столбцов A "пузырьком". }
{ Поскольку столбцы одинакового размера - сортируем оба столбца за один "проход" }
for i := M-1 downto 1 do
for j := 1 to i do
begin
if a[j,1] > a[j+1,1] then {первый столбец}
begin
t := a[j,1];
a[j,1] := a[j+1,1];
a[j+1,1] := t;
end;
if a[j,2] > a[j+1,2] then {второй столбец}
begin
t := a[j,2];
a[j,2] := a[j+1,2];
a[j+1,2] := t;
end;
end;
{теперь сливаем оба столбца в массив B}
ic := 1;
kc := 1;
for i := 1 to 2*M do
if ic > M then
begin
B[i] := A[kc,2];
kc := kc + 1;
end
else
if kc > M then
begin
B[i] := A[ic,1];
ic := ic + 1;
end
else
if A[ic,1] < A[kc,2] then
begin
B[i] := A[ic,1];
ic := ic + 1;
end
else
begin
B[i] := A[kc,2];
kc := kc + 1;
end;
{ Печать результатов }
writeln(Fout, '=== Результаты работы ===');
writeln(Fout,'Массив A, каждый столбец которого отсортирован обменом');
for i := 1 to M do
begin
for j:=1 to 2 do write(Fout, A[i,j]:6); { печать текущей строки }
writeln(Fout);
end;
writeln(Fout);
writeln(Fout,'Упорядоченный массив B, полученный слиянием из столбцов массива A ');
for i := 1 to 2*M do write(Fout, B[i]:4);
close(Fout);
end.
Вообще оценивая строго я бы за этот пример из методички "пятерку" бы не поставил. В частности можешь передать своему преподавателю, что использование меток и операторов GOTO - дурной тон. Хотя лучше не стоит, а то ещё расстроится :) Короче преподаватель всегда прав, так что пусть наслаждается...
CODE program SortNum;
{ Программа Лабораторной работы №5 Вариант №29. vano-m, студент группы sxn.io
Выполнена под чутким руководством Веллы, do-do, mvf и JeyLo. }
var
A : array [1..11,1..2] of integer;
B : array [1..22] of integer;
M,i,j,t,ic,kc : integer;
Fin, Fout : text;
label
Vvod_M;
begin
{ Открытие входного и выходного файлов }
assign(Fout, 'UMNIK5.RES');
rewrite(Fout);
assign(Fin,'D:\LAB1\DATI.TXT');
reset(Fin);
{ Ввод количества строк массива }
Vvod_M:
writeln('Введите число строк массива');
readln(M);
if (M < 2) or (M > 11) then
begin
writeln('Недопустимое значение!');
goto Vvod_M;
end;
{ заполнение массива числами из файла }
for i := 1 to M do
for j := 1 to 2 do read(Fin,A[i,j]);
{ Закрытие входного файла }
close (Fin);
{ Распечатка исходного массива }
writeln(Fout,'Исходный массив A из ',M,'x2 элементов');
for i := 1 to M do
begin
for j:=1 to 2 do write(Fout, A[i,j]:6); { печать текущей строки }
writeln(Fout);
end;
writeln(Fout);
{ сортировка столбцов A "пузырьком". }
{ Поскольку столбцы одинакового размера - сортируем оба столбца за один "проход" }
for i := M-1 downto 1 do
for j := 1 to i do
begin
if a[j,1] > a[j+1,1] then {первый столбец}
begin
t := a[j,1];
a[j,1] := a[j+1,1];
a[j+1,1] := t;
end;
if a[j,2] > a[j+1,2] then {второй столбец}
begin
t := a[j,2];
a[j,2] := a[j+1,2];
a[j+1,2] := t;
end;
end;
{теперь сливаем оба столбца в массив B}
ic := 1;
kc := 1;
for i := 1 to 2*M do
if ic > M then
begin
B[i] := A[kc,2];
kc := kc + 1;
end
else
if kc > M then
begin
B[i] := A[ic,1];
ic := ic + 1;
end
else
if A[ic,1] < A[kc,2] then
begin
B[i] := A[ic,1];
ic := ic + 1;
end
else
begin
B[i] := A[kc,2];
kc := kc + 1;
end;
{ Печать результатов }
writeln(Fout, '=== Результаты работы ===');
writeln(Fout,'Массив A, каждый столбец которого отсортирован обменом');
for i := 1 to M do
begin
for j:=1 to 2 do write(Fout, A[i,j]:6); { печать текущей строки }
writeln(Fout);
end;
writeln(Fout);
writeln(Fout,'Упорядоченный массив B, полученный слиянием из столбцов массива A ');
for i := 1 to 2*M do write(Fout, B[i]:4);
close(Fout);
end.