Реферат по предмету "Информатика, программирование"


Методи розробки структури програми

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ
Бердичівський політехнічний коледж
КОНТРОЛЬНА РОБОТА
з дисципліни “Технологія розробки програмногозабезпечення”
(варіант №15)
Виконав: студентгрупи ПЗС-504
Томашов О.В.
Перевірив: викладач
Тростянський Б.Г.
м. Бердичів
2007 р.

/>Зміст
 
1. Методи розробки структури програми
2. Документація, що створюється і використовується впроцесі розробки програмних засобів
3. Інструменти комп’ютерноїпідтримки розробки програмних засобів
4. Практичне завдання
Список використаної літератури
 
/>/>1. Методирозробки структури програми
У якості модульної структури програми прийнятовикористовувати деревоподібну структуру, яка відображує принцип спадаючогопроектування. У вузлах такого дерева розміщаються програмні модулі, аспрямовані дуги (стрілки) показують статичну підпорядкованість модулів, тобтокожна дуга показує, що в тексті модуля, з якого вона виходить, маєтьсяпосилання на модуль, у який вона входить. Іншими словами, кожен модуль можезвертатися до підлеглих йому модулів, тобто виражається через ці модулі. Прицьому модульна структура програми, у кінцевому рахунку, повинна включати ісукупність специфікацій модулів, що утворять цю програму. Специфікаціяпрограмного модуля містить:
синтаксичну специфікацію його входів, щодозволяє побудувати використовуваною мовою програмування синтаксично правильнезвертання до нього (до будь-якого його входу),
функціональну специфікацію модуля (опис функцій,виконуваних цим модулем по кожному з його входів).
Функціональна специфікація модуля будуєтьсятак само, як і функціональна специфікація ПЗ.
У процесі розробки програми її модульнаструктура може по-різному формуватися і використовуватися для визначенняпорядку програмування і налагодження модулів, зазначених у цій структурі. Найчастішевикористовуються два методи: метод висхідної розробки і спадаючої розробки. Спочаткубудується модульна структура програми у виді дерева. Потім по черзіпрограмуються модулі програми, починаючи з модулів самого нижнього рівня (листидерева модульної структури програми), у такому порядку, щоб для кожногопрограмного модуля були вже запрограмовані всі модулі, до яких він можезвертатися. Після того, як усі модулі програми запрограмовані, виконується їхнєпочергове тестування і налагодження у такому ж (висхідному) порядку, у якомувелося їхнє програмування. Такий порядок розробки програми на перший поглядздається цілком природним: кожен модуль при програмуванні виражається через ужезапрограмовані безпосередньо підлеглі модулі, а при тестуванні використовує вженалагоджені модулі. Однак, сучасна технологія не рекомендує такий порядокрозробки програми. По-перше, для програмування якого-небудь модуля зовсім непотрібно наявності текстів використовуваних їм модулів (для цього досить, щобкожен використовуваний модуль був лише описаний в мірі, яка дозволяє побудуватиправильне звертання до нього), а для тестування його можливо використовуванімодулі заміняти їх імітаторами (заглушками). По-друге, кожна програма в якомусьступені підкоряється деяким внутрішнім для неї, але глобальним для її модулівпринципам реалізації, припущенням, структурам даних і т.п., що визначає їїконцептуальну цілісність і формується в процесі її розробки. При висхіднійрозробці ця глобальна інформація для модулів нижніх рівнів ще не ясна в повномуобсязі, тому дуже часто приходиться їх перепрограмувати, коли при програмуванніінших модулів виробляється істотне уточнення цієї глобальної інформації (наприклад,змінюється глобальна структура даних). По-третє, при висхідному тестуванні длякожного модуля (крім головного) приходиться створювати ведучу програму, якаповинна підготувати для модуля, який проходить тестування, необхідний станінформаційного середовища і зробити необхідне звертання до нього. Це приводитьдо великого обсягу «відладочного» програмування й у той же час не даєніякої гарантії, що тестування модулів виконується саме в тих умовах, у якихвоно буде виконуватися в робочій програмі.
/>/>2. Документація,що створюється і використовується в процесі розробки програмних засобів
 
