
- •Основы программирования на языке паскаль
- •1. Простейшие программы Структура Паскаль-программы
- •Данные и тип данных
- •Стандартные функции
- •Выражения
- •Организация простейших программ
- •Модуль crt
- •Задания для самостоятельной работы
- •2. Ветвления
- •Задания для самостоятельной работы
- •3. Циклы
- •Оператор цикла с постусловием используется, когда известно условие, при котором цикл будет прекращать свою. Формат оператора:
- •Задания для самостоятельной работы
- •4. Массивы
- •Сортировка
- •Задания для самостоятельной работы
- •5. Строки
- •Задания для самостоятельной работы
- •6. Процедуры и функции
- •Параметры
- •Локальные и глобальные переменные
- •Функции
- •Задания для самостоятельной работы
- •7. Записи
- •Задания для самостоятельной работы
- •8. Множества
- •Операции над множествами
- •Задания для самостоятельной работы
- •9. Файлы
- •Стандартные процедуры и функции для работы с файлами всех типов
- •Стандартные процедуры и функции для работы с типизированными файлами
- •Задания для самостоятельной работы
- •10. Модуль graph
- •Процедуры и функции модуля graph
- •Задания для самостоятельной работы
- •11. Модули, определяемые пользователем
- •Задания для самостоятельной работы
- •12. Линейные однонаправленные списки Указатели
- •Линейные однонаправленные списки
- •Задания для самостоятельной работы
- •13. Двунаправленные списки.
- •Задания для самостоятельной работы
- •14. Кольцевые списки
- •Задания для самостоятельной работы
- •15. Стеки и очереди
- •Задания для самостоятельной работы
- •16. Деревья
- •Задания для самостоятельной работы
- •Простейшие программы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
- •Бадмаева Энгельсина Сергеевна, Тонхоноева Антонида Антоновна
- •670000, Г. Улан-Удэ, ул. Смолина, 24-а.
Стандартные процедуры и функции для работы с типизированными файлами
Read (F, <список ввода>); - считывание информации из файла, где <список ввода> - список переменных того же типа, что и компоненты файла. Считывание начинается с позиции указателя текущей компоненты.
Write (F, <список вывода>); - запись информации в файл, где <список вывода> - список выражений того же типа, что и компоненты файла. Запись начинается с позиции указателя текущей компоненты.
Seek (F, Num); - установка указателя текущей компоненты на компоненту с номером Num.
FilePos (F) : Longint – функция определения номера текущей компоненты.
FileSize (F) : Longint – функция определения текущего размера файла.
Стандартные процедуры и функции для работы с текстовыми файлами
Append (F); – открытие файла для записи информации в конец файла.
Read (F, <список ввода>); – считывание информации из файла, где <список ввода> - список переменных целого, действительного, символьного или строкового типа.
Readln (F, <список ввода>); – аналогична процедуре Read, но, в отличие от нее, после считывания данных все оставшиеся символы до конца строки пропускаются, т.е. следующее считывание будет осуществляться со следующей строки.
Write (F, <список вывода>); – запись информации в файл, где <список вывода> - список выражений целого, действительного, логического, символьного или строкового типа.
Writeln (F, <список вывода>); – аналогична процедуре Write, но, в отличие от нее, после записи информации происходит переход на новую строку, т.е. следующая запись будет осуществляться со следующей строки.
Eoln (F) : Boolean – функция определения конца строки файла. (Eoln(F)=true, если достигнут конец строки файла).
SeekEoln (F) : Boolean – аналогична функции Eoln, но SeekEoln(F)=true, если до конца строки остались только незначащие символы (пробелы и знаки табуляции).
SeekEof (F) : Boolean – аналогична функции Eof, но SeekEof(F)=true, если до конца файла остались только незначащие символы.
Пример 15. Имеется файл “PERSONAL.DAT”, содержащий сведения о сотрудниках учреждения с указанием фамилии и инициалов, должности, стажа работы (полных лет) и оклада. Сотрудникам выдали премию согласно следующему распоряжению: имеющим стаж работы 20 и более лет – 50% от оклада, от 10 до 19 лет – 35%, от 5 до 9 лет - 20 % от оклада. Напечатать список премируемых сотрудников, выдав фамилию с инициалами, должность и размер премии для каждого.
Составим две программы – создания и обработки файла “PERSONAL.DAT”.
Program Example_15a;
{Программа создания файла “PERSONAL.DAT”}
Type
Persona = Record {описание типа компонент файла}
FIO, Dol : String[25];
St : Byte;
Okl : Word
End;
Var F: File of Persona; {описание файловой переменной}
Sotr: Persona; i, Kol: Byte;
Begin
Assign(F, ‘PERSONAL.DAT’); {связь файловой переменной с файлом на диске}
Rewrite(F); {открытие файла для записи}
Write(‘Введите количество сотрудников’); Readln(Kol);
For i:=1 to Kol do {цикл для ввода компонент файла}
Begin
Writeln(‘Введи данные о ’, i , ‘ сотруднике’);
With Sotr do {ввод записи - одной компоненты файла}
Begin
Write(‘Фамилия и инициалы: ’); Readln(FIO);
Write(‘Должность: ’); Readln(Dol);
Write(‘Стаж: ’); Readln(St);
Write(‘Оклад: ’); Readln(Okl)
End;
Write(F, Sotr) {запись компоненты в файл}
End;
Close(F) {закрытие файла}
End.
Program Example_15b;
{Программа обработки файла “PERSONAL.DAT”}
Type
Persona = Record
FIO, Dol : String[25];
St : Byte;
Okl : Word
End;
Var F: File of Persona;
Sotr: Persona; i: Byte; Prem:Real;
Begin
Assign(F, ‘PERSONAL.DAT’);
Reset (F); {открытие файла для считывания}
i:=0; {инициализация переменной для нумерации сотрудников в списке}
Writeln(‘Список премируемых сотрудников:’);
Writeln(‘№’:2,’ ‘,’Фамилия и инициалы’:25,’ ‘,’Должность’:25,’ ‘,’Премия’:8);
Writeln(‘-----------------------------------------------------------------------------------------’);
While Not Eof(F) do
Begin
Read(F, Sotr); {считывание компоненты файла}
With Sotr do
If St>=5 Then {проверка: положена ли сотруднику премия}
Begin
Inc(i);
{расчет премии сотруднику в зависимости от стажа}
If St>=20 Then
Prem:=0.5*Okl
Else
If St>=10 Then
Prem:=0.35*Okl
Else
Prem:=0.2*Okl;
Writeln(i:2,’ ‘,FIO:25,’ ‘,Dol:25,’ ‘,Prem:8:2) {вывод на экран}
End
End
End.
Пример 16. Пусть в каждом из файлов “F1.DAT” и “F2.DAT”, состоящих из целых чисел, элементы упорядочены по возрастанию. Требуется объединить эти файлы в один (с именем “F3.RES”), также упорядоченный по возрастанию.
Считаем, что файлы ‘F1.DAT’ и ’F2.DAT’ созданы.
Program Example_16;
Type F_int = File of Integer;
Var F1, F2, F3 : F_int; a, b: Integer;
{***процедура распечатки файла с заданным номером***}
Procedure Print( n: Byte; Var F: F_int);
Begin
Write(‘Файл F’,n,’: ’); Reset(F);
While Not Eof(F) do
Begin
Read(F,a);Write(a,’ ‘)
End;
Writeln
End; {конец процедуры Print}
{***процедура записи оставшихся компонент файлов F1 и F2 в файл F3***}
Procedure Ost (Var F: F_int; i, j: Integer);
{F – файл, который не закончился; i – первая компонента из оставшейся части F}
{j –последняя компонента другого файла, не записанная в файл F3}
Begin
While (i>j) and Not Eof(F) do {запись компонентов файла F в файл F3}
Begin
Write(F3, j); Read(F, j)
End;
If Eof(F) Then {запись оставшихся единственных компонент файлов F1 и F2 в F3}
If i<j Then
Write(F3, i, j)
Else
Write(F3, j, i)
Else
Begin
Write(F3, i, j); {запись 1-й компоненты из F и последней – из другого файла}
While Not Eof(F) do {запись оставшихся компонент файла F в файл F3}
Begin
Read(F, j); Write(F3,j)
End
End
End;{конец процедуры Ost}
Begin {начало программы}
Assign(F1, ‘F1.DAT’); Assign(F2, ‘F2.DAT’); Assign(F3, ‘F3.RES’);
Reset(F1); Reset(F2); Rewrite(F3); {открытие всех файлов}
Read(F1,a); Read(F2,b); {считывание первых компонент файлов}
While (Not Eof(F1)) and (Not Eof(F2)) do {цикл, пока не закончится один из файлов}
If a<b Then {записываем меньшую компоненту из F1 и считываем следующую}
Begin Write(F3, a); Read(F1, a) End
Else {записываем меньшую компоненту из F2 и считываем следующую}
Begin Write(F3, b); Read(F2, b) End;
If Eof(F1) Then {F1 закончился, но осталась одна необработанная компонента}
Ost(F2, a, b)
Else Ost(F1,b,a); {в файле F2 осталась 1 компонента}
Close(F3); {закрытие файла F3}
Print(1, F1); Print(2, F2); Print(3, F3) {печать файлов}
End.
Пример 17. В текстовом файле “INPUT.TXT” находится следующая информация: в первой строке находятся буква и натуральное число, разделенные пробелами; во второй строке – различные слова, разделенные пробелами. Получить файл “OUTPUT.TXT”, записав в него все слова исходного файла, длина которых равна заданному числу и которые содержат заданную букву.
Program Example_17;
Var A, B: Text; S: string; c, Symbol: char; Number: byte;
Begin
Assign(A, 'Input.txt'); Assign(B, 'Output.txt');
Reset(A); Rewrite(B);
Readln(A, Symbol, Number); {считывание из 'Input.txt' элементов первой строки}
While Not Eof(A) do
Begin
Repeat {цикл для пропуска пробелов до, между и после слов во второй строке}
Read(A, c)
Until (c<>' ') Or Eof(A); {выход из цикла: если встретится не пробел или закончится файл}
S:='';
While (c<>' ') And Not Eof(A) do {цикл для выделения слова из строки}
Begin
S:=S+c; Read(A, c)
End;
If Eof(A) And (c<>' ') Then S:=S+c; {проверка для случая, когда наступил конец файла, но последняя буква последнего слова не попала в S}
If (Length (S) = Number) And (Pos (Symbol, S) > 0) Then {проверка на запись выделенного из строки слова в результирующий файл}
Write(B, S, ' ')
End;
Close(B)
End.