27-11-2004, 13:42
|
|
|
|
חבר מתאריך: 07.01.03
הודעות: 101
|
|
שאלה בפסקל (מחסנית)
שלום לכולם..
טוב אז קודם כל תודה רבה לכל מי שיגיב וינסה לתקן !
אז ככה, בניתי תוכנית הבודקת רצף של סוגריים.. כלומר אם הם נפתחים ונסגרים ברצף החוקי
לדוגמא:
{a+b())}}cvs}}{ לא יתקבל
לעומת
כל רצף עם פתיחה וסגירה נכונה של כל אחד מ4 הסוגריים : { [ < (
כמובן שיניתי את המחסנית עצמה לטיפוס char
הרצתי את התוכנית שבניתי ואז הייתה לי טעות בריצה בשורה שתסומן באדום...
בבקשה תמצאו את הטעות ותסבירו לי איך אפשר לסדר את זה.. :
Program Brackets;
Uses Stack;
var
Tav:char;
I:integer;
St1,st2:stack_type;
n1:char;
n2:char;
Begin
stack_init(st1);
stack_init(st2);
Writeln('Please enter the sequence');
readln(tav);
while tav<>'1' do
begin
if (tav=']') or (tav=')') or (tav='}') or (tav='>') then
stack_push(st2,tav);
if (tav='[') or (tav='(') or (tav='{') or (tav='<') then
stack_push(st1,tav);
readln(tav);
end;
while (stack_empty(st1)=false) and (stack_empty(st2)=false) do
begin
stack_pop(st1,n1);
stack_pop(st2,n2);
if (n1='<' and n2='>') or (n1='[' and n2=']') or (n1='{' and n2='}') or (n1='(' and n2=')') then
begin
st1.top:=st1.top-1;
st2.top:=st2.top-1;
end;
end;
if (stack_empty(st1)=true) and (stack_empty(st2)=true) then
writeln('good job')
else
writeln('bad sequence');
end.
תודה רבה רבה !!!!!
|