При розробці ПЗ створюється і використовуєтьсявеликий обсяг різноманітної документації. Вона необхідна як засіб передачіінформації між розроблювачами ПЗ, як засіб керування розробкою ПЗ і як засібпередачі користувачам інформації, необхідної для застосування і супроводу ПЗ. Настворення цієї документації приходиться велика частка вартості ПЗ:
Цю документацію можна розбити на дві групи:
Документи управління розробкою ПЗ.
Документи, що входять до складу ПЗ.
Документи управління розробкою ПЗ керують іпротоколюють процеси розробки і супроводу ПЗ, забезпечуючи зв'язок усерединіколективу розроблювачів ПЗ і між колективом розроблювачів і менеджерами ПЗ — особами,що керують розробкою ПЗ. Ці документи можуть бути наступних типів:
Плани, оцінки, розклади. Ці документистворюються менеджерами для прогнозування і керування процесами розробки ісупроводу ПЗ.
Звіти про використання ресурсів у процесірозробки. Створюються менеджерами.
Стандарти. Ці документи вказуютьрозроблювачам, якими принципами, правилами, угодами вони повинні користуватисяв процесі розробки ПЗ. Ці стандарти можуть бути як міжнародними чинаціональними, так і спеціально створеними для організації, у якій ведетьсярозробка ПЗ.
Робочі документи. Це основні технічнідокументи, що забезпечують зв'язок між розроблювачами. Вони містять фіксаціюідей і проблем, що виникають у процесі розробки, опис використовуванихстратегій і підходів, а також робочі (тимчасові) версії документів, що повинніувійти в ПЗ.
Замітки і переписування. Ці документи фіксуютьрізні деталі взаємодії між менеджерами і розроблювачами. Документи, що входятьдо складу ПЗ, описують програми ПЗ як з погляду їхнього застосуваннякористувачами, так і з погляду їхніх розроблювачів і супровідників. Тут слідзазначити, що ці документи будуть використовуватися не тільки на стадіїексплуатації ПЗ але і на стадії розробки для керування процесом розробки (разомз робочими документами). Ці документи утворять два комплекти з різнимпризначенням:
Користувальницька документація ПЗ (К-документация).
Документація по супроводу ПЗ (С-документація)/>/>3. Інструментикомп’ютерної підтримки розробки програмних засобів
Специфікація якості визначає основні орієнтири(цілі), які на всіх етапах розробки ПЗ так чи інакше впливають на прийняттярізних рішень, на вибір придатного варіанту розробки ПЗ. Однак кожен примітивякості має свої особливості такого впливу, тим самим, забезпечення йогонаявності в ПЗ може зажадати своїх підходів і методів розробки ПЗ чи окремихйого частин. Суперечливість критеріїв якості ПЗ, а також і їхніх примітивівякості, що виражають: задовільне забезпечення одного якого-небудь примітиваякості ПЗ може істотно ускладнити забезпечення деяких інших з цих примітивів. Томуістотна частина процесу забезпечення якості ПЗ складається з пошуку прийнятнихкомпромісів. Ці компроміси частково повинні бути визначені вже в специфікаціїякості ПЗ: модель якості ПЗ повинна конкретизувати необхідний ступіньприсутності в ПЗ кожного його примітива якості і визначати пріоритетидосягнення цих ступенів. Забезпечення якості здійснюється в кожнімтехнологічному процесі: прийняті в ньому рішення в тім чи іншому ступенівпливають на якість ПЗ у цілому. Зокрема і тому, що значна частина примітивівякості зв'язана не стільки з властивостями програм, що входять у ПЗ, скільки ізвластивостями документації. У силу відзначеної суперечливості примітивів якостідуже важливо дотримуватися обраних пріоритетів у їхньому забезпеченні. Прицьому варто дотримуватися двох загальних принципів:
спочатку необхідно забезпечити необхіднуфункціональність і надійність ПЗ, а потім уже доводити інші критерії якості доприйнятного рівня їхньої присутності в ПЗ;
немає ніякої необхідності і, може бути, навітьшкідливо домагатися більш високого рівня присутності в ПЗ якого-небудьпримітива якості, чим той, котрий визначений у специфікації якості ПЗ. />З користувальницькою документацієюзв'язані такі примітиви якості ПЗ, як документованість та інформативність. Узв'язку з цим варто звернути увагу на широко використовуваний у даний часпідхід інформування користувача в інтерактивному режимі (у процесі застосуванняпрограм ПЗ). Таке інформування в багатьох випадках виявляється більш зручнимдля користувача, чим за допомогою автономної документації, тому що дозволяєкористувачу без якого-небудь пошуку викликати необхідну інформацію за рахуноквикористання контексту її виклику. Такий підхід до інформування користувача єдуже перспективним.
Програмним шляхом реалізуються такі примітивиякості ПЗ як комунікабельность. Комунікабельность забезпечується відповідноюреалізацією обробки виняткових ситуацій і створенням придатногокористувальницького інтерфейсу. Виникнення виняткової ситуації в багатьохвипадках означає, що виникла необхідність інформувати користувача про хідвиконання програми. При цьому видавана користувачу інформація повинна бути простоюдля розуміння. Користувальницький інтерфейс представляє засіб взаємодіїкористувача з ПЗ. При розробці користувальницького інтерфейсу варто враховуватипотреби, досвід і здібності користувача. Тому потенційні користувачі повиннібути задіяні у процесі розробки такого інтерфейсу. Великий ефект тут дає йогопрототипування. При цьому користувачі повинні одержати доступ до прототипівкористувальницького інтерфейсу, а їхня оцінка різних можливостейвикористовуваного прототипу повинна істотно враховуватися при створенніостаточного варіанта користувальницького інтерфейсу. У силу великоїрізноманітності користувачів і видів ПЗ існує безліч різних стилівкористувальницьких інтерфейсів, при розробці яких можуть використовуватисярізні принципи і підходи. Однак наступні найважливіші принципи вартодотримувати завжди:
користувальницький інтерфейс повиннийбазуватися на термінології і поняттях, знайомих користувачу;
користувальницький інтерфейс повинний бутиоднаковим;
користувальницький інтерфейс повинний дозволятикористувачу виправляти власні помилки;
користувальницький інтерфейс повиннийдозволяти одержання користувачем довідкової інформації: як по його запитам, такі генеруємим ПЗ.
В даний час широко поширені командні іграфічні користувальницькі інтерфейси.
Командний користувальницький інтерфейс надаєкористувачу можливість звертатися до ПЗ із деяким завданням (запитом), щопредставляється деяким текстом (командою) на спеціальній командній мові (мовізавдань). Достоїнствами такого інтерфейсу є можливість його реалізації надешевих алфавітно-цифрових терміналах і можливість мінімізації необхідного відкористувача введення з клавіатури. Недоліками такого інтерфейсу є необхідністьвивчення командної мови і досить велика імовірність помилки користувача призавданні команди. У зв'язку з цим командний користувальницький інтерфейсзвичайно вибирають тільки досвідчені користувачі. Такий інтерфейс дозволяє їмздійснювати швидку взаємодію з комп'ютером і надає можливість поєднуватикоманди з процедурами і програмами (наприклад, мова Shell операційної системиUnix).
Графічний користувальницький інтерфейс надаєкористувачу можливості:
звертатися до ПЗ шляхом вибору на екраніпридатного графічного чи текстового об'єкта,
одержувати від ПЗ інформацію на екрані у видіграфічних і текстових об'єктів,
здійснювати прямі маніпуляції з графічними ітекстовими об'єктами, представленими на екрані.
Графічний користувальницький інтерфейсдозволяє
розміщати на екрані безліч різних вікон, у якіможна виводити інформацію незалежно;
використовувати графічні об'єкти (піктограмамичи іконки), для позначення різних інформаційних об'єктів чи процесів;
використовувати курсор для вибору об'єктів (чиїхніх елементів), розміщених на екрані, який переміщається за допомогоюклавіатури чи миші.
Достоїнством графічного користувальницькогоінтерфейсу є можливість створення зручної і зрозумілої користувачу моделівзаємодії з ПЗ (панель керування, робочий стіл і т.п.) без необхідностівивчення якої-небудь спеціальної мови. Однак його розробка вимагає великихвитрат часу, порівнянних із витратами по створення самого ПЗ. Крім того,виникає серйозна проблема по перенесенню ПЗ на інші операційні системи, тому щографічний інтерфейс істотно залежить від можливостей (графічноїкористувальницької платформи), наданих операційною системою для його створення.
/>4. Практичнезавдання
 
