четверг, 14 февраля 2013 г.

2) Арифметическая и геометрическая прогрессии. Определение, свойства, вывод формул для вычисления n-го члена и суммы n первых членов.

Арифметическая и геометрическая прогрессии.

Арифметическая
Геометрическая

Определение, свойства, вывод формул для вычисления n-го члена и суммы n первых членов.

Арифметическая прогрессия – это такая числовая последовательность, для каждого члена которой справедливо равенство: an=an-1+d, где d это разность.
Любой элемент прогрессии равен среднему арифметическому двух своих равноудалённых соседей.
Любой элемент прогрессии равен среднему геометрическому двух своих равноудалённых соседей.

При |q| < 1поэтому в этом случае геометрическая прогрессия называется бесконечно убывающей
Суммой бесконечно убывающей геометрической прогрессии называется число 
,
где Sn – сумма n первых членов геометрической прогрессии.
Сумма бесконечно убывающей геометрической прогрессии (|q| < 1) равна 

1) Числовая последовательность, способы ее задания. Возрастающая и убывающая последовательности, монотонные и немонотонные, ограниченные и неограниченные последовательности.

Числовая последовательность, способы ее задания.

Под числовой последовательностью понимается функция заданная xn=f(n) на множестве натуральных чисел.


Способы задания:

1) Общим членом

An=F(n); An=(n^2)+1 ; n принадлежит N

2) Рекуррентным сопсобом

Рекуррентный способ задания последовательности состоит в том, что указывается правило, позволяющее вычислить n-й член последовательности, если известны ее предыдущие члены. Название рекуррентный способ происходит от латинского слова recurrere – возвращаться. Чаще всего в таких случаях указывают формулу, позволяющую выразить n-й член последовательности через предыдущие, и задают 1–2 начальных члена последовательности.

Пример 1. y1 = 3; yn = yn–1 + 4, если n = 2, 3, 4,….


3) Характеристическим свойством


An=0 если n=2k-1; k принадлежит N
An=1 если n=2k

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

Последовательность называется возрастающей (неубывающей), если для любого n из мн. натуральных чисел выполняется Xn+1 > Xn (Xn+1 >= Xn) где n принадлежит N


Убывающая если Xn+1 <  Xn  где n принадлежит N

Всякая возрастающая, убывающая, невозрастающая последовательность называется монотонной.

Последовательность {Xn} называется немонотонной, если существует n, k принадлежащие N, такие что Xn+1< Xn; Xk+1>Xk

{Xn} - ограничена сверху, если существует M, такое что для всех n принадлежащих N. Xn <= M

{Xn} - ограничена снизу, если существует M, такое что для всех n принадлежащих N. Xn >= M

{Xn} - не ограничена сверху, если для любого M, существует n принадлежащих N. Xn >M 

{Xn} - не ограничена снизу, если для любого M, существует n принадлежащих N. Xn < M

{Xn} - называется ограниченной если существует положительное число M>0; для любого n принадлежащего N; |Xn| <= M

{Xn} - называется не ограниченной если для любого M>0; существует n принадлежащего N;
|Xn| >= M

Вопросы к коллоквиуму по теме "пределы и логарифмы"

Вопросы к коллоквиуму по теме "пределы и логарифмы"

1) Числовая последовательность, способы ее задания. Возрастающая и убывающая последовательности, монотонные и немонотонные, ограниченные и неограниченные последовательности.
2) Арифметическая и геометрическая прогрессии. Определение, свойства, вывод формул для вычисления n-го члена и суммы n первых членов.
3) Предел числовой последовательности, геометрическая интерпретация, теорема о единственности предела. Необходимое условие сходимости (ограниченность).
4) Бесконечно малая последовательность. Теорема о последовательности, её пределе и бесконечно малой последовательности. Теорема о произведении ограниченной и бесконечно малой последовательностей.
5) Арифметическая теорема о пределах.
6) Бесконечно большая последовательность, её связь с бесконечно малой. Предельный переход в неравенствах.
7) Теорема о "зажатой" последовательности. Достаточное условие сходимости числовой последовательности.
8) Второй замечательный предел  (с доказательством).
9) Бесконечно убывающая геометрическая прогрессия, её сумма.
10) Логарифм числа. Основное логарифмическое тождество. Докажите формулы для логарифма произведения и логарифма частного.
11) Логарифм числа. Основное логарифмическое тождество. Докажите формулы вынесения показателя степени для логарифмического числа и для основания логарифма.
12) Логарифм числа. Основное логарифмическое тождество. Докажите формулу переворачивания логарифма logab=1/logba и формулы перехода к новому основанию.
13) Логарифмическая функция ее свойства и график.

