Програма "звичайний дріб"

 















Програма "звичайний дріб"


1.Загальна частина


1.1Постановка задачі

програма дріб годинник календар

Розпочинаючи виконання курсової роботи, в першу чергу необхідно детально розібратися в постановці задачі та підібрати літературу.

Курсова робота, як правило, має навчальний характер. Це значить, що студенту достатньо отримати при необхідності одну - дві консультації у викладача з метою уточнення деяких частин завдання. В більш складних роботах це може проходити в декілька етапів. Після того, як студент з'ясував суть задачі, він має приступиш до вивчення літератури. Процес виявляється більш плідним, якщо у виконавця є достатня теоретична підготовка.

Потрібно створити у візуальному середовищі програму в якій буде як теоретичний матеріал, для вивчення, так і можливість виконувати обчислення використовуючи вже отримані знання. Програма призначена для учнів 5 класів. Враховуючи особливості даної задачі необхідно передбачити елементи створення зручного інтерфейсу користувача. Програма повинна буди грамотно оформлена, а також враховуючи аудиторію де її будуть використовувати, повинна буди цікавою та зрозумілою. Вона не повинна буди перенасиченою інформацією, щоб дітям було цікаво з нею працювати, а також не буди загромадженою картинками, щоб не відволікати учнів. Колір шрифту повинен бути чітким і однаковим. Колір фону не повинен бути різким.


1.2Вибір методу рішення задачі


На цьому етапі треба визначитись з питанням та можливостей використання готового методу розв'язання всієї задачі або її частини. Це стосується, в першу чергу, таких типових задач, як сортування, розв'язання математичних завдань тощо. Краще застосовувати готові алгоритми для вирішення таких часткових задач, зосередивши свою увагу на інших аспектах роботи. Характерним для програмування є сполучення типових засобів та нових методів обробки інформації.

Основні типи виключень:

ñEConvertError - помилка перетворення типів даних.

ñEDivByZero - Виникає при виконанні операції цілочисельного ділення на «0».

ñEZeroDivide - Виникає при виконанні операцій ділення дробових операндів.

ñEInOutError - Виникає при виконанні в файлових операціях.

В середовищі Builder для формування діалогового вікна використовують операцію Massage Dlg, яка має такий формат:Dlg:

Вибор= Massage Dlg («повідомлення», тип, кнопки, контекст);

Для обробки математичних операцій, з якими працює створена програма, підключимо бібліотеку math.h.

Для вводу даних використаємо компонент TEdit.


1.3Інформаційна модель задачі


До пункту «Інформаційна модель задачі» слід навести структуру та типи даних, з якими буде працювати програма та засоби збереження цих даних (у структурованих чи звичайних файлах, у масивах і т.д.). Після опису даних бажано навести приклади реальних значень, що будуть зберігатися у сформованому форматі.

УС/C++ змінні повинні бути описані, а їхній тип специфікований до того, як ці змінні будуть використані.

З типом даних зв'язуються і набір визначених значень, і набір операцій, які можна виконувати над змінними даного типу.

Найпростішими типами є:

·сhar - представляється як однобайтове ціле число;

·int - двобайтове ціле;

·long - чотирибайтове ціле;

·float - чотирибайтове раціональне;

·double - восьмибайтове раціональне;

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

цілі:

üunsigned char | 8 біт | 0..255

üchar | 8 біт | 128..127

üenum | 16 біт | -32,768.. 32,767

üunsigned int | 16 біт | 0.. 65,535

üshort int | 16 біт | -32,768.. 32,767

üint | 16 біт | -32,768.. 32,767

üunsigned long | 32 біт | 0.. 4,294,967,295

ülong | 32 біт | -2,147,483,648.. 2,147,483,647

дійсні:

üfloat | 32 біт |

üdouble | 64 біт |

ülong double | 80 біт |

Для реалізації програмного додатку даної задачі використаємо типи даних такі як «int» та «long», для обявлення змінних, що відповідатимуть чисельнику та знаменнику дробів. Нам також знадобиться тип «float» на випадок отримання не цілих значень.

















Структура програми «Звичайний дріб»


В першій частині міститься весь теоретичний матеріал, який допоможе засвоїти дії над дробами і підготовить користувача тдо роботи у другому розділі. З допомогою другого розділу користувач зможе виконувати різні дії над звичайними дробами. Якщо користувачу щось не зрозуміло він завжди зможе перейти до першого розділу.


