Дмитрий Усенков - Занимательное программирование – игры с текстом

Тут можно читать онлайн Дмитрий Усенков - Занимательное программирование – игры с текстом - бесплатно ознакомительный отрывок. Жанр: Прочая научная литература, год 2020. Здесь Вы можете читать ознакомительный отрывок из книги онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.

Дмитрий Усенков - Занимательное программирование – игры с текстом краткое содержание

Занимательное программирование – игры с текстом - описание и краткое содержание, автор Дмитрий Усенков, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru
В пособии рассмотрены алгоритмы обработки текстовой информации (отдельных символов, слов и строк) средствами языка программирования Паскаль. В том числе рассмотрены принципы использования для обработки текстовых строк такого редко используемого типа данных как множества. Для школьников, учителей информатики и всех, самостоятельно изучающих программирование.

Занимательное программирование – игры с текстом - читать онлайн бесплатно ознакомительный отрывок

Занимательное программирование – игры с текстом - читать книгу онлайн бесплатно (ознакомительный отрывок), автор Дмитрий Усенков
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Например, если мы определили строковую переменную оператором

var stroka : string[10];

и записали в нее строку 'Привет!', то оператор

writeln(stroka[1]);

выведет на экран символ 'П', а оператор

writeln(stroka[7]);

выведет символ восклицательного знака.

Соответственно, одномерный массив строк можно аналогичным образом рассматривать как двумерный массив символов, двумерный массив строк – как трехмерный массив символов и т.д.

Эта замечательная возможность делает ненужным использование функций извлечения символа из строки (типа MID$( <���имя строки> , <���позиция символа> ,1)в Бейсике), поскольку для получения нужного символа достаточно просто обратиться к нему напрямую. Насколько это упрощает решение некоторых задач на работу со строками, мы увидим, когда перейдем к решению таких задач.

И наконец, завершая теоретический экскурс в символьные и строковые типы данных, перечислим некоторые имеющиеся в Паскале стандартные функции и процедуры для работы с символами и строками (информацию о них обычно можно найти в Help’е к используемой системе программирования, мы же будем рассматривать популярную в школьной практике среду программирования Pascal ABC.Net).

Занимательное программирование игры с текстом - фото 2 При использовании этих функций и про - фото 3 При использовании этих функций и процедур необходимо помнить следующее - фото 4 При использовании этих функций и процедур необходимо помнить следующее - фото 5 При использовании этих функций и процедур необходимо помнить следующее - фото 6 При использовании этих функций и процедур необходимо помнить следующее - фото 7

При использовании этих функций и процедур необходимо помнить следующее:

– функции возвращают некоторое значение, которое нужно куда-то записать или как-то использовать, поэтому функцию надо записывать или в операторе присваивания (например: d := Length(s);), или, скажем, в операторе вывода на экран ( writeln(Length(s)););

– процедуры, в отличие от функций, сами по себе не возвращают значений, а изменяют значение некоторых заданных в них параметров (аргументов), поэтому в составе оператора присваивания или вывода на экран их записывать нельзя. Процедура записывается отдельным оператором, например: Delete(stroka,5,1);– правильная запись (из строки stroka удаляется один символ, стоящий в 5-й позиции), а stroka1 := Delete(stroka,5,1);– неправильная запись.

А теперь перейдем, наконец, к решению задач.

Задача 1

Дана строка символов. Удалить из нее первый знак препинания.

Наиболее простое решение: определить длину введенной строки, реализовать цикл перебора всех ее символов (с 1-го до последнего, имеющего номер, равный значению длины), каждый очередной символ сравнивать с каждым из возможных символов – знаков препинания («.», «,», «;», «!» и т.д.) и при выполнении этого условия каким-то способом убрать его из строки, а затем – прервать цикл просмотра символов.

Реализуем эту идею на Паскале:

Проанализируем этот листинг 1 Вводится строка и определяется ее длина dl при - фото 8

Проанализируем этот листинг.

1. Вводится строка и определяется ее длина dl (при помощи стандартной функции Lenght).

2. Переменная k , которая у нас одновременно будет служить для запоминания позиции найденного первого знака препинания и играть роль «флага», обнуляется.

3. Строится цикл forперебора значения переменной i от 1 до значения длины строки dl .

4. В теле цикла мы должны извлечь очередной (записанный в позиции i ) символ строки. И вот здесь проявляется удобство «дуализма» обращения к строкам в языке Паскаль: вместо того, чтобы, как в Бейсике, записывать каждый раз функцию, извлекающую нужный символ как подстроку (в Бейсике: MID$(ST$,I,1), в Паскале – Copy(st,i,1)), мы можем просто обратиться сразу к требуемому символу как к элементу массива st с индексом i : st[i].

5. Очередной символ ( st[i]) нужно сравнивать с каждым из возможных символов – знаков препинания, записывая операции сравнения типа st[i] = '.'через логическую связку orв операторе if. Тогда в ветви then(т.е. если очередной символ строки равен хотя бы одному знаку препинания) мы запоминаем его номер позиции ( i ) в переменной k и прерываем цикл оператором break.

6. После завершения цикла – досрочного по breakили «штатного», когда завершен перебор всех символов строки, а знак препинания в ней не найден, нам надо разделить эти два случая. Для этого мы используем «флаговую» функцию переменной k :

– если k не равно нулю, значит, знак препинания найден и его номер позиции в строке записан в k , – тогда мы выполняем операцию «удаления» этого k -го символа из строки (п. 7);

– иначе, если k = 0, это означает, что знак препинания найден не был, цикл завершился сам по себе, а значение k сохранилось исходное, которое мы присвоили этой переменной еще до цикла, – тогда мы просто должны вывести сообщение, что знаков препинания в строке нет.

7. Чтобы «удалить» найденный знак препинания, сделаем следующее. Оставляя исходную строку неизменной, будем формировать из нее новую строку. Сначала запишем в нее все символы исходной строки с первого до k -го (не включая его), а затем допишем (конкатенируем) к ней символы из правой части исходной строки от k -го (опять же не включая его) до последнего. Первую часть строки (слева от знака препинания) можно получить, используя функцию LeftStr(st, k-1), а вторую (правую) – используя функцию RightStr(st, dl-k). При этом вычисление количеств извлекаемых символов достаточно очевидно, если представить строку наглядно, как на рис. 2.

Решение достаточно простое Но запись условного оператора получается довольно - фото 9

Решение достаточно простое. Но запись условного оператора получается довольно громоздкой: ведь в нем надо перебрать (через or) все возможные случаи равенства очередного символа какому-нибудь знаку препинания. Кроме того, подумайте, что было бы, если бы таких сравнений требовалось несколько в разных местах программы и вдруг выяснилось бы, что надо изменить (скажем, дополнить знаком двоеточия) перечень обрабатываемых знаков препинания? Пришлось бы внимательно (но все равно с риском где-то что-то пропустить) просматривать всю программу, выискивать в ней все такие операторы сравнения и дописывать в них еще одно логическое условие…

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Дмитрий Усенков читать все книги автора по порядку

Дмитрий Усенков - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Занимательное программирование – игры с текстом отзывы


Отзывы читателей о книге Занимательное программирование – игры с текстом, автор: Дмитрий Усенков. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x