Очно - Заочная Школа интеллектуального развития

 

   
  Главное меню

  Главная

------------------------------------------

  Положение об ОЗШ

------------------------------------------

  Олимпиада

------------------------------------------

  Библиотека

------------------------------------------

  Справочники

------------------------------------------

  Тестирование on-line

------------------------------------------

  Зачетная книжка

------------------------------------------

  Вход для

  преподавателей

------------------------------------------

 

    

 
Добро пожаловать в пользовательский раздел сайта!
 
Библиотека : Информатика : Задачи для самостоятельного решения. Тема 10 - Основы программирования. Обработка символьных величин.
 

10.7.1. Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах 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)

    КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

Решение:

***************

В соответствии с условием задачи на вход программы подается строка, содержащая 68 символов "8", т.е. строка вида

 "88888888888888888888888888888888888888888888888888888888888888888888".

При первом прохождении алгоритма три первые восьмерки будут заменены на "2", т.е. получим строку:

"288888888888888888888888888888888888888888888888888888888888888888".

При втором прохождении на двойку будут заменены восьмерки стоящие в позициях 2 - 4, соответственно получим:

"2288888888888888888888888888888888888888888888888888888888888888".

Так как строка не содержит трех подряд идущих двоек, то при третьем проходе в двойку будут преобразованы очередные три восьмерки, которые во вновь полученной строке стоят в позициях 3 - 5.

"22288888888888888888888888888888888888888888888888888888888888".

Теперь строка содержит три идущие подряд двойки, следовательно в соответствии с алгоритмом,  при четвертом прохождении три стоящие первыми двойки будут преобразованы в восьмерку. Получим строку:

"888888888888888888888888888888888888888888888888888888888888".

Таким образом можно констатировать, что за четыре повторения алгоритма из строки убирается 8 восьмерок. За восемь таких групп по четыре повторения, строка сократится на 64 восьмерки, и останется 4 восьмерки. Первые три из них будут заменены на двойку. Таким образом получим строку состоящую из двух символов 28.

 

Приведем решение данной задачи на различных языках программирования.

 

на языке BASIC

решение Андрея Борисова

на языке Python

решение Михаила Глинского

на языке Pascal

Cls

Var:

Input a$

Begin:

Let n = Len(a$)

For i = 1 To n

    If Mid$(a$, i, 3) = "222" Then

        b$ = Left$(a$, i - 1)

        c$ = Right$(a$, n - i - 2)

        a$ = b$ + "8" + c$

             GoTo Begin

    End If

    If Mid$(a$, i, 3) = "888" Then

        b$ = Left$(a$, i - 1)

        c$ = Right$(a$, n - i - 2)

        a$ = b$ + "2" + c$

             GoTo Begin

    End If

Next i

Print a$

End

s='8'*68

while('222' in s) or ('888' in s):

if ('222' in s):

s=s.replace ('222','8',1)

else:

s=s.replace ('888','2',1)

print(s)

 
 

 

***************

Ответ: 28.
 

10.7.2. Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.

А) заменить (v, w).

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды

заменить (111, 27)

преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

Б) нашлось (v).

Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка

исполнителя при этом не изменяется.

Цикл

    ПОКА условие

        последовательность команд

    КОНЕЦ ПОКА

выполняется, пока условие истинно.

В конструкции

    ЕСЛИ условие

        ТО команда1

        ИНАЧЕ команда2

    КОНЕЦ ЕСЛИ

выполняется команда1 (если условие истинно) или команда2 (если условие ложно).

Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 127 идущих подряд цифр "9"? В ответе запишите полученную строку.

НАЧАЛО

ПОКА нашлось (333) ИЛИ нашлось (999)

    ЕСЛИ нашлось (333)

        ТО заменить (333, 9)

        ИНАЧЕ заменить (999, 3)

    КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

Решение:

***************

Решение данной задачи абсолютно аналогично предыдущей задаче. За четыре итерации цикла из строки убирается 8 девяток. За 15 групп по четыре итерации, то есть за 60 повторений цикла, строка сократится на 120 девяток, и останется 7 девяток. Шесть первых будут заменены на две тройки, и останется строка 339.

Поэтому приведем только решение данной задачи на различных языках программирования.

 

на языке BASIC

решение Андрея Борисова

на языке Python

автор Владимир Юрьевич Ламок

на языке Pascal

Cls

Var:

Input a$

Begin:

Let n = Len(a$)

