Дисциплина «Программирование» Специальность 08080165 «Прикладная информатика (в экономике)» Институт информатики, инноваций и бизнес-систем Кафедра информатики, инженерной и компьютерной графики Люлько Виктор Иванович, старший преподаватель Тема 8. Типы данных, определяемые пользователем. Записи. Файлы и работа с ними. Динамические структуры данных. Списки. Способы конструирования программ. Основы доказательства правильности работы программ. Требования к знаниям, умениям и навыкам После изучения темы студент должен иметь представление о типах данных, определяемых пользователем, записях уметь использовать файлы для хранения и использования данных иметь понятие о динамических структурах данных, в том числе о списках уметь применять способы конструирования программ основные приемы доказательства их работы 2 Содержание 1. Ключевые понятия 2. Учебный материал 3 Ключевые понятия Типы данных, определяемые пользователем Записи Файлы Запись данных в файл и чтение данных из файла Динамические структуры данных Списки Правильность работы программы 4 Учебный материал Основные задачи лекции Знакомство с типами данных, определяемых пользователем, и их использование Знакомство с записями и возможностями их использования Знакомство с возможностями и особенностями использования процедур и функций для работы с файлами Знакомство с динамическими структурами данных Знакомство с понятием о списках, их основными видами и способами реализации Знакомство со способами конструирования программ и их использованием Знакомство с основными приемами доказательства правильности работы программ 5 Учебный материал Типы данных, определяемые пользователем и их использование (начало) При определении собственного типа данных пользователь описывает его характеристики (внутреннее представление и допустимые действия) и присваивает ему имя, которое затем используется в программе так же, как имена стандартных типов. В общем случае при определении собственного типа данных следует в разделе описания (объявления) типов (type)описать соответствующий пользовательский тип и затем в разделе описаний переменных (var) описать с этим типом используемые идентификаторы переменных. 6 Учебный материал Типы данных, определяемые пользователем и их использование (продолжение) Пример описания пользовательских типов и описания переменных с использованием этих типов: type int=integer; hour=0..23; Week=(Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday); ... var i,k: int; h: hour; W: Week; 7 Учебный материал Типы данных, определяемые пользователем и их использование (окончание) Тип переменных может быть задан и непосредственно при их описании, например: var hour: 0..23; Week: (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday); 8 Учебный материал Записи и их использование (начало) Запись является структурным типом данных, обозначаемым идентификатором record и содержащим элементы (поля) разного типа данных, расположенных в записи в порядке их перечисления при описании записи. Пример описания переменной типа запись: var spisok: record n,y: integer; gr: string[15]; fam: string[40]; end; 9 Учебный материал Записи и их использование (окончание) К каждому из элементов записи можно получить доступ, используя составное имя, например: spisok.y:=2008; gf:=spisok.gr+' '+spisok.fam; readln(spisok.fam,spisok.y); 10 Учебный материал Файлы (начало) Файл – это именованная последовательность данных, расположенная во внешней памяти компьютера (на диске, флэшке и т.д.) или связанная с внешним устройством (обычно клавиатурой или видеомонитором). Для поиска файла программным путем необходимо знать путь к файлу (перечень имен вложенных папок, которые нужно последовательно открыть для поиска файла, обычно начинающийся с имени диска и заканчивающийся именем файла, например: D:\ПЭ-08-01\Иванов\file1.txt). При поиске файла в текущей папке достаточно указать только имя файла. 11 Учебный материал Файлы (продолжение) Различают три вида файлов: – текстовые файлы (определяются типом данных Text или TextFile) и используются для хранения текстовой информации (обычно в виде строк разной длины); – типизированные файлы (определяются типом данных File of Тип) и используются для хранения однородной информации, например, только числовых данных определенного типа; – нетипизированные файлы (определяются типом данных File) – используются для быстрого доступа к файлу с любыми данными и пересылки данных с высокой скоростью без потерь времени на преобразования данных. 12 Учебный материал Файлы (продолжение) Для работы с файлами необходимо в разделе описаний (объявлений) программы определить файловую переменную (логический файл) с указанием файлового типа данных, например: var f1: text; //Описание файловой переменной f1 //для текстового файла //Описание файловой переменной для типизированного файла f2: file of Integer; //f2 - с целочисленным типом данных f3: file of Real; //f3 - с вещественным типом данных f4: file of String; //f4 - со строковым типом данных f5: file; //Описание файловой переменной f5 // для нетипизированного файла 13 Учебный материал Файлы (продолжение) В каждый момент времени для программы, работающей с файлом, доступен только один элемент файла. На этот элемент файла ссылается указатель текущей позиции файла, который определяет место в файле, откуда происходит чтение или куда происходит запись данных. Чтение данных из файла и запись данных в файл вызывают автоматическое перемещение указателя. При чтении данных из файла указатель может достичь конца файла, если чтение данных не завершится из-за выполнения какого-либо условия. 14 Учебный материал Файлы (продолжение) По способу доступа к элементам файла различаются файлы последовательного доступа и прямого доступа. К элементам файлов последовательного доступа доступ выполняется в той же последовательности, с которой эти элементы записывались в файл. Поиск элемента файла в этом случае выполняется последовательным перемещением указателя до искомого элемента. Для файлов последовательного доступа запрещено совмещение чтения и записи данных. К файлам последовательного доступа относятся текстовые файлы. 15 Учебный материал Файлы (окончание) К элементам файлов прямого доступа доступ выполняется по адресу (номеру) элемента, что существенно ускоряет процесс поиска элемента файла. Для файлов прямого доступа разрешено совмещение чтения и записи данных. К файлам прямого доступа относятся типизированные и нетипизированные файлы. 16 Учебный материал Процедуры и функции для работы с файлами (начало) Процедура Append(f) открывает существующий текстовый файл, соответствующий файловой переменной (логическому файлу) f, для дозаписи, и ставит указатель в конец файла. Если файл был ранее открыт с помощью процедуры Reset или Rewrite, то выполнение процедуры Append закрывает и повторно открывает файл уже для дозаписи. 17 Учебный материал Процедуры и функции для работы с файлами (продолжение) Процедура AssignFile(f,file) ставит в соответствие физическому файлу (возможно, с путем доступа к нему) file файловую переменную (логический файл) f и поэтому эта процедура должна предшествовать другим процедурам и функциям для работы с файлами. Имя физического файла file должно быть переменной, константой или выражением строкового типа. Дальнейшие операции с файловой переменной f будут фактически выполняться с физическим файлом file. 18 Учебный материал Процедуры и функции для работы с файлами (продолжение) Процедуру AssignFile нельзя использовать для открытого файла. Перед повторным использованием файловой переменной для другого физического файла необходимо закрыть открытый файл процедурой Close. После выполнения процедуры AssignFile связь файловой переменной с физическим файлом сохраняется до следующего выполнения этой процедуры с той же файловой переменной, что дает возможность нового открытия файла процедурой Reset без повторного использования процедуры AssignFile даже после закрытия файла. 19 Учебный материал Процедуры и функции для работы с файлами (продолжение) Процедура CloseFile(f) закрывает открытый файл, соответствующий файловой переменной (логическому файлу) f. Файл должен быть закрыт после завершения его обработки во избежание потери данных. При закрытии физический файл обновляется и автоматически завершается символом конца файла. 20 Учебный материал Процедуры и функции для работы с файлами (продолжение) Функция Eof(f) для файла, соответствующего файловой переменной f, проверяет достижение конца файла (End Of File). Функция возвращает значение True при достижении конца файла, в остальных случаях – значение False. Функция позволяет задать условие выполнения цикла для считывания данных из файла до достижения конца файла. При использовании этой функции без параметров проверяется не достижение конца файла на диске, а ввод символа конца файла с клавиатуры (например, сочетанием клавиш Ctrl+Z). 21 Учебный материал Процедуры и функции для работы с файлами (продолжение) Функция FileExists(file) возвращает True, если физический файл file существует (возможно, с путем доступа к нему). 22 Учебный материал Процедуры и функции для работы с файлами (продолжение) Функция FileSize(f) возвращает количество элементов файла, соответствующего файловой переменной f. Для пустого файла возвращает 0. Для перемещения указателя в конец файла можно выполнить Seek(f,FileSize(f)). Функция не используется для текстовых файлов. 23 Учебный материал Процедуры и функции для работы с файлами (продолжение) Процедура Read(f,x1,x2,…xN) считывает из текстового или типизированного файла, связанного с файловой переменной f (логическим файлом), начиная с позиции указателя, значения в переменные в списке вывода x1,x2,...xN. Для текстового файла это могут быть значения разных типов (integer, real, boolean, char, string и т.д.), для типизированного файла тип переменных должен совпадать с типом данных файла. Для текстового файла использование только процедуры Read дает возможность считывания лишь из текущей строки этого файла. Для считывания следующих друг за другом в текстовом файле строк текста или для перехода к следующей строке следует использовать процедуру Readln. 24 Учебный материал Процедуры и функции для работы с файлами (продолжение) Процедура Readln(f,x1,x2,...xN) считывает (только из текстового файла) то же что и процедура Read, но затем пропускает оставшуюся часть текущей строки и выполняет переход к началу новой строки. Процедура Readln(f) без списка вывода выполняет переход к началу новой строки. 25 Учебный материал Процедуры и функции для работы с файлами (продолжение) Процедура Reset(f) открывает существующий файл, соответствующий файловой переменной (логическому файлу) f и ставит указатель на начало первого элемента файла или, для уже открытого файла, только ставит указатель на начало первого элемента файла. Текстовый файл открывается только для считывания. 26 Учебный материал Процедуры и функции для работы с файлами (продолжение) Процедура Rewrite(f) создает и открывает для записи данных физический файл, соответствующий файловой переменной (логическому файлу) f. После успешного выполнения этой процедуры физический файл готов к записи в него данных. ВНИМАНИЕ! При выполнении процедуры Rewrite, если физический файл с именем, ранее заданным в процедуре Assign, уже существует, то он заменяется пустым файлом с тем же именем, в связи с чем для предотвращения потери информации может потребоваться предварительное копирование файла. 27 Учебный материал Процедуры и функции для работы с файлами (продолжение) Процедура Seek(f,N) для файла, соответствующего файловой переменной f, перемещает указатель файла к элементу файла с номером N без чтения или записи (номер начального элемента файла равен 0). Для перемещения указателя в конец файла можно выполнить Seek(f,FileSize(f)). Процедура не используется для текстовых файлов. 28 Учебный материал Процедуры и функции для работы с файлами (продолжение) Процедура Write(f,x1,x2,...xN) записывает в текстовый или типизированный файл, связанный с файловой переменной f (логическим файлом), начиная с позиции указателя, значения выражений из списка вывода x1,x2,...xN. Для текстового файла это могут быть значения разных типов (integer, real, boolean, char, string и т.д.), для типизированного файла тип значений должен совпадать с типом данных файла. 29 Учебный материал Процедуры и функции для работы с файлами (окончание) Процедура Writeln(f,x1,x2,...xN) записывает (только в текстовый файл) то же что и процедура Write, но затем записывает еще и признак конца строки. Процедура Writeln(f) без списка вывода записывает только признак конца строки. 30 Учебный материал Запись данных в файл и чтение данных из файла (начало) Пример реализации записи в текущую папку файла File01.txt с текстом Text in file: var f: text; //Описание файловой переменной // (логического файла) f begin assign(f,'File01.txt'); //Соответствие f //и физического файла File01.txt rewrite(f); //Создание и открытие файла для записи writeln(f,'Text in file'); //Запись в файл //текста Text in file close(f); //Закрытие файла readln; end. 31 Учебный материал Запись данных в файл и чтение данных из файла (продолжение) Пример реализации считывания текста из файла File01.txt, находящегося в текущей папке, и выводящей этот текст на экран: var f: text; //Описание файловой переменной (логического файла) f s: string; //Описание строки s begin assign(f,'File01.txt'); //Соответствие f и физического файла //File01.txt reset(f); //Открытие файла readln(f,s); //Считывание текста из файла в строку s close(f); //Закрытие файла writeln('Text from file: ',s); //Вывод на экран текста, //записанного в файл readln; end. 32 Учебный материал Запись данных в файл и чтение данных из файла (продолжение) При использовании данных типа "запись" и типизированных файлов типа "запись" следует в разделе описания (объявления) типов (type)описать соответствующий пользовательский тип и в разделе описаний переменных (var) описать с этим типом используемые идентификаторы записей и идентификаторы файловых переменных. Раздел описания типов находится в той же области программы, в которой находятся разделы описаний переменных, констант и меток. 33 Учебный материал Запись данных в файл и чтение данных из файла (окончание) Пример описания пользовательского типа zap и описания записи и файловой переменной типа "запись": type zap=record n,y: integer; gr: string[15]; fam: string[40]; end; var spisok: zap; f: file of zap; 34 Учебный материал Запись данных в файл и чтение данных из файла (продолжение) Для вывода в файл или ввода (считывания) из файла всей записи можно использовать идентификатор записи без указания полей, например: write(f,spisok); read(f,spisok); 35 Учебный материал Понятие о динамических структурах данных Если до работы с данными нельзя определить объем памяти для их хранения, то память следует выделять блоками, связанными друг с другом адресными указателями, во время выполнения программы. Указанный способ организации данных называется динамической структурой данных, так как данные при этом размещаются в динамической памяти, объем которой изменяется во время выполнения программы. К часто используемым динамическим структурам данных относятся списки, стеки, очереди, деревья, различающиеся способами связи элементов структур и допустимыми операциями. 36 Учебный материал Понятие о списках, их основных видах и способах реализации Списком называется структура данных, каждый элемент которой посредством указателя связан со следующим и, возможно, с предыдущим элементом списка. В первом случае список называется односвязным (однонаправленным), во втором случае – двунаправленным (двусвязным). Если последний элемент списка связан с первым, то список является кольцевым. Возможной реализацией списка может быть последовательность записей, каждая из которых содержит данные и ссылки на другие записи списка. 37 Учебный материал Способы конструирования программ и их использование (начало) Наиболее известным способом конструирования программ является нисходящее конструирование (или конструирование сверху вниз), суть которого состоит в разбиении исходной задачи на меньшие легко решаемые подзадачи (модули), которые в свою очередь могут быть разбиты на еще меньшие подзадачи и т.д., после чего исходная сложная задача превращается в набор более простых задач, решение которых и является решением исходной задачи. В результате использования нисходящего конструирования получается иерархическая система модулей. 38 Учебный материал Способы конструирования программ и их использование (окончание) При восходящем конструировании решение задачи начинается с определения подзадач (модулей) и возможностей их использования для решения более сложной задачи, в результате чего получение какой-либо иерархической структуры не является обязательным. 39 Учебный материал Основные приемы доказательства правильности работы программ Основные приемы доказательства правильности работы программ сводятся к тестированию, позволяющему вести поиск ошибок в программах. Тестирование предполагает проверку правильности работы программы с использованием таких наборов исходных данных, для которых известны результаты работы программы. Тестирование должно охватывать все возможные условные переходы в программе, а также включать использование исходных данных, приводящих к исключительным ситуациям в работе программы. 40 Использование материалов презентации Использование данной презентации, может осуществляться только при условии соблюдения требований законов РФ об авторском праве и интеллектуальной собственности, а также с учетом требований настоящего Заявления. Презентация является собственностью автора. Разрешается распечатывать копию любой части презентации для личного некоммерческого использования, однако не допускается распечатывать какую-либо часть презентации с любой иной целью или по каким-либо причинам вносить изменения в любую часть презентации. Использование любой части презентации в другом произведении, как в печатной, электронной, так и иной форме, а также использование любой части презентации в другой презентации посредством ссылки или иным образом допускается только после получения письменного согласия автора. 41