- •Язык 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. Динамические структуры Использование динамических массивов
- •Процедуры для работы с динамической структурой спискового типа
- •Процедуры, обслуживающие стек
- •Вставка динамической переменной
- •Примечания:
Преобразование даты в числовой формат
Задача:
Условие и цель задачи. Пользователь вводит дату в формате ‘dd.mm.yyyy’, которая присваивается строчной переменной s. Необходимо преобразовать строку в запись d, имеющую три числовых поля – day, month, year.
Алгоритм решения задачи:
Алгоритмы преобразования строчного представления даты в численное могут использоваться в программах, которые выполняют какие-либо вычисления, связанные с датами.
Мы не будем писать сразу наиболее эффективную и короткую программу. Сначала алгоритм решения будет достаточно прозрачным и простым.
Программа на языке Паскаль:
Алгоритм 1. Линейная программа
Введенная пользователем дата находится в строчной переменной s.
Извлечение любого символа из строки производится так же, как получение элемента массива по его индексу. Например, s[1] приведет к извлечению первого символа сроки. Можно даже извлечь срез: s[1..2] извлечет первые два символа. Однако как их преобразовать в число?
Функция ord возвращает порядковый номер переданного ей аргумента. Если ей передать символ, то она вернет его номер в таблице символов. Это будет величина целого типа. Например, символ ‘0’ (ноль) может быть 48-м. Поэтому ord(‘0’) вернет 48. Далее номера цифр идут по порядку друг за другом: ‘1’ – 49, ‘2’ – 50, ‘3’ – 51 и т.д.
Чтобы перевести символьное представление цифры (например, ‘7’) в число (7), достаточно выполнить такое выражение: ord(‘7’) – ord(‘0’). Разница номеров между данными символами как раз составляет семь единиц. Таким образом, мы можем перевести символьное представление цифры в число.
Следующая проблема заключается в том, что числа в дате двузначные (день и месяц) и четырехзначные (год). Мы же получили значение только отдельных цифр. Однако, имея цифры и зная их позицию в числе, нетрудно вычислить само число. Например, если первое число 2 (десятки), а второе 4 (единицы), то получить 24 легко: 2 * 10 + 4. Год wxyz вычисляется по формуле w * 1000 + x * 100 + y * 10 + z.
Кроме того, следует не забыть пропустить точки в строке даты. Это символы под номерами 3 и 6. Они никакого участия в вычислениях принимать не должны.
type date = record
year:1900..2050;
month:1..12;
day:1..31;
end;
var
d: date;
s: string;
k,l,m,n: byte;
begin
write('Введите дату в формате dd.mm.yyy: ');
readln(s);
k := ord(s[1])-ord('0');
l := ord(s[2])-ord('0');
d.day := 10 * k + l;
k := ord(s[4])-ord('0');
l := ord(s[5])-ord('0');
d.month := 10 * k + l;
k := ord(s[7])-ord('0');
l := ord(s[8])-ord('0');
m := ord(s[9])-ord('0');
n := ord(s[10])-ord('0');
d.year := 1000 * k + 100 * l + 10 * m + n;
writeln(d.day);
writeln(d.month);
writeln(d.year);
readln
end.
Алгоритм 2. Использование цикла и массива
Как можно заметить, слишком много раз в предыдущей программе выполняется выражение ord(s[цифра])-ord('0'). Подобные действия лучше выполнять в цикле, а результат помещать не в переменные, а массив.
Требуется преобразовать в цикле все символы строки, за исключением 3-го и 6-го (тех, которые являются точкой), и заполнить массив.
type date = record
year:1900..2050;
month:1..12;
day:1..31;
end;
var
d: date;
s: string;
i, j: byte;
a: array [1..8] of byte;
begin
write('Введите дату в формате dd.mm.yyy: ');
readln(s);
i := 1;
for j := 1 to 10 do
if s[j] <> '.' then begin
a[i] := ord(s[j]) - ord('0');
i := i + 1
end;
d.day := 10 * a[1] + a[2];
d.month := 10 * a[3] + a[4];
d.year := 1000 * a[5] + 100 * a[6] + 10 * a[7] + a[8];
writeln(d.day);
writeln(d.month);
writeln(d.year);
readln
end.
Алгоритм 2. Быстрое решение
На самом деле не обязательно использовать массив, цикл и даже лишние переменные. Все делается гораздо проще, однако выражения получаются достаточно длинными и могут быть непонятны для начинающих.
type date = record
year:1900..2050;
month:1..12;
day:1..31;
end;
var
d: date;
s: string;
begin
write('Введите дату в формате dd.mm.yyy: ');
readln(s);
d.day := 10 * (ord(s[1])-ord('0')) + (ord(s[2])-ord('0'));
d.month := 10 * (ord(s[4])-ord('0')) + (ord(s[5])-ord('0'));
d.year := 1000 * (ord(s[7])-ord('0')) + 100 * (ord(s[8])-ord('0'));
d.year := d.year + 10 * (ord(s[9])-ord('0')) + (ord(s[10])-ord('0'));
writeln(d.day);
writeln(d.month);
writeln(d.year);
readln
end.