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
15.12.2007 23:35
Потому, что ты описал для стека массив 1 .. n/2, а засунуть в него пытаешься в 2 раза больше значений. Тебе во втором цикле надо не Push, а Pop...
Добавлено через 10 мин. P.S. Компилируй программу в режиме {$R+} и ты избавишься от многих проблем...
Update Ну и накручено... Нет... Проблем на самом деле 3: 1) TOS перед вторым циклом работы со стеком надо присваивать 1, а не 6 (точно так же, как сделано перед первым циклом заполнения стека) 2) когда распечатываешь значение стека - надо пользоваться тоже TOS, а не i ... 3) ну, и наконец, S должно быть Var-параметром в Push... Иначе будут сплошные нули...
compiler
15.12.2007 23:46
удаленно
Гость
16.12.2007 1:05
Цитата
3) ну, и наконец, S должно быть Var-параметром в Push... Иначе будут сплошные нули..
всмислі s1,s2? а так всьо зрозуміло дякую
compiler
16.12.2007 1:58
Цитата(Гость @ 15.12.2007 20:05)
всмислі s1,s2?
procedure push(var s:stack; const e:integer);
Altair
16.12.2007 3:42
!
Гость, пишите по-русски!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.