Рейтинг@Mail.ru
Menu
Скачать картинки на телефон бесплатно.
Заставки для телефона, аватарки.
(Вырезать из фотографии)

Роза `Гренд Могул` Яхта `Алиса` Лесное озеро Музей `Пирогово` Белочка
Выберите рубрику (тему)

Тема: Работа с текстовым файлом

Программа 9

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

Текст программы

program Prg9;
{ http://nataliya.kiev.ua }
uses crt;
var f:text;
   q:char;
   fname:string;
procedure newfile(var f:text);
var s:string;
begin
   rewrite(f);
   repeat
      write('str=');
      readln(s);
      if s<>''then writeln(f,s)
   until s='';
   close(f);
end;
procedure outputfile(var f:text);
var s:string;
begin
   reset(f);
   repeat
      readln(f,s);
      write('str=');
      writeln(s);
   until eof(f);
end;
function max(var f:text):real;
var x,m:real;
begin
reset(f);
read(f,m);
while not eof(f) do begin
   read(f,X);
   if x>m then m:=x;
end;
max:=m;
close(f);
end;
begin
clrscr;
writeln('Нужно создавать новый файл?');
readln(q);
writeln('Введите имя файла.');
readln(fname);
assign(f,fname);
if(q='Y')or(q='y')then newfile(f)
            else outputfile(f);
writeln('Наибольший элемент в файле:');
writeln(max(f):0:3);
if(q='Y')or(q='y')then begin
   writeln('Изъять созданный файл?');
   readln(q);
   if(q='Y')or(q='y')then erase(f)
   end;
readkey;
end.

Результат работы программы

1)
Нужно создавать новый файл?
y
Введите имя файла.
myfile.txt
str=12 17 29
str=31 999 26
str=9023.1 2852
str=765.19
str=
Наибольший элемент в файле:
9023.100
Изъять созданный файл?
y

2)
Нужно создавать новый файл?
n
Введите имя файла.
abc.txt
str=256 113 511 0.4
str=43 785 13
str=98.1 32 476
str=123
str=74 88
Наибольший элемент в файле:
785.000

3)
Нужно создавать новый файл?
y
Введите имя файла.
f
str=555.5 246.8 421 300.8
str=888.68
str=13 2245.03
str=2005
str=
Наибольший элемент в файле:
2245.030
Изъять созданный файл?
n

4)
Нужно создавать новый файл?
n
Введите имя файла.
f
str=555.5 246.8 421 300.8
str=888.68
str=13 2245.03
str=2005
Наибольший элемент в файле:
2245.030

Теория к программе

