
ГИА 2024 Ответы УТС (НЕ ВСЕ)
.pdf7. Организация ввода-вывода. Средства работы с файлами в языке программирования высокого уровня.
в Object Pascal.
Файл м б источником и приёмником информации. Файловая система состоит из логического и физического файла. Логический файл описывается как переменная одного из файловых типов, определённых в паскаль. Когда в разделе описания переменных объявили файловую переменную, её можно использовать как средство общения с любым физическим файлом. Само его имя появляется в программе один раз – когда спец процедура организует связь между логическим и физическим файлами. Assign(лог. ф., физич. ф.)
Операторыввода/выводаинформациивОРread/write, ввод/выводидетчерезбуфер. Буфер– это область памяти, отводимая при открытии файла. При записи в файл вся информация сначала направляется в буфер и там накапливается до тех пор пока весь объём буфера не будет заполнен, затем данные передаются по назначению.(на диск, в порты ВВ.ВЫВ). При чтении с файла считывается не столько информации, сколько запрашивается, а сколько уместится в буфер. Буферизация введена для быстрого и эффективного обмена. Для текстовых и бестиповых файлов можно устанавливать размер буфера по своему усмотрению. Буфер имеет объём который автоматически сбрасывается при выводе, если нужно часть вывести, то нужно выполнить принужденный сброс (Flash). Ввод данных - перенесение данных в ячейки памяти.
Работа с файлами – ввод/вывод данных Имеется двухуровневая организация логическая и физическая
При создании логического файла создается буфер (буфер – это не логический файл) Assign(лог. ф., физич. ф.);Reset –открыть файл для чтения;Rewrite – открыть файл для записи Для текстовых фалов можно открывать для дозаписи
Append – дозапись(дополнение старых файлов)
Close - закрытие(принудительный сброс буфера на диск, когда был файл открыт для записи.)
Типы файлов:
Текстовый (последовательный файл)- можно читать напрямую т.к. он состоит из символов и строковых структур. Его типtext. Эти файлы организованы по строкам и обязательно содержат спец код – признак конца строки #13 объединяется с признаком переброса курсора на след строку #10 и конец файла #26.При записи чисел, строк, лог значений они автоматически преобразуются в текстовой или символьный вид, при чтении – из текстового в машинное представление.
Типизированный (прямой доступ) – имеет машинную информацию. File of <тип компонента> Запись этих файлов имеет чаще всего жёсткую структуру типа record. Это файл с объявленным типом его компонента или это файл с наборами данных одной и той же структуры.
Пр: type
Dim=array [1..10,1..2] jf integer; Rec=record
x,y:integer; c:word;end;
Fdim=File of Dim; Frec=File of Rec; Var f:Fdim;
Begin read(f,x);
Readln,writeln – не применяются
Бестиповый (прямой доступ)- двоичный файл, имеет быстрые способы доступа. Это обобщенный файловый тип. Var f:file; С помощью этого файла можно записывать на диск произвольные участки раб памяти или считывать их с диска. Можно преобразовывать считанные данные в любой формат по средствам приведения типов. В данном случае мы имеем дело с произвольныминаборамибайтов, независимоотихструктурыиприроды, внихмогутпередаваться блоки по 128 Б каждый (буфер по умолчанию, но можно менять) Для всех файлов минимальная единица хранения информации составляет 1 Б и принцип работы с ним единый, т е для любого файлового типа надо связать файловую переменную с физическим файлом. Файловые переменные описанные в программе не могут участвовать в операторах присваивания .При использовании файловыхпеременныхлюбоготипавкачествеформальныхпараметроввпроцедурахилифункциях они должны быть описаны как параметры переменной под var. Для чтения и записи используется
Blockread и Blockwrite.
Способы доступа:
- прямой – (например диск) можно прочитать ту информацию, которую захотел, не читая предыдущую
- последовательный – (например магнитная лента) для прочтение 5ой записи нужно промотать всю пленку. Естественный способ доступа к записям файлов это последовательный, но к типизированным и бестиповым файлам применимы процедуры и функции прямого доступа (только для них). Прямой доступ означает позиционировать указатель на интересующую нас запись файла. Для типизированных это компонента, для бестиповых это блок равный буферу. Для организации прямого доступа используется индексация. Для индексации структуры файла пронумерованы его записи.
8. Понятие подпрограммы. Виды подпрограмм, их отличительные особенности. Способы передачи параметров.
Подпрограмма - относительная самостоятельная программная единица (фрагмент прграммы), оформленная спец образом и снабжённая именем, представленная логически законченного алгоритма, которая может исполнятся многократно из вызывающей программы при разных наборах исходный данных.Подпрограмма не может работать сама по себе. Упоминание имени подпрограммы в тексте главной программы называется вызовом подпрограммы. Виды подпрограмм:Procedure и Function
Отличие ф-ии от процедуры: результат исполнения операторов, образующих тело ф-ии всегда явл-ся некоторое единственное значение, поэтому обращение к ф-ции можно использовать в соответствующих выражениях подобно константам или переменным. (подпрограммы с ограничениями).
При программировании подпрограмм надо запрограммировать описание подпрограмм, обращение к ней. Тело подпрограммы: раздел описания (может отсутствовать) и раздел исполняемых операторов. В заголовке подпрогр указывается её уникальное имя и список формальных параметров с описанием их типов. Формальн парам сами по себе не имеют значения, они их приобретут из фактических параметров при обращении к подпрограмме, результат сформированной подрогр при счете с фактическими значениями будет передавать автоматически в точки вызова подпрограммы. В обращении к блоку указывается имя подпрогр со списком фактических параметров, к-ые при работе обращения встанут на место формальных. Списки формальных и фактических параметров должны соответствовать друг другу по количеству, типу и порядку следования.
Функция – подпрогр передающая результат выполнения через значение имени функции. Обращение к функции можно ставить в составе выражения.
function_имя функции(список формальных параметров с описанием их типов):тип результата;
Функция формирует единственный результат в ячейке имени ф-ии
Function _ имя ф(сп):тип; {раздел описания}
begin{раздел исполняемых операторов} имя ф-ии:=результат;end;
Пр: program main; Var a,b,c,t:real;
Function min(x,y:real):real;
Begin if x<y then min:=x else min:=y;end;
Begin writeln (‘vv a,b,c’); readln(a,b,c);t:=(min(a,b)+min(b,c))/(min(1,b*c)+2);writeln(‘t=’,t:9:3);readln;end;
Обращение к процедуре – это отдельный оператор, состоящий из имени процедуры и из списка фактических параметров.
procedure_имя процедуры(список формальных параметров с описанием их типов);
{раздел описаний}
begin{раздел исполняемых операторов}end; Имя процедурыэто не ячейка памяти
Пр:procedure sumkol(A:mass;P:integer; var k,s:integer);
Var i: integer; begin s:=0;k:=0; for i:=1 to p do bigin if a[i]_mod_2=0 then begin s:=s+a[i];k:=k+1;end;end;end;
Begin ... sumkol(x,n,s1,k1)
Списокформальныхпараметровсодержиткаквходныевпроцедурупараметры, такипередаваемые из процедуры результирующие параметры.
Процедура – это универсальная подпрогр, к-ая не имеет ограничения в своём применении и позволяет получить за одно обращение любое количество результатов.
Способы передачи параметров:
Параметры можно передавать по значению и по ссылке.
Параметра-значения- это локальные переменные подпрогр, стартовое значение к-ых задается при вызове подпрогр. Эти значения поступают в подпрограмму из внешних блоков. Параметрызначения, описанные в заголовке, могут изменять свои значения наряду с остальными, но эти изменения могут быть строго локальными, т е подпрогр доступна только копия значения из параметра-значения. Подпрограмменедоступенадресэтогопараметра=> черезпараметрзначения
нельзя передать результат в точку вызова. Через стек передается только копия значения параметра из ячейки памяти.
Чтобы подпрограмма изменила значение переменной надо объявить эту величину как параметрпеременная. Синтаксически в заголовке при описании параметра переменной указывают директиву var, и подпрограмма получает доступ к адресу этой ячейки памяти. Параметры – переменные используются как обычные ячейки памяти. Параметр переменная – передается по ссылке, идет передача адреса через стек, есть адрес и его можно использовать на вх. и на вых.
Все результаты должны быть сохранены в параметры-переменные
9. Динамическиепеременные. Операцияразыменования. Размещение/освобождение динамических переменных.
Динамические переменные представляют собой указатели на области памяти Разыменованием указателя называется конструкция, позволяющая получить доступ к значению переменной, на которую ссылается указатель (т. е. адрес которой хранит указатель). Это может потребоваться в случае, если необходимо изменить или прочитать значение переменной через указатель Оператор @ обозначает взятие адреса переменной (получение указателя на переменную).
Оператор ^ в коде обозначает разыменование указателя и получение значения переменной.
Оператор ^ при объявлении типа обозначает использование указателя. Например, PPoint = ^TPoint обозначает, что объект типа PPoint будет указателем на объект типа TPoint.
Каждая из таких переменных занимает в памяти 4 байта. Например, в разделе
объявления переменных можно определить указатель на строку следующим образом:
Var PS:^String;
Знак «^» – поставленный перед типом String, обозначает описание указателя на память, которая может быть выделена строке. Переменная PS будет занимать в памяти 4 байта, в них и будет храниться адрес начала выделенной памяти для строки. Здесь под адресом будем понимать не физический адрес памяти, а
особым образом рассчитанный адрес внутри участка памяти, выделенного для
динамических переменных. Этот участок памяти описывается отдельным дискриптором, как это принято в защищенном режиме работы процессора. Весь процесс выделения и освобождения динамической памяти контролируется системой Delphi. Графически это можно представить так:
Память под динамические переменные выделяется и освобождается во время выполнения программы по мере необходимости. Приведем основные процедуры и функции для работы с динамическими переменными:
Procedure New(var P:Pointer); – процедура выделения памяти под динамическую переменную P. Здесь тип Pointer определяет любой указатель на область памяти.
Эта процедура выделяет блок памяти такой длины, как это было указано в типе
динамической переменной P. В P записывается адрес начала блока выделенной памяти;
Procedure Dispose(var P:Pointer); – процедура освобождения динамической
памяти, которая ранее была выделена процедурой New для переменной P;
Procedure GetMem(var P:Pointer; Size:Integer); – процедура выделения блока
динамической памяти длиной Size байт и записи адреса начала этой памяти в переменную P. Эта процедура позволяет выделять блок памяти любой длины, независимо от типа указателя P;
Procedure FreeMem(var P:Pointer; Size:Integer); – процедура освобождения динамической памяти, которая ранее была выделена переменной P процедурой
GetMem;
Function AllocMem(Size:Cardinal):Pointer; – функция возвращает указатель на блок
выделенной динамической памяти длиной Size байт и обнуляет эту память, в отличие от процедуры GetMem. Освобождать эту память можно процедурой
FreeMem;
Var AllocMemCount:Integer; – системная переменная, которая определяет число
динамических блоков памяти для данного приложения. Эта переменная доступна только для чтения;
Var AllocMemSize:Integer; – системная переменная, которая определяет общий
размер всех динамических блоков памяти для данного приложения. Такие переменные позволяют контролировать процесс выделения и освобождения
динамической памяти;
10. Модуль и его структура. Основные типы модулей в инструментальной среде разработки программного обеспечения на языке высокого уровня.
Delphi.
Это спец образом оформленная библиотека определителей типов, констант, переменных, процедур, функций – статическая библиотека языка. Часть модулей стандартно определена и поставляется с компилятором. Модуль в отличие от программы не может быть запущен на выполнение самостоятельно, он может только участвовать в построении программы или другого модуля. Модуль предварительно должен быть откомпилирован, независимо от использующей его программы, результат компиляции .dcu (.tpu, .obj – общее системное расширение). Для подключения модуля к программе или к другому модулю достаточно указать его модуль в директиве uses: uses_modul; При подключении модулей порядок играет роль, если между модулями есть непосредственные конкретные связи. Все системные библиотеки Turbo Pascalя реализованы в виде модулей UNIT. Для их использования указывают под директивой uses имена используемых модулей: USES CRT,PRINTER,U1. далее используем содержимое подключаемых модулей, как будто оно предопределено в языке. Модули удобны в 2х случаях:
1)для построения собственных статических библиотек процедур и функций, которые затем без изменения подключаются к любым программам
2)модульность позволяет создавать программы практически любого размера
Не модуль не программа не могут произвести исполняемый код больше 64 кБ, если к ним не подключены другие модули, но сумма модулей составляющих программу ограничена объёмом ОП
Модуль разделён структурно на 4 части:
-заголовок –unit- модуля вводит имя, по которому модуль будет подключен к другим программам, имя должно быть уникальным, но должно совпадать с именем файла, содержащего этот модуль, после компиляции мы подключаем файл с тем же именем и .tpu
-разделописания interface (объявлений) – содержит описание типов, констант и переменных, которые будут переноситься в программу (доступны вызывающей программе) при подключении модуля описывающего заголовки процедур и функций составляющих эту библиотеку. Раздел работает на этапе компиляции. Компилятору достаточно иметь заголовок процедуры и функции. Недопустимы заголовки с директивой forward.
-раздел implementation реализации. Состоит из тел процедур и функций, объявленных в разделе interface. Введены свои константы, типы, переменные, которые являются глобальными по отношению ко всем подпрограммам этой библиотеки, но они недоступны вызывающей модуль программе. (Они доступны операторам раздела инициализации). Программе, подключающей модуль эти объявления недостаточны
-инициализация Работает до всех исполняемых операторов вызывающей программы Программируются действия которые будут произведены перед выполнением любой подпрограммы (пр: открытие файла? Запись в который пойдет из модуля)(определение нач параметров)
-финализация begin..end идут операторы завершающие выполнение любой подпрограммы. После всех операторов освобождение ресурсов программы.
Основные типы модулей и инструментов системы. Модуль в системе Delphi – файл с расширением
.pas
Самыйраспространенныйтипмодулей– Form исвязанноеснимокно(*.dfm – описаниеформы, *.pas – описаниекода). Unit.pas. БольшинствотиповыхмодулейврепозиторииDelphi содержит заготовкидлясозданиядиалоговыхокон. Помимоформврепозиториисодержатсянесвязанные с видимыми окнами модули. К ним относятся: Модули общего назначения (статическая библиотека Unit оторванный от формы), модули данных, модули динамических библиотек (предназначена для создания *.dll), модули потоков.
Модули общего назначения – Object Pascal – статическая библиотека.
Модули данных – необходимость доступа к БД Data Aсcess – эти модули (компоненты) вставляются на форму но они не видимы в процессе работы программы.
Модули библиотек – предназначены для создания широко используемых в Windows динамически связанных библиотек dll – универсальное средство согласования программ,
написанных на разных языках. В Delphi эти модули предназначены для разработки DLL на языке
Object Pascal.
Модули потоков (команд) – предназначены для реализации т.н. потоков команд – фрагменты программы, кот исполняются параллельно с другими фрагментами разделяя с ними время процессора и остальные системные ресурсы.
11. Фундаментальные принципы объектно-ориентированного программирования. Понятие класса, объекта. Реализация класса в языке программирования высокого уровня.
Класс – в объект паскаль спец типы содержащие поля, методы и свойства. А делфи это функционально законченные фрагменты программ, служащих образцами для создания подобных себе экземпляров.
Объект – экземпляр класса. Отличием классов от др типов является то, что объекты класса всегда располагаются в куче, т е объект переменной представляет собой указатель на динамическую область памяти.
Компонент – это объект размещаемый на пользовательском интерфейсе приложения или любой объект палитры компонента Делфи – фактически это фрагмент кода.
Type myclass=class(TObject);
В основе классов лежат 3 принципа объектно-ориентированного программирования:
-инкапсуляция
-наследование
-полиморфизм
Класспредставляетсобойединство3х Сущностей: поля, методыисвойства, объединение сущностей в одно целое наз инкапсуляция . И. даёт возможность обмена готовыми для работы программные заготовки.
Наследование – любой класс можно породить от родителя , потомок автоматически наследует поля, методы и свойства, и может дополнять их новыми.tobject не имеет полей и свойств, только методы общего назначения. Принцип наследования приводит к разветвлённому дереву классов. Дерево идёт от вершины tobject к потомку.
Type TChild=class(TParent)
Полиморфизм – свойства классов решать схожие по смыслу проблемы разными способами обеспечивая это перекрытием методов потомка, т е объявить в потомке одноименный метод и реализовать в нём нужные действия. В результате в объектах родители и потомки будут действовать два одноименных метода имеющие разные алгоритмы и придающие объекту разные свойства это и есть полиморфизм. Может быть статическим (на этапе компиляции) и динамические (программой).П. можно достичь виртуализацией. Он позволяет род-им методам обращаться к методам своих потомков.
Составляющие класса: Поля – это инкапсулированные в классе данные, Методы – это инкапсулированные в классе процедуры и функции.
Реализация класса в ОР. TChild=class(TParent) ifield:integer;
istr:strig;
……
Procedure rread; Function f(t:integer); property
end;
Свойства –это спец механизм класса регулирующий доступ к полям-property
Имеется 4 секции видимости (определяют области видимости элемента описания класса) – определяют зарезервированные слова (структура описания класса)
1)published – секция с декларированными данными - опубликованные описания (нет ограничений по видимости, но в секции перечисляются свойства, к-ые должны быть доступны не только на этапе исполнения, но и на этапе конструирования проекта через инспектор объектов, в основном использ для разр-ки новых компонентов, в нее среда D помещает описание вставл-х на форму компонентов)
2)privateличные – частные описания (личные элементы описания доступны только внутри методов данного класса и в подпрограммах где описан, элемент не доступен даже ближайшим потомкам)
3)protected – защищенные описания (доступно элементам, методам данного класса и его потомкам не зависимо от модуля в к-ом находится)
4)public – доступные (не накладываются ограничения на область видимости, перечисляемых в ней полей, методов и свойств, т е эти составляющие можно вызывать из любого модуля программы)
2 метода конструктор и деструктор: 1-распред-т объект в динамической памяти и помещает адрес этой памяти в перменную со стандартным именем Self, которая авт-ки объявляется в классе; 2 –удаляет объект из кучи (освоб дин память). Обращение к констр-ру обязательно до любого обращения к полям и некоторым методам объекта. Констр и дестр являются процедурами, но объявляются с помощью зарезервированных слов.