
- •Утверждаю Зам.Директора по учебной работе
- •Основы Алгоритмизации и программирования учебно-методическое пособие
- •220301 Автоматизированные системы обработки информации и правления
- •Введение
- •Основные этапы решения задач на эвм
- •Глава 1 способы записи алгоритма
- •1.1 Алгоритм и его свойства
- •Схемы алгоритма
- •1.2 Структуры алгоритмов
- •1.2.1 Алгоритм линейной структуры
- •1.2.2 Алгоритм разветвляющейся структуры
- •1.2.3 Алгоритм циклической структуры
- •1.2.4 Алгоритм со структурой итерационных циклов
- •1.2.5 Алгоритм со структурой вложенных циклов
- •Глава 2 программа на языке высокого уровня
- •2.1 Системы программирования
- •2.2 Характеристика языка программирования Паскаль
- •2.3 Алфавит и структура программы на Паскале Алфавит программы
- •Структура программы
- •Глава 3 Стандартные типы данных
- •3.1 Данные. Типы
- •3.2 Вещественные типы
- •3.3 Целочисленные типы
- •3.4 Символьный тип
- •3.5 Логический тип
- •4 Представление основных структур программирования: итерация, ветвление, повторение
- •4.1 Линейная структура (следование)
- •Var X,y,f: real;
- •4.2 Разветвляющая структура (ветвление)
- •4.3 Циклическая структура (повторение)
- •4.3.1 Оператор цикла с параметром
- •I : Integrer; {номер числа }
- •4.3.2 Оператор цикла с постусловием
- •I,n: integer;
- •4.3.3 Оператор цикла с предусловием
- •4.3.4 Итерационные циклы
- •Var r,a:real;
- •Приближенное вычисление функций
- •Решение уравнений приближенными методами
- •Метод деления отрезка пополам
- •Xsl, Xpr, a, b, e, y1, y2, Lev, Prav, y: Real;
- •Метод Ньютона
- •Метод прохождения отрезка с переменным шагом
- •Вычисление определенных интегралов
- •1. Метод прямоугольников
- •X: Real;
- •2. Метод трапеций
- •X: Real;
- •Глава 5 Типы данных, определяемые пользователем
- •5.1 Пользовательский тип данных
- •5.1.1 Типизированные константы
- •5.1.2 Перечисляемый тип
- •I:1..6; loto: num;
- •5.2 Массивы
- •I : integer;
- •5.2.1. Работа с одномерными массивами
- •I,sum : integer;
- •Var a: array [1..N] of real;
- •Var I,s,r: integer;
- •I : list;
- •I : integer;
- •X : mass;
- •I, j, p, n, m, k:integer;
- •I, j, k, nd : integer;
- •Xmin : real;
- •X : mass;
- •Var I, j, nd : integer;
- •X : mass;
- •5.2.2 Работа с двумерными массивами( матицы)
- •Var I,j,n : integer;
- •I,j,n,m : integer;
- •5.2.3 Сортировка массивов
- •Сортировка методом "пузырька"
- •X : Array [1..Nmax] Of Real;
- •X : Array [1..Nmax] Of Real;
- •Сортировка выбором
- •Обменная сортировка
- •Var m:array[1..1000] of integer;
- •I,z,n:integer; Key:byte;
- •Сортировка слиянием
- •Var { Описание массивов и переменных}
- •X, y: array[1..1000] of integer;
- •5.3 Строковые типы
- •Var s: string[10];
- •5.3.1 Операции над строками
- •5.3.2 Стандартные процедуры и функции для строк
- •Функция Length
- •Функция Upcase
- •Функция Copy
- •Функция Роs
- •I, n, p: integer;
- •I: integer;
- •I: integer;
- •Insert (word2, text, I);
- •Insert (chr (k-32), t, I);
- •Insert (chr (k-80), t, I);
- •Insert (‘е’, t, I);
- •Глава 6 Процедуры и функции
- •6.1 Процедуры
- •I : Integer;
- •I, n: integer;
- •Input _ mas (k, n);
- •I,n : Integer;
- •I,k : Integer;
- •6.2 Функции
- •I:Integer;
- •2) Массивы;
- •I,n : Integer;
- •I : Integer;
- •I,tn,tk:Real;
- •Глава 7 Программирование рекурсивных алгоритмов
- •7.1 Понятие рекурсии
- •7.2 Техника построения рекурсивных алгоритмов
- •7.3 Формы рекурсий
- •If Prim(I) then
- •7.4 Рекурсия и итерация
- •7.5 Программирование с использованием рекурсии
- •Var p: Integer;
- •Var X, y: Integer; begin
- •Var z: Real; begin
- •Var I:integer; j:real;
- •Глава 8 Файлы
- •8.1 Текстовые файлы
- •I,n : Integer; {Вспомогательные переменные}
- •8.2 Типизированные файлы
- •X,m,s : Real;
- •8.3 Нетипизированные файлы
- •Глава 9 Записи
- •9.1 Описание записи
- •I: integer;
- •9.2 Оператор присоединения
- •I, j, k, m : integer;
- •X: real;
- •9.3 Вложенные записи
- •9.4 Записи с вариантами
- •Information: record
- •I, k, n : integer;
- •Vedom : Array [1..Nmax] Of Stud;
- •I,j : Integer;
- •Vedom : File Of Stud;
- •Vedom : File Of Stud;
- •I,j,kdv,k2 : Integer;
- •If Not Eof (Ftel) Then
- •If Not Eof(Ftel) then
- •If Not Eof(FilComp) then
- •Глава 10 Динамические структуры данных
- •10.1 Распределение памяти при выполнении программ
- •Верхняя граница памяти ms-dos
- •10.2 Ссылочные переменные
- •10.3 Процедуры управления кучей
- •10.4 Использование переменных ссылочного типа
- •I: Integer;
- •I, k : Integer;
- •Val(b, k, code);{Превратили второй символ в ч исло}
- •10.5 Списки
- •Var Ch : Char;
- •Var Ch : Char;
- •10.6 Деревья
- •10.7 Константы ссылочного типа
- •Глава 11. Язык Паскаль. Графический модуль Graph Список используемой литературы Основная
- •Дополнительная
5.3 Строковые типы
Данные строкового типа - это последовательность символов переменной длины. Такой тип еще называют типом string. Он во многом похож на одномерный массив символов, однако, в отличие от последнего, количество символов в строке-переменной может меняться от 0 до N, где N -максимальное количество символов в строке.
Описание строкового типа состоит из ключевого слова string, после которого в квадратных скобках указано максимальное количество символов строк» данного типа. Это количество может выражаться с помощью целой константы или имени целой константы. Если максимальный размер строки не указав, то он автоматически принимается равным 255 - максимально возможная длина строки. (Существуют еще ASCIIZ-строки, длина которых может достигать 65536 символов, но для работы с такими строками нужна особая директива компилятору). Длина переменной такого типа может динамически изменяться между 1 и значением константы. Символы в строке следует воспринимать как пронумерованные в интервале от 1 до значения константы.
Пример:
tyре
cities = string [20];
names = string [12].
Переменные типа cities - строкового типа, то есть строки символов, состоящие максимально из 20 символов. Переменные типа names максимально могут состоять из 12 символов. Переменные можно объявить следующим образом:
var
ci: array [1..20] of char;
na: array [1..12] of char.
В этом случае говорят, что ci и nа - символьные вектора. Символьные вектора можно рассматривать как строковые переменные, представляющие последовательности постоянной длины. Благодаря такой интерпретации имена cимвольных векторов и имена их элементов могут использоваться в строковых выражениях там, где могут использоваться имена строковых переменных.
Каждая величина строкового типа занимает в памяти на один байт больше, чем максимальное количество символов в строке данного типа. В дополнительном байте хранится информация о текущей длине строки. Если n - текущая длина строки, то в компоненте 0 помещается номер n последнего символа относительно начала строки.
Тип данных string предназначен для обработки строк. С данными типа string связан целый набор операций. Строки могут выводиться на экран монитора посредством стандартных процедур Write и Writeln и вводиться с помощью стандартных процедур Read и Readln. Следующая программа демонстрирует считывание строки.
program string_test;
Var s: string[10];
begin
writeln('Задайте несколько символов');
readln (s);
writeln(s,' длина:' , ord(s[0]):5);
end.
В этом примере при вводе можно записать сколько угодно символов, но с помощью readln(s) можно считать максимум 10 символов, так как по описанию переменная s может содержать максимум 10 символов. Прочие символы игнорируются. Считываемых символов может быть и меньше 10.
5.3.1 Операции над строками
Строки можно присваивать, сливать и сравнивать.
Присваивание последовательности символов строковым переменным осуществляется с помощью оператора присваивания. С правой стороны оператора присваивания может находиться произвольное строковое выражение, а с левой имя строковой переменной.
В Турбо Паскале существуют два пути обработки переменных типа string. Первый путь предполагает обработку всей строки как единого целого, то есть единого объекта. Второй путь рассматривает строку как составной объект, состоящий из отдельных символов, то есть элементов типа char, которые при обработке доступны каждый в отдельности. Так, первый путь предоставляет возможность присвоения строковой переменной за одну операцию значения целой строки символов:
str_1 := 'Это строка!'.
Присваиваемое значение строки, так же как и отдельный символ типа char, заключается в апострофы. Если апострофы опущены, то компилятор рассматривает приведенный фрагмент текста как числовую величину или как идентификатор.
Второй подход обеспечивает доступ к отдельным символам строки по номеру их позиции:
str_1 [1] = 'Э'; str_1 [2] :='т'; sfr_1 [3] := 'о'; str_1 [4] :=' ';
Str_1 [5] = 'с'; str_1 [6] := 'т'; str_1 [7] := 'p'; str_1 [7] := 'о';
str_1 [8] = 'к';str_1 [9] := 'a'; str_1 [10] := '!'
Переменная str_1 приобретает то же самое значение, что и при первом подходе. Для доступа к отдельному символу в строке необходимо указать имя строки и в квадратных скобках номер позиции элемента (символа) в строке. При этом по отношению к отдельному символу строки возможны все те же операции, что и к переменной типа char. Необходимо напомнить, что, кроме классической записи символьной переменной в одинарных кавычках, Турбо Паскаль вводит еще две формы. Одна из них - представление символа его кодом ASCII с помощью специального префикса #, вторая, для управляющих символов, - значок " и буква алфавита с тем же номером (см. главу 1). При необходимости включения в строку управляющих кодов можно пользоваться "клавиатурными" обозначениями. В этом случае значение состоит как бы из склеенных кусков:
^G‘Пocлe сигнала нажмите '^J’ клавишу пробела '
В такой записи не должно быть пробелов вне кавычек. Если длина строки справа больше максимального размера переменной, то присваивание происходит слева направо, а избыточные символы опускаются.
Пример.
type
name = string [7]
var
fname, Iname : name;
begin
fname := 'Наталья';
Iname := 'Кучинская';
write (fname,' ',Iname)
end.
В результате выполнения программы будет выведено: Наталья Кучинск, так как максимальная длина строки 7. Согласно описанию
var a: string [5]; b: string [10];
можно присвоить значение b := а, хотя типы переменных различны. При присвоении а := b, в "а" запишутся только первые 5 символов строки "b".
Объединение двух строк в одну может быть осуществлено с помощью оператора конкатенации. Этот оператор записывается с помощью знака + (плюс). Объединенная строка представляет собой строку, состоящую из всех символов первой строки и следующих за ними всех символов второй строки. Например:
Выражение Результат
'adam' + 'eva' 'adameva'
'5' + '.' + '4' '5.4'
‘Это' + ' ' + 'строка' + '!' 'Это строка!'
Произвольные пары строк могут сравниваться с помощью операторов отношений. Две строки сравниваются посимвольно слева направо. При обнаружении первого несовпадающего символа принимается решение в соответствии с таблицей кодов ASCII. Отношение 'balkon' > 'balken' дает результат true, так как символ 'о' стоит в таблице кодов после символа 'е'. Отношение 'Pascal' = 'pascal' дает результат false, так как у прописной буквы код больше, чем у заглавной. Символ '+' стоит в таблице кодов перед символом '-', поэтому сравнение '+' < '-' дает в результате true.
Если две сравниваемые строки имеют различную длину, но совпадают вплоть до последнего символа более короткой строки, последняя строка считается меньшей. Две строки считаются совпадающими только тогда, когда они имеют одинаковую длину и все их символы совпадают.