Запись в файл delphi 7 пример. Delphi запись в файл. Запись в текстовый файл, Excel и пр. Обучающий материал. Полный исходный код модуля

ФРЕНЕЛЯ ФОРМУЛЫ - определяют отношения амплитуды, фазы и состояния отражённой и преломлённой световых волн, возникающих при прохождении света через границу раздела двух прозрачных , к соответствующим характеристикам падающей волны. Установлены О. Ж. Френелем в 1823 на основе представлений об упругих поперечных колебаниях эфира. Однако те же самые соотношения - Ф. ф.- следуют в результате строгого вывода из эл--магн. теории света при решении ур-ний Максвелла.

Пусть плоская световая волна падает на границу раздела двух сред с показателями преломления п 1 и п 2 (рис.). Углы j, j" и j"" есть соответственно углы падения, отражения и преломления, причём всегда n 1 sinj=n 2 sinj"" (закон преломления) и |j|=|j"| (закон отражения). Амплитуду электрического вектора падающей волны А разложим на составляющую с амплитудой А р , параллельную плоскости падения, и составляющую с амплитудой A s , перпендикулярную плоскости падения. Аналогично разложим амплиту ды отражённой волны R на составляющие R p и R s , а преломлённой волны D - на D p и D s (на рис. показаны только р -составляющие). Ф. ф. для этих амплитуд имеют вид


Из (1) следует, что при любом значении углов j и j"" знаки А р и D p совпадают. Это означает, что совпадают и фазы, т. е. во всех случаях преломлённая волна сохраняет фазу падающей. Для компонент отражённой волны (R p и R s )фазовые соотношения зависят от j, n 1 и n 2 ; если j=0, то при n 2 >n 1 фаза отражённой волны сдвигается на p.

