Сортировка простым выбором - Turbo Pascal (29843)
Формулировка задачи:
Отсортировать четные элементы массива с помощью простого выбора.
ВНИМАНИЕ!!! Входные данные (исходный массив) и выходные данные (отсортированный массив) формировать в виде текстового файла, содержащего целые числа.
есть наброски вот ...
Решение задачи: «Сортировка простым выбором»
textual
Листинг программы
var f: text;
g: file of integer;
n, m: longword;
t, nt, mt: integer;
b: boolean;
begin
writeln('+---------------------------------------+');
writeln('| 1 - ввести элементы файла вручную |');
writeln('| Другое число - прочитать готовый файл |');
writeln('+---------------------------------------+');
write('Ваш выбор? ');
readln(t);
assign(f, 'input.txt');
if t = 1
then begin
repeat
write('Введите количество элементов файла: ');
readln(m)
until m > 0;
writeln('Введите элементы файла:');
rewrite(f);
for n := 1 to m do
begin
write(n:3, ': ');
readln(t);
writeln(f, t)
end
end;
reset(f);
assign(g, 'temp.tmp');
rewrite(g);
while not eof(f) do
begin
readln(f, t);
write(g, t)
end;
close(f);
b := true;
for n := 0 to filesize(g) - 2 do
begin
seek(g, n);
read(g, nt);
if not odd(nt)
then for m := n + 1 to filesize(g) - 1 do
begin
seek(g, m);
read(g, mt);
if not odd(mt) and (nt > mt)
then begin
seek(g, n);
write(g, mt);
seek(g, m);
write(g, nt);
b := false
end
end
end;
if b then writeln('Сортировка не потребовалась');
reset(g);
assign(f, 'output.txt');
rewrite(f);
for n := 0 to filesize(g) - 1 do
begin
read(g, t);
writeln(f, t)
end;
close(f);
writeln('Отсортированный файл создан.');
close(g);
erase(g);
write('Нажмите <Enter> для выхода из программы.');
readln
end.
Объяснение кода листинга программы
- Создание переменной
fтипаtextи присвоение ей значенияinput.txt. - Вывод сообщения с предложением ввести элементы файла вручную или прочитать готовый файл.
- Получение выбора пользователя и сохранение его в переменной
t. - Создание переменной
mтипаlongwordи присвоение ей значения 0. - Создание переменной
bтипаbooleanсо значениемtrue. - Вывод сообщения «Введите количество элементов файла:» и получение значения
mот пользователя. - Вывод сообщения «Введите элементы файла:» и открытие файла для записи.
- Повторение цикла до тех пор, пока
mбольше 0. В каждой итерации цикла пользователь должен ввести элемент файла и записать его в файл. - Установка значения
mравным 0 перед повторным циклом. - Закрытие файла после окончания цикла.
- Создание переменной
gтипаfile of integerи присвоение ей значенияtemp.tmp. - Открытие файла
gдля чтения. - Чтение файла
fдо конца и запись прочитанных данных в файлg. - Проверка каждого прочитанного блока данных на нечетность. Если блок данных нечетный, то записывается следующий блок данных.
- Если блок данных нечетный и следующий блок данных больше текущего, то записывается следующий блок данных.
- Если блок данных нечетный и следующий блок данных меньше текущего, то записывается текущий блок данных.
- Если блок данных нечетный и следующий блок данных равен текущему блоку данных, то переменная
bустанавливается в значениеfalse. - Закрытие файла
fи перезапись файлаgс новым именем. - Вывод сообщения «Отсортированный файл создан».
- Закрытие файла
g.