пятница, 1 февраля 2013 г.

[Информатика] Решение задачи 4 из "Файлы текст чтение"


Задача 4.
Написать программу, которая перепишет в поле Memoте строки из текстового файла, в которых количество слов чётно. Имя файла вводится в поле ввода.
Для проверки работоспособности программы создайте текстовый файл с помощью текстового редактора (например, Блокнота).


var f:text;
s:string;

function f1(s:string):boolean;
var i,k:integer;
begin
while((i<length(s)) and (copy(s,i,1)=' '))do i:=i+1;

while(i<length(s))do
begin
while((i<length(s)) and (copy(s,i,1)<>' '))do i:=i+1;
while((i<length(s)) and (copy(s,i,1)=' '))do i:=i+1;
k:=k+1;
end;
if((k mod 2=0) and (k<>0))then
f1:=true
else
f1:=false;
end;

begin
readln(s);
assign(f,s);
reset(f);
while not eof(f) do
begin
readln(f,s);
if(f1(s))then
writeln(s);
end;
close(f);
end.

[Информатика] Решение задачи 4 из "Файлы текст запись"


Задача 4.
Создать текстовый файл, состоящий из nстрок. В каждой строке по nцифр без пробелов. Последняя цифра в первой строке, предпоследняя цифра во второй строке, и т.д. должны быть единицы, все остальные цифры - ноли. Имя файла и числоn  должны вводиться в соответствующие поля ввода.
После выполнения программы проверьте содержимое файла с помощью текстового редактора (например, Блокнота).
Например, если в качестве nбыло введено число 5, то в файле должно быть записано следующее
00001
00010
00100
01000
10000


var f:text;
s:string;
i,k,n:integer;
begin
readln(s);
readln(n);
assign(f,s);
rewrite(f);
for i:=1 to n do
begin
for k:=1 to n do
if(n-i-k+1=0)then
write(f,'1')
else
write(f,'0');
writeln(f,'');
end;
close(f);
end.

[Информатика] Файлы текст запись


