Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
Как увеличить стек в Паскале? |
Философия, технологии, алгоритмы! |
|
Опции темы |
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: |
13.09.2003, 21:35 | #5 |
Форумец
Сообщений: 1,696
Регистрация: 24.11.2002
Возраст: 39
Не в сети |
Зиалот
Нет, думаю всё не так сложно. Ферьзи ферьзями а лучше вещь сделать ! Эвристику составить надо сначала. Игру "точки" я думаю ты знаешь...каждый порядочный студент, а тем более школьник должен её знать..ну та что на клеточном листке играется. Так вот нужно сделать там компьютерного оппонента. Ходы по очереди. Упрощённо, алгоритм примерно такой (правила ты знаешь). Проверить, не подвергается ли опасности захвата родная(ые) точка(и) если да то защищать иначе окружать точки врага. Технически точки содержаться в массиве. 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
Не в сети |
-------------------------------------------------------------------------------
Если максимально упростить получим два алгоритма. 1) Определение опастности(окружения). 2) Окружение вражеских точек. Вот пример: Всё происходит в массиве: 000000000000000000000000 000000000000000000000000 000000000000000000000000 000000002222120000000000 000000001111120000000000 000000002111120000000000 000000000222200000000000 000000000000000000012100 000000000000000000001000 000000000000000000000000 Точки "2" окружают точки "1", но точка "2" в опастности, в нижнем правом углу. Нужно придумать и написать эти два алгоритма... Скорей всего нужно адаптировать и использовать волновой алгоритм, если про него ничего не слышал, могу поделиться информацией у меня её много |
26.09.2003, 12:25 | #9 |
Форумец
Сообщений: 118
Регистрация: 04.05.2003
Возраст: 37
Не в сети |
|
22.10.2003, 07:44 | #10 |
gL2.U-_-)
Сообщений: 157
Регистрация: 18.04.2002
Не в сети |
Зиалот на тему ферзей есть замечательная книга Вирта Алгоритмы и Структуры данных..... там алгоритм ентой задачки в деталях разобран и реализован на Модуле - 2. Очевидно, что не представляет никакого труда переписать ее на Паскаль
|