Если у вектора хотя бы один компонент меньше, чем -2, то все отрицательные компоненты заменить их квадратами

Tertraun

Помогите пожайлуста, буду очень признателен! бо уже неделю не магу сделать ее!!! зарание огромное спасибо1. Дан вектор A(n). Если у вектора A=(a1, a2,...,an) хотя бы один компонент меньше, чем -2, то все отрицательные компоненты заменить их квадратами, оставив все ос-тальные без изменения. В противном случае вектор A умножить на 0.1
3 ответа

Tertraun

program Project1;
 
{$N+} //Подключение математического сопроцессора. - Чтобы был доступен тип Extended.
 
const
  N = 10;
  CmpVal = -2;
var
  A : array[1..N] of Extended;
  i : Integer;
  IsFound : Boolean;
  S : String;
begin
  repeat
    //Подготовка массива.
    Randomize;
    for i := 1 to N do A[i] := Random(10); //0..9.
    //С вероятностью 1/2 записываем несколько значений меньших, чем CmpVal.
    if Random(2) = 0 then
      for i := 1 to 4 do A[1 + Random(N)] := CmpVal - 1 - Random(5);
    //Распечатка исходного массива.
    Writeln('Исходный массив:');
    for i := 1 to N do begin
      if i > 1 then Write(', ');
      Write(A[i]:0:2);
    end;
    Writeln;
 
    //Определяем, есть ли хотя бы один элемент меньший, чем -2.
    IsFound := False;
    for i := 1 to N do
      if A[i] < CmpVal then begin
        IsFound := True;
        Break;
      end;
    //В зависимости от значения IsFound изменяем значения элементов массива.
    if IsFound then begin
      for i := 1 to N do
        if A[i] < 0 then A[i] := A[i] * A[i];
    end else
      for i := 1 to N do A[i] := A[i] * 0.1;
 
    //Распечатка изменённого массива.
    Writeln('Массив после обработки:');
    for i := 1 to N do begin
      if i > 1 then Write(', ');
      Write(A[i]:0:2);
    end;
    Writeln;
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.


Tertraun

const
  n = 10;
 
var
  a: array [1..n] of real;
  i: integer;
  f: boolean;
 
begin
  randomize;
  for i := 1 to n do
  begin
    a[i] := random(50) - 5;
    write(a[i]:5);
    if a[i] < -2 then f := true
  end;
  writeln; writeln;
  for i := 1 to n do
  begin
    if not(f) then a[i] := a[i] * 0.1 else
    if a[i] < 0 then a[i] := sqr(a[i]);    
    write(a[i]:5)
  end;
  readln
end.


Tertraun

Спасибо большое!