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. char command_mem[100] = "^>-{^?}<^!."; // максимум
  8. int data_mem[10]={0};
  9. data_mem[0]=3; //инициализируем начальные значения
  10. data_mem[1]=5;
  11.  
  12. while ( command_mem[i] != '\0') {
  13. if(command_mem[i]==',') // считываем число в аккумулятор
  14. scanf("%d", &acc);
  15. if(command_mem[i]=='+') // прибавляем число из data_mem
  16. acc=acc+data_mem[j]; // к аккумулятору
  17. if(command_mem[i]=='-') // вычитаем число data_mem
  18. acc=acc-data_mem[j]; // из аккумулятора
  19. if(command_mem[i]=='>') // переход на следующий элемент данных
  20. j++;
  21. if(command_mem[i]=='<') //переход на предыдущий элемент данных
  22. j--;
  23. if(command_mem[i]=='~') // загружаем число из аккумулятора
  24. data_mem[j]=acc; // в память данных
  25. if(command_mem[i]=='^') // загружаем число из data_mem
  26. acc=data_mem[j]; // в аккумулятор
  27. if(command_mem[i]=='.') { // выводим число из аккумулятора на экран
  28. printf("Output: %d",acc);
  29. printf(" ");
  30. };
  31. if(command_mem[i]=='?') { // прыжок на метку !
  32. while(command_mem[i] != '!')
  33. i++;
  34. }
  35. if (command_mem[i]=='{' && pzflag==1) { // прыжок по условию acc>=0
  36. while(command_mem[i] != '}')
  37. i++;
  38. }
  39. if(acc>=0){ // Поднимаем флаг, если acc>=0
  40. pzflag=1; }
  41. else {
  42. pzflag=0; }
  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. }
Success #stdin #stdout 0s 9424KB
stdin
Standard input is empty
stdout
Output: 5 
3 5 0 0 0 0 0 0 0 0