Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Строковый тип String. Работа со строкамиСодержание книги
Поиск на нашем сайте
Со строковым типом Stringмы познакомились в 4.14. Как можно сэкономить память, работая со строками? Если мы напишем VAR a:String, то Паскаль отведет под символы строковой переменной a 255 байтов. Если мы не собираемся присваивать переменнойb значений длиннее, например, 20 байтов, то выгодно написать VAR b:String[20]. В этом случае под символы переменной b в памяти будет отведено 20 байтов. Теперь разберем функции для работы над строками.
Процедура Str может вам понадобиться, например, вот в каком случае. Модуль Graph имеет возможность печатать на экране большими красивыми шрифтами (см. 15.6). Но так печатает он только строковый тип. А в программе “Торпедная атака” вам может захотеться печатать красивым шрифтом счетчик подбитых кораблей, который у вас описан, как целочисленный. Вот тут и пригодится Str. Примеры использования Str и Val см.в 15.6. Если задана строка s:='Банка', то считается автоматически заданным массив символов с тем же именем: s[1]=’Б’, s[2]=’а’, s[3]=’н’, s[4]=’к’, s[5]=’а’. Тогда после выполнения оператора s[3]:=’р’ мы получим s='Барка'. Строки можно сравнивать. Условие s1=s2 считается выполненным, если обе строки абсолютно одинаковы, включая и пробелы. Сравнение идет посимвольно слева направо. Поэтому считается, что ‘панк’ < ‘парк’, так как первый несовпадающий символ ‘р’ имеет больший номер, чем ‘н’.
Задание 114: Среди детей встречается игра, заключающаяся в зашифровке своей речи “для секретности” за счет вставки в произносимые слова какого-нибудь словосочетания, например, “быр”. Тогда вместо слова “корова” будет произнесено “кобырробырвабыр”. Составьте программу, которая распечатывает заданную строку, после каждой второй буквы вставляя “быр”. Задание 115: Давайте поставим задачу шифрования текста более серьезно. Имеется строка текста. Требуется написать программу, которая зашифровывала бы ее в другую строку. Способов шифровки вы можете придумать сколько угодно. Попробуйте такой – заменять каждый символ текста символом, следующим по порядку в таблице ASCII. Тогда слово КОТ превратится в слово ЛПУ. Составьте, пожалуйста, и программу дешифровки. Когда вы познакомитесь с файлами, вы сможете уже зашифровывать и дешифровывать не отдельные строки, а целые тексты. В том числе и ваши паскалевские программы. Записи На вооружении флота 100 подводных лодок. Адмиралу часто приходится решать задачи такого типа: 1)перечислить названия лодок, имеющих скорость, превышающую скорость вражеской подводной лодки Шредер; 2)подсчитать, сколько лодок имеют на вооружении больше 10 торпед; и т.д. Чтобы ускорить решение таких задач, адмирал приказал занести в компьютер сведения обо всех лодках, включая вражеские лодки Шредер и Рокстеди, а именно: их названия, скорость и число торпед, находящихся на вооружении. Отвести место в оперативной памяти под указанную информацию о 102 лодках можно двумя способами: 1)с помощью массивов, 2)с помощью записей. Рассмотрим программу, использующую первый способ. В каждом массиве будет 102 элемента, причем элементы 101 и 102 отведены под лодки противника. VAR nazvanie: array [1..102] of String; {Место под 102 названия} В памяти компьютера информация размещается в том порядке, в котором она встречается в описаниях:
Вы видите, что данные об одной лодке разбросаны по памяти. Рассмотрим второй способ. Иногда бывает удобно, чтобы данные, касающиеся одной лодки, хранились в памяти рядом, вот так:
Выстроенную подобным образом информацию в памяти компьютера часто называют базой данных. Сами по себе массивы не позволяют хранить информацию в таком порядке, для этого нужно использовать записи. Запись - это набор данных (полей) различных типов, касающийся одного объекта. Например, запись, касающаяся нашей первой лодки, это набор трех полей: название - Щука (тип String), скорость - 26 (тип Real), количество торпед - 6 (тип Byte). Точка отделяет имя поля от обозначения записи, содержащей это поле. Напомним, что в массиве разрешается хранить данные только одного типа. Прежде чем отводить место в памяти под всю информацию, объясним Паскалю, из чего состоит одна запись, то есть опишем ее, задав специальный тип записи record и придумав ему имя, скажем, podlodka: TYPE podlodka = record Тип определен, но место в памяти пока не отведено. Здесь нам, хочешь-не хочешь, придется воспользоваться массивом. При помощи VAR отведем место под массив из 100 записей для наших подлодок и отдельное место под две записи для вражеских. Массиву придумаем имя lodka. VAR lodka:array[1..100] of podlodka; .......................... Как видите, элементами массива могут быть не только отдельные числа, символы или строки, но и такие сложные образования, как записи. Вот программа целиком: TYPE podlodka = record BEGIN {Здесь задаем значения полям всех записей. Конечно, удобнее это делать Согласитесь, что при использовании записей текст программы гораздо понятнее.
Теперь запишем нашу программу с использованием типизированных констант, для краткости ограничив наш флот тремя подводными лодками: TYPE podlodka = record Здесь вы видите, как правильно придавать начальные значения типизированным константам типа record. Задание 116: Создайте базу данных о своих родственниках. О каждом родственнике должно быть известно: · Имя · Год рождения · Цвет глаз Массивы не используйте. Программа должна:
1) Распечатать ваш возраст и цвет глаз 2) Ответить на вопрос – правда ли, что ваш дядя старше тети.
Задание 117: Создайте базу данных о своих однокашниках. О каждом однокашнике должно быть известно: · Фамилия · Имя · Пол · Год рождения Обязательно используйте массив не меньше, чем из 10 записей. Программа должна:
1) Вычислить средний возраст ваших однокашников 2) Определить, кого среди них больше – дам или кавалеров 3) Ответить на вопрос – есть ли в вашей базе тезки (это нелегко).
Множества Множеством в Паскале называется набор значений какого-нибудь порядкового типа, подчиняющийся специфическим правилам, о которых мы поговорим дальше. В программе множество записывается в виде списка этих значений в квадратных скобках. Например, [7,5,0,4] или [‘п’, ’ж’, ’л’]. Множество не должно состоять более, чем из 256 элементов и не должно содержать элементов с порядковыми номерами меньше 0 и больше 255. Если в множестве элемент повторяется, то считается, что он входит туда только один раз. Например, множества [2,5,2] и [2,5] эквивалентны. Порядок элементов в множестве не играет роли. Множества [2,5] и [5,2] эквивалентны. В описании тип множества задается словами set of. Например, конструкция VAR a: set of Byte говорит о том, что задана переменная, значением которой может быть любое множество из любого числа элементов типа Byte. Так, в некоторый момент процесса выполнения программы значением a может быть множество [210, 3, 92], а через пару секунд - [8, 5, 3, 26, 17]. Конструкция VAR c: set of (april, may, june) говорит о том, что переменная cможет иметь значением любое множество из имен april, may, june. Например, [april, june]. Конструкция VAR d: set of 10..18 говорит о том, что переменная dможет иметь значением любое множество целых чисел из диапазона от 10 до 18. Над множествами определено несколько операций. Рассмотрим три из них: объединение (+), пересечение (*) и разность (-).
Операция [1,2]*[3,4] будет иметь результатом [ ], то есть пустое множество.
Вот операции сравнения множеств:
Операция проверки вхождения элемента E в множество a: if E in a then... Например, a:= [1,2,4]; if 2 ina then... {Если 2 входит в множество a....}
К сожалению, Паскаль не желает выводить множества на печать, точно так же, как он не желает печатать перечислимые типы. Поэтому просто так узнать, из каких элементов состоит множество, не удастся. Вот один из обходных путей: Пусть задано множество a, описанное, как set of Byte. Будем пробовать уменьшать его на все элементы подряд, от 1 до 255, и каждый раз, когда это удается, распечатывать соответствующее число. Вот подходящий фрагмент, в котором мне понадобится “для транзита” еще одно множество b: for i:=1 to 255 do begin Вот гораздо более короткий и естественный путь: for i:=0 to 255 do if i in a then WriteLn(i) Я думаю, что работа с множествами Паскаля - любопытное и полезное занятие. Например, она нужна математикам, чтобы проверять свои теоремы. Я проиллюстрирую работу с множествами на простеньком примере: Медиум загадывает шестерку чисел, каждое в диапазоне от 0 до 10 (числа могут и совпадать). Экстрасенс отгадывает их, называя свою шестерку. Есть ли между шестерками совпадающие числа? Если есть, то распечатать их. Сначала решим задачу традиционными методами, а именно с применением массивов, а не множеств: CONST razmer = 10; kol = 6; VAR Medium, Extrasens: array [1..kol] of 0..razmer; for i:= 1 to kol do begin end {for}; У данной программы есть недостатки. Пусть медиум загадал числа 2 4 1 5 4 8, а экстрасенс назвал 1 4 9 6 1 4. Программа распечатает числа 4 4 1 1 4 4, а достаточно было бы только 1 4. К тому же пришлось организовывать счетчик совпадающих чисел, чтобы иметь возможность ответить, угадано ли хоть одно число. А теперь применяем множества: CONST razmer = 10; kol = 6; VAR Medium, Extrasens, a: set of 0..razmer; Randomize; a:= Medium * Extrasens; {Множество a содержит совпадающие числа. Вот так – одним махом.} end {else}
Задание 118: Случайным образом формируется небольшое множество заглавных букв русского алфавита. Определить, входит ли в это множество хотя бы одна из букв М,И,Ф.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-07-11; просмотров: 333; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.87.38 (0.009 с.) |