 
        
        ИнфТехнКомпТехн
.pdfномера дня недели в пределах 1..7. После ввода номера в этом интервале с помощью оператора выбора case..of формируется текстовое сообщение о дне недели. Если пользователь вводит номер 0, работа приложения завершается. Ввод чисел, отличных от 0..7, программа рассматривает, как ошибку, и просит повторить ввод.
| Листинг программы: | 
 | 
 | 
 | 
 | |
| program Prg_4_2; | 
 | 
 | 
 | 
 | |
| {$APPTYPE CONSOLE} | 
 | 
 | 
 | 
 | |
| uses | 
 | 
 | 
 | 
 | 
 | 
| SysUtils,RusTrans; | 
 | 
 | 
 | 
 | |
| label | 
 | 
 | 
 | 
 | 
 | 
| 10; | 
 | 
 | 
 | 
 | 
 | 
| type | 
 | 
 | 
 | 
 | 
 | 
| WeekDay=array[1..7] of string; | 
 | 
 | 
 | ||
| var s:string; MyWeek:WeekDay; x:integer; | 
 | 
 | |||
| begin | MyWeek[1]:='Понедельник'; | MyWeek[2]:='Вторник'; | |||
| MyWeek[3]:='Среда'; | 
 | MyWeek[4]:='Четверг'; | |||
| MyWeek[5]:='Пятница'; | 
 | MyWeek[6]:='Суббота'; | |||