For i = 1 To n

    If Mid$(a$, i, 3) = "333" Then

        b$ = Left$(a$, i - 1)

        c$ = Right$(a$, n - i - 2)

        a$ = b$ + "9" + c$

             GoTo Begin

    End If

    If Mid$(a$, i, 3) = "999" Then

        b$ = Left$(a$, i - 1)

        c$ = Right$(a$, n - i - 2)

        a$ = b$ + "3" + c$

             GoTo Begin

    End If

Next i

Print a$

End

s='9'*127
while ('333' in s) or ('999' in s):
if ('333' in s):
s=s.replace('333', '9', 1)
else:
s=s.replace('999','3', 1)
print(s)

 

 
 
 

***************

Ответ: 339.
 

10.7.3. Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.

А) заменить (v, w).

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды

заменить (111, 27)

преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

Б) нашлось (v).

Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка

исполнителя при этом не изменяется.

Цикл

    ПОКА условие

        последовательность команд

    КОНЕЦ ПОКА

выполняется, пока условие истинно.

В конструкции

    ЕСЛИ условие

        ТО команда1

        ИНАЧЕ команда2

    КОНЕЦ ЕСЛИ

выполняется команда1 (если условие истинно) или команда2 (если условие ложно).

Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из цифры 1, за которой следуют 80 идущих подряд цифр 8? В ответе запишите полученную строку.

НАЧАЛО

   ПОКА нашлось (18) ИЛИ нашлось (288) ИЛИ нашлось (3888)

     ЕСЛИ нашлось (18)

          ТО заменить (18, 2)

     ИНАЧЕ ЕСЛИ нашлось (288)

                      ТО заменить (288, 3)

               ИНАЧЕ заменить (3888, 1)

               КОНЕЦ ЕСЛИ

     КОНЕЦ ЕСЛИ

   КОНЕЦ ПОКА

КОНЕЦ

Решение:

***************

По ходу работы программы строка будет меняться следующим образом:

188888888888888888888888888888888888888888888888888888888888888888888888888888888

28888888888888888888888888888888888888888888888888888888888888888888888888888888

388888888888888888888888888888888888888888888888888888888888888888888888888888

188888888888888888888888888888888888888888888888888888888888888888888888888

Таким образом за три итерации строка "схлопнется" на 6 восьмёрок.

Тогда после 13 повторений по 3 итерации, то есть после 39 итераций, строка сократится на 78  восьмёрок и она примет вид:

188.

После чего цикл отработает ещё раз и заменит 18 на 2, в итоге строка примет вид 28.

 

на языке BASIC на языке Python на языке Pascal

Cls

Var:

Input a$

Begin:

Let n = Len(a$)

For i = 1 To n

    If Left$(a$, 2) = "18" Then

        c$ = Right$(a$, n - i - 1)

        a$ = "2" + c$

             GoTo Begin

    End If

    If Left$(a$, 3) = "288" Then

        c$ = Right$(a$, n - i - 2)

        a$ = "3" + c$

            GoTo Begin

    End If

    If Left$(a$, 4) = "3888" Then

        c$ = Right$(a$, n - i - 3)

        a$ = "1" + c$

             GoTo Begin

    End If  

Next i

Print a$

End

s = '1' + '8' * 80
while '18' in s or '288' in s or '3888' in s:
    if '18' in s:
        s = s.replace('18','2',1)
    elif '288' in s:
        s = s.replace('288','3',1)
    else:
        s = s.replace('3888', '1',1)
print(s)

 

 

***************

Ответ: 28.
 

10.7.4.

Исполнитель Редактор получает на вход строку цифр и преобразовывает её. Редактор может выполнять две команды, в обеих командах v и w обозначают цепочки цифр.

А) заменить (v, w).

Эта команда заменяет в строке первое слева вхождение цепочки v на цепочку w. Например, выполнение команды

заменить (111, 27)

преобразует строку 05111150 в строку 0527150. Если в строке нет вхождений цепочки v, то выполнение команды заменить (v, w) не меняет эту строку.

Б) нашлось (v).

Эта команда проверяет, встречается ли цепочка v в строке исполнителя Редактор. Если она встречается, то команда возвращает логическое значение «истина», в противном случае возвращает значение «ложь». Строка

исполнителя при этом не изменяется.

Цикл

    ПОКА условие

        последовательность команд

    КОНЕЦ ПОКА

выполняется, пока условие истинно.

В конструкции

    ЕСЛИ условие

        ТО команда1

        ИНАЧЕ команда2

    КОНЕЦ ЕСЛИ

выполняется команда1 (если условие истинно) или команда2 (если условие ложно).

Какая строка получится в результате применения приведённой ниже программы к строке, состоящей из 125 идущих подряд цифр 8? В ответе запишите полученную строку.

