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