- •Основы программирования на языке Паскаль
- •Часть 1. Основы языка Паскаль 2
- •Часть 2. Элементы профессионального программирования на Паскале 44
- •От автора
- •Часть 1. Основы языка Паскаль
- •1. Алгоритм и программа
- •1.1. Алгоритм
- •1.2. Свойства алгоритма
- •1.3. Формы записи алгоритма
- •1.4. Программа и программное обеспечение
- •1.5. Этапы разработки программы
- •2. Данные в языке Паскаль
- •2.1 Константы
- •2.2 Переменные и типы переменных
- •3. Арифметические выражения
- •4. Линейный вычислительный процесс
- •4.1 Оператор присваивания
- •4.2 Оператор ввода
- •4.3 Оператор вывода
- •4.4 Управление выводом данных
- •4.5 Вывод на печать
- •5. Структура простой программы на Паскале
- •6. Компилятор и оболочка Turbo Pascal
- •7. Разветвляющийся вычислительный процесс и условный оператор
- •7.4. Короткий условный оператор
- •If логическое_выражение then оператор1;
- •7.5. Полный условный оператор
- •If логическое_выражение then оператор1
- •7.7. Вложенные условные операторы
- •7.9. Примеры программ с условным оператором
- •8. Директивы компилятора и обработка ошибок ввода
- •9. Оператор цикла. Циклы с предусловием и постусловием
- •10. Цикл со счетчиком и досрочное завершение циклов
- •11. Типовые алгоритмы табулирования функций, вычисления количества, суммы и произведения
- •11.1 Алгоритм табулирования
- •11.2 Алгоритм организации счетчика
- •11.3 Алгоритмы накопления суммы и произведения
- •12. Типовые алгоритмы поиска максимума и минимума
- •13. Решение учебных задач на циклы
- •14. Одномерные массивы. Описание, ввод, вывод и обработка массивов на Паскале
- •15. Решение типовых задач на массивы
- •Часть 2. Элементы профессионального программирования на Паскале
- •16. Кратные циклы
- •16.1 Двойной цикл и типовые задачи на двойной цикл
- •16.2 Оператор безусловного перехода
- •17. Матрицы и типовые алгоритмы обработки матриц
- •18. Подпрограммы
- •18.1 Процедуры
- •18.2 Функции
- •18.3 Массивы в качестве параметров подпрограммы
- •18.4 Открытые массивы
- •19. Множества и перечислимые типы
- •20. Обработка символьных и строковых данных
- •20.1. Работа с символами
- •20.2 Работа со строками
- •21. Текстовые файлы
- •21.1 Общие операции
- •21.2 Примеры работы с файлами
- •21.3 Работа с параметрами командной строки
- •22. Записи. Бинарные файлы
- •23. Модули. Создание модулей
- •23.1. Назначение и структура модулей
- •23.2. Стандартные модули Паскаля
- •24. Модуль crt и создание простых интерфейсов
- •25. Модуль Graph и создание графики на Паскале
- •Приложение 1. Таблицы ascii-кодов символов для операционных систем dos и Windows
- •Приложение 2. Основные директивы компилятора Паскаля
- •Приложение 3. Основные сообщения об ошибках Паскаля
- •Приложение 4. Дополнительные листинги программ
- •Приложение 5. Расширенные коды клавиатуры
- •Ascii‑коды
- •Расширенные коды
- •Приложение 6. Правила хорошего кода
- •Приложение 7. Рекомендуемая литература
21.2 Примеры работы с файлами
Пр. Чтение числовых данных из файла – массив данных имеет фиксированную размерность=5
var f,w:text; a: array [1..5] of integer; i:integer;
begin
assign (f,'data.txt');
reset (f);
for i:=1 to 5 do read (f, a[i]);
close (f);
assign (w, 'result.dat');
rewrite (w);
writeln (w,'Результаты:');
for i:=1 to 5 do writeln (w,a[i]:5,sqr(a[i]):5);
close(w); end.
Файл data.txt может быть, например, таким:
1 2 3
4 5
Файл result.dat будет таким:
Результаты:
1 1
2 4
3 9
4 16
5 25
Пр. Просмотр любого текстового файла на экране. По заполнении экрана до 24 строк программа делает паузу.
var f:text; s:string; count:integer;
begin
repeat
write ('Введите имя файла или 0 для выхода: ');
readln (s);
if s='0' then halt;
assign (f,s);
{$I-}reset (f);{$I+}
if IoResult<>0 then begin
writeln ('Не могу открыть файл с именем ',s);
write ('Нажмите Enter для продолжения ->');
readln;
continue; {оператор начинает выполнение текущего цикла с начала}
end;
count:=1;
while not eof(f) do begin
readln (f,s);
writeln (s);
count:=count+1;
if count=24 then begin
count:=1;
write ('Нажмите Enter для продолжения ->');
readln;
end;
end;
write ('Нажмите Enter для нового ввода ->');
readln;
close (f);
until false;
end.
Строка s здесь используется как для ввода имени файла, так и для чтения строки файла – ведь после выполнения связывания оператором assign имя файла нам больше не нужно! Обратите внимание также на оператор continue, в данном случае он позволяет не завершать выполнение программы после неверного ввода пользователя.
Пр. Работаем со "смешанным" файлом данных.
Файл data.txt имеет следующий вид:
Иванов 2
Петров 1
Сидоров 3
Попов 2
(в строке - фамилия рабочего и через пробел – номер участка, на котором он работает)
Напишем программу для вывода фамилий всех работников выбранного участка и подсчета их количества.
var f:text; s,fam:string; u,uch,p,kol,i:integer;
begin
writeln ('Участок?'); read (uch);
assign (f,'data.txt'); reset (f);
kol:=0;
while not eof (f) do begin
readln (f,s);
p:=pos(' ',s);
if p>0 then begin
fam:=copy (s,1,p-1);
delete (s,1,p);
val (s,u,i);
if i<>0 then begin
writeln ('Ошибка в числе ',s,' – нет номера участка');
halt;
end;
if u=uch then begin {подсчет рабочих на участке}
writeln (fam);
kol:=kol+1;
end;
end
else begin
writeln ('Ошибка в строке ',s,' – нет пробела');
halt;
end;
end;
close (f);
writeln ('kol=',kol);
end.
Большая часть этой программы посвящена анализу прочитанной из файла строки "смешанных" данных. Программу можно существенно упростить, изменив формат исходных данных – например, на одной строке файла может быть набрана фамилия, а на другой – номер участка. Тогда основной цикл чтения файла будет выглядеть так:
while not eof (f) do begin
readln (f,fam);
readln (f,u);
if (u=uch) then begin
{ . . . }
end;
end;
Приведенный пример иллюстрирует, как часто выбор программистом более или менее удобного формата хранения данных влияет на сложность программы.