- •Программирование и алгоритмические языки в историческом аспекте
- •Введение в Паскаль
- •Алфавит Паскаля
- •Служебные (ключевые) слова
- •Константы
- •Запись чисел
- •Переменные
- •Типы данных
- •Стандартные функции
- •Выражения
- •Выражения целого типа
- •Выражения вещественного типа
- •3,61·109 X – 526,237 3.61e9 * X – 526.237 * Sqrt(0.2*y) Выражения логического типа
- •Операторы присваивания
- •Программа и этапы ее разработки. Структура программы
- •Var X, s : Word;
- •Комментарии
- •Ввод данных
- •Вывод данных
- •Бесформатный способ вывода
- •±D.DdddddddddE±dd
- •Форматный способ вывода
- •Структуры данных
- •Массивы
- •Var a : Array [1..2,1..3] Of Integer;
- •Error 201: Range check error
- •Var a : tMatrix;
- •Var Doska : Array [‘a’..’h’,1..8] Of Char;
- •Var Roma : Array [1..787] Of Word;
- •Var Roma : Array [-754..33] Of Word;
- •Var Ozenka : Array [1..2,1..3] Of Word;
- •Var Ozenka : Array [Fam, Predm] Of 2..5;
- •Var a: Array [1..3, 1..4, 1..5] Of Integer;
- •Var I, j: Byte;
- •Алгоритм и его свойства
- •Схемы алгоритмов
- •Базовые структуры
- •Цепочка
- •Ветвления
- •Альтернатива
- •If (условие)
- •Вариант 2 – с использованием операции конъюнкция
- •Часто встречающиеся ошибки программирования:
- •Var X, y, s_left, s_right, alfa, sin_alfa, segment : Real;
- •Переключатель
- •Часто встречающиеся ошибки программирования:
- •Бесконечные циклы
- •Циклы с предусловием
- •Var I, s : Word;
- •Var I, s, n : Word;
- •Программа
- •Var n, min, max, s, count: Word;
- •Часто встречающиеся ошибки программирования:
- •Циклы с постусловием
- •Var I, s : Word;
- •Var I, s, n : Word;
- •Программа
- •Var n,min,max,s,count: Word;
- •Var k : Word;
- •X, y, s : Real;
- •Часто встречающиеся ошибки программирования:
- •Циклы с параметром
- •Действия цикла:
- •Var n, s : Word;
- •Var I, s : Word;
- •Примеры:
- •Var I, j, k : Word;
- •Var I, i_max, vector_max : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, s : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, k, m : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, s, count : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, k, min, max, i_min, i_max : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, k, i_otr, i_pol : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, k, posl : Integer;
- •Vector : Array [1..N] Of Integer;
- •Var I, j, t : Integer;
- •Vector : Array [1..K] Of Integer;
- •Var I, j, t : Integer;
- •Vector : Array [1..K] Of Integer;
- •Var I, j, k : Integer;
- •Var I, j, k, posl : Integer;
- •Var I, j, k, m : Integer;
- •Var I, j, k, i_max, j_min : Word;
- •Var I, j, t : Integer;
- •Vector : Array [1..K] Of Integer;
- •Var I, j, m, t : Integer;
- •Vector : Array [1..K] Of Integer;
- •Var I, j, b, c : Word;
- •Часто встречающиеся ошибки программирования:
- •Множества
- •Var r : tSymb;
- •Основные операции со множествами
- •Процедуры для работы со множествами
- •Типизированные файлы
- •Var f_int : tFile_Int;
- •Var n : Integer;
- •Функции для работы с типизированными файлами
- •И процедуры:
- •Var n : Integer;
- •Текстовые файлы
- •Var f_text : tFile_text;
- •Программа:
- •Var stud_1 : tStudent;
- •Var student : tKadr;
- •Var coord : tCoord;
- •Ключ : ();
- •Подпрограммы
- •Подпрограммы-функции
- •Var p : Real;
- •Var s : Real;
- •Var I: Word;
- •Var a, b, c : Integer;
- •Var a, b, c : Integer;
- •Var a, b : Integer;
- •Var a, b, c: Integer;
- •Рекурсия
- •5 * 4 * Factorial(3)
- •5 * 4 * 3 * Factorial(2)
- •5 * 4 * 3 * 2 * Factorial(1)
- •Var k: Integer; Func_2
- •Var temp : Integer;
- •Особенности рекурсии:
- •Процедуры
- •Var I: Word;
- •Var I, i_min, i_max: Word;
- •Var I: Word;
- •Var I: Word;
- •Var I: Word;
- •Var I: Word;
- •Var I, j, k: Word;
- •Var I: Word;
- •Var I: Word;
- •Var I, j, k: Word;
- •Var I: Word;
- •Var I: Word;
- •Var I, j, k: Word;
- •Var I: Word;
- •Var I: Word;
- •Var I, j: Word;
- •Программные модули
- •Структура модуля
- •Interface
- •Implementation
- •Var f: Text;
- •Var p: Real;
- •Var temp: Real;
- •Компиляция модулей
- •Взаимное использование модулей
- •Особенности выполнения инициирующих разделов
- •Ссылки и динамические переменные
- •Var a, b: tPntint;
- •X, y: tPntchar;
- •Динамические структуры данных
- •Связные списки
- •Inf: Integer;
- •Var head, q : tPoint;
- •Inf: Integer;
- •Var head, q : tPoint;
- •Добавление нового элемента в список
- •Var head, q, r: tPoint;
- •Inf: Integer;
- •Var head, q, r : tPoint;
- •Удаление элемента из списка
- •Inf: Integer;
- •Var head, q, r : tPoint;
- •Сортированные списки
- •Var head, q, r, V: tPoint;
- •Inf: Integer;
- •Var head, q, r, V : tPoint;
- •Бинарные деревья
- •Var root, q, V: tRebro;
- •Интерфейс:
- •Var root, q, V : tRebro;
- •Поиск заданного узла в дереве
- •Var root, q, V : tRebro;
- •Удаление узла из дерева
- •Var root, q, V, r : tRebro;
- •Объектно-ориентированное программирование
- •Var X, y, dx, dy: Word;
- •Var x0, y0, dx, dy: Word;
- •Var x0, y0, dx, dy, radius: Word;
- •Var x0, y0, dx, dy, radius: Word;
- •Основы алгебры логики
- •Логическая функция не (отрицание)
- •Логическая функция и (конъюнкция – логическое умножение)
- •Логическая функция или (дизъюнкция – логическое сложение)
- •Логическое следование (импликация)
- •Логическое совпадение(эквивалентность)
- •Закон исключенного третьего
- •Закон противоречия
- •Закон двойного отрицания
- •Закон контрапозиции
- •Закон расширенной контрапозиции
- •Закон перестановки посылок
- •Закон силлогизма
- •Закон де Моргана
- •Минимизация формул алгебры логики
- •Алгебраическими методами минимизации
- •Табличными методами минимизации
- •Системы счисления
- •Двоичная система счисления
- •Восьмеричная система счисления
- •Шестнадцатеричная система счисления
- •Арифметические операции в двоичной системе счисления
- •1111 11 11 - Переносы
- •Арифметические операции в восьмеричной системе счисления
- •Арифметические операции в 16-ричной системе счисления
- •1. Ошибки при компиляции
- •2. Ошибки времени выполнения а) Ошибки системы ms-dos
- •Б)Ошибки ввода-вывода
- •В)Критические ошибки
- •Г)Фатальные ошибки
Программа:
Program File_2;
Uses CRT;
Var ocenka : 2..5; оценка
sr_ball : Real; средний балл
name : String[15]; фамилия или имя
nomer : String[10]; номер группы
f_text : Text; текстовый файл
Begin
ClrScr;
Assign(f_text, ‘d:\User\f_text.txt’);
ReWrite(f_text); открываем файл для записи
Write(‘Номер группы:’);
ReadLn(nomer); вводим номер группы
WriteLn(f_text, nomer); записываем его в файл
Write(‘Фамилия:’);
ReadLn(name); вводим фамилию
WriteLn(f_text, name); записываем ее в файл с новой строки
Write(‘Имя:’);
ReadLn(name); вводим имя
WriteLn(f_text, name); записываем его в файл с новой строки
Write(‘Оценка:’);
ReadLn(ocenka); вводим оценку
WriteLn(f_text, ocenka:3); записываем ее в файл с новой строки в 3 позициях
Write(‘Ср. балл:’);
ReadLn(sr_ball); вводим средний балл
WriteLn(f_text, sr_ball:6:2); записываем его в файл с новой строки в 6 позициях
Close(f_text); закрываем файл
ReadLn;
End.
Структура созданного файла:
ИС-09
Иванов
Иван
4
4.12
Внимание! Все данные желательно записывать в текстовый файл форматным способом.
Чтение данных из открытого для чтения файла осуществляется операторами:
Read( файловая переменная, имя переменной);
ReadLn( файловая переменная, имя переменной);
Во втором случае после чтения из файла значения переменной текстовый курсор переходит в начало новой строки (как на экране терминала).
Внимание! Переменная, указанная в операторах чтения, должна совпадать по типу со считываемым из файла значением.
Пример: прочитать из созданного ранее файла информацию и вывести ее на экран.
Программа:
Program File_3;
Uses CRT;
Var ocenka : 2..5; оценка
sr_ball : Real; средний балл
name : String[15]; фамилия или имя
nomer : String[10]; номер группы
f_text : Text; текстовый файл
Begin
ClrScr;
Assign(f_text, ‘d:\User\f_text.txt’);
ReSet(f_text); открываем файл для чтения
ReadLn(f_text, nomer); читаем из файла номер группы
WriteLn(nomer); выводим его на экран
ReadLn(f_text, name); читаем из файла фамилию
WriteLn(name); выводим ее на экран
ReadLn(f_text, name); читаем из файла имя
WriteLn(name); выводим его на экран
ReadLn(f_text, ocenka); читаем из файла оценку
WriteLn( ocenka:3); выводим ее на экран
ReadLn(f_text, sr_ball); читаем из файла средний балл
WriteLn( sr_ball:6:2); выводим его на экран
Close(f_text); закрываем файл
ReadLn;
End.
На экран будет выведено:
ИС-09
Иванов
Иван
4
4.12
Внимание! Функции и процедуры, используемые при работе с типизированными файлами (FileSize, FilePos, Seek, Truncate), для текстовых файлов не используются.
Сложнее работать с текстовыми файлами, в каждой строке которых записаны разнотипные данные.
Пример: создать текстовый файл baza.txt, в каждой строке которого хранить следующие данные:
-
номер учебной группы
-
фамилию студента
-
имя студента
-
его оценку по информатике
-
средний балл сдачи сессии
Другими словами, необходимо создать базу данных на основе текстового файла.
Заполнить эту базу данных информацией о нескольких студентах, конец ввода данных – вместо очередного номера группы просто нажать на клавишу ввода (ввести строку нулевой длины).
Интерфейс:
Номер группы: ИС-09
Фамилия: Иванов
Имя: Иван
Оценка:4
Ср. балл:4.12
Номер группы: ПО-09
Фамилия: Петров
Имя: Петр
Оценка:5
Ср. балл:4.27
Номер группы: ЗИ-09
Фамилия: Сидоров
Имя: Сидор
Оценка:3
Ср. балл:3.42
Номер группы:
Программа:
Program File_4;
Uses CRT;
Var ocenka : 2..5; оценка
sr_ball : Real; средний балл
name : String[15]; фамилия или имя
nomer : String[10]; номер группы
baza : Text; текстовый файл
Begin
ClrScr;
Assign(baza, ‘d:\User\baza.txt’);
ReWrite(baza); открываем файл для записи
Repeat
Write(‘Номер группы:’);
ReadLn(nomer); вводим номер группы
If (Length(nomer) = 0) если длина строки с номером группы равна нулю (сразу нажата клавиша ENTER),
Then Break; то выходим из цикла ввода
Write(baza, nomer:10); если нет, то записываем его в файл в 10 позициях (по описанию переменной nomer)
Write(‘Фамилия:’);
ReadLn(name); вводим фамилию
Write(baza, name:15); записываем ее в файл в той же строке в 15 позициях
Write(‘Имя:’);
ReadLn(name); вводим имя
Write(baza, name:15); записываем его в файл в той же строке в 15 позициях
Write(‘Оценка:’);
ReadLn(ocenka); вводим оценку
Write(baza, ocenka:3); записываем ее в файл в той же строке в 3 позициях
Write(‘Ср. балл:’);
ReadLn(sr_ball); вводим средний балл
WriteLn(baza, sr_ball:6:2); записываем его в файл в 6 позициях и переходим на новую строку
Until (False); псевдобесконечный цикл с постусловием
Close(baza); закрываем файл
ReadLn;
End.
Структура созданного файла:
ИС-09 Иванов Иван 4 4.12
ПО-09 Петров Петр 5 4.27
ЗИ-09 Сидоров Сидор 3 3.42

