fork(2) download
  1. Program bf5_stack;
  2.  
  3. LABEL prev,next;
  4. var
  5. a : array[1..10] of integer;
  6. size : integer;
  7. data_arr:array[1..10] of integer; // массив данных
  8. str_arr: string; // команды
  9. i,j,k: integer; // индексы строки и массива
  10. i_stor: integer;
  11.  
  12. //Stack
  13. procedure push(c : integer);
  14. begin
  15. a[size+1] := c;
  16. size := size + 1;
  17. end;
  18.  
  19. procedure pop;
  20. begin
  21. size := size - 1;
  22. end;
  23. {---------------------------------------------------}
  24. begin
  25. j:=1; // нумерация элементов массива начинается с единицы
  26. i:=1;
  27. size := 0; {Изначально стек пуст}
  28. //readln(str_arr); //считываем строку
  29. //str_arr:='+++[>+++[>+<-]<-]'; // 3*3=9
  30. str_arr:='+++[> +++[>+++[>+<-]<-] <-]'; // 3^3=27
  31.  
  32. prev:
  33. if i>length(str_arr) then goto next;
  34. if (str_arr[i]='+') then data_arr[j]:= data_arr[j]+1;
  35. if (str_arr[i]='-') then data_arr[j]:= data_arr[j]-1;
  36. if (str_arr[i]='>') then j:=j+1;
  37. if (str_arr[i]='<') then j:=j-1;
  38. if (str_arr[i]='.') then write(chr(data_arr[j]));
  39. // скобки
  40. if (str_arr[i]='[') then Push(i);
  41.  
  42. if (str_arr[i]=']') then
  43. begin
  44. Pop();
  45. if (data_arr[j]>0) then
  46. begin
  47. i := a[size+1];
  48. goto prev;
  49. end;
  50. end;
  51. i:=i+1;
  52. goto prev;
  53. next:
  54. for k:=1 to 10 do begin
  55. write(data_arr[k]);
  56. write(' ');
  57. end;
  58. end.
Success #stdin #stdout 0s 9128KB
stdin
Standard input is empty
stdout
0 0 0 27 0 0 0 0 0 0