Файлы.
Текстовые файлы.
Запись данных в текстовый файл.
В современном мире любая программа тем или иным способом связана с внешними файлами.
Файл – это именованная область на диске (носителе информации), в которой записана какая-то информация.
Это могут быть как специальные файлы (например, файлы стандартных библиотек), так и файлы данных, получающихся в результате работы программы. Все файлы имеют свой специфический формат. Эта специфика зависит от типа кодировки информации в файле.
Широкое распространение получили текстовые файлы.
Текстовые файлы состоят из строк (одной или нескольких) произвольной длины в которых могут быть записаны любые символы. Каждая строка текста завершается специальным символом, означающим конец строки, а файл заканчивается символом конца файла. Одной из особенностей текстовых файлов являетсято, что их можно просматривать и редактировать с помощью различных текстовых редакторов, например редактора Notepad (Блокнот) .
Текстовый файл представляет собой совокупность связанных данных, рассматриваемых как единое целое и имеющих общее имя. У текстовых файловпринято ставить расширения .txt, однако наличие данного расширения не гарантирует того, что файл текстовый, равно как и не обязательно то, что текстовый файл будет иметь расширение txt.Приведём примеры стандартных расширений файлов, которые по типу являются текстовыми:.ini, .log, .inf, .dat, .bat. Мы будем использовать расширение .txt.
Ещё одна особенность текстовых файлов заключается в способе доступа к данным, которые в них содержатся. Текстовый файл является файлом последовательного доступа.
В файлах последовательного доступа данные располагаются в том порядке, в каком они поступили в файл – последовательно (друг за другом). Для поиска требуемый данных необходимо последовательно просматривать весь файл - от начала до нужных данных. Следовательно, время доступа к данным находится в прямой зависимости от местоположения в файле.
Такие файлы целесообразно использовать в том случае, если при обращении к файлу обрабатываются почти все данные, а их содержимое меняется достаточно редко. Основной недостаток файлов с последовательным доступом заключается в трудности обновления существующих данных, замены данных на новые, вставки новых данных.
Рассмотрим работу с текстовыми файлами в средеLasarus.
Любая программа не может непосредственно обратиться к диску, обращение происходит только через переменные, которые хранятся в оперативной памяти. Поэтому для работы с файлами нам нужна файловая переменная, которая и будет передаточным звеном между программой и диском. Описывается файловая переменная следующим образом:
Var
f:TextFile;
В программе необходимо поставить в соответствие файловую переменную и файл, который будет создан или уже существует на диске. ЭтоделаетсяприпомощипроцедурыAssignFile, которая имеет два параметра. В качестве первого параметра указывается файловая переменная, а второго – строка, прописывающая локальный или полный путь к файлу.
procedure TfrmEx1.btnEx1Click(Sender: TObject);
var
f:TextFile;
begin
AssignFile(f,'my.txt');
end;
В данном примере мы поставили в соответствие файловую переменную f и файл с именем my.txt, который находится (или будет находиться) в текущей директории (в директории, из которой запущена программа). Это не полное имя файла. Если мы полностью указываем путь к файлу (если, например, файл находится не в текущей директории), то это будет полное имя файла.
Внимание: связывание файловой переменной с именем файла с помощью оператора AssignFile не проверяет, существует такой файл или нет, и не открывает существующий файл, и не создаёт новый файл
Если в имени файла (или пути) присутствуют русские буквы, то необходимо воспользоваться функцией UTF8ToANSI.
Например, связывание файла 'проба.txt' с файловой переменной будет выглядеть следующим образом
AssignFile(f, UTF8ToANSI('проба.txt'));
В текстовый файл информацию можно записывать или считывать из файла. Причём можно делать только что-то одно. Нельзя одновременно писать и читать.
Чтобы производить какие-либо операции с файлом, его необходимо открыть. Соответственно открыть его можно либо для записи в файл, либо для чтения из файла.
Рассмотрим сначала, как можно писать в файл.
Чтобы открыть файл для записи, необходимо воспользоваться оператором Rewrite(f), где  f - файловая переменная.
При этом, на диске создаётся пустой файл с именем, указанным в операторе AssignFile.Если файл с таким именем уже был, то его содержимое уничтожается.
Теперь в файл можно записывать информацию. Для записи данных в файл используются  операторы write иwriteln. Эти операторы работают почти так же, как и при выводе на экран, только в начале необходимо указывать файловую переменную, чтобы указать, что вывод будет не на экран, а в соответствующий файл.
Ниже приведён пример процедуры, которая записывает различную информацию в текстовый файл с именем ‘пример.txt

Procedure ZapFile;
12Привет107107
FALSE
10  7
x=10
 
var
f:TextFile;
x,y:integer;
Ok:boolean;
begin
AssignFile(f,UTF8ToANSI(’пример.txt’));
ReWrite(f);
x:=10;
y:=7;
Writeln(f,x);       // В файл в первую строку запишется 10, и курсор перейдёт на вторую строку.
Write(f,x+2); ); // В файл во вторую строку запишется 12 (10+2), и курсор останется в конце второй строки
Write(f,'Привет'); ); // В файл в конец второй строки (там, где стоит курсор) запишется слово «Привет», курсор останется в конце второй строки.
Write(f,x,y); // В файл в конец второй строки (там, где стоит курсор) запишется 10 и 7 без пробела, курсор останется в конце второй строки.
Writeln(f,x,y); ); // В файл в конец второй строки (там, где стоит курсор) запишется 10 и 7 без пробела, курсор переместится на третью строку.
Ok:=5>7;
Writeln (f,Ok); // В файл в третью строку запишется значение переменной Ok - False, курсор переместится на следующую (четвертую) строку.
Writeln(f,x,'  ',y); // В файл в четвёртую строку запишется значение переменных x – 10 и y – 7 через два пробела, курсор переместится на пятую строку.
Writeln(f,'x=',x); // В файл в четвёртую строку запишется x=10.
CloseFile(f);
end;

