Цитата:
Сообщение от Brick
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) Сумму элементов массива с нечетными номерами.
2) Сумму элементов массива, расположенных между первым и последним отрицательным элементом.
3) Сжать массив, удалив из него все элементы, модуль которых не превышает 1.
Освободившиеся в конце массива элементы заполнить нулями.
Вот что наделал, с типами никак не разберусь и не получается сделать последний шаг, объясните как, это сделать.
|
Код:
program Soft;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
n=10;
var
arr:array[1..n] of double;
sum:double;
i, j, first, last:integer;
begin
randomize();
writeln('Source array');
//Заполняем массив
for I := 1 to n do
begin
arr[i]:=random(50)/( random(50)+1)-random(10);
write(arr[i]:8:2);
end;
//Получаем сумму элементов стоящих на нечётных позициях
j:=1; sum:=0;
while j<=n do
begin
sum:=sum+arr[j];
j:=j+2;
end;
writeln;
writeln('The sum of elements with odd positions = ',sum:8:2);
//ищем первый отрицательный элемент
first:=1;
while (first<=n) and (arr[first]>=0) do inc(first);
//ищем последний отрицательный элемент
last:=n;
while (last>0) and (arr[last]>=0) do dec(last);
writeln('First elem = ',first,' last element = ',last);
if last>first then
begin
i:=first+1;
sum:=0;
while i<last do
begin
sum:=sum+arr[i];
i:=i+1;
end;
writeln('Sum between first and last negative elements = ',sum:8:2);
end
else
writeln('Sum = 0');
//Собственно сжимаем массив
i:=1;
last:=n;
while i<=last do
begin
if abs(arr[i])<=1 then
begin
//Сдвигаем
for first := i to last-1 do
arr[first]:=arr[first+1];
arr[last]:=0.0;
dec(last)
end;
i:=i+1;
end;
writeln('Array after pack');
//Печатаем массив
for I := 1 to n do write(arr[i]:8:2);
readln;
end.
Как-то так...Если что - пиши