НАЧАЛО

ПОКА нашлось (333) ИЛИ нашлось (888)

    ЕСЛИ нашлось (333)

        ТО заменить (333, 8)

        ИНАЧЕ заменить (888, 3)

    КОНЕЦ ЕСЛИ

КОНЕЦ ПОКА

КОНЕЦ

 

Решение:

***************

По аналогии с предыдущими задачами понимаем, что за четыре прохождения цикла строка "схлопнется" на 8 восьмерок, тогда за 15 повторений по 4 итерации цикла строка "схлопнется" на 120 восьмерок и примет вид:

     88888.

После очередного прохождения цикла три первые восьмерки будут заменены на тройку, строка примет вид:

     388

и условие , требуемое для повторения цикла исчезнет, программа прекратит работу.

 

на языке BASIC на языке Python на языке Pascal

Сls

Var:

Input a$

Begin:

Let n = Len(a$)

For i = 1 To n

    If Mid$(a$, i, 3) = "333" Then

        b$ = Left$(a$, i - 1)

        c$ = Right$(a$, n - i - 2)

        a$ = b$ + "8" + c$

            GoTo Begin

    End If

    If Mid$(a$, i, 3) = "888" Then

        b$ = Left$(a$, i - 1)

        c$ = Right$(a$, n - i - 2)

        a$ = b$ + "3" + c$

             GoTo Begin

    End If

Next i

Print a$

End

 

s='8'*125
while ('333' in s) or ('888' in s):
   if '333' in s:
       s=s.replace('333','8',1) 
   else:
       s=s.replace('888','3',1)
print(s)

 

 

 

 

***************

Ответ: 388.
 

10.7.5.

 

Решение:

***************

 

***************

Ответ: .
 

10.7.6.

 

Решение:

***************

***************

Ответ: .
 

10.7.7.

 

Решение:

***************

 

***************

Ответ: .
 

10.7.8.

 

Решение:

***************

 

***************

Ответ: .
 

10.7.9.

 

Решение:

***************

 

***************

Ответ: .
 

10.7.10.

 

Решение:

***************

***************

Ответ: .
 

10.7.11.

 

Решение:

***************

 

***************

Ответ: .
 
 

10.7.12.

Решение:

***************

Решим эту же задачу средствами языков программирования.

 

на языке BASIC на языке Python на языке Pascal

 

 

 

***************

Ответ: 1.
 

10.7.31. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Распечатать все слова с количеством символов больше четырех и меньше десяти. Если таких слов нет, то выдать соответствующее текстовое сообщение.

 
10.7.32. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Распечатать самое длинное слово, начинающееся на букву "К". Если такого слова нет, то выдать соответствующее текстовое сообщение.
 
10.7.33. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Распечатать самое длинное слово, первые две буквы которого "AB". Если такого слова нет, то выдать соответствующее текстовое сообщение.
 
10.7.34. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Распечатать самое короткое слово, оканчивающееся буквой "A". Если такого слова нет, то выдать соответствующее текстовое сообщение.
 
10.7.35. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Подсчитать количество симметричных слов в заданной строке. Если таких слов нет, то выдать соответствующее текстовое сообщение.
 
10.7.36. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Распечатать все слова четной длины.
 
10.7.37. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. распечатать все слова нечетной длины, начинающиеся и оканчивающиеся одинаковой буквой.
 
10.7.38. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Распечатать все слова четной длины в который есть удвоенная буква "О".
 
10.7.39. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Подсчитать количество слов начинающихся заданным символом.
 
10.7.40. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Распечатать все слова, в которых встречается сочетание символов "QWER". Если таких слов нет, выдать соответствующее сообщение.
 
10.7.41. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Распечатать все слова, в которых не встречается сочетание символов "XYZ". Если таких слов нет, выдать соответствующее сообщение.
 
10.7.42. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Распечатать все слова, которые начинаются символом "А", а заканчиваются символом "К". Если таких слов нет, выдать соответствующее сообщение.
 
10.7.43. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Распечатать все слова, в которых  нет символа "R". Если таких слов нет, выдать соответствующее сообщение.
 
10.7.44. Дана строка символов. Группу символов, ограниченную с одной или нескольких сторон пробелами и не содержащую внутри себя пробелов, назовем словом. Распечатать все слова, в которых  символ "R" встречается не менее двух раз. Если таких слов нет, выдать соответствующее сообщение.
 
Решение:

***************

Проанализируем таблицу и граф.

***************

Содержание
     
 

 

 

 

 

 
 

Центр компьютерного обучения МБОУ СШ №2 © 2001 - 2024 г.