1.4Система програмування


Програмний додаток «Обыкновенная дробь» розроблено в візуальному середовищі Builder C++.++ Builder - програмний продукт, інструмент швидкої розробки додатків (RAD), інтегрована середа програмування (IDE), система, яка використовується програмістами для розробки програмного забезпечення на мові програмування C + +.

Спочатку розроблявся компанією Borland Software, а потім її підрозділом CodeGear, нині належить компанії Embarcadero Technologies.+ + Builder об'єднує в собі комплекс об'єктних бібліотек (STL, VCL, CLX, MFC тощо), компілятор, відладчик, редактор коду і багато інших компонентів. Цикл розробки аналогічний Delphi. Більшість компонентів, розроблених в Delphi, можна використовувати і в C + + Builder без модифікації, але зворотне твердження не вірно.

Замість окремого інструментарію, що оперує візуальними елементами управління, в C++ Builder інтегрована так звана Палітра компонентів, розділена картотечними вкладками на декілька функціональних груп. Функціональні можливості що поставляються компонентам, можна досить просто модифікувати, а також розробляти компоненти, що володіють абсолютно новою оригінальною поведінкою.

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


2. Спеціальна частина


2.1 Декомпозиція вихідної задачі на функціональні модулі


Задачу треба «розкласти по полицям» так ретельно, щоб кожна дія була визначена і весь ланцюг таких дій був також вірним. Іноді це дуже важко зробити, але саме це є головною метою вивчення дисциплін циклу програмування.

В цьому розділі слід викласти перелік та призначення візуальних елементів на формі програми в середовищі Builder C++.

Для реалізації даної програми було використано декілька функцій. Перша функція - це Порівняння. В цій функції ми порівнюємо звичайні дроби. В ній ми передбачили всі можливі варіанти звичайних дробів. Друга функція - це додавання. В ній ми додаємо дроби. Також було переглянуто всі можливі варіанти дробів. Третя функція - це віднімання. Вона по структурі аналогічна до додавання, за винятком того, що за її допомогою віднімаємо дроби. Наступна функція - це множення. Найпростіша функція. В ній ми реалізовуємо множення дробів вже в незалежності від варіантів. Функція ділення виконується аналогічно до множення.

На формі ми використали такі візуальні елементи як Button - кнопки, для переходу між формами(сторінками), а також для обчислення виразів; Label - для коментарі та пунктів плану на сторінках змісту; Timer - для встановлення часу на головній формі; Image - для оформлення фону; Edit - для введення даних, а також для виведення результатів обчислення; MounthCalendar - для відображення календаря на головній формі. В першій частині програми - теоретичній - було використано BitBtn для створення кольорових кнопок переходу між розділами. В другій - практичній - Button, а також було підключено два файли xpstyle.manifest та xpstyle.rc для того, щоб надати звичайним кнопкам вигляду кнопок Windows XP. Всі дії та підключення файлів були успішними.

2.2.Програма задачі та її опис


// Теория__fastcall TForm1: BitBtn1Click (TObject *Sender)

{->Show();->Visible=0;

}

// практика__fastcall TForm1: BitBtn2Click (TObject *Sender)

{->Show();->Visible=0;

}

// Время в программе__fastcall TForm1: Timer1Timer (TObject *Sender)

{->Caption = FormatDateTime («hh:nn:ss», Time());->Interval=1000; // меньше число, больше точность

}

// о программе__fastcall TForm1: BitBtn4Click (TObject *Sender)

{->Show();->Visible=0;

}

// выход__fastcall TForm1: BitBtn3Click (TObject *Sender)

{();

}

// закрытие

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form2;

// программа

__fastcall TForm2:TForm2 (TComponent* Owner)

: TForm(Owner)

{

}

// Окружность и круг__fastcall TForm2: Button1Click (TObject *Sender)

{->Show();();

}

// Доли. Обыкновенные дроби__fastcall TForm2: Button2Click (TObject *Sender)

{->Show();();

}

// сравнение дробей__fastcall TForm2: Button3Click (TObject *Sender)

{->Show();();

}

// сложение и вычитание дробей__fastcall TForm2: Button4Click (TObject *Sender)

{->Show();();

}

// деление и дроби__fastcall TForm2: Button5Click (TObject *Sender)