Обратите внимание, что функциюUTF8ToANSI необходимо использовать, если русские символы присутствуют только в имени файла или пути, но для вывода русского текста в файл никаких функций перевода использовать не надо.
Замечание: Так как довольно часто в именах папок или файлов присутствуют русские буквы, а так же, если имя файла вводится пользователем, и мы не можем исключить ситуацию, что могут быть введены русские буквы, то всегда следует использовать функциюUTF8ToANSIв операторе AssignFile.
Так же можно заметить, что после всех операций вывода в файл стоит процедура CloseFile(f).Эту процедуру необходимо всегда использовать после окончания работы с файлом, Она закрывает файл. Если убрать эту процедуру, то часть информации будет потеряна.
Как было сказано выше, оператор Rewrite всегда создаёт новый файл. Однако бывает необходимо дописать информацию к уже имеющемуся файлу. В этом случае файл необходимо открыть для добавления в него информации с помощью процедуры Append(f) (вместо процедуры Rewrite). При использовании процедуры Append(f) не создаётся новый файл, а открывается существующий, и курсор устанавливается в конец файла. Соответственно все операторы write иwriteln будут выводить информацию в файл, начиная с того места, где стоит курсор и далее.
Открывать файл с помощью процедуры Append(f)можно, только если такой файл существует, в противном случае произойдёт ошибка и выполнение программы прервётся. После окончания работы с файлом необходимо тоже закрыть его с помощью процедуры CloseFile(f).
Если файл передаётся в процедуру как параметр, то данный параметр всегда должен быть описан как параметр-переменная, т.е. с помощью слова var.
Рассмотрим пример программы, которая создаёт два файла ‘проба1.txt’ и ‘проба2.txt’ и записывает в них ноли следующим образом – в первом файле 3 строки по 5 нолей, во втором 4 строки по 3 ноля. Ноли отделены друг от друга двумя пробелами.

procedureZapZero(varfl:TextFile;n,m:integer);
var
i,j:integer;
begin
Rewrite(fl);
for i:=1 to n do
begin
for j:=1 to m do
write(fl,0:3);
writeln(fl)
end;
CloseFile(fl)
end;

procedure TForm1.Button1Click(Sender: TObject);
var
f,g:TextFile;
begin
AssignFile(f,UTF8toANSI('проба1.txt'));
AssignFile(g,UTF8toANSI('проба2.txt'));
ZapZero(f,3,5);
ZapZero(g,4,3);
end;


Задачи.
Задача 1.
Создать текстовый файл, состоящий из nстрок. В каждой строке по mчисел. Под каждое число должно быть отведено 5 позиций. В первой строке все числа должны быть единицы, во второй – двойки, в третьей тройки и т.д. Имя файла, числаn и m должны вводиться в соответствующие поля ввода.
После выполнения программы проверьте содержимое файла с помощью текстового редактора (например, Блокнота).
Например, если в качестве n и mбыли введены соответственно числа 4 и 3, то в файле должно быть записано следующее
    1    1    1
    2    2    2
    3    3    3
    4    4    4

Задача 2.
Создать текстовый файл, состоящий из nстрок. В каждой строке по mчисел. Под каждое число должно быть отведено 5 позиций. Первое число в каждой  строке должно быть единица, второе – двойка, третье -  тройка и т.д. Имя файла, числаn и m должны вводиться в соответствующие поля ввода.
После выполнения программы проверьте содержимое файла с помощью текстового редактора (например, Блокнота).
Например, если в качестве n и mбыли введены соответственно числа 4 и 3, то в файле должно быть записано следующее
    1    23
    1    2    3
    1    2    3
    1    2    3

Задача 3.
Создать текстовый файл, состоящий из nстрок. В каждой строке по nцифр без пробелов. Перваяцифра в первой строке, вторая цифра во второй строке, третья цифра в третьей строке и т.д. должны быть единицы, все остальные цифры - ноли. Имя файла и числоn  должны вводиться в соответствующие поля ввода.
После выполнения программы проверьте содержимое файла с помощью текстового редактора (например, Блокнота).
Например, если в качестве nбыло введено число5, то в файле должно быть записано следующее
10000
01000
00100
00010
00001

