Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w). Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды заменить (111, 27) преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v). Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл:
ПОКА условие последовательность команд КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции Если:
ЕСЛИ условие ТО команда1 ИНАЧЕ команда2 КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Конкретизация условия для одной из задач этого типа:
ЕГЭ Информатика 2020 ФИПИ Задача 14
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 68 идущих подряд цифр 8? В ответе запишите полученную строку.
НАЧАЛО ПОКА нашлось (222) ИЛИ нашлось (888) ЕСЛИ нашлось (222) ТО заменить (222, 8) ИНАЧЕ заменить (888, 2) КОНЕЦ ЕСЛИ КОНЕЦ ПОКА КОНЕЦ
Решение
Несмотря на очевидную простоту, задача не решается тупым перебором за разумное время. Очевидно только, что в конкретном примере длина строки будет уменьшаться и поиск этой закономерности и был заложен авторами в суть этой задачи.
Однако, наличие возможности реализовать Исполнитель в виде программы меняет способ ее решения. Нужно просто написать программу. Единственное, что требуется кроме общих навыков программирования в этом случае, это опыт работы со строками. Тогда могут быть использованы такие программы (Бейсик, Паскаль, С++, С#):
C# (Visual Studio 2019>
// 12 тема. Исполнитель Редактор Общее решение (менять константы только!) using System; namespace ConsoleApp7 < class Program < const int N = 68; // длина строки const string c = «8»; // из какой цифры состоит строка const string sts1 = «222»; // подстрока для 1 поиска const string sts2 = «888»; // подстрока для 1 поиска const string stc1 = «8»; // на что заменяется 1 подстрока const string stc2 = «2»; // на что заменяется 1 подстрока static string s; //исходная строка из N символов //В строке s замена sts на stc static void Change(string sts, string stc) //в строке s замена sts на stc < int k = s.IndexOf(sts); s = s.Remove(k, 3); s = s.Insert(k, stc); >// Поиск s1 в строке s static bool Search(string s1) < string s2; int k; bool result = false; k = s.IndexOf(s1); if ((s.Length >2) (k >= 0)) < s2 = s.Substring(k, 3); if (s2.Equals(s1)) result = true; >return result; > // программа static void Main() < // строка из N одинаковых цифр s = c; for (int i = 1; i < N; i++) s += c; // вывод исходной строки Console.WriteLine(s); // цикл Редактора while (Search(sts1) || Search(sts2)) < if (Search(sts1)) // условие Change(sts1, stc1); else Change(sts2, stc2); >// вывод результата Console.WriteLine(s); > > >
Результат:
Информатика ЕГЭ. № 12. Выполнение алгоритмов для исполнителей. Исполнитель редактор. № 9365
888888888888888888888888888888888888888888888888888888888888
28
C++ (Visual Studio 2019>
// 12 тема. Исполнитель Редактор. Общее решение. Только менять константы! #include using namespace std; const int N = 68; // длина строки const string c = «8»; // из какой цифры состоит строка const string sts1 = «222»; // подстрока для 1 поиска const string sts2 = «888»; // подстрока для 1 поиска const string stc1 = «8»; // на что заменяется 1 подстрока const string stc2 = «2»; // на что заменяется 1 подстрока static string s; //исходная строка из N символов //В строке s замена sts на stc static void Change(string sts, string stc) //в строке s замена sts на stc < int k = s.find(sts); s = s.erase(k, 3); s = s.insert(k, stc); >// Поиск s1 в строке s static bool Search(string s1) < string s2; int k; bool result = false; k = s.find(s1); if ((s.size() >2) (k >= 0)) < s2 = s.substr(k, 3); if (s2 == s1) result = true; >return result; > // программа int main() < // строка из N одинаковых цифр s = c; for (int i = 1; i < N; i++) s += c; // вывод исходной строки cout // вывод результата cout
Паскаль (Pascal ABC)
// 12 тема. Исполнитель Редактор Общее решение (менять константы только!) const N=68; // длина строки c=’8′; // из какой цифры состоит строка sts1=’222′; // подстрока для 1 поиска sts2=’888′; // подстрока для 1 поиска stc1=’8′; // на что заменяется 1 подстрока stc2=’2′; // на что заменяется 1 подстрока var s: string; //исходная строка из N символов procedure Change(sts:string; stc:string); //в строке s замена sts на stc var k: integer; begin k:=s.IndexOf(sts); s:=s.Remove(k,3); s:=s.Insert(k,stc); end; function Search(s1: string): boolean; // поиск s1 в строке s var s2: string; k:integer; begin result:=false; k:=s.IndexOf(s1); if (s.Length>2) and (k >= 0) then begin s2:=s.Substring(k,3); if s2=s1 then result:=true; end; end; // программа begin // строка из N одинаковых цифр s:=c; for i: integer :=2 to N do s:=s+c; writeln(s); // вывод // цикл while search(sts1) or search(sts2) do begin if search(sts1) // условие then Change(sts1, stc1) else Change(sts2, stc2); end; // вывод результата writeln(s); end.
Бейсик (Visual Studio 2019>
12 тема. Исполнитель Редактор Общее решение (менять константы только!) Module Module1 Dim N As Integer = 60 ‘ длина строки Dim c, sts1, sts2, stc1, stc2, s As String ‘ В строке s замена sts на stc Sub Change(sts As String, stc As String) ‘ в строке s замена sts на stc Dim k As Integer k = s.IndexOf(sts) s = s.Remove(k, 3) s = s.Insert(k, stc) End Sub ‘ Поиск s1 в строке s Function Search(s1 As String) As Boolean Dim s2 As String Dim k As Integer Dim result As Boolean result = False k = s.IndexOf(s1) If s.Length > 2 And k >= 0 Then s2 = s.Substring(k, 3) If (s2.Equals(s1)) Then result = True End If End If Search = result End Function ‘ Основная программа Sub Main() c = «8» ‘ из какой цифры состоит строка sts1 = «222» ‘ подстрока для 1 поиска sts2 = «888» ‘ подстрока для 1 поиска stc1 = «8» ‘ на что заменяется 1 подстрока stc2 = «2» ‘ на что заменяется 1 подстрока ‘ строка из N одинаковых цифр s = c For i As Integer = 2 To N s = s + c Next i ‘ вывод исходной строки Console.WriteLine(s) ‘ цикл Редактора While Search(sts1) Or Search(sts2) If Search(sts1) Then Change(sts1, stc1) Else Change(sts2, stc2) End If End While ‘ вывод результата Console.WriteLine(s) Console.ReadKey() End Sub End Module
Ответ тот же.
Замечание. В VB оператор Print s не поддерживается, заменен на Console.WriteLine(s).
NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.
Источник: c-sharp.pro
Разбор 14 задания ЕГЭ 2016 по информатике из демоверсии
Разбор 14 задания ЕГЭ 2016 года по информатике из демоверсии. Это задание на умение исполнить алгоритм для конкретного исполнителя с фиксированным набором команд (уметь интерпретировать результаты, получаемые в ходе моделирования реальных процессов). Это задание повышенного уровня сложности. Примерное время выполнения задания 6 минут.
Задание 14:
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
Если в строке нет вхождений цепочки v, то выполнение команды заменить (v,w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
Цикл
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ условие
ТО команда1
ИНАЧЕ команда2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 68 идущих подряд цифр 8? В ответе запишите полученную строку.
НАЧАЛО
ПОКА нашлось (222) ИЛИ нашлось (888)
ЕСЛИ нашлось (222)
ТО заменить (222, 8)
ИНАЧЕ заменить (888, 2)
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
КОНЕЦ
Разбор 14 задания ЕГЭ 2016:
Программа работает до тех пор, пока в строке есть цепочка цифр 222 или цепочка цифр 888.
Если встречается 222, то заменяем 8.
Если в строке нет цепочки 222, но встречается цепочка 888, то заменяем ее на 2.
В нашей строке 68 идущих подряд цифр 8.
1) меняем первые 888 на 2 и получаем
2 и (65 цифр 8)
2) меняем следующие 888 на 2 и получаем
22 и (62 цифр 8)
3) меняем следующие 888 на 2 и получаем
222 и (59 цифр 8)
4) теперь у нас появилась цепочка 222, поэтому мы должны заменить ее на 8
получаем (60 цифр 8)
Получилось следующее, за 4 шага мы заменили 9 восьмерок на 1 (или удалили 8 восьмерок). Становится понятно, что за каждые 4 шага мы будем удалять по 8 восьмерок.
60-8=52
52-8=44
44-8=36
36-8=28
28-8=20
20-8=12
12-8=4 (останется цепочка 8888)
На последнем шаге заменяем первые 3 восьмерки на 2 и получаем 28.
Ответ: 28
Источник: infedu.ru
Е12.16 ниже программы к строке, состоящей из 68 идущих подряд цифр 8?
ниже программы к строке, состоящей из 68 идущих подряд цифр 8?
Демонстрационный вариант ЕГЭ 2016 г. – задание №14
Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка исполнителя при этом не изменяется.
ПОКА условие
последовательность команд
КОНЕЦ ПОКА
выполняется, пока условие истинно.
ЕСЛИ условие
ТО команда 1
ИНАЧЕ команда 2
КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие ложно).
Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 68 идущих подряд цифр 8? В ответе запишите полученную строку.
ПОКА нашлось ( 222 ) ИЛИ нашлось ( 888 )
ЕСЛИ нашлось ( 222 )
ТО заменить ( 222 , 8 )
ИНАЧЕ заменить ( 888 , 2 )
КОНЕЦ ЕСЛИ
КОНЕЦ ПОКА
Решение:
Программа будет работать до тех пор, пока в строке есть цепочка цифр 222 или цепочка цифр 888.
Если в строке встречается 222, то заменяем на 8.
Если в строке нет цепочки 222, но встречается цепочка 888, то заменяем ее на 2.
Наша строка состоит из 68 идущих подряд цифр 8.
1) меняем первые 888 на 2 и получаем
2 и (65 цифр 8)
2) меняем следующие 888 на 2 и получаем
22 и (62 цифр 8)
3) меняем следующие 888 на 2 и получаем
222 и ( 59 цифр 8)
4) теперь у нас появилась цепочка 222, поэтому мы должны заменить ее на 8.
получаем строку состоящую из 60 цифр 8
Анализируем что произошло!
А получилось следующее, за 4 шага мы заменили 9 восьмерок на 1 (или удалили 8 восьмерок из нашей строки).
Становится понятно, что за каждые 4 шага мы будем удалять по 8 восьмерок.
12-8=4 останется строка состоящая из 4 идущих подряд 8 (8888).Так как 888 заменяется на 2, то в итоге мы получаем 28.
Ответ: 28
Источник: informatikaexpert.ru