Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Оператор безумовного переходуСодержание книги
Похожие статьи вашей тематики
Поиск на нашем сайте
Більшість програм реалізується шляхом виконання операторів, що керують ходом обчислювального процесу. До них відносяться: оператори безумовного й умовного переходів, оператор вибору. • Оператор безумовного переходу – GoTo Для нього характерний такий синтаксис: GoTo <мітка>. Тут мітка являє собою сукупність букв і цифр кількістю не більшt 40. Крім оператора, мітка ставиться на початку рядка, до якого потрібно перейти, і закінчується вона двокрапкою. Наприклад: GoТо М1 оператори програми М1: оператор 6.2. Оператор умовного переходу
Цей оператор має такий синтаксис для різних його типів: ● Простий оператор: If умова Then оператор 1 [ Else оператор 2 ] У даному випадку, якщо виконується зазначена умова, то керування процесом передається операторові 1, в інакших випадках – операторові 2. Приклад: If х>=0 Then y = a*x + b Else y = a*x-b, де у, а, х, b – імена змінних. Примітка. Якщо оператор не поміщається в рядку вікна, то його можна перенести на наступний рядок, використовуючи в місці розриву знак підкреслення _. ● Складний оператор: If умова 1 Then [оператори] [Elseif умова 2 Then [оператори] [Else [оператори]] End if Складний оператор може включати вкладені умови. Він завжди записується відповідно до встановленої синтаксисом структури і закінчується зарезервованим словом End if. Примітка. Якщо кілька операторів в одному рядку відносяться до частин Then або Else, то вони відокремлюються один від одного двокрапкою. Сам оператор If може вступати в дію у простій або складній формі. Наприклад, y=
Виконуючи обчислення за першою формулою, крім зазначених умов, необхідно передбачити, щоб а 0, b 0. Тоді запис складного оператора буде мати такий вигляд: If Val(a.Text) <= 5 And Val(x.Text) =6 Then у = (Val(a.Text) + Val(b.Text)) / Val(x.Text) Elself Val(a.Text) <= 5 And Val(x.Text) > 6 And Val(a.Text) <> 0 And _ Val(b.Text) <> 0 Then у = Val(x.Text) / Val(a.Text) - Val(x.Text) / Val(b.Text) Else у = Val(a.Text) ^3 + Val(b.Text) * exp(2.5) End If У цьому записі передбачено, що у, а, х, b являють собою імена текстових елементів (Textbox), е2'5 –експоненціальну функцію. Оператор вибору Для виконання однієї з багатьох альтернативних дій зручно використовувати оператор вибору, для якого передбачено такий синтаксис:
Select Case < змінна > [Case порівняння 1 [оператори]] [Case порівняння 2 [оператори]]... [CaseElse [ оператори ]] 'це необов'язковий оператор конструкції End select При цьому вибір варіанта залежить від значення керуючої змінної, котре порівнюється з умовами, що подаються після оператора Case. Якщо всі порівняння невдалі, то виконуються оператори записані після Case Else. Умови, які перебувають у полі порівняння, можуть мати досить різноманітний характер. Наприклад: Select Case alfa Case 1 'оператори відсутні Case 2 То 4, 7 То 9,11,13, Is > Max 'значення alfa порівнюється з 2, 3, 4, 7, 8, 9, 11, 13 і з Мах. 'Якщо значення змінної співпаде з яким-небудь 'числу або виконається порівняння, то відпрацюють два 'наступних оператори і потім End Select. b.Text=alfa + Мах Printer.Print "b= ", b.Text Case Else alfa=0 End Select
Приклад 6.1 Завдання: спроектувати форму і створити програмний код для обчислення такої функції: S = 320 + x * t, якщо відомі діапазони, в яких змінюються величини x й t: –750 < x <= 750 і –500 < t <=500. У створеному проекті встановити командну кнопку для очищення полів уведення/виведення, передбачити можливість уведення вхідних даних як за допомогою лінійок прокручування (у разі, коли числа цілі й перебувають у зазначених діапазонах), так і безпосередньо через текстові вікна; уставити оператори контролю введення даних користувачем (повинні вводитися тільки числа, в іншому випадку необхідно видати повідомлення про помилку). Виконання. В екранну форму встановити дві лінійки прокручування для вибору значень змінних x і t. Послідовність дій, спрямовану на додавання лінійок у форму та встановлення властивостей для них, описано нижче. Контроль уведення даних необхідно виконувати в текстових вікнах x й t. Користувач може набирати цифри, знаки + або –, використовувати клавіші Delete і Backspace, закінчувати введення даних клавішею Enter, усі інші символи повинні зумовлювати повідомлення про помилку. При натисканні на зазначені клавіші на клавіатурі в комп'ютер надходить відповідний код, який можна перевіряти програмно. Оскільки перевіряти потрібно досить велику кількість кодів, то в цьому випадку краще використовувати оператор Select case. При цьому спочатку виконують перевірку введення, а потім обчислення, натискуючи клавішу Enter на клавіатурі. Щоб виконати завдання, сформульоване у прикладі 6.1, потрібно провести такі операції: 1. Створити форму. Схему розміщення компонентів на поверхні форми забражено на рис. 6.1. 2.Створити лінійки для вибору значень змінної x таким чином: ● на панелі інструментів вибрати елемент керування – VscrollBar, створити за його допомогою лінійку прокручування й розмістити її у формі, як це показано на рис. 6.1 (vscroll1);
● активізувати вікно Properties і в ньому встановити властивості такі для лінійки: Name – Vscroll1 Max – 750 Min – –750 Value – 0 SmallChange – 1 LargeChange – 10
3. Створити лінійку для вибору значень змінної t: ● на панелі інструментів вибрати елемент керування VscrollBar, створити за його допомогою лінійку прокручування і розмістити її у формі, як це показано на рис. 4.1 (vscroll2); ● активізувати вікно Properties і в ньому встановити властивості такі для лінійки: Name – vscroll2 Max – 500 Min – –500 Value – 0 SmallChange – 1 LargeChange – 6 4. Внести таки доповнення в програмний код: ● подвійним клацанням лівою клавішею миші по верхній (у формі проекту) лінійці прокручування відкрити вікно Code; ● для об'єкта x вибрати подію Change і дописати процедуру, виконання, якої буде необхідним після настання події, тобто переміщення бігунка на лінійці із контролем уведених даних: Private Sub VScroll1_Change() Text3.Text = VScroll1 mes.Caption = "Уведення змінної а в діапазоні –750...750" End Sub; ● для об'єкта x вибрати подію Scroll і дописати зміст процедури, виконуваної під час переміщення бігунка по лінійці, а саме: Private Sub VScroll1_Scroll() VScroll1_Change End Sub; ● аналогічно створити процедури для об'єкта t, тобто: Private Sub VScroll2_Change() Text4.Text = VScroll2 mes.Caption = "Уведення змінної а в діапазоні -500...500" End Sub; Private Sub VScroll2_Scroll() VScroll2_Change End Sub 5. Скористатись відомостями про призначення всіх інструментів, які розміщені на поверхні форми, за табл. 6.1. 6. Додати оператори контролю введення в код текстового вікна. Подвійним клацанням лівою клавішею миші по текстовому вікну text3 викликати вікно коду величини x, та у ньому відкрити подію KeyPress. При цьому з'являється заготівка процедури: Sub text3_КеуPress (KeyAscii As Integer) End Sub
Таблиця 6.1 Послідовність дій для створення форми проекту
Оголошений автоматично параметр KeyAscii служить для прийняття коду натиснутої на клавіатурі клавіші. Додати в заготівку оператор контролю введення таким чином: Private Sub text3_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 0, 8, 13, 45, 46, 48 To 57 '0,8 - Delete, BackSpace, 13 - Enter '45 – "–", 46 – ".", 48–57 – цифри від 0 до 9 Case Else KeyAscii = 0 mes.Caption = "Помилка уведення – Уведить число" End Select End Sub. 7. Додати оператори контролю введення в код текстового вікна text4. Для текстового вікна text4 усі дії виконуються аналогічно АБО у вікні коду t виділити рядки від Select case до End select, виконавши потім такі дії: скопіювати за допомогою пункту меню Edit → команда Copy; відкрити вікно коду текстового вікна text4, встановити подію KeyPress, а потім – пункт меню Edit → команду Paste. Остаточний вигляд екранної форми проекту для виконання завдання прикладу 6.1 подається на рис. 6.2.
8. Відобразити повний програмний код: ' Процедура очищення текстових вікон виведення результатів Private Sub Command2_Click() Text3.Text = "" Text4.Text = "" Text6.Text = "" mes.Caption = "" End Sub Private Sub VScroll2_Change() Text4.Text = VScroll2 mes.Caption = "Уведення змінної t в діапазоні –500...500" End Sub ' Контроль уведення даних Private Sub text3_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 0, 8, 13, 45, 46, 48 To 57 '0,8 – Delete, BackSpace, 13 – Enter '45 – "–", 46 – ".", 48–57 – цифри від 0 до 9 Case Else KeyAscii = 0 mes.Caption = " Помилка введення – Уведіть число " End Select End Sub ' Контроль уведення даних Private Sub text4_KeyPress(KeyAscii As Integer) Select Case KeyAscii Case 0, 8, 13, 45, 46, 48 To 57 '0,8 - Delete, BackSpace, 13 - Enter '45 - "-", 46 - ".", 48-57 - цифри від 0 до 9 Case Else KeyAscii = 0 mes.Caption = " Помилка введення – Уведіть число " End Select End Sub 9. Виконати створену програму, вибираючи значення для змінних величин x і t шляхом переміщення бігунків на лінійках прокручування. Приклад 6.2 Завдання: - Розробити й налагодити програму для обчислення функції Z у такому розгалуженому процесі: Виконання: Спочатку необхідно спроектувати електронну форму завдання (див. рис. 6.3). Занесення формули рекомендується здійснювати в текстовому редакторі Word, а потім скопіювати в керуючий елемент OLE. Послідовність операцій для виконання завдання, сформульованого в прикладі 4.2 така: 1. Створити електронну форму у проекту і задати властивості її елементів таким чином: ● запровадити дії аналогічні записаним у попередніх прикладах, при цьому імена компонентів полів відображено на рис. 6.3.
● створити форму Складне розгалуження, виконавши послідовно операції, перелічені в таблиці 6.2:
Таблиця 6.2
Послідовність операцій з метою створення форми – Складне розгалуження
2. Необхідний програмний код: ' Процедура розрахунку функції z Private Sub Raschet_Click() ' Оголошення типу даних Dim x, y, z As Single ' Перетворення рядкових даних у числові x = Val(Text2.Text) y = Val(Text3.Text) z = Val(Text4.Text)
' Вибір функції залежно від значення змінних x і y If x <= 2 And y >= 6 Then z1 = x * y - x * y ^ 2 Text4.Text = Str(Format$(z1, "0.00")) ElseIf x >= 0 And x >= 2 Then z1 = (x + y) ^ 2 / (x ^ 2 + 1) Text4.Text = Str(Format$(z1, "0.00")) Else z1 = x ^ 3 + y * Exp(2.5 * x) Text4.Text = Str(Format$(z1, "0.00")) End If End Sub
' Процедура виходу з програми Private Sub Vuxid_Click() End End Sub
' Процедура очищення текстових вікон Private Sub Och_Click() Text2.Text = "" Text3.Text = "" Text4.Text = "" End Sub Остаточний вигляд екранної форми проекту для виконання завдання з прикладу 6.2 подається на рис. 6.4. 3. Виконати створену програму, для чого необхідно спочатку ввести початкові дані: змінну x у вікно з підказкою " Х= ", а змінну у у вікно з підказкою " Y= ", а потім клацнути лівою клавішею миші у місці кнопки "Розрахунок". Результат розрахунку функції z виводиться у вікні з підказкою " Z= ".
6.4. Селекторні кнопки (перемикачі), прапорці, рамки
Опис роботи при виконанні попередніх прикладів показав, що користувач працював "наосліп", тобто уводив дані й одержував відповідь. Усе, про що його інформувала програма – це умова завдання. Можна зробити користувача більш активним учасником процесу, наприклад, давати йому можливість вибирати потрібну формулу для розрахунку або задавати кілька необхідних параметрів задачі. Для цього на першому етапі розробки проекту варто передбачити використання таких керуючих елементів, як селекторні кнопки (перемикачі), рамки, прапорці, причому їх можна помістити у форму за допомогою таких елементів панелі інструментів:
– селекторна кнопка (перемикач) (OptionButton) – рамка (Frame) – прапорець (CheckBox) Крім того, працюючи в середовищі Windows, користувач звик одержувати повідомлення від машини у вигляді інформаційних вікон. Це можна також здійснити і в середовищі Visual Basic за допомогою функції MsgBox. Мінімальний формат цієї функції такий: MsgBox "текст повідомлення" У текст повідомлення можна включати кілька текстових констант і змінних, об'єднуючи їх за допомогою операції конкатенації (+ або &). Якщо необхідно включити числову змінну, то її варто перетворити в рядковий тип даних за допомогою функції Str (змінна). Наприклад, унаслідок виконання функції MsgBox "Помилка введення! Уведіть число" на екрані з'явиться вікно (рис. 4.4, а), а в результаті виконання функції MsgBox " Відстань до Дніпропетровська становить. " & Str(P) & "км"– інформаційне вікно (рис. 6.5, б). Р – змінна, яка включає відстань до Дніпропетровська.
Вибір одного з альтернативних рішень здійснюється за допомогою селекторних кнопок, коли в будь-який момент можна натиснути тільки одну з них. Для селекторної кнопки існує властивість Value, що відоббражає значення даної кнопки за умовчуванням, а саме: – увімкнуто. Для встановлення такої позиції необхідно, щоб значення властивості Value дорівнювало True (Істина). – вимкнуто. Для встановлення такої позиції необхідно, щоб значення властивості Value дорівнювало False (Неправда). Аналізуючи значення властивості Value, програма вибирає формулу (задачу) для розв’язку. Щоб об'єднати й ідентифікувати кілька селекторних кнопок у групу, варто спочатку створити в межах форми їхню групову рамку за допомогою елемента панелі інструментів Frame. Допускається також розміщення перемикачів прямо у формі, без їхнього об'єднання в групу.
Приклад 6.3 Завдання: обчислити значення функції за однією із трьох формул: y= ex + x2, y = x4 + x2 + 1 або y = x2 – 1, якщо 0 < x 100. Вибираючи формули для розрахунку, застосовують перемикачі. Значення змінної х задають за допомогою лінійки прокручування. Виконання: Для обчислення значення функції необхідно здійснити описані нижче операції. 1. Створити екранну форму (див. рис. 6.6).
2. Використовуючи оператора Print, помістити на поверхню форми у її лівому верхньому куті прізвище студента, його ініціали і назву групи, в якій він вчиться. Для виконання цієї дії застосувати такий програмний код: Private Sub Form_Load() Print "Виконав студент" Print "групи АП-08-1" Print "Шевченко Ю. В." End Sub Створити форму Вибір функції, виконавши послідовно операції, перелічені в табл.6.3.
Таблиця 6.3 Послідовність операцій для створення форми Вибір функції
У верхній частині форми посередині помістити емблему Національного гірничого університету. Растрове зображення емблеми вставляється у вікно, що створюється інструментом PictureBox. 3. Створити програмний код, виконуючи такі операції: ● Подвійним клацанням лівою кнопки миші у місці лінійки прокручування у формі проекту відкрити вікно Code. Для об'єкта LX вибрати подію Change і дописати процедуру, яку треба виконати в разі здійснення події – переміщення бігунка на лінійці, а саме: Private Sub LX_Change() X.Text = LX.Value End Sub ● Для об'єкта LX вибрати подію Scroll і дописати зміст процедури, виконуваної під час переміщення бігунка по лінійці, тобто: Private Sub LX_Scroll() LX_Change End Sub ● Вибрати в лівому списку об'єкт Розрахунок, а в правому – подію Click. Описати послідовність операцій, які виконуються в програмі внаслідок клацання лівою клавішею миші у місці кнопки "Розрахунок", а саме: Private Sub Raschet_Click() If F1.Value = True Then Y.Text = Exp(Val(x.Text)) + (Val(x.Text)) ^ 2 ElseIf F2.Value = True Then Y.Text = (Val(x.Text)) ^ 4 + (Val(x.Text)) ^ 2 + 1 Else Y.Text = (Val(x.Text)) ^ 2 - 1 End If End Sub ●Вибрати в лівому списку об'єкт Очищення, а в правому – подію Click. Описати послідовність дій, виконуваних у програмі внаслідок клацання мишкою у місці кнопки "Очищення", тобто: Private Sub Och_Click() x.Text = "" y.Text = "" End Sub ●Вибрати в лівому списку об'єкт Вихід, а в правому – подію Click. Описати послідовність дій, виконуваних у програмі внаслідок клацання мишкою у місці кнопці "Вихід". 4. Відобразити повний програмний код: ' Створення процедури виходу з програми Private Sub vuxid_Click() End End Sub ' Створення процедури введення прізвища й назвиі групи, в якій вчиться студент Private Sub Form_Load() Print "Виконав студент" Print "групи АП-08-1" Print "Шевченко Ю.В." End Sub ' Створення лінійки прокручування початкового значення х Private Sub LX_Change() x.Text = LX.Value End Sub Private Sub LX_Scroll() LX_Change End Sub ' Очищення текстових вікон виведення результатів Private Sub Och_Click() X.Text = "" Y.Text = "" End Sub ' Розрахунок значення функції Y Private Sub Raschet_Click() If F1.Value = True Then Y.Text = Exp(Val(x.Text)) + (Val(x.Text)) ^ 2 ElseIf F2.Value = True Then Y.Text = (Val(x.Text)) ^ 4 + (Val(x.Text)) ^ 2 + 1 Else Y.Text = (Val(x.Text)) ^ 2 - 1 End If End Sub ' Вихід з програми Private Sub vuxid_Click() End End Sub Приклад 6.4 Завдання: автомобіль рухається по дорозі із швидкістю V км/год. Через певні обставини водій змушений виконати екстрене гальмування. Розрахувати гальмівний шлях автомобіля залежно від стану дорожнього покриття, який зумовлюється величиною коефіцієнта зчеплення f коліс автомобіля з дорогою. Для введення швидкості руху автомобіля використати в програмі лінійку прокручування, а для вибору коефіцієнта зчеплення f застосувати перемикачі. Виконання: 1. Створити екранну форму відповідно до рис. 6.7.
Для створення екранної форми Вибір функції виконують дії, перелічені в табл. 6.4. Таблиця 6.4 Послідовність операції для створення форми Вибір функції
Продовження табл.6.4
Продовження табл.6.4
2. Праворуч у верхній частині форми помістити малюнок автомобіля з колекції кліпів текстового процесора Microsoft Word, вводячи в дію команду меню Вставка→Рисунок→Картинки. Зображення вставляється у вікно, що створюється компонентом Image. 3. Створити програмний код, який передбачає виконання перелічених нижче процедур: ' Процедура створення лінійки прокручування для введення значень 'швидкості автомобіля (використання компоненту HScrollBar) Private Sub HScroll1_Change() Text1.Text = HScroll1.Value End Sub Private Sub HScroll1_Scroll() HScroll1_Change End Sub ' Процедура очищення текстових вікон Private Sub Command2_Click() Text1.Text = "" Text2.Text = "" End Sub ' Процедура обчислення гальмівного шляху з використанням ' компонента CommandButton Private Sub Command1_Click() If Option1.Value = True Then ' вибір коефіцієнта зчеплення з ' використанням компонента OptionButton Text2.Text = (Val(Text1.Text)) ^ 2 * 0.0039327 / 0.1 ElseIf Option2.Value = True Then Text2.Text = (Val(Text1.Text)) ^ 2 * 0.0039327 / 0.2 ElseIf Option3.Value = True Then Text2.Text = (Val(Text1.Text)) ^ 2 * 0.0039327 / 0.3 ElseIf Option4.Value = True Then Text2.Text = (Val(Text1.Text)) ^ 2 * 0.0039327 / 0.4 ElseIf Option5.Value = True Then Text2.Text = (Val(Text1.Text)) ^ 2 * 0.0039327 / 0.5 ElseIf Option6.Value = True Then Text2.Text = (Val(Text1.Text)) ^ 2 * 0.0039327 / 0.6 ElseIf Option7.Value = True Then Text2.Text = (Val(Text1.Text)) ^ 2 * 0.0039327 / 0.7 End If End Sub ' Процедура виходу з програми Private Sub Command3_Click() End End Sub 4. Остаточний вигляд форми для розрахунку гальмівного шляху показано на рис. 6.8.
5. Для розрахунку гальмівного шляху необхідно за допомогою лінійки прокручування ввести значення швидкості руху автомобіля (у даному прикладі це 100 км/год) і перемикачем вибрати коефіцієнт зчеплення f коліс автомобіля з дорожнім покриттям (f = 0,5). Натиснення на кнопку Розрахунок приведе до появи в текстовому вікні значення гальмівного шляху (78,654 м).
Контрольні питання
1. Дайте визначення розгалуженому процесу обчислень? 2. Яка кількість розгалужень допускається в розгалужених алгоритмах? 3. Якими блоками позначається перевірка умов у розгалужених алгоритмах, які їхні особливості? 4. Які оператори мови характерні саме для розгалужених алгоритмів, яким чином вони працюють? 5. Чим відрізняється складний оператор If... Then... Else від простого? 6. Що означає неповний оператор If...? 7. З якою метою використовуються селекторні кнопки в програмах, як задати їм початкове значення? 8. Яку функцію можуть виконувати прапорці в програмах? Наведіть приклади. 9. Як змусити ПК видавати повідомлення у вигляді інформаційних вікон? 10. Для чого в програмах використовуються константи? 11. Спроектувати програму на в середовищі Visual-Basic, використовуючи такі значення змінних величин: а) y = б) y =
7. ПРОЕКТУВАННЯ ЦИКЛІЧНИХ ПРОЦЕСІВ
Загальні положення
Як було розглянуто в п. 3.3.4, циклічні програми можуть бути різних видів – арифметичні, ітераційні, складні, з індексованими змінними. Для їхнього написання використовуються різні оператори.
7.2. Арифметичні цикли
Арифметичні цикли являють собою фрагменти програми, у яких оператори повторюються заздалегідь відому кількість разів, а для їхнього запису використовується такий оператор: For змінна = початкове значення То кінцеве значення [Step...] оператори [ExitFor] оператори Next [змінна [,змінна]...] Відповідно до цього оператора змінній буде присвоєно початкове значення, виконано перевірку кінця циклу, а якщо кінця немає, то будуть виконані оператори циклу Next, при цьому значення змінної буде збільшено на значення кроку (Step) або, якщо останній не передбачено то на одиницю, потім операція повторюється, починаючи з процесу перевірки і до кінця циклу. Якщо цикл закінчено, то починає виконуватися оператор, що стоїть після Next. Використання Exit For буває необхідним при достроковому виході з циклу. Приклад 7.1 Завдання: написати програму обчислення факторіала у = n! (схема алгоритму подається на рис. 7.1, вигляд екранної форми на рис. 7.2).
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2016-09-19; просмотров: 530; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.136.19.136 (0.014 с.) |