Помощь - Поиск - Пользователи - Календарь
Полная версия: .одномерный массив_вектора
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
кучаТрупов
тема-одномерные масивы_веkтора

задача- из вектора х(х1,х2,...,xn) получить вектор y(x1,x3,x5,...,x6,x4,x2) компоненты которого перенумерованы также от 1 до n.

wacko.gif

ну как всегда-мысли,идеи,пожелания. [jnz dtlm ghjcnfz pflfxf((
maksimla
мне кажется тут очень сперва все числа делим на два эти числа х1,х2,...,xn и тогда сортируются которые неделятся без остатка (x1,x3,x5,..) и которые делятся и остатка нету( ...,x6,x4,x2) потом эти числа дописать в конец (x1,x3,x5,..) этим и все кажется.


если я так понел правильно а если нет то извините меня
кучаТрупов
ну да. все так. сначала нечетные по возрастанию.потом четные по убыванию. смысл задачи то понятен. мне интересно реализацию в паскале. в ней и загвоздка.

Добавлено через 7 мин.
что то вначале типо:
for i:=1 to n do
if i mod 2 >0 then write(a[i],' ');
for j:=n to 1 do
if i mod 2 = 0 then write(a[j],' ' );

а потом объединить в один. так можно????
Unconnected
const n=20;
var mas1,mas2:array[1..n] of integer;
a,b:integer;
begin
b:=1;
for a:=1 to n do
begin
mas1[a]:=a;
end;
for a:=1 to n do
begin
if (mas1[a] mod 2 = 0) then begin
mas2[b]:=mas1[a];
inc(b);
end;
end;
for a:=1 to n do
begin
if (mas1[n+1-a] mod 2 = 1) then begin
mas2[b]:=mas1[n+1-a];
inc(b);
end;
end;
for a:=1 to n do
begin
write(mas2[a],' ');
end;
readln;
end.

кучаТрупов
хмм..тяжко.не въеду никак.
спасибо за содействие)
volvo
Цитата
мне интересно реализацию в паскале. в ней и загвоздка.
Идея понятна? smile.gif
const
n = 10;
x: array[1 .. n] of integer = (
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
);
var
y: array[1 .. n] of integer;
i, evens, odds: integer;

begin
for i := 1 to n do write(x[i]:5);
writeln;

evens := n; odds := 1;
for i := 1 to n do
if odd(i) then begin
{ если текущий индекс массива X нечетный - то записываем число спереди (слева направо) в массив Y }
y[odds] := x[i]; inc(odds);
end
else begin
{ если текущий индекс массива X четный - то число пишется в массив Y справа налево }
y[evens] := x[i]; dec(evens);
end;

for i := 1 to n do write(y[i]:5);
writeln;

end.
Айра
Что-то такое пришло в глову:
  
i:=1; //для заполнения y с начала
j:=n; //для заполнения y с конца
for k:=1 to n do //проходим по исходному массиву
begin
if (k mod 2 <> 0) then //если повторение цикла нечетное
begin
y[i]:=x[k]; //то выполняем присваивание по i
inc(i); //и увеличиваем i на 1
end
else //а если четное
begin
y[j]:=x[k]; //то присваиваем по j
dec(j); //и уменьшаем j на 1
end;
end;


to volvo: опередил)))
Unconnected
const n=20; {Кол-во элементов каждого из массивов}
var mas1,mas2:array[1..n] of integer;
a,b:integer;
begin
b:=1; {<=переменная-счётчик для добавления элементов во 2ой массив}
for a:=1 to n do {<=Заполнение первого массива числами от 1 до 20}
begin
mas1[a]:=a;
end;
for a:=1 to n do
begin
if (mas1[a] mod 2 = 0) then begin {<=проверка элемента на чётность и добавление его в ячейку массива 2 с индексом b}
mas2[b]:=mas1[a];
inc(b); {<=увеличиваем счётчик на 1}
end;
end;
for a:=1 to n do
begin
if (mas1[n+1-a] mod 2 = 1) then begin{<=проходим массив с конца,т.к. нечётные эл-ты нужно расположить по убыванию.Проверка на НЕчётность}
mas2[b]:=mas1[n+1-a];
inc(b);
end;
end;
for a:=1 to n do
begin
write(mas2[a],' ');
end;
readln;
end.
кучаТрупов
блин..здорово)

ну а нельзя как нибудь попримитивнее,например:

program;
uses crt;
var a:array[1..n] of integer; i,n,j,k:integer;
BEGIN
clrscr;
write('n='); readln(n);
randomize;
for i:=1 to n do begin
a[i]=random(10)-5;
write(a[i],' ');
end;writeln;
for i:=1 to n do begin
if(iMOD2<>0)then write(a[i],' ');end;
for i:=n downto 1 do begin
if(iMOD2=0)then write(a[i],' ');end;
readln;
END.


такое работает? у меня паскаль не запускается(
Unconnected
Не компилировал, но мне кажется, что можно. Здесь элементы 1го массива не "раскладываются" по ячейкам 2го, а просто выводятся в нужном порядке.

Только добавь название программы , просто "Program" нельзя.

И код нужно заключать в теги [cоde=pas][/cоde] {Здесь он не работает, я в нём букву О русскую написал smile.gif}
Айра
Цитата
Не компилировал, но мне кажется, что можно. Здесь элементы 1го массива не "раскладываются" по ячейкам 2го, а просто выводятся в нужном порядке.

А вот мне кажется, что нельзя.. потому что в задании сказано получить верктор, а не вывести элементы массива x в таком-то порядке..

и еще, кучаТрупов, как ты думаешь, что выполнится быстрее один цикл или два? чем тебе вариант с одним циклом не нравится? ))
volvo
Цитата
Здесь элементы 1го массива не "раскладываются" по ячейкам 2го, а просто выводятся в нужном порядке.
А теперь поднимаем глаза и внимательно читаем задание:
Цитата
задача- из вектора х(х1,х2,...,xn) получить вектор y(x1,x3,x5,...,x6,x4,x2)


Диагноз: такое решение не удовлетворяет условию задачи...
кучаТрупов
дада.я осознала свою ошибку. все понятно.

Добавлено через 2 мин.
Цитата(Айра @ 15.12.2008 20:58) *

А вот мне кажется, что нельзя.. потому что в задании сказано получить верктор, а не вывести элементы массива x в таком-то порядке..

и еще, кучаТрупов, как ты думаешь, что выполнится быстрее один цикл или два? чем тебе вариант с одним циклом не нравится? ))

ну естественно один)мне всем нравится вариант)мне просто интересно будет ли работать то что у меня в голове)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.