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

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

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

 
 Ответить  Открыть новую тему 
> Трёхмерный массив! HELP!, Сортировка по возрастанию (я это даже предствить не могу)
сообщение
Сообщение #1


Новичок
*

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

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


Помогите пожалуйста! что-то совсем голова не варит((
Требуется отсортировать трёхмерный массив по возрастанию.
как я понимаю, проще это будет сделать, преобразовав данный массив в одномерный.
Подскажите, как выполнить преобразование?!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Не надо никаких преобразований. Как сортировать-то нужно?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


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


Гость






По возрастанию ЧЕГО? Сумм элементов третьего изменения? Среднего значения элементов строки? Возрастаний я тебе сотню придумать могу. Напиши какой массив был и какой должен стать после сортировки.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Дан трёхмерный массив. Расположите его элементы по возрастанию
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

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

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



uses
crt;
var
n,m,k,i,j,t:integer;
a:array[1..10,1..10,1..10] of integer;
procedure swap(var x,y,z:integer);
var t,q:integer;
begin
t := x;
x := y;
y := z;
z := t;
end;
begin
clrscr;
writeln ('vvod poryadok matrica n');
readln (n);
m:=n; k:=n;
randomize;
for i := 1 to n do
for j := 1 to m do
for t := 1 to k do
a[i, j, t] := Random(10);
for i := 1 to n do
begin
for j := 1 to m do
begin
for t := 1 to k do
write(a[i,j,t]);
writeln;
end;
end;
for k:=1 to n-1 do
for j:=1 to n-k do
for i:=1 to n-j do
begin
if (a[i,j,k] > a[i+1,j,k]) and (a[i,j,k] > a[i+2,j,k]) then
swap(a[i,j,k],a[i+1,j,k],a[i+2,j,k]);
end;
for i := 1 to n do
begin
for j := 1 to m do
begin
for t := 1 to k do
write(a[i,j,t]);
writeln;
end;
end;
end.


что-то не то((
подскажите, как лучше вывести трёхмерный массив
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


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

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

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


Цитата(klik1602 @ 13.01.2011 18:54) *
Дан трёхмерный массив. Расположите его элементы по возрастанию

klik1602, от тебя пытаются добиться вдоль чего сортировать. С одномернум массивом этого вопроса на возникает. Легко сказать, какая точка больше и какая меньше, если они на отрезке или даже на целой прямой. А вот попробуй сравни так две точки на плоскости (или в трехмерном пространстве). Поэтому всегда нужно указывать, вдоль чего ты сортируешь. Например, на плоскости ты можешь сказать, что сортировка по близости к какому-то центру. Это будет первый уровень сортировки, а второй - внутри окружностей (все точки которых находятся на одинаковом расстоянии от центра), там можно сортировать по углу.

Тут, я думаю, тебе нужна сквозная сортировка по слоям-строкам-элементам. Слой - это первый индекс, строка - второй, элементы - третий. Сквозная сортировка подразумевает, что ВСЕ элементы преддыдущего слоя не превосходят элементов следующего. В каждом слое - то же самое по строкам. А в каждой строке - поэлементно. Такая сортировка выглядит вполне естественно, но все же есть неоднозначность, и вопросы к тебе были совешенно законны. Например, можно сортировать элемент-слой-строка. Или вообще какой-нить змейкой хитрой..

Если же тебе надо сквозную сортировку слой-строка-элемент, то все довольно просто. Поскольку этот порядок совпадает с порядком организации трехмерного массива в памяти, то можно просто отсортировать всю эту область как большой одномерный массив. Например, вот так:
type
tElement= integer;

const
n= 3;
m= 6;
k= 8;
l= n*m*k;

var
a: array [1..n,1..m,1..k] of integer;
b: array [1..l] of integer absolute a;


procedure Show;
var
i,j,t: integer;
begin
for i:= 1 to n do begin
WriteLn(i,':');
for j:= 1 to m do begin
for t:= 1 to k do Write(a[i,j,t]:4);
WriteLn
end;
WriteLn
end
end;


var
i,j,t: integer;
buf: tElement;

begin
for i := 1 to n do
for j := 1 to m do
for t := 1 to k do
a[i, j, t] := Random(100)-49;

Show;

{ Сквозная сортировка }
for i:=2 to l do
for j:=l downto i do if b[j-1]>b[j] then begin
buf:= b[j-1];
b[j-1]:= b[j];
b[j]:= buf
end;

WriteLn('Отсортированный массив:');
Show;

ReadLn
end.

Что касается вывода, то он тоже организован по слоям.

Иногда в задаче требуется не прибегать к представлению массива как одномерного. Если у тебя как раз такой случай - скажи.
Удачи.


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


Новичок
*

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

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


большое спасибо за помощь))
задача поставлена так, как я вам её написала, а именно
Цитата
Дан трёхмерный массив. Расположите его элементы по возрастанию
, с преподавателем я не увижусь уже до сдачи лаб, и не смогу спросить, какая именно сортировка от меня требуется, но скорее всего сквозная))
не могли бы вы мне объяснить вот эту строчку
Цитата
b: array [1..l] of integer absolute a;
она у меня не читается при выполнении программы, выскакивает ошибка
Цитата
Ожидалось ';'

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


Гость






> она у меня не читается при выполнении программы, выскакивает ошибка

При выполнении?!
Может, при компиляции? Не путай, это очень большая разница.
Какой компилятор?

> Ожидалось ';'

Значит, при КОМПИЛЯЦИИ.
А вовсе не при выполнении.

> что означает absolute a ??

Это означает, что под переменную не будет выделяться память, переменная будет расположена в памяти там же, где и a.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Гость






Цитата
выскакивает ошибка

Включаем режим телепатии: компилятор - Pascal ABC? Тогда забудь про Absolute, там эта директива отменена. В ABC надо действовать по-другому.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






М-да... В Pascal ABC убрали все возможности работы с указателями, вот что с людьми делает автоматическая сборка мусора... Никакими ухищрениями мне не удалось ни преобразовать указатель на 3-мерную структуру в указатель на обычный линейный массив (это стандартная в общем-то операция, тут она невозможна), ни просто сделать

type
vector = array[1 .. L] of telement;

// и дальше где-то привести:
vector(a)[i] := ...

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

Получилось сделать сквозную сортировку только
вот таким извращением... (Показать/Скрыть)
(тестировалось в PascalABC.NET 1.3.354)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


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

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

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


Цитата(klik1602 @ 14.01.2011 19:33) *
что означает absolute a ??
Что это буквально означает, тебе уже объяснили. А фигурально выражаясь, это означает, что пора бросать это уродство, Pascal ABC (если, конечно, это не есть ОБЯЗАТЕЛЬНОЕ требование твоего учебного заведения, что было бы еще бОльшим уродством), установить FreePascal и делать ДЕЛО, а не в бирюльки играть.

Я уважаю труды volvo (не забудь ему поставить +1), но промолчать не могу. Pascal ABC был задуман как простая альтернатива, но реализация всегда была goofy, а теперь они и вообще исказили основную идею языка.. norespect.gif

Скачай FPC с официального сайта http://freepascal.org/download.var , и будет тебе щастье..


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


Новичок
*

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

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


ещё раз, большое спасибо за помощь. smile.gif
P.S> FreePascal уже установила;))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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