![]() |
|
|
#1
|
|||
|
|||
|
Добрый день,помогите пожалуйста найти ошибку.Задание такое: Задан целочисленный одномерный массив A из N элементов. Найти номер первого максимального элемента среди элементов, значения которых лежат в диапазоне [c,d] и расположенных до последнего элемента с нечетным значением. Вот код:
Код:
Program lab6;
{$APPTYPE CONSOLE}
Uses SysUtils;
Const
nmax=20;
var
a:array [1..nmax] of integer;
n,i,d,c,nom,max:integer;
dat,res:textfile;
begin
AssignFile(dat, paramstr(1));
reset(dat);
read(dat, n,c,d);
for i:=1 to n do read(dat, A[i]);
CloseFile(dat);
AssignFile(res, paramstr(2));
rewrite(res);
writeln(res, 'Исходные данные:');
writeln(res, 'n = ',n);
writeln(res, 'c=',c);
writeln (res, 'd=',d);
write(res, 'Исходный массив: ');
for i:=1 to n do
write(res, A[i]);
writeln(res,'');
nom:=0;
max:=c;
for i:=c+1 to d do
if a[i]>a[max] then max:=i;
writeln(res,'max',max);
for i:=n-1 downto 1 do
begin
if a[i] mod 2=1 then nom:=i;
end;
if max<nom then writeln(res,'номер',max) else writeln (res,'Такого элемента нет');
CloseFile(res);
writeln('Press Any Key');
readln;
end.Последний раз редактировалось M.A.D.M.A.N., 09.12.2014 в 21:50. |
|
#2
|
|||
|
|||
|
ты вместо использования c и d как ограничения значений, используешь их для ограничения номеров элементов и не проверяешь по последнему нечетному элементу (ну или я не понял задание).
Код:
function FindMaxBoundary(A : Array Of integer) : Integer;
var
I : Integer;
begin
For I := High(A) DownTo Low(A) Do
If (A[i] mod 2) <> 0 Then
Begin
Result := I;
Exit;
End;
Raise Exception.Create('Все элементы массива четные.');
end;
function FindMaxItem(A : Array Of Integer; c, d : Integer) : Integer;
var
MaxIdx : Integer;
begin
Result := -1;
MaxIdx := FindMaxBoundary(A);
For I := Low(A) To MaxIdx-1 Do
If (A[i] >= c) And (A[i] <= d) Then
If Result = -1
Then Result := I
Else
If A[i] > A[Result] Then Result := I;
If Result = -1 Then
Raise Exception.Create('Максимальный элемент не найден.');
end;Собственно вызов для поиска: Код:
Try
n := FindMaxItem(A,c,d);
WriteLn(Format('Макс. элемент A[%d] = %d.',[n,A[n]]));
Except
On E : Exception WriteLn(E.Message);
End; |