- •Язык pascal программирование для начинающих Содержание
- •1.Начала программирования
- •2.Процедуры и функции
- •1.Начала программирования Понятия программирования
- •История и особенности языка программирования Паскаль (Pascal)
- •Словарь языка Pascal
- •Компиляция
- •Структура программы на языке Паскаль
- •Пунктуация в программах на Паскале
- •Операторы
- •Оператор присваивания
- •Составной оператор
- •Выражения
- •Ввод и вывод данных
- •Переменные и константы
- •Длина переменных
- •Типы данных
- •Целые типы
- •Вещественные типы
- •Использование константы pi
- •Символьный тип (Char)
- •Перечисляемый тип
- •Ограниченный тип (интервал)
- •Булевы типы. Логические выражения и логические операции
- •Битовая арифметика и операции над битами
- •Условные операторы
- •Оператор case
- •Вложенные конструкции if-else
- •Циклы в Паскале
- •Операторы goto, break и continue Оператор безусловного перехода goto
- •Операторы break и continue
- •Генератор псевдослучайных чисел
- •Эквивалентность и совместимость типов
- •Совместимость типов
- •Функция sizeof
- •2.Процедуры и функции Структурное программирование
- •Стандартные функции языка Pascal
- •Арифметические функции
- •Тригонометрические функции
- •Функции преобразования из вещественного в целый тип
- •Логические функции
- •Функции над дискретными типами Функция ord
- •Функция chr
- •Функции succ и pred
- •Процедуры и функции
- •Формальные параметры
- •Параметры-значения
- •Параметры-переменные
- •Побочные эффекты
- •Процедуры и функции в качестве параметров
- •Локальные и глобальные переменные
- •Рекурсивные функции
- •3.Массивы в Pascal Общее представление о массивах
- •Одномерные массивы
- •Двумерные массивы
- •Открытые массивы
- •4.Графика и псевдографика Модуль Crt
- •Модуль Graph
- •Процедура Line. “Звезды на экране”
- •Процедура Circle. “Разноцветные окружности”
- •Прямоугольники. Процедуры Rectangle, Bar и Setfillstyle
- •5.Строки Строковый тип данных в Паскале
- •Процедуры и функции для работы со строками
- •Строки и массивы символов
- •6.Работа с файлами Работа с файлами в Паскале. Общие сведения
- •Создание файла и запись данных в него
- •Чтение данных
- •Функция ioResult
- •Редактирование файла
- •7.Записи в Pascal Записи (Record)
- •Сравнение записей с массивами
- •Оператор With
- •Запись с вариантами
- •8.Множества Множества (Set)
- •Данные типа set
- •Операции над множествами
- •9.Динамические структуры данных Указатели, или ссылки (Pointer)
- •Ссылочные и динамические переменные
- •Процедура New
- •Операции над указателями
- •Процедура Dispose
- •Стек ("магазин")
- •Очередь
- •Запись новых компонент
- •Нелинейные структуры
- •Решение Задач Содержание
- •1.Линейные алгоритмы
- •2.Условные операторы
- •3.Циклы
- •4.Графика и псевдографика
- •5.Процедуры, функции, рекурсии
- •6.Массивы
- •7.Строки
- •1.Линейные алгоритмы Вычисление площади поверхности цилиндра
- •"Заем". Арифметические выражения, возведение в степень
- •2.Условные операторы Извлечение цифр числа
- •Поразрядное сравнение чисел
- •Перевод шестнадцатеричного числа в десятичное число
- •Перевод десятичного числа в шестнадцатеричное
- •Определение принадлежности даты диапазону времени
- •Программа, определяющая количество дней в месяце
- •Фильтрация данных
- •Поиск максимального элемента среди минимальных элементов столбцов
- •Удаление элементов одномерного массива
- •Выбор элементов массива
- •Процедура вычисления корней квадратного уравнения
- •Программа "Угадай число"
- •Перевод римских чисел в арабские. Пример автоматного распознавателя
- •Определить возможность существования треугольника по сторонам
- •Определение четверти на координатной плоскости
- •Оператор case в задаче выбора
- •Найти максимальное число из трех
- •Вычисление площадей геометрических фигур
- •Вычисление значения функции
- •3.Циклы Определить количество элементов массива, значение которых больше соседних элементов
- •Определить количество простых чисел
- •Сумма элементов различных рядов
- •Поменять слова местами
- •Определение различных цифр, входящих в число
- •Извлечение цифр числа
- •Поразрядное сравнение чисел
- •Использование повторяющихся изображений для создания орнаментов
- •Перенос и анимация геометрических фигур
- •Сумма и произведение цифр числа
- •Окна в crt. Программа для угадывания числа
- •Вычисление средних арифметических массивов
- •Удаление последнего слова в строке
- •Как избавиться от goto
- •Вывод квадратов натуральных чисел
- •Числа Фибоначчи
- •Запись табличных данных в файл и их чтение оттуда
- •Фильтрация данных
- •Поиск максимального элемента среди минимальных элементов столбцов
- •Умножение матриц
- •Удаление элементов одномерного массива
- •Выбор элементов массива
- •Сумма элементов двумерного массива
- •Поиск максимального элемента в массиве
- •Функция, вычисляющая наибольший общий делитель
- •Фильтр строки
- •Заполнение массива и вычисление суммы элементов
- •Возведение числа в степень
- •Вывод на экран таблицы ascii
- •Вычисление суммы ряда чисел
- •Программа "Угадай число"
- •Перевод римских чисел в арабские. Пример автоматного распознавателя Задача:
- •4.Графика и псевдографика Масштабирование фигуры
- •Использование повторяющихся изображений для создания орнаментов
- •Перенос и анимация геометрических фигур
- •Окна в crt. Программа для угадывания числа
- •Вывод строки по диагонали
- •5.Процедуры, функции, рекурсии Вычисление средних арифметических массивов
- •Перевод шестнадцатеричного числа в десятичное число
- •Перевод десятичного числа в шестнадцатеричное
- •Перевод десятичного числа в двоичную или восьмеричную систему счисления.
- •Перевод двоичного числа в десятичное
- •Пример, иллюстрирующий использование интервального типа и манипуляции над множествами
- •Псевдослучайные числа. Функция, возвращающая значение и меняющая параметр
- •Программа решения задачи о ханойской башне
- •Заполнение массива и его вывод на экран
- •Рекурсия. Процедура перевода чисел из десятичной системы счисления в другие
- •Процедура вычисления корней квадратного уравнения
- •Нахождение нод (наибольшего общего делителя) с помощью рекурсивной функции
- •Функция, вычисляющая наибольший общий делитель
- •Функция, вычисляющая наибольший общий делитель
- •Обмен значений переменных
- •Функции вычисления площади геометрических фигур
- •Вычисление площади поверхности цилиндра
- •"Заем". Арифметические выражения, возведение в степень
- •6.Массивы Определить количество элементов массива, значение которых больше соседних элементов
- •Определение различных цифр, входящих в число
- •Поразрядное сравнение чисел
- •Вычисление средних арифметических массивов
- •Использование динамических массивов
- •Копирование данных в обратном порядке
- •Поиск самой длинной заданной последовательности в массиве
- •Поиск максимального элемента среди минимальных элементов столбцов
- •Умножение матриц
- •Алгоритм шифрования данных
- •Выделение слов из строки
- •Сортировка выбором
- •Длина последовательности
- •Слияние двух упорядоченных массивов
- •Удаление элементов одномерного массива
- •Сортировка методом пузырька
- •Исключение одинаковых элементов массива
- •Выбор элементов массива
- •Вставка элемента в массив
- •Сумма элементов двумерного массива
- •Поиск максимального элемента в массиве
- •Сумма и произведение элементов одномерного массива
- •Заполнение массива и его вывод на экран
- •Фильтр строки
- •Заполнение массива и вычисление суммы элементов
- •7.Строки Поменять слова местами
- •Сортировка данных строки
- •Удаление из строки слов заданной длины
- •Удаление последнего слова в строке
- •Добавление пробелов в строку
- •Удаление одинаковых символов
- •Удаление лишних пробелов
- •Вывод строки по диагонали
- •Частота встречаемости символа в строке
- •Палиндром
- •Переворот строки
- •Замена подстроки в строке
- •Вставка подстроки
- •Удаление подстроки
- •Копирование части строки
- •Определение длины строки
- •Замена последовательности символов в строке
- •Перевод двоичного числа в десятичное
- •Выделение слов из строки
- •Фильтр строки
- •8.Файлы Запись данных в бестиповой файл
- •Проверка файла с данными на наличие записи
- •Замена последовательности символов в строке
- •Запись табличных данных в файл и их чтение оттуда
- •Копирование нетипизированного файла
- •Копирование данных в обратном порядке
- •Копирование текстовых файлов
- •Фильтрация данных
- •Запись в типизированный и текстовый файлы
- •9.Записи Пример использования записи с вариантами
- •Фильтрация записей по значению поля
- •Проверка файла с данными на наличие записи
- •Преобразование даты в числовой формат
- •Определение принадлежности даты диапазону времени
- •Программа, определяющая количество дней в месяце
- •10. Множества и интервалы Пример, иллюстрирующий использование интервального типа и манипуляции над множествами
- •11. Динамические структуры Использование динамических массивов
- •Процедуры для работы с динамической структурой спискового типа
- •Процедуры, обслуживающие стек
- •Вставка динамической переменной
- •Примечания:
Перечисляемый тип
В программу можно ввести и переменные какого-либо типа, не совпадающие ни с одним из стандартных. Такой тип задается перечислением значений, которые может принимать переменная. Общий вид описания нестандартного типа:
type nm = (word1, word2, …, wordN);
здесь nm – идентификатор типа (произвольный), word1, word2… - конкретные значения, которые может принимать переменная типа nm. Эти значения считаются упорядоченными, т.е. описание типа одновременно вводит упорядочение
word1 < word2 < wordN.
Пример 1. type color = (red, yellow, green, blue);
Здесь определено, что red < yellow < green < blue. Переменная типа color может принимать одно из перечисленных значений.
Ко всем переменным скалярного типа, кроме real, применимы следующие стандартные функции: succ(x), pred(x), ord(x).
Функция succ(x)
По элементу x определяется та упорядоченная последовательность, которой принадлежит x, и выдается элемент, следующий за x в этой последовательности.
Пример 2. Пусть задана последовательность букв в алфавитном порядке. Тогда succ(A) есть B; succ(L) есть M и т.д.
В примере 1 succ(red) есть yellow.
Функция pred(x)
По элементу x определяется последовательность, которой принадлежит x, и выдается предыдущий элемент этой последовательности.
Пример 3. pred(F) есть E; pred(Z) есть Y и т.д.
Функция ord(x)
Выдается номер элемента x на соответствующей последовательности.
Ко всем переменным одного и того же скалярного типа применимы операции отношения: =, <>, <=, >=, <, >.
Ограниченный тип (интервал)
Для переменной скалярного типа можно указать некоторое подмножество значений, которые может принимать данная переменная.
Общий вид:
a: min..max;
здесь a – переменная, min – левая граница, max – правая граница подмножества (диапазона). Границы диапазона разделяются двумя точками.
Тип min и max задает множество, определяющее основной тип переменной a (базовый тип). О переменной, описанной таким образом, говорят, что она имеет интервальный тип.
Пример. Пусть переменная k может принимать значения из множества 1 – 20. Тогда ей приписывают ограниченный тип k: 1..20;. Основным типом переменной k является тип integer, т.к. границами диапазона являются целые константы 1 и 20.
Если переменная b может принимать одно из значений red, yellow, green, то эту переменную можно описать так: b: red..green; основным типом b является тип color, описанный в предыдущем разделе.
Граница min всегда должна быть меньше max.
Пример. Пусть i – переменная, принимающая значения года рождения сотрудника какого-либо учреждения. Очевидно, имеет смысл ограничить диапазон значений i подмножеством, т.е. описать примерно так: i: 1930…2000; переменная i будет иметь интервальный, а не целый тип.
Булевы типы. Логические выражения и логические операции
Простые логические выражения
Для того, чтобы программа была не линейной (т.е. в зависимости от ситуации выполнялись разные инструкции) в языках программирования используются логические выражения, результат которых может быть либо правдой (true), либо ложью (false). Результат логических выражений обычно используют для определения пути выполнения программы.
Простые логические выражения являются результатом операций отношения между двумя операндами (значениями). В примерах ниже операндами являются значения переменных x и y. Операндами могут быть числа, символы и другие типы данных. Все что можно сравнивать между собой. Однако не рекомендуют сравнивать вещественные числа из-за особенностей их хранения в памяти компьютера.
В Паскале предусмотрены следующие операторы отношений:
-
меньше: x < y
-
больше: x > y
-
равно: x = y
-
не равно: x <> y
-
меньше или равно: x <= y
-
больше или равно: x >= y
Булевы типы
Результатом логического выражения всегда является булево (логическое) значение. Булев тип данных (boolean) может принимать только два значения (true или false). Эти величины упорядочены следующим образом: false < true. Это значит, что данные булевого типа являются не только результатом операций отношения, но и могут выступать в роли операндов операции отношения. Также к ним можно применять функции ord, succ, pred, процедуры inc и dec.
Значение типа boolean занимает в памяти 1 байт.
В примере шести булевым переменным присваиваются значения простых логических выражений. Значения, хранимые в таких переменных, затем выводятся на экран.
Кроме типа boolean в Pascal введены еще три булевых типа — bytebool (занимает 1 байт), wordbool (занимает 2 байта) и longbool (занимает 4 байта).
Для всех булевых типов значению false соответствует 0, а значению true — любое ненулевое значение. Логические переменные, принадлежащие разным булевым типам, ведут себя по-разному при выполнении над ними операций. Ниже приводится пример, реализованный на языке FreePascal (в комментариях отображается результат).
var
b:boolean;
wb:wordbool;
begin
b:= false;
b:= pred(b);
writeln(b,' ',ord(b)); // TRUE 255
writeln(b=true); // TRUE
wb:= false;
wb:= pred(wb);
writeln(wb,' ',ord(wb)); // TRUE -1
b:= true;
b:= succ(b);
writeln(b,' ',ord(b)); // TRUE 2
wb:= true;
wb:= succ(wb);
writeln(wb,' ',ord(wb)); // FALSE 0
end.
Логические операции
С помощью логических операторов можно формировать сложные логические выражения. Логические операторы часто применяются по отношению к простым логическим выражениям.
В языке программирования Pascal предусмотрены следующие логические операции:
-
Конъюнкция (логическое умножение, пересечение) - and. Выражение a and b дает значение true только в том случае, если a и b имеют значение true. Во всех остальных случаях значения выражения a and b дает false.
true and true = true
true and false = false
false and true = false
false and false = false
-
Дизъюнкция (логическое сложение, объединение) – or. Выражение a or b дает значение false только в том случае, если a и b имеют значение false. Во всех остальных случаях результат – true.
true and true = true
true and false = true
false and true = true
false and false = false
-
Отрицание (инверсия) – not. Выражение not a имеет значение, противоположное значению a.
not true = false
not false = true
-
Исключающее ИЛИ – xor. Выражение a xor b дает значение true только в том случае, когда только один из операндов имеет значение true.
true and true = false
true and false = true
false and true = true
false and false = false
Последовательность выполнения логических операторов: not, and, or.
В языке Паскаль сначала выполняются логические операторы (and, or, xor, not), а уже потом операторы отношений (>, >=, <, <=, <>, =), поэтому не нужно забывать расставлять скобки в сложных
логических выражениях.
Сложные булевы выражения могут не обрабатываться до конца, если продолжение вычислений не изменит результат. Если булево выражение в обязательном порядке нужно обрабатывать до конца, то это обеспечивается включением директивы компиляции {B+}.
Стандартные булевские функции
odd(x) = true, если x нечетный (x целый тип);
eoln(x) = true, если встретился конец строки текстового файла x;
eof(x) = true, если встретился конец файла x.
В остальных случаях эти функции принимают значение false.