1. На ленте записано слово в алфавите {, , }. Реализовать машину Тьюринга, которая проверяет, что входное слово содержит каждый из символов алфавита, и при этом хотя бы один из символов встречается в слове два раза подряд. В случае положительного ответа выводится символ , в противном
случае – символ .
2. На ленте записано два -разрядных слова в алфавите {0, 1}, разделённых символом *. Реализовать машину Тьюринга, которая считает количество
единиц в их побитовой дизъюнкции (десятичное число) и выводит это число в
качестве ответа.
Нужны просто алгоритмы с идеей и комментарием
Відповідь:
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
void randarr(int *A,int N){
for(int i = 0; i < N; i++){
A[i] = rand() % 20 + 1;
}
}
void printarr(int *A,int N){
for(int i = 0; i < N; i++){
cout << A[i] << " ";
}
}
int expression(int *A,int N){
int sum = 0;
for(int i = 0; i < N; i++){
if(i % 2 == 0){
if(A[i] % 2 == 0){
sum += A[i];
}
}
}
return sum;
}
int main(){
srand(time(NULL));
setlocale(LC_ALL , "Ukrainian");
int N;
cout << "Введiть кiлькiсть елементiв масиву: ";
cin >> N;
int A[N];
randarr(A,N);
printarr(A,N);
cout << "\nСума всiх парних елементiв з парними iндексами = " << expression(A,N);
return 0;
}
Объяснение:
Начало;
Ввод X, Y (они у нас уже есть в табл. 1 и 2 (к примеру, в 1 табл. X=9, Y=14));
X=Y (у нас X=9, Y=14; 9 не равна 14, а это значит мы идём по стрелочке "нет");
X>Y (9 не больше 14, идём по стрелочке "нет");
Y=Y-X (подставляем в формулу наши X, Y из табл. 1 и получаем Y=14-9=5);
Теперь переходим на новую строчку табл. 1. X остаётся прежним (9), а в Y пишем тот, что мы нашли (5). Начинаем всё заново.
X=Y (9 не равна 5, идём по стрелочке "нет");
X>Y (9 больше 5, а это значит мы идём по стрелочке "да");
X=X-Y (подставляем в формулу наши X, Y. Это уже будет X=9-5=4)
Теперь переходим на новую строчку табл. 1. X теперь 4, а Y остаётся прежним (5). Начинаем всё заново.
Так проделываем каждый раз пока X не станет равно Y (в 1 табл. это 1=1).