Задача 4.
Создать текстовый файл, состоящий из nстрок. В каждой строке по nцифр без пробелов. Последняя цифра в первой строке, предпоследняя цифра во второй строке, и т.д. должны быть единицы, все остальные цифры - ноли. Имя файла и числоn  должны вводиться в соответствующие поля ввода.
После выполнения программы проверьте содержимое файла с помощью текстового редактора (например, Блокнота).
Например, если в качестве nбыло введено число 5, то в файле должно быть записано следующее
00001
00010
00100
01000
10000

,,,Задача 5.
Создать текстовый файл, состоящий из nстрок. В каждой строке записаны числа, количество которых случайно. При этом чисел в строке не может быть меньше 2 и большеm. Под каждое число должно быть отведено 5 позиций. Каждое число случайно и лежит в диапазоне [a,b]. Имя файла, числаa,b, n и m должны вводиться в соответствующие поля ввода.
После выполнения программы проверьте содержимое файла с помощью текстового редактора (например, Блокнота).

Задача 6.
Создать текстовый файл, состоящий из nстрок. В каждой строке должны быть записаны слова, отделённые друг от друга одним пробелом. Количество слов случайно. При этом слов в строке не может быть меньше 2 и больше m. Длина каждого слова случайна, но не может быть меньше одного символа и больше 10. Каждый символ в слове – случайная маленькая русская буква. Имя файла, числаn и m должны вводиться в соответствующие поля ввода.
После выполнения программы проверьте содержимое файла с помощью текстового редактора (например, Блокнота).

[Информатика] Файлы текст чтение


Файлы.
Текстовые файлы.
Чтение данных из текстового файла.
Рассмотрим чтение из файла. Открывается файл для чтения с помощью процедуры
Reset(f)
Обратите внимание, что при открытии файла для чтения из него, файл должен существовать на диске, если его нет, то появится сообщение об ошибке и выполнение программы прервётся.
Если открытие прошло успешно, то курсор (указатель) помещается в начало открытого файла, т.е. на первую строку, которую мы можем прочитать в строковую переменную s при помощи процедуры
ReadlLn(f, s)
При выполнении данного оператора в переменную sзаписывается первая строка, курсор помещается на начало второй строки. Если снова выполнить оператор ReadlLn , то в переменную считается вторая строка, а курсор переместится в начало следующей строки и т.д. После того, как с файлом поработали, его необходимо закрыть (так же, как и при записи в файл) с помощью процедуры CloseFile(f).
Рассмотрим пример процедуры, которая записывает первую строку файла 'my.txt' в поле Memoс именемmemEx1.
procedure TfrmEx1.btnEx1Click(Sender: TObject);
var
f:TextFile;
s:string;
begin
AssignFile(f,'my.txt');//Ставим в соответствие файл и файловую переменную
Reset(f);  //Открываем файл для чтения
ReadLn(f, s);//Читаем из файла строку
memEx1.Lines.Append(s); //Записываем строку в поле вывода
CloseFile(f); // Закрываем файл
end;
При запуске этой программы на выполнение в поле вывода всегда будет записываться только одна строка – первая. Чтобы считать несколько строк из файла, необходимо воспользоваться циклом. Например, следующая процедура считает и поместит в поле Мемо 5 строк из файла 'my.txt'.
procedure TfrmEx1.btnEx1Click(Sender: TObject);
var
f:TextFile;
s:string;
i:integer;
begin
AssignFile(f,'my.txt');//Ставим в соответствие файл и файловую переменную
Reset(f);  //Открываем файл для чтения
   For i:=1 to 5 do //выполняем 5 раз
