русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-11-27; просмотров: 912; Нарушение авторских прав


Со строковым типом 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) Ответить на вопрос – есть ли в вашей базе тезки (это нелегко).



<== предыдущая лекция | следующая лекция ==>
Символьный тип Char. Работа с символами | Множества


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 4.769 сек.