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

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

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

 
 Ответить  Открыть новую тему 
> Разработать алгоритм и программу поиска и сортировки элементов массива.
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

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


Разработать алгоритм и программу поиска и сортировки элементов массива.
В программе необходимо использовать структуру меню и подпрограммы пользователей (Способ получения элементов массива, Алгоритма поиска, Алгоритм сортировки).

Способ получения элементов массива: Ввод с клавиатуры
Алгоритм поиска: Сравнение с выделенной ячейкой (min)
Алгоритм сортировки: Быстрая сортировка (по возрастанию)

Если есть у кого какие мысли, буду рад их почитать (:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

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


Мы, в свою очередь, будем рады почитать твои (:


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

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


Цитата(Unconnected @ 8.04.2010 18:58) *

Мы, в свою очередь, будем рады почитать твои (:

Ага-ага))) Чуть позже только, я тут мудрю =_= Что-то мне этакая задачка не по вкусу ._.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

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


Ну, меню можно самое простое - с вводом номера нужного пункта. Алгоритмы поиска и сортировки есть в форумном FAQ (красная ссылка в верху страницы).


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

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


мысли... ну вот : ввод и поиск - пустяки, кода совсем не много. А сортировка есть в FAQ. меню - это как сделаешь (тоже не трудно, поиши примеры)

Сообщение отредактировано: Client -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

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


Ну вот я нашел в FAQ программку, но это все же немного не то, я имею ввиду про сортировку, откровенно признаюсь, проблемы с этим, выручайте..)
Меню я присобачить смогу, а вот с поиском тоже проблемы возникают unsure.gif

program Sort_Mas;
const n=8; { Размерность массива }
var
i,j : byte; { Счетчики в циклах }
imin: byte; { Индекс минимального элемента }
k,c : integer;
min : integer; { Минимальный элемент }
a : array [1..n] of integer;
begin
{ Заполнение массива }
for i:=1 to n do
begin
write('a[',i,']=');
readln(a[i]);
end;
{ Пузырьковая сортировка по возрастанию }
for i:=2 to n do
for j:=n downto i do
begin
if a[j-1]>a[j] then
begin
c:=a[j-1];a[j-1]:=a[j];a[j]:=c;
end;
end;
{ Ставим максимальные элементы на нужные позиции }
i:=1;k:=n;
while k>(n div 2)+1 do
begin
c:=a[i];
a[i]:=a[k];
a[k]:=c;
i:=i+2;
k:=k-1;
end;
{ Ставим минимальные элементы на нужные позиции }
i:=2;k:=0;
while k<(n div 2) do
begin
min:=a[i-1];imin:=i-1;
for j:=i-1 to n do
if a[j]<min then begin min:=a[j];imin:=j;end;
c:=a[i];
a[i]:=a[imin];
a[imin]:=c;
i:=i+2;
k:=k+1;
end;
{ Вывод отсортированного массива }
for i:=1 to n do write(a[i],' ');
readln;
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

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


такого поиска мин элемента я еще не видел smile.gif (если имеено это и подразумевается)
  k:=1;min:=1;
for i:=2 to n do begin
if a[i] > a[k] then k:=i;
if a[i] < a[min] then min:=i
end;
В k будет индекс максимального, в min - индекс минимального

Сообщение отредактировано: Client -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

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

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


М,а я вот понять не могу при чем тут пузырьковая сортировка,когда у вас по заданию быстрая.Это немного разные вещи.Более того быстрая сортировка имеет рекурсивную природу.Так же в ней можно выбрать разные способы разбиения.
В приводимом ниже алгоритме быстрой сортировки в качестве значения разбиения используется среднее значение. Хотя такой подход не всегда является наилучшим, он достаточно прост и сортировка будет выполняться правильно.

procedure QuickSort(var item: DataArray; count:integer);
procedure qs(l, r: integer; var it: DataArray);
var
i, j: integer;
x, y: DataItem;
begin
i:=l; j:=r;
x:=it[(l+r) div 2];
repeat
while it[i]<x do i := i+1;
while x<it[j] do j := j-1;
if y<=j then
begin
y := it[i];
it[i] := it[j];
it[j] := y;
i := i+1; j := j-1;
end;
until i>j;
if l<j then qs(l, j, it);
if l<r then qs(i, r, it)
end;
begin
qs(1, count, item);
end; { конец быстрой сортировки }



Я думаю разобраться не сложно.Внутренню процедуру можно и по другому назвать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Цитата
сортировка будет выполняться правильно.
Не будет. Зависнет напрочь и все. Чтобы выполнялась правильно - надо правильно реализовать, а не просто так ответить... Условие "if y<=j then" к быстрой сортировке не имеет отношения...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

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

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


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

program tester;
type
DataItem =char;
DataArray = array [1..80] of DataItem;
var
test1: DataArray;
t, t2: integer;
testfile: file of char;

procedure QuickSort(var item: DataArray; count:integer);
procedure qs(l, r: integer; var it: DataArray);
var
i, j: integer;
x, y: DataItem;
begin
i:=l;
j:=r;
x:=it[(l+r) div 2];
repeat
while it[i]<x do i := i+1;
while x<it[j] do j := j-1;
if i<=j then {не у а i }
begin
y := it[i];
it[i] := it[j];
it[j] := y;
i := i+1;
j := j-1;
end;
until i>j;
if l<j then qs(l, j, it);
if l<r then qs(i, r, it)
end;
begin
qs(1, count, item);
end;

begin
Assign(testfile, 'test.txt');
Reset(testfile);
t := 1;
{ считывание символов,которые будут сортироваться.}
while not Eof(testfile) do begin
read(testfile, test1[t]);
t := t+1;
end;
t := t-1; {скорректировать число считанных элементов }
QuickSort(test1,t);
{ выдать отсортированный массив символов }
for t2 := 1 to t do write(test1[t2]);
WriteLn;
Readln;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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