Л. И. Долинер основы программирования в среде pascalabc. Net учебное пособие
Скачать 1.88 Mb.
|
2. Алгоритмы распознавания слов и чисел в строке Задание 126 Напишите программу, подсчитывающую количество слов во введенной фразе: а) если между словами стоит один пробел; б) между словами может стоять произвольное число пробелов; в) между словами стоит один произвольный разделитель (пробел, «,», «.», «!», «?», «;», «-«); г) между словами стоит произвольное число разделителей. Задание 127 В файле string_05.pas хранится программа, которая обеспечивает проверку того, является ли заданная строка целым числом. Разберитесь, как она работает. Проверьте, как работает программа, если на вход подается: а) целое число; б) строка, содержащая цифры и буквы (например, 123абв); 88 в) дробное число (например, 12.34); г) посмотрите, что будет, если вместо константы ‘375’ вставить ‘375a’. Что изменится, если изменить описание переменной i (указать, например, «Real» вместо «Integer»)? Используя эту идею, напишите программу, вычисляющую сумму всех целых чисел, находящихся во введенной строке. Подсказка Для решения задачи достаточно вырезать все целые числа из строки, преобразовать их в числовые данные и добавить в сумму. Задание 128 Составьте простейший калькулятор, обеспечивающий ввод строки простейшим арифметическим выражением вида а1 <оп> а2 <оп> а3 ... <оп> аN, где а1...aN – целые числа; <оп> – знак операции сложения (+) или вычитания (-) и вычисляющий результат описанных действий. Задание 129 В файле string_06.pas хранится программа выделения и печати всех слов из введенной фразы, разделенных произвольным разделителем. Сравните ее с той, которую вы написали для решения этой задачи в предыдущей работе. Не содержится ли здесь новая для вас идея? Задание 130 Модифицируйте программу из файла string_06.pas так, чтобы печатались только: а) слова, начинающиеся на букву «л»; б) слова, заканчивающиеся на букву «ь»; в) слова длиной не менее пяти букв; г) самое длинное слово. 89 Задание 131 Подсчитайте, сколько пятерок потребуется, чтобы записать все числа от 1 до 999. Задачи для самостоятельной работы 1. Напишите программу, которая в заданном предложении находит самое короткое и самое длинное слово. Напечатайте исходный текст и найденные слова. 2. Напишите программу, которая в заданном предложении удаляет все символы пробела. Напечатайте исходный и преобразованный тексты, а также количество удаленных символов. 3. В качестве исходного текста задайте арифметическое выражение, записанное на Паскале. Напишите программу, которая проверяет, соблюдается ли равенство открывающих и закрывающих скобок. Выведите на печать исходный текст и количество открывающих и закрывающих скобок. 4. Напишите программы, которая в заданном предложении символы самого длинного слова заменяет символами « * ». Напечатайте преобразованный текст. 5. На вход программе подается набор символов, заканчивающихся точкой. Напишите эффективную, в том числе и по используемой памяти, программу, которая сначала будет определять, есть ли в этом наборе символы, соответствующие десятичным цифрам. Если такие символы есть, то можно ли переставить их так, чтобы полученное число было симметричным (читалось одинаково как слева направо, так и справа налево). Ведущих нулей в числе быть не должно, исключение – число 0, запись которого содержит ровно один ноль. Если требуемое число составить невозможно, то программа должна вывести на экран слово «NO». А если возможно, то в первой строке следует вывести «YES», а во второй – искомое симметричное число. Если таких чисел несколько, то программа должна выводить максимальное из них. Например, пусть на вход подаются следующие символы: Do not 911 to 09 do В данном случае программа должна вывести: YES 91019 90 6. Напишите программу, которая в заданном предложении перед каждым словом вставляет символ «?». Напечатайте преобразованный текст, а также длину полученного предложения. 7. Напишите программу, которая в заданном предложении удаляет все запятые. Напечатайте преобразованный текст, а также число удаленных символов. 8. В заданном предложении проверьте парность расстановки круглых скобок. Вложение скобок допускается. 9. Напишите программу печати слов предложения в обратном порядке. 10. Составьте программу, которую шифрует и дешифрует введенный текст. В качестве ключа шифра можно взять произвольную неповторяющуюся последовательность символов. 11. Составьте программу, в которую вводится двузначное число и выводится его название (вводится «36» – выводится «тридцать шесть»). 12. Составьте программу, проверяющую, является ли введенное предложение «перевертышем», т. е. читающимся одинаково слева направо и справа налево (без разделителей, разумеется). Примеры «перевертышей»: Аргентина манит негра; а роза упала на лапу Азора. Сохраните все программы в вашей папке. Пригласите преподавателя и про- демонстрируйте ему все сделанные вами программы. Будьте готовы отве- тить на вопросы преподавателя. После беседы с преподавателем выйдите из среды PascalABC.NET. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, вышлите все файлы с подготовленными вами программами преподавателю. 91 Глава 19 ИСПОЛЬЗОВАНИЕ ПРОЦЕДУР Задание 132 В электронном пособии ( Examles\Пособие\index.html ) изучите раздел «Процедуры». Ответьте на вопросы, приведенные в конце раздела. Выполните тест по теме и продемонстрируйте оценку преподавателю. Рассмотрим использование процедур на примерах. Задание 133 1. Запустите среду PascalABC.NET. 2. Загрузите файл Proc5.pas. 3. Проанализируйте текст программы. Это сделать будет совсем не трудно, т. к. вы уже знакомы с алгоритмом поиска максимального из двух чисел. 4. Найдите описание процедуры. Ответьте на следующие вопросы: а) какое у процедуры имя; б) сколько параметров у процедуры; в) какие из них входные, выходные; г) найдите конец процедуры. Чем он отличается от конца программы? 5. Найдите тело головной программы. Сколько раз вызывается процедура? Посмотрите, как описаны фактические параметры. Совпадает ли это с описанием формальных параметров? Если найдете несоответствие в описании параметров, то обратитесь к преподавателю. 6. Запустите программу на выполнение. Проверьте, правильно ли она работает. 7. Модифицируйте программу так, чтобы она работала и для шести чисел. 8. Заставьте программу находить минимальное из шести заданных чисел. 92 Задание 134 Загрузите файл Proc6.pas. В файле приведена программа, в которой идет отладка процедур рисования дирижабля и мишени. Используя данный пример как основу, разработайте процедуру, которая рисует: а) дерево; б) человечка; в) цветок; г) машину; д) солнце; е) забор. (Выберите, что вам больше нравится, и подумайте, как можно будет задавать параметры этих объектов: размер, цвет и т. п.) Текст доработанной программы с добавленной процедурой запишите с новым именем в свою папку. Задание 135 1. Загрузите файл Proc7.pas. 2. Перед вами программа TOWN: она строит город из домов. Проанализируйте структуру программы. Она содержит процедуру HOUSE, которая умеет строить дом по заданным параметрам. Посмотрите, какие параметры имеет процедура. 3. Найдите вызовы процедуры. Сколько, на ваш взгляд, будет построено домов? 4. Запустите программу на выполнение и проверьте свой ответ. 5. Придумайте свой город (свою комбинацию домов) и, исправив в головной программе вызовы процедуры, получите свою картинку. Покажите ее преподавателю. Задание 136 1. В одном из предыдущих заданий вы составили свою процедуру с изображением некоторых объектов (деревья, человечки, цветы, солнце). Оформите ее в виде процедуры и добавьте в программу TOWN. 2. Если у вашего соседа по компьютерному классу своя процедура для рисования объектов, то возьмите ее у него. Обратите внимание: если 93 оформлять алгоритмы в виде процедур, то одну программу могут разрабатывать сразу несколько человек. Это очень удобно! Задание 137 Большое число практических задач требует каким-то образом усреднять данные. Это и обработка результатов научных экспериментов, и задачи статистики, и др. Самое простое – взять среднее арифметическое всей последовательности чисел. Другой способ – взять среднее арифметическое между наибольшим и наименьшим элементами последовательности. Еще один способ, более сложный, применяется, в частности, при судействе соревнований по фигурному катанию. Состоит он в том, чтобы отбросить крайние (наибольшее и наименьшее) числа, а от остальных взять среднее арифметическое. Запрограммируйте все эти способы для вводимой последовательности чисел с помощью отдельных процедур. Сравните результаты. Задачи для самостоятельной работы 1. Часто бывает важно не только определить среднее значение последовательности, но и охарактеризовать величину разброса. Одной из таких характеристик может служить, например, разность между наибольшим и наименьшим значениями. С помощью процедуры запрограммируйте вычисление этой величины для вводимой последовательности чисел. 2. Составьте процедуру, с помощью которой можно будет определять расстояние между двумя точками в трехмерном пространстве. 3. Разработайте процедуру, с помощью которой определяется, является ли введенное число простым. 4. Составьте процедуру, которая вместо даты, заданной в числовом виде (25.06), выводит ее текстовое название (двадцать пятое июня). 5. Разработайте процедуру, которая преобразует дату из классического вида (15 мая 2011 года) в числовой (15.05.2011). 94 6. Составьте процедуру, которая приводит строку, состоящую из русских символов, к одному регистру (например, прописные буквы преобразует в строчные). Составьте процедуру, которая определяет в заданном предложении все слова-перевертыши (казак, шалаш). 7. Составьте процедуру выравнивания строки, которая преобразует ее к строке указанной длины путем добавления пробелов между словами. 8. Составьте процедуру, с помощью которой из заданного текста будут удалены все английские символы. 9. Составьте процедуру, являющуюся синтаксическим анализатором идентификатора. Процедура должна получать строку и проверять, является ли полученная строка идентификатором (т. е. последовательностью символов, состоящую из английских букв, цифр и (или) знака подчеркивания, начинающуюся с буквы). 10. Разработайте процедуру, которая рисует в заданном месте произвольный закрашенный треугольник. 11. Разработайте процедуру, которая рисует параллелипипед по заданным параметрам. 12. Разработайте процедуру LineRel(xs,ys), которая рисует отрезок, соединяющий текущую точку и точку, отстоящую от текущей на заданное смещение (xs, ys) (т. е. координаты второй точки равны (x+xs, y+ys)). Пригласите преподавателя и продемонстрируйте ему сделанные вами про- граммы и процедуры. Будьте готовы ответить на вопросы преподавателя. После беседы с преподавателем выйдите из среды PascalABC.NET. Если вы обучаетесь в условиях использования дистанционных образователь- ных технологий, вышлите все файлы с подготовленными вами программами преподавателю. 95 Глава 20 РАБОТА С МАССИВАМИ: ПЕРВЫЕ ШАГИ Задание 138 В электронном пособии ( Examles\Пособие\index.html ) изучите раздел «Массивы». Ответьте на вопросы, приведенные в конце раздела. Выполните тест по теме и продемонстрируйте оценку преподавателю. Задание 139 Запустите среду PascalABC.NET. Составить программу: а) в которой всем элементам массива присваивается заданное целое значе- ние (количество элементов массива не более 50); б) всем элементам массива присваивается вводимый текст; в) каждому элементу массива с нечетным индексом присваивается его но- мер, а элементу с нечетным индексом – его номер с противоположным знаком; г) элементам массива, стоящим на четных местах, присваивается символ «@» , на нечетных местах – «#». д) каждому элементу, стоящему на первом, четвертом, седьмом и т. д. местах, присваиваться число 0, остальным – число 3, и все элементы мас- сива выводятся на экран дисплея. Задание 140 Загрузите в новое окно программу из файла array_1.pas. Эта программа позволяет ввести последовательность из 15 чисел и вывести их в обратном порядке. Разберитесь в том, как работает эта программа. Выполните задание, написанное в конце программы (после END.) Задание 141 Модифицируйте программу из файла array_1.pas так, чтобы сначала печатались в строчку все положительные числа, а в следующей строке – все отрицательные. 96 Задание 142 В массиве хранится информация о количестве осадков за каждый день но- ября. Составьте программу, с помощью которой определяется общее коли- чество осадков за этот месяц. Задание 143 В массиве хранится информация о количестве студентов в каждой группе. Составьте программу, с помощью которой определяется среднее число сту- дентов в одной группе. Задание 144 В массиве хранится информация о результатах квалификационных выступ- лений фигуристов. На соревнования допускаются только те, кто получил результаты выше среднего. Составьте программу, которая определяет число спортсменов, прошедших квалификацию. Задание 145 В массиве хранится информация о результатах соревнований по прыжкам в длину. Составьте программу, с помощью которой определяется лучший и худший из результатов. Задание 146 В массиве содержатся оценки ученика по математике. Сосчитайте общее количество пятерок, четверок, троек и двоек. Задание 147 Представьте себе, что вы смешиваете несколько компонентов в одну смесь (может быть, создаете новые духи, может быть, особо прочный и легкий сплав металлов и т. п.). По окончании работы вы знаете, сколько чего входит в смесь, т. е. массу каждого компонента. Чтобы в дальнейшем изготавливать такую же смесь в промышленных масштабах, вам нужен «рецепт», т. е. процентное содержание каждого компонента в смеси. Такая программа составлена и размещена в файле array_2.pas . Загрузите этот файл. Модифицируйте программу, размещенную в этом файле, так, чтобы она запрашивала не только массы, но и названия компонентов и печатала их 97 в рецепте. Имейте в виду, что элементами массива могут быть переменные любого типа, в том числе и строковые. Для этой программы вам потребуется два массива – один, как и прежде, числовой ( Real ) для хранения масс, а другой – строковый ( String[...]) для хранения названий. Задание 148 Загрузите файл array_char_01.pas . Закончите данную программу, выполнив задание, предложенное в начале программы. Считайте, что в тексте присутствуют либо маленькие (строчные) английские буквы, либо «не буквы». Задание 149 Программа из предыдущего задания работает без учета больших букв. Измените программу так, чтобы она учитывала все (большие и маленькие) буквы. Подсказка Самый простой путь решения – свести все буквы к одному виду – большим или маленьким. Для этих целей существует специальные функции UpCase и LowerCase . Посмотри ее описание в Справке ( Помощь Справочник по языку Системные процедуры, функции, типы и константы Про- цедуры и функции для работы с символами и строками ). Задачи для самостоятельной работы 1. В массиве рост юношей задан отрицательным числом, рост девушек – положительным. Определите отдельно средний рост юношей и девушек. 2. В массиве хранится информация о стоимости книг. Составьте программу, которая выводит на экран номера книг, сто ящих ниже средней стоимости всех этих книг. 3. В массиве хранится число жителей в каждом доме улицы. Индекс элемента массива соответствует номеру дома. Известно, что на одной стороне улицы дома с четными номерами, а с другой – с нечетными. Составьте программу, которая определяет, на какой стороне улицы больше жителей: на четной или нечетной. 4. Определите, имеются ли в заданном массиве одинаковые элементы. 98 5. Определите, является ли заданный массив упорядоченным по возрастанию. При отрицательном ответе выведите номер элемента, нарушаещего эту упорядоченность. 6. В массиве хранятся года рождения некоторого числа людей. Составьте программу, которая определит разницу в возрасте между самым старшим и самым младшим из этого списка. Считать, что возраст можно определить как разность между текущим годом и годом рождения. 7. В массиве хранится информация о стоимости различных марок автомобилей. Определите два самых дорогих автомобиля из этого списка. Попытайтесь решить эту задачу, используя один проход по массиву. 8. Удалите из введенного файла отрицательные элементы. В конец массива впишите нули. 9. Известна стоимость автомобилей и их мощность (л. с.). Определить общую стоимость автомобилей, имеющих мощность больше 100 л. с. 10. Составьте программу, которая вычисляет частоту использования русских букв во введенном тексте. Протестируйте разработанную программу. Для этого запустите ее: а) сразу нажмите . Программа должна сообщить, что текст отсутствует; б) введите текст «vvv». Программа должна сообщить, что в тексте русских букв нет; в) введите «ююююю». Программа должна выдать только одну строчку: букв «ю» в тексте 100 %; г) введите «мама». Программа должна выдать две строчки: букв «а» в тексте 50 % ; букв «м» в тексте 50 % ; д) введите «123 АбвГ123деЖзий». Программа должна выдать информацию о том, что букв а, б, ..., й в тексте по 10 %. 11. Для характеристики разброса элементов последовательности в статистике используется величина, называемая дисперсией. 99 Дисперсия – это среднее арифметическое квадратов разностей между элементами последовательности и ее средним значением, вычисляется по формуле n M a M a D n 2 2 1 ) ( ) ( , где a i – элементы последовательности, а M – среднее значение этих элементов. Напишите программу для вычисления дисперсии (и обязательно сохраните – она нам еще понадобится). 12. Для иллюстрации дискретных динамических процессов довольно часто используются столбиковые диаграммы (гистограммы) (рис. 4). |