95712

Объекты Delphi и логика описания программы

Контрольная

Информатика, кибернетика и программирование

Процесс создания программы в Delphi состоит из двух шагов: сначала нужно создать форму программы (диалоговое окно), затем — написать процедуры обработки событий. Форма приложения (так принято называть прикладные программы, работающие в Windows) создается путем добавления в форму компонентов и последующей их настройки.

Русский

2015-09-29

158 KB

4 чел.

PAGE  21

Содержание

Введение ………………………………………………………..

3

1.

Базовые компоненты …………………………………..

4

2.

Работа с кнопками и полями ………………………….

5

3.

Работа с графическими объектами ……………………

14

Заключение ……………………………………………………..

23

Литература ……………………………………………………...

24


Введение

Задачи обработки данных с помощью среды визуального проектирования в информатике занимают особую ступень в решении прикладных задач, построенных из «кирпичиков» составляющих окна и функции любой операционной системы, то есть построенным по строго определённым правилам. Решение задач опирается на операторы и структуру языка Pascal, однако высоко организованный интерфейс обеспечивает комфортное общение пользователя и ЭВМ. Следовательно, изучение спектра задач визуального проектирования актуально, а определение классов задач со стандартными компонентами, изучаемыми в базовом курсе информатики или профильных курсах определяют проблему исследования.

Целью исследования является определение стандартных объектов и решение задач начального уровня с применением этих объектов.

Объектом исследования выступают объекты Delphi и логика описания программы. Предметом исследования является классификация тренировочных задач на стандартные объекты и элементы графики, и степень рациональности их решения.

Выдвинем гипотезу о том, что существует спектр тренировочных задач Delphi  разрешимых только с помощью стандартных объектов и элементов графики. Они рационально при условии правильно организованных алгоритмов решения. Для обоснования гипотезы выдвинем задачи исследования: 1) изучить разработки и провести анализ литературных источников по данной проблеме; 2) обработать и апробировать решение найденных алгоритмов на языке программирования Delphi 7.

Значимость исследования состоит в выборе спектра тренировочных задач, разрешимых только с использованием стандартных объектов Delphi.


1. Базовые компоненты

Процесс создания программы в Delphi состоит из двух шагов: сначала нужно создать форму программы (диалоговое окно), затем — написать процедуры обработки событий. Форма приложения (так принято называть прикладные программы, работающие в Windows) создается путем добавления в форму компонентов и последующей их настройки.

В форме практически любого приложения есть компоненты, которые  обеспечивают интерфейс  (взаимодействие)  между программой и пользователем. Такие компоненты называют базовыми. К базовым компонентам можно отнести:

Label — поле вывода текста;

Edit — поле ввода/редактирования текста;

Button — командную кнопку;

CheckBox — независимую кнопку выбора;                     

RadioButton — зависимую кнопку выбора;                     

ListBox — список выбора;                                                

ComboBox — комбинированный список выбора.      

Вид компонента, его размер и поведение определяются значениями свойств (характеристик) компонента.

Основную работу в программе выполняют процедуры обработки событий.

Исходную информацию программа может получить из полей ввода/редактирования (компонент Edit), списка выбора (компонент ListBox) или комбинированного списка (компонент ComboBox). Для ввода значений логического типа можно использовать компоненты CheckBox и RadioButton.

Результат программа может вывести в поле вывода текста (компонент    Label)    или    в    окно    сообщения    (функция MessageDlg).

Для преобразования текста, например находящегося в поле ввода/редактирования, в целое число нужно использовать функцию strToint, а в дробное — функцию strToFloat.

Для преобразования целого, например значения переменной, в строку нужно использовать функцию intTostr, а для преобразования дробного — функцию FloatToStr или FloatToStrF. [2, 8]

2. Работа с кнопками и полями

1. Написать программу, которая пересчитывает скорость ветра из "метров в секунду" в "километров в час". Программа должна быть спроектирована таким образом, чтобы пользователь мог ввести в поле Скорость только целое положительное число. [1, 45-49]

// щелчок на кнопке Пересчет

procedure TForm1.ButtonlClick(Sender: TObject);

var

  ms:  integer; // скорость м/с

  kmh: real;   // скорость км/час

 begin

