Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите с масивом
Форум «Всё о Паскале» > 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 дописать)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.