Старый 10.09.2003, 21:37   #1   
Форумец
 
Сообщений: 118
Регистрация: 04.05.2003
Возраст: 37

Зиалот вне форума Не в сети
Как увеличить стек в Паскале?

Вот прога... кто умный-поймет о чем она
Тык вот если в фаил вести больше 100 символов(примерно)
то будет переполнение стека...
Что можно сотворить?

Program stroka;
var i,j,ne,nb,cur,lr,sk,ifbeg,ifen,iffunc:integer;
numbeg,numen:real;
a,beg,en:string;
f:text;
pmur:array[1..4] of boolean;
fl:boolean;


Function ifskob(var b,e:integer):boolean;
begin
ifskob:=true;
cur:=b+1;
fl:=true;
lr:=0;
while (cur < e) and (fl) do
begin
if a[cur]='(' then inc(lr);
if a[cur]=')' then dec(lr);
if lr<0 then
begin
fl:=false;
ifskob:=false;
end;
inc(cur);
end;
end;


Function func(var b,e:integer):real;
var fl:boolean;
e1,b1:integer;
begin
for i:=1 to 4 do
pmur[i]:=true;
while (a[b]='(')and(a[e]=')') do
if ifskob(b,e) then
begin
inc(b);
dec(e);
end
else break;
i:=e;
fl:=true;
sk:=0;
beg:=copy(a,b,e-b+1);
val(beg,numbeg,ifbeg);
func:=numbeg;
if ifbeg>0 then
for j:=1 to 4 do
begin
pmur[j]:=false;
while (i>=b)and(fl) do
begin
if sk=0 then
begin
if (a[i]='+')and(not pmur[1]) then
begin
fl:=false;
beg:=copy(a,b,i-1);
en:=copy(a,i+1,e-i);
b1:=i+1;
e1:=e;
e:=i-1;
val(beg,numbeg,ifbeg);
val(en,numen,ifen);
if (ifbeg=0)and(ifen=0) then
func:=numbeg+numen
else
func:=func(b,e)+func(b1,e1);
end
else
if (a[i]='-')and(not pmur[2]) then
begin
fl:=false;
beg:=copy(a,b,i-1);
en:=copy(a,i+1,e-i);
b1:=i+1;
e1:=e;
e:=i-1;
val(beg,numbeg,ifbeg);
val(en,numen,ifen);
if (ifbeg=0)and(ifen=0) then
func:=numbeg-numen
else
func:=func(b,e)-func(b1,e1);
end
else
if (a[i]='*')and(not pmur[3]) then
begin
fl:=false;
beg:=copy(a,b,i-1);
en:=copy(a,i+1,e-i);
b1:=i+1;
e1:=e;
e:=i-1;
val(beg,numbeg,ifbeg);
val(en,numen,ifen);
if (ifbeg=0)and(ifen=0) then
func:=numbeg*numen
else
func:=func(b,e)*func(b1,e1);
end
else
if (a[i]='/')and(not pmur[4]) then
begin
fl:=false;
beg:=copy(a,b,i-1);
en:=copy(a,i+1,e-i);
b1:=i+1;
e1:=e;
e:=i-1;
val(beg,numbeg,ifbeg);
val(en,numen,ifen);
if (ifbeg=0)and(ifen=0) then
func:=numbeg/numen
else
func:=func(b,e)/func(b1,e1);
end
end;
if not fl then break;
if a[i]='(' then
inc(sk)
else
if a[i]=')'then
dec(sk);
dec(i);
end;
i:=e;
end;
end;


begin
assign(f,'input.txt');
reset(f);
read(f,a);
close(f);
assign(f,'output.txt');
rewrite(f);
ne:=length(a);
nb:=1;
write(f,func(nb,ne):4:2);
close(f);
end.
:super:
  Ответить с цитированием
Старый 10.09.2003, 23:50   #2   
Форумец
 
Аватар для Viaprog
 
Сообщений: 269
Регистрация: 16.03.2003
Возраст: 41

Viaprog вне форума Не в сети
{$M 655360, 0, 65536} или нечто в этом роде...... в начале проги...
  Ответить с цитированием
Старый 10.09.2003, 23:52   #3   
Форумец
 
Сообщений: 1,696
Регистрация: 24.11.2002
Возраст: 39

LSL вне форума Не в сети
Зиалот , я вижу силы приложить некуда.
Может попробуешь разработать алгоритм исскуственного интелекта для моей игры "Многоточие 2", там не так уж сложно. Будет хит !
  Ответить с цитированием
Старый 13.09.2003, 21:00   #4   
Форумец
 
Сообщений: 118
Регистрация: 04.05.2003
Возраст: 37

