Скачать презентацию Лекция 28 Тема 6 АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ Скачать презентацию Лекция 28 Тема 6 АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ

Лекция 28.pptx

  • Количество слайдов: 56

Лекция 28 Тема № 6 АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ Строки. Основные процедуры и функции работы Лекция 28 Тема № 6 АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ Строки. Основные процедуры и функции работы со строками. Файлы.

Строки Cтрока трактуется как одномерный массив символов, количество символов в котором может меняться в Строки Cтрока трактуется как одномерный массив символов, количество символов в котором может меняться в работающей программе: для коротких строк меняется от 0 до n (255). Со строками можно работать как с индексированными массивами символов. Например : s[i] – это символ, расположенный в строке в позиции i (индексы отсчитываются от 1, то есть индекс 1 соответствует 1 -му символу).

Символьные строки ! var s: string; длина строки s[3] В Delphi это ограничение снято! Символьные строки ! var s: string; длина строки s[3] В Delphi это ограничение снято! s[4] 255 1 6 П р и в е т ! ¤ ¤ ¤ … ¤ ¤ ¤ рабочая часть s[1] s[2] ord(s[0]) возвращает длину строки 20 1 var s: string[20]; Длина строки: n : = length ( s ); var n: integer;

Пример обращения к элементам строки var ss. S: String[250]; begin ss. S : ='Строка Пример обращения к элементам строки var ss. S: String[250]; begin ss. S : ='Строка символов'; ss. S[6] : = 'и'; // Символы в строке нумеруются, начиная с 1 Writeln (ss. S); // Выводится “Строки символов” end;

К строкам можно применять операцию “+” -сцепление, например: st. S : = 'а' + К строкам можно применять операцию “+” -сцепление, например: st. S : = 'а' + 'b'; // "ab" st. S : = st. S + 'с'; // “abc” S 1: = '1' + '11' ;

Операции над строками Операции сравнения (=, <>, >, <, >=, <=). Строки сравниваются посимвольно, Операции над строками Операции сравнения (=, <>, >, <, >=, <=). Строки сравниваются посимвольно, слева направо с учетом внутренней кодировки символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются значением #0. Следующие операции отношения дадут значение True: '''' < '. ' 'А' > '1' 'Object' < ' Object Pascal' 'Пас' > 'Pascal' 1.

Строковые функции function Copy(S: String; Pos: Integer; N: Integer): String; st: = 'Инженер Иванов'; Строковые функции function Copy(S: String; Pos: Integer; N: Integer): String; st: = 'Инженер Иванов'; fam: =copy(st, 9, 6) ; значением переменной fam будет строка 'Иванов’.

Строковые функции function Concat(s 1, s 2, . . . , sn: String): String; Строковые функции function Concat(s 1, s 2, . . . , sn: String): String; n: ='Невский '; m: =' проспект '; S: =Concat(n, m); //S: =' Невский проспект '

Строковые функции function Length(S: String): Integer; n: =length('Иванов'); m: =length(' Невский проспект '); значение Строковые функции function Length(S: String): Integer; n: =length('Иванов'); m: =length(' Невский проспект '); значение переменных n и m будет равно 6 и 20

Строковые функции function Pos(S 1: String; S: String): Byte; pos (Подстрока, Строка) ; р Строковые функции function Pos(S 1: String; S: String): Byte; pos (Подстрока, Строка) ; р : = pos('Пе', 'Санкт-Петербург'); значение переменной р будет равно 7. Если в строке нет искомой подстроки, то значение функции роs будет равно нулю.

Процедуры со строками Procedure Set. Length(S: String; New. Length: Integer); - устанавливает новую (меньшую) Процедуры со строками Procedure Set. Length(S: String; New. Length: Integer); - устанавливает новую (меньшую) длину New. Length строки S, если New. Length больше текущей длины строки, обращение к Set. Length игнорируется