10 позиций 15 позиций 15 позиций 3 поз. 6 поз.
Внимание! Все данные необходимо записывать в текстовый файл форматным способом, иначе их нельзя будет прочитать из этого файла. Записываемые числовые данные необходимо разделять хотя бы одним пробелом.
В данном случае для записи в файл выделяется
-
для номера группы - 10 позиций,
-
для фамилии или имени - 15 позиций,
-
для оценки - 3 позиции,
-
для среднего балла - 6 позиций.
При чтении разнотипных данных из текстового файла, записанных в одной строке, необходимо учитывать следующие особенности:
-
строки читаются в соответствии с их описанием: если строка описана как String[10], то будут прочитаны ровно 10 позиций,
-
числа читаются до разделителя (пробела, запятой, признака конца строки),
-
в списке ввода оператора чтения Read (ReadLn) формат переменных не указывается.
Пример: прочитать из созданного ранее файла информацию и вывести ее на экран.
Программа:
Program File_3;
Uses CRT;
Var ocenka : 2..5; оценка
sr_ball : Real; средний балл
fam, name : String[15]; фамилия или имя
nomer : String[10]; номер группы
baza : Text; текстовый файл
Begin
ClrScr;
Assign(baza, ‘d:\User\baza.txt’);
ReSet(baza); открываем файл для чтения
While NOT(EOF(baza)) Do
Begin
ReadLn(baza, nomer, fam, name, ocenka, sr_ball); читаем из файла очередную строку с данными
WriteLn(nomer:10, fam:15, name:15, ocenka:3, sr_ball:6:2 ); выводим ее на экран
End;
Close(baza); закрываем файл
ReadLn;
End.
На экране появится:
ИС-09 Иванов Иван 4 4.12
ПО-09 Петров Петр 5 4.27
ЗИ-09 Сидоров Сидор 3 3.42
Конечно, правильное чтение данных из текстового файла возможно только тогда, когда мы точно знаем структуру этого файла.
Записи
На начальных этапах развития программирования, при решении математических, экономических или инженерных задач программисты, как правило, обходились десятком переменных, которые обрабатывались разными алгоритмами. С течением времени объемы обрабатываемых данных стали расти. Приходилось обрабатывать не один-два десятка чисел, а целые таблицы. К тому же таблицы стали содержать не только числовую, но и текстовую информацию. И тут на помощь пришли новые типы данных – массивы, строки, множества. С их помощью можно объединить несколько объектов под одним именем, а затем обращаться к ним поэлементно. Основное требование при создании таких структур – однотипность объединяемых объектов. Однако сложность многих реальных ситуаций требует для своего отражения более гибких средств программирования.
Практика показала, что для обработки больших совокупностей однотипных данных такая структура, как массив, очень полезна. Но массив полезен тогда, когда обрабатывается однотипная информация. Реальные задачи в большинстве своем имеют дело с обработкой данных различных типов: информация по кадрам, статистические данные, бухгалтерский учет, экономические задачи. В этих задачах существенно то, что совместно обрабатывается числовая и текстовая информация, причем, как правило, размерность обрабатываемых данных даже одного типа весьма различна. Например, для хранения данных об одном студенте (номер учебной группы, фамилия, имя, оценка по информатике, средний балл сдачи сессии) нельзя использовать один массив, так как эти данные разнотипны: номер группы, фамилия, имя – строки, оценка – целое, средний балл – вещественное. Конечно, можно использовать несколько массивов: один - для хранения номеров групп, второй – для хранения фамилий и имен, третий – для хранения оценок, четвертый – для хранения средних баллов и так далее. Связь между этими массивами можно установить с помощью индексов. При этом необходимо будет решать сложную задачу целостности информации. Например, если произвести сортировку фамилий во втором массиве по алфавиту, то соответствующим образом необходимо переставить элементы остальных массивов, чтобы фамилии соответствовали остальным данным. Это достаточно сложная задача.
Так возникла необходимость в особой структуре данных, которая позволила бы одновременно хранить и обрабатывать данные различных типов.
Для работы с данными различных типов, но объединенных в одну структуру под одним именем, в Паскале введен новый тип данных – запись.
Записи могут состоять из компонентов различных типов, называемых полями. Каждое поле можно рассматривать как отдельную переменную, имеющую свое имя.
В отличие от ранее рассмотренных типов данных, тип записи описывается в разделе определения типов:
Type TStudent = Record
nomer, fam, name : String[15];
ocenka : 2..5;
sr_ball : Real;
End;
Внимание! Описание записи заканчивается словом End, для которого нет слова Begin.
Описан тип записи с именем TStudent, имеющий поля:
nomer, fam, name - номер группы, фамилия и имя – строки длиной 15 символов,
ocenka - оценка по информатике – интервал от 2 до 5,
sr_ball - средний балл сдачи сессии – вещественное.
Таким образом, при описании полей указываются их имена и через двоеточие – типы. Описание заканчивается словом End.
После определения типа записи можно описать разные базовые структуры этого нового типа в разделе описания переменных:
