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.
Качество уродское...
— сильно много букв и n не обязательно равно 3 —
проще так:

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

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.