| MyWeek[7]:='Воскресенье'; | недели | 1..7, а | чтобы | ||
| writeln(Rus('Введите | номер дня | ||||
| закончить | 0')); | 
 | 
 | 
 | 
 | 
| writeln; | 
 | 
 | 
 | 
 | 
 | 
10:readln(x); case x of
0:s:=Rus('Спасибо, до свидания');
1:s:=Rus(MyWeek[x])+Rus(' - день бездельник'); 2,3,4: s:=Rus(MyWeek[x])+Rus(' - рабочий день');
5:s:=Rus(MyWeek[x])+Rus('. Уф, завтра отдыхаем!');
6:s:=Rus(MyWeek[x])+Rus(' - выходной день');
7:s:=Rus(MyWeek[x])+Rus(' - выходной день, а завтра...'); else
begin
writeln(Rus('Вы ошиблись, повторите')); goto 10;
end; end; writeln(s); if x<>0 then goto 10; readln
end.
Выводы
1.Для безусловной передачи управления применяется оператор goto <Метка>.
2.Для ветвлений используется оператор If <условие> then <оператор1> else <оператор2>.
3.Возможен сокращенный оператор ветвлений if <условие> then <оператор>.
4.Для множественного ветвления можно применить оператор выбора case…of. Селектор этого оператора должен быть порядкового типа (чаще всего целочисленного, например integer).
5.Если в ветвях then или else нужно выполнить несколько операторов, то их нужно объединить в один составной оператор с помощью операторных скобок begin…end.
181
5. Циклы с неизвестным числом повторений
Подготовка к работе
1.По указанной литературе изучить:
организацию циклов с неизвестным числом повторений;
организацию таких циклов с помощью операторов while...do и repeat...until;
вычисление суммы членов бесконечного ряда.
2.Разработать алгоритм решения задачи.
3.Составить программы решения задачи.
Контрольные вопросы.
1.Циклический процесс с неизвестным числом повторений.
2.Его отличия от цикла с заданным числом повторений.
3.Операторы языка Object Pascal для организации таких циклов. Их сравнение.
4.Формат оператора while...do.
5.Как выполнить группу операторов в цикле while...do?
6.Формат оператора repeat...until.
7.Как выполнить группу операторов в цикле repeat...until?
8.Прямое вычисление значения суммы членов бесконечного ряда.
9.Вычисление значения суммы членов бесконечного ряда по рекуррентной формуле.
10.Условие выхода из цикла при вычислении значения суммы членов бесконечного ряда.
| Листинг программы | 
 | 
 | 
 | |
| program Prg_05_1; | 
 | 
 | 
 | |
| {$APPTYPE CONSOLE} | 
 | 
 | 
 | |
| uses | 
 | 
 | 
 | 
 | 
| SysUtils, RusTrans; | 
 | 
 | 
 | |
| var | 
 | 
 | 
 | 
 | 
| a,e,q,s,x: real; | 
 | 
 | 
 | |
| n: integer; | 
 | 
 | 
 | 
 | 
| begin | 
 | 
 | // Ввод | данных | 
| writeln(Rus('Введите точность')); | ||||
| write('e='); | 
 | 
 | 
 | |
| readln(e); | 
 | аргумент')); | 
 | 
 | 
| writeln(Rus('Введите | 
 | 
 | ||
| write('x='); | 
 | 
 | 
 | |
| readln(x); | // Инициализация цикла | 
 | 
 | |
| n := 0; | 
 | 
 | ||
| a := x; | 
 | 
 | 
 | 
 | 
| s := a; | 
 | // Начало цикла | 
 | 
 | 
| while abs(a)>E do | 
 | 
 | ||
| begin // Тело цикла | 
 | 
 | 
 | |
| q:=-x*x/(2*n+2)/(2*n+3); | 
 | 
 | ||
| a:=a*q; | 
 | 
 | 
 | 
 | 
| s:=s+a; | 
 | 
 | 
 | 
 | 
| n:=n+1; | 
 | 
 | 
 | 
 | 
| end; | 
 | 
 | 
 | 
 | 
| writeln; | 
 | 
 | результатов | |
| writeln(Rus('Результат')); // Вывод | ||||
| writeln(Rus('Сумма | s='),s:8:3); | 
 | 
 | |
| writeln(Rus('Членов | ряда n='),n); | 
 | 
 | |
| 
 | 
 | 182 | 
 | 
 | 
readln;
end.
Задание 2
Блоксхема алгоритма приведена на Рис. 5.3. В блоке 1 вводятся исходные данные. Инициализация данных для цикла выполняется в блоке 2. Блок 3 - цикл repeat...until. Результаты выводятся в блоке 4. Результат работа программы такой же, как для задания 1.
| Листинг программы | 
 | 
 | 
 | |
| program Prg_05_2; | 
 | 
 | 
 | |
| {$APPTYPE CONSOLE} | 
 | 
 | 
 | |
| uses | 
 | 
 | 
 | 
 | 
| SysUtils,RusTrans; | 
 | 
 | 
 | |
| var | 
 | 
 | 
 | 
 | 
| a,e,q,s,x: real; | 
 | 
 | 
 | |
| n: integer; | 
 | 
 | 
 | 
 | 
| begin | 
 | 
 | // Ввод | данных | 
| writeln(Rus('Введите точность')); | ||||
| write('e='); | 
 | 
 | 
 | |
| readln(e); | 
 | аргумент')); | 
 | 
 | 
| writeln(Rus('Введите | 
 | 
 | ||
| write('x='); | 
 | 
 | 
 | |
| readln(x); | // Инициализация цикла | 
 | 
 | |
| n := 0; | 
 | 
 | ||
| a := x; | 
 | 
 | 
 | 
 | 
| s := a; | 
 | 
 | 
 | 
 | 
| repeat// Начало цикла | 
 | 
 | ||
| q:=-x*x/(2*n+2)/(2*n+3); // Тело цикла | 
 | |||
| a:=a*q; | 
 | 
 | 
 | 
 | 
| s:=s+a; | 
 | 
 | 
 | 
 | 
| n:=n+1; | 
 | 
 | 
 | 
 | 
| until abs(a)<e; | 
 | 
 | 
 | |
| writeln; | 
 | 
 | результатов | |
| writeln(Rus('Результат')); // Вывод | ||||
| writeln(Rus('Сумма | s='),s:8:3); | 
 | 
 | |
| writeln(Rus('Членов | ряда n='),n); | 
 | 
 | |
| readln; | 
 | 
 | 
 | 
 | 
| end. | 
 | 
 | 
 | 
 | 
Выводы
1.Для организации циклов с неизвестным числом повторений применяются операторы:
while...do (цикл ДО),
repeat...until (цикл ПОКА).
2.Для выполнения в цикле while...do группы операторов необходимо превратить ее в один составной оператор с помощью операторных скобок begin…end.
3.При выполнении цикла repeat...until в теле цикла может находиться множество операторов. Составной оператор не требуется.
6. Циклы с заданным числом повторений Подготовка к работе
1. По указанной литературе изучить:
183
| 
 | организацию циклов с известным числом повторений; | 
 | |||
| возможности | языка для | организации | таких | циклов с помощью | |
| 
 | операторов с | параметром | for...to...do и for... | downto | ...do. | 
2.Разработать алгоритм решения задач.
3.Составить программы решения задач.
Контрольные вопросы
1.Преимущества использования операторов циклов в программе.
2.Циклический процесс с заданным числом повторений.
3.Средства языка Object Pascal для организации циклов с заданным числом повторений.
4.Оператор цикла for...to...do.
5.Оператор цикла for...downto...do.
6.Разница между операторами for...to...do и for...downto...do.
7.Требования к переменной цикла в операторах for...to...do и for...downto...do.
8.Организация вычисления суммы.
9.Организация вычисления произведения.
7. Массивы
Подготовка к работе
1.По рекомендуемой литературе изучить:
способы описания размеров массивов;
способы ввода и вывода массивов;
реализацию приемов накопления суммы или произведения элементов массивов, запоминания результатов, нахождение наибольшего и наименьшего;
способы ввода и вывода матриц.
2.Разработать алгоритм решения в соответствии с заданием.
3.Составить программу решения задачи.
Контрольные вопросы
1.Что такое массив?
2.Описание типа - массив.
3.Какие операторы языка можно использовать для описания массивов?
4.Особенности организации цикла при обработке массивов?
5.Особенности программирования при обработке массивов?
6.Особенность ввода и вывода массивов?
7.Представление строковых переменных типа String, как одномерных массивов.
8.Вложенные массивы.
Задание к работе
1.Обработка одномерного массива. Варианты заданий в табл. 6.1. Проект – консольное приложение.
2.Обработка матрицы. Варианты заданий в табл. 6.2. Проект – консольное приложение
184
 
Таблица 6.1 - Варианты задания 1
| № Имя массива | Задание | 
1X(100) Вычислить сумму и количество элементов массива X, условие 0 ≤ X i ≤ 1.
2А(80)
Вычислить среднее арифметическое значение элементов массива A, условие A 0i .
| 3 | X(70) | Переписать элементы массива X в массив Y и подсчитать их количество, если − 1 ≤ X i ≤ 1 . | ||||
| 
 | 
 | 
 | 
 | 
 | 
 | |
| 4 | В(50) | Определить максимальный элемент массива В и его порядковый номер при B 0i . | ||||
| 
 | 
 | |||||
| 5 | С(40) | Вычислить минимальный элемент массива С и его номер при C 0i. | 
 | 
 | 
 | |
| 
 | 
 | 
 | 
 | 
 | ||
| 6 | D(80) | Найти максимальный и минимальный элементы массива D и поменять | их местами. | 
 | ||
| 
 | 
 | Найти сумму элементов массива. Разделить каждый элемент исходного массива на | ||||
| 7 | Y(20) | полученное значение. Результат получить в том же массиве. Полученный массив распечатать | ||||
| 
 | 
 | в одной строке. | 
 | 
 | 
 | |
| 
 | 
 | 
 | 
 | |||
| 8 | А(4) | Найти сумму элементов массива. Разделить каждый элемент исходного массива на | ||||
| полученное значение. Результат получить в том же массиве. Напечатать в одной строке. | ||||||
| 
 | 
 | |||||
| 
 | 
 | 
 | 
 | |||
| 9 | N(50) | Определить сумму элементов массива N, кратных трем. Условие: INT(N(i)/3)*3=N(i). | ||||
| 
 | 
 | 
 | 
 | 
 | 
 | |
| 10 | X(N) | Вычислить сумму и количество элементов массива X. Условие X 0,i N ≤ 30 . | 
 | 
 | ||
| 
 | 
 | 
 | 
 | |||
| 11 | X(N) | Переписать в массив Y подряд положительные элементы массива X. Условие N ≤ 40 . | 
 | |||
| 12 | X(N) | Переписать подряд в массив Y положительные и в массив Z отрицательные элементы массива | ||||
| X.Условие N ≤ 40 . | 
 | 
 | 
 | |||
| 
 | 
 | 
 | 
 | 
 | ||
| 
 | 
 | 
 | 
 | 
 | 
 | |
| 13 | В(K) | Определить максимальный элемент массива B и его порядковый номер при B 0,i K ≤ 50 . | ||||
| 
 | 
 | |||||
| 14 | С(K) | Определить минимальный элемент массива С и его порядковый номер при | 
 | 
 | ||
| − 1 ≤ C i ≤ 1, K ≤ 50 . | 
 | 
 | 
 | |||
| 
 | 
 | 
 | 
 | 
 | ||
| 
 | 
 | 
 | 
 | |||
| 
 | 
 | Найти среднее значение элементов заданного массива. Преобразовать исходный массив, | ||||
| 15 | А(K) | вычитая из каждого элемента среднее значение. Полученный массив распечатать в виде | ||||
| 
 | 
 | строки. K<=40. | 
 | 
 | 
 | |
185
Таблица 6.2 - Варианты задания 2
| Матрица | Задание | |
| A | Вычислить и запомнить сумму и число положительных элементов каждого столбца | |
| матрицы. Результаты отпечатать в виде двух строк | ||
| 
 | ||
| B | Вычислить и запомнить суммы и числа элементов каждой строки матрицы. Результаты | |
| отпечатать в виде двух столбцов. | ||
| 
 | ||
| 
 | 
 | |
| C | Вычислить сумму элементов побочной диагонали матрицы. | |
| A | Найти след матрицы. | |
| 
 | 
 | |
| B | Найти сумму элементов второй строки матрицы. | |
| 
 | 
 | |
| C | Найти сумму элементов второго столбца матрицы. | |
| A | Вывести на печать элементы матрицы А(i,j)<=4 | |
| A | Вывести на печать элементы матрицы 2<= А(i,j) <=5 | |
| B | Вывести на печать отрицательные элементы матрицы. | |
| A | Вывести на печать положительные элементы матрицы. | |
| A | Вычислить сумму элементов матрицы. | |
| A | Найти сумму элементов побочной диагонали матрицы. | |
| B | Вычислить сумму элементов двух первых столбцов матрицы. | |
| C | Вычислить среднее арифметическое матрицы. | |
| A | Определить сумму элементов третьей строки матрицы. | 
В блоке 1 вводятся число элементов массива n и значения элементов массива x[i]. В блоке 2 в качестве кандидатов в ответы выбирается первый элемент (Xmax = первый элемент массива, Imax = 1). Блок 3 открывает цикл с известным числом повторений. В блоке 4 текущий элемент массива x[i] сравнивается с Xmax. Если он больше Xmax, то в блоке 5 Xmax и Imax меняются на параметры текущего элемента. Результат выводится блоком 6. Блок 7 обеспечивает паузу в исполнении программы, чтобы пользователь мог увидеть результат.
| Листинг программы | 
 | 
 | 
 | 
 | 
 | |
| program Prg_7_1; | 
 | 
 | 
 | 
 | 
 | |
| {$APPTYPE CONSOLE} | 
 | 
 | 
 | 
 | 
 | |
| uses | 
 | 
 | 
 | 
 | 
 | 
 | 
| SysUtils,RusTrans; | 
 | 
 | 
 | 
 | 
 | |
| const | 
 | 
 | 
 | 
 | 
 | 
 | 
| NN=30; | 
 | 
 | 
 | 
 | 
 | 
 | 
| var | 
 | 
 | 
 | 
 | 
 | 
 | 
| i,n,Xmax,Imax: integer; | 
 | 
 | 
 | 
 | ||
| x:array[1..NN] of integer; | 
 | 
 | 
 | |||
| begin | 
 | 
 | 
 | n')); | 
 | 
 | 
| writeln (Rus('Введите размер массива | 
 | 
 | ||||
| readln(n); | 
 | 
 | 
 | 
 | 
 | 
 | 
| writeln; | 
 | 
 | 
 | 
 | 
 | 
 | 
| randomize; | 
 | 
 | 
 | // Ввод | элементов | |
| for i:=1 to n do x[i]:=random(100); | ||||||
| массива x | 
 | 
 | 
 | 
 | 
 | 
 | 
| Xmax:=x[1];// Кандидат в Xmax | 
 | 
 | 
 | |||
| Imax:=1; | // Его | номер | 
 | Xmax | 
 | |
| for i:=2 to n do if x[i]>Xmax then // Поиск | 
 | |||||
| begin Xmax:=x[i]; Imax:=i | 
 | 
 | 
 | |||
| end; writeln; writeln(Rus('Результат')); | 
 | 
 | ||||
| writeln(Rus('Максимум | Xmax='),Xmax); | 
 | 
 | 
 | ||
| 
 | 
 | 
 | 186 | 
 | 
 | 
 | 
writeln(Rus('Его номер Imax='),Imax); readln
end.
Задание 2
Вывести квадратную матрицу X размером N в виде таблицы. Вычислить и вывести сумму первых положительных элементов нечетных столбцов матрицы и обнулить элементы, размещенные над суммируемыми элементами.
Листинг программы: program Prg_7_2; {$APPTYPE CONSOLE} uses SysUtils,RusTrans; const NN=30;
var
i,j,k,l,n,s: integer; x:array[1..NN,1..NN] of integer;
| begin | матрицы n')); | 
| writeln (Rus('Введите размер | |
| readln(n); | 
 | 
| writeln; | 
 | 
| randomize; | do// | Формирование матрицы | ||
| for i:=1 to n | ||||
| for j:=1 | to n | do x[i,j]:=50-random(100); | ||
| for i:=1 | to n | do// | Вывод | матрицы | 
begin
for j:=1 to n do write(x[i,j]:4); writeln;
| end; | суммы | 
 | 
| s:=0; // Инициализация | 
 | |
| for j:=1 to n do | 
 | 
 | 
| begin | 
 | // Пропустить четные столбцы | 
| if j mod 2=0 then continue; | ||
| for i:=1 to n do | 
 | 
 | 
| begin | 
 | 
 | 
| if x[i,j]>0 then begin | 
 | 
 | 
| s:=s+x[i,j]; | 
 | // Суммирование | 
| break; | 
 | // Досрочныйвыход из цикла | 
end;
x[i,j]:=0; // Обнуление элемента матрицы end;
end; writeln; writeln(Rus('Сумма='),s); for k:=1 to n do begin // Вывод измененной матрицы
for l:=1 to n do write(x[k,l]:4); writeln;
end;
readln;
end.
187
Выводы
1.Массив – это набор компонент одинакового типа.
2.Размерность массива ограничена только доступной памятью.
3.Для обработки массивов применяются операторы циклов с известным числом повторений.
4.При использовании операторов циклов можно применять процедуры:
continue для перехода к следующей итерации в цикле,
break для досрочного выхода из цикла.
5.Переборный алгоритм позволяет найти элемент массива с заданным свойством (например, имеющий максимальное значение).
6.Матрицы наглядно отображаются в табличной форме. Для вывода матриц в таком виде используются операторы:
write для размещения нескольких элементов в одной строке текста,
writeln для перехода к другой строке.
8.Файлы
Подготовка к работе
1.По рекомендуемой литературе изучить:
типы файлов, определенные в Delphi;
связь с дисковыми файлами;
операции с типизированными файлами;
операции с текстовыми файлами;
операции с нетипизированными файлами.
7.Разработать алгоритмы решения в соответствии с заданием.
8.Составить программы решения задач.
9.Контрольные вопросы
10.Типы файлов, определенные в Delphi.
11.Способы связи с файлами (прямой, файловая переменная).
12.Файловая переменная.
13.Как связать файловую переменную с дисковым файлом?
14.Процедуры создания, открытия, закрытия типизированных файлов.
15.Организация прямого доступа к компонентам типизированных файлов.
16.Процедуры создания, открытия, закрытия текстовых файлов.
17.Процедуры создания, открытия, закрытия нетипизированных файлов.
18.Высокоскоростное копирование файлов.
19.Контроль ошибок работы с файлами.
Задание к работе
Выполнить 4 задания по работе с файлами. Все проекты - консольные приложения. Задания и исходные данные представлены в табл. 8.1.
Задания:
1.Создать программу создания и дополнения текстового файла. Сначала создать текстовый файл из 5 строк и посмотреть его содержимое. Затем добавить в этот файл произвольные строки и проверить содержимое итогового файла.
2.Создать программу демонстрации произвольного доступа к элементам файла. Она заносит в файл последовательно числа от N1 до N2. После записи из файла считываются на дисплей все компоненты.
3.Создать программу для высокоскоростного копирования файла-источника в файл-приемник. В качестве файлаисточника использовать результат компиляции
188
Prg_8_1.exe программы задачи 1, созданный ранее в папке 8_1. В качестве файлаприемника определить файл с именем Prg_8_1a.exe в папке 8_3.
4.Создать программу обмена данными с файлом, использующую прямое обращение к именам файлов. Она заносит в буфер N1 случайных чисел и переносит их в файл. Затем буфер обнуляется, и из файла возвращаются первые N1-2 числа.
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | Таблица 8.1 - Варианты задания 2, 4. | ||||||||||||
| 
 | 
 | 
 | 1 | 2 | 
 | 3 | 
 | 4 | 
 | 
 | 5 | 6 | 
 | 7 | 
 | 8 | 9 | 
 | 10 | 11 | 
 | 12 | 13 | 
 | 14 | 
 | 15 | 
 | 
 | 
| 
 | N1 | 
 | 4 | 6 | 
 | 8 | 
 | 7 | 
 | 
 | 9 | 43 | 
 | 21 | 
 | 23 | 14 | 
 | 12 | 17 | 
 | 18 | 25 | 
 | 33 | 
 | 28 | 
 | 
 | 
| 
 | N2 | 
 | 9 | 11 | 
 | 16 | 
 | 21 | 
 | 19 | 58 | 
 | 44 | 
 | 46 | 25 | 
 | 29 | 34 | 
 | 42 | 53 | 
 | 44 | 
 | 43 | 
 | 
 | |
| Листинг программы: | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||
| program Prg_8_1; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||
| {$APPTYPE CONSOLE} | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||
| uses | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |
| SysUtils, RusTrans; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||
| const | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |
| FileDir='c:\users\PO_11\Ivanov\08_1\';; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||||||||||
| var | 
 | 
 | 
 | // Файловая переменная | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||||||
| MyFile: text; | 
 | 
 | 
 | 
 | 
 | для строк | |||||||||||||||||||||||
| FilePath,FileName,Temp: string;// Переменные | 
 | ||||||||||||||||||||||||||||
| i,imax: integer; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||
| label | 
 | 
 | 
 | 
 | выхода | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||
| Exit; // Метка | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||
| begin | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | имя | 
 | 
 | файла')); | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||
| writeln(Rus('Введите | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||||||
| readln(FileName); | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||
| writeln; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | // Путь | 
 | к | файлу | 
 | 
 | 
 | 
 | |||||||
| FilePath:=FileDir+FileName; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | диске | |||||||||||||||||||||
| AssignFile(MyFile,FilePath); | 
 | // Связь | файлом на | ||||||||||||||||||||||||||
| {$I-} // Отключить контроль | 
 | 
 | ошибок | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||||||
| Rewrite(MyFile);// Создать новый | 
 | файл | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||||||||
| {$I+};// Включить контроль | 
 | ошибок | 
 | 
 | открытия | файла | |||||||||||||||||||||||
| if IOResult = 0 // Проверить | ошибку | ||||||||||||||||||||||||||||
| then writeln(Rus('Спасибо')) | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||||
| else begin | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |
| writeln(Rus('Ошибка')); | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||
| readln; | // Выход | при | 
 | ошибке | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||
| goto Exit | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||||||
| end; writeln; imax:=5; | '),imax,Rus(' строк')); | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||||||||||||
| writeln(Rus('Введите | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||||||||||||
| for i:=1 to imax do | 
 | 
 | // Повторять | 
 | 5раз | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||||||
| begin | 
 | 
 | 
 | 
 | 
 | '),i,' = '); | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||
| write(Rus('Строка | 
 | 
 | клавиатуры | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||||||||||
| readln(Temp); | 
 | // Чтение строки с | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||||||||||||
| writeln(MyFile,Temp);// Запись этой строки в файл | 
 | ||||||||||||||||||||||||||||
| end; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | // Закрыть | файл | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||||||
| CloseFile(MyFile); | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||||||||
| Reset(MyFile); | 
 | // Открыть его | 
 | для | 
 | проверки | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||||||||
| i:=1; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |
| writeln; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | файла')); | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||||
| writeln(Rus('Содержимое | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||||||||||||||||
| writeln; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |
| 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 189 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||
| while not EOF(MyFile) do | // Повторять | до | конца | файла | ||||||||
| begin | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | из | файла | 
 | 
 | 
| readln(MyFile,Temp); // Чтение строки | 
 | этой | ||||||||||
| writeln(Rus('Строка | '),i,' = ',Temp); | // | Вывод | |||||||||
| строки на | дисплей | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||
| i:=i+1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |
| end; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
| writeln; | 
 | 
 | // Закрыть | файл | 
 | 
 | 
 | 
 | ||||
| CloseFile(MyFile); | 
 | 
 | 
 | 
 | ||||||||
| {$I-} // Отключить контроль | ошибок | 
 | 
 | 
 | 
 | 
 | ||||||
| Append(MyFile); // Открыть | 
 | файл | для добавления строк | |||||||||
| {$I+};// Включить контроль | 
 | ошибок | 
 | открытия | файла | |||||||
| if IOResult = 0 // Проверить | ошибку | 
 | ||||||||||
| then writeln('OK') | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |||
| else begin | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |
| writeln(Rus('Ошибка')); | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | ||||
| readln; | // Выход | при | ошибке | 
 | 
 | 
 | 
 | 
 | ||||
| goto Exit | 
 | 
 | 
 | 
 | 
 | |||||||
| end; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
| writeln; | 
 | 
 | еще | '),imax,Rus(' строк')); | 
 | |||||||
| writeln(Rus('Введите | 
 | |||||||||||
| for i:=imax+1 to imax*2 do// Повторять | 5 раз | 
 | 
 | |||||||||
| begin | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
| write(Rus('Строка '),i,' = '); | 
 | клавиатуры | 
 | 
 | ||||||||
| readln(Temp); | // Чтение строки с | файл | ||||||||||
| Writeln(MyFile,Temp) // Запись | этой | строки в | ||||||||||
| end; | 
 | 
 | 
 | // Закрыть | файл | 
 | 
 | 
 | 
 | |||
| CloseFile(MyFile); | 
 | 
 | 
 | 
 | ||||||||
| Reset(MyFile); | // Открыть его | для | проверки | 
 | 
 | |||||||
| i:=1; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
| writeln; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |
| writeln(Rus('Содержимое файла')); | 
 | 
 | 
 | 
 | 
 | |||||||
| writeln; | 
 | 
 | 
 | // Повторять | до | конца | файла | |||||
| while not EOF(MyFile) do | ||||||||||||
| begin | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | из | файла | 
 | 
 | 
| readln(MyFile,Temp); // Чтение строки | 
 | этой строки | ||||||||||
| writeln(Rus('Строка | '),i,' | = ',Temp); | // Вывод | 
 | ||||||||
| на | дисплей | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |
| i:=i+1 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |
| end; writeln; writeln('OK'); readln; | 
 | 
 | 
 | 
 | 
 | |||||||
| CloseFile(MyFile); | // Закрыть | файл | 
 | 
 | 
 | 
 | ||||||
| Exit:; | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | |
| end. | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
Задание 2
Создать программу демонстрации произвольного доступа к элементам файла. Она заносит в файл последовательно числа в диапазоне от N1 до N2 (целые и положительные). После записи из файла считываются на дисплей все его компоненты с номерами (начиная с 0). Блок-схема алгоритма приведена на Рис. 8.3.
В блоке 1 пользователь по запросу вводит имя файла на диске (например, E). В блоке 2 из известного имени папки, в которой файл должен быть размещен (константа FileDir в коде программы), и этого имени генерируется путь к файлу, после чего создается файл.
190
