Работа с файлами На Паскаль 9 сынып
Работа с файлами в PascalABC.NET ОПРЕДЕЛЕНИЕ ПОНЯТИЙФизический Файл – это поименованная область на диске, содержащая какую-либо информацию.Логический файл – это одна из структур данных, используемых в программировании. И другие байт байт . . . байт Eof СТРУКТУРА ЛОГИЧЕСКОГО ФАЙЛАЭто способ восприятия файла в программе, т.е. «шаблон», через который мы смотрим на физическую структуру файла на диске. В ЯП таким шаблонам соответствуют типы данных, допустимые в качестве компонент файлов. File of byte: код символа код символа . . . код символа Eof целое со знаком целое со знаком . . . целое со знаком Eof File of char: File of integer: У массива количество элементов фиксировано, а у файлов количество элементов может изменяться в процессе работы.(Количество в каждый момент времени неизвестно, но в конце файла стоит символ Eof)Массив целиком располагается в ОП, а файл находится на диске.Нумерация элементов массива выполняется соответственно значений нижней и верхней границ, указанных при его объявлении. Нумерация элементов файла выполняется слева направо, начиная с нуля Логическая структура файла в принципе очень похожа на структуру массива. Различия: Классификация Файлов в ПАСКАЛЕ ФАЙЛЫ ПО ТИПУ ПО МЕТОДУ ДОСТУПА Типизированные Нетипизированные Текстовые Последовательного доступа Прямого доступа РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИvar список имен файлов : text;Текстовый файл может состоять из любых символов (в том числе и цифр)Для работы с каким-либо физическим файлом (тем, который существует на диске) его необходимо связать с файловой переменной Assign (имя файла, ‘путь к файлу’); ИСПОЛЬЗОВАНИЕФайлы используются для хранения данных. Из них можно считывать начальные данные, записывать результаты, изменять информацию в файле. НАПРИМЕР: На диске есть файл:D:\MyFile.dat Или:Var f : text;Name: string;. . .Begin. . .Name : = ‘D:\MyFile.dat ‘ ;Assign ( f, name); . . .Var f : text;. . .Begin. . .Assign (f; ‘D:\MyFile.dat’ ); ПРИНЦИПЫ РАБОТЫ С ФАЙЛАМИ ОткрытиеЧтение из файла или запись в файлЗакрытиеRESET (название файла) – открытие файла для чтения из него информации в ОПREWRITE (название файла) – открытие файла для записи данных в файлAPPEND (название файла) – открытие с целью дополнения данныхCLOSE (название файла) – закрытие файла ИСПОЛЬЗОВАНИЕ ДАННЫХ ИЗ ФАЙЛА Для считывания данных из файла в ОП используют read и readln.Read ( название файла, список переменных )Readln ( название файла, список переменных )Если в списке переменных есть переменная типа char или string [10], то из строки в файле считывается 1 или 10 символов ( вместе с пробелами ) и присваиваются этой переменной.Запись в файл осуществляется процедурами write и writeln Write ( имя файла, список выражений );Writeln ( имя файла, список выражений ). Если в списке переменных есть числовая переменная (integer или real), то считываются символы, которые трактуются как цифры до ближайшего пробела.Т. О. особенностью текстового файла является то, что происходит автоматическое преобразование числовых данных в цепочку символов при записи в файл и обратное преобразование символов в цифры при чтении из файла. Функции и директивы для работы с файламиФункция Eof (имя файла) – true, если достигнут конец файла и False – иначе. {$ I - } , { $ I + } – директивы компилятору Pascal – отключают и включают контроль ошибок ввода-вывода. Если этого не сделать, то отсутствие файла приведет к аварийному завершению программы.Функция IOResult (имя файла) определяет наличие файла на диске ( 0 – есть, 1 – нет). ПРИМЕРЫ ПРОГРАММЗадача № 1Пусть на диске (в текущем каталоге) есть файл myfile.dat, который состоит из некоторого числа целых чисел, разделенных пробелами. Написать программу, вычисляющую сумму этих элементов.
var f :text;
x: integer;
Summa:longint;
Begin
{$I-}
assign(f, 'myfile.dat');
reset(f);
{$I+} begin
Summa:=0;
while not Eof(f) do
begin
read(f,x);
Summa:=Summa+x
end;
Writeln('Summa= ', Summa:8);
end;
Close(f);
end.
СОЗДАНИЕ ФАЙЛОВ1 способ – с помощью текстового редактора, например Блокнот или Pascal.2 способ – программными средствами. Открыть файл процедурой Rewrite ( f )Процедурой REWRITE нельзя открыть запись информации в уже существующий файл. При выполнении этой процедуры старый файл с таким же именем уничтожается и никаких сообщений в программу не передается. Задача № 2Написать программу, в которой в текстовый файл записываются данные 10 учеников: имя, вес и рост. var f : text;name : string [ 10 ] ;ves : real;ROST : real;Otvet : char; i:integer;BeginAssign ( f, ‘ deti . txt ‘ ) ;{ $ | - }{ проверяем, существует ли такой файл } Rewrite ( f ) ;For i : = 1 to 10 doBeginWriteln ( ‘ введите имя, вес и рост ‘ );Readln ( name, ves, rost );Writeln ( f, name : 10, ves : 4, rost : 5:2 );End;Close ( f );End. Задача № 3Написать программу, которая считывает слова из одного текстового файла и записывает их в столбик в другой текстовый файл.Пояснение: слова разделяются символом пробел. Поэтому мы будем считывать символы из первого файла и «складывать» их в слово до тех пор, пока не встретиться пробел. Потом это слово запишем во второй файл и опять начнем формировать следующее слово. И так до тех пор, пока не достигнем конца первого файла. Program slovo;
var f,h:text;
bukva:char;
slovo:string;
begin
assign(f,'f.txt');
assign(h,'h.txt');
reset(f);
rewrite(h);
slovo:=' ';
while not eof(f) do
begin
read(f, bukva); if bukva<>' ' then
begin
slovo:=slovo+bukva;
end
else
begin
writeln(h,slovo);
writeln(slovo);
slovo:=' ';
End ;
end;
Close (f);
Close (h);
end. Пример 1. Нахождение площади треугольника по формуле Герона.Исходные файлы input.txt (формат 3 5 7)Вывод результатов во внешний файл output.txt Задача №4 Фо́рмула Герона позволяет вычислить площадь треугольника (S) по его сторонам a, b, c: где p — полупериметр треугольника: . Задача №5 Даны три целых числа. Определить, имеется ли среди них хотя бы одна пара равных между собой чисел. Формат входных данных: Входной файл содержит три целых числа через пробел. Формат выходных данных: Выведите 'YES' если это так, и 'NO' в противном случае.Входные данные544 935 911 Выходные данныеNO Var
a,b,c:integer;
f,g: text;
begin
assign (f,'input.txt');
reset (f);
readln (f,a,b,c);
close (f);
assign (g,'output.txt');
rewrite (g);
if (a=b) or (b=c) or (c=a) then
writeln (g,'YES')
else
writeln (g,'NO');
close(g);
end.
Графика в PascalABC.Net При работе с графическим окном нужно учитывать две особенности. Во-первых, начало координат – точка (0, 0) – находится не где-то посредине окна, а в левом верхнем углу. Вторая особенность связана с первой: положительное направление оси OY показывает не вверх, а вниз (OX направлена вправо). Надо выполнить преобразование системы координат таким образом, чтобы точка (0, 0) находилась посредине окна (в любой нужной точке), а ось OY была направлена вверх. Стандартное преобразование в прямоугольной правой системе координат выглядит следующим образом: Здесь x0 и y0 – координаты точки, в которую мы хотим перенести начало координат новой системы, x и y – координаты точки в старой системе, x1 и y1 – координаты точки в новой системе. Но поскольку ось OY в графическом окне Паскаля направлена вниз, то для её разворота вверх нужно, естественно, знак координаты y поменять на противоположный (вместо y поставить -y). Основные команды TextOut(x, y, s) – Вывод текста в графическое окно. При этом текст (строка s) записывается в прямоугольную область таким образом, что точка с координатами (x, y) находится в левом верхнем углу первой буквы;Line(x1, y1, x2, y2) – Проводит отрезок от точки (x1, y1) до точки (x2, y2);DrawCircle(x, y, r) – Рисует окружность с центром (x, y) и радиусом r. WindowWidth - ширина графического окна; WindowHeight - высота графического окна (в пикселях); ClearWindow - эта процедура очищает окно белым цветом; sleep(ms) - задержка (пауза) на ms миллисекунд.