{->Show();();

}

// смешаные числа__fastcall TForm2: Button6Click (TObject *Sender)

{->Show();();

}

// правильные и не правильные дроби__fastcall TForm2: BitBtn1Click (TObject *Sender)

{->Show();();

}

// правила__fastcall TForm2: Button8Click (TObject *Sender)

{->Show();();

}

// на главную__fastcall TForm2: BitBtn2Click (TObject *Sender)

{->Show();();

}

// на главную__fastcall TForm2: Button7Click (TObject *Sender)

{->Close();->Show();

}

// правила__fastcall TForm2: Button9Click (TObject *Sender)

{->Show();();

}

Коло і круг

// окружность и круг

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

#include «Unit1.h»

#include «Unit2.h»

#include «Unit3.h»

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form3;

// программа

__fastcall TForm3:TForm3 (TComponent* Owner)

: TForm(Owner)

{

}

// на главную__fastcall TForm3: BitBtn1Click (TObject *Sender)

{->Show();();

}

// теория__fastcall TForm3: BitBtn2Click (TObject *Sender)

{->Show();();

}

// выход__fastcall TForm3: BitBtn3Click (TObject *Sender)

{->Close();->Show();

}

// закрытие

Звичайні дроби

// Доли. Обыкновенные дроби.

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

#include «Unit1.h»

#include «Unit2.h»

#include «Unit4.h»

#include «Unit5.h»

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form4;

// программа

__fastcall TForm4:TForm4 (TComponent* Owner)

: TForm(Owner)

{

}

// следуйщая__fastcall TForm4: BitBtn1Click (TObject *Sender)

{->Show();();

}

// теория__fastcall TForm4: BitBtn2Click (TObject *Sender)

{->Show();();

}

// выход__fastcall TForm4: BitBtn3Click (TObject *Sender)

{->Close();->Show();

}

// закрытие

Звичайні дроби

// Доли. Обыкновенные дроби.

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

#include «Unit1.h»

#include «Unit2.h»

#include «Unit3.h»

#include «Unit4.h»

#include «Unit5.h»

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form5;

// программа

__fastcall TForm5:TForm5 (TComponent* Owner)

: TForm(Owner)

{

}

// назад__fastcall TForm5: BitBtn1Click (TObject *Sender)

{->Show();();

}

// теория__fastcall TForm5: BitBtn2Click (TObject *Sender)

{->Show();();

}

// выход__fastcall TForm5: BitBtn3Click (TObject *Sender)

{->Close();->Show();

}

// закрытие

Порівняння дробів

// сравнение дробей

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form6;

// программа

__fastcall TForm6:TForm6 (TComponent* Owner)

: TForm(Owner)

{

}

// следуйщая__fastcall TForm6: BitBtn1Click (TObject *Sender)

{->Show();();

}

// теория__fastcall TForm6: BitBtn2Click (TObject *Sender)

{->Show();();

}

// выход__fastcall TForm6: BitBtn3Click (TObject *Sender)

{->Close();->Show();

}

// закрытие

Порівняння дробів

// Сравнение дробей

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form7;

// программа

__fastcall TForm7:TForm7 (TComponent* Owner)

: TForm(Owner)

{

}

// назад__fastcall TForm7: BitBtn1Click (TObject *Sender)

{->Show();();

}

// теория__fastcall TForm7: BitBtn2Click (TObject *Sender)

{->Show();();

}

// выход__fastcall TForm7: BitBtn3Click (TObject *Sender)

{->Close();->Show();

}

// закрытие

Додавання і віднімання дробів

// сложение и вычитание дробей

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

#include «Unit1.h»

#include «Unit2.h»

#include «Unit8.h»

#include «Unit9.h»

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form10;

// программа

__fastcall TForm10:TForm10 (TComponent* Owner)

: TForm(Owner)

{

}

// следуйщая__fastcall TForm10: BitBtn1Click (TObject *Sender)

{->Show();();

}

// теория__fastcall TForm10: BitBtn2Click (TObject *Sender)

{->Show();();

}

// выход__fastcall TForm10: BitBtn3Click (TObject *Sender)

{->Close();->Show();

}

// закрытие

Додавання і віднімання дробів

// сложение и вычитание дробей

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

#include «Unit1.h»

#include «Unit2.h»

#include «Unit8.h»

#include «Unit9.h»

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form11;

