Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите с масивом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Lesh
Дано массив (X) размерностью n.
Нужно Превратить его так, чтобы в начале массива находились додатны элементы в порядке их следования в исходном массиве, а после них отрицательное элементы в порядке возрастания по значению, если последний элемент отрицательное и его абсолютное значение четное. В противном случае переставить элементы так чтобы произошла смена флангов, то есть первый элемент оказался на последнем месте, а последний на первом месте. Второй элемент оказался на предпоследнем месте, а предпоследний на втором месте и т.д
Ограничения - создание вспомогательного массива предыдущее сортировки исходного массива позростанню (убиванию) его элементов не разрешается.
буду очень благодарен)
sheka
В чем проблемка(-и) ?
Lesh
Вот что получилось. но как то не так( + не знаю как сделать смену флангов.
 
program lesh;
   uses crt;
  var x:array [1..99] of integer;
     g,s,m,n,k,i:integer;
    begin
    clrscr;
    textcolor(red);
     writeln('vod n');
     readln(n);
     writeln('vvedite e-tu massiva');
     for i:=1 to n do
     readln(x[i]);
     writeln;
     for i:=1 to n do
     writeln('x[',i,']=',x[i]);
     if x[n]<0 then
     begin
     x[n]:=g;
     s:=abs(g);
      k:=s mod 2 ;

      if k=0 then
      begin

         for i:=1 to n-1 do
       if x[i]>x[i+1] then
     begin
     m:=x[i];
     x[i]:=x[i+1];
     x[i+1]:=m;
     end;
     writeln;
      for i:=1 to n do
     writeln('x[',i,']=',x[i]);

    end
    else
    readln;
     end.
Client
const
  k=10;
var
  mas:array[1..k] of Integer ;
  I,a:integer;
begin
  for I := 1 to k do
    mas[i]:=i;
  for I := 1 to (k div 2) do begin
    a:=mas[i];
    mas[i]:=mas[k-i+1];
    mas[k-i+1]:=a;
  end;
end.
?
volvo
Сортировка по первому условию (когда последний элемент отрицательный с четным модулем) делается проще гораздо: обычный "пузырек" с хитрой функцией сравнения:
const
  n = 11;
  a: array[1 .. n] of integer =
  (2, 3, 7, -2, -5, 4, -6, -9, 10, -11, -12);

function f(a, b: integer): boolean;
begin
  if (a < 0) and (b < 0) then f := a > b
  else
    if (a > 0) and (b > 0) then f := false
    else f := a < b;
end;

var
  i, j, T: integer;

begin
  if (a[n] < 0) and not odd(abs(a[n])) then
  begin
    for i := 1 to n do
      for j := n downto i + 1 do
        if f(a[pred(j)], a[j]) then
        begin
          T := a[pred(j)]; a[pred(j)] := a[j]; a[j] := T
        end
  end
  else { Просто развернуть массив }
    for i := 1 to n div 2 do
    begin
      T := a[i]; a[i] := a[n - i + 1]; a[n - i + 1] := T;
    end;

  for i := 1 to n do
    write(a[i]:4);
  writeln;
end.
Lesh
Сделал так. теперь нажимаю ctrt f9 , а оно не запускается(
Client
где ошибка? какая? или просто нет задержки экрана7
Lesh
А не все теперь работает) забыл readln дописать)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.