Строковый тип данных в Паскале
Строки в Паскале – это данные типа string. Они используются для хранения последовательностей символов. В Паскале длина стандартной строки ограничена 255 символами. Под каждый символ отводится по одному байту, в котором хранится код символа. Кроме того, каждая строка содержит еще дополнительный байт, в котором хранится длина строки.
Если заранее известно, что длина строки будет меньше 255 символов, то программист может сам задать максимальную длину строки.
Примеры описания строк:
type str_type = string[12]; const n = 50; var s1: string; s2, s3: str_type; s4: string[n]; s5, s6, s7: string[7];
Длина строки хранится в первом ее байте, индекс которого равен 0.
Объявление типизированной константы для типа string выглядит так:
const s: string = 'FreePascal'
Существует понятие пустой строки, то есть строки, в которой нет ни одного символа. Пустая строка обозначается двумя рядом стоящими апострофами (например, st := » ).
Операции над строками
Строки можно присваивать друг другу. Если максимальная длина переменной слева меньше длины присваиваемой строки, то лишние символы справа отбрасываются.
s1 := 'this is text'; s2 := s1;
Строки можно объединять с помощью операции конкатенации, которая обозначается знаком + .
s1 := 'John'; s2 := 'Black'; s1 := s1 + ' ' + s2;
Строки можно сравнивать друг с другом с помощью операций отношения. При сравнении строки рассматриваются посимвольно слева направо, при этом сравниваются коды соответствующих пар символов. Строки равны, если они имеют одинаковую длину и посимвольно эквивалентны. В строках разной длины существующий символ всегда больше соответствующего ему отсутствующего символа. Меньшей будет та строка, у которой меньше код первого несовпадающего символа (вне зависимости от максимальных и текущих длин сравниваемых строк).
'abc' > 'ab' (true) 'abc' = 'abc' (true) 'abc' < 'abc ' (false)
Имя строки может использоваться в процедурах ввода-вывода. При вводе в строку считывается из входного потока количество символов, равное длине строки или меньшее, если символ перевода строки (который вводится нажатием клавиши Enter ) встретится раньше. При выводе под строку отводится количество позиций, равное ее фактической длине.
readln(s1); write(s1);
К отдельному символу строки можно обращаться как к элементу массива символов, например s1[3] . Символ строки совместим с типом char, их можно использовать в выражениях одновременно, например:
s1[3] := 'h'; writeln(s2[3] + 'r');
Можно осуществлять коррекцию любого символа строковой переменной, для чего в соответствующем операторе достаточно указать имя переменной типа string , вслед за которым в квадратных скобках задается номер ее элемента (например, str[3] := 'j' ).
Элементы строки нумеруются с единицы, так как в каждой строковой переменной имеется элемент с номером 0, в котором в виде символа хранится длина текущей строки. Чтобы узнать текущую длину, достаточно применить функцию ord к нулевому элементу строки. Например:
writeln(ord(st[0]))
Нулевой элемент строковой переменной можно корректировать. При этом будет изменяться текущая длина строки. Например, выражение str[0] := #50 устанавливает текущую длину равной 50.
1 какой тип данных используется в языке паскаль для обозначения символьных строк
Теперь применим полученные знания о представлении текстовой информации на практике. В языке программирования Паскаль для работы с текстовой информацией есть специальный символьный тип переменных, который называется char (от английского character). Переменные этого типа занимают в оперативной памяти по `1` байту и, соответственно, могут принимать `256` различных значений. Значениями переменных этого типа являются элементы какой-либо однобайтовой кодовой таблицы (например, KOI-`8` или Windows-`1251`). Какие именно символы являются значениями данного типа, зависит от того, какая кодовая таблица используется в момент выполнения (а не написания) программы. То есть одна и та же программа, например, печатающая изображение всех символов кодовой таблицы, на компьютерах с различными текущими кодировками будет иметь различные результаты работы.
Переменным символьного типа можно присваивать значения при помощи оператора присваивания. При этом есть два способа записи символьных констант. Первый способ – записать явное изображение символа, заключив его в апострофы. Пусть, например, переменная C имеет тип char. Присвоим ей значение: C:= 'a'; Описанный способ записи символьных значений удобно применять практически всегда. Единственный недостаток этого способа заключается в том, что так невозможно представить служебные символы, которые не имеют явных изображений (в кодовой таблице это первые `32` символа). Поэтому существует ещё один способ записи символьных констант – сначала указать спецсимвол решётку ( # ), а потом код интересующего нас символа. Например, C:=#13; Недостаток этого способа заключается в том, что нужно помнить коды всех символов, поэтому обычно его применяют только для записи символов без явного изображения.
Переменные типа char можно выводить на экран при помощи оператора вывода и вводить с клавиатуры. Апострофы при вводе набирать не нужно (каждый апостроф также будет считаться отдельным символом). Служебные символы вводятся следующим образом: нужно зажать alt и на правой цифровой клавиатуре набрать код символа (например, 13).
К переменным типа char можно применять операции сравнения ( > , < , >= , ). При этом сравниваются коды символов и большим признаётся символ, имеющий больший код (то есть символ, находящийся дальше от нулевого). Результатом операции сравнения является логическое значение – true или false .
Существует `5` стандартных функций для работы с переменными символьного типа:
Функция
Действие
Тип
аргумента
Тип
результата
#8.1 Строковый тип данных String в Паскаль. Начало работы со строками
Строковый тип данных позволяет использовать в программе последовательности из многих символов, которые также называют "строками".
Строковые литералы
Мы уже говорили о строковых литералах ранее.
Строковые литералы -- это последовательности символов взятые в кавычки, но в отличии от символьных литералов, в строковых может быть много символов (а в символьных только один).
Пример оформления строкового литерала:
'СПО ВГУ' // строка из 7 символов
Строковые переменные
Строковые переменные объявляются следующих образом:
var a, b, c: string; // объявляем три переменные строкового типа
Как и переменным других типов строковым переменным можно присваивать значения -- строковые литералы, другие строковые переменные или значения, возвращающие строковый тип.
Приведём пример присваивания литерала переменной и одной переменной другой переменной:
var a, b, c: string; // объявляем списком три переменные строкового типа begin a := 'abc'; // строковый литерал из 3 символов b := a; // теперь b равно 'abc' (хранит в себе строку 'abc') с := b; // теперь c равно 'abc' end.
Операции со строками
Конкатенация -- сложение строк
Пожалуй, самой распространённой операцией в Паскале является конкатенация строк. Эта операция состоит в том, что из двух "суммируемых" строк получается одна.
Рассмотрим пример:
var a,b,c : string; begin a := 'SPO '; b := 'VSU'; c := a + b; // конкатенация строк writeln(c); // смотрим чему равно c readln(); end.
-- запустите этот код. В консоли в качестве значения переменной $c$ мы получим строку:
SPO VSU
Таким образом: для конкатенации строк мы используем оператор суммы $+$.
c := a + b; // конкатенация строк
a + b
является строковым выражением, так как его результат обладает типом strign.
Сравнение строк
Как и переменные всех простых типов (есть ещё т.н. сложные типы, о которых мы будем говорить в следующих уроках) строки можно сравнивать, для чего используются, в частности операторы $\lt>$ и $=$.
Далее рассмотрим примеры небольших программ, работающих со строками, в т.ч. их сравнивающие.
Разбор примеров
Пример №1 -- считывание строк
Пользователь вводит произвольную строку. Cчитайте её, сложите саму с собой и выведите на экран.
var s:string; begin writeln('vvedite stroku:'); // выводим пояснение для пользователя readln(s); // считываем строку s := s + s; // сложение строк writeln('Poluchaem: ', s); readln(); end.
Пример №2 -- считывание строки и её сложение с литералом
Пользователь вводит произвольную строку. Cчитайте её, сложите со строкой '123' и выведите на экран.
var s:string; begin writeln('vvedite stroku:'); // выводим пояснение для пользователя readln(s); // считываем строку writeln('Poluchaem: ', s + '123'); // подставляем выражение как второй аргумент процедуры вывода readln(); end.
-- в данном решении мы не записывали значение литерала в переменную, хотя могли бы, например:
var s, b:string; // объявим две переменные begin writeln('vvedite stroku:'); // выводим пояснение для пользователя readln(s); // считываем строку b := '123'; writeln('Poluchaem: ', s + b); // подставляем выражение как второй аргумент процедуры вывода readln(); end.
Также мы могли бы объявить отдельную переменную для хранения результата, записать в неё результат конкатенации и затем вывести её значение:
var s, b, e :string; // объявим три переменные строкового типа begin writeln('vvedite stroku:'); // выводим пояснение для пользователя readln(s); // считываем строку b := '123'; e := s + b; writeln('Poluchaem: ', e); // подставляем переменную в качестве второго аргумента процедуры readln(); end.
Пример №3 -- считывание двух строк и их сложение с записью в переменную
Получите от пользователя две произвольных строки, сложите их, запишите результат конкатенации в переменную и выведите результат на экран.
var s1, s2 :string; begin writeln('Vvedite pervuy stroku:'); readln(s1); writeln('Vvedite vtoruy stroku:'); readln(s2); s1 := s1 + s2; // сложение строк, запишем в первую переменную, чтобы не объявлять третью write('Poluchaem: ', s1); readln(); end.
Пример №4
Получите от пользователя три строковых значения, выведете на экран результат проверки условия:
""первое значение равно второму или первое НЕ равно третьему""
Используя логическую операцию OR, и оператор сравнения $=$, можем решить так:
program Project1; var a, b, c: string; // секция объявления переменных begin // начало тела программы //получим значения переменных от пользователя writeln('vvedite pervuy stroku: '); readln(a); writeln('vvedite vtoruy stroku: '); readln(b); writeln('vvedite tretiy stroku: '); readln(c); writeln('otvet:', (a = b) OR (a <> c)); readln(); // удерживаем консоль end.
Видео-пояснения
Для этого урока есть следующие видео:
Самостоятельная работа
Вопросы
- Что такое оператор?
- Что такое конкатенация строк? Какой оператор используется для конкатенации?
Ввод-вывод, оператор присваивания, арифметические операции
Язык программирования Паскаль. Знакомство со средой программирования Турбо Паскаль. Основные понятия. Первая программа
Паскаль - язык профессионального программирования, который назван в честь французского математика и философа Блеза Паскаля (1623-1662) и разработан в 1968-1971 гг. Никлаусом Виртом. Первоначально был разработан для обучения, но вскоре стал использоваться для разработки программных средств в профессиональном программировании.
Паскаль популярен среди программистов по следующим причинам:
- Прост для обучения.
- Отражает фундаментальные идеи алгоритмов в легко воспринимаемой форме, что предоставляет программисту средства, помогающие проектировать программы.
- Позволяет четко реализовать идеи структурного программирования и структурной организации данных.
- Использование простых и гибких структур управления: ветвлений, циклов.
- Надежность разрабатываемых программ.
Турбо Паскаль - это система программирования, созданная для повышения качества и скорости разработки программ (80-е гг.). Слово Турбо в названии системы программирования - это отражение торговой марки фирмы-разработчика Borland International (США).
Систему программирования Турбо Паскаль называют интегрированной (integration - объединение отдельных элементов в единое целое) средой программирования, т.к. она включает в себя редактор, компилятор, отладчик, имеет сервисные возможности.
Основные файлы Турбо Паскаля:
Turbo.exe - исполняемый файл интегрированной среды программирования;
Turbo.hlp - файл, содержащий данные для помощи;
Turbo.tp - файл конфигурации системы;
Turbo.tpl - библиотека стандартных модулей, в которых содержатся встроенные процедуры и функции (SYSTEM, CRT, DOS, PRINTER, GRAPH, TURBO3, GRAPH3).
Запуск интегрированной среды программирования
Для запуска интегрированной среды программирования нужно установить текущим каталог с Турбо Паскалем (TP7\BIN) и ввести команду: turbo.exe.
Задание. Запустите среду программирования и рассмотрите экран. Перед вами полоса меню, область окна и строка статуса. Нажмите клавишу F10 - теперь вам доступны все опции меню. Используя клавиши управления курсором, рассмотрите меню. С командами меню мы будем знакомиться постепенно. Нажмите клавишу Esc (вы вышли из меню). Перемещая курсор в окне, следите за строкой статуса. Какая информация отражается в этой строке?
Почти все, что вы видите и делаете в среде Турбо Паскаль, происходит в окнах.
Окно - это область экрана, которую можно перемещать, изменять в размере, перекрывать, закрывать и открывать.
Интегрированная среда программирования Турбо Паскаль позволяет иметь любое количество открытых окон, но в любой момент времени активным может быть только одно.
Активное окно – это окно, с которым вы в настоящий момент работаете.
Общие горячие клавиши:
F2 - сохраняет файл активного окна;
F3 - появление диалогового окна и возможность открыть файл;
F4 - запускает программу до строки, на которой стоит курсор;
F5 - масштабирует диалоговое окно;
F6 - переходит к следующему открытому окну;
F7 - запускает программу в режиме отладки с заходом внутрь процедур;
F8 - запускает программу в режиме отладки, минуя вызов процедур;
F9 - компилирование программы в текущем окне;
F10 - возвращение в меню.
Мы начнем изучение меню с наиболее важных и необходимых режимов.
Как войти в меню? Всего есть три возможности:
С помощью клавиш управления курсором подсветите слово FILE и нажмите клавишу "Enter". Что вы видите?
Появилась вертикальная таблица со списком команд, называемая выпадающим меню. Познакомимся с ним.
Open-F3 - открыть существующий файл (при активизации этой опции появляется окно со списком файлов, где можно выбрать необходимый),
New - создать новый файл (очищает память редактора и переводит в режим создания нового файла, которому присваивается имя Noname.pas; имя можно изменить при записи файла на диск),
Save-F2 - сохранить файл (переписывает файл из памяти редактора на диск),
Save as - сохранить с новым именем,
Save all - сохранить все в окнах (записывает содержимое всех окон редактора в соответствующие файлы),
Change dir - смена каталога (позволяет изменить установленный по умолчанию диск или каталог),
Print - печать файла,
Get info - выдача информации о текущем состоянии программы и используемой памяти,
DOS Shell - выход в DOS без выгрузки из памяти (для возврата ввести команду exit),
Exit - выход и выгрузка из памяти.
Программы на языке Паскаль имеют блочную структуру:
1. Блок типа PROGRAM - имеет имя, состоящее только из латинских букв и цифр. Его присутствие не обязательно, но рекомендуется записывать для быстрого распознавания нужной программы среди других листингов.
2. Программный блок, состоящий в общем случае из 7 разделов:
-
раздел описания модулей (uses);
Общая структура программы на языке Паскаль следующая:
Начнем знакомство с Паскалем с программы, которая складывает два числа и выводит сумму на экран.
Откройте файл, в который Вы запишите эту программу. Для этого нажмите клавишу F10, чтобы выйти в главное меню, затем клавишами перемещения курсора выберите опцию File, а в выпавшем меню команду New.
Примечание. Обратите внимание на оформление текста программы.
-
Найдите в этой программе заголовок, раздел описания переменных, признак начала программы, признак конца программы, тело программы, комментарий.
А теперь подведем итог вашим размышлениям.
Имя этой программы Summa2. Заметим, что требования к имени выполняются: оно отражает содержание программы, а также не содержит недопустимых символов.
Далее идет специально выделенный комментарий, в котором вы должны записать подробно условие задачи и указать, кто написал эту программу и когда.
Из разделов описаний имеется лишь один - раздел переменных. Он начинается со служебного слова Var. Мы описали три переменные: number1, number2, result. Все они переменные целого типа. Поэтому мы перечислили их через запятую, поставили двоеточие и указали тип переменных. Подобные объявления разделяются между собой точкой с запятой.
После описательной части идет раздел операторов, начинающийся со служебного слова Begin, после которого идут операторы языка.
Недостатком этой программы является то, что значения переменных постоянны. А нам нужно научиться писать такие программы, которые решают поставленные задачи в общем виде, т. е. для любых значений переменных. Для этого мы научимся запрашивать значения у пользователя, анализировать их и выдавать соответствующий результат.