Просмотр полной версии : Вопросы по синтаксису Delphi
mR_LiNK[deface_0nl
07.01.2007, 01:08
Вопрос в следующем::
Как задется открытый массив??
Пример(расчет средней элементов массива):
...
function Average(a: array of integer): real;
var
i: Integer;
begin
for i := 0 to 5 do readln(a[i]);
Result := 0;
for I := Low(a) to High(a) do Result := Result + a[i];
Result := Result / (High(a) - Low(a) + 1);
end;
begin
writeln(Average(a));
writeln('Press Enter to exit...');
readln;
end.
...
Компилятор выдает следующее:
Undeclared identifier:'a'
Что вобщем-то понятно, т.к. переменная 'а' описана только в локальном блоке, т.е. в функции, а не в программе.
Объясните как ее описать в программе, или что нужно исправить, чтобы избаиться от ошибки? :confused:
Чтобы программа заработала добавь var a: array [0..5] of integer; перед begin
writeln(Average(a));
...
mR_LiNK[deface_0nl
07.01.2007, 01:33
Это правильно, но не много не то.
должен быть открытый массив
(ограничение на ввод я поставил в качестве примера)
нужно чтобы массив оставался открытым,
а программа расчитывала среднее по первому и последнему элементам..
Ну тогда замени: function Average(a: array of integer): real; на function Average(var a: array of integer): real; и вообще убери for i := 0 to 5 do readln(a[i]); или замени на for i := Low(a) to High(a) do readln(a[i]); если тебе в этой ф-ции надо вводить данные (странно, почему в ф-ции расчета средней элементов массива нужно вводить данные?)
Потом можешь экспериментировать :var p: array [1..10] of integer;
begin
writeln(Average(p));
writeln('Third element is ',p[3]);
writeln('Press Enter to exit...');
readln;
end.
mR_LiNK[deface_0nl
07.01.2007, 01:59
Собрал
получилось следующее(по логике вроде правильно)::
function Average(var a: array of integer): real;
var
i: Integer;
begin
for i := Low(a) to High(a) do readln(a[i]);
Result := 0;
for I := Low(a) to High(a) do Result := Result + a[i];
Result := Result / (High(a) - Low(a) + 1);
writeln('Srednaya massiva = ', Result);
end;
var
p: array [0..5] of integer;
begin
writeln('vvedite el-ty massivy');
writeln(Average(p));
writeln('Press Enter to exit...');
readln;
end.
Единственное есть недочет маленький
результат выводится 2-а раза, почему?
(1-ый раз: Srednaya massiva = .{численный результат}.
2-ый раз:.{численный результат}. )
результат выводится 2-а раза, почему?
1-ый раз это тут:writeln('Srednaya massiva = ', Result);2-й раз тут:writeln(Average(p));
writeln('Srednaya massiva = ', Result);
writeln(Average(p));
поэтому и два раза. Убери вывод внутри Average()
стоп... я конечно же извиняюсь, а разве не надо указывать длинну?
этоо? = array of integer.
SetLength(a,7)????
mR_LiNK[deface_0nl
10.01.2007, 01:23
стоп... я конечно же извиняюсь, а разве не надо указывать длинну?
этоо? = array of integer.
SetLength(a,7)????
в Delphi есть 2-а понятия массива..
стандартно, при объявлении длина задается принудительно.
также существуют и открытые массивы-параметры, которые являются массивами произвольной длины..
описывается такой массив с помощью словосочетания array of, при этом границы массива опускаются..
зы.учишь Delphi говоришь, отметься здесь::
http://forum.antichat.ru/thread30523.html
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot