PDA

Просмотр полной версии : Вопросы по синтаксису 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:

Deem3n®
07.01.2007, 01:22
Чтобы программа заработала добавь var a: array [0..5] of integer; перед begin
writeln(Average(a));
...

mR_LiNK[deface_0nl
07.01.2007, 01:33
Это правильно, но не много не то.

должен быть открытый массив
(ограничение на ввод я поставил в качестве примера)

нужно чтобы массив оставался открытым,
а программа расчитывала среднее по первому и последнему элементам..

Deem3n®
07.01.2007, 01:51
Ну тогда замени: 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-ый раз:.{численный результат}. )

Deem3n®
07.01.2007, 11:01
результат выводится 2-а раза, почему?
1-ый раз это тут:writeln('Srednaya massiva = ', Result);2-й раз тут:writeln(Average(p));

_Great_
07.01.2007, 12:25
writeln('Srednaya massiva = ', Result);
writeln(Average(p));

поэтому и два раза. Убери вывод внутри Average()

W!z@rD
10.01.2007, 00:18
стоп... я конечно же извиняюсь, а разве не надо указывать длинну?
этоо? = 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