Дмитрий
Дмитрий

Помогите исправить код программы

Дан массив ненулевых целых чисел размера N. Проверить, чередуются ли в нем положительные и отрицательные числа. Если чередуются, то вывести 0, если нет, то вывести порядковый номер первого элемента, нарушающего закономерность.
!Функция обязательна!

function procDo (mas:array of integer; n:integer):integer;
var
i,d:integer;
begin
d:=0;
for i:=2 to n do
if (mas div abs(mas))=(mas[i-1] div abs(mas[i-1])) then
begin
d:=i;
break;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
type mas= array[1..100] of integer;
var
res,n,i:integer;
begin
n:=Memo1.Lines.Count;
for i:=1 to n do
mas(i):=StrToInt(Memo1.Lines.Strings[i-1]);
res:=procDo(mas,n);
Edit1.Text:=IntToStr(res);
end;
end.

Юл
Юлия

1. Функция должна возвращать результат, следовательно перед выходом надо сделать procDo := d; или Result := d;
2. Зачем такие сложности при проверке на разные знаки? Все гораздо проще, произведение последовательных элементов меньше нуля.
3. Массив передаваемый параметром в функцию объявлен как открытый массив, который индексируется с нуля.
4. В обработчике кнопки у вас mas это тип, а вы пытаетесь работать с ним, как с массивом. Да еще и индекс указываете в круглых скобках.

Короче, вот так будет посимпатичнее

function procDo (mas:array of integer; n:integer):integer;
var
i : Integer;
begin
Result := 0;
for i:=1 to n-1 do
if mas[i-1] * mas[ i ] > 0 then begin
Result := i + 1;
break;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
type mas= array[1..100] of integer;
var
res,n,i:integer;
A : mas;
begin
n:=Memo1.Lines.Count;
for i:=1 to n do A[ i ] := StrToInt(Memo1.Lines.Strings[i-1]);
res:=procDo(A, n);
Edit1.Text:=IntToStr(res);
end;

Похожие вопросы
Помогите исправить программу
Помогите исправить код CSS
помогите исправить код
ошибки в коде программы помогите исправить
Помогите исправить ошибки в коде программы!
помогите исправить программу.
Помогите исправить ошибку в коде !
помогите исправить программу...
помогите исправить код на си
помогите исправить код с++