// программа

__fastcall TForm11:TForm11 (TComponent* Owner)

: TForm(Owner)

{

}

// назад__fastcall TForm11: BitBtn1Click (TObject *Sender)

{->Show();();

}

// теория__fastcall TForm11: BitBtn2Click (TObject *Sender)

{->Show();();

}

// выход__fastcall TForm11: BitBtn3Click (TObject *Sender)

{->Close();->Show();

}

// закрытие

Правильні і не правильні дроби

// Правильные и не правильные дроби

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form8;

// программа

__fastcall TForm8:TForm8 (TComponent* Owner)

: TForm(Owner)

{

}

// следуйщая__fastcall TForm8: BitBtn1Click (TObject *Sender)

{->Show();();

}

// теория__fastcall TForm8: BitBtn2Click (TObject *Sender)

{->Show();();

}

// выход__fastcall TForm8: BitBtn3Click (TObject *Sender)

{->Close();->Show();

}

// закрытие

Правильні і не правильні дроби

// правильные и не правильные дроби

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form9;

// программа

__fastcall TForm9:TForm9 (TComponent* Owner)

: TForm(Owner)

{

}

// назад__fastcall TForm9: BitBtn1Click (TObject *Sender)

{->Show();();

}

// теория__fastcall TForm9: BitBtn2Click (TObject *Sender)

{->Show();();

}

// выход__fastcall TForm9: BitBtn3Click (TObject *Sender)

{->Close();->Show();

}

// закрытие

Ділення дробів

/ Деление и дроби

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form12;

// программа

__fastcall TForm12:TForm12 (TComponent* Owner)

: TForm(Owner)

{

}__fastcall TForm12: BitBtn1Click (TObject *Sender)

{->Show();();

}

// теория__fastcall TForm12: BitBtn2Click (TObject *Sender)

{->Show();();

}

// выход__fastcall TForm12: BitBtn3Click (TObject *Sender)

{->Close();->Show();

}

// закрытие

Ділення дробів

// Деление и дроби

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form13;

// программа

__fastcall TForm13:TForm13 (TComponent* Owner)

: TForm(Owner)

{

}

// назад__fastcall TForm13: BitBtn1Click (TObject *Sender)

{->Show();();

}

// теория__fastcall TForm13: BitBtn2Click (TObject *Sender)

{->Show();();

}

// выход__fastcall TForm13: BitBtn3Click (TObject *Sender)

{->Close();->Show();

}

// закрытие

Мішані числа

// смешааные числа

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form14;

// программа

__fastcall TForm14:TForm14 (TComponent* Owner)

: TForm(Owner)

{

}

// следуйщая__fastcall TForm14: BitBtn1Click (TObject *Sender)

{->Show();();

}

// теория__fastcall TForm14: BitBtn2Click (TObject *Sender)

{->Show();();

}

// выход__fastcall TForm14: BitBtn3Click (TObject *Sender)

{->Close();->Show();

}

// закрытие

Мішані числа

// смешаные числа

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form15;

// программа

__fastcall TForm15:TForm15 (TComponent* Owner)

: TForm(Owner)

{

}

// назад__fastcall TForm15: BitBtn1Click (TObject *Sender)

{->Show();();

}

// следуйщая__fastcall TForm15: BitBtn2Click (TObject *Sender)

{->Show();();

}

// теория__fastcall TForm15: BitBtn3Click (TObject *Sender)

{->Show();();

}

// выход__fastcall TForm15: BitBtn4Click (TObject *Sender)

{->Close();->Show();

}

// закрытие

Мішані числа

// смешаные числа

#include <vcl.h>

#include <math.h>

#include <iostream.h>

#include <conio.h>

#include <stdlib.h>

#include <stdio.h>

#pragma hdrstop

#include «Unit1.h»

#include «Unit2.h»

#include «Unit15.h»

#include «Unit16.h»

#include «Unit17.h»

// библиотеки

#pragma package (smart_init)

#pragma resource «*.dfm»*Form16;

// программа

__fastcall TForm16:TForm16 (TComponent* Owner)

: TForm(Owner)

{

}

// назад__fastcall TForm16: BitBtn1Click (TObject *Sender)

{->Show();();

}


2.3 Тестування та відлагодження програми


У процесі створення програми було допущено декілька помилок.

