
Напишите программу на c++, которая моделирует работу процессора. Процессор имеет 4 регист-ра, они
обозначаются R0, R1, R2 и R3. Все команды состоят из трех десятичных цифр: код операции, номер первого регистра и номер второго регистра (или число от 0 до 9). Коды команд и примеры их использования приведены в таблице: Код_операции Описание Пример Псевдокод1 запись константы 128 R2:=82 копирование значения 203 R3:=R03 сложение 331 R1:=R1+R34 вычитание 431 R1:=R1-R3Обратите внимание, что результат записывается во второй регистр. Команды вводятся последовательно как символьные строки. После ввода каждой строки программа показывает значения всех регистров.

Ответы на вопрос

Ответ:#include <bits/stdc++.h>
using namespace std;
int main() {
const int x = 3, y = 4;
int N[x], M[y] = { 0, 0, 0, 0 };
int r = 0;
do {
r = 0;
for (int q = 0; q < x; q++) {
N[q] = getchar() - 48;
if (N[q] == -38) q--;
if (N[q] == 0) r++;
}
switch (N[0]) {
case 1: M[N[1]] = N[2]; break;
case 2: M[N[2]] = M[N[1]]; break;
case 3: M[N[2]] = M[N[2]] + M[N[1]]; break;
case 4: M[N[2]] = M[N[2]] - M[N[1]]; break;
}
for (int e = 0; e < y; e++) {
cout << "R" << e << " = " << M[e] << "\n";
}
} while (r != x);
return 0;
}
Объяснение:



Для моделирования работы процессора с четырьмя регистрами и выполнения команд, описанных в вашем вопросе, вы можете использовать следующий код на C++:
cpp#include <iostream>
#include <string>
int main() {
int registers[4] = {0}; // Инициализация регистров R0, R1, R2 и R3
while (true) {
std::string input;
std::cout << "Введите команду (три десятичных цифры): ";
std::cin >> input;
if (input.size() != 3 || !isdigit(input[0]) || !isdigit(input[1]) || !isdigit(input[2])) {
std::cout << "Неверный формат команды. Введите команду снова." << std::endl;
continue;
}
int opcode = input[0] - '0';
int reg1 = input[1] - '0';
int reg2 = input[2] - '0';
switch (opcode) {
case 1: // Код_операции 1: запись константы
registers[reg1] = reg2;
break;
case 2: // Код_операции 2: копирование значения
registers[reg2] = registers[reg1];
break;
case 3: // Код_операции 3: сложение
registers[reg1] += registers[reg2];
break;
case 4: // Код_операции 4: вычитание
registers[reg1] -= registers[reg2];
break;
default:
std::cout << "Неизвестный код операции. Введите команду снова." << std::endl;
continue;
}
std::cout << "Регистры после выполнения команды:" << std::endl;
for (int i = 0; i < 4; ++i) {
std::cout << "R" << i << ": " << registers[i] << std::endl;
}
}
return 0;
}
Этот код создает цикл, который ожидает ввода команды от пользователя, а затем выполняет указанную команду, обновляя значения регистров и выводя их на экран после выполнения команды. Код проверяет корректность введенных данных и обрабатывает ошибочные вводы.


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili