47332 (Інформаційно-довідкова система), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Інформаційно-довідкова система", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "47332"

Текст 2 страницы из документа "47332"

Кафедра Обчислювальної техніки та програмування

ЗАТВЕРДЖУЮ

Завідувач кафедри ОТП

__________ /Xxxxxxxxxxx./

"___" __________ 2007р.

Розрахунково-графічне завдання № 1, 2

ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМА

Програма та методика іспитів

ЛИСТ ЗАТВЕРДЖЕННЯ

Xxxxxxxxxxx-01 51 01-1-ЛЗ

Розробники

Керівник проекту

__________ /доц. Xxxxxxxxxxx./

"___" __________ 2007 р.

Виконавець

__________ /студ. Xxxxxxxxxxx./

"___" __________ 2007 р.

2007

УЗГОДЖЕНО

Xxxxxxxxxxx-01 51 01-1-ЛЗ

Розрахунково-графічне завдання № 1, 2

ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМА

Програма та методика іспитів

Xxxxxxxxxxx-01 51 01-1

2007

  1. Об’єкт іспитів

Програма являє собою модуль, що складається з трьох файлів:

  • RGZ.cpp (Основний файл, містить функцію main( ) );

  • RGZ_DSC.cpp (Файл, що містить опис функцій класів) ;

  • RGZ.Н (Файл, що містить опис класів)

Об’єктом іспитів є нижче приведена програма.

  1. Мета іспитів

Мета іспитів – це впевнитися у правильності роботи даної програми та оцінити її ефективність.

Тести, котрі перевірюють правильність роботи програми приведені у пункті «Засоби та порядок випробувань».

  1. Вимоги до програми та програмного документа

Функціонування системи цілком забезпечується стандартною конфігурацією IBM сумісних персональних ЕОМ.

Основна вимога до програми – це чітке демонстрування поліморфізму та правильність роботи, а також, втілення основної задачі.

  1. Засоби та порядок іспитів

Засобом іспитів є введення інформації за підказками, які з’являються у процесі роботи програми. Шляхом порівняння фактичного результату роботи програми з прогнозованими результатами, встановлюється вірність роботи програми.

Розглянемо виконання програми по пунктах:

  • Перед користувачем з'являється повідомлення: "Vvedite nomer operatsii".

  • Якщо ви натиснете клавішу "1", то виконаєте наступні дії:

Sozdanie tablizi dannih

Vvedite N: 3

Vvedite tip zapisi [0..2]: 2

Vvedite nazvanie alboma: qqq

Vvedite god vipuska: 1889

Vvedite kl-vo trekov v albome: 11

Vvedite prodolzitelnost alboma po vremeni: 60

Vvedite kolichestvo bonus trekov: 2

Vvedite tip zapisi [0..2]: 0

Vvedite nazvanie alboma: www

Vvedite god vipuska: 1990

Vvedite kl-vo trekov v albome: 12

Vvedite tip zapisi [0..2]: 1

Vvedite nazvanie alboma: eee

Vvedite god vipuska: 1991

Vvedite kl-vo trekov v albome: 13

Vvedite prodolzitelnost alboma po vremeni: 58

  • При натисканні на клавішу "2" на екрані з'явиться таблиця яку ви заповнили вище:

Vivod na ekran

|Nazv |God |Treki |Vremya |Bonus+

-------------------------------------------------------

qqq 1889 11 60 2

www 1990 12

eee 1991 13 58

Vivod na ekran zavershen.

  • Якщо ви натиснете "3", то на екрані з'явиться повідомлення:

Vvedite nomer operatsii:3

Vivod v fail a.dat

Vivod v fail uspeshno zavershen.

  • Якщо ви натиснете "4", то на екрані з'явиться повідомлення:

Vvedite nomer operatsii:4

Chtenie iz faila a.dat

Chtenie iz faila uspeshno zavershena.

  • При натисканні на клавішу "5" на екрані з'явиться повідомлення та ви виконаєте наступні дії:

Vvedite nomer operatsii:5

Poisk obyekta

Vvedite kluch dlya poiska(nazvanie alboma): www

Zapis bila naidena.

|Nazv |God |Treki |Vremya |Bonus+

-------------------------------------------------------

www 1990 12

  • Якщо ви натиснете "6", то на екрані з'явиться повідомлення та ви виконаєте наступні дії:

Vvedite nomer operatsii:6

Redaktirovanie zapisi

Vvedite nomer zapisi: 2

vedite nazvanie alboma: rrr

vedite god vipuska: 1234

vedite kl-vo trekov v albome: 13

vedite prodolzitelnost alboma po vremeni: 56

Redaktirovanie uspeshno zaversheno.

  • Результатом ваших дій буде те, що один запис у таблиці зміниться:

Vivod na ekran

|Nazv |God |Treki |Vremya |Bonus+

-------------------------------------------------------

qqq 1889 11 60 2

www 1990 12

rrr 1234 13 56

Vivod na ekran zavershen.

  • При натисканні на клавішу "7" на екрані з'явиться повідомлення та ви виконаєте наступні дії:

Vvedite nomer operatsii:7

Vstavka novoi zapisi

Vvedite tip novoy zapisi [0..2]: 2

vedite nazvanie alboma: zzz

vedite god vipuska: 1534

Vvedite kl-vo trekov v albome: 13

Vvedite prodolzitelnost alboma po vremeni: 222

Vvedite kolichestvo bonus trekov: 1

Vstavka zapisi uspeshno zaversena.

  • Результатом ваших дій буде те що один запис у таблиці зміниться:

Vivod na ekran

|Nazv |God |Treki |Vremya |Bonus+

-------------------------------------------------------

qqq 1889 11 60 2

www 1990 12

rrr 1234 13 56

zzz 1534 11 222 1

Vivod na ekran zavershen.

  • Якщо ви натиснете "8" то на екрані з'явиться повідомлення та ви виконаєте наступні дії:

Vvedite nomer operatsii:8

Udalenie zapisi

Vvedite nomer zapisi dlya udalenia:1

Zapis bila udalena.

  • Результатом ваших дій буде те, що один запис у таблиці буде знищено:

Vivod na ekran

|Nazv |God |Treki |Vremya |Bonus+

-------------------------------------------------------

qqq 1889 11 60 2

rrr 1234 13 56

zzz 1534 11 222 1

Vivod na ekran zavershen.

  • При натисканні на клавішу "9" на екрані з'явиться повідомлення та ви виконаєте наступні дії:

Vvedite nomer operatsii:9

Poisk obyekta s minimalnim kl-vom trekov v zadannom diapazone let

Vvedite leviy predel poiska(god): 1

Vvedite praviy predel poiska(god): 1600

Zapis bila naidena.

|Nazv |God |Treki |Vremya |Bonus+

-------------------------------------------------------

zzz 1534 11 222 1

  • При натисканні на клавішу "10" програму буде завершено.

Кожний отриманий результат відповідає поставленій задачі.

Отриманні результати збігаються з прогнозами, щодо вірності роботи даної програми, тобто задача виконана вірно.

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

"ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ

Кафедра Обчислювальної техніки та програмування

ЗАТВЕРДЖУЮ

Завідувач кафедри ОТП

__________ /Xxxxxxxxxxx./

"___" __________ 2007р.

Розрахунково-графічне завдання № 1, 2

ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМА

Текст програми

Xxxxxxxxxxx-01 12 01-1-ЛЗ

Розробники

Керівник проекту

__________ /доц. Xxxxxxxxxxx./

"___" __________ 2007 р.

Виконавець

__________ /студ. Xxxxxxxxxxx./

"___" __________ 2007 р.

2007

УЗГОДЖЕНО

Xxxxxxxxxxx-01 81 01-1-ЛЗ

Розрахунково-графічне завдання № 1, 2

ІНФОРМАЦІЙНО-ДОВІДКОВА СИСТЕМА

Текст програми

Xxxxxxxxxxx-01 12 01-1

2007

Текст програми

//Заголовковий файл

#include

class album

{

public:

album() {}

virtual void input();

virtual void output();

char nazv[4];//Назва

int god;//Рік випуску

~album() {}

};

class album1: public album

{ protected:

int trek;//Кількість треків

public:

album1();

virtual void input();

virtual void output();

int getTrek()

{

return trek;

}

void setTrek(int c)//ф-ція створення поля

{

trek=c;

}

~album1();

};