begin
ReadLn(f, s);//Читаем из файла строку
memEx1.Lines.Append(s); //Записываем строку в поле вывода
end;
CloseFile(f); // Закрываемфайл
end;
Как уже было сказано ранее, текстовые файлы – это файлы последовательного доступа, т.е. нельзя сразу обратиться к конкретной строке, а необходимо предварительно считать все предыдущие. Например, если необходимо вывести в поле вывода только пятую строку, то надо предварительно считать 4 строки. Для этого можно воспользоваться оператором ReadLn  без указания переменной, в которую считываем, т.е. воспользоваться следующей формой оператора ReadLn(f)
procedure TfrmEx1.btnEx1Click(Sender: TObject);
var
f:TextFile;
s:string;
i:integer;
begin
AssignFile(f,'my.txt');//Ставим в соответствие файл и файловую переменную
Reset(f);  //Открываем файл для чтения
For i:=1 to 4 do //выполняем4раза
ReadLn(f);//пропускаемстроку
Readln(f, s);//Читаем из файла строку (пятую)
memEx1.Lines.Append(s); //Записываем строку в поле вывода
CloseFile(f); // Закрываемфайл
end;
В этом примере оператор ReadLn(f) просто переносит указатель на начало следующей строки, не считывая никаких данных.
Мы не всегда можем знать, сколько именно строк в файле. Как же считать все строки из файла, не зная сколько их? Решить эту задачу можно с помощью булевской функции EOF(f)(от английского EndOfFile–конец файла). Данная функция принимает значение «истина», если в момент её вызова курсор находится  в конце файла и «ложь» ‑ в противном случае. Приведём пример процедуры, которая все строки файла перепишет в поле Memo.
procedure TfrmEx1.btnEx1Click(Sender: TObject);
var
f:TextFile;
s:string;
begin
AssignFile(f,'my.txt');//Ставим в соответствие файл и файловую переменную
Reset(f);  //Открываем файл для чтения
WhilenotEOF(f) do//поканеконец файла
begin
ReadLn(f, s);//Читаем из файла строку
memEx1.Lines.Append(s); //Записываем строку в поле вывода
end;
CloseFile(f); // Закрываемфайл
end;
Обратите внимание, что во всех задачах мы использовали оператор ReadLn, а не Read. Так, например, если в последней задаче использовать оператор Readвместо ReadLn, то программа никогда не закончит свою работу. Дело в том, что оператор Read считает данные в строку, но не переведёт курсор в начало следующей строки, а оставит его в конце первой строки. Следующий оператор Read считает в переменную пустую строку, так как в конце строки больше нет данных, и снова курсор останется на месте и т.д. Таким образом, курсор никогда не попадёт в конец файла и соответственно программа не выйдет из цикла. Следовательно, если данные из файла считываются в строку, то надо использовать оператор ReadLn.
Кстати, а можно ли выяснить, что курсор находится в конце  строки? Да, для этого служит другая булевская функция EOLN(f)(от английского EndOfLiNe– конец строки). Не трудно догадаться, что данная функция принимает значение «истина», если в момент её вызова курсор находится  в конце строки и «ложь» ‑ в противном случае.
Мы рассмотрели,как работать с текстовым файлом, если нам необходимо считывать из файла данные, которые интерпретируются как строки. Однако если в файле содержатся данные, которые представляют из себя числа (как целые, так и вещественные), которые отделены друг от друга одним или несколькими пробелами, то можно организовать работу иным способом. В этом случае данные можно считывать сразу в переменные численного типа (целые или вещественные). Посмотрим на примере, как это можно сделать.
10   7      25
14     1   8   17
24
27   17
11
12   34   45  
Подпись: 10   7      25
14     1   8   17
24
27   17
11
12   34   45   
Пусть имеется некоторый текстовый файл, содержащий строки, в которых через пробелы (пробелов может быть любое количество) записаны числа, как, например, на рисунке справа.
Если сразу после открытия файла для чтения, мы воспользуемся оператором Read(f,x),
где f– файловая переменная,
x  - переменная целого типа,
то в переменную x будет записано число 10, а курсор остановится сразу после 0 перед разделителем (в данном случае пробелом). При выполнении оператораRead(f,x)  ещё раз произойдёт следующее – сначала будут пропущены все разделители (пробелы), и курсор остановится перед числом 7, затем число 7 запишется в переменную x, а курсор остановится после 7 перед очередным разделителем (пробелом). При выполнении оператораRead(f,x)  третий раз произойдёт следующее – сначала будут пропущены все разделители (пробелы), и курсор остановится перед числом 25, затем число 25 запишется в переменную x, а курсор остановится после 5 перед очередным разделителем (в данном случае концом строки). Таким образом, оператор Read(f,x)  (если xявляется численной переменной) работает следующим образом: пропускаются все разделители (сколько бы их не было) до достижения данных, считываются данные до следующего разделителя, данные интерпретируются как число и записываются в численную переменную, а курсор останавливается перед разделителем.
Рассмотрим пример
procedure TfrmEx1.btnEx1Click(Sender: TObject);
var
f:TextFile;
s:string;
x, i, k:integer;
begin
AssignFile(f,'my.txt');//Ставим в соответствие файл и файловую переменную
Reset(f);  //Открываем файл для чтения
k:=0;
For i:=1 to 5do//выполнитьпятьраз
begin
Read(f, x);//Читаем очередное число
k:=k+x; //прибавляем его к сумме
end;
CloseFile(f); // Закрываемфайл
end;
После выполнения этой процедуры в переменнойkбудет 57 - сумма первых пяти чисел 10, 7, 25, 14 и 1. Как можно заметить, оператор Read(f, x) считывал численные данные в численную переменную, пропуская любое количество разделителей, стоящих между данными. В качестве разделителей могут выступать как пробелы, так и концы строк.
Что произойдёт, если в приведённом примере заменить оператор Read(f, x) на ReadLn(f, x)?Оператор ReadLn(f, x) работает почти так же, как и оператор Read(f, x). Единственное его отличие заключается в том, что после считывания данных в переменную, курсор не остаётся после данных, а перемещается на начало следующей строки.
procedure TfrmEx1.btnEx1Click(Sender: TObject);
var
f:TextFile;
s:string;
x, i, k:integer;
begin
AssignFile(f,'my.txt');//Ставим в соответствие файл и файловую переменную
Reset(f);  //Открываем файл для чтения
k:=0;
For i:=1 to 5do//выполнитьпятьраз
begin
ReadLn(f, x);//Читаем очередное число
k:=k+x; //прибавляем его к сумме
end;
CloseFile(f); // Закрываемфайл
end;
После выполнения этойпроцедуры в переменнойkбудет 86 - сумма чисел, стоящих в начале первых пяти строк 10, 14, 24, 27 и 11.
Часто возникает задача получить числа из какой-то одной строки, например, посчитать сумму чисел в первой строке, а количество чисел в строке нам не известно.С учётом сказанного выше кажется логичным использовать здесь функцию EOLN(f).И в данном случае процедура, решающая нашу задачу могла бы выглядеть так
procedure TfrmEx1.btnEx1Click(Sender: TObject);
var
f:TextFile;
s:string;
x, k:integer;
begin
AssignFile(f,'my.txt');//Ставим в соответствие файл и файловую переменную
Reset(f);  //Открываем файл для чтения
k:=0;
WhilenotEOLN(f) do//поканеконец строки
begin
Read(f, x);//Читаем очередное число
k:=k+x; //прибавляем его к сумме
end;
CloseFile(f); // Закрываемфайл
end;
После выполнения этой процедуры в переменнойkдолжно быть 42 - сумма чисел из первой строки 10, 7, 25. Однако такой результат будет не всегда. Почему же может быть иной результат. Ответ зависит от того, есть ли после последнего числа в строке пробелы или нет. Если пробелов нет, то результат будет соответствовать ожиданию.
Давайте рассмотрим, что произойдёт, если после числа 25 в нашем примере будет стоять пробел. В этом случае, после того, как тело цикла выполнится в третий раз и считается число 25, курсор остановится после цифры 5 перед пробелом. Произойдёт вызов функции EOLN(f). Функция выдаст результат «ложь», так как курсор стоит не в конце строки (вспомним, после курсора стоит пробел), а, следовательно, выход из цикла не состоится и снова выполнится оператор Read(f, x), который пропустит все разделители (в нашем случае пробел и конец строки) и считает число из следующей строки. То есть цикл продолжит выполняться и в переменной k окажется не сумма чисел из первой строки, а сумма чисел из нескольких строк (из скольких конкретно зависит от того, когда после последнего числа в строке не будет пробелов).
Для того, чтобы избежать подобных проблем необходимо причтении чисел из файла использовать вместо функции EOLN(f) функцию SeekEOLN(f).Функция SeekEOLN(f)сначала пропускает все пробелы, а потом проверяет, стоит ли курсор в конце строки. Если мы перепишем вышеприведённый пример, заменив функцию EOLN(f) на функцию SeekEOLN(f), то программа будет работать верно, всегда, вне зависимости от того стоят ли после последнего числа в строке пробелы или нет.
procedure TfrmEx1.btnEx1Click(Sender: TObject);
var
f:TextFile;
s:string;
x, k:integer;
begin
AssignFile(f,'my.txt');//Ставим в соответствие файл и файловую переменную
Reset(f);  //Открываем файл для чтения
k:=0;
WhilenotSeekEOLN(f) do//поканеконец строки
begin
Read(f, x);//Читаем очередное число
k:=k+x; //прибавляем его к сумме
end;
CloseFile(f); // Закрываемфайл
end;
Аналогично, при работе с числами вместо функции EOF(f) надо применять функцию SeekEOF(f).Данная функция пропускает не только пробелы, но и концы строк.
Например, если необходимо написать процедуру, которая посчитает сумму всех чисел в файле, то она может выглядеть так
procedure TfrmEx1.btnEx1Click(Sender: TObject);
var
f:TextFile;
s:string;
x, k:integer;
begin
AssignFile(f,'my.txt');//Ставим в соответствие файл и файловую переменную
Reset(f);  //Открываем файл для чтения
k:=0;
WhilenotSeekEOF(f) do//поканеконецфайла
begin
Read(f, x);//Читаем очередное число
k:=k+x; //прибавляем его к сумме
end;
CloseFile(f); // Закрываемфайл
end;
При чтении данных из файла необходимо руководствоваться следующим правилом:
 

