Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Комп’ютерні науки
Кафедра:
Не вказано

Інформація про роботу

Рік:
2006
Тип роботи:
Інші
Предмет:
Математичне моделювання в САПР

Частина тексту файла (без зображень, графіків і формул):

1МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”  Кафедра САП Основні прийоми роботи та підготовки документів в системі MATHCAD Методичні матеріали до лабораторної роботи № 1 з курсу: “Математичне моделювання в САПР” для студентів базового напрямку 6.0804 “Комп’ютерні науки” ЗАТВЕРДЖЕНО на засіданні кафедри “Системи автоматизованого проектування” Протокол № від ЛЬВІВ 2006 Основні прийоми роботи та підготовки документів в системі MATHCAD. Методичні матеріали до лабораторної роботи № 1 з курсу: “Математичне моделювання в САПР” для студентів базового напрямку 6.0804 “Комп’ютерні науки”. Укладачі: Макар В.М., доцент, к.т.н. Юрчак І.Ю., доцент, к.т.н. Відповідальний за випуск: Лобур М.В., проф., д.т.н., завідувач кафедри САП Рецензенти: 1. МЕТА РОБОТИ Ознайомитися з основними можливостями інтегрованої системи для автоматизації проведення математичних розрахунків MATHCAD, навчитися створювати прості документи, що складаються з тексту, формул і програмних конструкцій, навчитися будувати і форматувати прості графіки.. 2.ОСНОВНІ ТЕОРЕТИЧНІ ВІДОМОСТІ 2.1. ЗАГАЛЬНА ХАРАКТЕРИСТИКА СИСТЕМИ MATHCAD Інтегрована математична програмна система для науково-технічних розрахунків MATHCAD розроблена фірмою MathSoft (www.mathsoft.com) за участі ряду ведучих університетів США та Європи. Дана система дозволяє описувати розв’язаня математичних задач за допомогою загальноприйнятих математичних формул та знаків. За своїми функціональними можливостями та потужними обчислювальним засобами систему MATHCAD можна без перебільшення трактувати як ефективну математичну САПР, яка дозволяє готувати на високому поліграфічному рівні будь-які науково-технічні матеріали довільної складності – документацію, наукові доповіді, статті, електронні книги, дисертації і т.д. Починаючи з версії MATHCAD 2000 система MATHCAD виходить в трьох варіантах: Standard, Professional I Premium. Остання версія цієї популярної системи – MATHCAD 11. Основні функціональні можливості системи MATHCAD: символьні(аналітичні) перетворення на основі ядра символьної математики системи комп’ютерної алгебри Maple V; величезна бібліотека математичних функцій, які охоплюють майже всі розділи математичної науки; інтеграція, зокрема імпорт графічних файлів, з іншими популярними системами автоматизації проектувальних робіт (AutoCAD, PCAD, VISIO і т.д.); створення програм для розв’язання складних задач за допомогою візуально-орієнтованої мови програмування високого рівня; анімація графіки та відтворення відео- та аудіо-файлів; створення електронних посібників з гіперпосиланнями, бібліотека вбудованих електронних книг, об’єднаних в ресурсний центр (Resource Center); інтеграція з основними мережевими сервісами та службами глобальної інформаційної мережі Internet. 2.2. СТРУКТУРА ДОКУМЕНТА MATHCAD І НАЙПРОСТІШІ ПРИЙОМИ РОБОТИ Система MATHCAD підтримує стандартний для багатьох Windows-програм багатовіконний інтерфейс. Це означає, що кожний документ (worksheet) MATHCAD відображається в окремому вікні редагування. Документи MATHCAD дозволяють об’єднати опис алгоритму розв’язування задачі у вигляді математичних виразів, програмних конструкцій і т.д. з текстовими коментарями та результатами обчислень, поданих у вигляді чисел, таблиць, графіків та діаграм. Таке поєднання дозволяє описувати математичні алгоритми у загальноприйнятій математичній формі, що робить документ MATHCAD схожим на сторінки тексту з математичних книг та наукових статей, а також суттєво полегшує розуміння математичної суті задачі. Документ MATHCAD складається з окремих блоків, в кожному з яких може відображатися інформація певного типу: текст, формули, графіка. MATHCAD виконує дії над блоками у строго визначеному порядку – блоки аналізуються зліва направо і зверху вниз. Це означає, що блоки неможна розташовувати в довільному порядку, блоки, які призначені для ініціалізації певних операцій повинні знаходитися перед блоками, що реалізують ці операції. Робота з кожним типом блоку здійснюється за допомогою одного з вбудованих в систему редакторів – текстового, формульного і графічного. Від типу блоку залежить також і форма курсора вводу, так, наприклад, у текстовому блоці курсор має вигляд червоної вертикальної риски, а у формульному – червоного хрестика. Ввід даних в документ MATHCAD здійснюється з позиції заданої курсором. Ввід текстових даних здійснюється стандартним способом – з клавіатури. Для вводу спеціальних математичних символів та виразів служить спеціальна палітра математичних знаків Math кожна кнопка якої відповідає певній категорії математичних знаків та шаблонів виразів. Рис.1 демонструє всі доступні в MATHCAD палітри категорій математичних символів та виразів. У найпростішому випадку робота з системою MATHCAD зводиться до підготовки у вікні редагування документа обчислювального завдання і встановлення форматів виведення результатів. Прості обчислення значень виразів виконуються шляхом задання посимвольним набором лівої частини виразу і оператора виведення = (який також можна ввести з палітри Evaluation). Символ = також можна використовувати як оператор першого присвоєння значень змінним. У цьому Рис.1. Вікно MATHCAD зі всіма палітрами математичних знаків випадку він заміняє оператор присвоєння :=, який можна ввести або з клавіатури через символ: або з палітри Evaluation. Для подальших модифікацій значень змінних слід використовувати тільки оператор присвоєння :=, оскільки символ = буде трактуватися як оператор виведення і просто виводитиме поточне значення змінної. Слід зауважити, що MATHCAD відразу під час введення намагається надати математичним виразам стандартний вигляд, не вимагаючи від користувача задання специфікацій форматів зображення. Так, наприклад, операції множення та ділення, які вводяться як символи * та /, відповідно, відображаються в документі так, як це прийнято у звичайних математичних виразах. Аналогічна ситуація і з іншими операціями, такими як піднесення до степеня, корінь квадратний і т.д. Крім того, MATHCAD розуміє найбільш поширені в математиці константи такі, як e(основа натурального логарифма), pi (число ) і т.д. Рис.2 дає уявлення про найпростіші прийоми роботи з системою MATHCAD.  Рис. 2. Виконання найпростіших операцій в системі MATHCAD Підготовка обчислювальних блоків значно полегшується завдяки палітрам математичних знаків, які дозволяють задати шаблон того чи іншого виразу або математичного оператора. Шаблон містить символ математичного оператора і так звані місця вводу у вигляді невеликих чорних квадратиків, які призначені для вводу конкретних вхідних даних над якими має виконуватися даний оператор. Для багатьох операторів місця вводу можуть позначати також результат виконання цього оператора. Фрагмент документу MATHCAD, який демонструє послідовне заповнення (зліва – направо) місць вводу в шаблоні обчислення визначеного інтеграла наведений нижче (сам шаблон можна вставити в документ з палітри Calculus):  Для спрощення вводу математичних функцій служить кнопка f(x), яка знаходиться на стандартній панелі інструментів, і яка виводить діалогове вікно Insert Function з повним переліком існуючих функцій згрупованих по категоріях. Знайшовши потрібну функцію можна вставити її шаблон і заповнити відповідні місця вводу, які позначають аргументи цієї функції. Аргументами функцій можуть бути константи, раніше визначені змінні або вирази, що задають обчислення числового значення. Функці повертають результат, який у найпростішому випадку можна відразу вивести за допомогою оператора виводу. У загальному випадку функції можна використовувати в складних математичних виразах стандартним способом. 2.3. ПОНЯТТЯ ПРО ВХІДНУ МОВУ ТА ПРОГРАМНІ МОДУЛІ Спілкування користувача з системою MATHCAD відбувається на рівні так званої вхідної мови, яка максимально наближена до звиклої мови опису математичних задач. Вхідна мова MATHCAD відноситься до мов інтерпретаторного типу, тобто, як тільки розпізнається деякий об’єкт системи, відразу ж виконуються задані ним операції. У переважній більшості задач вхідна мова MATHCAD дозволяє задавати їх розв’язок за допомогою математичних операторів та функцій, які вводяться описаними вище способами, з вказанням типу очікуваного результату (таблиці, графіки і т.д.). По суті, вхідна мова системи відіграє роль проміжного агента між прихованою від користувача мовою документа та мовою реалізації системи MATHCAD (якою є високоефективна мова програмування високого рівня С++). По мірі того як користувач створює засобами текстового, формульного і графічного редакторів у вікні редагування документа відповідні блоки, MATHCAD складає програму на деякій проміжній мові зв’язку, яка зберігається в оперативній пам’яті комп’ютера до тих пір, поки не буде збережена у вигляді файлу з розширенням .mcd. У MATHCAD ефективно розв’язана проблема наскрізної передачі даних між обчислювальними блоками документа, а також між формульними та графічними блоками. Тому будь-яка зміна формули або вхідних даних моментально приводить до автоматичного перерахунку задачі по всьому ланцюжку взаємодії об’єктів (за винятком символьних операцій та випадку коли в документі встановлено режим ручного перерахунку). Незважаючи на досить високу досконалість вхідної мови системи MATHCAD, вона, по суті, дозволяє реалізувати лише задачі з лінійними алгоритмами. Засоби розв’язання задач з циклічними алгоритмами та алгоритмами розгалуження у вхідній мові MATHCAD майже відсутні. У попередніх версіях системи, частково, цю проблему дозволяли вирішити функція if та змінні діапазонного типу (Range Variables). Діапазонні змінні дозволяють задати ряд чисел з певного діапазону, значенням такої змінної є не скалярна величина, а набір (вектор) заданих чисел. У найпростішому випадку для створення змінної діапазонного типу використовується вираз: Name:=Nbegin .. Nend, де Name – назва змінної, Nbegin і Nend – її початкове та кінцеве значення, відповідно, .. – символ, який означає зміну значення змінної у заданих межах (вводиться з клавіатури символом ; ). Якщо Nbegin<Nend, то крок зміни буде рівним 1, у протилежному випадку -1. Для створення діапазонної змінної загального виду використовується вираз вигляду: Name:=Nbegin,(Nbegin+Step) .. Nend, де Step – заданий крок модифікації змінної. Крім того, шаблон задання змінної діапазонного типу можна вставити в документ з палітри Calculator (третя кнопка зліва у верхньому рядку).  Рис.3. Приклади використання змінних діапазонного типу Змінні діапазонного типу найчастіше використовуються для задання індексованих змінних, векторів, представлення функцій у вигляді так званих таблиць виведення, а також для побудови графіків функцій. Приклади використання цих змінних наведені на Рис.3. Слід зауважити, що задання діапазонних змінних рівносильне заданню циклів: явно задаються початкове значення, крок зміни та кінцеве значення параметру циклу, неявно задається виклик оператора циклу, в якому обчислюються всі проміжні значення діапазонної змінної при кожному звертанні до неї. Однак, така заміна оператора циклу не є повноцінною, оскільки при роботі з діапазонною змінною відсутня можливість вибору довільного значення цієї змінної (значення змінної діапазонного типу є набір всіх чисел одночасно). Іншою типовою помилкою під час роботи з цими змінними є їх використання в операціях, в яких можуть брати участь лише скалярні величини. Наприклад, після задання діапазонної змінної i:=1..50, спроба використання її в операторі присвоєння виду f:=i*2, де f – звичайна змінна призведе до виникнення помилки “Illegal context. Press F1 for Help”. Для створення умовних виразів використовується функція вхідної мови if, яку не слід плутати з умовним оператором if (див. далі), і яка має наступний синтаксис: if(умова, вираз1, вираз2). Якщо умова виконується, то буде обчислюватися вираз1, у протилежному випадку – вираз2. За допомогою функції if часто моделюють інші функції, наприклад, логічні або функції, що описують імпульсні сигнали різного виду. Як приклад на рис.4 зображено застосування цієї функції для моделювання процесу напівперіодного випрямлення, який використовується в електротехніці для перетворення змінного струму в пульсуючий однієї полярності. Тут же наведений приклад задання функції m(t), яка імітує меандр (прямокутні періодичні коливання з рівними за тривалістю півхвилями з амплітудою рівною за модулем та протилежною за знаком). Незважаючи на досить широкий набір вбудованих функцій системи MATHCAD, дуже часто виникає необхідність розширити систему новими функціями користувача. Синтаксис задання функції користувача має наступний вигляд: <назва функції>(<список аргументів>):=<тіло функції>. Тут, назва функції задається як і будь-який ідентифікатор, наприклад ім’я змінної, список аргументів – це перелік змінних розділених комою, які будуть використовуватися в тілі функції, а саме тіло функції містить довільну кількість допустимих операторів та функції системи.  Рис.4. Приклади використання функції if У найпростішому випадку функції користувача використовуються для розширення набору вбудованих функцій шляхом задання специфічних для користувача функцій. Так, наприклад, на рис.5, який містить ряд прикладів задання та використання функцій користувача, задано одновимірні кусково-лінійні базисні функції методу скінченних елементів і побудовано їх графіки (приклад використання функцій користувача). У більш складних випадках, функції користувача в системі MATHCAD відіграють роль аналогічну функціям-підпрограмам у звичайних мовах програмування високого рівня, тобто вони дозволяють реалізувати деякий алгоритм розв’язання часткової підзадачі. У цьому випадку, остання стрічка тіла функції повинна задавати повернення результату виконання функції, тобто просто містити назву змінної, значення якої буде трактуватися як кінцевий результат. Як приклад, рис.5 містить функцію sum, яка обчислює суму додатніх елементів заданого вектора розмірності n (зверніть увагу на останню стрічку тіла цієї функції та спосіб використання, тобто виклику функції).  Рис.5. Приклади опису та використання функції користувача Слід зауважити, що змінні вказані в списку аргументів функції користувача є локальними, тобто область дії цих змінних обмежена тілом функції. Це означає, також, що ці змінні не потрібно описувати до задання функції (фактично їх вказання в списку аргументів і є опис) і їх назви можуть співпадати з іменами інших ідентифікаторів документа. Починаючи з версії MATHCAD PLUS 6.0 з’явилася можливість задання завершених програмних модулів. Програмні засоби зосереджені в палітрі Programming, зображеній на рис.6. Як видно з цього рисунку, програмний модуль виділяється в тексті документа напівжирною вертикальною рискою і може діяти як безіменна функція без параметрів, але з поверненням результату – перший (обчислення квадратного кореня з числа 12) і другий приклади (формування матриці за певним правилом). Програмний модуль може відігравати також роль тіла функції користувача з іменем та параметрами – третій приклад на рис.6). Більше того, фактично, будь-яка функція користувача реалізується за допомогою програмного модуля. Розглянемо коротко призначення та синтаксис кожного програмного елемента палітри Programming. Оператор додавання нової стрічки Add Line виконує функцію розширення програмного модуля. Це розширення фіксується видовженням вертикальної риски програмного блоку, причому система MATHCAD автоматично відслідковує необхідність деревовидної ієрархії вкладень і створює її. Завдяки цьому, в принципі, можна створювати програми довільної довжини, які містять вкладені один в одного програмні підблоки.  Рис.6. Приклади роботи з програмними модулями Оператор локального присвоювання  призначений для присвоєння значень локальним (у межах програмного модуля) змінним. Це означає, що змінна зберігає присвоєне значення лише в тілі програми, а за її межами одноіменна змінна буде мати своє попереднє значення. Слід зауважити, що в програмних модулях дозволяється присвоювати значення змінним лише за допомогою цього оператора, оператор присвоювання := вхідної мови системи MATHCAD тут не працює. Умовний оператор if служить для створення умовних виразів, тобто виразів, в яких певна дія виконується (не виконується) у залежності від виконання (невиконання) деякої умови. Синтаксис цього оператора: <вираз> if <умова>. Якщо <умова> виконується, то обчислюється і повертається значення <виразу>. Умовний оператор часто сумісно використовується з оператором переривання break та оператором іншого вибору otherwise. Не слід плутати умовний оператор if, який може використовуватися лише в межах програмного модуля, з функцією вхідної мови if, яка, по-перше, може використовуватися поза межами програмного блоку, а, по-друге, має відмінний синтаксис і має два варіанти вибору. Оператор циклу з параметром for призначений для створення повноцінних циклів з фіксованою кількістю повторень. Цей оператор має наступний шаблон , який, в свою чергу, містить три поля вводу. В полі вводу, яке слідує відразу після ключового слова for, слід задати ім’я змінної, яка буде відігравати роль параметру цикла, у наступному полі – діапазон зміни параметру циклу (найчастіше задається за допомогою шаблону вводу діапазонної змінної, причому можна задавати довільний крок зміни). У полі вводу, що знаходиться в наступному рядку задається довільний допустимий в MATHCAD вираз, який буде виконуватися в циклі задану кількість разів, тобто тіло циклу. Якщо потрібно, щоб тіло циклу складалося з декількох операторів, слід помістити кожний оператор в окремий рядок використовуючи оператор додавання нової стрічки Add Line. Змінна-параметр циклу має область дії, обмежену тілом циклу, тобто значення цієї змінної за межами циклу стає невизначеним. Приклади використання умовного оператора if та оператора циклу for наведені на рис.5 та рис.6. Оператор циклу з передумовою while дозволяє організувати так звані ітераційні цикли, тобто цикли з невідомою наперед кількістю повторень. Шаблон даного оператора має вигляд . Після ключового слова while задається умова виконання тіла циклу, яке, як і в попередньому випадку, задається в полі вводу, що знаходиться у наступному рядку. Виконання оператора циклу while полягає в наступному: тіло циклу виконуватиметься до тих пір, поки умова матиме істинне значення. Тіло циклу може й жодного разу не виконатися, якщо умова з самого спочатку має хибне значення, тобто в даному операторі циклі умова є умовою входу в цикл. Для побудови умови циклу можна використовувати операції відношення та логічні операції, які знаходяться на палітрі Boolean. Оператор іншого вибору otherwise використовується, як правило, разом з умовним оператором if для задання іншого варіанту розгалуження. Оператор переривання break забезпечує дострокове завершення програмного блоку. Якщо він знаходиться у тілі оператора циклу, то здійснюється вихід з циклу, тобто керування передається на наступний після оператора циклу оператор програмного модуля. При необхідності повернення в точку переривання можна використати оператор продовження continue. Якщо потрібно не просто перервати виконання програми, а й повернути деякий результат, тоді необхідно використовувати оператор повернення return. Цей оператор має один операнд значення якого й буде результатом виконання програмного блоку. Приклади використання описаних вище програмних операторів наведені на рис.7.  Рис.7. Приклади використання програмних операторів Оператор обробки помилок on error дозволяє створювати конструкції для обробки помилкових ситуацій. Він задається у вигляді <вираз1> on error <вираз2>, де <вираз2> виконується тоді, коли при виконанні <вираз1> виникла будь-яка помилка. 2.4. ЕЛЕМЕНТИ ГРАФІЧНОЇ ВІЗУАЛІЗАЦІЇ Поряд з текстовими, формульними та програмними блоками документ MATHCAD може містити також й графічні блоки. Ці блоки призначені для відображення графіків функцій найрізноманітнішого виду: двовимірні та тривимірні, в різних системах координат, з параметричним заданням функцій, ліній рівня і т.д. Крім того графічні блоки можуть містити різні рисунки, навіть з елементами анімації. Ще однією перевагою системи MATHCAD є дуже зручний та простий спосіб як побудови графіків, так і роботи з ними (форматування, обертання, зміна розмірів та масштабів і т.д.). Розглянемо найпростіші способи створення та роботи з графічним представленням даних. У найпростішому випадку для побудови звичайного графіка однієї функції слід виконати наступні кроки: Ввести потрібну функцію, наприклад ; У разі відсутності на екрані, відобразити палітру Graph, для чого потрібно клікнути мишею на кнопці з зображенням графіка Graph Toolbar палітри математичних знаків Math; Задати шаблон графіка шляхом натиснення на кнопку X-Y Plot палітри Graph (ці два кроки можна також виконати за допомогою меню Insert→Graph→X-Y Plot); поле вводу функції по осі Y шаблону графіка автоматично буде заповнено системою MATHCAD, а курсор буде знаходитися в полі вводу значень по осі X; У полі вводу значень по осі X ввести ім’я незалежного аргумента функції – ; Клікнути мишею в довільному місці документа поза графіком – графік буде побудовано. При побудові графіків функції кроки 2)-3) та 1) можна поміняти місцями, у цьому випадку поле вводу назви функції по осі Y залишається порожнім і його слід заповнити іменем потрібної функції. Операції зміни розмірів та переміщення побудованого графіку здійснюються стандартним для Windows-програм способом. Для відображення графіків декількох функцій на одному шаблоні потрібно просто задати імена цих функцій у полі вводу функції по осі Y, відокремлюючи їх комою. Слід зауважити, що MATHCAD автоматично відображає кожну криву своїм стилем та кольором. Приклади побудови графіків функцій наведені на рис. 8.  Рис.8. Приклади побудови графіків функцій в системі MATHCAD Система MATHCAD надає користувачу також широкий набір засобів форматування графіків, таких як створення масштабної сітки на графіку, створення заголовків та підписів, тощо. Всі вони згруповані за категоріями і знаходяться у відповідних вкладках вікна форматування двовимірних графіків Formatting Currently Selected X-Y Plot, яке викликається шляхом подвійного кліку лівою клавішею миші у довільному місці області графіка. 3.КОНТРОЛЬНІ ЗАПИТАННЯ Назвіть основні функціональні можливості системи MATHCAD. Що являє собою документ MATHCAD? З яких частин він може складатися? Як задається оператор присвоєння та які особливості роботи з ним? Що таке шаблон оператора? Як послідовність задання та заповнення шаблонів? Що являє собою вхідна мова системи MATHCAD? Як створити функцію користувача? Наведіть приклад. Чому за допомогою змінних діапазонного типу не можна задати повноцінний циклічний процес? За допомогою яких програмних конструкцій можна реалізувати циклічні обчислювальні процеси та процеси з розгалуженням? Як побудувати графіки ряду функцій на одному шаблоні? 4.ЛАБОРАТОРНЕ ЗАВДАННЯ Ознайомитися з основними прийомами роботи та підготовки документів в системі MATHCAD. Скласти програму для табулювання функції на довільному проміжку з області визначення (індивідуальні завдання наведені в Додатку). Значення функції обчислювати як суму членів заданого ряду Тейлора з заданою точністю. Для контролю правильності знаходження суми ряду обчислити також значення функції за формулою. Побудувати графіки функцій при різних значеннях точності обчислення суми ряду, а також графік точних значень функції. Оформити і здати звіт про виконання лабораторної роботи. 5.ЗМІСТ ЗВІТУ Мета роботи. Короткі теоретичні відомості. Постановка задачі індивідуального завдання. Оформлений належним чином (з коментарями, поясненнями та результатами) документ MATHCAD з програмою розв’язання завдання. Аналіз результатів та висновки. 6.СПИСОК РЕКОМЕНДОВАНОЇ ЛІТЕРАТУРИ В.Дьяконов. MATHCAD 8/2000: специальный справочник. – СПб: Питер,2001. -592 с. Е. Макаров. Инженерные расчеты в MATHCAD. – СПб: Питер, 2002. -386 с. http://www.mathcad.com. ДОДАТОК 1. 2. 3. 4. 5.  6.  7.  8.  9.  10.  11.  12.  13.  14.  15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28.  29.  30. 
Антиботан аватар за замовчуванням

04.09.2013 10:09-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!