fork(1) download
  1. #include <stdio.h>
  2. int main(void) {
  3. int i=0; // индекс текущей команды
  4. int j=0; // индекс массива данных
  5. int acc = 0;
  6. int pzflag = 1; // Флаг acc>=0
  7. int pz_prev=0; // прыжок назад по условию acc>=0
  8.  
  9. char command_mem[100] = "}>>>^<+>~<<< ^>-<~{>>>^.";
  10. int data_mem[10]={0};
  11. data_mem[0]=4;
  12. data_mem[1]=1;
  13. data_mem[2]=5;
  14.  
  15. while ( command_mem[i] != '\0') {
  16. if(command_mem[i]==',') // считываем число в аккумулятор
  17. scanf("%d", &acc);
  18. if(command_mem[i]=='+') // прибавляем число из data_mem
  19. acc=acc+data_mem[j]; // к аккумулятору
  20. if(command_mem[i]=='-') // вычитаем число data_mem
  21. acc=acc-data_mem[j]; // из аккумулятора
  22. if(command_mem[i]=='>') // переход на следующий элемент данных
  23. j++;
  24. if(command_mem[i]=='<') // переход на предыдущий элемент данных
  25. j--;
  26. if(command_mem[i]=='~') // загружаем число из аккумулятора
  27. data_mem[j]=acc; // в память данных
  28. if(command_mem[i]=='^') // загружаем число из data_mem
  29. acc=data_mem[j]; // в аккумулятор
  30. if(command_mem[i]=='.') { // выводим число из аккумулятора на экран
  31. printf("Output: %d",acc);
  32. printf(" ");
  33. };
  34. if (command_mem[i]=='}') // прыгаем назад?
  35. pz_prev=1;
  36.  
  37. if(command_mem[i]=='?') { // прыжок на метку !
  38. while(command_mem[i] != '!')
  39. i++;
  40. }
  41. if (command_mem[i]=='{' && pzflag==1 && pz_prev==0) { // прыжок вперёд
  42. while(command_mem[i] != '}') // по условию acc>=0
  43. i++;
  44. }
  45. if (command_mem[i]=='{' && pzflag==1 && pz_prev==1) { // прыжок назад
  46. while(command_mem[i] != '}') // по условию acc>=0
  47. i--;
  48. }
  49. if(acc>=0){ // Поднимаем флаг, если acc>=0
  50. pzflag=1;}
  51. else {
  52. pzflag=0;}
  53.  
  54. //printf("i=%d",i);printf(" ");
  55. i++; //увеличиваем индекс текущей команды
  56. }
  57. //переход на новую строку
  58. printf("\n");
  59. // выводим массив данных
  60. for (int k = 0; k<10; k++)
  61. printf("%d ", data_mem[k]);
  62. return 0;
  63. }
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
Output: 25 
-1 1 5 25 0 0 0 0 0 0