Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Вопросы по синтаксису Delphi |

07.01.2007, 01:08
|
|
Участник форума
Регистрация: 12.12.2006
Сообщений: 158
Провел на форуме: 1364740
Репутация:
114
|
|
Вопросы по синтаксису Delphi
Вопрос в следующем::
Как задется открытый массив??
Пример(расчет средней элементов массива):
Код:
...
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'
Что вобщем-то понятно, т.к. переменная 'а' описана только в локальном блоке, т.е. в функции, а не в программе.
Объясните как ее описать в программе, или что нужно исправить, чтобы избаиться от ошибки? 
|
|
|

07.01.2007, 01:22
|
|
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
Провел на форуме: 3730496
Репутация:
519
|
|
Чтобы программа заработала добавь
Код:
var a: array [0..5] of integer;
перед
Код:
begin
writeln(Average(a));
...
Последний раз редактировалось Deem3n®; 07.01.2007 в 01:26..
|
|
|

07.01.2007, 01:33
|
|
Участник форума
Регистрация: 12.12.2006
Сообщений: 158
Провел на форуме: 1364740
Репутация:
114
|
|
Это правильно, но не много не то.
должен быть открытый массив
(ограничение на ввод я поставил в качестве примера)
нужно чтобы массив оставался открытым,
а программа расчитывала среднее по первому и последнему элементам..
|
|
|

07.01.2007, 01:51
|
|
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
Провел на форуме: 3730496
Репутация:
519
|
|
Ну тогда замени:
Код:
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.
Последний раз редактировалось Deem3n®; 07.01.2007 в 01:54..
|
|
|

07.01.2007, 01:59
|
|
Участник форума
Регистрация: 12.12.2006
Сообщений: 158
Провел на форуме: 1364740
Репутация:
114
|
|
Собрал
получилось следующее(по логике вроде правильно)::
Код:
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-ый раз:.{численный результат}. )
Последний раз редактировалось mR_LiNK[deface_0nl; 07.01.2007 в 02:12..
|
|
|

07.01.2007, 11:01
|
|
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
Провел на форуме: 3730496
Репутация:
519
|
|
результат выводится 2-а раза, почему?
1-ый раз это тут:
Код:
writeln('Srednaya massiva = ', Result);
2-й раз тут:
Код:
writeln(Average(p));
|
|
|

07.01.2007, 12:25
|
|
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме: 5339610
Репутация:
4360
|
|
writeln('Srednaya massiva = ', Result);
writeln(Average(p));
поэтому и два раза. Убери вывод внутри Average()
|
|
|

10.01.2007, 00:18
|
|
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме: 1892597
Репутация:
836
|
|
стоп... я конечно же извиняюсь, а разве не надо указывать длинну?
этоо? = array of integer.
SetLength(a,7)????
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
|
|
|

10.01.2007, 01:23
|
|
Участник форума
Регистрация: 12.12.2006
Сообщений: 158
Провел на форуме: 1364740
Репутация:
114
|
|
Сообщение от W!z@rD
стоп... я конечно же извиняюсь, а разве не надо указывать длинну?
этоо? = array of integer.
SetLength(a,7)????
в Delphi есть 2-а понятия массива..
стандартно, при объявлении длина задается принудительно.
также существуют и открытые массивы-параметры, которые являются массивами произвольной длины..
описывается такой массив с помощью словосочетания array of, при этом границы массива опускаются..
зы.учишь Delphi говоришь, отметься здесь::
http://forum.antichat.ru/thread30523.html
Последний раз редактировалось mR_LiNK[deface_0nl; 10.01.2007 в 01:32..
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|