пятница, 19 июня 2009 г.

поменять местами первый отрицательный и последний положительный элементы массива

cгенерировать массив А из 15 случайных чисел в диапозоне от -100 до 100.
вывести результат на экран. поменять местами первый отрицательный и последний положительный элементы массива. вывести езультат на экран. учесть возможность отсутствия в массиве отрицательных и положительных элементов


По порядку

  1. генерировать массив A
    for i:=1 to 15 do a[i]:=random(200)-100;

  2. найти первый отрицательный
    first_minus:=0;
    for i:=1 to 15 do begin
    if a[i] < 0 then begin
    first_minus:=i;
    break;
    end;
    end;

  3. убедиться что отрицательное число встретилось
    if first_minus = 0 then writeln('нет отрицательного числа в массиве!');

  4. найди последний положительный
    last_plus:=0;
    for i:=15 downto 1 do begin
    if a[i] > 0 then begin
    last_plus:=i;
    break;
    end;
    end;

  5. убедиться что положительное число встретилось
    if last_plus = 0 then writeln('нет положительного числа в массиве!');

  6. поменять местами найденые элементы
    temp:=a[first_minus];
    a[first_minus]:=a[last_plus];
    a[last_plus]:=temp;


-----

const
   N = 10;

var
   a: array [1..N] of integer;
   i: integer;
   first_minus: integer;
   last_plus: integer;
   temp: integer;

begin
   {init random}
   for i:=1 to N do a[i]:=random(100)-50;

   write('  начальные данные: ');
   for i:=1 to N do write(a[i]:4);
   writeln;

   first_minus := -1;
   for i:=1 to N do begin
      if a[i] < 0 then begin
         first_minus:=i;
         break;
      end;
   end;
   
   if first_minus = -1 then begin
      writeln('нет отрицательных элементов');
      exit;
   end;
   
   last_plus := -1;
   for i:=N downto 1 do begin
      if (a[i] > 0) then begin
         last_plus:=i;
         break;
      end;
   end;
   
   if last_plus = -1 then begin
      writeln('нет положительных элементов');
      exit;
   end;

   temp:=a[first_minus];
   a[first_minus]:=a[last_plus];
   a[last_plus]:=temp;

   write('после перестановки: ');
   for i:=1 to N do write(a[i]:4);
   writeln;
end.

вывод
начальные данные:   29   3  28  -7  -3  40 -44  46   6 -14
после перестановки:   29   3  28   6  -3  40 -44  46  -7 -14

Комментариев нет:

Отправить комментарий