На початку створення теоретичної частини програми виникла помилка з відображенням форм. Під час запуску програми одночасно зявлялося дві форми, причому друга форма працювала не правильно. Під час переходу на неї програма переставала працювати. Картинка зміщувалася, текст був незрозумілим, а також кнопки зміщувалися і не працювали. Усунути цю помилку вдалося лише шляхом її остаточної заміни. Форма була видалена, створена її альтернатива та підключена до існуючої програми. Після чого програма стала працювати нормально без помилок.

Далі зявилася помилка з перетворення неправильних дробів. Вона полягала у тому, що не правильно виконувалося обчислення. На формі розташовано два віконця порівняння, код використовувався один і той же, але перше віконце працювало не правильно, на відміну від другого. Виявити причину цієї помилки не вдалося, після повторної компіляції виявилося, що було не вірно розміщено компоненти Edit, цю помилку виявлено і виправлено.

У процесі створення програми синтаксичних помилок не було допущено.


2.4 Інструкція користувача для роботи з програмою


1)Запустити файл obyknovenna_drob.exe з диску.

)Для переходу до теорії натиснути кнопку «Теоретический материал».

.1) Для переходу до одного з розділів теорії натисніть кнопку «Перейти»

.1.1) Для переходу між вікнами теорії натисніть на кнопки «Следуйщая»/» Назад»

.1.2) Для переходу в вікно теорії натисніть - «Теория».

)Для переходу до практичної частини натиснути на кнопку «Практический материал».

.1) Для переходу до одного з розділів практики натисніть кнопку «Перейти»

.1.1) Для порівняння дробів натисніть кнопку «Сравнить»

.1.2) Для обчислення суми, різниці, добудку чи частки наисніть кнопку «Решить».

.1.3) Для Перетворення неправильного дробу натисніть кнопку «Перевести».

.1.4) Для переходу до вікна практики натисніть кнопку «Действия с дробями».

)Для переходу до вікна інформації про програму натиснути на кнопку «О программе».

)Для виходу з програми натиснути на кнопку «Выход».

Висновки


На початку роботи над курсовим проектом «Реалізація обєкту звичайний дріб на мові С++» було поставлене завдання створення зрозумілої та навчальної програми для учнів 5 класів. Яка була б цікавою та пізнавальною. В результаті була отримана програма «Обыкновенная дробь».

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

До програми було додано такі елементи як годинник та календар. Програму умовно можна розділити на три розділи «Теорія», «Практика» та «Про Програму». В першому розділі були створені звичайні кольорові кнопки, в другому та третьому більш удосконалені, які виглядають як кнопки ОС Windows XP.


Перелік джерел


1. Холзнер С. VISUAL С++6: учебный курс - СПб: Издательство «Питер», 2000. -576 с.

. Подбельский В.В. Язык Си++: Учеб. пособие - 5-е изд. - М.: Финансы и статистика, 2000. -560 с.

. Павловская Т.А. C/C++. Программирование на языке высокого уровня - СПб: Издательство «Питер», 2001. - 464 с.

. Глушаков СВ. и др. Язык программирования С++: учебный курс - Харьков: Фолио; М: ООО «Издательство ACT», 2001. -500 с.

. Керниган Б., Ритчи Д. Язык программирования Си: Пер. с англ. - М.:

Финансы и статистика, 1992. - 272 с.

. Страуструп Б. Язык программирования Си++. Часть 1. - Киев: «ДиаСофт», 1993. - 264 с.

. Страуструп Б. Язык программирования С++. Часть 2. - Киев: «ДиаСофт», 1993. - 296 с.

. ГОСТ 19.701-90. ЕСПД. Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения. - М.: 1991.

. ДСТУ 3008-95 «ЗВІТИ У СФЕРІ НАУКИ і ТЕХНІКИ. Структура та правила оформлення».

. Путятин Е.П. Смагин ДМ. Степанов В.П. Турбо Паскаль в курсе высшей математики: Учеб. пособие. - Харьков: Каравелла, 1997.-352 с.

. КозинА.С, Лященко Н.Я. Вычислительная математика. К.: Рад. школа, 1983.-191 С.

. Яремчук Ф.П., Рудченко П.А. Алгебра и элементарные функции. Справочник. К.: Наукова думка, 1987.-649С.



Програма "звичайний дріб" 1.Загальна частина 1.1Постановка задачі програма др

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