Процедуры со строками procedure Delete(var S: String; pos: Integer; n: Integer); delete(Строка, р, n) Процедуры со строками procedure Delete(var S: String; pos: Integer; n: Integer); delete(Строка, р, n) s: ='Город Санкт-Петербург'; delete(s, 7, 6); значением переменной s будет строка 'Город Петербург'.

Процедуры со строками Процедура Insert(s, s 1, p) вставляет в строку s подстроку s Процедуры со строками Процедура Insert(s, s 1, p) вставляет в строку s подстроку s 1, начиная с заданной позиции p. Пример: s: =‘mir’; insert (‘ku’, s, 1); s: =‘рис 2’; s 1: =‘№’; insert(s 1, s, 5);

Функции преобразования строкового типа Function Str. To. Float(St: String): Extended; Function Str. To. Int(St: Функции преобразования строкового типа Function Str. To. Float(St: String): Extended; Function Str. To. Int(St: String): Integer; Procedure Val(St: String; var X; Code: Integer); Function Float. To. Str(Value: Extended): String; Function Int. To. Str(Value: Integer) : String;

Файл – это структурированный тип данных, позволяющий осуществлять взаимодействие с внешней средой (ввод/вывод информации) Файл – это структурированный тип данных, позволяющий осуществлять взаимодействие с внешней средой (ввод/вывод информации) в программе посредством обработки специальных объектов данных – файловых переменных. Файловый тип данных (или файл) определяет упорядоченную совокупность произвольного числа однотипных компонент. Понятие файла достаточно широко. Это может быть обычный файл на диске, коммуникационный порт ЭВМ, устройство печати, клавиатура или другие устройства.

Любой файл имеет 3 характерные особенности: Файл имеет имя, (=> возможность работать одновременно с Любой файл имеет 3 характерные особенности: Файл имеет имя, (=> возможность работать одновременно с несколькими файлами) Файл содержит компоненты одного типа (любой тип, кроме файлов). Длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти.

Файлы на внешних устройствах часто называют физическими файлами. В программах на языке Паскаль имена Файлы на внешних устройствах часто называют физическими файлами. В программах на языке Паскаль имена файлов задаются с помощью строк. Например, имя файла на диске может иметь вид: 'LAB 1. DAT' 'c: ABC 150pr. txt‘

 Представление файла. Признак Конца Файла. Файл, не имеющий ни одной компоненты, называется пустым. Представление файла. Признак Конца Файла. Файл, не имеющий ни одной компоненты, называется пустым.

 Для доступа к компонентам файла Object Pascal хранит указатель файла. Каждый раз, когда Для доступа к компонентам файла Object Pascal хранит указатель файла. Каждый раз, когда какой -либо компонент записывается в файл или считывается из него, указатель файла перемещается к следующей компоненте.

Типы файловых переменных В языке Object Pascal в зависимости от вида считываемой и записываемой Типы файловых переменных В языке Object Pascal в зависимости от вида считываемой и записываемой информации можно описать три вида файловых переменных: типизированные текстовые нетипизированный Файловая переменная обозначает и таким образом связана с буфером в ОЗУ, куда копируется для временного хранения данные при вводе/выводе информации.

Ввод (чтение) информации Операция ввода означает перепись данных с внешнего устройства (из входного файла) Ввод (чтение) информации Операция ввода означает перепись данных с внешнего устройства (из входного файла) в основную память ЭВМ (буфер ОЗУ). Информация может быть введена (или прочитана): из файлов на дисках; при помощи устройств ввода. При чтении за один раз считывается максимальное количество информации, равное или меньшее по объему буфера в ОЗУ.

Размер буфера для типизированных файловых переменных устанавливается равным размеру типа данных. Размер буфера для Размер буфера для типизированных файловых переменных устанавливается равным размеру типа данных. Размер буфера для текстовых и нетипизированных файловых переменных может устанавливаться программистом.

Вывод (запись) информации Операция вывода - это пересылка данных из основной памяти (буфера ОЗУ) Вывод (запись) информации Операция вывода - это пересылка данных из основной памяти (буфера ОЗУ) на внешнее устройство (в выходной файл). Информация может быть введена (записана): в файлы на дисках; на устройства вывода При записи информация сначала направляется в буфер ОЗУ. Там она накапливается до тех пор, пока весь объем буфера не будет полностью заполнен (исключая случаев когда она принудительно извлекается). Только после этого происходит передача данных по назначению.

Правила работы с файловыми переменными Минимальной порцией чтения и записи информации при работе с Правила работы с файловыми переменными Минимальной порцией чтения и записи информации при работе с буфером ОЗУ является один байт. 2. Файловые переменные не могут участвовать в операторах присваивания. 3. При использовании файловых переменных в качестве формальных параметров в заголовках подпрограмм, они всегда должны быть определены как параметры переменные. 4. Имеются различия в наборах команд при работе с различными типами файловых переменных. 1.

Последовательность действий при работе с файлами 1. 2. 3. 4. 5. Описание файловой переменной Последовательность действий при работе с файлами 1. 2. 3. 4. 5. Описание файловой переменной в разделе var Связывание файловой переменной с физическим устройством (физическим файлом)(ASSIGNFILE). Открытие в режиме чтения (RESET), записи (REWRITE) или дозаписи (APPEND) (для текстовых файлов). Выполнение операции чтения (READ) или записи (WRITE) информации, а также ее обработка. Закрытие файла (CLOSEFILE)

Закрытие файла Файл F закрывается, и каталог диска обновляется, в нем отображаются новые сведения Закрытие файла Файл F закрывается, и каталог диска обновляется, в нем отображаются новые сведения о состоянии файла. Файл следует закрывать даже тогда, когда он открывался только для чтения Close. File(f);

Описание файловых переменных Типизированный Type DIM = array [1. . 100] of real; FDIM Описание файловых переменных Типизированный Type DIM = array [1. . 100] of real; FDIM = file of DIM; FINT = file of integer; Var F 1: FDIM; F 2: FINT; F 3: file of real; Текстовый Var ftext: Text. File; Нетипизированный файл Var FN: file;

Связывание с физическим файлом Формат процедуры ASSIGNFILE: Assign. File(<ФП>, <имя файла>); Пример: assignfile (f Связывание с физическим файлом Формат процедуры ASSIGNFILE: Assign. File(<ФП>, <имя файла>); Пример: assignfile (f 1, ‘c: file. dat’);

Особенности использования Не анализируется корректность имени файла и его существование. 2. После выполнения процедуры Особенности использования Не анализируется корректность имени файла и его существование. 2. После выполнения процедуры файл считается пока закрытым и размер буфера не определенным. 3. После ее выполнения к файлу через файловую переменную возможно применять некоторые стандартные функции (rename, erass) 1.

Открытие файла Формат процедуры RESET для текстовых и типизированных файлов: Reset (<ФП>); Примеры: reset Открытие файла Формат процедуры RESET для текстовых и типизированных файлов: Reset (<ФП>); Примеры: reset (f 1); reset(ftext); Формат процедуры RESET для нетипизированных файлов: Reset(f[, Buf. Size]) ; Пример: Reset (FN, 256) ; Параметр Buf. Size задает число байтов, считываемых из файла или записываемых в него за одно обращение. Минимальное значение Buf. Size - 1 байт, максимальное - 64 К байт. Если Buf. Size не указан, то по умолчанию он принимается равным 128.

Особенности использования RESET Открывает физический файл для чтения. 2. Фиксирует размер буфера равным: объему Особенности использования RESET Открывает физический файл для чтения. 2. Фиксирует размер буфера равным: объему памяти, необходимому для хранения одного элемента в типизированных файлах; 128 байтам для текстовых файлов; заданным программистом. 3. Устанавливает указатель в файле на самом первом (нулевом по счету) элементе. 4. Содержимое файла не изменяет. 1.

Открытие файла для записи Формат процедуру REWRITE для текстовых и типизированных файлов: Rewrite (<ФП>); Открытие файла для записи Формат процедуру REWRITE для текстовых и типизированных файлов: Rewrite (<ФП>); Примеры: rewrite (f 1); rewrite (ftext); Формат процедуры REWRITE для нетипизированных файлов: Rewrite(f[, Buf. Size]) ; Пример: Rewrite(FN, 512) ;

Особенности использования Открывает физический файл для записи. 2. Очищает содержимое физического файла, подготавливая его Особенности использования Открывает физический файл для записи. 2. Очищает содержимое физического файла, подготавливая его тем самым для записи. 3. Фиксирует размер буфера равным: объему памяти, необходимому для хранения одного элемента в типизированных файлах; 128 байтам для текстовых файлов; заданным программистом. 4. Устанавливает указатель в файле для записи первого элемента. 1.

Открытие файла для дозаписи Только для текстовых файлов Формат процедуры APPEND Append (<ФП>); Пример: Открытие файла для дозаписи Только для текстовых файлов Формат процедуры APPEND Append (<ФП>); Пример: append(ftext);

Особенности использования Открывает физический файл для дозаписи. 2. Фиксирует размер буфера равным 128 байтам. Особенности использования Открывает физический файл для дозаписи. 2. Фиксирует размер буфера равным 128 байтам. 3. Устанавливает указатель в файле последнего элемента. 4. Содержимое файла не очищает. 1.

Буфер ввода/вывода для текстовых файлов По умолчанию размер буфера для текстовых файлов равен 128 Буфер ввода/вывода для текстовых файлов По умолчанию размер буфера для текстовых файлов равен 128 байтам, но его можно изменить, используя стандартную процедуру SETTEXTBUF. Формат использования: Set. Text. Buf (<ФП>, <Буфер>[, <Размер буфера>]); <Буфер> - это описанная в программе переменная (ее место в памяти будет использоваться под буфер ввода/вывода)

Буфер ввода/вывода для текстовых файлов <Размер буфера> - необязательный параметр, обозначающий размер буфера в Буфер ввода/вывода для текстовых файлов <Размер буфера> - необязательный параметр, обозначающий размер буфера в байтах (по умолчанию он равен размеру, указанной на месте второго аргумента переменной). Пример: var ft: textfile; Buf: array [1. . 4096] of char; //4 кбайта памяти … assignfile (ft, ‘ttt. txt’); settextbuf (ft, buf, 1024); …

Запись в типизированный файл Осуществляется запись значений только одного типа данных, совместимым с указанным Запись в типизированный файл Осуществляется запись значений только одного типа данных, совместимым с указанным при описании файловой переменной. Запись осуществляется в формате машинного представления значения. Формат оператора записи: write (<ФП>, <зн 1>[, <зн 2>, . . <знn>]);

Пример: var f 1: FDIM; f 2: FINT; f 3: File of real; var Пример: var f 1: FDIM; f 2: FINT; f 3: File of real; var p 1: DIM; p 2: integer; p 3: real; … //инициализация p 1, p 2, p 3, f 1, f 2, f 3 rewrite(f 1); rewrite(f 2); rewrite(f 3); write(f 1, p 1); write (f 2, p 2, 89); write (f 3, 7. 8, p 3);

Запись в текстовый файл Осуществляется запись значений простых (кроме перечисляемого типа) и строковых типов Запись в текстовый файл Осуществляется запись значений простых (кроме перечисляемого типа) и строковых типов данных. При этом: 1. Информация записывается в виде символов с кодами шрифта, используемом при вводе. 2. Можно указать формат записи значений (ширина поля вывода, количество знаков после запятой) 3. Порции информации могут разделятся на строки. Признаком конца строки служит символ с кодом #13 или совокупность символов #13#10

Запись в тестовый файл 4. Признак конца файла - символ с кодом #26 5. Запись в тестовый файл 4. Признак конца файла - символ с кодом #26 5. При записи значений числовых и логических типов они преобразуются в текстовый вид. 6. Запись в физический файл происходит только либо при использовании стандартных процедур Flush (<ФП>); либо при заполнении буфера, либо при закрытии файла Close. File (<ФП>);

Запись в тестовый файл Формат оператора записи write (<ФП>, <зн 1>[, <зн 2>…<знn>]); writeln Запись в тестовый файл Формат оператора записи write (<ФП>, <зн 1>[, <зн 2>…<знn>]); writeln (<ФП>, <зн 1>[, <зн 2>…<знn>]); Пример: var ftext: textfile; p 1: char; p 2: integer; p 3: real; … p 1: =‘A’; p 2: =89; p 3: =45. 67; assignfile (ftext, ‘c: text. txt’); rewrite(ftext); write (ftext, p 1: 7); writeln (ftext, p 2: 4, 777, 4); writeln(ftext, 7. 8, p 3: 6: 1); …

Запись в нетипизированный файл Запись осуществляется значениями любого типа. При этом: o информация записывается Запись в нетипизированный файл Запись осуществляется значениями любого типа. При этом: o информация записывается в формате многомерного представления значений по байтам; o размер записываемой информации за 1 раз определяется в процедуре REWRITE; o запись осуществляется в буфер, а при его заполнении или закрытие файла автоматически в физический файл.

Формат оператора записи в нетипизированный файл: Block. Write(<ФП>, <ПБуф>, < Число значений>[, <Результат>] ) Формат оператора записи в нетипизированный файл: Block. Write(<ФП>, <ПБуф>, < Число значений>[, <Результат>] ) ; Эта процедура осуществляет за одно обращение запись из переменной ПБуф количества блоков, заданное параметром Число значений, при этом длина блока равна длине буфера. Число значений, не может быть меньше 1. За одно обращение нельзя записать больше, чем 64 К байтов.

Необязательный параметр Результат возвращает число блоков, записанных успешно текущей операцией Block. Write. В случае Необязательный параметр Результат возвращает число блоков, записанных успешно текущей операцией Block. Write. В случае успешного завершения операции записи Результат = Число значений, в случае аварийной ситуации параметр Результат будет содержать число удачно прочитанных блоков. Отсюда следует, что с помощью параметра Результат можно контролировать правильность выполнения операции записи.

Пример: var s: string[64]; FN: file; … s: =‘Привет!’ rewrite(FN, 8); Block. Write(FN, s, Пример: var s: string[64]; FN: file; … s: =‘Привет!’ rewrite(FN, 8); Block. Write(FN, s, 2); …

Чтение из типизированного файла Формат чтения из типизированного файла read (<ФП>, <П 1>[, <П Чтение из типизированного файла Формат чтения из типизированного файла read (<ФП>, <П 1>[, <П 2>…<Пn>]); Пример: var F 1: FDIM; f 2: FINT; var p 1: DIM; p 2: integer; p 3: real; … //связывание f 1 и f 2 с файлом reset(f 1); while not eof(f 1) do read (f 1, p 1); …

Чтение из текстового файла может осуществляться в простые (кроме перечисляемых) и в строковые переменные. Чтение из текстового файла может осуществляться в простые (кроме перечисляемых) и в строковые переменные. Формат оператора: read (<ФП>, <П 1>[, <П 2>…<Пn>]); readln (<ФП>, <П 1>[, <П 2>…<Пn>]); Пример: var ftext: textfile; p 1: char; p 2: integer; p 3: real; … reset(ftext); read (ftext, p 1); readln (ftext, p 2, p 3); …

При этом информация: 1. Записывается в виде символов, используемых при вводе; 2. Для чтения При этом информация: 1. Записывается в виде символов, используемых при вводе; 2. Для чтения из различных строк необходимо: читать построчно (в строковые элементы); читать посимвольно или поэлементно и производить поиск признака конца строки (#13) и файла (#26) с последующим переходом для чтения на новую строку или завершения чтения. 3. При чтении значений числовых и логических значений они преобразуются из текстового формата в соответствующий им формат.

Чтение из нетипизированного файла Формат оператора: Block. Read(<ФП>, <ПБуф>, <Число значений>[, <Результат>]); Эта процедура Чтение из нетипизированного файла Формат оператора: Block. Read(<ФП>, <ПБуф>, <Число значений>[, <Результат>]); Эта процедура осуществляет за одно обращение чтение в переменную ПБуф количества блоков, заданное параметром Число значений, при этом длина блока равна длине буфера. Значение Число значений, не может быть меньше 1. За одно обращение нельзя прочесть больше, чем 64 К байтов.

Необязательный параметр Результат возвращает число блоков, прочитанных текущей операцией Block. Read. В случае успешного Необязательный параметр Результат возвращает число блоков, прочитанных текущей операцией Block. Read. В случае успешного завершения операции чтения Результат = Число значений, в случае аварийной ситуации параметр Результат будет содержать число удачно прочитанных блоков. Отсюда следует, что с помощью параметра Результат можно контролировать правильность выполнения операции чтения.

Пример: var s: string[64]; FN: file; … reset(FN, 8); Block. Read(FN, s, 2); … Пример: var s: string[64]; FN: file; … reset(FN, 8); Block. Read(FN, s, 2); …

Функции и процедуры над файлами Процедура Seek. Синтаксис: Seek( File. Var, Pos. Exp) Используется Функции и процедуры над файлами Процедура Seek. Синтаксис: Seek( File. Var, Pos. Exp) Используется для изменения значения указателя файла. File. Var - имя файловой переменой, Pos. Exp - выражение целого типа. Файл File. Var должен быть открыт. Значение выражения не должно выходить за пределы интервала [0; File. Size(File. Var)]. С помощью операции Seek указатель файла перемешается к тому элементу файла, порядковый номер которого определяется величиной выражения Pos. Exp. Если это выражение равно 0, указатель файла будет установлен в начало, если выражение равно File. Size (File. Var), то указатель будет установлен в конец.

Процедура Erase Синтаксис: Erase(File. Var) File. Var - имя файловой переменной. Рекомендуется, чтобы файл Процедура Erase Синтаксис: Erase(File. Var) File. Var - имя файловой переменной. Рекомендуется, чтобы файл Fite. Var был закрыт. После выполнения процедуры Erase будет удален набор данных, связанных с файлом File. Var. Процедура Rename (изменение имени файла) Синтаксис: Rename( File. Var, Str. Exp) File. Var - имя файловой переменой, a Str. Exp - строковое выражение. Файл File. Var должен быть закрыт. Процедура Rename изменяет имя набора данных, связанного с файлом File. Var, на имя, определенное строковым выражением Str. Exp. Последовательность символов, представляемых Str. Exp, должна быть правильным именем набора данных без указания дисковода и каталога, кроме того, нельзя указывать имя уже существующего набора данных.

Функция Eof Синтаксис: Eof(File. Var) File. Var - имя файловой переменой. Файл File. Var Функция Eof Синтаксис: Eof(File. Var) File. Var - имя файловой переменой. Файл File. Var должен быть открытым. Функция Eof возвращает значение True, если указатель находится в конце файла, в противном случае - значение False. Функция File. Size Синтаксис: File. Size(File. Var) File. Var - имя файловой переменой. Файл File. Var должен быть открытым. Результатом функции File. Size будет величина типа integer, значение которой равно количеству элементов файла File. Var.

Функция File. Pos Синтаксис: File. Pos(File. Var) File. Var - имя файловой переменой. Файл Функция File. Pos Синтаксис: File. Pos(File. Var) File. Var - имя файловой переменой. Файл File. Var должен быть открытым. Функция File. Pos возвращает величину целого типа, значение которой равно положению указателя файла File. Var.