IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача на сортировку
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: Ирина

Репутация: -  0  +


Друзья!!! Объяните пожалуйста ЧТО ТУТ НАДО СДЕЛАТЬ!! blink.gif

Имеется колода карт. Пусть на каждой карте зафиксировано одно натуральное число (ради простоты будем считать, что все числа попарно различны). Требуется отсортировать, т. е. упорядочить колоду карт так, чтобы зафиксированные на картах числа образовывали монотонную (возрастающую или убывающую) последовательность.
Сортировка путем предсортировки и слияния
Заданная колода х сортируется с помощью следующего предписания:

(1) если х пуста или содержит одну карту, то х отсортирована;
(2) если х содержит более одной карты, то х разделить на две непустые колоды; отсортировать каждую из них и затем слить (объединить) эти колоды в одну отсортированную колоду.

Заметим, что слияние двух колод карт с получением одной отсортированной колоды снова соответствует постановке задачи, так что оно может быть сделано обычным образом с помощью алгоритма.

Зачем делить колоду?!

М
Как не крути а задание у тебя на сортировки. Заголовок темы изменен.
klem4

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 7)
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


задание - сортировка массива.
методы сортировок
Просто автор задачи счел формулировку "реализовать сортировку такми-то методом" слишком банальной и решил добавить брутальности blum.gif cool.gif smile.gif

по ссылке найдешь
Цитата
3. Сортировка слияниями


Цитата
Зачем делить колоду?!

явной цели нет


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Это имхо не та сортировка которая нужна nea.gif Уж как минимум два массива надо передавать в процедуру (чтобы было что слиять smile.gif) ) а там только один ... сейчас напишу то что мне кажется нужным.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Цитата
чтобы было что слиять
это все навсего 2 процедура
а 2 части исходного массива сортируются обычным слиянием


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: Ирина

Репутация: -  0  +


А вот еще вопрос: как должна делиться колода?? !help.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Цитата
А вот еще вопрос: как должна делиться колода??


Хе-хе)) Ну естественно нацело!) допустим у тебя массив из n=7 элементов, тогда ты делишь его на два массивы по 3 и 4 элемента соответственно, то есть 1 массив : n div 2 (получится 3) и второй : n-n div 2 = 7-3 = 4 элемента.

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


Вобщем вот такая штука получилась :

program _koloda;

uses crt;

type

TArray = array[1..50] of integer;
var
a : TArray; // колода;
b,c : TArray;

(* b,c - две части на которые мы ее подилм, а результат
запишем в a
*)

n : byte; // размерность колоды

procedure InputArray(var x : TArray; size : byte);
var
i : byte;
begin
for i := 1 to size do begin
write('a[',i,']=');
readln(a[i]);
end;
end;

procedure PrintArray(x : TArray; size : byte);
var
i : byte;
begin
for i := 1 to size do writeln(x[i]);
end;

procedure Sort(var x : TArray; size : byte); // сортировка
var
i, temp : byte;
flag : boolean;
begin
repeat
flag := true;
for i := 1 to size-1 do
if not(x[i]<=x[i+1]) then begin
flag := false;
temp := x[i];
x[i] := x[i+1];
x[i+1] := temp;
end;
until flag;
end;

procedure ConCatArray(x : TArray; size : byte; var y,z : TArray);
var
i, j : byte;
begin
for i := 1 to n div 2 do y[i] := x[i]; // размер первого : n div 2
j := 0;
for i := n div 2 + 1 to n do begin
inc(j);
z[j] := x[i];
end;
// размер второго : n - n div 2
end;

procedure Additional(x1, x2 : TArray; size1,size2 : byte; var result : TArray);
var
i1, i2, count : byte;
i : byte; // можно и без нее smile.gif
begin
i1 := 1;
i2 := 1;
count := 0;
while (i1<=size1) and (i2<=size2) do begin
inc(count);
if x1[i1]<=x2[i2] then begin
result[count] := x1[i1];
inc(i1);
end
else begin
result[count] := x2[i2];
inc(i2);
end;
end;

if i1<= size1 then
for i := i1 to size1 do begin
inc(count);
result[count] := x1[i];
end
else
for i := i2 to size2 do begin
inc(count);
result[count] := x2[i];
end;
end;



begin

clrscr;

write('Введите количество элементов в колоде : ');

readln(n);

writeln('Введите элементы колоды : ');

InputArray(a, n);

writeln;

ConCatArray(a, n, b, c);

Sort(b, n div 2);

Sort(c, n - n div 2);

Additional(b, c, n div 2, n - n div 2, a);

PrintArray(a, n);

readln;
end.



1.gif


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





Группа: Пользователи
Сообщений: 5
Пол: Женский
Реальное имя: Ирина

Репутация: -  0  +


Гениально!! Спасибо, кажется я поняла этот метод..... good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.05.2024 12:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name