Зиалот вне форума Не в сети
LSL боюсь я с этим не справлюсь...я ведь еще школьник.
Можешь конечно вкратце рассказть что нужно.
А пока я пытаюсь расставить 8 ферзей на шахматной доске(задачка такая).
  Ответить с цитированием
Старый 13.09.2003, 21:35   #5   
Форумец
 
Сообщений: 1,696
Регистрация: 24.11.2002
Возраст: 39

LSL вне форума Не в сети
Зиалот
Нет, думаю всё не так сложно. Ферьзи ферьзями а лучше вещь сделать !

Эвристику составить надо сначала.

Игру "точки" я думаю ты знаешь...каждый порядочный студент, а тем более школьник должен её знать..ну та что на клеточном листке играется.

Так вот нужно сделать там компьютерного оппонента.
Ходы по очереди.

Упрощённо, алгоритм примерно такой (правила ты знаешь).

Проверить, не подвергается ли опасности захвата родная(ые) точка(и) если да то защищать иначе окружать точки врага.

Технически точки содержаться в массиве. n*m
0-пусто, 1-твоя, 2-чужая.

Саму игру смотри здесь:
http://www.u-antona.vrn.ru/forum/sho...threadid=12045
http://www.u-antona.vrn.ru/forum/sho...threadid=12808
  Ответить с цитированием
Старый 24.09.2003, 21:40   #6   
Форумец
 
Сообщений: 1,696
Регистрация: 24.11.2002
Возраст: 39

LSL вне форума Не в сети
-------------------------------------------------------------------------------
Если максимально упростить получим два алгоритма.

1) Определение опастности(окружения).
2) Окружение вражеских точек.

Вот пример:
Всё происходит в массиве:


000000000000000000000000
000000000000000000000000
000000000000000000000000
000000002222120000000000
000000001111120000000000
000000002111120000000000
000000000222200000000000
000000000000000000012100
000000000000000000001000
000000000000000000000000



Точки "2" окружают точки "1", но точка "2" в опастности, в нижнем
правом углу.

Нужно придумать и написать эти два алгоритма...
Скорей всего нужно адаптировать и использовать волновой алгоритм,
если про него ничего не слышал, могу поделиться информацией
у меня её много
  Ответить с цитированием
Старый 25.09.2003, 12:42   #7   
Форумец
 
Сообщений: 118
Регистрация: 04.05.2003
Возраст: 37

Зиалот вне форума Не в сети
LSL ну давай делись., что -то слышал...мож и использую но не знаюю его названия просто..
  Ответить с цитированием
Старый 25.09.2003, 22:11   #8   
Форумец
 
Сообщений: 1,696
Регистрация: 24.11.2002
Возраст: 39

LSL вне форума Не в сети
email какой ?
  Ответить с цитированием
Старый 26.09.2003, 12:25   #9   
Форумец
 
Сообщений: 118
Регистрация: 04.05.2003
Возраст: 37

Зиалот вне форума Не в сети
[email protected]
  Ответить с цитированием
Старый 22.10.2003, 07:44   #10   
gL2.U-_-)
 
Аватар для OveRMinD
 
Сообщений: 157
Регистрация: 18.04.2002

OveRMinD вне форума Не в сети
Зиалот на тему ферзей есть замечательная книга Вирта Алгоритмы и Структуры данных..... там алгоритм ентой задачки в деталях разобран и реализован на Модуле - 2. Очевидно, что не представляет никакого труда переписать ее на Паскаль
  Ответить с цитированием
Старый 22.10.2003, 22:01   #11   
Форумец
 
Сообщений: 1,696
Регистрация: 24.11.2002
Возраст: 39

LSL вне форума Не в сети
OveRMinD У меня на полке лежит.. Ух и муть. Зря он от паскаля отказался.
  Ответить с цитированием
Старый 23.10.2003, 11:13   #12   
Форумец
 
Аватар для fishca
 
Сообщений: 708
Регистрация: 23.12.2002
Возраст: 50
Записей в дневнике: 1

fishca вне форума Не в сети
Теория никогда не будет очень уж веселой...и не может быть мутью. Без теории никуда.
  Ответить с цитированием
Старый 23.10.2003, 18:59   #13   
Форумец
 
Сообщений: 1,696
Регистрация: 24.11.2002
Возраст: 39

LSL вне форума Не в сети
fishca Я не говорю что это плохо, я говорю что это муть
Конечно, теория нужна...
  Ответить с цитированием
Старый 23.10.2003, 20:37   #14   
gL2.U-_-)
 
Аватар для OveRMinD
 
Сообщений: 157
Регистрация: 18.04.2002

OveRMinD вне форума Не в сети
Smile

LSL да.... Вирт там понакрутил малость....но впрочем пособие достаточно полезное...
  Ответить с цитированием
Поиск в теме: 


Опции темы

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

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind