Основы программирования (947332), страница 22
Текст из файла (страница 22)
Номер равен \1)else WriteLnCCmpoKa не найдена.');End.1264. Структурные типы данныхЗадания для самопроверкиЗадание 1. Дана строка текста длиной не более 80 символов, состоящая из слов,разделенных пробелом, в конце точка. Разработайте программу, которая определяетномера слов, в которых содержится более трех символов «А». Вывести исходнуюстроку и номера слов. Если слов с таким числом букв не окажется, вывести соответствующее сообщение.Задание 2. Дана строка текста длиной не более 40 символов, состоящая из слов,разделенных пробелом, в конце точка. Разработайте программу, которая удаляет изтекста слово, содержащее максимальное количество букв «В».
Вывести исходную ипреобразованную строки. Если в тексте нет слов с буквой «В» - вывести соответствующее сообщение.Задание 3. Дан массив символьных строк, длиной не более 40 символов. Строки состоят из слов, разделенных пробелом, в конце точка. Разработайте программу,которая формирует одномерный массив В, содержащий в качестве элементов количество слов каждой строки, начинающихся на гласную букву. Если таких слов нет, всоответствующий элемент массива В занести 0.
Вывести исходный и сформированный массивы.Задание 4. Дана строка, состоящая из слов, разделенных одним пробелом. Разработайте программу, которая разбивает исходную строку на подстроки, размер которых не превышает заданного значения п. Перенос слов считать запрещенным.Задание 5. Разработайте программу, которая осуществляет «выравнивание поширине» подстрок, полученных в результате работы программы задания 4. Выравнивание должно выполняться таким образом, чтобы дополнительные пробелы между словами распределялись по подстроке равномерно.4.7. МножестваПонятие множество является одним из основных в современной математике и трактуется как неупорядоченная совокупность неповторяюгцгася объектов. В общем случае множество может не содержать ни одного элемента.Такое множество называется пустым.В Borland Pascal предусмотрен структурный тип, предназначенный дляпредставления множеств.
Данные множественного типа представляют собой совокупности однотипных элементов, каким-либо образом связанныхдруг с другом. Характер связей между элементами только подразумеваетсяпрограммистом и никак не контролируется.Множественный тип объявляется как совокупность элементов некоторого базового типа (рис. 4.31).Допускается объявлять только конечные множества, количество элементов которых может меняться от О до 255.127Часть l.
Основы алгоритмизации и процедурное программированиеБазовым типом может бытьлюбой порядковый тип за исключением типов integer иРис. 4.3L Синтаксическая диаграммаlongint, количество возмож<Объявление множественного типа>ных значений которых превышает 255. В качестве базового типа могут использоваться только диапазоны значений этих типов.Порядок расположения элементов во множестве никак не фиксируется.Это соответствует принятой в математике трактовке множества.Новый множественный тип обычно сначала объявляют, а затем уже используют при описании переменных и констант, например:^set \I^ ^0 1 Базовыйтип IТуреDigits = set of L.
100; {тип «множество целых чисел от 1 до 100»}Setchar = set of char; (тип «множество символов таблицы ASCII»}letter=set of 'а'.. *z V {тип «множество прописных латинских букв»}logic = set of boolean; {тип «множество логических значений»}Varmychar:setchar; {переменная - множество символов таблицы ASCII}bool: logic;{переменная - множество логических значений}mydig: Digits; {переменная - множество целых чисел от 1 до 100}simst: letter; {переменная - множество прописных латинских букв}Множественный тип можно определить и непосредственно при объявлении переменных программы, например:Var number:set <9/"7..37; {переменная - множество целых чисел от 1 до 31}cif: set of 0,,9; {переменная - множество цифр}kods: set о/#0..#255;{переменная - множество кодов таблицы ASCII}workweek, week: set о/фу«; {переменная - множество дней недели}Значением переменной множественного типа является множество.
Конкретные значения переменных и констант множественного типа определяются с помощью конструктора мноэюества, представляющего собой заключенный в квадратные скобки список элементов множества, перечисленныхчерез запятую. Элементы множества могут задаваться константами, переменными и выражениями базового типа, также допускается указывать интервалы значений элементов, входящих во множество, например:[] - пустое множество;[2,3,5,7,11] - множество, включающее несколько целых чисел;['а\ 'd\ f\ Ъ 7 - множество, включающее несколько латинских литер;[1,к] - множество, состоящее из целого числа 1 и текущего значенияпеременной к;[к.,2*к] - множество целых чисел от значения переменной к до результата выражения 2*к;1284.
Структурные типы данных[2„100] - множество целых чисел от 2 до 100;/"/, 2, i.. 7] - множество целых чисел, включающее числа 1,2,3,4,5,6,7;[red,yellow,green] - множество, состоящее из трех элементовнекоторого перечислимого типа.Инициализация множеств. Возможна инициализация переменныхмножественного типа с использованием типизированных констант.
Например:Туре setnum =set of byte;Const S:setnum=[LJOJ; {инициализированная переменная, ее исходноезначение в программе равно множеству, включающему целые числа от 1 до 10}Операции над множествами. Для работы со значениями множественного типа предусмотрены специальные операции, в основном соответствующие операциям, определенным в теории множеств: объединение^ пересечениеи дополнение множеств. Это двуместные операции, операндами которых являются данные множественного типа - множества и выражения, принимающие значение множественного типа. Оба операнда должны принадлежать одному и тому же множественному типу.
Обозначения этих операций в BorlandPascal и их геометрическая интерпретация представлены в табл. 4.1 применительно к множествам А и В.Т а б л и ц а 4.1МатематическаязаписьAuB!АпБА\ВОперацияBorland PascalА^ВА *ВА'ВГеометрическаяинтерпретация(А(J В)Результат операцииОбьединение множеств А и В множество, состоящее из элементов, принадлежащих множествам А и В1€ЭПересечение множеств А и В ~множество, состоящее из элементов, принадлежащих одновременно и множеству А имножеству ВЙЭДополнение множеств А и В множество, состоящее из техэлементов множества А, которые не принадлежат множествуВ129Часть I.
Основы алгоритмизации и процедурное программированиеНапример:[1,2] + [3,4] = [U,3,4];[1..10] * [3,8,9,15,23,45] = [3,8,9];[1..15] - [3,8,9,15,23,45] = [1,1,4..7,10.Л4];[red,blue,green,black] * [bIue,magenta,yeIlow] = [blue].Операции отношения. Наряду с рассмотренными выше операциями надзначениями множественного типа определены и операции отношения. Операндами отношений в этом случае являются переменные или выражениямножественного типа. В табл.
4.2 показано соответствие между математическими операциями сравнения множеств и операциями отношения, определенными в Borland Pascal.Операция проверки вхоэюдеиия элемента во мноэюество. Особое местозанимает операция проверки вхождения элемента во множество, обозначаемая служебным словом in (рис. 4.32).
В отличие от операций отношения, воперации in первый операнд должен принадлежать базовому типу элементовданного множественного типа. Результатом операции in, как во всех операциях отношения, являетсялогическое значение.Ниже приведены приВыражениеМножествомеры применения операцийотношения и операции вхоРис. 4.32. Синтаксическая диаграммаждения к различным мно<Проверка вхождения элемента во множество> жествам.КЕНТ а б л и ц а 4.2МатемэтическаязаписьОперацияBorland PascalА= ВА =В130Результат операцииTRUEFALSEМножества А и В совпа Множества А и В не совпадаютдаютАФЪА<>ВМножества А и В не сов Множества А и В совпападаютдаютАсВА<=ВВсе элементы множестваА принадлежат множеству ВНе все элементы множества А принадлежат мно- jжеству ВАзВА>=ВВсе элементы множестваВ принадлежат множеству АНе все элементы множества В принадлежатмножеству А4.
Структурные типы данных[*а% 'Ь'] = ['Ь% 'а'] - результат операции TRUE;[4, 5, 6] = [4..6] - результат операции TRUE;['c%'b'] = ['с% 'b% М'] - результат операции FALSE;[2,3, 5,7] <= I1-9] - результат операции TRUE;[3, 6..8] <= [2..7, 9] - результат операции TRUE;[3, 6..8] <= [2..7, 9] - результат операции FALSE;[5..8, 9.Л2] >= [6, 8,11] - результат операции TRUE;10 in [2, 4, 6, 8,10,12,14] - результат операции TRUE;к in [1, 3, 5, 7, 9] - результат операции TRUE при к=1,3,5и FALSE при к=2,4,6Следует помнить, что значения мноэюественного типа нельзя вводить ивыводить.
Однако можно ввести значения элементов множества и добавитьих к множеству, используя операцию объединения множеств, например:*^«~/У/ {исходное множество пусто}Read(n);while not EofdobeginS:=S+[n]; {объединяем исходное множество с элементом}Read(n); {вводим следующий элемент}end;...Для того чтобы вывести элементы множества, используют специальныйприем: в цикле проверяют вхождение во множество всех элементов базовоготипа и выводят те, которые входят во множество, например:fori:='a4o'z'doif i in S then Write(i:3);Рассмотрим несколько примеров решения задач с использованием множеств.Пример 4.20. Разработать программу, которая определяет, является ливведенное слово идентификатором, т.е. начинается ли оно с буквы или знакаподчеркивания и не содержит ли специальных символов.Строим множество символов, которые допустимы в качестве первого:это строчные и прописные буквы латинского алфавита и символ подчеркивания:rA'..'Z','a'..'z','J] .Аналогично определяем множество допустимых символов, которые могут встретиться, начиная со второго символа слова:['A'..'Z','a'..V,'J/0'..'9'].Программа должна вводить строку, проверять допустимость первогосимвола, а затем в цикле проверять допустимость остальных символов.131Часть 1.
Основы алгоритмизации и процедурное программированиеProgram ex;Var St: string;key: boolean;i: integer;BeginWriteLn(*Введите строку');ReadLn(st);ifstflj in f^A\. 'Z^'a\, 'z\^__7 then {проверка первого символа}begini:=2;key:=true;while (i<=length(st)) and key do {проверка остальных символов}ifst[i] in ГА\. 'Z\'a\. 'z\ 1 ^'0\. 'Г] then inc(i)else key: =false;if key then WriteLn('Строка \st,' - идентификатор. *)else WriteLnf'Строка \st,' содерэюит недопустимые символы.');endelseJVriteLnCCmpoKa \st,' начинается с недопустимого символа.');End.Пример 4.21. Разработать программу для определения количества различных цифр в десятичной записи натурального числа.Для получения требуемого результата модуль введенного числа преобразуем в строку символов, а затем сформируем множество из этих символов.Теперь проверим, входят ли во множество цифры от О до 9, и те, которыевходят, выведем на экран.Program ex;Var n:longint;st:string;mnoj:setof'0\.'9';i: integer; j:char;BeginWriteLn('Введите число: ');ReadLn(n);Str(abs(n),st);mnoj:-[];{в исходном состоянии множество пусто}for i:=l to length (st) domnoj:=mnoj-^[st[i]]; {формируем множество}WriteLn('Запись числа \n,' содерэюит следующие цифры: *);forj:= 'О'to '9'do{выводим цифры, вошедшие во множество}if j in mnoj then Write(/+' ');End1324.