Помощь - Поиск - Пользователи - Календарь
Полная версия: .одномерный массив_вектора
Форум «Всё о Паскале» > 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 в таком-то порядке..

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

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