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

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

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

> Pascal - процедуры и функции
xxBOBAHxx
сообщение 17.11.2008 20:09
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
samec
сообщение 17.11.2008 20:41
Сообщение #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 
 К началу страницы 
+ Ответить 
xxBOBAHxx
сообщение 17.11.2008 22:21
Сообщение #3


Новичок
*

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

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


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


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

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

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


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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
samec
сообщение 18.11.2008 15:14
Сообщение #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

 



- Текстовая версия 6.07.2025 20:11
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"