Работа с файлами На Паскаль 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 миллисекунд.