Главная страница
Навигация по странице:

  • Оборудование

  • Приступая к решению задач этого раздела, следует вспомнить, что

  • ПРАКТИЧЕСКАЯ РАБОТА 13 ТЕМА: ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕ ТИПИЗИРОВАННЫХ И НЕТИПИЗИРОВАННЫХ ФАЙЛОВ Цель работы

  • 2. Нетипизированные файлы

  • Стандартная процедура REWRITE ( ).

  • Работа с файлам записей

  • Прямой доступ к записям файла

  • ПРАКТИЧЕСКАЯ РАБОТА 14 ТЕМА: ПРОГРАММИРОВАНИЕ МОДУЛЯ Цель работы

  • Внедрение внешних подпрограмм

  • Пример1.

  • Function

  • Структура модуля: Unit

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


    Скачать 0.68 Mb.
    НазваниеСборник методических указаний по выполнению практических работ по учебной дисциплине основы алгоритмизации и программирования структурное программирование
    Анкорпрограммирование
    Дата01.10.2021
    Размер0.68 Mb.
    Формат файлаpdf
    Имя файлаm_prog.pdf
    ТипСборник
    #239861
    страница5 из 6
    1   2   3   4   5   6
    ТЕМА: ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ
    ТЕКСТОВЫХ ФАЙЛОВ
    Цель работы: научиться объявлять текстовые файлы в программе, научиться создавать и обрабатывать текстовые файлы с помощью языка программирования Паскаль.
    Оборудование: ПК, ИСР Pascal ABC
    ТЕОРЕТИЧЕСКИЕ ДАННЫЕ
    В Паскале понятие файла употребляется в двух смыслах:
    1.
    как поименованная информация на внешнем носителе (внешний файл);
    2.
    как переменная файлового типа (внутренний файл)
    Файловый тип переменной — это структурированный тип, представляющий собой совокупность однотипных элементов
    Файл можно представить как последовательную цепочку элементов, пронумерованных от 0, заканчивающуюся специальным кодом, который называется маркер конца
    Эл. 0
    Эл. 1
    ….
    Эл. n
    Маркер конца
    Структура описания файловой переменной
    Var <имя переменной>: File of <тип элемента>
    Например:
    Var
    F1: file of Integer;
    F2: file of Real;
    F3: file of Char;
    Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре ASSIGN:
    ASSIGN (<ф.п.>, <имя файла или л.у.>);
    Здесь <ф.п.> - файловая переменная (правильный идентификатор, объявленный в программе как переменная файлового типа);
    <имя файла> - текстовое выражение, содержащее имя файла
    Инициализация файла
    Инициировать файл означает указать для этого файла направление передачи данных. В Турбо
    Паскале можно открыть файл для чтения, для записи информации, а также для чтения и записи одновременно.
    Процедура APPEND
    инициирует запись в ранее существовавший текстовый файл для его расширения, при этом указатель файла устанавливается в его конец. Процедура APPEND применима только к текстовым файлам, т.е. их файловая переменная должна иметь тип TEXT . Процедурой APPEND нельзя инициировать запись в типизированный или нетипизированный файл. Если текстовый файл ранее уже был открыт с помощью RESET или

    56
    REWRITE, использование процедуры APPEND приведет к закрытию этого файла и открытию его вновь, но уже для добавления записей.
    Процедура CLOSE
    Закрывает файл, однако связь файловой переменной с именем файла, установленная ранее процедурой ASSIGN, сохраняется. Формат обращения:
    CLOSE (<ф.п.>)
    При создании нового или расширении старого файла процедура обеспечивает сохранение в файле всех новых записей и регистрацию файла в каталоге. Функции процедуры CLOSE выполняются автоматически по отношению ко всем открытым файлам при нормальном завершении программы. Поскольку связь файла с файловой переменной сохраняется, файл можно повторно открыть без дополнительного использования процедуры ASSIGN.
    Типы файлов
    В Паскале различают текстовые, типизированные и нетипизированные файлы
    Текстовые файлы предназначены для хранения текстовой информации. Для доступа к записям применяются процедуры READ, READLN, WRITE, WRITELN.
    В этом случае осуществляется обращение к дисковому файлу или логическому устройству, связанному с переменной процедурой ASSIGN.
    Приступая к решению задач этого раздела, следует вспомнить, что:
    1. в программе, которая выводит результаты в файл или читает исходные данные из файла, должна быть объявлена файловая переменная типа text;
    2. для доступа к конкретному файлу файловую переменную нужно связать с этим файлом
    (делается это при помощи инструкции assign);
    3. для того, чтобы файл был доступен, его надо открыть (для ЧТЕНИЯ С ПОМОЩЬЮ
    ИНСТРУКЦИИ reset, ДЛЯ ЗАПИСИ — rewrite, для добавления — append);
    4. при работе с файлами возможны ошибки, например, из-за того, что программа пытается открыть файл, которого нет, поэтому после каждой инструкции, которая может привести к возникновению ошибки, желательно, используя функцию iOResuit, проверять код завершения операции с файлом: чтобы программа могла контролировать результат выполнения операции с файлом, в ее текст надо поместить директиву
    5. запись в файл выполняют инструкции write и writein, чтение — read и readin, причем в качестве первого параметра этих инструкций следует указывать файловую переменную;
    6. по завершении работы с файлом его нужно обязательно закрыть инструкцией close; файл, созданный программой, в которой тип файловой переменной объявлен как text, можно просмотреть при помощи редактора текста.
    Пример 1. Написать программу, которая на сменном диске компьютера (А:) создает файл numbers.txt и записывает в него 5 введенных пользователем целых чисел.
    { Создает на диске А: файл и записывает в него5 целых чисел, введенных пользователем } var f: text; { текстовый файл } n: integer; { число } i: integer; { счетчик чисел } begin writeln('Создание файла'); writeln('Введите пять целых чисел.1); writeln('После ввода каждого числа нажимайте ');

    57
    Assign(f,'а:\numbers.txt');
    Rewrite(f); { открыть в режиме перезаписи } for i:=l to 5 do begin write('->'); readln(n); writeln(f,n); end; close(f); { закрыть файл } writeln('Введенные числа записаны в файл ','а:\numbers.txt'); readln; end.
    Пример 2. Написать программу, которая выводит на экран содержимое файла a:\numbers.txt.
    { Выводит на экран содержимое файла а:\numbers.txt } var f: text; { текстовый файл } n: integer; { число } begin writeln('Содержимое файла a:\nunibers.txt1); writeln ('-----------------------------') ;
    Assign(f,'a:\numbers.txt'); Reset(f); { открыть файл для чтения } While not EOF(f) do { пока не достигнут конец файла } begin readln(f,n); { прочитать число из файла } writeln(n); { вывести прочитанное число на экран } end;
    Close(f); writeln ('-readln; закрыть файл end.
    Пример 3. Вычисляет среднее арифметическое чисел, находящихся в файле a:\numbers.txt var f: text; { текстовый файл } n: integer; { число, прочитанное из файла } kol: integer; { кол-во прочитанных чисел } sum: integer; { сумма прочитанных чисел ) sa: real; { среднее арифметическое } begin writeln('Вычисление среднего арифметического чисел, writeln('находящихся в файле a:\numbers.txt'); writeln('Чтение из файла. Подождите.'); sum:=0; kol:-0;
    Assign(f,'a:\numbers.txt'); Reset (f); { открыть файл для чтения } While not EOF(f) do { пока не достигнут конец begin readln(f,n); { прочитать число из файла } sum:=sum+n; kol:=kol+l; end;
    Close(f); { закрыть файл } sa:=sum/kol; writeln('Прочитано чисел: ',kol); writeln('Сумма чисел: ',sum) ; writeln('Среднее арифметическое:
    ',sa:9:2); readln; end.
    ЗАДАНИЕ
    1.
    Создать файл, состоящий из вещественных чисел. Определить количество нулевых значений в этом файле
    2.
    Дан текстовый файл, содержащий произвольный текст. Определить чего в нем больше: русских букв или цифр.
    3.
    Дан файл, содержащий текст на русском языке. Определить, входит ли заданное слово в указанный текст.

    58
    КОНТРОЛЬНЫЕ ВОПРОСЫ
    1.
    Что такое файловая переменная?
    2.
    Какова структура файла?
    3.
    Как описывается файловая переменная в программе?
    4.
    Что такое типизированный файл?
    5.
    Что такое нетипизированный файл?
    6.
    Что такое текстовый файл?
    7.
    Как объявляется текстовый файл в программе?
    8.
    Назовите алгоритм работы с текстовым файлом

    59
    ПРАКТИЧЕСКАЯ РАБОТА 13
    ТЕМА: ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕ
    ТИПИЗИРОВАННЫХ И НЕТИПИЗИРОВАННЫХ ФАЙЛОВ
    Цель работы: научиться описывать в программе типизированные файлы, обрабатывать типизированные и нетипизированные файлы.
    Оборудование: ПК, ИСР Pascal ABC
    ТЕОРЕТИЧЕСКИЕ ДАННЫЕ
    Типизированные файлы
    Длина любого компонента типизированного файла строго постоянна, что дает возможность организовать прямой доступ к каждому из них (т.е. доступ к компоненту по его порядковому номеру).
    Перед первым обращением к процедурам ввода-вывода указатель файла стоит в его начале и указывает на первый компонент с номером 0. После каждого чтения или записи указатель сдвигается к следующему компоненту файла. Переменные в списках ввода-вывода должны иметь тот же тип, что и компоненты файла. Если этих переменных в списке несколько, указатель будет смещаться после каждой операции обмена данными между переменными и дисковым файлом.
    Процедура READ
    Обеспечивает чтение очередных компонентов типизированного файла.
    Формат обращения: READ (<ф.п.>,<сп.ввода>)
    Здесь - список ввода, содержащий одну или более переменных такого же типа, что и компоненты файла.
    Файловая переменная <ф.п.> должна быть объявлена предложением FILE OF... и связана с именем файла процедурой ASSIGN. Файл необходимо открыть процедурой RESET. Если файл исчерпан, обращение к READ вызовет ошибку ввода-вывода.
    Процедура WRITE
    Используется для записи данных в типизированный файл.
    Формат обращения: WRITE (<ф.п.>,<сп.вывода>)
    Здесь <сп.вывода> - список вывода, содержащий одно или более выражений того же типа, что и компоненты файла.
    Процедура SEEK
    Смещает указатель файла к требуемому компоненту.
    Формат обращения: SEEK (<ф.п.>,)
    Здесь - выражение типа LONGINT, указывающее номер компонента файла.
    Первый компонент файла имеет номер 0. Процедуру нельзя применять к текстовым файлам.
    Функция FILEPOS
    Возвращает значение типа LONGINT, содержащее порядковый номер компонента файла, который будет обрабатываться следующей операцией ввода-вывода.
    Формат обращения: FILEPOS (<ф.п.>)
    Функцию нельзя использовать для текстовых файлов. Первый компонент файла имеет порядковый номер 0.

    60
    2. Нетипизированные файлы
    Нетипизированные файлы объявляются как файловые переменные типа FILE и отличаются тем, что для них не указан тип компонентов. Отсутствие типа делает эти файлы, с одной стороны, совместимыми с любыми другими файлами, а с другой - позволяет организовать высокоскоростной обмен данными между диском и памятью.
    Чтение файла осуществляется с помощью стандартной процедуры RESET:
    RESET (<ф.п.>);
    Здесь <ф.п.> - файловая переменная, связанная ранее процедурой ASSIGN с уже существующим файлом
    При выполнении этой процедуры дисковый файл подготавливается к чтению информации. В результате специальная переменная-указатель, связанная с этим файлом, будет указывать на начало файла, т.е. на компонент с порядковым номером 0.
    Стандартная процедура REWRITE (<ф.п.>).
    инициирует запись информации в файл, связанный ранее с файловой переменной <ф.п.>.
    Процедурой REWRITE нельзя инициировать запись информации в ранее существовавший дисковый файл: при выполнении этой процедуры старый файл уничтожается и никаких сообщений об этом в программу не передается. Новый файл подготавливается к приему информации и его указатель принимает значение 0.
    При инициации нетипизированного файла процедурами RESET или REWRITE можно указать длину записи нетипизированного файла в байтах.
    Например, так: var f: file; begin assign(f, 'myfile.dat') reset(f,512); end.
    Длина записи нетипизированного файла указывается вторым параметром при обращении к процедурам RESET или REWRITE, в качестве которого может использоваться выражение типа WORD. Если длина записи не указана, она принимается равной 128 байтам.
    При работе с нетипизированными файлами могут применяться все процедуры и функции, доступные типизированным файлам, за исключением READ и WRITE
    Работа с файлам записей
    Пример1. Сформировать файл Fm.dat, содержащий экзаменационную ведомость одной студенческой группы. Записи файла состоят из следующих полей: фамилия, имя, отчество, номер зачетной книжки, оценка.
    Program examen;
    Uses crt;
    Type stud=record fio:string[30];
    Nz:string[6]; mark:integer end;
    Var Fstud:file of stud;
    S:stud;
    N,I:byte;
    Begin clrscr;

    61
    Assign(Fstud, 'Fm.dat');
    Write('kolvo studentov');
    Readln(n);
    For I:=1 To n do
    Begin
    Write('vvedite fio:'); readln(s.fio);
    Write('vvedite nomer zachetki:'); readln(s.Nz);
    Write('vvedite ocenka:'); readln(s.mark);
    Write(Fstud,s) end;
    Writeln('Formirovanie zaversheno');
    Close(Fstud)
    End.
    Прямой доступ к записям файла
    В стандарте языка Паскаль допустим только последовательный доступ к элементам файла.
    Одной из дополнительных возможностей, реализованный в Паскале, является прямой доступ к записям файла
    Задав номер элемента файла, можно непосредственно установить указатель на него. После этого можно читать или перезаписывать данный элемент. Установка указателя на нужный элемент файла производится процедурой:
    Процедура SEEK
    Смещает указатель файла к требуемому компоненту. Формат обращения:
    SEEK (<ф.п.>,)
    Здесь - выражение типа LONGINT, указывающее номер компонента файла.
    Первый компонент файла имеет номер 0. Процедуру нельзя применять к текстовым файлам.
    ЗАДАНИЕ
    1.
    Записать в файл последовательного доступа N действительных чисел. Вычислить произведение компонентов файла.
    2.
    В типизированном файле, компонентами которого являются целые числа, подсчитать количество отрицательных чисел.
    3.
    В типизированном файле, компонентами которого являются вещественные числа, вычислить произведение положительных чисел.

    62
    ПРАКТИЧЕСКАЯ РАБОТА 14
    ТЕМА: ПРОГРАММИРОВАНИЕ МОДУЛЯ
    Цель работы: научиться применять в программах стандартные библиотеки подпрограмм, создавать собственные библиотеки подпрограмм.
    Оборудование: ПК, ИСР Pascal ABC
    ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
    Стандартный Паскаль не располагает средствами разработки и поддержки библиотек программиста, которые компилируются отдельно и в дальнейшем могут быть использованы не только самим разработчиком. Если программист имеет достаточно большие наработки и если те или иные подпрограммы могут быть использованы при написании новых приложений, приходится эти подпрограммы целиком включать в новый текст.
    В Паскале это ограничение преодолевается, во-первых, внедрением внешних подпрограмм, а, во- вторых, созданием и использованием модулей.
    Внедрение внешних подпрограмм
    В этом случае исходный текст каждой процедуры или функции хранится в отдельном файле и при необходимости с помощью специальной директивы компилятора включается в текст создаваемой программы.
    Пример1. Дано число n, требуется найти сумму первой и последней цифр этого числа.
    Создаем функцию:
    Function Digits(N: LongInt): Byte;
    Var Kol: Byte;
    Begin
    Kol:=0;
    While N<>0 Do
    Begin
    Kol:=Kol + 1;
    N:=N Div 10
    End;
    Digits:=Kol
    End;
    Сохраним этот текст в файле с расширением .inc (расширение внешних подпрограмм), например digits.inc.
    Опишем также функцию возведения числа в степень a n
    :
    Function Power (A,N: LongInt): LongInt; {файл power.inc}
    Var I, St: LongInt;
    Begin
    St:=1;
    For I:=1 To N Do
    St:=St*A;

    63
    Power:=St
    End;
    Основная программа, решающая поставленную задачу с использованием описанных подпрограмм:
    Program Example1;
    Var N, S: Integer;
    {$I digits.inc} {Подключение внешней функции из файла digits.inc, вычисляющей количество цифр в записи числа}
    {$I power.inc} {Подключение внешней функции из файла power.inc, вычисляющей результат возведения числа а в степень n }
    Begin
    Write (‘Введите целое число: ’);
    Readln(n); {Для определения последней цифры числа N берется остаток от деления этого числа на 10, а для определения первой цифры число N делится на число 10, возведенное в степень, на единицу меньшую, чем количество цифр в записи числа N}
    S:= N Mod 10 + N Div Power(10, Digits(N)-1);
    Writeln(‘Искомая сумма=’, S)
    End.
    Директива компилятора {$I <имя файла>} позволяет в данное место текста программы вставить содержимое файла с указанным именем.
    Файлы с расширением .inc можно накапливать на жестком диске, формируя таким образом личную библиотеку подпрограмм.
    Создание и использование модулей
    Модуль – это набор ресурсов (функций, процедур, констант, переменных, типов и т.д.), разрабатываемых и хранимых независимо от использующих программ. В отличие от внешних подпрограмм, модуль может содержать достаточно большой набор процедур и функций, а также других ресурсов для разработки программ.
    Стандартные модули:

    System

    Crt

    Graph и др.
    Например, стандартный модуль CRT в паскале поддерживает 16 цветов, нумерация которых начинается с 0 (от 0 до 15 включительно). Также можно просто прописывать названия цветов не используя цифры.
    Для того чтобы использовать модуль CRT его нужно подключить с помощью следующей строчки: uses crt;
    Для того чтобы закрасить фон нужно использовать такую команду: textbackground (2); //Фон залит зелѐным цветом textbackground следует применять вместе с процедурой очистки экрана, которая описана ниже.
    Для очистки экрана (1) и установки позиции курсора (2) используются соответственно следующие команды: clrscr; {(1) – очистка курсора} gotoxy (9,6); {(2) –Курсор установлен в точку (9;6)}
    Цвет текста определяет процедура: textcolor (13);
    Для временной задуржки существует процедура delay delay (1500);
    Запускать программу в Pascal с использованием модуля CRT нужно при помощи клавиш Shift+F9.

    64
    Пример 2. Программа на Паскаль с использованием модуля CRT: uses {Подключение модуля} crt; begin textbackground (2); {Перекраска фона в зелѐный} clrscr; {Очистка экрана и применение цвета фона} textcolor (13); {Текст будет розовым цветом} gotoxy (9,6); {Курсор будет перемещѐн в точку (9;6)} write ('Программирование'); {Вывод текста} delay (1500); {Задержка} textbackground (3); {Фон будет салатного цвета} clrscr; {Очистка экрана } gotoxy (20,20); {Курсор перемещѐн в точку (20;20)} textcolor (red); {Цвет текста – красный} write ('Алгоритмизация'); {Вывод текста} readln; end.
    Структура модуля:
    Unit <имя модуля>; {Заголовок модуля}
    1   2   3   4   5   6


    написать администратору сайта