Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > Подстановка в массиве


Автор: kent 15.7.2005, 16:37
Помогите решить задачу...
Дан массив размера N. Преобразовать его, вставив перед|после каждого
положительного|отрицательного элемента нулевой элемент.
Попытался решить (перед положительными), вот что пока получается:
Код

uses crt;
var a:array [1..1000] of Integer;
    temp:array [1..1000] of Integer;
    N,i,l:Integer;
begin
     Clrscr;
     Write('Input N:');
     ReadLn(N);
     Write('Input array N:');
     l:=0;
     for i:=1 to N do begin
        Read(a[i]);
        if (a[i]>0) then begin
          inc(l);{Количество положительных}
          temp[i]:=i;{Запоминаем индексы положительных элем-тов}
        end;
     end;

Дальше судя по всему нужно на место a[temp[i]], подставить нули а сами элементы сдвинуть, массив при этом увеличится на l элементов, но как это сделать я не знаю....
Или может вообще как то по другому надо делать?

Автор: volvo877 15.7.2005, 18:18
Перед положительными:
Код
uses Crt;
var
  X, a:array [1..1000] of Integer;
  i, index_a, N: integer;
begin
  Clrscr;
  Write('Input N:'); ReadLn(N);
  Write('Input array N:'); index_a := 0;
  for i:=1 to N do begin
    Read(X);
    if X > 0 Then begin
      inc(index_a); a[index_a] := 0; {0 перед элементом}
    end;
    inc(index_a); a[index_a] := X; {сам элемент}
  end;
end.

Автор: kent 15.7.2005, 20:04
volvo877, большущее тебе спасибо!

Вот доделал второй вариант:
Код

uses crt;
var a:array [1..1000] of Integer;
    b:array [1..1000] of Integer;
    X,i,N:Integer;
    index_1,index_2:Integer;
    all_1,all_2:Integer;
begin
     Clrscr;
     Write('Input N:');
     ReadLn(N);
     Write('Input array N:');
     index_1:=0; index_2:=0;
     for i:=1 to N do begin
        Read(X);
        if X>0 then begin
          inc(index_1); a[index_1]:=0;
        end;
        inc(index_2); b[index_2]:=X;
        if X<0 then begin
          inc(index_2); b[index_2]:=0;
        end;
        inc(index_1); a[index_1]:=X;
     end;
     all_1:=index_1;
     all_2:=index_2;
     for index_1:=1 to all_1 do begin
        Write(a[index_1],' ');
     end;
     WriteLn;
     for index_2:=1 to all_2 do begin
        Write(b[index_2],' ');
     end;
     Readkey;
end.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)