// Если поле Editl пустое, то при выполнении функции

// StrToInt возникает ошибка.

// Проверим, ввел ли пользователь скорость в поле Edit1

if Length(Editl.Text) = 0 than

begin

  ShowMessage('Надо ввести скорость');

  exit; // завершить обработку события

end;

ms := StrToInt(Editl.Text); // ввести исходные данные

 kmh := ms * 3.6;                             // пересчитать

// вывести результат

Label3.Caption :=

IntToStr(ms) + `м/с - это ' + FloatToStr(kmh) + ' км/час'

end;

// нажатие клавиши в поле Edit1

procedure TForml.EditlKeyPress(Sender: TObject; var Key: Char)

begin

// В поле Скорость   (Editl) можно ввести только

// цифры.  Процедура проверяет, является ли символ

// допустимым.  Если нет,  то она заменяет

// введенный символ нулевым.  В результате символ

// в поле редактирования не отображается.

// Key символ,  соответствующий нажатой клавише 

if not   ((Key >=  '0')   and  (Key <='9')  or   (Key = #8)) then Key := Chr(O);

end;

2. Написать программу, которая вычисляет скорость (км/час), с которой бегун пробежал дистанцию. Количество минут задается целым числом, секунд — дробным. [2, 21-23]

// Если символ недопустимый,  то процедура, заменяет его

// на символ с кодом 0.  В результате этого символ в поле

// редактирования не появляется и у пользователя создается

// впечатление,  что программа не реагирует на нажатие

// некоторых клавиш:

case Key of

 О.. '9':                             ;   // цифры

  #8     :                                   ; // клавиша <Backspace>

  #13    : Edit2.SetFocus; // при нажатии <Enter> курсор

// переводится в поле Время: минут

// остальные символы запрещены

  else Key :=Chr(0);  // символ не отображать

  end;

end;

// нажатие клавиши в поле Время: минут

procedure TForml.Edit2KeyPress(Sender: TObject; var Key: Char);

begin

  case Key of  

  0 .. ' 9' :                              ;

  #8     :                                   ;  // клавиша <Backspace>

  #1.3    : Edit3.SetFocus; // при нажатии <Enter> курсор

// переводится в поле Время :секунд

// остальные символы запрещены

  else Key:=Chr(O);  // символ не отображать

  end;

end;

// нажатие клавиши в поле Время: секунд

procedure TForml.Edit3KeyPress(Sender: TObject; var Key: Char);

begin

case Key of 0' ..' 9' : ;

',','.' : // десятичный разделитель

 begin

Key := DecimalSeparator;#13 : Buttonl.SetFocus; // при нажатии клавиши <Enter>

// активируется кнопка Вычислить

// остальные символы — запрещены

If Pos(DecimalSeparator, Edit3.Text)<>0

thenKey:=Char(0);

end;

#8:   ;

#13: Button1.SetFocus;

else Key :=Chr(0); // символ не отображать 

end;

end;

// щелчок на кнопке Вычислить

procedure TForml.ButtonlClick(Sender: TObject);

var

dist : integer; // дистанция, метров

min : integer;  // время, минуты

sek : real;    // время, секунды

v: real;      // скорость

begin

// получить исходные данные из полей ввода

dist := StrToInt(Editl.Text);

min := StrToInt(Edit2.Text);

sek := StrToFloat(Edit3.Text);

// дистанция и время не должны быть равны нулю if (dist = 0) or ((min = 0) and (sek = 0)) then begin

ShowMessage('Надо задать дистанцию и время.');

exit;

and;

// вычисление

v := (dist/1000) / ((min*60 + sek)/3600);

// вывод результата

Label5.Caption := 'Дистанция: '+ Editl.Text + ' м' + #13 +'Время: ' + IntToStr(min) + ' мин ' +FloatToStrFfsek, ffGeneral, 4,2) + сек ' +

#13 + 'Скорость: ' +FloatToStrF(v,ffFixed,4,2) + ' км/час'; end;

// щелчок на кнопке Завершить

procedure TForml.Button2Click(Sender: TObject);

begin

Forml.Close; // закрыть главную форму — завершить работу

// программы end;

3. Напишите программу, которая вычисляет доход по вкладу. Программа должна обеспечивать расчет простых и сложных процентов. Простые проценты начисляются в конце срока вклада, сложные — ежемесячно и прибавляются к первоначальной сумме вклада и в следующем месяце проценты начисляются на новую сумму. [3, 267-268]

// щелчок на кнопке Вычислить

procedure TFontil.ButtonlClick(Sender:   TObject);

var

sum :real;   // сумма вклада 

pr:  real;   // процентная ставка

srok: integer; // срок вклада

dohod: real;  // доход по вкладу

buf: real;

i: integer;

begin

// получить исходные данные

 sum := StrToFloat(Editl.Text);

pr := StrToFloat(Edit2.Text);

srok := StrTolnt(Edit3.Text);

if RadioButtonl.Checked then

// выбран переключатель Простые проценты 

dohod := sum * (pr/100) * (srok/360)

   else

// т. к. в труппе два переключателя, то если

// не выбран RadioButtonl, то выбран

// RadioButton2 — Сложные проценты

      begin

buf:= sum;

for i:=l to srok do

      buf:= buf + buf * (pr:/100);

// здесь buf — сумма в конце срока вклада

             dohod := buf — sum;

end;

sum := sum + dohod;

Label4.Caption := 'Доход: ' + Float-ToStrF(dohod,ffGeneral,9,2) + #13 +

'Сумма в конце срока вклада: ' + FloatToStrF(sum,ffGeneral, 9, 2) ;

end;

// выбор переключателя Простые проценты

procedure TForml.RadioButtonlClick(Sender: TObject);

begin

Label2.Caption := 'Срок (дней)';

Label4.Caption := ";

end;

// выбор переключателя Сложные проценты

procedure TForml.RadioButton2Click(Sender: TObject);

begin

Label2.Caption := 'Срок (мес.)';

Label4.Caption := ;

end;

4. Написать программу, которая вычисляет сопротивление электрической цепи, состоящей из двух сопротивлений. Сопротивления могут быть соединены последовательно или параллельно. Если величина сопротивления цепи превышает 1 000 Ом, то результат должен быть выведен в килоомах. [4, 451-452]

// щелчок на кнопке Вычислить

procedure TForml.ButtonlClick(Sender: TObject);

var

rl,r2: real; // величины сопротивлений

r: real;    // сопротивление цепи

begin

// получить исходные данные

rl := StrToFloat(Editl.Text);

r2 := StrToFloat(Edit2.Text);

if (rl = 0) and (r2 = 0) then

      begin

ShowMessage('Надо задать величину хотя бы одного сопротивления');

exit;

      end;

// переключатели RadioButton1 и RadioButton2

// зависимые, поэтому о типе соединения можно

// судить по состоянию одного из этих

// переключателей

if RadioButtonl.Checked

           then // выбран переключатель Последовательно

                r:= rl+r2

           else // выбран переключатель Параллельно

                 r:= (rl*r2)/(rl+r2);

Label4.Caption := 'Сопротивление цепи: ';

if r < 1000 then

Label4.Caption := Label4.Caption +FloatToStrF(r,ffGeneral,3,2) + ' Ом

      else

         begin

r:=r/1000;

Label4.Caption := Forml.Label4.Caption + FloatToStrF(r,ffGeneral,3,2) + ' кОм';

        end

end;

// щелчок на переключателе Последовательно 

procedure TForml.RadioButtonlClick(Sender: TObject);

begin

// пользователь изменил тип соединения

Label4.Caption := ";

and;

// щелчок на переключателе Параллельно

procedure TForml.RadioButton2Click(Sender: TObject);

begin

// пользователь изменил тип соединения

Label4.Caption := ";

end;

5. Напишите программу "Электронные часы", на поверхности формы которой отображается текущее время. [2, 34-36]

unit eclock_;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ExtCtrls, StdCtrls;

type

TForm1=class(TForm)

Timerl: TTimer;

Labell: TLabel;

procedure FormPaint(Sender: TObject);

procedure TimerlTimer(Sender: TObject);

procedure FormCreate(Sender: TObject);

// объявление процедуры ShowTime

// помещено сюда вручную

// это сделано, чтобы функция имела

// доступ к компонентам формы напрямую

procedure ShowTime;

private

    { Private declarations )

public

    { Public declarations )

end;

var

Forml: TForml;

implementation

{$R *.dfm}                                                                                    :

// отображает текущее время

procedure TForml.ShowTime;

var

Time: TDateTime; // текущее время

begin

Time := Now();  // получить системное время

Labell. Caption := FormatDateTime ('hh-.mn:ss' ,Time) ;

end;

// обработка события Paint

procedure TForml.FormPaint(Sender: TObject);

begin

ShowTime;  // отобразить часы

end;

// обработка сигнала таймера

procedure TForml.TimerlTimer(Sender: TObject);

begin

ShowTime;  // отобразить время 

end;

procedure TForml.FormCreate(Sender: TObject);

begin

// настроить и запустить таймер

Timerl.Interval := 1000;  // период сигналов таймера 1 с

Timerl.Enabled := True;   // пуск таймера 

end;

end.

3. Работа с графическими объектами

6. Напишите программу, в диалоговом окне которой, в точке щелчка кнопкой мыши, вычерчивается контур пятиконечной звезды. [2, 37-39]

iunit Stars_;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, StdCtrls;

type

TForml = class(TForm)

          procedure FornMouseDown(Sender: TObject; Button: TMouseButton;

               Shift: TShiftState; X, У: Integer);

private

 { Private declarations }

public

 { Public declarations )

     procedure StarLine(xO,yO,r: integer); // рисует звезду 

   end;

var

Forml: TForml;

implementation

{$R *.dfm}

// рисует звезду

procedure TForml.StarLine(xO,yO,r: integer);

// x0, y0 координаты центра звезды

//rрадиус звезды

Var

р : array[l..ll] of TPoint; // массив координат лучей и впадин 

a: integer;  // угол между осью ОХ и прямой, соединяющей центр звезды и конец луча или впадину

 i: integer;

begin

а := 18; // строим от правого горизонтального  луча

for i:=l to 10 do begin

if (i mod 2=0) then begin // впадина

p[i].x := xO+Round(r/3*cos(a*2*pi/360));

p[i].y:=yO-Round(r/3*sin(a*2*pi/360));

end

else

begin // луч

p[i].x:=x0+Round(r*cos(a*2*pi/360));

p[i].y:=yO-Round(r*sin(a*2*pi/360));

end;

a := a+36;

end;

p[ll].X := p[l].X; // чтобы замкнуть контур звезды 

p[ll].Y :=p[l].Y;

Canvas.Polyline (p); // начертить контур звезды

 end;

// нажатие кнопки мыши

procedure TForml.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

if Button = mbLeft // нажата левая кнопка?

then Canvas.Pen.Color := clBlack

else Canvas.Pen.Color := clRed;

StarLine(x, y, 30);

end;

end.

7. Напишите программу, которая на поверхности формы вычерчивает график функции, например 2 sin(x) ex/5. Вид окна во время работы программы приведен на рисунке. [1, 61-62]

// Функция, трафик которой надо построить

Function f(x:real):real;

begin

f:=2*Sin(x)*exp(x/5);

end;

// строит график функции

procedure GrOfFunc;

var

xl,x2:real;   // границы изменения аргумента функции

yl,y2:real;   // границы изменения значения функции

x:real;      // аргумент функции

у:real;      // значение функции в точке х

dx:real;      // приращение аргумента

l,b:integer;  // левый нижний угол области вывода трафика

w,h:integer;  // ширина и высота области вывода графика

mx,my:real;   // масштаб по осям X и У

хО,уО:integer; // точка — начало координат

begin

// область вывода графика

1:=10;         // X — координата левого верхнего угла

b:=Forml.ClientHeight-20;  // Y - координата левого верхнего  угла

h:=Forml.ClientHeight-40;     // высота

 w:=Forml.Width-40;                // ширина

xl:=0;         // нижняя граница диапазона аргумента

х2:=25;         // верхняя граница диапазона аргумента

dx:=0.01;    // шаг аргумента

//найдем максимальное и минимальное значения функции на отрезке [xl,x2]

yl:=f(xl); // минимум

у2:=f(xl); // максимум

х: =xl;

repeat

у := f(x);

if у < yl then yl:=y;

if у > у2 then у2:=у;

x:=x+dx;

until (х>=х2);

// вычислим масштаб

my:=h/abs(y2-yl); // масштаб по оси У

mx:=w/abs(x2-xl);  // масштаб по оси X

// оси

 хО:=1;

yO:=b-Abs(Round(yl*my));.

with forml. Canvas do

begin

// оси

MoveTo(1,b);LineTo(1,b-h);

MoveTo(xO,yO);LineTo (xO+w,yO) ;

Text0ut(l+5,b-h, FloatToStrF(y2,ffGeneral,6,3)) ;

TextOut(l+5,b,FloatToStrF(yl,ffGeneral,6,3)) ;

// построение графика

x:=xl;

repeat

y:=f(x);

Pixels[xO+Round(x*mx),yO-Round(y*my)]:=clRed;

x:=x+dx;

until (x>=x2);

end;

end;

procedure TForml.FormPaint(Sender: TObj ect);

begin

GrOfFunc;

end;

// изменился размер окна программы

 procedure TForml.FormResize(Sender: TObject);

begin

// очистить форму

forml.Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));

// построить график

GrOfFunc;

end;

8. Напишите программу, по поверхности формы которой движется изображение. Изображение перемещающегося объекта и фоновый рисунок должны загружаться из файла. [3, 321-322]

unit aplane_;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Buttons;

type              

TForml = class(TForm)

Timerl: TTimer;

Image1; T Image;

procedure TimerlTimer(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormCreate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

 end;

var

Forml: TForml;

implementation

($R *.DFM)

var

Back, Picture: TBitMap; // фон и картинка

BackRct : TRect;      // положение и размер области фона,

// которая должна быть восстановлена

х,у:integer; // текущее положение картинки

W,H: integer; // размеры картинки

procedure TForml.FormCreate(Sender: TObject);

begin

{ Свойству AutoSize обязательно надо присвоить значение False. Это можно сделать во время создания формы, )

Imagel.AutoSize := False;

// создать два объекта битовых образа

Back := TBitmap.Create;    // фон 

Picture := TBitmap.Create;  // картинка

// загрузить и вывести фон

Back.LoadFromFile('factory.bmp);

Image1.Width  := Back.Width;

Imagel.Height := Back.Height;

Imagel.Canvas.Draw(0,0,Back);

// загрузить картинку, которая будет двигаться

Picture.LoadFromFile('aplane.bmp');

W := Picture.Width;

H := Picture.Height;

// определим "прозрачный" цвет

Picture.Transparent := True;

// прозрачный цвет картинки определяет

// левый верхний пиксел картинки

Picture.TransParentColor := Picture.Canvas.Pixels[1,1];

// начальное положение картинки

 x := -W;

у := 20;

// определим сохраняемую область фона

BackRct:=Bounds(х,у,W,Н);

end;

// обработка сигнала таймера

procedure TForml.TimerlTimer(Sender: TObject);

begin

// восстановлением фона удалим рисунок

Imagel.Canvas.CopyRect(BackRct,Back.Canvas,BackRct);

x:=x+2;

if x > Imagel.Width then x:=-W;

// определим сохраняемую область фона

BackRct:=Bounds(x, у, W, H) ;

// выведем рисунок 

Imagel.Canvas.Draw(x,y,Picture);

end;

// завершение работы программы

procedure TForml.FormClose(Sender: TObject;  var Action: TCloseAction);

begin

// освободим память, выделенную для хранения битовых образов

Back.Free;

Picture.Free;

end;

end.

9. Напишите программу, в окне которой отображается "мультик", загруженный из BMP-файла. Пример мультика (картинка, которая находится в BMP-файле) — на рисунке [4, 472-473]

implementation

($R *.DFM)

const

FILMFILE = 'delphi.bmp'; /, фильм - BMP-файл

N_KADR=12; // кадров в фильме (для данного файла)

var

Film: TBitMap;                  // фильм — все кадры

WKadr,HKadr: integer;   // ширина и высота кадра

CKadr: integer;                // номер текущего кадра

RectKadr: TRect;              // положение и размер кадра в фильме

RectScr : Trect;            // координаты и размер области

                                     // отображения фильма

procedure TForml.FormCreate(Sender: ТОЬj ect);

begin

Film := TBitMap.Create;      // создать объект типа TBitMap

Film.LoadFromFile(FILMFILE); // загрузить "фильм" из файла

WKadr := Round(Film.Width/N_Kadr);

HKadr := Film.Height;

RectScr := Bounds(10,10,WKadr,HKadr);

Ckadr:=0;

Timerl.Interval := 150; // период обновления кадров — 0.15 сек Timer1.Enabled:=True; // запустить таймер 

end;

// обработка сигнала от таймера

procedure TForml.TimerlTimer(Sender: TObject);

begin

// определим положение текущего кадра в фильме

RectKadr:=Bounds(WKadr*CKadr,0,WKadr,HKadr);

// вывод кадра из фильма

Forml.Canvas.CopyRect(RectScr,Film.Canvas,RectKadr);

// подготовимся к выводу следующего кадра 

CKadr := CKadr+1;

if CKadr =. NJCADR then CKadr:=0;

end;

end.


Заключение

Исследование в области решения тренировочных задач со стандартными объектами Delphi 7, предпринято в связи с тем, что данный тип задач весьма актуален в работе с объектами операционных систем и подобных оконных приложений и является неотъемлемой частью информационной сферы деятельности, широко изучается в программировании  и базовом курсе информатики.

В процессе выполнения работы изучена литература по вопросам условий и выборки. Проанализированы и обработаны девять программ в среде Delphi 7. Программное решение наиболее распространённых задач дало положительный результат. Выдвинутая гипотеза о существовании спектра задач разрешимых только с помощью стандартных объектов Delphi 7 обоснована и доказана.

Предложенные алгоритмы имеют характер традиционных, решаемых в при изучении базового курса информатики. Все предложенные в работе программы имеют, с той или иной условностью, практическое применение.

Алгоритмы и программы, рассмотренные в работе можно рекомендовать при изучении основ алгоритмизации и программирования в средних и средних специальных учебных заведениях.


Литература

  1.  Бобровский С.Ю. Delphi 7. Учебный курс. СПб.: Питер, 2007. – 736с.
  2.  Культин Н.Б. Delphi 7 в задачах и примерах. – СПб.: БХВ-Петербург, 2005. – 288 с.
  3.  Могилёв А.В., Пак Н.И., Хеннер Е.К. Информатика. – М.: ACADEMIA, 2001. – 816 с.
  4.  Могилёв А.В., Пак Н.И., Хеннер Е.К. Практикум по информатика. – М.: ACADEMIA, 2002. – 786 с.


 

А также другие работы, которые могут Вас заинтересовать

28411. Персона нон грата 30 KB
  persona non grata нежелательная персона нежелательное лицо Согласно статье 9 Венской конвенции о дипломатических сношениях 1961 год принимающее государство может в любое время и без необходимости объяснения причины объявить любого члена дипломатического корпуса персоной нон грата даже до того как этот человек прибыл в страну. Обычно лицо объявленное персоной нон грата должно покинуть страну в противном случае государство может отказаться признавать это лицо членом дипломатической миссии. Объявление лица персоной нон...
28413. ВАЛИЗА 115.1 KB
  каждая из которых обладает неприкосновенностью не подлежит ни вскрытию ни задержанию властями иностранного государства. хотя и говорит о недопустимости ее вскрытия и задержания но устанавливает что в тех случаях когда компетентные власти государства пребывания имеют серьезные основания полагать что в В. была вскрыта в их присутствии уполномоченным представителем иностранного государства.
28415. Привилегии и иммунитеты дипломатического представительства 28 KB
  Привилегии lexprivus особые правовые преимущества льготы. Иммунитеты и привилегии предоставляются не для личных выгод а для обеспечения эффективного осуществления функций дипломатических представительств как органов представляющих государство. В Венской конвенции 1961 года дипломатические иммунитеты и привилегии подразделены на иммунитеты и привилегии дипломатического представительства и личные иммунитеты и привилегии членов дипломатического персонала и их семей. К первой категории относятся: неприкосновенность помещений...