КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Строковый тип 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) Ответить на вопрос – есть ли в вашей базе тезки (это нелегко).
|