![]() |
|
#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; |