1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
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.
Потому, что ты описал для стека массив 1 .. n/2, а засунуть в него пытаешься в 2 раза больше значений. Тебе во втором цикле надо не Push, а Pop...
Добавлено через 10 мин. P.S. Компилируй программу в режиме {$R+} и ты избавишься от многих проблем...
Update Ну и накручено... Нет... Проблем на самом деле 3: 1) TOS перед вторым циклом работы со стеком надо присваивать 1, а не 6 (точно так же, как сделано перед первым циклом заполнения стека) 2) когда распечатываешь значение стека - надо пользоваться тоже TOS, а не i ... 3) ну, и наконец, S должно быть Var-параметром в Push... Иначе будут сплошные нули...