Помощь - Поиск - Пользователи - Календарь
Полная версия: Почему ТП вырубается
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
rUs_LAN
 program q1;
uses crt;
const n=10;
type stack=array[1..n div 2] of integer;
var
tos,i,max:integer;
a:array[1..n] of integer;
s1,s2:stack;
procedure push(s:stack;e:integer);
begin
if tos>=max then writeln('your brein is full')
else
begin
s[tos]:=e;
tos:=tos+1;
end;
end;
begin
max:=n; tos:=1;
clrscr;
writeln('elementu masuvy');
for i:=1 to n do
begin
a[i]:=random(30);
writeln('a[',i,']= ',a[i]);
end;
writeln;
writeln;
writeln('elementu 1shogo steky');
for i:=1 to n div 2 do
begin
push(s1,a[i]);
writeln('s1[',i,']= ',s1[i]);
end;
writeln;
writeln;
tos:=6;
writeln('elementu 2gogo steky');
for i:=n downto n div 2 +1 do
begin
push(s2,a[i]);
writeln('s2[',i,']= ',s2[i]);
end;
readkey;
end.
volvo
Потому, что ты описал для стека массив 1 .. n/2, а засунуть в него пытаешься в 2 раза больше значений. Тебе во втором цикле надо не Push, а Pop...

Добавлено через 10 мин.
P.S. Компилируй программу в режиме {$R+} и ты избавишься от многих проблем...

Update Ну и накручено... Нет... Проблем на самом деле 3:
1) TOS перед вторым циклом работы со стеком надо присваивать 1, а не 6 (точно так же, как сделано перед первым циклом заполнения стека)
2) когда распечатываешь значение стека - надо пользоваться тоже TOS, а не i ...
3) ну, и наконец, S должно быть Var-параметром в Push... Иначе будут сплошные нули...
compiler
удаленно
Гость
Цитата
3) ну, и наконец, S должно быть Var-параметром в Push... Иначе будут сплошные нули..

всмислі s1,s2?
а так всьо зрозуміло дякую
compiler
Цитата(Гость @ 15.12.2007 20:05) *

всмислі s1,s2?
procedure push(var s:stack; const e:integer);
Altair
 ! 
Гость, пишите по-русски!

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.