class album2: public album1

{

protected:

int time;//Час звучання

public:

album2();

virtual void input();

virtual void output();

int getTime()

{

return time;

}

void setTime(int c)

{

time=c;

}

~album2();

};

class album3: public album2

{

protected:

int bonus;//Кількість бонус треків

public:

album3();

virtual void input();

virtual void output();

int getBonus()

{

return bonus;

}

void setBonus(int c)

{

bonus=c;

}

~album3();

};

class Tool

{

public:

album *d;

int t;

friend class Trist;//об'явлення дружнього класу

Tool *right,*left;

};

class Trist

{

public:

Tool *head,*tail;

Tool *current;

Trist(int type,int vvod);//Конструктор

void add(int type, int vvod);//ф_ція добавлення об’єктів

~Trist();//Деструктор

};

//Описний файл

#include "RGZ.h"

#include

#include

#include

#include

void album::input()//ф-ція вводу

{

cout << "Vvedite nazvanie alboma: ";

cin >> nazv;

nazv[3]=NULL;

cout << "Vvedite god vipuska: ";

cin >> god;

}

void album::output()//ф-ція виводу

{

cout << endl<< setw(10) << setiosflags(ios::left) << nazv

<< setw(10) << setiosflags(ios::left) << god;

}

album1::album1():album() {}//конструктор

album1::~album1(){ album::~album(); }//деструктор

void album1::input()

{

album::input();

cout << "Vvedite kl-vo trekov v albome: ";

cin >> trek;

}

void album1::output()

{

album::output();

cout<< setw(10) << setiosflags(ios::left) << trek;

}

album2::album2():album1() {}

album2::~album2() { album1::~album1(); }

void album2::input()

{

album1::input();

cout << "Vvedite prodolzitelnost alboma po vremeni: ";

cin >> time;

}

void album2::output()

{

album1::output();

cout << setw(12) << setiosflags(ios::left) << time;

}

album3::album3():album2() {}

album3::~album3() { album2::~album2(); }

void album3::input()

{

album2::input();

cout << "Vvedite kolichestvo bonus trekov: ";

cin >> bonus;

}

void album3::output()

{

album2::output();

cout << setw(10) << setiosflags(ios::left) << bonus;

}

void caption()//заголовкова ф-ція

{

cout << endl << setw(10) << setiosflags(ios::left) << "|Nazv"

<< setw(10) << setiosflags(ios::left) << "|God"

<< setw(10) << setiosflags(ios::left) << "|Treki"

<< setw(10) << setiosflags(ios::left) << "|Vremya"

<< setw(10) << setiosflags(ios::left) << "|Bonus+"<< endl;

cout << "-------------------------------------------------------";

}

Trist::Trist(int type, int vvod)//Створення списку об'єктів

{

album1 *pr;

album2 *sp;

album3 *fl;

head = new Tool;

head->t = type;

if (head->t == 0)

{

pr = new album1;

if (vvod)

pr->input();

head->d=pr;

} else

if (head->t == 1)

{

sp = new album2;

if (vvod)

sp->input();

head->d=sp;

} else

if (head->t == 2)

{

fl = new album3;

if (vvod)

fl->input();

head->d=fl;

}

head->right=NULL;

head->left=NULL;

tail=head;

current=head;

}

Trist::~Trist()//Висвободження памяті

{

Tool *h;

h=head;

while (h!=0)

{ head=head->right;

head->left=NULL;

delete h;

h=head;

}

}

void Trist::add(int type, int vvod)//додавання нового об’єкта у список

{

Tool *q = new Tool;

album1 *pr;

album2 *sp;

album3 *fl;

q->t = type;

switch (q->t)

{

case 0:

pr = new album1;

if (vvod)

pr->input();

q->d=pr;

break;

case 1:

sp=new album2;

if (vvod)

sp->input();

q->d=sp;

break;

case 2:

fl=new album3;

if (vvod)

fl->input();

q->d=fl;

break;

}

if (current==tail)

{

q->right=NULL;

q->left=current;

current->right=q;

tail=q;

current=q;

} else

{ q->right=current->right;

current->right->left=q;

current->right=q;

q->left=current;

current=q;

}

}

