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

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

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

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


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


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


Гость






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


Новичок
*

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

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


Дан трёхмерный массив. Расположите его элементы по возрастанию
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klik1602
сообщение 13.01.2011 21:15
Сообщение #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 
 К началу страницы 
+ Ответить 
Lapp
сообщение 14.01.2011 6:22
Сообщение #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 
 К началу страницы 
+ Ответить 
klik1602
сообщение 14.01.2011 19:33
Сообщение #8


Новичок
*

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

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


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

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


Гость






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

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

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

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

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

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


Гость






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

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


Гость






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

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

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

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

Получилось сделать сквозную сортировку только
вот таким извращением... (Показать/Скрыть)
(тестировалось в PascalABC.NET 1.3.354)
 К началу страницы 
+ Ответить 
Lapp
сообщение 15.01.2011 4:49
Сообщение #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 
 К началу страницы 
+ Ответить 
klik1602
сообщение 15.01.2011 18:00
Сообщение #13


Новичок
*

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

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


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

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

 



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