Показать сообщение отдельно
Старый 06.03.2012, 14:19   #2   
Registered User
 
Сообщений: 1,113
Регистрация: 23.06.2007
Возраст: 58

Hopkroft вне форума Не в сети
Цитата:
Сообщение от 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.
Как-то так...Если что - пиши

Последний раз редактировалось Hopkroft; 06.03.2012 в 17:50.
  Ответить с цитированием