Другие языки программирования и технологии

ПАСКАЛЬ! задача!

Переставить значения элементов заданного одномерного массива, так, чтобы все нулевые значения оказались в конце массива, а не нулевые в начале, не нарушая порядок, в котором они следовали в исходном массиве.
Ференчук загнул чего-то.. .
Самое то решение:
1. Описать еще один массив соответствующий данному по размерам.
2. Заполнить его нафиг нулями.
3. Пройтись по исходному массиву и переписать в другой только ненулевые элементы. Ясен пень, что писАть надо подряд. Получившийся массив и будет искомым.
Решение неоптимальное с точки зрения памяти и ресурсов проца, зато надежное - в таком алгоритме ошибиться невозможно. Удачи.
Ульяна Зимко
Ульяна Зимко
90 755
Лучший ответ
Зачем вводить второй массив? Это и правда не оптимальное решение, с точки зрения ресурсов. Можно ведь со помощью слегка модифицированной сортировки пузырьком перенести все 0 в конец массива.

Выглядит это примерно так:

program mmm;
const n=10; {количество элементов массива}
var i,j:integer;
t:boolean;
m:array[ 1..n ] of integer;
begin

for i:=1 to n do readln(m[ i ]); {вводим исходный массив}

t:=true;
while t do
begin
t:=false;
for i:=1 to n-1 do
if (m[ i ]=0) and (m[ i+1 ]<>0) then begin {если текущий элемент 0, а следующий не 0, то}
j:=m[ i ]; {меняем их местами. И так до тех пор пока все}
m[ i ]:=m[ i+1 ]; {нулевые элементы не окажутся в конце массива}
m[ i+1 ]:=j;
t:=true;
end;
end;

for i:=1 to n do writeln(m[ i ]); {выводим полученный массив}

end.

Удачи!
var
x: array [1..20] of real;
i: integer;
begin
x[1]:=0;
x[2]:= 5/8;
i:=1;
writeln('x[1]= ', x[1]:4:4);
writeln('x[2]= ',x[2]:4:4);

for i := 3 to 20 do
begin
x:= x[i-1]/2+3/4*x[i-2];
writeln('x[',i,']= ', x:4:4);
end;
readln;
end.
Suyun Batyrkulov
Suyun Batyrkulov
2 816