Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Разбиение и сортровка одномерного массива

Автор: Slipknot 27.10.2006 22:34

Дан массив X(N) (N<=60) причём кол-во элементов кратно 3. Разбить массив на 3 части и в каждой поменять наибольший элемент с наименьшим blink.gif blink.gif blink.gif

Автор: мисс_граффити 27.10.2006 22:40

что не получается?
что пробовал?

Автор: Slipknot 28.10.2006 0:07

У меня напряг как раз с этим РАЗБИТИЕМ

Автор: Reflex 28.10.2006 0:13

Кхм...
странно казалось бы разбивать то и не надо просто хранишь начало первого и последнего члена нужной части

Автор: Slipknot 28.10.2006 0:15

Ну так как найти концы этих частей ?

Автор: Reflex 28.10.2006 0:18

ну смотри у тебя в массиве 3n элементов
тогда первая часть - 0_n-1, вторая- n_2n-1, третья 2n_3n-1

Автор: мисс_граффити 28.10.2006 0:18

количество элементов ты знаешь => можешь посчитать, сколько будет в каждой части.
допустим, у нас 9 элементов, в каждой части по три.
первая часть (индексы): 1,2,3. вторая часть: 4,5,6. третья: 7,8,9.
то есть хранить надо 4 и 7.
а еще лучше - хранить только размер каждой части.

Автор: Reflex 28.10.2006 0:19

помоему массив удобнее в этом случае с 0 номеровать

Автор: Slipknot 28.10.2006 0:21

Размер каждой части - это круто, ну допустим их там девять эл-тов - размер части 3, их - 60 размер части - 20
и как же это по вашему в проге рассчитать?

Автор: Reflex 28.10.2006 0:26

пусть n - количество элементов
размер части равен n div 3
значит первый элемент первой части - 0
последний элемент первой n div 3 - 1
второй - n div 3 => 2*(n div 3)-1
третmей 2*(n div 3)=> n-1

Автор: Reflex 28.10.2006 0:40

 program Slipknot
var x : array [ 1..60 ] of integer;
n : integer;
size : integer;
min, min_id, max, max_id : integer;

procedure change(st, f : integer);
var i : integer;
begin
min_id:=st;
max_id:=st;
for i:= st to f do begin
if x[i]>x[max_id] then max_id:=i;
if x[i]<x[min_id] then min_id:=i;
end;
i:=x[min_id];
x[min_id]:=x[max_id];
x[max_id]:=i;
end;

var i:integer;
begin
read(n);
for i:= 1 to n do
read(x[i]);
size:=n div 3;
change(1,size);
change(size+1, 2*size);
change(2*size+1,n);
for i:= 1 to n do
write(x[i],' ');
readln;
readln;
end.

Вот готовый код, откомментируй его.

Автор: volvo 28.10.2006 1:07

Цитата
Вот готовый код, откомментируй его.
Хочешь, я откомментирую? Он нерабочий:

Цитата
6
1
2
3
4
5
6
2 1 4 3 6 5
Последнее китайское предупреждение: Будь добра проверять программы ПЕРЕД выкладыванием на форум...

Автор: Malice 28.10.2006 1:16

Цитата(volvo @ 27.10.2006 22:07) *

Хочешь, я откомментирую? Он нерабочий:

А почему, извините ? Вроде все ок.
123456 - -> [12][34][56] -> поменяли мин и мах ->[21][43][65]. Так и есть..
Ps Не, ну наплел конечно, но работает ;)
pps шутка

Автор: Slipknot 28.10.2006 2:04

Спасибо give_rose.gif
Всё работает замечательно give_rose.gif

Автор: Reflex 28.10.2006 4:11

Volvo читай условие внимательно!