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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2009, 19:56   #1
ИльяМалиновский
Пользователь
 
Регистрация: 24.01.2009
Сообщений: 30
По умолчанию неверная работа функции в Delphi

Чем может быть вызвано следующее:
при отладке компилятор доходит до вызова функции, переходит на строку begin этой функции, а далее сразу же выходит из программы?
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Math;

var
j,n,k,i: integer;
a: array[-1..600] of string;

function sum(s1,s2: string): string;

var
d,e,c: array[0..100000] of integer;
s: string;
l: integer;

begin
for i:= length(s1) downto 1 do
  d[i]:= StrToInt(copy(s1,i,1));
for i:= length(s2) downto 1 do
  e[i]:= StrToInt(copy(s2,i,1));
for i:= 1 to max(length(s1),length(s2)) do
 begin
  c[i+1]:= (c[i] + e[i] + d[i]) div 10;
  c[i]:= (c[i] + e[i] + d[i]) mod 10;
  if i=max(length(s1),length(s2)) then
   begin
    if c[i+1] <> 0 then l:= i+1 else l:= i;
   end;
 end;
for i:= l downto 1 do
 s:= s + IntToStr(c[i]);
sum:= s;
end;


begin
reset(input, 'input.txt');
rewrite(output, 'output.txt');
read(k,n);
a[0]:= '1';
for i:= 1 to n do
 begin
 a[i]:= '0';
 end;
for i:= 0 to n-1 do
 begin
  for j:= 1 to k do
   begin
    if i+j<=n then
     begin
      a[i+j]:= sum(a[i+j],a[i]);
     end;
   end;
 end;
write(a[n]);
  { TODO -oUser -cConsole Main : Insert code here }
end.
ИльяМалиновский вне форума Ответить с цитированием
Старый 30.12.2009, 21:53   #2
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Инпут и аутпут, это файлы? А их асигнуть не надо? Это что?
Altera вне форума Ответить с цитированием
Старый 31.12.2009, 12:47   #3
ИльяМалиновский
Пользователь
 
Регистрация: 24.01.2009
Сообщений: 30
По умолчанию

Нет, не надо. И так всегда работало
ИльяМалиновский вне форума Ответить с цитированием
Старый 31.12.2009, 13:04   #4
s.Creator
Форумчанин
 
Регистрация: 28.09.2008
Сообщений: 344
По умолчанию

Вероятно переполнение стека.
Локальные переменные создаются на стеке. По умолчанию в D7 его максимум $100000 (~ 1000 000 байт ), а
Код:
var
d,e,c: array[0..100000] of integer;
Каждый массив по 400 000 байт - считайте.
s.Creator вне форума Ответить с цитированием
Старый 31.12.2009, 14:40   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

используйте динамические массивы
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 31.12.2009, 15:07   #6
ИльяМалиновский
Пользователь
 
Регистрация: 24.01.2009
Сообщений: 30
По умолчанию

Спасибо всем огромное!
ИльяМалиновский вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Неверная всплывающая посказка среды Alex Cones Общие вопросы Delphi 3 17.11.2009 08:11
Проблема с загрузкой сайта (неверная кодировка) Abadd0N Работа с сетью в Delphi 4 04.06.2009 15:23
Неверная сортировка фото php-скриптом Nikolai* Помощь студентам 2 15.11.2008 08:56
C++,функции,работа со стрингами NamelessEndless Помощь студентам 3 12.11.2008 00:46
Неверная ссылка на профиль AlDelta О форуме и сайтах клуба 2 27.10.2007 21:03