- •«Сборник решения задач на языке Паскаль»
- •Введение.
- •Основные понятия системы программирования.
- •Среда программирования Turbo Pascal.
- •Окно среды программирования тр7 состоит:
- •Функциональные клавиши:
- •Текстовый редактор:
- •Элементы языка программирования Паскаль. Алфавит языка тр7.
- •Типы данных в языке Pascal.
- •Идентификаторы. Константы и переменные. Выражения. Комментарий.
- •Операции тр7. Операции в языке Паскаль подразделяются на:
- •Вещественное деление Целочисленное деление Деление по модулю
- •Общий вид программы в тр7.
- •Операторы тр7.
- •Операторы ввода-вывода.
- •Моя первая программа
- •Число шестнадцать записывается так: 16
- •Оператор присваивания.
- •Составной и пустой оператор. Линейные программы и алгоритмы.
- •Варианты заданий
- •Составить программу для вычисления значения функции, при целых аргументах:
- •Составить программу для решения следующих задач:
- •Составить программу для выполнения целочисленных арифметических действий (Условный оператор, оператор выбора, операторы повтора, массивы и строки не использовать):
- •Условные и безусловные операторы в языке Паскаль.
- •Варианты заданий Используя условный оператор выполните следующие задания:
- •Составить программу для вычисления значения функции при целых аргументах:
- •2. Используя сокращенную форму записи условного оператора выполнить следующие задания:
- •3 Используя вложенные условные операторы выполнить следующие задания:
- •Составить программу для выполнения следующих действий:
- •5. Используя оператор выбора выполните следующие задания:
- •Операторы повтора в языке Паскаль.
- •Циклом с предусловием;
- •Циклом с постусловием;
- •Циклом с параметром;
- •Принцип действия цикла While:
- •Пример 1: Составить программу для вычисления суммы первых 10 натуральных чисел.
- •Общая форма записи цикла Repeat…Until
- •Принцип действия цикла Repeat…Until:
- •Общий вид цикла For…to
- •Существует ещё одна форма записи цикла с параметром:
- •Варианты заданий
- •Составить программу для организации вывода по требуемому формату:
- •Составить программу для нахождения суммы конечного ряда:
- •Составить программу для обработки данных во время ввода:
- •4. Используя цикл с предусловием выполните следующие задания:
- •5. Используя цикл с постусловием выполните следующие задания:
- •6. Используя любой удобный цикл выполните следующие задания:
- •7. Решение простейших олимпиадных задач:
- •Одномерные и двумерные массивы
- •Варианты заданий Одномерные массивы
- •Составить программу для обработки элементов массива:
- •Составить программу для анализа элементов массива:
- •Использование цикла с условием при обработке элементов массива:
- •Перестановка, вставка и удаление элементов массива:
- •Логические задачи:
- •Двумерные массивы
- •Составить программу для обработки двумерного массива.
- •Литерные величины
- •Операции над строками:
- •Варианты заданий.
- •Составить программу осуществляющую поиск в строке:
- •Составить программу осуществляющую поиск и замену в строке:
- •Составить программу осуществляющую обработку цифр в строке:
- •Подпрограммы.
- •Подпрограммы-функции.
- •Подпрограммы-процедуры.
- •Область видимости идентификаторов.
- •Формальные и фактические параметры.
- •Параметры-значения, параметры-переменные, нетипизированные параметры.
- •Модули.
- •Варианты заданий.
- •Файловый тип данных
- •Варианты заданий.
- •1. Составить программу осуществляющую поиск в строке:
- •2. Составить программу осуществляющую поиск и замену в строке:
- •3. Составить программу осуществляющую обработку цифр в строке:
- •Множества
- •Варианты заданий.
- •Текстовый режим
- •Варианты заданий.
- •Составить программу для вывода заданного слова, заданного цвета в заданной строке на заданном фоне:
- •Составить программу для вывода букв заданного слова, в заданной строке на заданном фоне:
- •Варианты заданий.
Модули.
Функции и процедуры используется в программах в тех случаях, когда особую группу операторов возникает необходимость повторять определенной количество раз.
Если данную группу операторов возникает необходимость выполнить не в одной, а в нескольких программах, то целесообразно использовать библиотечные модули. Подпрограмму имеет смысл включить в состав модуля в том случае, когда она реализует действие, которое приходится выполнять достаточно часто. Такую подпрограмму можно написать и отладить один раз, а использовать многократно. Файл, содержащий модуль, обязан иметь имя, совпадающее с именем модуля.
Рассмотрим в качестве примера модуль вычисляющий xy.
Возведение в степень целого числа в языке ТР отсутствует (за исключением квадрата).
Unit step;
Interface
Function astepn (x,y:word):word;
Implementation
Function astepn(x,y:word):word;
Var
i,s:word;
Begin
s:=1;
for i:=1 to y do
s:=s*x;
astepn:=s;
End;
End.
Рассмотрим подробнее эту программу: любой модуль начинается с зарезервированного слова unit, за которым следует имя модуля (это имя также должно быть именем и файла). Результатом компиляции модуля step.pas с заголовком unit step будет файл step.tpu.
Каждый модуль имеет две секции. Секция interface (интерфейс) содержит описания констант, типов, переменных и процедур, доступных из вызывающей программы или модуля. Секция implementation (реализация) содержит исходный код программы.
Модуль заканчивается словом end. , причем для этого слова не обязательно открывать begin, хотя открытие не вызовет ошибки.
Рассмотрим использование это модуля:
Uses crt, step;
Begin
Writeln(astepn(2,6));
End.
Результат: 64
Варианты заданий.
Составить программу для вычисления выражения:
(вычисление факториала оформить в виде функции)
Составить программу для вычисления выражения:
z=sign x + sign y
где
В одномерном массиве целых чисел вычислить факториалы элементов массива. учесть при этом, что 0!=1 и факториал отрицательного числа не существует (вычисление факториала оформить в виде функции).
Задан массив целых чисел. Все отрицательные элементы этого массива возвести в куб, к нулевым прибавить 5, а положительные возвести в квадрат (оформить в виде функции и процедуры: 1 – условие проверки знака элемента и выполнения с ним соответствующих действий; 2 – вывод на экран исходного и обработанного массива).
Составить модуль для вычисления факториала натурального числа.
Составить модуль для вычисления тригонометрической функции tg(x).
Составить модуль для вычисления гиперболической функции sinh(x).
Составить модуль для вычисления гиперболической функции cosh(x).
Составить модуль для вычисления гиперболической функции tanh(x).
Файловый тип данных
Прежде всего, вспомним, что такое файл. Файл – это строго определённый участок памяти на физическом носителе, который имеет своё уникальное имя.
В языке Паскаль имеются три класса файлов: текстовый файл, типизированный и нетипизированный файл. Начнём с текстовых файлов.
В Паскале имеется стандартный файловый тип text. Прежде чем приступить к операциям над текстовыми файлами, необходимо ввести переменные (одну или несколько) типа text:
Var F : text;
Описанные переменные (далее – файловые переменные) будут в дальнейшем связаны с внешними файлами. Это могут быть обычные файлы на жестком или гибком диске, а также файлы, связанные с каким-либо устройством, например, дисплеем, принтером. Файловая переменная далее используется в программе в качестве параметра процедур работы с файлами.
После того как мы описали файловые переменные и связали их с определёнными внешними файлами, то данные файлы можно открыть для того чтобы производить с ними какие-либо действия, и прежде всего это запись в файл или чтение из него. Доступ к текстовому файлу организуется последовательно – это означает, что программа не может в любой момент времени считать из него произвольную порцию информации или произвести запись в произвольное место файла. Любой файл представляет собой линейную последовательность элементов, каждый из которых имеет свой номер. Можно считать, что имеется указатель, который при считывании очередного элемента файла перемещается к следующему элементу (т.е. становится ближе к концу файла).
Рассмотрим теперь процедуры и функции для работы с файлами:
Функция |
Описание |
Procedure Assign (var F, String) |
Связывает внешний файл, имя которого указано в строковой константе String, с файловой переменной F. |
Procedure Rewrite (var F) |
Создаёт и открывает новый файл, связанный с файловой переменной F для записи. Если файл с указанным именем уже существует, старый файл будёт стёрт, а на его месте создаётся новый пустой файл. Текущий указатель устанавливается в начало файла. |
Procedure Reset (var F) |
Открывает существующий файл, связанный с файловой переменной F для чтения. Текущий указатель устанавливается в начало файла. |
Procedure Append (var F: text) |
Открывает существующий файл, связанный с файловой переменной F, для добавления в него новых записей. |
Procedure Close (var F) |
Закрывает открытый внешний файл, связанный с файловой переменной F. Если после завершения обработки файла он не был закрыт, то вся информация будет потеряна. |
Function Eof (var F): boolean |
Возвращает для файла, связанного с файловой переменной F, состояние End-of-File (конец файла): True – если текущее положение указателя находится в конце файла или файл пустой; False – во всех остальных случаях. |
Procedure Read (var F:text; v1,…) |
Считывает одно или несколько значений из файла, связанного с файловой переменной F, в одну или несколько переменных v1,… |
Procedure Readln (var F:text; v1,…) |
То же, что и Read, но выполняет пропуск до начала следующей строки текстового файла. |
Procedure Write (var F:text; v1,…) |
Записывает в файл, связанный с файловой переменной F, одно или несколько значений, хранящихся в переменных v1,… |
Procedure Writeln (var F:text; v1,…) |
Делает то же, что Write, но затем записывает в текстовый файл признак конца строки. |
Рассмотрим пример: Создать на диске файл, содержащий 5 предложений записанных буквами латинского алфавита. Создать на диске другой файл, и в него записать данные из первого файла заменив строчные буквы прописными (функцию Upcase() не использовать).
Program Example;
var f1,f2:text;
s,k:string;i:integer;
Begin
assign(f1,'d:\l1.txt');
rewrite(f1);
assign(f2,'d:\l1.new');
rewrite(f2);
for i:=1 to 5 do
begin
writeln('Введите ',i,’ предложение:’);
readln(k);
writeln(f1,k);
end;
close(f1);
reset(f1);
while not eof(f1) do
begin
readln(f1,s);
for i:=1 to length(s) do
if (ord(s[i])>=ord('a')) and (ord(s[i])<=ord('z'))
then
s[i]:=chr(ord(s[i])-ord('а')+ord('А'));
writeln(f2,s);
end;
close(f1);close(f2);
End.
Поговорим теперь о типизированных и нетипизированных файлах.
Описание типизированного файла имеет вид:
Var F : file of type_file;
Где type_file может быть любым типом за исключением файлового (text). Элементами типизированного файла являются значения указанного типа.
При работе с типизированными файлами можно использовать уже знакомые нам процедуры Assign, Reset, Rewrite. Следует заметить, что текстовый файл, открытый процедурой Reset, доступен только для чтения, а типизированный – ещё и для записи. Процедуры Read и Write здесь используются по-другому. Отличие заключается в том, что каждый из параметров в рассматриваемом случае должен быть переменной типа type_file, а выражения и константы недопустимы. Процедуры Readln и Writeln применяются только к текстовым файлам.
Рассмотрим пример:
Program file_of_extended;
Var
F:file of extended;
F1:text;
X,y:extended; i:word;
Begin
Assign(f1,’d:\t1.txt’);
Rewrite(f1);
X:=0.0;
For i:=1 to 1000 do
begin
Y:=sin(x);
Writeln(f1,y);
X:=x+0.001;
end;
Close(f1);
Assign(f,’d:\t.ext’);
Rewrite(f);
X:=0.0;
For i:=1 to 1000 do
begin
Y:=sin(x);
Write(f,y);
X:=x+0.001;
end;
Close(f);
End.
После выполнения этой программы на диске появятся два файла t.ext и t1.txt. Первый является типизированным файлом, а второй – текстовым. Несмотря на то, что эти файлы содержат одинаковую информацию, между ними имеется существенное различие. Если просмотреть содержимое этих файлов, то в текстовом файле мы увидим столбик цифр, а в типизированном – псевдографические символы. Если мы, кроме того, сравним размер обоих файлов, то обнаружим, что текстовый файл занимает объём 25 000 байт, а типизированный файл – 10 000 байт. Почему? Переменная типа Extended занимает 10 байт, поэтому типизированный файл, содержащий 1000 чисел данного типа имеет размер 10 000 байт. Но если переменная типа Extended хранится в виде текстовой строки, то эта строка состоит из 23 символов, т.к. она включает показатель степени «Е+nnnn» или «Е-nnnn». Добавив сюда ещё управляемые символы CR (специальный символ возврата каретки)и LF(символ превода строки), которыми оканчивается каждая строка при вызове процедуры Writeln, и мы получим 25 символов на каждое значение типа Extended, записанное в текстовый файл. В итоге это даст 25 000 байт. По этой причине для хранения числовых данных экономнее использовать типизированные файлы.
Для более эффективного выполнения операций ввода/вывода из внешних файлов в Паскале имеются нетипизированные файлы. При работе с ними можно использовать быстрые дисковые операции низкого уровня. Нетипизированные файлы дают возможность прямого доступа к любому файлу на диске независимо от его типа и структуры. Описание нетипизированной файловой переменной имеет вид:
Var f : file;
Такая файловая переменная связывается с внешним файлом обычным образом. В числе параметров процедур Reset и Rewrite для нетипизированных файлов кроме файловой переменной имеется необязательный второй параметр типа Word: например Reset(f,n). Этот дополнительный параметр описывает размер индивидуальной записи в файле (в байтах). Если параметр отсутствует, его значение по умолчанию принимается равным 128.