В экспериментах обычно измеряют не амплитуду световой волны, а её интенсивность, т. е. переносимый ею поток энергии, пропорциональный квадрату амплитуды (см.

Лит.: Борн М., Вольф Э., Основы оптики, пер. с англ., 2 изд., М., 1973; Калитеевский Н. И., Волновая оптика, 2 изд., М., 1978. Л. Н. Капорский .

Формулы Френеля

Определим связь между амплитудами падающей, отраженной и преломленной волн. Рассмотрим вначале падающую волну с нормальной поляризацией. Если падающая волна имеет нормальную поляризацию, то и отраженная и преломленная волны будут иметь такую же поляризацию. В справедливости этого можно убедиться, анализируя граничные условия на поверхности раздела сред.

Если иметь составляющую с параллельной поляризацией, то граничные условия не будут выполняться ни в одной точке граничной поверхности.

Плоскость падения волны параллельна плоскости (ZoY). Направления распространения отраженной и преломленной волн также будут параллельны плоскости (ZoY) и у всех волн угол между осью X и направлением распространения волны будет равен: , а коэффициент

В соответствии со сказанным выше вектор всех волн параллелен оси X, а векторы параллельны плоскости падения волны (ZoY), поэтому у всех трёх волн проекция вектора на ось X равна нулю:

Вектор падающей волны определяется выражением:

Вектор падающей волны имеет две составляющие:

Уравнения для векторов отраженной волны имеют вид:

Уравнения для векторов поля преломленной волны имеют вид:

Для нахождения связи между комплексными амплитудами падающей, отраженной и преломленной волн воспользуемся граничными условиями для касательных составляющих векторов электромагнитного поля на границе раздела сред:

Поле в первой среде на границе раздела сред в соответствии с (1.27) будет иметь вид:

Поле во второй среде определяется полем преломленной волны:

Так как вектор всех трёх волн параллелен границе раздела сред, а касательная составляющая вектора есть составляющая, то граничные условия (1.27) можно представить в виде:

Падающая и отраженная волны являются однородными, поэтому для них справедливы равенства:

где - волновое сопротивление первой среды.

Так как поля любой из рассматриваемых волн связаны между собой линейной зависимостью, то для преломления волн можно записать:

где - коэффициент пропорциональности.

Из выражений (1.29) получим проекции векторов:

Подставив равенства (1.31) в уравнения (1.28) и учтя равенство (1.30), получим новую систему уравнений:

Отражение и преломление на границе двух идеальных диэлектриков

У идеальных диэлектриков потери отсутствуют и. Тогда диэлектрические проницаемости сред - действительные величины и коэффициенты Френеля тоже будут действительными величинами. Определим, при каких условиях падающая волна без отражения переходит во вторую среду. Это происходит при полном прохождении волны через границу раздела сред и коэффициент отражения в этом случае должен быть равен нулю:

Рассмотрим падающую волну с нормальной поляризацией.

Коэффициент отражения будет равен нулю: в случае, если равен нулю числитель в формуле (1.34):

Однако, следовательно, для волны с нормальной поляризацией при любых углах падения волны на границу раздела. Это значит, что волна с нормальной поляризацией всегда отражается от границы раздела сред.

Волны с круговой и эллиптической поляризацией, которые можно представить в виде суперпозиции двух линейно поляризованных волн с нормальной и параллельной поляризацией, будут отражаться при любых углах падения на границу раздела сред. Однако соотношение между амплитудами нормально и параллельно поляризованных составляющих в отраженной и преломленной волнах будут иным, чем в падающей волне. Отражённая волна будет линейно поляризованной, а преломленная - эллиптически поляризованной.

Рассмотрим падающую волну с параллельной поляризацией.

Коэффициент отражения будет равен нулю: в случае, если равен нулю числитель в формуле (1.35):

Решив уравнение (1.37), получим:

Таким образом, падающая волна с параллельной поляризацией без отражения проходит через границу раздела, если угол падения волны определяется выражением (1.38). Этот угол называется угол Брюстера.

Определим, при каких условиях будет происходит полное отражение падающей волны от границы раздела двух идеальных диэлектриков. Рассмотрим случай, когда падающая волна распространяется в более плотной среде, т.е. .

Известно, что угол преломления определяется из закона Снеллиуса:

Так как: , то из выражения (1.38) следует, что:.

При некотором значении угла падения волны на границу раздела сред получаем:

Из равенства (1.40) видно, что: и преломленная волна скользит вдоль границы раздела сред.

Угол падения волны на границу раздела сред, определяемый уравнением (1.40), называется критическим углом:

Если угол падения волны на границу раздела сред больше критического: , то. Амплитуда отражённой волны, независимо от вида поляризации, равна по амплитуде падающей волне, т.е. происходит полное отражение падающей волны.

Остается выяснить, проникает ли электромагнитное поле во вторую среду. Анализ уравнения преломленной волны (1.26) показывает, что преломленная волна представляет собой плоскую неоднородную волну, распространяющуюся во второй среде вдоль границе раздела. Чем больше различие проницаемости сред, тем быстрее уменьшается поле во второй среде при удалении от границы раздела. Поле практически существует в достаточно тонком слое у границы раздела сред. Подобная волна называется поверхностной.

Когда речь идет о работе программы с текстовым файлом, подразумеваются процедуры ввода данных из файла в программу или, наоборот, запись этих данных в файл программой. Для текстового файла допустима простая работа с файлом без особых дополнительных механизмов, которые применяются для работы со специализированными файлами, такими как при загрузке данных из Excel или работе программы с базой данных . Разумеется, Delphi располагает возможностями работать с файлами с использованием компонентов. Но в данной статье рассматривается механизм прямой работы с текстовым файлом без использования дополнительных компонентов.

Итак, в общем виде, работа с файлом заключается в следующих этапах:

1. подключение к файлу – связь с внешним файлом, указание режима подключения;

2. выполнение операций записи в файл или чтения из файла;

3. завершение работы с файлом.

Подключение к файлу

Для связи программы с файлом используется специальная переменная – "Файловая переменная". Объявляется она так же как и любая переменная в Delphi. Тип это переменной может быть File для типизированных (хранящих данные определенного типа) файлов, а можно указать TextFile , что будет означать тип обычного текстового файла. Объявление переменной:

var
f: TextFile;

В исполняемом коде программы выполняется подключение к внешнему файлу:

AssignFile(f, "input.txt" );

Команда AssignFile , выполняет связь файловой переменной с внешним файлом. Вторым параметром указывается адрес файла. Он может быть задан относительным или абсолютным. Если указать только имя файла, то программа будет пытаться обнаружить его в той же директории, где она сама и находится. Абсолютный путь указывается от корневого диска:

AssignFile(f, "C:\myprog\input.txt" );

Использование относительной директории дает возможность не привязываться к конкретным дискам и адресам. Например:

AssignFile(f, "data\input.txt" ); // во вложенной папке относительно директории с программой
AssignFile(f, "..\input.txt" ); // на уровень выше директории с программой
AssignFile(f, "..\data\input.txt" ); // во вложенной папке на уровень выше директории с программой

После того как выполнено подключение, выполняется процедура, устанавливающая режим работы с файлом. В основном это режим чтения или записи. Эти режимы назначаются процедурами Reset() (для чтения) и rewrite() (для записи):

Reset(f);
Rewrite(f);

* Для команды Rewrite() следует учитывать, что при ее выполнении, она либо создает файл, указанный в файловой переменной, либо если он уже есть перезаписывает файл заново, удаляя старый без какого-то предупреждения.

Любую из указанных команд можно использовать без команды AssignFile() . Для этого достаточно вторым параметром указать путь к файлу. Таким образом, она сразу выполнит привязку файла к файловой переменной и назначит режим работы с этим файлом:

Reset(f, "C:\myprog\input.txt" ); // чтение
Rewrite(f, "C:\myprog\input.txt" ); // запись

Операции с файлами

Для чтения из файла, необходимо назначить режим чтения и использовать команду Readln() , которая будет вводить в строковую переменную по одной строке из файла. Затем с этой переменой можно выполнить необходимые действия.

Readln(f, s);

Обычно для загрузки всех строк из файла используется оператор цикла. Для того, чтобы определить, что файл закончился используется функция EOF() (End Of File). Таким образом получается цикл, в котором последовательно в строковую переменную вводятся все строки файла и завершающийся после окончания фала:


Readln(f, s);
end ;

Для записи, назначение режим записи в файл и командой Writeln() производится запись по строкам.

Writeln(f, "text" );

Закрытие файла

По завершении работы с файлами, особенно в случае записи в них данных, необходимо корректно завершить работу с файловой переменной. Это делается для того, чтобы сохранить все внесенные в файл изменения.

CloseFile(f);

Примеры работы с текстовыми файлами в Delphi

Чтение в переменную одного значения из файла:

var
f: TextFile;
s: String;
begin
AssignFile(f, "input.txt" );
Reset(f);

Readln(f, s);

CloseFile(f);
end ;


Загрузить все строки файла в компонент Memo:

var
f: TextFile;
s: String;
begin
AssignFile(f, "input.txt" );
Reset(f);

while (not EOF(f)) do begin
Readln(f, s);
myMemo.Lines.Add(s);
end ;

CloseFile(f);
end ;

Следует отметить, что для этой задачи проще воспользоваться командой самого компонента Memo LoadFromFile() .

myMemo.Lines.LoadFromFile("input.txt" );


Записать строку в файл:

var
f: TextFile;
begin
AssignFile(f, "input.txt" );
Rewrite(f);

Writeln(f, "My text" );

CloseFile(f);
end ;


Записать в текстовый файл все строки из компонента Memo:

var
f: TextFile;
i: Integer;
begin
AssignFile(f, "input.txt" );
Rewrite(f);

for i:= 0 to myMemo.Lines.Count - 1 do
Writeln(f, myMemo.Lines[i]);
CloseFile(f);
end ;

Как и для чтения из файла в Memo, так и здесь, имеется специальная команда:

myMemo.Lines.SaveToFile("input.txt" );