Если данные из файла читаются как строки, то следует использовать функции EOLN(f) и EOF(f), если данные из файла читаются как числа, то следует  использовать функции SeekEOLN(f) и SeekEOF(f).

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



Задачи.
Задача 1.
Написать программу, которая посчитает количество строк в текстовом файле. Имя файла вводится в поле ввода.
Для проверки работоспособности программы создайте текстовый файл с помощью текстового редактора (например, Блокнота).
Задача 2.
Написать программу, которая определит, сколько символов содержит самая длинная строка в текстовом файле. Имя файла вводится в поле ввода.
Для проверки работоспособности программы создайте текстовый файл с помощью текстового редактора (например, Блокнота).
Задача 3.
Написать программу, которая найдёт самую длинную строку в текстовом файле и выведет её содержимое в надпись (label).Если таких строк несколько, то вывести первую из них. Имя файла вводится в поле ввода.
Для проверки работоспособности программы создайте текстовый файл с помощью текстового редактора (например, Блокнота).
Задача 4.
Написать программу, которая перепишет в поле Memoте строки из текстового файла, в которых количество слов чётно. Имя файла вводится в поле ввода.
Для проверки работоспособности программы создайте текстовый файл с помощью текстового редактора (например, Блокнота).
Задача 5.
В текстовом файле записано несколько строк. Каждая строка содержит несколько целых чисел, отделённых друг от друга одним или несколькими пробелами. Написать программу, которая посчитает сумму чисел в той строке, количество чисел в которой минимально. Если таких строк несколько, то вывести сумму чисел в последней из них. Имя файла вводится в поле ввода.
Для проверки работоспособности программы создайте текстовый файл с помощью текстового редактора (например, Блокнота).
Задача 6.
В текстовом файле записано несколько строк. Каждая строка содержит несколько целых чисел, отделённых друг от друга одним или несколькими пробелами. Написать программу, которая посчитает сумму последних чисел в строках (то есть в каждой строке берётся последнее число и складывается с суммой). Имя файла вводится в поле ввода.
Для проверки работоспособности программы создайте текстовый файл с помощью текстового редактора (например, Блокнота).