- •ПРЕДИСЛОВИЕ
- •1.1. История и классификация языков программирования высокого уровня
- •1.2. Первое (знакомство с Паскалем
- •Задания
- •Лекция 2
- •2.1. Некоторые сведения о системе ТУрбо-Паскаль
- •2.2. Способы описания языка программирования
- •Лекция 3
- •3.2. Типы данных
- •4.1. Структура Паскаль-программы
- •4.2. Арифметические операции, функции, выражения Арифметический оператор присваивания
- •Форматы процедуры write
- •Задания
- •1. Что будет напечатано программой
- •если последовательно вводятся три числа: 36, -6, 2345?
- •5.2. Функции, связывающие различные типы данных
- •Задания
- •Теперь посмотрим, как это программируется наТЛаскале.
- •Здесь
- •<параметр цикла>::= <имя простой переменной порядкового типа>
- •Задания
- •7.1. Подпрограммы-процедуры
- •7.2. Подпрограммы-функции
- •7.4. Рекурсивные подпрограммы
- •8.1. Что такое рекуррентная последовательность
- •8.2. Программирование вычислений рекуррентных последовательностей
- •Задания
- •Задания
- •6. Вывод результата.
- •Теперь будем составлять подпрограммы.
- •Задания
- •12.2. Операции над множествами
- •12.3. Примеры использования множеств
- •Красивая программа! К сожалению, ею нельзя воспользоваться для
- •В этой программе использована функция определений размера файла:
- •.Fiiesize(<HMH файловой переменной>);
- •Задания
- •14.2. Работа с файлами записей
- •Задания
- •15.2. Связанные списки
- •Лекция 16
- •16.1. Организация внешних подпрограмм
- •16,2. Создание и использование модулей
- •распечаткой текста программы с подробными комментариями.
- •выполнения следующих операции над обыкновенными дробями вида -q
- •(Р — целое, Q — натуральное):
- •1) сложение;
- •2) вычитание;
- •3) умножение;
- •4) деление;
- •5) сокращение дроби;
- •7) функции, реализующие операции отношения (равно, не равно,
- •Используя этот модуль, решить задачи:
- •При разработке модуля рекомендуется такая последовательность
- •Задания
- •Приведем текст программы целиком.
- •ЗАДАНИЯ ПО ТЕМЕ “ЛИНЕЙНЫЕ АЛГОРИТМЫ”
- •ЦЕЛОЧИСЛЕННАЯ АРИФМЕТИКА
- •Сортировка массивов
- •ЗАДАЧИ ПО ТЕМЕ “ОБРАБОТКА СТРОК”
- •ЗАДАНИЯ ПО ТЕМЕ “МОДУЛИ”
- •ЗАДАНИЯ ПО ТЕМЕ “ДИНАМИЧЕСКИЕ ПЕРЕМЕННЫЕ”
- •Задачи, предлагавшиеся на школьных олимпиадах по программированию (Пермская область)
- •Учебное издание
Write(>? О;
ReadLn(T)
End;
WriteLn('BBOfl данных закон чен !');
Close(Ft)
End.
В результате работы этой программы на диске будет создан файл
сименем Temp.dat, в котором сохранится введенная информация. Для последовательного чтения данных из файла требуется выпол
нить следующие действия:
—описать файловую переменную;
—описать переменную того же типа;
—выполнить назначение (Assign);
—открыть файл для чтения (Reset);
—в цикле читать из файла (Read);
—закрыть файл (close).
П ример 2. Определить среднюю температуру для значений, хра нящихся в файле Temp.dat.
Program Task2; |
|
|
|
||
Var Ft |
File Of Real; |
|
|||
T, |
St |
Real; |
|
|
|
N |
Integer; |
'Temp.dat'); |
|||
Begin |
Assign(Ft, |
||||
|
Reset(Ft); |
|
|
||
|
St |
:= 0; |
Eof(Ft) |
Do |
|
|
While Not |
||||
|
Begin |
T); |
|
|
|
|
Read(Ft, |
|
|
||
|
St := St |
+ T |
|
|
|
|
End; |
|
|
|
|
|
N |
:= FileSize(Ft); |
|||
|
St |
:= St |
/ N; |
|
|
|
WriteLn('Средняя температура за ', N 3,* суток равна*> |
||||
|
Close(Ft) |
St |
7 |
2, ' градусов'); |
|
End. |
|
|
|
||
|
|
|
|
|
В этой программе использована функция определений размера файла:
.Fiiesize(<HMH файловой переменной>);
Ее результат — целое число, равное текущей длине файла. Замечаддо. согласно стандарту Паскаля в файл, открытый оператором Rewrite, можно только записывать информацию; а файл, открытый оператором Reset, можно использовать только для чтения. В ТУрбоПаскале допускается запись ( Write) в файл, открытый для чтения (Re set). Это создает определенные удобства для модификации файлов.
|
13.3. Текстовые файлы |
Текстовый файл |
наиболее часто употребляемая разновидность |
файлов. Как уже отмечалось раньше, немагнитные внешние устрой ства (логические) работают только с текстовыми файлами. Файлы, содержащие тексты программ на Паскале и других языках програм мирования, являются текстовыми. Различная документация, информа ция, передаваемая по каналам электронной связи — все это текстовые файлы.
В программе файловая переменная текстового типа описывается следующим образом:
Var <идентификатор> text;
Текстовый файл представляет собой символьную последовательность, разделенную на строки. Каждая строка заканчивается специальным кодом — маркером конца строки (м.к.с.). Весь файл заканчивается маркером конца файла (м.к.ф.). Схематически это выглядит так:
1Si 1 S2 | 1s kl Iм.к.с. ISi 1S21 |Sfa1м.к.с. I IМ.К.Ф1
Каждый символ представлен во внутреннем коде (ASCII) и зани мает 1 байт. Но не только делением на строки отличается текстовый файл от символьного. В текстовой файл можно записать и ио него п рочи тать информацию любого типа. Если эта информа ция не символьная, то в процессе чтения или записи происходит ее преобразование из символьной формы во внутреннюю и обратно.
Текстовый файл можно создать или преобразовать с помощью тек стового редактора. Его можно просмотреть на экране дисплея или рас печатать на принтере.
Впрограммах на Паскале для работы с текстовыми файлами наряду
спроцедурами read и write употребляются процедуры readirt и writeln.
Readln(FV, <список ввода>).
Эта процедура читает строку из файла с именем F V ) помещая прочи танное в переменные из списка ввода.
Writeln(FV, Ссписок вывода>).
Процедура записывает в файл FV значения из списка вывода, после чего выставляет маркер конца строки.
Для обнаружения конца строки в текстовом файле используется функция
Eoln(FV)
(end of line — конец строки). Это логическая функция, которая при нимает значение true, если указатель файла достиг маркера конца строки, В противном случае — false.
Употребление операторов read и Feadln без указания имени файло вой переменной обозначает чтение из стандартного файла input (ввод с клавиатуры). Употребление операторов write и writeln без имени файловой переменной обозначает запись в стандартный файл output (вывод на экран). В таком варианте этими операторами мы уже мно гократно пользовались. Считается, что файлы input и output всегда открываются соответственно для чтения и записи при работе любой программы.
При вводе с клавиатуры маркер конца строки обнаруживается при нажатии клавиши <ввод>.
Процедура геаdin может использоваться без списка ввода. В этом случае происходит пропуск текущей строки в читаемом файле.
Употребление процедуры writeln без списка вывода обозначает вы вод пустой строки (в файле выставляется маркер конца строки).
При записи в текстовый файл в списке вывода могут присутство вать форматы. Действия форматов мы уже рассматривали в разделе, где обсуждался вывод данных на экран. Точно также форматы рабо тают и при выводе в текстовые файлы, связанные с любыми другими устройствами.
П ример 1. Пусть файл с именем NOTE.TXT содержит некоторый текст. Требуется подсчитать количество строк в этом тексте.
Var Note Text;
КInteger;
Begin Assign(Note, ’Note.txt');
Reset(Note);
К := 0;
While Not |
Eof(Note) |
Do |
|
Begin |
|
|
|
ReadLn(Note); |
|
|
|
К := К |
+ 1 |
|
|
End; |
|
|
|
WriteLn(*Количество |
строк равно |
К); |
|
Close(Note) |
|
|
|
End. |
|
|
|
Используемый здесь оператор readln(Note) “пролистывает” строки из текстового файла Note, не занося их в какую-либо переменную.
П ример |
2. |
В текстовом файле N ote.txt определить длину самой |
|
большой строки. |
|
||
Var Note |
К |
Text; |
|
Max, |
Integer; |
||
C |
Char; |
|
|
Begin |
|
|
|
Assign(Note, 'Note.txt*); |
|||
Reset(Note); |
|
||
Max := 0; |
Eof(Note) |
Do |
|
While Not |
|||
Begin |
|
|
|
К := 0; |
|
||
While |
Not Eoln(Note) Do |
||
Begin |
|
||
|
Read(Note, C); |
||
|
К |
:= К + 1 |
|
End; |
|
|
|
If К |
> Max |
|
|
Then Max :» K; |
|
||
ReadLn(Note) |
|
||
End; |
|
|
строка имеет *, Max, * знаков}); |
WriteLn('Наибольшая |
|||
Close(Note) |
|
||
End. |
|
|
|
Здесь каждая строчка прочитывается посимвольно, при этом в пере менной К работает счетчик числа символов в строке. В переменной Мах отбирается наибольшее значение счетчика.
П ример 3. Решается следующая механическая задача. Под дей ствием силы F с начальной скоростью V в вязкой среде движется тело массой М. Сопротивление пропорционально квадрату скороеin с ко эффициентом К. Определить время прохождения пяти контрольных точек траектории, расстояние до которых от точки старта заданы.
Пусть с помощью текстового редактора в фалле DATE.TXT сформи рованы исходные данные в форме следующей таблицы:
И С Х О Д Н Ы Е |
Д А Н Н Ы Е |
||
М (кг) |
F (Н) V (м/с) |
К (кг/м) |
|
36.3 |
2000 |
50.5 |
0.5 |
Координаты контрольных точек (м)
х(1) |
х(2) |
х(3) |
х(4) |
х(5) |
10 |
100 |
150 |
1000 |
3000 |
Требуется ввести числовые данные в вещественные переменные М, F, V, К и массив Х"[1..5], произвести расчеты и получить результаты в массиве Т[1..5]. Результаты следует вывести на экран, а также в текстовый файл на диске с именем Rssult.txt.
Ниже приводится программа без расчетной части. Показаны только ввод исходных данных и вывод результатов.
Var М, |
F, |
V, |
К |
Real; |
I |
Integer; |
|
||
Т, |
X |
Array[1..5] Of Real; |
||
FR, |
FD |
|
Text; |
|
Begin |
|
|
’DATE.TXT’); |
|
Assign(FD, |
||||
Reset(FD); |
’Result.txt’); |
|||
Assign(FR, |
Rewrite(FR);
{____ Пропуск первых трех строк____ > ReadLn(FD);
ReadLn(FD);
ReadLn(FD);
{___________ Ввод данных____________ }
ReadLn(FD, M, |
F, V, К); |
{____ Пропуск |
трех строк_________} |
ReadLn(FD); |
|
ReadLn(FD); |
|
ReadLn(FD); |
|
{___________ Ввод данных____________ } For I :« 1 То Б Do
Read(FD, X[I]);
{ РАСЧЕТНАЯ ЧАСТЬ ПРОГРАММЫ }
{____ Вывод результатов на экран и в файл FR____ > WriteLn(’Результаты ’);