//Головний файл

#include "RGZ_dsc.cpp"

#include

#include

#include

#include

void sozdan(Trist *&a, int n);//створення

void output(Trist *&a);//вивід на екран

void output_file(Trist *&a, int n);//вивід до файлу

void input_file(Trist *&a);//читання з файлу

Tool* pois(Trist *&a, char* nazv);//ф-ція пошуку

Tool* zadacha(Trist *&a,int godL,int godR);//виконання задачі

void main()//Головна програма

{

int i,N=5,k;

Trist *a = NULL;

clrscr();

randomize();

while (1)

{

cout << "\n\n############################";

cout << "\n# 1 - Sozdanie bazi dannih #";

cout << "\n# 2 - Vivod na ekran #";

cout << "\n# 3 - Vivod v fail #";

cout << "\n# 4 - Chtenie iz faila #";

cout << "\n# 5 - Poisk #";

cout << "\n# 6 - Redaktirovanie zapisi #";

cout << "\n# 7 - Vstavka novoi zapisi #";

cout << "\n# 8 - Udalenie zapisi #";

cout << "\n# 9 - Vipolnrnie zadachi #";

cout << "\n# 10 - Vihod #";

cout << "\n\n############################";

cout << "\n Vvedite nomer operatsii:";

cin >> k;

switch (k)

{

case 1:

cout << "\n Sozdanie tablizi dannih";

cout << "\n Vvedite N: ";

cin >> N;

sozdan(a,N);

cout << "\n Tabliza dannih sozdana.";

getch();

break;

case 2:

cout << "\n Vivod na ekran ";

output(a);

cout << "\n Vivod na ekran zavershen.";

getch();

break;

case 3:

cout << "\n Vivod v fail a.dat ";

output_file(a,N);

cout << "\n Vivod v fail uspeshno zavershen.";

getch();

break;

case 4:

cout << "\n Chtenie iz faila a.dat ";

input_file(a);

cout << "\n Chtenie iz faila uspeshno zavershena.";

getch();

break;

case 5:

cout << "\n Poisk obyekta ";

cout << "\n Vvedite kluch dlya poiska(nazvanie alboma): ";

char *nazv;

cin >> nazv;

Tool *n;

// n=NULL;

n = pois(a,nazv);

if (n==NULL) cout << "\n Zapis ne naidena.";

else

{

cout << "\n Zapis bila naidena.";

caption();

n->d->output();

}

delete nazv;

getch();

break;

case 6:

cout << "\n Redaktirovanie zapisi ";

cout << "\n Vvedite nomer zapisi: ";

int c;

cin >> c;

a->current=a->head;

for (i=0;a->current!=NULL;i++)

{

if (i==c)

{

a->current->d->input();

break;

}

a->current=a->current->right;

}

cout << "\n Redaktirovanie uspeshno zaversheno.";

getch();

break;

case 7:

cout << "\n Vstavka novoi zapisi ";

cout << "\n Vvedite tip novoy zapisi [0..2]: ";

int p = 0;

cin >> p;

a->current=a->tail;

a->add(p,1);

cout << "\n Vstavka zapisi uspeshno zaversena.";

getch();

break;

case 8:

cout << "\n Udalenie zapisi ";

cout << "\n Vvedite nomer zapisi dlya udalenia: ";

int j = 0;

cin >> j;

a->current=a->head;

for (i=0;a->current!=NULL;i++)

{

if (i==j)

{

Tool *q = a->current;

if (q->left!=NULL) q->left->right = q->right;

if (q->right!=NULL) q->right->left = q->left;

if (q==a->head) a->head=q->right;

if (q==a->tail) a->tail=q->left;

delete q;

a->current = a->tail;

break;

}

a->current=a->current->right;

}

cout << "\n Zapis bila udalena.";

getch();

break;

case 9:

cout << "\n Poisk obyekta s minimalnim kl-vom trekov v zadannom diapazone let";

cout << "\n Vvedite leviy predel poiska(god): ";

int godL,godR;

cin >> godL;

cout << "\n Vvedite praviy predel poiska(god): ";

cin >> godR;

Tool *k;

k = zadacha(a,godL,godR);

if (n==NULL) cout << "\n Zapis ne naidena.";

else

{

cout << "\n Zapis bila naidena.";

caption();

k->d->output();

}

getch();

break;

case 10:

delete a;

exit(0);

break;

}

}

}

