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