Pascaler
О проекте Теоретический материал Тестирование Архив задач
Войти в личный кабинет



О проекте


Преподавателям


Тема: Использование текстовых файлов в качестве нетипизированных.

Рассмотрите пример.

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

Program Kodirovka;
Const
  NofCod = 20; {Размер таблицы смещений кодов}
Var
  FirstFile : text; {Исходный файл}
  SecondFile : file; {Результирующий файл}
  FirstName, SecondName : string;
  IOres : byte; {Код результата работы с файлом}
  NofSymb : LongInt; {Число символов в файле}
  Codes : Array[1..NofCod] of byte; {Таблица смещений кодов символов}
  Buffer : Array [1..NofCod] of char; {Буфер для символов}
  i : word;
{Процедура записи в файл с проверкой}
Procedure WriteAndControl (Var Buf, Amount : word);
Var
  result : word; {Число переданных символов}
Begin
  blockwrite (SecondFile, Buf, Amount, result);
  if result <> Amount
    then
      begin
        writeln('Нет места на диске ');
        Halt;
      end;
End;
Begin
{Связь с исходным текстовым файлом для чтения}
  repeat
    {$I-}
    write('Имя исходного файла: ');
    readln(FirstName);
    assign(FirstFile, FirstName);
    reset(FirstFile);
    {$I+}
    IOres := IOresult;
    if IOres <> 0
      then
        writeln('Такого файла нет ');
  until IOres =0;
{Связь с результирующим файлом без типа для записи}
  repeat
    {$I-}
    write('Имя результирующего файла: ');
    readln(SecondName);
    assign(SecondFile, FirstName);
    rewrite(SecondFile, 1); {Размер блока в один байт}
    {$I+}
    IOres := IOresult;
    if IOres <> 0
      then
        writeln('Неправильное имя файла ');
  until IOres =0;
{Установка счетчика символов и запись его в файл}
  NofSymb := 0;
  WriteAndControl(NofSymb, 4);
{Задание таблицы смещений кодов символов, запись ее в файл}
  Randomize;
  for i := 1 to NofCod do
    Codes[i] := Random(256);
{Перекодировка символов и запись содержимого полных буферов в файл}
  i := 0;
  while not Eof(FirstFile) do
    begin
      Inc(NofSymb);
      Inc(i);
      if Eoln(FirstFile)
        then
          begin
            Buffer[i] := Chr((13+Codes[i]) mod 256);
            if i=NofCod
              then
                begin
                  writeAndControl(Buffer, NofCod);
                  i := 0;
                end;
            Inc(i);
            Buffer[i] := Chr((10+Codes[i]) mod 256);
            readln(FirstFile);
          end;
        else
          begin
            read(FirstFile, Symbol);
            Buffer[i] := Chr((Ord(Symbol)+Codes[i]) mod 256);
          end;
      if i = NofCod
        then
          begin
            writeAndControl(Buffer, NofCod);
            i := 0;
          end;
{Запись в файл завершающей части символов}
      if i <> 0
        then
          begin
            writeAndControl(Buffer, i);
{Запись числа символов}
            NofSymb := FileSize(SecondFile)-NofCod-4;
            Seek(SecondFile, 0);
            writeAndControl(NofSymb, 4);
{Завершение программы}
            close(SecondFile);
            writeln('Конец работы программы ');
            readln;
End.

В этой программе в результирующий файл окончательно будут записаны: общее количество перекодированных символов, таблица смещений кодов символов и перекодированные символы. Файл используется как файл без типа с размером блока в 1 байт, который устанавливается процедурой rewrite.

Задачи для самостоятельного решения

  1. Текстовый файл преобразовать в файл целого типа следующим образом: гласные буквы заменить на число 0, согласные буквы на число 1, а все остальные символы - на число 2. Подсчитать количество согласных букв. Если в текстовом файле согласных не обнаружено, выдайте на экран соответствующее сообщение. В программе используйте способы обработки нетипизированного файла и подпрограммы.


  2. Текстовый файл преобразовать в файл символьного типа, игнорируя символы, не являющиеся буквой. Если в текстовом файле букв не обнаружено, выдайте на экран соответствующее сообщение. В программе используйте способы обработки нетипизированного файла и подпрограммы.


  3. Текстовый файл преобразовать в файл строкового типа, игнорируя пустые строки. В каждой строке файла, являющимся результатом выполнения программы, должно быть одно предложение. Если в текстовом файле предложений не обнаружено, выдайте на экран соответствующее сообщение. В программе используйте способы обработки нетипизированного файла и подпрограммы.


  4. Текстовый файл, содержащий числовую информацию преобразовать в файл целого типа. Каждый элемент типизированного файла должен содержать цифру. В программе используйте способы обработки нетипизированного файла и подпрограммы.


  5. Текстовый файл, содержащий числовую и текстовую информацию преобразовать в файл целого и символьного типа. Каждый элемент типизированного файла должен содержать цифру или символ. Если в текстовом файле числовой или текстовой информации не обнаружено, выдайте на экран соответствующее сообщение. В программе используйте способы обработки нетипизированного файла и подпрограммы.


  6. Из текстового файла выделить числовую информацию и поместить ее в файл целого типа. Каждый элемент типизированного файла должен содержать цифру. Если в текстовом файле числовой информации не обнаружено, выдайте на экран соответствующее сообщение. В программе используйте способы обработки нетипизированного файла и подпрограммы.


  7. Создайте текстовый файл, содержащий фамилии, имена и отчества сотрудников некоторого предприятия. Преобразуйте этот текстовый файл в файл комбинированного типа. Каждый элемент типизированного файла должен содержать фамилию, имя и отчество одного сотрудника. В программе используйте способы обработки нетипизированного файла и подпрограммы.


  8. Создайте текстовый файл, каждая строка которого содержала бы фамилию, имя, отчество сотрудника некоторого предприятия и его оклад. Преобразуйте этот текстовый файл в файл комбинированного типа. Найдите в полученном файле сотрудника с самым высоким окладом. В программе используйте способы обработки нетипизированного файла и подпрограммы.


  9. Создайте текстовый файл, каждая строка которого содержала бы наименование товара некоторого предприятия и его цену. Преобразуйте этот текстовый файл в файл комбинированного типа. Найдите в полученном файле самый дорогой и самый дешевый товар. В программе используйте способы обработки нетипизированного файла и подпрограммы.


  10. Познакомившись с содержанием предыдущих задач придумайте свою интересную задачу и решите ее.
Вернуться назад
2003—2012 © Группа «Vimedia»
Проект «Pascaler» — лучший на ХI Всероссийской конференции молодых исследователей с международным участием «Шаг в будущее», Россия, Москва, 12 – 16 апреля 2004г.