void sozdan(Trist *&a, int n)

{

if (a!=NULL)

delete a;

cout << "\nVvedite tip zapisi [0..2]: ";

int k;

cin >> k;

a = new Trist(k,1);

for (int i=1;i

{

cout << "\nVvedite tip zapisi [0..2]: ";

cin >> k;

a->add(k,1);

}

}

void output(Trist *&a)

{

caption();

a->current=a->head;

while (a->current!=NULL)

{

a->current->d->output();

a->current=a->current->right;

}

}

void output_file(Trist *&a, int n)

{

ofstream file("a.dat",ios::out|ios::binary);

if (!file)

{

cerr << "\nOshibka vivoda v fail!\n";

getch();

exit(1);

}

file.seekp(0);

file.write((char*)&(n),sizeof(n));

a->current=a->head;

while (a->current!=NULL)

{

file.write((char*)&(a->current->t),sizeof(a->current->t));

file.write(a->current->d->nazv,sizeof(a->current->d->nazv));

switch (a->current->t)

{

case 0:

album1 *obj1;

obj1=(album1*)a->current->d;

int trek = obj1->getTrek();

file.write((char*)&(trek),sizeof(trek));

break;

case 1:

album2 *obj2;

obj2=(album2*)a->current->d;

trek = obj2->getTrek();

int time = obj2->getTime();

file.write((char*)&(trek),sizeof(trek));

file.write((char*)&(time),sizeof(time));

break;

case 2:

album3 *obj3;

obj3=(album3*)a->current->d;

trek = obj3->getTrek();

time = obj3->getTime();

int bonus = obj3->getBonus();

file.write((char*)&(trek),sizeof(trek));

file.write((char*)&(time),sizeof(time));

file.write((char*)&(bonus),sizeof(bonus));

break;

}

a->current=a->current->right;

}

file.close();

}

void input_file(Trist *&a)

{

ifstream file("a.dat",ios::in);

if (!file)

{

cerr << "\nOshibka chtenia faila!\n";

getch();

exit(1);

}

int n;

file.read((char*)&(n),sizeof(n));

int i;

delete a;

for (i=0;i

{

int t;

file.read((char*)&(t),sizeof(t));

if (i==0) a=new Trist(t,0); else a->add(t,0);

file.read((char*)&(a->current->d->nazv),sizeof(a->current->d->nazv));

switch (t)

{

case 0:

album1 *obj1;

obj1=(album1*)a->current->d;

int trek = 0;

file.read((char*)&(trek),sizeof(trek));

obj1->setTrek(trek);

break;

case 1:

album2 *obj2;

obj2=(album2*)a->current->d;

trek = 0;

int time = 0;

file.read((char*)&(trek),sizeof(trek));

file.read((char*)&(time),sizeof(time));

obj2->setTrek(trek);

obj2->setTime(time);

break;

case 2:

album3 *obj3;

obj3=(album3*)a->current->d;

trek = 0;

time = 0;

int bonus = 0;

file.read((char*)&(trek),sizeof(trek));

file.read((char*)&(time),sizeof(time));

file.read((char*)&(bonus),sizeof(bonus));

obj3->setTrek(trek);

obj3->setTime(time);

obj3->setBonus(bonus);

break;

}

}

file.close();

}

Tool* pois(Trist *&a, char* nazv)

{

Tool *n = NULL;

a->current=a->head;

while (a->current!=NULL)

{

n = a->current;

if (strcmp(n->d->nazv,nazv)==0) break;

else n=NULL;

a->current=a->current->right;

}

return n;

}

Tool* zadacha(Trist *&a,int godL,int godR)

{

Tool *k = NULL;

a->current=a->head;

int max=1000;

while (a->current!=NULL)

{

k = a->current;

if(k->d->god>godL)

if(k->d->god

if(k->d->trek

else k=NULL;

a->current=a->current->right;

}

return k;

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
427
Средний доход
с одного платного файла
Обучение Подробнее