
- •Введение
- •Глава 1. Структурное программирование
- •1.1 Основные определения
- •1.2 Три основных действия
- •1.2.1 Последовательность
- •1.2.2 Выбор
- •1.2.3 Цикл
- •1.3. Структурный подход к решению задач
- •Задание
- •1.4. Организация хранения и обработки данных
- •1.4.1 Записи и списки
- •Задание
- •1.4.2 Очередь
- •Задание
- •1.4.3 Стек
- •Задание
- •1.5 Структурное программирование.
- •2. Программирование на языке паскаль
- •2.1. Краткая история эвм и языки программирования
- •Задание
- •2.2. Интегрированная среда borland pascal
- •2.2.1. Краткая характеристика. Запуск программы
- •2.1.2. Основы работы в редакторе Открытие нового окна
- •Завершение работы со средой
- •Задание
- •«Горячие» клавиши интегрированной среды
- •2.3. Структура программы
- •2.3.1.Основные положения
- •2.3.2. Понятие идентификатора
- •2.3.3. Первая программа
- •2.3.4. Описание подпрограммы (процедуры).
- •2.3.4. Строковый тип данных
- •2.3.5. Процедуры ввода и вывода данных
- •Задание
- •2.4. Программа калькулятор.
- •2.4.1. Тип целые и вещественный.
- •2.4.2. Переменные вещественного типа
- •Задание
- •2.5. Улучшенный калькулятор
- •2.5.1. Операторы выбора
- •Булевские (логические) операции
- •Операции отношения
- •Оператор if … then
- •Оператор case
- •2.5.2. Основные отличия применения операторов выбора. Перечисляемый тип. Интервальный тип.
- •Задание
- •2.6. Улучшенный каЛьКулятор (продолжение)
- •2.6.1. Оператор цикла с постусловием (проверка на ноль)
- •2.6.2. Оператор цикла с предусловием
- •2.6.3. Оператор цикла со счетчиком (параметром)
- •Задание
- •2.7. Переменные типа массив
- •2.7.1. Виды массивов
- •2.7.2.Описание массива
- •2.7.3.Нахождение максимального элемента в массиве
- •Задание
- •2.7.4. Строковая переменная (продолжение)
- •Задание
- •2.7.5. Строковая переменная как массив
- •Мама мыла раму
- •Задание
- •2.7.6. Описание функции
- •Задание
Задание
1. С какими стандартными функциями для работы со строковыми переменными вы познакомились в данном параграфе.
2. С какими стандартными процедурами для работы со строковыми переменными вы познакомились в данном параграфе.
3. На примере использования функций и процедур для работы со строковыми переменными объясните, чем отличается функция от процедуры.
4. Напишите программу, которая находит количество вхождений подстроки Sub в строку Stroka. Исходная строка и подстрока вводится с клавиатуры. Программу сохраните в файле "Primer10.pas".
5. Напишите программу, которая считывает текст исходной строки с клавиатуры и выводит ее на экран в обратном порядке. Программу сохраните в файле "Primer11.pas".
2.7.5. Строковая переменная как массив
Рассматривая понятие «массив» мы выяснили, что массивом называют пронумерованный список, элементы которого однотипны по структуре и способу использования. Рассмотрим некоторую строку:
Мама мыла раму
Данная строка состоит из 14 символов (включая символ "пробел"), Каждый символ в этой строке стоит на определенном, фиксированном месте. Каждая буква в строке и символы пробела имеют тип-символ, то есть они однотипны по структуре. Все они используются для написания строки. Это значит, что они однотипны и по способу использования. Таким образом, строка представляет собой особую форму одномерного массива, элементами которого являются символы. В нашем случае строка состоит из четырнадцати элементов, поэтому к элементам строки можно обращаться используя их местоположение в строке. Пример:
Stroka:='Мама мыла раму';
A:=Stroka[4];
Write(Stroka[4], Stroka[3], Stroka[2], Stroka[1]);
Результатом будет: переменная с именем А примет значение 'а', а на экран будет выведена строка амаМ. В данном случае мы использовали свойства строки как массива символов. Однако объявление переменной
Stroka : string; и Stroka :array [1..255] of char;
Не являются равноценными.
При описании типа переменной как строковый тип, мы выделяем в памяти место, которое позволяет хранить до 255 символов. Если нам заранее известно, что наша строковая величина не будет превышать определенной длины, например, будет не более 20 символов, то для экономии памяти можно в блоке описания переменных объявить ее как:
Stroka : string[20];
Таким образом, для хранения данной переменной будет выделено 21 байт памяти вместо 256 байт.
Внимание! Вопрос: Почему память выделяется для 255 или для 20 символов как в последнем случае, а занимает на один байт больше?
Проведем следующий эксперимент: Напишем программу, которая считывает с клавиатуры некоторую строку.
Program Primer_12;
var
Stroka : string;
Procedure Init;
begin
Readln(Stroka);
End;
Procedure Exi;
begin
Writeln(Stroka[0]);
End;
Begin
Init;
Exi;
end.
Запустите программу на выполнение (при вводе ведите достаточно длинную строку) и посмотрите результат.
Если Вы вели строку содержащую 33 символа, то на экране появится символ ’!’, если длина строки веденной Вами была 48 символов, то на экране появится символ ’0’. Таким образом в зависимости от длины строки на экран будет выводится тот или иной символ, но для строк одинаковой длины символы всегда будут одинаковы. Для того, что бы выяснить, что же обозначает этот символ, воспользуемся стандартной функцией Ord(х). Данная функция возвращает порядковый номер для значений перечисляемого типа, здесь х представляет собой значение перечисляемого типа. В процедуре Exi вместо Writeln(Stroka[0]); запишем Writeln(Ord(Stroka[0])); . Опять запустим программу на выполнение. В результате на экран будет выведено число равное длине строки, которую Вы введете с клавиатуры.
Оказывается в элементе с нулевым индексом, в строковой переменой хранится символ ASII код которого и равен длине строки. Вот поэтому и выделяется на один байт памяти больше, то есть в этом байте и хранится информация о длине строки.