Top.Mail.Ru
Ответы
Аватар пользователя
5 месяцев назад
от

Pascal ABC задача на одномерный массив #7

Ввести массив A(n). Если в массиве все элементы образуют
возрастающую последовательность, то уменьшить все элементы
вдвое, иначе – удвоить минимальный элемент (если его нет, то
выдать сообщение).

Вот что получилось у меня:

Program qq;
Var A: array[1..20] of integer;
i,k,mini,min:integer;
Begin
k:=0;
min:=300;
mini:=0;
Randomize;
For i:=1 to 3 do
begin
A[i]:=Random(101); Write(A[i]:4);

If (A[i]<min) then
begin
min:=A[i];
mini:=i;
end;

If (A[i]<A[i+1]) then
k:=k+1;
end;
Writeln();

If (k=3) then
begin
Writeln('True',k);
For i:=1 to 3 do
begin
A[i]:=A[i] div 2 ;
Write(A[i]:4);
end;
end
Else
begin
Writeln('False',k);
Writeln('Minimus= ',min,' (#',mini,')',' | ',min,'*2= ',min*2);
end;
end.

Дополнен

Качество уродское...

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок
5мес

— сильно много букв и n не обязательно равно 3 —
проще так:

а вот второе условие:

Аватар пользователя
5мес
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
 type 
  // если в задаче НЕ дана длина массива, 
  // то подразумевается динамический массив 
  TIntArray = array of integer; 
 
  TAggregateResult = record 
    IsGrowing: boolean; 
    MinInd: integer; 
  end; 
 
function AggregateArray(AValue: TIntArray): TAggregateResult; 
begin 
  Result.IsGrowing := AValue <> nil; 
  if Result.IsGrowing then 
  begin 
    Result.IsGrowing := Length(AValue) > 1; 
    Result.MinInd := 0; 
    if Result.IsGrowing then 
    begin 
      var Prev := AValue[0]; 
      for var i := 1 to High(AValue) do 
      begin 
        if Result.IsGrowing then 
        begin 
          Result.IsGrowing := Prev < AValue[i]; 
          Prev := AValue[i]; 
        end; 
        // это найдет первый минимальный элемент 
        // в задании ничего не сказано что их может быть несколько :) 
        if AValue[Result.MinInd] > AValue[i] then Result.MinInd := i; 
      end; 
    end; 
  end 
  else 
    Result.MinInd := -1; 
end; 
 
procedure PrintArray(AValue: TIntArray; const AText: string); 
begin 
  WriteLn; 
  WriteLn(AText); 
  for var i in AValue do Write(i:4); 
  WriteLn; 
end; 
 
var 
  A: TIntArray; // массив 
  n: integer;   // длина масива 
 
begin 
  // ** ДАНО 
 
  // задаем длину массиву 
  ReadLn(n); 
  SetLength(A, n); // теперь A это массив A(n) 
 
  Randomize; 
  for var i := 0 to High(A) do A[i] := Random(101); 
 
  // ** РЕШЕНИЕ 
 
  PrintArray(A, 'Исходный массив: '); 
 
  var Agg := AggregateArray(A); 
  if Agg.IsGrowing then 
    for var i := 0 to High(A) do A[i] := A[i] div 2 
  else 
    if Agg.MinInd = -1 then 
      WriteLn('В массиве нет элементов!') 
    else 
      A[Agg.MinInd] := A[Agg.MinInd] * 2; 
 
  if Agg.MinInd > -1 then PrintArray(A, 'Измененный массив: '); 
end.