
- •Содержание
- •Программирование и алгоритмические языки в историческом аспекте
- •Введение в Паскаль
- •Алфавит Паскаля
- •Служебные (ключевые) слова
- •Константы
- •Запись чисел
- •Переменные
- •Типы данных
- •Стандартные функции
- •Выражения
- •Выражения целого типа
- •Выражения вещественного типа
- •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
- •Б)Ошибки ввода-вывода
- •В)Критические ошибки
- •Г)Фатальные ошибки
Var I, j: Byte;
c: Char;
f: Text;
Begin
ClrScr;
Assign(f, 'D:\User\ASCII.txt');
ReWrite(f);
Write(f, ' | ');
For j:=0 To 15 Do
Write(f, n[j+1],' ');
WriteLn(f);
WriteLn(f, s);
Write(f, '0 | ');
For j:=0 To 15 Do
Begin
If (j In [9,10,13])
Then c:=' '
Else c:=Chr(j);
Write(f, c, ' ');
End;
WriteLn(f);
For i:=1 To 15 Do
Begin
Write(f, n[i+1],' | ');
For j:=0 To 15 Do
Write(f, Chr(i*16+j), ' ');
WriteLn(f);
End;
WriteLn(f, s);
WriteLn(f);
Close(f);
End.
Результат работы программы - кодирование в 16-ричной системе счисления, причем символы первых двух строк на экран вывести нельзя – это управляющие символы:
| 0 1 2 3 4 5 6 7 8 9 A B C D E F
--+-----------------------------------------------
0 |
1 | µ § ‑
2 | ! " # $ % & ' ( ) * + , - . /
3 | 0 1 2 3 4 5 6 7 8 9 : ; < = > ?
4 | @ A B C D E F G H I J K L M N O
5 | P Q R S T U V W X Y Z [ \ ] ^ _
6 | ` a b c d e f g h i j k l m n o
7 | p q r s t u v w x y z { | } ~
8 | Ђ Ѓ ‚ ѓ „ … † ‡ € ‰ Љ ‹ Њ Ќ Ћ Џ
9 | ђ ‘ ’ “ ” • – — ™ љ › њ ќ ћ џ
A | Ў ў Ј ¤ Ґ ¦ § Ё © Є « ¬ ® Ї
B | ° ± І і ґ µ ¶ · ё № є » ј Ѕ ѕ ї
C | А Б В Г Д Е Ж З И Й К Л М Н О П
D | Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я
E | а б в г д е ж з и й к л м н о п
F | р с т у ф х ц ч ш щ ъ ы ь э ю я
--+-----------------------------------------------
Таким образом, 16-ричный код цифры ноль – 30, что соответствует ее коду 48 в десятичной системе счисления.
Строки с нулевой по седьмую – это первая, стандартная часть таблицы, где хранятся коды цифр, символов латинского алфавита и некоторых символов клавиатуры. Строки с восьмой по F – это расширенная, национальная часть таблицы, где хранятся коды символов национальных алфавитов.
Рассмотрим стандартную часть таблицы, состоящую из первых восьми строк. Разобьем ее на две половины по четыре строки. Если S – любой символ из верхней половины, то ^S – символ из нижней половины, находящийся в том же столбце, то есть отстоящий на четыре строки, и наоборот.
Например, ^} соответствует = , наоборот ^= соответствует символу }.
Аналогичное правило действует и в расширенной, национальной части таблицы.
При вводе с клавиатуры исходных данных знак карата ^ соответствует нажатию клавиши CTRL, удерживаемой при одновременном нажатии того или иного знака. Этим часто пользуются при вводе символов, отсутствующих на клавиатуре: ^м будет соответствовать символу ¬ (операция отрицания).
Нумерация элементов строки начинается с единицы. Для каждого элемента строки в оперативной памяти выделяется 1 байт. Для хранения текущей длины строки в памяти выделяется дополнительный байт в начале строки (нулевой байт). Длина строки хранится в нем в виде ASCII-символа, порядковый номер которого и определяет ее длину. Например, Ord(my_str[0])=19 – в ней 19 символов, включая пробелы.
В программе строки можно задать операторами присваивания:
srt_1 := ‘Это первая строка’; записывается в апострофах
srt_2 := ‘Это вторая строка’;
или ввести с клавиатуры целиком, указывая имя строки:
ReadLn(str_1); вводится без апострофов
Если длина задаваемой строки меньше длины, указанной в ее описании, то остальные элементы строки не заполняются, а если больше – то лишние элементы отбрасываются.
Строки можно выводить на экран целиком, указывая имя строки:
WriteLn(str_1);
Помимо присваивания, ввода и вывода, над строками определены следующие операции:
1. сложение (конкатенация) строк:
str_1 :=’Turbo’;
str_2 := ‘ Pascal’;
str_3 := str_1 + str_2; в str_3 будет фраза Turbo Pascal
2. сравнение строк – осуществляется операциями отношения >, >=, <, <=, =, <> посимвольно слева направо до первого несовпадающего символа – сравниваются коды символов строк. Большей считается та строка, у которой код этого символа больше:
‘Vova’ > ‘Vasja’ = True так как Ord(‘o’) > Ord(‘a’)
Для работы со строками определены следующие функции:
1. Length(строка) - текущая длина строки – количество символов в ней (целое число):
str_1 :=’Turbo’;
n := Length(str_1); n=5 – в строке 5 символов
2. Pos(строка_1, строка_2) - определение положения строки_1 в строке_2 (положение - номер символа – целое число):
str_1 :=’ша’;
str_2 :=’Наша Маша шагает в шапке’;
n := Pos(str_1, str_2); n=3 – определяется первое вхождение str_1 в str_2, а это позиция с номером 3 во второй строке
Внимание! Если искомая строка не найдена, то результат равен нулю.
3. Copy(строка, номер символа, длина фрагмента) - копирование фрагмента заданной длины, начиная с заданного номера символа строки; получается новая строка:
str_1 :=’браконьер’;
str_2:=Copy(str_1, 2, 3); из строки браконьер, начиная со второй буквы, копируется фрагмент длиной 3 символа; получается str_2=’рак’
4. Concat(строка_1, строка_2, строка_3, ...) – конкатенация (сложение) строк; получается новая строка:
str_1 :=’Turbo’;
str_2 := ‘ Pascal’;
str_3 := Concat(str_1, str_2); в str_3 будет фраза Turbo Pascal
Внимание! Длина суммарной строки не должна превышать 255 символов.
Для работы со строками определены следующие процедуры:
1. Delete(строка, номер символа, длина фрагмента) - удаление из строки фрагмента заданной длины, начиная с заданного номера символа строки; получается новая строка_1:
str_1 :=’коробочка’;
Delete(str_1, 4, 2); из строки коробочка, начиная с четвертой буквы, удаляется фрагмент длиной 2 символа; получается str_1=’корочка’
2. Insert(строка_1, строка_2, номер символа) - вставка строки_1 в строку_2, начиная с заданного номера символа; получается новая строка_2:
str_1 :=’сор’;
str_2 :=’мука’;
Insert(str_1, str_2, 3); в строку мука, начиная от третьей буквы, вставляется строка сор; получается str_2=’мусорка’
Паскаль позволяет преобразовывать данные числового типа в строку символов, а также преобразовывать строку в число, если она содержит последовательность символов, удовлетворяющую правилам записи чисел. Для этого используются две процедуры:
1. Str(число, строка) - преобразование числового значения величины число в строку:
x:= 3.14;
Str(x, str_1); строка str_1 примет значение ‘3.14’
2. Val(строка, число, код) - преобразование значения строки в величину целого или вещественного типа число. Если во время операции преобразования ошибки не обнаружено, то значение кода равно нулю. Если же обнаружена ошибка (строка не переводится в число), то код будет содержать номер позиции ошибочного символа, а значение числа не определено:
str_1 := ‘3.14’;
Val(str_1, x, n); строка str_1 преобразуется в число x=3.14, n = 0 (ошибок нет)
str_1 := ‘3,14’;
Val(str_1, x, n); строка str_1 не будет преобразована в число, n = 2 (второй символ – запятая - ошибочен), x не определен
Использование этой функции позволяет избежать неприятной ошибки выполнения Invalid numeric format, возникающей при неправильном вводе числовых данных, при появлении которой программа заканчивает работу. Если же вводить число в виде строки, а потом преобразовывать ее в число, используя процедуру Val, то даже при некорректном вводе можно будет продолжать работу, анализируя значение кода ошибки и повторив ввод.
С остальными структурами данных – множествами, записями и файлами – мы познакомимся после изучения базовых структур алгоритмических языков, позволяющих осуществлять обработку данных по сложным алгоритмам.