Работа с текстовым файлом
  Структурированные данные - строка
    Тип строка: STRING[n] - последовательность символов длиной n, что помещаются в апострофах, n [0,255], по умолчанию n=225.
    + операция конкатенации (склеивание строк).
  Сравнение строк
    Для данных типа строка определенны все операции сравнения (=,<>,>,>=,<,<=). Сравнение выполняется по лексикографическому принципу, то есть при сравнивании двух строк каждый символ первой строки сравнивается последовательно слева направо с каждым символом второй строки (метод словаря) к первому несовпадению. За результатом сравнения первого несовпадающего символа определяется результат сравнения двух строк.
    Строка как массив
      Данные типа строка сохраняются в виде следующей последовательности байт, которая содержат коды ASCII символов, нулевой байт содержит фактическую длину строки
      К каждому байту (символу) можно обратиться как к элементу массива за его индексом
  Процедуры и функции работы с строками
    CONCAT - конкатенация последовательности строк
    COPY - выделить подстроку
    DELETE - изъять подстроку
    INSERT - прибавить подстроку
    LENGTH - определить длину строки
    POS - выполнить поиск подстроки в строке
    STR - преобразовать числовое значение в его символьную репрезентацию
    VAL - преобразовать строку в её числовое значение
      1) LENGTH(S: string):integer - возвращает длину строки (значение первого байту)
        LENGTH('word') --> 4
      2) CONCAT(s1,....s:string):string; - выполняет конкатенацию (объединение) строк;
        где si - список строк или выражений типа строка; общая длина результата *255 символов
      4) DELETE(var s:string, n1,n2:integer) - процедура, разрешает изъять подстроку из строки S, причем сама строка S изменяется; здесь n1 - первый изымаемый символ; n2 - количество изымаемых символов.
      5) INSERT(S1:string;var S2:string;n:integer); - процедура добавляет подстроку S1 в строку S2 начиная из позиции n; S1, S2 и n - выражения соответствующего типа
      6) POS(S1,S2: string):byte - разыскивает подстроку S1 в строке S2 и возвращает номер позиции первого найденного вхождения. Если возвращается 0 - строка не содержит предоставленной подстроки. S1, S2 - могут быть выражениями типа строка
      7) STR(x[:l1[:l2]], var s:string);
        где x - выражение целого (integer) или действительного (real) типа
        Процедура предоставленна в форме x:l1 (целое) или x:l1:l2 (действительное) число преобразовывает в строку и сохраняет её в переменной s.
      8) VAL(s:string; var v:integer/real; var c:integer);
        Процедура строка s преобразовывает в числовую форму (обратная к str) и сохраняет её в переменной v. Если строка содержит недопустимый символ (который не может быть применена в записи числа), то ее позиция сохраняется в переменной c, в другом случае c=0.
  Работа с текстовыми файлами
    Текстовый файл описывается:
      var f:text;
  Элементами текстового файла являются символы, которые составляют строки текстового файла
    При вводе/выводе численных данных они автоматически превращаются в значения соответствующего типа при вводе или в последовательность символов соответственно формата вывода при выводе
  Специальные функции и процедуры работы с текстовыми файлами
    1) eoln(var t:text): boolean;
      Окончание строки определяется кодами двух символов:
      #13 - CR (возвращение каретки или переход к началу строки)
      #10 - LF (переход на новую строку)
      Оба кода генерируются при нажиме Enter.
      Функция eoln принимает значение true, если достигнуто окончание строки, то есть показатель на текущий символ что обрабатывается стоит на первом с двух символов признака конца строки (#13). В других ситуациях возвращает false.
      Если eof=true, то и eoln=true.
    2) seekeoln(var f:text):boolean.
      Действие такая же, как и функции eoln, но опускаются пропуски и символы табуляции в средине и в конце строки. Удобно использовать при обработке числовых данных.
    3) seekeof(var f:text):boolean.
      Действие такая же, как и функции eof, но опускаются пропуски, символы табуляции и переводу строки в конце файла
    4) settextbuf(var t:text,var buf [;<размер>:word]).
      Процедура переопределяет буфер ввода/вывода (по умолчанию стандартный, 128 байт), что удобно для быстрой обработки текстовых файлов или непосредственного доступа к буферу
      Ограничение:
      а) процедура не используется для открытых файлов;
      б) переобозначенный буфер действует до появления следующей процедуры assign - переопределение файловой переменной
      Параметры:
        buf - любая переменная, что определяет буфер обмена;
        <размер> - необязательный параметр, который определяет размер буферу (иначе равняется размеру переменной buf).
    Функция sizeof(<идентификатор переменной/типа>):word; - возвращает размер переменной в байтах
    5) flush(var f:text).
      Процедура переписывает содержимое буфера к текстовому файлу, открытого для записи (если открытый для чтения - действия нет).
      Используется как дополнительное средство для гарантии того, что все данные, которые записывались в файл, к нему попали. Сам буфер очищается.
    6) Особенности работы процедур read, write для текстовых файлов.
      Как и при вводе из клавиатуры:
      read(f,v1,v2,...vn); ~ read(f,v1);read(f,v2);...read(f,vn);
      readln(f,v1,v2,...vn); ~ read(f,v1);read(f,v2);...readln(f,vn);
      read(input,v1,v2,...vn); ~ read(v1,v2,...,vn);
      аналогично при выводе:
      write(f,v1,v2,...vn); ~ write(f,v1);write(f,v2);...write(f,vn);
      writeln(f,v1,v2,...vn); ~ write(f,v1);write(f,v2);...writeln(f,vn);
      write(output,v1,v2,...,vn); ~ write(v1,v2,...,vn).
    Если список вывода отсутствует, то:
    readln(f); - показатель текущей записи файла f устанавливается на следующую строку (запись), то есть пропускаются все символы к (CR/LF) - признака конца строки
    writeln(f); - в файл записываются коды конца строки (CR/LF) то есть пустая строка в текущем месте.

Случайный анекдот

Меломана, алкоголика и программера спросили, что бы те делали, если бы они вдруг проснулись в 80-м году...
Меломан пошел бы спасать Джона Леннона. Алкоголик бы упился дешевой водки. А программер бы повесился...
Почему?
А что, опять за ЕС садиться?
Дата: 10-10-2004   Автор: Admin   Подрубрика: Программисты