Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2008, 23:02   #1
koir
 
Регистрация: 08.06.2008
Сообщений: 5
По умолчанию помогите. массив не взамодействует с функцией. какая-то ошибка стека.

ЗАДАНИЕ: создать функцию, которая будет заполнять нужный мне массив (одномерный массивы определенного размера). Т.е. чтобы каждый раз, при заполнении 2 и более одинаковых массивов, не писать стандартно:
for i:=1 to n do
readln(a[i]);
а использовать отдельную для этого отдельную функцию.

ВОТ МОЙ КОД:

Цитата:
uses crt;
const n=5;
var a,b,x: array [1..n] of integer; // a,b, - наши массивы, x - массивы для функции, через него заполняю нужные мне массивы.
var i,j, y: integer;

function fill_mas (x: array of integer):integer; // функция заполнения массива;
begin
for i:=1 to 5 do
begin
readln(x[i]);
end;
fill_mas:=x[n];
end;

begin
clrscr;

a[n]:=fill_mas(x[n]); // заполняем нужный нам массив a через вызов функции.


for i:=1 to n do
begin
writeln('Element ',i,' : ', a[i]); // выводим полученный массив на экран.
end;

readkey; // ждем нажатия клавишы для закрытия.
end.
!!!но появляется,
!!!ОШИБКА 202 - ПЕРЕПОЛНЕНИЕ СТЕКА.
Как исправить код так чтобы все работало.
koir вне форума Ответить с цитированием
Старый 10.06.2008, 00:37   #2
Olympian
Форумчанин
 
Аватар для Olympian
 
Регистрация: 06.06.2008
Сообщений: 105
По умолчанию

Во-первых -
x - глобальная переменная, зачем ее передавать в функцию?
Во вторых - функция возвращает конкретное число, в данном случае x[n];
И ты в массив а присваиваешь лишь одно число. Тебе просто надо в цикле скопировать массив.
Olympian вне форума Ответить с цитированием
Старый 10.06.2008, 06:18   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
function fill_mas (x: array of integer):integer;
Так объявлять параметр-массив в функциях и процедурах нельзя.
Сначала в разделе типов объявляется:
type Tmass=array [1..100] of integer;
А в функции function fill_mas (x: Tmass):integer;
Сейчас посмотрим какой результат выдает ваша функция? Она выдает одно число типа Integer, а это вообще не массив.
Кроме того, по-моему это Паскаль, а в Паскале массивов array of integer, т.е. динамических массивов нет.
И вообще для создания массива больше подходит процедура.
Вот как это примерно выглядит. Это самый примитивный вариант. В зависимости от задачи, процедуру можно еще кое-чем нагрузить.
Код:
uses crt;
type Tmass=array[1..100]of integer;//объявляем тип
var n,m,k,i:integer;
    a,b,c:Tmass;//три массива
Procedure Massiv(x:integer;var y:Tmass);//вводим в процедуру размер массива, выводим массив
begin
for i:=1 to x do
read(y[i]);
readln;
end;
begin
clrscr;
write('n=');readln(n);
Massiv(n,a);//процедура создает массив a
For i:=1 to n do
write(a[i],' ');
readln;
write('m=');readln(m);
Massiv(m,b); //процедура создает массив b
For i:=1 to m do
write(b[i],' ');
readln;
write('k=');readln(k);
Massiv(k,c);  //процедура создает массив c
For i:=1 to k do
write(c[i],' ');
readln;
end.

Последний раз редактировалось puporev; 10.06.2008 в 06:42.
puporev вне форума Ответить с цитированием
Старый 10.06.2008, 08:05   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Так объявлять параметр-массив в функциях и процедурах нельзя.
Неправда. Можно но не этично

А дело тут в том что вот тут : a[n]:=fill_mas(x[n]); в функцию передается число а надо... что???
Правильно!

Таким образом исправление будет выглядеть так: a[n]:=fill_mas(x);

P.S. Хотя должен признаться что тоже не понял задумку автора...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.06.2008, 08:12   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Поскольку в Паскале динамических массивов по умолчанию, т.е. array of integer нет по определению, то объявлять так параметр нельзя, а объявлять параметр как a:array[1..11]of integer тем более нельзя.
И вообще внесите предлагаемые вами изменения в код автора темы и посмотрите, что у Вас выйдет.
puporev вне форума Ответить с цитированием
Старый 10.06.2008, 08:32   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
объявлять так параметр нельзя
Можно. Попробуй (TP7)
Цитата:
И вообще внесите предлагаемые вами изменения в код автора темы
Внимательно читай мой предидущий пост.
I'm learning to live...

Последний раз редактировалось Stilet; 10.06.2008 в 08:34.
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с функцией 1234 Общие вопросы Delphi 5 30.08.2008 10:55
Помогите с функцией Родион Общие вопросы Delphi 3 08.05.2008 19:18
Ошибка переполнения стека из-за использования рекурсий Morrigan13 Помощь студентам 5 02.04.2008 08:04
Какая то ошибка! aesoem БД в Delphi 3 06.03.2008 18:18
помогите с функцией zetrix Microsoft Office Excel 0 31.10.2006 07:32