Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Строковый тип String. Работа со строками





Со строковым типом Stringмы познакомились в 4.14.

Как можно сэкономить память, работая со строками? Если мы напишем VAR a:String, то Паскаль отведет под символы строковой переменной a 255 байтов. Если мы не собираемся присваивать переменнойb значений длиннее, например, 20 байтов, то выгодно написать VAR b:String[20]. В этом случае под символы переменной b в памяти будет отведено 20 байтов.

Теперь разберем функции для работы над строками.

Исходные данные Операция Результат Пояснение
s1:='Мото'; s2:='роллер' s3:=s1+s2 s3='Мото-роллер' Операция + над двумя строками просто соединяет две строки в одну
s5:='Мото-роллер' k:=Pos('рол',s5) k=5 Функция Posвозвращает позицию, на которой находится строка 'рол' в строке s5
s3:='Мото-роллер' l:=Length(s3) l=10 Функция Length(длина) выдает (возвращает) количество символов в строк
s3:='астро-ном' s4:=Copy(s3,3,4) s4= ‘трон’ Функция Copyвозвращает часть строки длиной 4, начиная с третьего символа
s5:='Коро-бочка'; Delete(s5,4,2) s5='Коро-чка' Процедура Deleteудаляет из строки s5 два символа, начиная с четвертого
s6:='Рука'; s7:='баш'; Insert(s7,s6,3) s6='Руба-шка' Процедура Insertвставляет в строку s6 строку s7, начиная с третьего символа
x:=2.73284 Str(x:4:2,s8) s8='2.73' Процедура Strпреобразует число в строку. 4:2 – это желаемый формат числа (см. 14.5)
s8='2.73' Val(s8,x,Osh) x=2.73 Процедура Valпреобразует строку в число. Параметр Osh должен иметь тип Integer. Он имеет смысл при анализе ошибки в преобразовании

Процедура 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 названия}
skorost: array [1..102] of Real; {Место под 102 скорости}
torped: array [1..102] of Byte; {Место под 102 количества торпед}
i:Integer;
BEGIN
{Здесь каким-нибудь способом заносим в отведенное место всю информацию,
например, присвоением - nazvanie[1]:='Щука'.... или загрузкой из файла}
{А теперь решим первую из двух задач:}
for i:=1 to 100 do if skorost[i] > skorost [101] then WriteLn(nazvanie[i])
END.

В памяти компьютера информация размещается в том порядке, в котором она встречается в описаниях:

ЯЧЕЙКИ ДЛЯ ИНФОРМАЦИИ ИНФОРМАЦИЯ
nazvanie[1] Щука
nazvanie[2] Дельфин
........... ........
nazvanie[101] Шредер
nazvanie[102] Рокстеди
skorost[1]  
skorost[2]  
........... ........
skorost[101]  
skorost[102]  
torped[1]  
torped[2]  
........... ........
torped[101]  
torped[102]  
i ?

Вы видите, что данные об одной лодке разбросаны по памяти.

Рассмотрим второй способ. Иногда бывает удобно, чтобы данные, касающиеся одной лодки, хранились в памяти рядом, вот так:

ЯЧЕЙКИ ДЛЯ ИНФОРМАЦИИ ИНФОРМАЦИЯ
lodka[1].nazvanie Щука
lodka[1].skorost  
lodka[1].torped  
lodka[2].nazvanie Дельфин
lodka[2].skorost  
lodka[2].torped  
.............. .........
vr.nazvanie Шредер
vr.skorost  
vr.torped  
prot.nazvanie Рокстеди
prot.skorost  
prot.torped  

Выстроенную подобным образом информацию в памяти компьютера часто называют базой данных.

Сами по себе массивы не позволяют хранить информацию в таком порядке, для этого нужно использовать записи. Запись - это набор данных (полей) различных типов, касающийся одного объекта. Например, запись, касающаяся нашей первой лодки, это набор трех полей: название - Щука (тип String), скорость - 26 (тип Real), количество торпед - 6 (тип Byte). Точка отделяет имя поля от обозначения записи, содержащей это поле.

Напомним, что в массиве разрешается хранить данные только одного типа.

Прежде чем отводить место в памяти под всю информацию, объясним Паскалю, из чего состоит одна запись, то есть опишем ее, задав специальный тип записи record и придумав ему имя, скажем, podlodka:

TYPE podlodka = record
nazvanie:String;
skorost:Real;
torped:Byte;
end;
..........

Тип определен, но место в памяти пока не отведено. Здесь нам, хочешь-не хочешь, придется воспользоваться массивом. При помощи VAR отведем место под массив из 100 записей для наших подлодок и отдельное место под две записи для вражеских. Массиву придумаем имя lodka.

VAR lodka:array[1..100] of podlodka;
vr,prot:podlodka; {Записи для двух вражеских лодок}
i:Integer;

..........................

Как видите, элементами массива могут быть не только отдельные числа, символы или строки, но и такие сложные образования, как записи.

Вот программа целиком:

TYPE podlodka = record
nazvanie:String;
skorost:Real;
torped:Byte;
end;
VAR lodka: array [1..100] of podlodka;
vr,prot:podlodka;
i:Integer;

BEGIN {Здесь задаем значения полям всех записей. Конечно, удобнее это делать
при помощи типизированных констант (см.следующую программу) или
файлов данных, но я использую простое присвоение:}
lodka[1].nazvanie:='Щука';
lodka[1].skorost:=26;
........
prot.torped:=22;
{А теперь решаем первую задачу:}
for i:=1 to 100 do if lodka[i].skorost > vr.skorost then WriteLn (lodka[i].nazvanie)
END.

Согласитесь, что при использовании записей текст программы гораздо понятнее.

 

Теперь запишем нашу программу с использованием типизированных констант, для краткости ограничив наш флот тремя подводными лодками:

TYPE podlodka = record
nazvanie:String;
skorost:Real;
torped:Byte;
end;
CONST lodka: array [1..3] of podlodka =
((nazvanie:'Щука'; skorost:26; torped: 6),
(nazvanie:'Дельфин'; skorost:14; torped:10),
(nazvanie:'Леонардо'; skorost:28; torped:11));
vr: podlodka =
(nazvanie:'Шредер'; skorost:20; torped:15);
prot: podlodka =
(nazvanie:'Рокстеди'; skorost:18; torped:22);
VAR i: Integer;
BEGIN
for i:=1 to 3 do if lodka[i].skorost > vr.skorost then WriteLn(lodka[i].nazvanie);
END.

Здесь вы видите, как правильно придавать начальные значения типизированным константам типа record.

Задание 116: Создайте базу данных о своих родственниках. О каждом родственнике должно быть известно:

· Имя

· Год рождения

· Цвет глаз

Массивы не используйте. Программа должна:

 

1) Распечатать ваш возраст и цвет глаз

2) Ответить на вопрос – правда ли, что ваш дядя старше тети.

 

Задание 117: Создайте базу данных о своих однокашниках. О каждом однокашнике должно быть известно:

· Фамилия

· Имя

· Пол

· Год рождения

Обязательно используйте массив не меньше, чем из 10 записей. Программа должна:

 

1) Вычислить средний возраст ваших однокашников

2) Определить, кого среди них больше – дам или кавалеров

3) Ответить на вопрос – есть ли в вашей базе тезки (это нелегко).

 

Date: 2015-09-17; view: 420; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию