1611678431-0e68e83522cb9d960ac896aa5d90854d (826635), страница 15
Текст из файла (страница 15)
Эти элементы будут использоваться на следующемэтапе для построения еще более мощных элементов, и так далее до тех пор, пока не будут полученыэлементы, из которых можно непосредственно составить требуемую программу.На практике восходящая разработка в чистом виде также как и нисходящая невозможна.Построение каждого нового элемента должно сопровождаться просмотром вперед с целью проверки,удовлетворяет ли он требованиям к разрабатываемой программе; но даже и при таком подходе наболее позднем этапе часто обнаруживается, что использованная ранее последовательностьпо-строения была выбрана неправильно и требуется новая итерация.Проблемы восходящего подхода: проблема интеграции (подпрограммы могут не объединяться в целую программу,дающую нужное решение); лишняя работа (ненужные подпрограммы).При конструировании новых алгоритмов обычно доминирует нисходящий метод.
Приадаптации программ к несколько измененным требованиям предпочтение зачастую отдаетсявосходящему методу. На практике также применяется комбинация подходов.32. Файлы в языке Паскаль, текстовые и стандартные файлыЛекции: фото 28, 29, (30)Файл – абстракция внешних устройств; структура данных с последовательным доступом.Элементы файла – записи.Данные, хранящиеся на внешних устройствах, «организовываются в виде файлов». Подфайлом понимается область памяти на внешнем запоминающем устройстве, хранящая (содержащая)определенную информацию. В эту конкретную область памяти можно помещать данные (операцииввода, записи), так и извлекать их оттуда (операции вывода, чтения).1. Описание: в языке программирования Паскаль для работы с данными, хранящимися вфайлах, должны быть определены переменные файлового типа (в разделе описанияпеременых), через которые далее обеспечивается связь между файлом на диске ипрограммой.
Например: f = FILE OF CHAR.2. Установление соответствия между логическим и физическим именами файла:логический – имя переменной в программе, физический – имя из каталога оглавлениядиска. Оператор установления соответствия: assign (лог. имя, ‘физ. имя’). Например: assign(f, 'file.txt'). Если путь не прописан, то файл должен находиться в том же оглавлении, что иturbo.exe.3. В конце требуется закрыть файл и «освободить» переменную f. Это делается с помощьюпроцедуры close(f).При определении переменной файлового типа также в программе появляется скрытый(неявный) текущий указатель файла. Его назначение – указывать на конкретный элемент файла(обеспечивать доступ к нему).В языке программирования Паскаль все действия с файлом (чтение, запись) производятсяпоэлементно.
Действия совершаются именно над тем элементом файла, на который указываеттекущий указатель файла. После того как действие будет завершено, указатель перемещается кследующему элементу. Все элементы файла пронумерованы, начиная с нуля.F^ - буферная переменная в оперативной памяти, используемая для хранения текущего(доступного) элемента; при открытии непустого файла значение 1-ого элемента, в случае пустогофайла не определено. Если файл из одного символа, то F^ - конец элемента, но считаем, что это не eof.Get (F) – присвоение F^ следующего элемента.
Если есть следующий, то у Get (F) обновлениезначения и мы не в конце файла. Иначе конец файла.2 режима работы: чтения и записи.Процедура rewrite открывает файл в режиме записи, например: rewrite (f). Запись данных вфайл – результат выполнения процедуры write (f, c), где f – файловая переменная, а с – выводимый изпрограммы, но вводимый в файл символ.Процедура reset открывает файл для чтения, например: reset (f); т.е. мы можем в дальнейшемв программе извлекать данные из файла с помощью процедуры read, например, read (f, a). Данныеизвлекаются «порциями» базового типа /*то есть, если, например, считывается поле типа integer, то«порция» - одна цифра*/. Чтение данных из файла продолжается до тех пор, пока не будет достигнутконец файла. Функция eof проверяет, достигнут ли конец файла, переданного ей в качестве аргументаи, если достигнут, возвращает true.
Выражение not eof (f) проверяет обратное – то, что конец файлаеще не достигнут. Eoln – проверка состояния файла на конец строки.Турбо Паскаль поддерживает три файловых типа: текстовые файлы (это совокупность строк, разделенных метками конца строки. Самфайл заканчивается меткой конца файла. Доступ к каждой строке возможен лишьпоследовательно, начиная с первой. Одновременная запись и чтение запрещены.К текстовым файлам относятся стандартные файлы INPUT, OUTPUT.Рассмотренные ранее операторы ввода - вывода являются частным случаемоператоров обмена с текстовыми файлами, когда используются стандартные файлыввода - вывода INPUT, OUTPUT.
Работа с этими файлами имеет особенности: -имена этих файлов в списках ввода - вывода не указываются; -применение процедур Reset, Rewrite и Close к стандартным файламввода - вывода запрещено; -для работы с файлами INPUT, OUTPUT введена разновидность функцииEOLn без параметров.типизированные файлы (это последовательность компонент любого заданного типа(кроме типа "файл"). Доступ к компонентам файла осуществляется по их порядковымномерам. Компоненты нумеруются, начиная с 0. После открытия файла указатель(номер текущей компоненты) стоит в его начале на нулевом компоненте.
Послекаждого чтения или записи указатель сдвигается к следующему компоненту.);нетипизированные файлы (последовательность компонент произвольного типа.).33. (переплетается с №7) Аксиоматическая семантика. Средства описания свойствпрограмм со структурированными даннымиЛекции: фото № 7, 8, (9); книга: п. 5.2В данном билете необходимо знать материалп. 2.3, 2.3.1, 2.3.2. Пункты 2.2 и 2.4 – к вопросу №7Структурированные типы данных в Паскалерегулярный тип данных (массивы);комбинированный тип (записи);файловый тип (файлы);множественный тип (множества);строковый тип (строки);объектный тип (объекты).Семантическая теория программ заниматься описанием семантики программ, или смыславыражений, операторов и программных единиц.2.2 Операционная семантикаОперационная семантика, сводится к описанию смысла программы посредством выполнения ееоператоров на реальной или виртуальной машине.
Смысл оператора определяется изменениями,произошедшими в состоянии машины после выполнения данного оператора.Пусть состояние компьютера - это значения всех его регистров и ячеек памяти, в том числе коды условийи регистры состояний. Если просто записать состояние компьютера, выполнить команду, смысл которой нужноопределить, а затем изучить новое состояние машины, то семантика этой команды станет понятной: онапредставляется изменением в состоянии компьютера, вызванным выполнением команды.Описание операционной семантики операторов языков программирования высокого уровня требуетсоздания реального или виртуального компьютера. Аппаратное обеспечение компьютера является чистыминтерпретатором его машинного языка.
Чистый интерпретатор любого языка программирования может бытьсоздан с помощью программных средств, которые становятся виртуальным компьютером для данного языка.Семантику языка высокого уровня можно описать, используя чистый интерпретатор данного языка. При такомподходе существуют две проблемы. Во-первых, сложность и индивидуальные особенности аппаратногообеспечения компьютера и операционной системы, используемых для запуска чистого интерпретатора,затрудняют понимание происходящих действий. Во-вторых, выполненное таким образом семантическоеопределение будет доступно только для людей с абсолютно идентичной конфигурацией компьютера.Этой проблемы можно избежать, заменив реальный компьютер виртуальным компьютером низкогоуровня. Регистры, память, информация о состоянии и процесс выполнения операторов можно смоделировать,соответствующими программами.
Набор команд можно создать так, чтобы семантику каждой отдельнойкоманды было легко понять и описать. Таким образом, машина была бы идеализирована и значительноупрощена, что облегчило бы понимание изменений ее состояния.Использование операционного метода для полного описания семантики языка программирования Lтребует создания двух компонентов. Во-первых, для преобразования языка L в операторы выбранного языканизкого уровня нужен транслятор.
Во-вторых, для этого языка низкого уровня необходима виртуальнаямашина, состояние которой изменяется с помощью команд, полученных при трансляции операторов высокогоуровня. Именно изменения состояния этой виртуальной машины определяет смысл данного оператора.Семантику конструкции for языка С можно описать в терминах следующих простых команд.Оператор языка Сfor(expr1;expr2;eхрrЗ){}Операционнаясемантикаexrp1loop:if expr2=0goto outexpr3;goto loopout:Формальное описание операционной семантики можно представить в виде системы равенств:f1 x1 , x2 , , xn E1f 2 x1 , x2 , , xn E2,f m x1 , x2 , , xn Emгде в левых частях равенств явно указаны определяемые функции с формальными параметрами,включающими обозначения всех входных данных x1 , x2 , , xn , а правые части представляют собой выражения,содержащие, вообще говоря, вхождения этих функций с аргументами, задаваемыми некоторымивыражениями, зависящими от входных данных x1 , x2 , , xn .Операционная семантика интерпретирует эти равенства как систему подстановок.
Под подстановкойs; E; терма в выражение E вместо символа s будем понимать переписывание выражения E с заменойкаждого вхождения в него символа s на выражение . Каждое равенство fi x1 , x2 , , xn Ei задает впараметрической форме множество правил подстановок:x1 , x2 , , xn ; f i 1 , 2 , , n Ei ; 1 , 2 , , nгде 1 , 2 ,, n - конкретные аргументы данной функции.
Это правило допускает замену вхождениялевой его части в какое-либо выражение на его правую часть.Интерпретация системы равенств для получения значений определяемых функций в рамкахоперационной семантики производится следующим образом. Пусть задан набор входных данных d1 , d 2 , , dn .На первом шаге осуществляется подстановка этих данных в левые и правые части равенств с выполнением там,где это возможно, предопределенных операций и с выписыванием получаемых в результате этого равенств. Накаждом следующем шаге просматриваются правые части полученных равенств.