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

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

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

 
 Ответить  Открыть новую тему 
> Pascal - процедуры и функции
сообщение
Сообщение #1


Новичок
*

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

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


Создать два одномерных массива А и В различной длины. Рассортировать числа до максимального значения по возрастанию. Результат вывести. Затем рассортировать числа, расположенные после максимального значения по возрастанию и снова вывести. И, наконец, рассортировать весь массив по возрастанию и снова вывести.

ПРИМЕР:
Даны два массива
1) 34 12 54 24 3 6

2) 34 56 67 3 4 0 12

Т.е необходимо:
а)отсортировать массив 1) по возрастанию до МАКСИМАЛЬНОГО ЗНАЧЕНИЯ = 54
таким образом чтобы получился массив 12 34 54 24 3 6
б)После этот же массив 1) необходимо отсортировать по возрастанию но уже ПОСЛЕ максимального элемента массива т.е. получится 34 12 54 3 6 24


Аналогичные опреации проделать с массивом 2)

Вот моя зарисовка.........

program PRIM_2;
const na=5; nb=10;
type mas=array[1..nb] of real;
var a, b:mas;
i:integer;
Procedure SOZD(var d:mas; k:integer);{создание массива}
begin
for i:=1 to k do
d[i]:=random*500;
end;
Procedure VIVOD(d:mas; k:integer; t:string);{вывод массива}
begin
writeln(t);
for i:=1 to k do
write(d[i]:0:0, ' ');
writeln;
end;
function max(d:mas; k:integer):real;{выявление максимального элемента массива}
var i:integer; m:real; c:real;
begin
m:=-maxint;
for i:=1 to k do
if d[i]>m then m:=d[i];
max:=m;
end;
procedure SORT(var d:mas; k:integer);{попытка отсортировать массив до
максимального элемента}
var c:real;
begin
i:=1;
repeat
if d[i]>d[i+1] then
begin
c:=d[i]; d[i]:=d[i+1]; d[i+1]:=c;
if i>1 then dec(i)
end
else inc(i);
until i>=k or d[i]=???;
{так и не понял чему приравнять d[i] чтоб он прекпащал сортировку,
т.е выходил из цикла когда d[i] равнялся бы максимальному значению в массиве}

end;
BEGIN
randomize;
SOZD(a, na); VIVOD(a, na, 'massiv A');
writeln('max_mas A=', max(a, na):0:0);
SORT(a, na); VIVOD(a, na, 'massiv A posle');
SOZD(b, nb); VIVOD(b, nb, 'massiv B');
writeln('max_mas B=', max(b, nb):0:0);
readln
END.

Больше всего меня интересует как отсортировать массив по возрастанию до максимального значения и после максимального значения....

P.S.за ранее благодарен за содействие))

М
Большая просьба: заключай программный код в теги!
Lapp

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


Бывалый
***

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

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


функция поиска максимального элемента должна возвращать не значение, а порядковый номер этого самого элемента в массиве. Примерно вот так:

function max(d:mas; k:integer):integer;{выявление максимального элемента массива}
var i, nom:integer; m:real;
begin
m:=d[1];
nom:=1;
for i:=2 to k do
if d[i]>m then
begin
m:=d[i];
nom:=i;
end;
max:=nom;
end;


А затем делаешь обычную сортировку, например методом пузырька:
1. начиная от первого элемента массива и до номера максимального элемента (сам элемент не должен входить в сортировку).
2. начиная от номера максимального элемента +1 и до конца массива.
примерно вот так:

procedure SORT(var d:mas; k1,k2:integer);
{k1 - номер с которого начинаем сортировку,
k2 - номер на котором заканчиваем сортировку}
var c:real;
i,k:integer;
begin
for k:=k1 to k2-1 do
for i:=k1 to k2-k1 do
if(d[i]>d[i+1]) then
begin
c:=d[i];
d[i]:=d[i+1];
d[i+1]:=c;
end;
end;



вызывать процедуру сортировки в основной программе нужно так:

SORT(a,1,max(a,na)-1); {сортируем до максимального элемента}
SORT(a,max(a,na)+1,na); {сортируем после максимального элемента}
SORT(a,1,na); {сортируем весь массив}



код набирал прямо здесь, так что могут вкрасться ошибки, но идея должна быть понятнаsmile.gif дерзай smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Спасибо огромное, ваши указания и замечания помогли мне, еще раз БОЛЬШОЕ СПАСИБО!!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(samec @ 17.11.2008 20:41) *
код набирал прямо здесь, так что могут вкрасться ошибки
- это извиняет опечатки и несущественные синтаксические ошибки. Но с пределами циклов в сортировке у тебя бардак явно не синтасического характера..
Исправишь сам? smile.gif


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

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

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


Цитата(Lapp @ 18.11.2008 7:02) *

- это извиняет опечатки и несущественные синтаксические ошибки. Но с пределами циклов в сортировке у тебя бардак явно не синтасического характера..
Исправишь сам? smile.gif

очень спать хотелось smile.gif вот и запутался чуть-чуть.
вот так надо:

procedure SORT(var d:mas; k1,k2:integer);
{k1 - номер с которого начинаем сортировку,
k2 - номер на котором заканчиваем сортировку}
var c:real;
i,k:integer;
begin
for k:=1 to k2-k1 do
for i:=k1 to k2-k do
if(d[i]>d[i+1]) then
begin
c:=d[i];
d[i]:=d[i+1];
d[i+1]:=c;
end;
end;

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

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

 





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