Вопрос в следующем:: Как задется открытый массив?? Пример(расчет средней элементов массива): Code: ... 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' Что вобщем-то понятно, т.к. переменная 'а' описана только в локальном блоке, т.е. в функции, а не в программе. Объясните как ее описать в программе, или что нужно исправить, чтобы избаиться от ошибки?
Чтобы программа заработала добавь Code: var a: array [0..5] of integer; перед Code: begin writeln(Average(a)); ...
Это правильно, но не много не то. должен быть открытый массив (ограничение на ввод я поставил в качестве примера) нужно чтобы массив оставался открытым, а программа расчитывала среднее по первому и последнему элементам..
Ну тогда замени: Code: function Average(a: array of integer): real; на Code: function Average([color=red]var[/color] a: array of integer): real; и вообще убери Code: for i := 0 to 5 do readln(a[i]); или замени на Code: for i := Low(a) to High(a) do readln(a[i]); если тебе в этой ф-ции надо вводить данные (странно, почему в ф-ции расчета средней элементов массива нужно вводить данные?) Потом можешь экспериментировать : Code: var p: array [1..10] of integer; begin writeln(Average(p)); writeln('Third element is ',p[3]); writeln('Press Enter to exit...'); readln; end.
Собрал получилось следующее(по логике вроде правильно):: Code: 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-ый раз:.{численный результат}. )
1-ый раз это тут: Code: writeln('Srednaya massiva = ', Result); 2-й раз тут: Code: writeln(Average(p));
writeln('Srednaya massiva = ', Result); writeln(Average(p)); поэтому и два раза. Убери вывод внутри Average()
стоп... я конечно же извиняюсь, а разве не надо указывать длинну? этоо? = array of integer. SetLength(a,7)????
в Delphi есть 2-а понятия массива.. стандартно, при объявлении длина задается принудительно. также существуют и открытые массивы-параметры, которые являются массивами произвольной длины.. описывается такой массив с помощью словосочетания array of, при этом границы массива опускаются.. зы.учишь Delphi говоришь, отметься здесь:: /thread30523.html