- •Практикум по Турбо Паскалю
- •Первые занятия Первое знакомство с системой программирования Турбо Паскаль
- •Команды редактора
- •Задания
- •Режим помощи
- •Первая программа
- •Запуск программы
- •Сохранение программы
- •Выход из системы программирования Турбо Паскаль
- •Простейшие линейные программы
- •Арифметический квадрат. Абсолютная величина
- •Целый и логический типы данных Условный оператор
- •Логический тип данных
- •Условный оператор
- •Вложенные операторы условия
- •Целый тип данных. Цикл с параметром
- •Цикл с параметром (разбор на примере)
- •Работа с окнами. Метод пошагового выполнения программ
- •Работа с окнами
- •Решение задач с использованием цикла с параметром
- •Вопросы для обсуждения
- •Трассировка примера
- •Цикл с постусловием
- •Алгоритм Евклида
- •Вложенные циклы
- •Решение задач с использованием циклов с условием
- •Простые типы данных
- •Задания
- •Решение задач
- •Вещественный тип данных
- •Задание
- •Решение задач
- •Ограниченный, перечисляемый типы данных. Оператор варианта
- •Ограниченный тип данных
- •Оператор варианта
- •Перечисляемый тип данных
- •Решение задач
- •Описание переменных, констант и типов Раздел описания констант
- •Раздел описания переменных
- •Раздел описания типов
- •Решение задач
- •Преобразование типов. Совместимость типов
- •Задания
- •Решение задач
- •Решение задач
- •Контрольные работы Контрольная работа №1
- •Контрольная работа №2
- •Основы Паскаля
- •X y22m размер gamma alfa r15
- •Процедуры и функции
- •Описание процедур и функций
- •Файловый тип
- •Описание файлового типа
- •Подпрограммы
- •Процедура Assign
- •Процедура Reset
- •Процедура Rewrite
- •Процедура Write
- •Процедура Close
- •Функция FileSize
- •Функция FilePos
- •Текстовые файлы
- •Описание текстового файла
- •Консоль
- •Устройства
- •Соответствие текстовых файлов и логических устройств
- •Операции над текстовыми файлами
- •Процедура Assign
- •Процедура Reset
- •Процедура Rewrite
- •Процедура Append
- •Процедура Close
- •Функция Eof
- •Функция SeekEof
- •Блочные файлы Описание типа блочного файла
- •Процедура BlockRead
- •Процедура BlockWrite
- •Операции ввода-вывода
- •Регулярные типы данных Одномерные массивы. Работа с элементами
- •Способы задания одномерных массивов
- •Работа с элементами массива (разбор на примерах)
- •Методы работы с элементами одномерного массива Изменение значения некоторых элементов
- •Создание массива
- •Работа с несколькими массивами
- •Удаление элементов из одномерного массива Удаление элемента
- •Вставка элементов в одномерный массив Вставка одного элемента
- •Вставка нескольких элементов
- •Перестановка элементов массива
- •Перестановка части массива
- •Найти сумму элементов
- •Работа с несколькими массивами
- •Двумерный массив. Работа с элементами Изменение значений некоторых элементов, удовлетворяющих заданному свойству
- •Заполнение двумерного массива по правилу.
- •Вставка и удаление элементов двумерного массива
- •Перестановка элементов массива
- •Комбинированный тип данных (записи)
Задания
Задание 1
Исследовать, чему равно значение переменной с при рзличных значениях a и b.
Пусть а = 100, b = 32767. Чему равно значение с? При сложении этих чисел должно получиться число 32867, но, запустив программу, мы не получим этого числа.
Вычисление выражения осуществляется по следующим правилам: перед тем, как выполнить операцию, оба операнда преобразуются к их общему типу. Общим типом является более сложный из типов двух операндов.
Определить тип следующих выражений: а + b; a + b + c; a + b + c + x, если переменные описаны так:
Var a : Byte; b : Integer; c : Longint; x : Real;
Выражение справа в операторе присваивания вычисляется независимо от размера или типа переменной слева.
Вернёмся к примеру, число 32867 не входит в диапазон допустимых значений типа integer, именно вследствие этого мы получаем неправильный результат. Чтобы такого не получилось, нужно преобразовать переменные к более вместительному типу.
Приведение типов имеет следующую структуру: <идентификатор типа>(переменная).
Итак, чтобы получить правильный результат, нужно записать следующий оператор:
c := Longint(a) + Longint(b); или c := a + Longint(b);
Задание 2
Можно ли записать: c:=Longint(a + b); Writeln(b*a*0.1); Writeln(0.1*a*b)?
Ответ поясните.
Для преобразования типов используются также следующие функции:
|
Round (от англ. round - круглый, округлять) - преобразует переменную вещественного типа в целый путём округления числа до ближайшего целого. |
|
Trunc (от англ. trancate - урезать) - преобразует переменную вещественного типа в переменную целого путём отбрасывания дробной части числа. |
|
Int (от англ. integer - целый) - значением этой функции является целая часть вещественного числа. |
|
Frac (от англ. fraction - дробь) - значением этой функции является дробная часть вещественного числа. |
|
Low (от англ. low - низкий) - возвращает наименьшее значение в диапазоне данного порядкового или перечисляемого типа. |
|
High (от англ. high - высокий, вверх) - возвращает старшее значение в диапазоне данного порядкового или перечисляемого типа. |
Решение задач
Пример 1
"Вечный календарь". Установлено: если исследуемая дата лежит в диапазоне от 1582 до 4902 гг., в этом случае номер дня недели (воскресенье имеет номер 0, понедельник - 1, ..., суббота - 6) равен остатку от деления на 7 значения выражения [2.6m-0.2] + d + y + [y/4] + [c/4] - 2c (*),
где d - номер дня в месяце (1, 2,...); m - номер месяца в году, нумерация начинается с марта (март имеет номер 1, апрель - номер 2, ..., декабрь - номер 10, январь и февраль считаются месяцами с номером 11 и 12 предыдущего года); y - две младшие цифры года; c - две старшие цифры года; [x] - означает целую часть числа x.
Вычислить количество пятниц, приходящихся на 13 число ХХ столетия.
Вопросы для обсуждения
Какие понадобятся типы данных?
Какие величины остаются постоянными в процессе работы?
Какие переменные необходимы для решения задачи, каков их тип?
Для вычисления значения выражения (*) необходимо выполнить преобразование типов, для этого воспользуемся функцией trunc, которая преобразует вещественное число в целое путём отбрасывания дробной части числа. Какие значения может принимать данное выражение?
Какие значения принимает функция ord для констант типа месяц?
Решение
Program Example_26; Type month = (january, february, marth, april, may, june, jule, august, september, october, november, december); day = 1..31; year = 1582..4902; week = (sunday, monday, tuesday, wednesday, thursday, friday, saturday); Const h = 20; d : day = 13; d_w : week = friday; Var k : Integer; {для подсчёта количества пятниц} y : year; Mod_y : 0..99; int_y : 15..49; m : month; n : - 50..1000; Begin k:=0; For y:=(h - 1)*100 To h*100 - 1 Do {просмотрим все годы столетия} For m:= marth To february Do {просмотрим все месяцы года} Begin Mod_y:=y Mod 100; {найдём две последние цифры года} int_y:=y Div 100; {найдём две первые цифры года} n := trunc(2.6*(Ord(m)+1)-0.2) + d + Mod_y + trunc(Mod_y/4) + trunc(int_y/4) - 2*int_y; If n Mod 7=Ord(d_w) Then Inc(k); End; Writeln('количество пятниц, приходящихся на ',d,' число в ',h,' столетии равно ',k,'); End.
Итак, в решении этой задачи нам понадобилось выполнить преобразование типов.
Пример 2
Найти k-e простое число в арифметической прогрессии 11, 21, 31, 41, 51, 61,...
Решение
Для решения поставленной задачи необходимо просматривать числа последовательности и проверять каждое из них на свойство простоты. Поскольку нам не известно, сколько членов последовательности необходимо просмотреть, мы должны просматривать этот ряд до тех пор, пока не найдём k-e простое число; для этого воспользуемся циклом с условием.
Program Example_27; Var k : Integer; n, p, d : Longist; Begin Writeln('Введите номер числа'); Readln(k); n:=0; p:=1; While n<k Do Begin Inc(p,10); d:=2; While (p Mod d<>0) And (d<sqrt(p)) Do Inc(d); If d>=sqrt(p) Then Inc(n); End; Writeln(p); Readln; End.
В этом решении мы смогли записать условие d<sqrt(p), так как типы Integer и Real совместимы.
