
- •Содержание курса
- •Раздел 1. Базовые понятия информатики.
- •Раздел 2. Техническое и программное обеспечение.
- •Раздел 3. Средства обработки информации.
- •Раздел 4. Телекоммуникационные технологии.
- •Раздел 5. Базовые понятия алгоритмизации и программирования.
- •Раздел 6. Основы программирования.
- •Раздел 7. Прикладное программирование.
- •Раздел 1. Базовые понятия информатики
- •Тема 1. Информация как основной объект изучения информатики
- •Тема 2. Информационные процессы
- •Тема 3. Социально-экономические предпосылки развития информационно-вычислительной техники (ивт).
- •Раздел 2. Техническое и программное обеспечение.
- •Тема 4. Арифметические основы эвм
- •Тема 5. Физические основы эвм.
- •Тема 6. Программное обеспечение эвм
- •Тема 7. Специальное и прикладное программное обеспечение пэвм.
- •Раздел 3. Средства обработки информации.
- •Тема 8. Технологии обработки текстовой информации.
- •Тема 9. Технологии обработки графической информации
- •Тема 10. Технологии обработки числовой информации.
- •Тема 11. Организация информационных систем Понятие базы данных
- •Тема 12. Технологии мультимедиа.
- •Раздел 4. Телекоммуникационные технологии.
- •Тема 13. Сетевые технологии
- •Раздел 5. Базовые понятия алгоритмизации и программирования.
- •Тема 14. Алгоритмизация в профессиональной деятельности экономиста
- •Тема 15. Алгоритмы и исполнители
- •Раздел 6. Основы программирования.
- •Тема 16. Основные алгоритмические структуры обработки экономической информации
- •Тема 17. Организация и использование подпрограмм
- •Тема 18. Алгоритмизация процесса обработки табличной информации. Работа с числовыми массивами.
- •Тема 19. Алгоритмизация обработки строковой информации. Обработка записей.
- •Тема 20. Алгоритмизация обработки графической информации
Тема 19. Алгоритмизация обработки строковой информации. Обработка записей.
Для работы с символьной информацией в ТР используют новый тип данных - строковый, именуемый ключевым словом STRING (или просто строка). Этот тип данных во многом похож на одномерный массив символов (Array[0..N] of char), но длина строки (максимальное количество символов N ограничивается числом 255). Значение N определяется при объявлении типа STRING(N) и может быть любой константой порядкового типа, но не больше 255. Значение N при объявлении типа STRING можно не указывать: в этом случае длина строки принимается равной 255 символам.
Строка в ТР трактуется как цепочка символов и к любому символу в строке можно обратиться по адресу (индексу), подобно одномерным массивам типа Array[0..N] of char. Самый первый байт в строке, имеющий адрес 0 (ноль), содержит код, равный числу символов в строке (длине строки).
Например, дана строка, имеющая следующее описание:
Var St:string;
Тогда длину строки St можно определить как значение функции Ord(St[0]).
Значением строки может быть любая последовательность символов, заключенная в одинарные кавычки (апострофы). Можно присваивать строке пустое значение, обозначаемое как '' (две одинарные кавычки подряд). При попытке записать в переменную строку длиннее, чем задано в описании, "лишняя" часть будет отсечена.
Строки можно присваивать, сливать и сравнивать.
Например:
Var st1,st2,st3,sts:string;
Begin
. . .
{ Операции присваивания}
st1:='Фамилия';
st2:='Имя';
st3:='Отчество';
{ Операция слияния}
sto:=st1+' '+st2+' '+st3;
{ В результате в строке sto будет 'Фамилия Имя Отчество'}
End; . . .
Сравнение строк основывается на порядке расположения символов в таблице ASCII. Например:
'abcd' = 'abcd' - результат сравнения True (истина);
'abc'<'bcd' так как код символа 'a' меньше кода символа 'b' и т.п.
Для работе со строками в ТР разработан ряд стандартных процедур и функций.
Первоначально любая описанная в разделе Var строка содержит "мусор" и рекомендуется инициализировать (заполнять) строки пустыми значениями или чем-либо другим. Для заполнения достаточно длинных строк одинаковыми символами используется встроенная процедура FillChar, например:
Var S:string[80];
Begin . . .
FillChar(S[1],80,' '); {Заполнение строки пробелами}
S[0]:=Chr(80); {Занесение кода длины строки}
. . .
End;
Длину строки можно определить также, используя встроенную функцию Length(S), где S - строка типа String.
В ряде случаев возникает необходимость преобразования числовых значений в строку и наоборот. Для этого можно использовать две процедуры:
1) STR(X,S) - преобразует числовое значение X в строковое S. Возможно задание формата для Х в виде: X:F:n (для вещественных чисел, где F - общее число позиций выделяемых под число, включая десятичную точку, а n - число знаков в дробной части) или X:F (для целых чисел). Эта функция чаще всего используется при работе с процедурами модуля GRAPH. Например:
STR(55,s); - строковая переменная s принимает значение, равное '55'.
2) VAL(S,Х,ErrCode) - преобразует строку S в числовое значение, если это возможно. Параметр ErrCode содержит ноль, если преобразование прошло успешно, и тогда в Х помещается результат преобразования, в противном случае он содержит номер позиции в строке S, где обнаружен ошибочный символ. Например:
Val('125',K,kod) - в результате выполнения этой процедуры переменная К получает целое значение, равное 125, параметр kod=0;
Val(' 1.05',M,code) - M=1.05, code=0;
Val('100, ',N,code) - это ошибочный вызов, т.к. в исходной строке на 4-й позиции располагается недопустимый для числа символ ',' и поэтому параметр code=4, а переменная N остается без изменения.
Кроме перечисленных, в ТР имеется еще 5 функций и процедур:
1) Concat (S1,S2,…,Sn) -функция, результат которой равен слиянию строк S1,S2,…,Sn. Например: Ssum:=Concat(s1,s2,s3).
2) Copy (S,Start,L) - функция, результатом которой является подстрока длиной L, начинающаяся с позиции Start строки S. Например: Stcop:=Copy('TTTx1+++',4,2) - результатом является подстрока Stcop='x1'.
3) Delete (S,Start,L) - процедура, которая удаляет из S подстроку длиной L, начиная с позиции Start в строке S.
Insert (S,Subs,Start) - процедура, которая вставляет подстроку Subs в строку S начиная с позиции Start строки S. Например:
S:='Фамилия Адрес';
Insert(S,' Имя Отчество',9);
В результате строка S будет иметь вид: 'Фамилия Имя Отчество Адрес';
Pos(Subs,S) - функция поиска вхождения подстроки Subs в строку S;
результатом поиска будет номер (адрес) первого символа подстроки Subs в S, если заданная подстрока найдена, или 0, если подстроки в строке нет.
Множества
Под множеством в языке Паскаль понимают ограниченный неупорядоченный набор различных элементов одинакового типа, логически связанных друг с другом. Количество элементов, входящих в множество, может меняться в пределах от 0 до 255. Множество, не содержащее элементов, называется пустым. Множество имеет имя. Тип элементов, входящих в множество, называется базовым. В качестве базового типа можно использовать любой порядковый тип, кроме Word, Integer, Longint.
Множества должны быть объявлены либо в разделе Var, либо в разделах Type и Var, одновременно:
Var Имя множества:Set of базовый тип;
или
Type Имя типа=Set of базовый тип;
Var Имя множества:Имя типа;
Например:
Type
TM=Set of 1..100;
TS=Set of 'a'..'z';
Var Mch:TM; {Множество целых чисел от 1 до 100}
MSym:TS; {Множество строчных латинских букв}
M: Set of 1..10; {Множество целых чисел от 1 до 10}
Значения переменных множества задаются в разделе операторов с помощью конструктора множества, который представляет собой список элементов базового типа, заключенный в квадратные скобки.
Например:
Var M1,M2,M3:set of 1..99;
Begin . . .
M1:=[]; { Множество пустое}
M2:=[1,3,5,7,9]; { Множество нечетных чисел в первом десятке}
M3:=[2,4,6,8]; { Множество четных чисел в первом десятке}
. . .
End.
В качестве элементов в изображении множеств допускается использовать константы и выражения, тип которых совместим с базовым типом.
Типизированная константа - множество задается в виде правильного конструктора множества, например:
Type
Type_month=(Jn,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec);
TDays=Set of 1..31;
Tmonth=Set of 1..12;
Tsym=Set of 'A'..'Z';
Tmno=Set of Type_month;
Const
SymMno:Tsym=['A','E','I','O','U']; {подмножество гласных букв}
DaysMno:TDays=[1,8,15,22,29]; {подмножество выходных дней месяца}
Spring_Mes:Tmonth=[3,4,5]; {подмножество весенних месяцев года}
Spring_Month:Tmno=[Mar,Apr,May]; {то же, что и предыдущее}
Над множествами определены следующие операции:
- пересечение множеств: результат содержит элементы, общие для обоих множеств. Например: пусть имеется описание:
Var S1,S2,S3,S4,S5:Set of 1..10;
Begin
S1:=[1,3,4,6];
S2:=[2,4,5,1];
S3:=S1*S2; - в S3 будет содержаться [1,4].
- объединение множеств : результат содержит элементы первого множества, дополненные недостающими элементами из второго множества:
S4:=S1+S2; - в S4 будет содержаться [1,3,4,6,2,5].
- разность множеств: результат содержит элементы из первого множества, которые не принадлежат второму:
S5:=S1-S2; - в S5 будет содержаться [3,6].
- проверка эквивалентности (или равенства): возвращает TRUE, если оба множества эквивалентны, т.е. содержат все одинаковые элементы.
<> - проверка неэквивалентности (или неравенства): возвращает TRUE, если оба множества неэквивалентны, т.е. содержат неодинаковые элементы.
<= - проверка вхождения: возвращает TRUE, если первое множество включено во второе (т.е. все элементы первого множества присутствуют также и во втором).
>= - проверка вхождения: возвращает TRUE, если второе множество включено в первое.
IN - проверка принадлежности элемента множеству. Эта операция возвращает результат TRUE, если элемент (или выражение), стоящий слева принадлежит множеству, указанному справа.
Дополнительно к этим операциям можно использовать две процедуры:
Include - включает новый элемент во множество: Include(M,elem);
где М - множество элементов некоторого базового типа, а elem - элемент того же типа, который необходимо включить в множество М.
Exclude - исключает элемент из множества: Exclude(M,elem).
В отличие от операций "+" и "-", реализующих аналогичные действия над двумя множествами, эти процедуры оптимизированы для работыс одиночными элементами множества и поэтому отличаются высокой скоростью выполнения.
Основным достоинством использования множеств является экономия памяти: внутренне устройство множества таково, что каждому его элементу ставится в соответствие один двоичный разряд (один бит). Если элемент включен в множество, то соотвествующий разряд имеет значение 1, в противном случае - 0. Минимальной единицей памяти является 1 байт, содержащий 8 бит, поэтому для хранения множества мощностью 256 элементов выделяется память 32 смежных байта.
Рассмотрим работу с множествами на следующем примере.
Из множества целых чисел от 1 до 20 выделить:
множество чисел, делящихся на 2 и 3 одновременно;
множество чисел, делящихся на 2 или на 3.
Первая задача соответствует нахождению пересечения множеств чисел, одно из которых содержит числа, делящиеся на 2, а другое на 3. Вторая - объединению этих двух множеств.
Обозначим множество чисел, делящихся на 2 через М2; множество чисел, делящихся на 3 через М3; множество чисел, делящихся на 2 и 3 через М2and3; множество чисел, делящихся на 2 или 3 через М2or3.
Записи
Запись - это структура данных, состоящая их фиксированного числа компонентов, называемых полями. Запись имеет имя. Каждое поле записи также имеет имя. Обращение к любому элементу записи осуществляется по составному имени, имеющему вид:
Имя записи.Имя поля
В отличие от массива компоненты (поля или элементы) записи могут быть различного типа. Записи удобно использовать в тех случаях, когда необходимо описать атрибуты (характеристики или свойства) одного объекта, имеющие различный тип.
Запись может быть объявлена в разделе Var или в разделах Type и Var, одновременно.
1. Var Имя записи:RECORD
Имя поля 1:тип;
Имя поля 2:тип;
. . .
Имя поля n:тип
END;
или
2. Type Имя типа для записи=RECORD
Имя поля 1:тип;
Имя поля 2:тип;
. . .
Имя поля n:тип
END;
Var Имя записи:Имя типа для записи;
Второй способ описания более предпочтителен, будем использовать его.
Например, пусть необходимо описать список студентов, имеющий следующую структуру:
№ п/п |
Фамилия Имя Отчество |
Факультет |
Группа |
Экзаменационные оценки Физика Математика Программиров |
Описание представленной структуры будет иметь следующий вид:
Type
T_Stud=Record
Nom:word;
FIO:string[40];
Fac:string[5];
Group:string[6];
Ball:array[1..3] of byte;
End;
Var Stud : T_Stud; {Описание одной записи}
Записи могут быть составными частями массивов или других записей. Так для описания всего списка студентов, состоящего, допустим, из 1000 записей необходимо записать:
Spisok:Array[1..1000] of T_Stud; {Описание массива из записей}
Элементы записи (поля) используются в программе как обычные переменные данного типа. Чтобы обратиться к i - той записи представленного списка (массива Spisok) и к его полю FIO необходимо записать: Spisok[i].FIO. Для того, чтобы обратиться к той же записи и выбрать оценку по математике необходимо записать Spisok[i].Ball[2].
Для упрощения обращения к элементам записи используется оператор присоединения
WITH Имя записи DO
Begin
Операторы обращения к элементам записи
End;
Для нашего примера используем этот оператор при суммировании трех оценок i-го студента:
. . .
Sum:=0;
With Spisok[i] do
Begin
For j:=1 to 3 do
Sum:=Sum+Ball[j];
. . .
End;
Рассмотрим пример использования записи внутри другой записи.
Пусть имеется структура:
-
№ п/п
Ф.И.О.
Дата рождения
Пол
Национальность
Причем поле дата рождения состоит из полей: число, месяц, год. Тогда описание в программе будет иметь вид:
Type
Date=Record
Days:1..31;
Month:1..12;
Year:1900..2000;
End;
Tzap=Record
Nom:word;
FIO:string[40];
Birthday:Date;
Pol:(Man,Woman);
Nac:string[20];
End;
Var Zap:Tzap;
Для того чтобы обратиться к элементам записи дата рождения, необходимо записать:
D:=Zap. Birthday.Days;
M:= Zap. Birthday.Month;
G:= Zap. Birthday.Year;
или с использованием оператора присоединения
With Zap. Birthday do
Begin
D:=Days; M:=month; G:=Year;
End;
Типизированные константы - записи имеют вид:
Имя константы : Тип = (Список значений полей записи);
Список значений полей записи - это список из последовательностей вида: Имя поля: Константа;
Например:
1) Type
Tdate=Record
Day:1..31;
Month:1..12;
Year:1000..2000;
End;
Const Date:Tdate=(day:25;month:10;year:1999);
2) Type
Tkoord=record
Xk,Ykreal;
end;
Tmas=array[1..3] of Tkoord;
Const Maskoord:Tmas=((Xk:0.0; Yk:0.0),
Xk:1.5; Yk:2.5),
Xk:3.0; Yk:4.5));