З використанням засобів візуальногопрограмування розробити програму для автоматичного розрахунку значень складноїфункції:
/>
 
Приклад файлу форми Delphi6 для табулюванняфункції:
 
unit Func_tab;
interface
uses
Windows, Messages, SysUtils, Variants,Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, Menus;
type
TForm1 = class (TForm)
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Edit2: TEdit;
Label3: TLabel;
Edit3: TEdit;
StringGrid1: TStringGrid;
BitBtn1: TBitBtn;
Label4: TLabel;
ListBox1: TListBox;
Memo1: TMemo;
BitBtn2: TBitBtn;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N3: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
BitBtn3: TBitBtn;
procedure BitBtn1Click (Sender: TObject);
procedure Edit1KeyPress (Sender: TObject; varKey: Char);
procedure Edit2KeyPress (Sender: TObject; varKey: Char);
procedure Edit3KeyPress (Sender: TObject; varKey: Char);
procedure Edit1Exit (Sender: TObject);
procedure Edit2Exit (Sender: TObject);
procedure Edit3Exit (Sender: TObject);
procedure BitBtn2Click (Sender: TObject);
procedure N4Click (Sender: TObject);
procedure N3Click (Sender: TObject);
procedure FormActivate (Sender: TObject);
procedure BitBtn3Click (Sender: TObject);
procedure N5Click (Sender: TObject);
procedure N7Click (Sender: TObject);
procedure N8Click (Sender: TObject);
procedure N9Click (Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
X,Xn,Xk,H: real; // Параметри табулювання
fname: String [25]; //
f: textfile;
implementation
{$R *. dfm}
 // Повідомлення про помилку у завданніінтервалів табулювання
procedure P1;
begin
MessageDlg ('«Xп» не може бутибільшим ніж «Хк». ' +#13
+'Введіть значення правильно. ', mtWarning, [mbCancel],0);
Form1. Edit1. Text: ='';
Form1. Edit2. Text: ='';
end;
 // Повідомлення про помилку у значенні крокутабулювання по відношенню до
 // меж табулювання
procedure P2;
begin
MessageDlg ('Крок табулювання «H» неможе приймати таких значень. ' +#13
+'Введіть значення правильно. ', mtWarning, [mbCancel],0);
Form1. Edit3. Text: ='';
end;
 // Повідомлення про помилку перевищеннядопустимої розмірності даних
procedure P3;
begin
MessageDlg ('Введене значення знаходться замежами допустимого. ' +#13
+'Введіть значення правильно. ', mtWarning, [mbCancel],0);
end;
procedure P4;
begin
MessageDlg ('Треба ввести всі дані. ',mtWarning, [mbCancel], 0);
end;
 // Процедура очищення даних у формі
procedure P5;
begin
Form1. Edit1. Text: ='';
Form1. Edit2. Text: ='';
Form1. Edit3. Text: ='';
Form1. Edit1. SetFocus;
Form1. Height: =167;
Form1. Position: =poScreenCenter;
Form1. Label4. Visible: =False;
Form1. Label5. Visible: =False;
Form1. Label6. Visible: =False;
Form1. Label7. Visible: =False;
Form1. StringGrid1. Visible: =False;
Form1. ListBox1. Items. Clear;
Form1. Memo1. Lines. Clear;
Form1. ListBox1. Visible: =False;
Form1. Memo1. Visible: =False;
end;
 // Контроль введення даних у поля фории
procedure TForm1. Edit1KeyPress (Sender: TObject;var Key: Char);
begin
case Key of
'0'. '9',Chr (8):;
'-': if (pos ('-',Edit1. Text) = 0) and (length(Edit1. Text) = 0)
Then Key: = '-'
else Key: = Chr (0);
',': if pos (',',Edit1. Text) 0
THen Key: = Chr (0);
else Key: = Chr (0);
end;
end;
procedure TForm1. Edit2KeyPress (Sender: TObject;var Key: Char);
begin
case Key of
'0'. '9',Chr (8):;
'-': if (pos ('-',Edit2. Text) = 0) and (length(Edit2. Text) = 0)
Then Key: = '-'
else Key: = Chr (0);
',': if pos (',',Edit2. Text) 0
THen Key: = Chr (0);
else Key: = Chr (0);
end;
end;
procedure TForm1. Edit3KeyPress (Sender: TObject;var Key: Char);
begin
case Key of
'0'. '9',Chr (8):;
',': if pos (',',Edit3. Text) 0
THen Key: = Chr (0);
else Key: = Chr (0);
end;
end;
procedure TForm1. Edit1Exit (Sender: TObject);
begin
If Edit1. Text='' Then Exit;
If (Abs (StrToFloat (Edit1. Text)) >100000)Then
begin
P3;
Edit1. Text: ='';
Edit1. SetFocus;
end;
end;
procedure TForm1. Edit2Exit (Sender: TObject);
begin
If Edit2. Text='' Then Exit;
If (Abs (StrToFloat (Edit2. Text)) >100000)Then
begin
P3;
Edit2. Text: ='';
Edit2. SetFocus;
end;
end;
procedure TForm1. Edit3Exit (Sender: TObject);
begin
If Edit3. Text='' Then Exit;
If (StrToFloat (Edit3. Text) >10000) Then
begin
P3;
Edit3. Text: ='';
Edit3. SetFocus;
end;
end;
 // Основна процедура програми
Procedure TForm1. BitBtn1Click (Sender: TObject);
var
I,K: integer;
Y: array [0. .1000] of Real;
label L1;
begin
 // Перевірка наявності правильних значень вполях введення і їх взаємної
 // коректності, з виведенням відповднихповідомлень і формуванням переходів
IF (Edit1. Text = '') or (Edit2. Text = '') or(Edit3. Text = '') then
begin
P4;
Exit;
end;
IF Edit3. Text = '0' then
begin
MessageDlg ('Треба задати крок табулювання,'
+ #13 +' який має ненульове значення',mtWarning, [mbCancel], 0);
Edit3. Text: = '';
Edit3. SetFocus;
goto l1;
end;
Xn: =StrToFloat (Edit1. Text);
Xk: =StrToFloat (Edit2. Text);
H: =StrToFloat (Edit3. Text);
If Xk
begin
P1;
goto L1;
end;
If (H=Abs (Xk-Xn)) Then
begin
P2;
goto L1;
end;
X: =Xn-H;
K: = Round ( (Abs ( (Xk-Xn)) /H));
If K>1000 Then
begin
MessageDlg ('Переповнення масиву даних. '
+#13 +'Треба зменшити інтервал або'
+#13 +' збільшити крок табулювання',mtWarning, [mbCancel], 0);
Edit1. Text: = '';
Edit2. Text: = '';
Edit3. Text: = '';
goto l1;
end;
 // Фомування компонентів для виведеннярезультатів
StringGrid1. RowCount: = K+2;
Form1. Height: =430;
Form1. Position: =poScreenCenter;
Label4. Visible: =True;
Label5. Visible: =True;
Label6. Visible: =True;
Label7. Visible: =True;
StringGrid1. Visible: =True;
Label7. Caption: ='у полі memo';
ListBox1. Items. Clear;
Memo1. Lines. Clear;
ListBox1. Visible: =True;
Memo1. Visible: =True;
StringGrid1. Cells [0,0]: ='X';
StringGrid1. Cells [1,0]: ='Y';
 // Розрахунок і виведення результатів
For I: =0 to K do
begin
Y [I]: = (1+ln (2-Xn+H*I)) / (1-Xn+H*I+0.1);
 // Наступний рядок забезпечує виведеннярезультату
 // з точністю до тисячних
Y [I]: = Round (Y [I] *1000) /1000;
StringGrid1. Cells [0, I+1]: =FloatToStr (Xn+H*I);// Виведення у таблицю
StringGrid1. Cells [1, I+1]: =FloatToStr (Y [I]);
ListBox1. Items. Add (FloatToStr (Xn+H*I) +' '+FloatToStr(Y [i])); // Виведення у список
Memo1. Lines. Add (FloatToStr (Xn+H*I) +' '+FloatToStr(Y [i])); // Виведення у поле Мемо
end;
l1:;
end;
 // Запис результатів у файл
procedure TForm1. BitBtn2Click (Sender: TObject);
begin
ListBox1. Items. SaveToFile ('result. txt');
end;
 // Збереження у файлі
procedure TForm1. N4Click (Sender: TObject);
begin
ListBox1. Items. SaveToFile (fname);
end;
 // Зчитати з файла і вивести у поле Мемо ізскриттям зайвих компонентів
procedure TForm1. N3Click (Sender: TObject);
begin
If FileExists ('result. txt') = False Then
Begin
MessageDlg ('Файла не існує', mtWarning, [mbCancel],0);
Exit;
end;
Label7. Visible: =True;
Label7. Caption: = 'Результати зчитування зфайлу';
Memo1. Lines. LoadFromFile ('result. txt');
Memo1. Visible: =True;
Label4. Visible: =False;
Label5. Visible: =False;
Label6. Visible: =False;
ListBox1. Visible: =False;
StringGrid1. Visible: =False;
Form1. Height: =430;
Memo1. SetFocus;
Form1. Position: =poScreenCenter;
end;
 // Створення файлу з перевіркою йогоіснування
procedure TForm1. FormActivate (Sender: TObject);
begin
fname: ='result. txt';
AssignFile (f, fname);
If FileExists ('result. txt') = False Then
begin
rewrite (f);
CloseFile (f);
end;
end;
 // Очищення полів введення
procedure TForm1. BitBtn3Click (Sender: TObject);
begin
P5;
end;
procedure TForm1. N5Click (Sender: TObject);
begin
P5;
end;
 // Вихід з програми
procedure TForm1. N7Click (Sender: TObject);
begin
Close;
end;
 // Виведення довідки
procedure TForm1. N8Click (Sender: TObject);
begin
ShowMessage ('Томашов О.В. ' + #13 + ' студентгрупи ПЗС-504');
end;
procedure TForm1. N9Click (Sender: TObject);
begin
ShowMessage ('Навчальна програма табулюванняфункції. ' + #13 +
' Версія 1.0');
end;
end.
/>/>Списоквикористаної літератури
1.        «Требованияи спецификации в разработке программ.» М. Мир, 1984.
2.        В. Турский. «Методологияпрограммирования».
3.        Б. Іванов “Дискретная математика. Алгоритмы ипрограммы".
4.        Конспект лекцій з предмету.
5.        Інтернет.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Тридцатилетняя война 16181648 гг
Реферат Борьба добра и зла в романе Михаила Булгакова Мастер и Маргарита
Реферат Форма організації самостійної роботи учнів 5 класу на уроці німецької мови
Реферат Виды скидок
Реферат Правовое регулирование искусственного оплодотворения в РФ
Реферат Божественный глагол: Пушкин, прочитанный в России и во Франции
Реферат Варианты русского литературного произношения
Реферат Проектування блоку обробки сигналів
Реферат 1. Комп’ютерні мережі Тема Комп’ютерні мережі
Реферат Лабораторный КРС-спектрометр
Реферат Становление и развитие педагогической мысли в России
Реферат Местное самоуправление в России : история и современное правовое регулирование
Реферат Переход подростка в мир взрослых (По роману Дж. Селинджера "Над пропастью во ржи")
Реферат Мотиви та етапи інтернаціоналізації підприємства Основні типи стратегій виходу на зарубіжні ринки
Реферат Роман-эпопея Л. Толстого "Война и мир": от замысла до его воплощения