ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Вопросы по синтаксису Delphi
  #1  
Старый 07.01.2007, 01:08
Аватар для mR_LiNK[deface_0nl
mR_LiNK[deface_0nl
Участник форума
Регистрация: 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'
Что вобщем-то понятно, т.к. переменная 'а' описана только в локальном блоке, т.е. в функции, а не в программе.

Объясните как ее описать в программе, или что нужно исправить, чтобы избаиться от ошибки?
 
Ответить с цитированием

  #2  
Старый 07.01.2007, 01:22
Аватар для Deem3n®
Deem3n®
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
Провел на форуме:
3730496

Репутация: 519
По умолчанию

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

Последний раз редактировалось Deem3n®; 07.01.2007 в 01:26..
 
Ответить с цитированием

  #3  
Старый 07.01.2007, 01:33
Аватар для mR_LiNK[deface_0nl
mR_LiNK[deface_0nl
Участник форума
Регистрация: 12.12.2006
Сообщений: 158
Провел на форуме:
1364740

Репутация: 114
По умолчанию

Это правильно, но не много не то.

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

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

  #4  
Старый 07.01.2007, 01:51
Аватар для Deem3n®
Deem3n®
Постоянный
Регистрация: 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..
 
Ответить с цитированием

  #5  
Старый 07.01.2007, 01:59
Аватар для mR_LiNK[deface_0nl
mR_LiNK[deface_0nl
Участник форума
Регистрация: 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..
 
Ответить с цитированием

  #6  
Старый 07.01.2007, 11:01
Аватар для Deem3n®
Deem3n®
Постоянный
Регистрация: 19.09.2005
Сообщений: 408
Провел на форуме:
3730496

Репутация: 519
По умолчанию

Цитата:
результат выводится 2-а раза, почему?
1-ый раз это тут:
Код:
writeln('Srednaya massiva = ', Result);
2-й раз тут:
Код:
writeln(Average(p));
 
Ответить с цитированием

  #7  
Старый 07.01.2007, 12:25
Аватар для _Great_
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
Провел на форуме:
5339610

Репутация: 4360


Отправить сообщение для _Great_ с помощью ICQ
По умолчанию

writeln('Srednaya massiva = ', Result);
writeln(Average(p));

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

  #8  
Старый 10.01.2007, 00:18
Аватар для W!z@rD
W!z@rD
Reservists Of Antichat - Level 6
Регистрация: 12.02.2006
Сообщений: 891
Провел на форуме:
1892597

Репутация: 836


Отправить сообщение для W!z@rD с помощью ICQ
По умолчанию

стоп... я конечно же извиняюсь, а разве не надо указывать длинну?
этоо? = array of integer.
SetLength(a,7)????
__________________
*********************************
*Я не волшебник ٩(๏̯͡๏)۶, только учусь...*
*********************************
Программы на заказ
Times to fly...
 
Ответить с цитированием

  #9  
Старый 10.01.2007, 01:23
Аватар для mR_LiNK[deface_0nl
mR_LiNK[deface_0nl
Участник форума
Регистрация: 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..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Форумы 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