
- •Содержание
- •Предисловие научного редактора
- •Введение
- •1. Понятие алгоритма. Способы представления алгоритмов
- •В виде компьютерной программы:
- •2. Свойства алгоритмов
- •Язык графического представления алгоритмов
- •4. Общие принципы построения программ
- •5. Структура программы на языке паскаль
- •6. Классификация типов данных, используемых в языке паскаль
- •6.1. Символьный тип
- •6.2. Числовые типы
- •6.2.1. Целые типы
- •6.2.2. Вещественные типы
- •6.3. Логический тип
- •6.4. Типы данных, определяемые программистом
- •7. Основные операторы языка паскаль.
- •7.1. Операторы (процедуры) ввода – вывода
- •7.2. Оператор присваивания
- •7.3. Условный оператор
- •Первый вариант условного оператора:
- •If условие then оператор1 else оператор2;
- •Второй вариант условного оператора (сокращенная форма):
- •If условие then оператор1;
- •If условие1 then
- •If условие2 then оператор21 else
- •If условие3 then оператор31 else
- •7.4. Оператор выбора case
- •7.5. Операторы цикла
- •7.5.1. Оператор цикла с параметром
- •Параметр цикла I меняет свои значения только автоматически, при переходе к следующему шагу цикла. Изменения параметра цикла I в теле цикла запрещены.
- •7.5.2 Оператор цикла с предусловием оператор цикла с предусловием имеет структуру:
- •7.5.3. Оператор цикла с постусловием
- •8. Структурированные типы данных
- •8.1. Массивы
- •8.2. Записи
- •8.3. Файлы
- •2.Связать файловую переменную с именем файла на диске с помощью процедуры Assign(фп, ‘имя_файла_на диске’).
- •3. Открыть файл:
- •4. Выполнить работу с файлом.
- •Закрыть файл при окончании работы: Сlose(фп);
- •9. Процедуры и функции
- •9.1. Процедуры
- •Var I:integer; {I – локальная переменная}
- •9.2. Функции
- •2)Имя функции входит составной частью (как переменная) в некоторое выражение.
- •Задание к лабораторной работе №2.
- •Часть 1. Тема: вычисление по формулам и представление результатов с учетом форматного вывода.
- •Часть 2. Тема: Циклические вычисления с учетом диапазона типа данных и выдача результатов вычислений по шагам.
- •Задание к лабораторной работе №3.
- •Часть 1 .
- •Часть 2.
- •Задание к лабораторной работе №4.
- •Лабораторная работа №5.
3. Открыть файл:
для чтения – процедурой Reset(фп); {если файл сущетвует}
для записи – процедурой ReWrite(фп); {для создания нового файла или для перезаписи существующего, но в последнем случае старая информация теряется}
4. Выполнить работу с файлом.
Обработку файла можно вести только по отдельным компонентам, обращаясь к конкретной (текущей) компоненте, определяемой указателем файла. Способ обращения к компоненте основан на свойстве, общем для всех трех видов файлов – упорядоченности компонент в файле, и зависит от способа представления информации в файле:
в типизированном файле – по номерам компонент, начиная с 0,
в текстовом файле – последовательным чтением строк текста,
в нетипизированном файле – последовательным чтением блоков информации.
Закрыть файл при окончании работы: Сlose(фп);
Далее рассмотрены особенности представления и средства обработки различных видов файлов
Текстовые файлы предназначены для хранения текстовой информации. Компонентами текстового файла являются символьные строки переменной длины (количество символов в строке – от 0 до 255). К каждой строке возможен лишь последовательный доступ, начиная с первой. При создании текстового файла в конце каждой строки (при нажатии клавиши Enter) ставится признак окончания строки – последовательность кодов ASCII – 13 (CR) и 10 (LF). На эту последовательность реагирует функция EOLN(фп) – сокращение от End Of Line, принимающая значение True при достижении указателем файла конца строки. В конце файла ставится признак конца файла – код ASII 26 ( при нажатии клавиш CTRL-Z). При достижении конца файла функция EOF(фп) принимает значение True.
Текстовый файл может быть открыт для записи, для чтения или для дополнения. Для обращения к компонентам текстового файла используются процедуры:
Read(фп, список ввода); Readln(фп, список ввода); {для ввода из файла}
Write(фп, список вывода); Write(фп, список вывода); {для записи в файл}
Здесь список ввода и список вывода – последовательность из одной или нескольких переменных типа Char, String или любого числового типа (целые, вещественные).
Процедура Read(фп, список ввода) работает следующим образом:
при вводе переменной типа Char выполняется чтение одного символа и его значение присваивается этой переменной;если при чтении достигается конец строки или файла, то символьной переменной присваивается соответствующий признак (код 13 или 26);
при вводе переменной типа String количество считанных из файла и помещенных в строковую переменную символов равно максимальной длине строки, если только раньше не встретились символы конца строки или файла. Если количество символов во входном потоке больше максимальной длине строки, то “лишние” символы отбрасываются, а все последовательные строки теряются. Примечание: процедура Read может нормально прочесть только первую строку. Для чтения последовательности строк следует применять процедуру Readln.
При вводе числовых переменных процедура из входного потока символов пропускает все пробелы, символы табуляции и символы конца строк до первого значащего символа, выделяет подстроку до появления первого незначащего символа (пробела, символа табуляции или конца строки), преобразовывает выделенную строку в число и, если результат преобразования соответствует типу переменной, то он присваивается этой переменной. Иначе выдается сообщение об ошибке.
Процедура Readln(фп, список ввода) обеспечивает ввод символов, строк и чисел аналогично процедуре Read за исключением того, что после считывания последней переменной оставшаяся часть строки до признака конца строки пропускается, так что следующее обращение к процедуре Readln или Read начнется с символа новой строки. При вызове этой процедуры без параметра список ввода пропускаются все символы текущей строки вплоть до конца строки
Процедура Write(фп, список вывода) обеспечивает вывод в текстовый файл значений символов, строк, логических значений, целых и вещественных чисел, при этом переменные в списке вывода должны иметь соответствующий тип Char, String, Boolean, тип целого, тип вещественного числа.
Процедура Writeln(фп, список вывода) аналогична процедуре Write за исключением того, что выводимая строка символов завершается кодами-признаками конца строки.
Примеры работы с текстовыми файлами.
Пример 6. Пусть имеется (набирается в текстовом редакторе) текстовый файл f1.txt, находящийся в той же директории, что и данная программа. Программа выдает на монитор все строки файла и подсчитывает количество строк в файле.
program text_f;
var k:integer; a:char;c:string;
f1:text;
begin k:=0;
assign(f1,'f1.txt'); reset(f1);
while not eof(f1) do
begin read(f1,c); writeln('a=',c);
if eoln(f1) then k:=k+1;readln(f1)
end;
writeln('Файл f1.txt имеет',k:4, ' строк'); readln;
end.
Пример 7. В текстовом файле f1.txt подсчитывается количество каждой из гласных букв русского алфавита.
program text_f1;
var i:integer;
cglas:array[1..9]of integer;{массив счетчиков количества гласных
букв}
a:char;
f1:text;
begin for i:=1 to 9 do cglas[i]:=0;
assign(f1,’f1.txt’); reset(f1);
while not eof(f1) do
begin read(f1,a); write(‘a=’,a:5);
case a of
‘a’,’A’:c[1]:=c[1]+1;
‘e’,’E’:c[2]:=c[2]+1;
‘и’,’И’:c[3]:=c[3]+1;
‘o’,’O’:c[4]:=c[4]+1;
‘у’,’У’:c[5]:=c[5]+1;
‘ы’,’Ы’:c[6]:=c[6]+1;
‘э’,’Э’:c[7]:=c[7]+1;
‘ю’,’Ю’:c[8]:=c[8]+1;
‘я’,’Я’:c[9]:=c[9]+1;
end;
end;
writeln('В тексте файла f1.txt содержится
writeln(‘следующее количество гласных:');
writeln(‘a:’,c[1]:2,‘ e:’,c[2]:2, (‘ и:’,c[3]:2,
‘ о:’,c[4]:2,‘ у:’,c[5]:2,‘ ы:’,c[6]:2,
‘ э:’,c[7]:2,‘ ю:’,с[8]:2,‘ я:’,c[9]:2);
readln;
end.
Пример 3. {Поиск максимального элемента-целого числа в файле.
Имя файла - значение пеpеменной fl_name (напpимеp, flin.txt)
вводится в пpоцессе pаботы пpогpаммы. В соответствии с типом
переменной fl_name имя этого файла не должно пpевышать количества указанных символов, т.е. 8}
program file_in;
var a,max_in,max_num,i:integer;
fl_name:string[8];
fl_in1:text;
begin write('введи имя файла: ');read(fl_name);
assign(fl_in1,fl_name);reset(fl_in1);
writeln('Контрольная печать исходного файла:');
while not eof(fl_in1) do
begin read(fl_in1,a);writeln(a:5);
end;writeln;
{writeln('Длина файла ',fl_name,
' равна ',filesize(fl_in1));-нельзя для текстовых файлов}
reset(fl_in1);{Начальная установка указателя записей файла}
read(fl_in1,max_in);
writeln('Пеpвый эл-т файла = ',max_in,' его номер = ',max_num);
writeln; i:=0;{Перенос нулевой записи из файла в max_in}
writeln('Пpи поиске максимального элемента файла ');
writeln('последовательно находятся следующие элементы:');
while not eof(fl_in1) do
begin read(fl_in1,a);i:=i+1;
if max_in<a then
begin max_in:=a;max_num:=i;
writeln('Очеpедной максимальный элемент = ',max_in,
' его номеp = ',max_num);
end;
end;
close(fl_in1);
writeln('Максимальное число ', max_in,
' имеет номеp ',max_num:3);
writeln('Общее количество элементов в файле -',(i+1):5);
writeln;writeln('Нажми клавишу ENTER');
readln;readln
end.
Типизированные файлы предназначены для хранения информации, имеющей четкую структуру: компонентами файла являются записи, тип записи задается при объявлении файла. В отличие от текстового файла в типизированном файле;
информация хранится во внутренней (двоичной) форме, поэтому запись и чтение происходят с большей скоростью, но непосредственно прочитать и редактировать файл пользователю без программы нельзя;
наряду с последовательным доступом (который обеспечивается за счет сдвига указателя к следующей компоненте после записи или чтения очередной текущей компоненты) возможен прямой доступ к компонентам файла – по номеру компоненты с помощью процедуры Seek (фп, номер_компоненты)
Для определения порядкового номера той компоненты файла, которая будет обрабатывться следующей операцией ввода-вывода, используется функция FilePos(фп), а для определения количества компонент файла – функция FileSize(фп).
Запись и чтение очередных компонентов типизированного файла обеспечивается процедурами Write(фп,список вывода); Read(фп, список-ввода);
Здесь списки ввода и вывода содержат по одной или более переменных того же типа, что и компонента файла.
Примеры обработки типизированных файлов.
Пример 8.
{ Пpогpамма обpаботки внешнего файла, хранящегося на диске. Файл представляет собой базу данных, элементами которой являются записи, содержащие поля fio, rost, ves, pol.
Режимы работы программы:
По запросу программы создается новый файл (задается имя файла и вводятся элементы БД) или вызывается ранее созданный файл.
Распечатывается БД на экране.
Находится и печатается запись с максимальным значением поля rost }
program file_zap;
type zp=record
fio:string[15];
rost,ves:real;
pol:char
end;
var a,ab:zp;i:integer; s,s1:byte; max_rost,max_ves:real;
alf:string; c:char;
fl_name:string[8]; fl_in1:file of zp;
begin
writeln('Создать новую БД? Да-1, нет-0: ');readln(s);
if s=1 then
begin {Создание новой БД в файле, имя которого вводится и
сохраняется в fl_name}
write('введи имя файла: ');readln(fl_name);{rewrite(fl_name);}
assign(fl_in1,fl_name);rewrite(fl_in1);
writeln('БД содержит поля fio,rost,ves,pol.');i:=0;
repeat
i:=i+1; writeln('Задай сведения ',i:3,'-й записи:');
with a do
begin
write('ФИО: ');readln(fio); write('Рост: ');readln(rost);
write('Вес: ');readln(ves); write('Пол: ');readln(pol);
end;
write(fl_in1,a);
write('Продолжить ввод? Да - 1, нет - 0');readln(s);
until(s=0) {Окончание цикла создания БД}
end
else
begin write('Введи имя файла, содержащего БД: ');
readln(fl_name);
assign(fl_in1,fl_name);
end;
reset(fl_in1);
write('Выдать на экран сведения БД? Да-1, нет-0: ');readln(s);
if s=1 then
begin
writeln('Файл базы данных содержит следующие сведения :');
writeln;writeln(' ФИО РОСТ ВЕС ПОЛ ');
while not eof(fl_in1) do
begin read(fl_in1,a);write(a.fio:15);write(a.rost:8:0);
write(a.ves:10:0);write(a.pol:10);writeln
end;
end;
{Поиск в БД максимального роста
и распечатка записи по этому признаку:}
reset(fl_in1);
read(fl_in1,a);max_rost:=a.rost;
while not eof(fl_in1) do
begin read(fl_in1,a);
if max_rost<a.rost then
begin max_rost:=a.rost;ab:=a
end
end;
writeln('Максимальный рост имеет ', ab.fio, ', рост =',ab.rost:3:0,
' вес =', ab.ves:3:0);
close(fl_in1);
writeln('Нажми ENTER');
readln;readln
end.
Пример 9. Программа формирует третий файл из компонент двух заданных файлов целых чисел по правилу: очередная i-я компонента 3-го файла равна максимальной из i-тых компонент заданных файлов. Формирование первых двух файлов рассмотрено в примере 10.
program f2_3;
var c1,c2,c3,i:integer;
f1,f2,f3:file of integer;
begin
assign(f1,'f1.txt');
assign(f2,'f2.txt');
assign(f3,'f3.txt');
reset(f1);
reset(f2);
rewrite(f3);
writeln('Размеры файлов: ',filesize(f1):4,' и',filesize(f2):4);i:=0;
if filesize(f1)=filesize(f2) then
begin writeln(' Компоненты файлов:');
writeln('№ п/п f1.txt f2.txt f3.txt');
while not eof(f1) do
begin i:=i+1;read(f1,c1); read(f2,c2);
if c1>c2 then c3:=c1 else c3:=c2;
write(f3,c3);writeln(i:5,c1:8,c2:11,c3:11);
readln; {Вывод компонент файлов по шагам}
end;
end
else
begin writeln('Размеры файлов разны: ',
filesize(f1):4,' и',filesize(f2):4);
writeln('Файлы содержат следующие данные:');
writeln('№ п/п f1.txt f2.txt');
while not eof(f1) do
begin i:=i+1;read(f1,c1); read(f2,c2);
readln;{Вывод компонент файлов по шагам}
writeln(i:5,c1:8,c2:11);
end
end;
close(f1); close(f2);close(f3);
writeln('Завершение работы программы - Enter');
readln
end.
Пример 10.
{Программа создает с помощью стандартной процедуры random(К) два файла целых чисел f1.txt, f2.txt. для программы, приведенной в примере 2. В данной программе принято К=100. Предусмотрена выдача результатов формирования элементов файлов на монитор.}
program ff2_3;
const n=10;{количество чисел в каждом из файлов}
var c1,c2,i:integer;
f1,f2:file of integer;
begin
assign(f1,'f1.txt');
assign(f2,'f2.txt');
rewrite(f1);
rewrite(f2);
writeln(' Компоненты файлов:');
writeln('№ п/п f1.txt f2.txt');
randomize;for i:=1 to n do
begin c1:=random(100);c2:=random(100);
write(f1,c1);write(f2,c2);
writeln(i:5,c1:8,c2:11);
end;
close(f1);
close(f2);
readln;
end.