
- •Иванов и.Н. Паскаль История развития языка.
- •Как пишутся программы
- •Язык программирования
- •Методика решения задач
- •Структура паскаль-программы
- •Раздел описаний
- •Uses - подключение библиотеки данные и их типы
- •Переменные
- •Имена переменных
- •Константы
- •Синтаксис и семантика написания программ
- •Стандартные типы данных
- •Знакомство с интегрированной средой
- •Вход в интегрированную среду
- •Поля основного меню File - работа с файлами
- •Edit - редактирование
- •Search - поиск информации
- •Compile - компиляция программы
- •Debug - отладка программы
- •Tools - инструментальные средства
- •Options - параметры среды
- •Window - работа с окнами
- •Help - информационная помощь
- •Лабораторная работа №1 на тему
- •Запуск среды
- •1). Прежде всего, установите свой каталог, в котором будут содержаться ваши программы:
- •2). Ввод новой программы:
- •Редактирование программы
- •Копирование информации
- •Операторы паскаля: присваивания, ввода-вывода данных Оператор присваивания.
- •Оператор ввода данных.
- •Оператор вывода данных.
- •Модуль crt.
- •Выражения и функции в Паскале.
- •Возведение в степень
- •Практическая работа № 1 тема: "составление линейных и диалоговых программ"
- •Организация ввода-вывода в паскале.
- •Стандартные функции. Линейные программы
- •Ветвления и циклы в паскале. Оператор варианта Оператор ветвления (условный).
- •Оператор варианта.
- •Оператор цикла с параметром.
- •Вложенные циклы
- •Оператор цикла с предусловием. (Работает, пока истинно условие)
- •Оператор цикла с постусловием. (Работает, пока ложно условие)
- •Нестандартные типы данных: перечисляемый и ограниченный тип
- •Var имя переменной: имя типа;
- •Ограниченный тип данных
- •1 Октября 1994 года - 4 квартал – суббота
- •Символьные переменные и функции в паскале
- •Процедуры и функции в паскале
- •Графика паскаля
- •Практический зачет на тему:
- •Сложные типы данных тип массив. Одномерные массивы
- •Решение задач
- •IV. Домашнее задание.
- •Сложные типы данных. Тип массив двумерные массивы
- •Ввод-вывод элементов массива.
- •Решение задач
- •Файловый тип данных
- •Урок № 55-56
- •Ход урока.
- •I. Самостоятельная работа с теоретическим материалом.
- •II. Теоретический материал.
- •III. Домашнее задание.
- •Урок № 57-58
- •Ход работы.
- •Урок-исследование № 59-60
- •Ход урока.
- •Теоретический материал к уроку.
- •Var имя множества: set of базовый элемент;
- •Var имя множества: имя типа;
- •Задание для работы в группах по теме “Множества”
- •Урок № 61-62
- •Ход работы.
- •I. Консультация по билетам.
- •II. Решение задач.
- •III. Домашнее задание.
Файловый тип данных
В задачах, которые мы рассматривали, данные поступали с клавиатуры, а результаты выводились на экран дисплея. Поэтому ни исходные данные, ни результаты не сохранялись. Всякий раз при выполнении одной и той же программы, особенно во время ее отладки, приходилось заново вводить исходные данные. А если их очень много? Тогда удобно оформить исходные данные и результаты в виде файлов, которые можно хранить на диске точно так же, как и программы.
Файл - это область памяти на внешнем носителе, в которой хранится некоторая информация.
Создание внешних файлов данных для постоянного хранения на магнитных дисках и возможность обрабатывать эти файлы в программе является эффективным средством программирования.
В языке программирования Паскаль файл представляет собой последовательность элементов одного типа (простого или сложного). В отличие от массива длина файла, т.е. количество элементов, не задается, место элемента не определяется индексом и каждый элемент становится доступным только после перебора всех предыдущих элементов. Такие файлы называют последовательными (или последовательного доступа) Файл последовательного доступа можно сравнить с магнитной лентой, на которой записаны песни. Для того, чтобы найти конкретную песню, надо перемотать кассету на начало и прослушивать песню за песней, до тех пор, пока не будет найдена нужная.
Зачем нужны файлы? Объем информации, которую можно сохранить в файле, очень велик. Он значительно больше, чем объем, который можно хранить в оперативной памяти, например, при использовании массивов.
Объявление файловой переменной в разделе описаний имеет вид:
VAR <имя файла>: FILE OF <тип элемента>
Например,
VAR FT: FILE OF INTEGER;
VAR M: FILE OF CHAR;
TYPE F=FILE OF REAL ИЛИ
VAR F1:FILE OF REAL
VAR F:TEXT;
Так как в описании указывается тип элементов, такие файлы называются типизированными. Все элементы файла пронумерованы, начиная с нуля.
Для установления связи между файловой переменной в программе и физическим файлом на внешнем устройстве используется процедура:
ASSIGN (назначить)
Формат процедуры:
ASSIGN (имя файловой переменной,'имя файла на диске')
assign(f1,'prog1.dat');
После установления такого соответствия все операции, выполняемые над переменной F1, будут выполняться над файлом, хранящимся на диске с и имеющим имя prog1.dat.
Файл в каждый момент времени может находиться в одном из двух состояний:
либо он открыт только для записи,
либо только для чтения.
Файл открывается с помощью процедуры RESET(имя файла) - для чтения.
Для записи файл открывается с помощью процедуры REWRITE(имя файла).
Процедура REWRITE уничтожает ранее записанную информацию в файле. При этом головка считывателя устанавливается на начало файла после чего будет записываться новая информация.
Процедура RESET так же устанавливает на начало и происходит считывание. Запись и чтение можно осуществить с помощью операторов READ, READLN,WRITE,WRITELN.
В этом случае используется такая форма записи:
READ (имя файла, имя переменной)
Процедура CLOSE(закрыть) используется для закрытия файла, когда все действия в нем закончены
CLOSE(имя файла)
Например,
CLOSE(F)
Стандартная функция EOF(имя файла) используется для определения, достигнут ли конец файла (принимает значение ложь или истина).
Элементы в файле хранятся по строкам. Для определения конца строки файла используется оператор цикла WHILE NOT EOLN(имя файла) do, а для перехода на новую строку файла - оператор readln(имя файла).
Пример 1 – Считывание данных из файла
На диске С находится файл с именем «data.dat». В нем находятся следующие числа – 123, 456, 789, 987, 654, 321. Причем первые три числа отделены друг от друга пробелами, а последние три - каждое стоит в отдельной строке. Если такого файла на диске нет – создайте его самостоятельно (Shift + F4).
Задание – вывести все данные из этого файла на экран компьютера.
Решение:
program proba1;
var
f:text; {объявляем файловую переменную}
x:integer; {сюда будем помещать значение из файловой переменной}
begin
assign(f,'c:\data.dat'); reset(f); {привязали к переменной конкретный файл, и открыли его для чтения}
while not eof(f) do {пока файл не закончится, выполнять}
begin
while not eoln(f) do {пока строка в файле не закончится, выполнять}
begin
read(f,x); {считываем очередное число в переменную х из файла}
writeln('То, что хранится в файле: ',x); {выводит это число на экран}
end;
readln(f); {переход на следующую строку файла}
end;
close(f);{закрыть файл после использования}
end.
Самостоятельно:
Создать с помощью DOS Navigator текстовый файл (Shift + F4) с именем «Familia.txt». Поместите в него через пробел 5 любых фамилий. Напишите программу, которая выведет эти фамилии на экран. Используйте переменную типа CHAR для записи в нее данных из файла. При выводе на экран фамилии выведутся побуквенно.
Решение:
program samost;
var f:text;
fam:char;
begin
assign(f,'c:\familia.txt'); reset(f);
while not eof(f) do
begin
while not eoln(f) do
begin
read(f,fam);
writeln('Что хранится в файле: ',fam); end;
readln(f);
end;
close(f);
end.
Измените программу – тип CHAR замените на STRING (это строковый тип). Строковый тип данный отличается от символьного тем, что переменные этого типа могут хранить набор символов (строку) вместо одного символа. При считывании в строковую переменную считывается вся строка из файла до конца строки (со всеми знаками препинания до символа перевода строки). Поэтому при выводе на экран в одной строке выведется сразу все пять фамилий.
Решение:
program samost;
var f:text;
fam:string;
begin
assign(f,'c:\familia.txt'); reset(f);
while not eof(f) do
begin
while not eoln(f) do
begin
read(f,fam);
writeln('Что хранится в файле: ',fam);
end;
readln(f);
end;
close(f);
end.
Измените исходные данные – в текстовом файле фамилии разместите построчно. Измените программу так, чтобы фамилии выводились построчно пронумерованными. (Построчный вывод обеспечит простое расположение фамилий в текстовом файле в столбик: вспомните – строковая переменная типа STRING считывает данные из файла построчно). Остается предыдущую программу дополнить так, чтобы фамилии пронумеровывались.
Решение:
program samost;
var f:text;
fam:string;
n:integer; {для нумерации строк}
begin
n:=0;
assign(f,'c:\familia.txt'); reset(f);
while not eof(f) do
begin
n:=n+1;
write('Строка № ',n);
while not eoln(f) do
begin
read(f,fam);
writeln(' Что хранится в файле: ',fam);
end;
readln(f);
end;
close(f);
end.
Пример 2 – Запись данных в файл
Написать программу, записывающую в файл «numbers.txt»в одну строку из 10 случайных чисел в диапазоне от 0 до 1000 через пробел. Выйти из среды ВР и просмотреть содержимое файла в DOS Navigator (F4).
Решение:
program samost2;
var f:text;
num:integer;
i:integer;
begin
assign(f,'c:\numbers.txt'); rewrite(f);
for i:=1 to 10 do
begin
num:=random(1000);
write(f,num,' ');
end;
close(f);
end.
Самостоятельно:
Написать программу, записывающую введенную с клавиатуры фамилию, в файл «Fam.txt»
Решение:
program samost3;
var f:text;
fam:string;
begin
assign(f,'c:\fam.txt'); rewrite(f);
write('Введите фамилию для записи в файл: ');readln(fam);
write(f,fam);
close(f);
end.
Пример 3.
Пусть на диске имеется файл с именем d1.dat, в котором записаны данные (разделены пробелами):
0.54 1.7 4.56 0.2
1.32 1.524 18 0.98
5.6 7.7
Необходимо сделать эти данные доступными программе и вычислить их сумму.
Решение
program fff1;
var f1:text;l1:integer;
x,sum:real;
begin
sum:=0; l1:=1;
assign(f1,'c:d1.dat'); {привязали файловую переменную к файлу}
reset(f1); {открыли файл для чтения}
while not eof(f1) do {пока не встретится конец файла, выполнять}
begin
while not eoln(f1) do {пока не встретится конец текущей строки, выполнять}
begin
read(f1,x); {считать данное в переменную х}
sum:=sum+x;
end;
readln(f1); {переместиться на след. строку}
end;
write('сумма=',sum:8:3);
close(f1);
end.
Ответ: 42.124
Пример 4.
Пусть переменная a и b получают следующие значения: a=510, b=16.2. Требуется записать в файл с именем
d2.dat строку в виде: a=510 b=16.2
Решение.
program fff2;
var f2:text;l2,a:integer;
b:real;
begin
l2:=1;
assign(f2,'c:d2.dat');
a:=510;b:=16.2;
rewrite(f2);
write(f2,'a=',a:3,' ','b=',b:4:1);
close(f2);
end.
Пример 5.
Имеется электронная ведомость по результатам экзамена в группе.
Будем считать его входным файлом с именем vedom.dat:
-------------------------
предмет "физика"
группа т-12
-------------------------
Алексеев С.А. :5
Вертышев А.Ю. :4
Колдаев В.Д. :5
Петрова Н.Д. :4
Федоренко Р.Ф. :3
Шаронин А.В. :4
Cоставить программу создания выходного файла с именем rez.pas, в котором следует записать исходную ведомость и вычисленный средний балл:
***************************
средний балл в группе 4.17
количество учащихся 6
Решение.
program fff3;
var
finp,fout:text;
l1,l2,n,c:integer;
sr,sum:real;
smb:char;
begin
l1:=1;assign(finp,'c:vedom.dat');
l2:=1;
assign(fout,'c:rez.pas');
reset(finp);
rewrite(fout);
n:=0;sum:=0;
while not eof(finp) do
begin
while not eoln(finp) do
begin
read(finp,smb); {посимвольное чтение файла}
write(fout,smb);
if smb=':' then
begin
read(finp,c); write(fout,c:3);
sum:=sum+c; {считаем оценки}
n:=n+1; {считаем учеников}
end;
end;
readln(finp); {на след. Строку для чтения}
writeln(fout); {на след. Строку для записи}
end;
sr:=sum/n;
writeln(fout,'***************************');
writeln(fout,'средний балл в группе',sr:5:2);
writeln(fout,'количество учащихся',n:4);
writeln('вычисления закончены,',' результаты смотрите в файле rez.pas');
close(fout);
close(finp);
end.
ОТВЕТ:
-------------------------
предмет "физика"
группа т-12
-------------------------
Алексеев С.А. : 5
Вертышев А.Ю. : 4
Колдаев В.Д. : 5
Петрова Н.Д. : 4
Федоренко Р.Ф. : 3
Шаронин А.В. : 4
***************************
средний балл в группе 4.17
количество учащихся 6
Пример 6.
В файле dan1.dat записаны целые числа в нескольких строках.
3 5 2
4 9 1
1 7 1
6 2 8
Вычислить сумму элементов каждой строки и результаты вместе с исходными данными поместить в файл с именем dan2.dat
Решение.
program fff4;
var f1,f2:text;lin1,lin2,x,sum:integer;
begin
sum:=0;
assign(f1,'c:dan1.dat');
assign(f2,'c:dan2.dat');
reset(f1);
rewrite(f2);
sum:=0;
while not eof(f1) do
begin
sum:=0;
while not eoln(f1) do
begin
read(f1,x);
write(f2,x:3);
sum:=sum+x;
end;
writeln(f2,' ':3,'сумма',sum:4);
readln(f1);
end;
writeln('Результат находится в файле dan2.dat');
close(f1);
close(f2);
end.
Ответ:
3 5 2 сумма 10
4 9 1 сумма 14
1 7 1 сумма 9
6 2 8 сумма 16
Самостоятельно:
Создайте файл кom1.dat, в котором хранится следующая информация:
КОРВЕТ : 48
УКНЦ : 96
ЯМАХА MSX-1 : 16
ЯМАХА MSX-2 : 128
БК-0010 : 16
IBM PC/XT : 256
IBM PC/AT : 512
Где указана видеопамять в кбайт. Необходимо создать файл с именем Ком2.dat, в котором должна быть представлена следующая информация:
Заголовок таблицы,
вся исходная информация,
объем видеопамяти в Кбайт и в мбайт.
Таблица должна иметь следующий вид:
НАЗВАНИЕ ЭВМ ВИДЕОПАМЯТЬ ВИДЕОПАМЯТЬ
(КБАЙТ) (МБАЙТ)
-------------------------------------------------------------------------------
КОРВЕТ : 48 ?
УКНЦ : 96 ?
ЯМАХА MSX-1 : 16 ?
ЯМАХА MSX-2 : 128 ?
БК-0010 : 16 ?
IBM PC/XT : 256 ?
IBM PC/AT : 512 ?
Самостоятельно:
Составить программу для следующей задачи:
Имеется ведомость по результатам сдачи экзамена по ОИВТ
_______________________________________
предмет информатика
класс 10-а
______________________________________
Иванов : 5
Ковалев : 5
Петров : 4
Сидоров : 3
Яковлев : 2
________________________________________
Составить программу, которая подсчитывает количество учащихся получивших 2, 3, 4, 5 и результаты помещает во внешний файл
_______________________________________
предмет информатика
класс 10-а
______________________________________
Иванов : 5
Ковалев : 5
Петров : 4
Сидоров : 3
Яковлев : 2
________________________________________
Количество “2” -
Количество “3 -
Количество “4 -
Количество “5 -