Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Zvit.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
400.9 Кб
Скачать

3. Вивчення пакету Progi-cad

ProgeCAD - універсальна 2D/3D САПР на основі IntelliCAD 6.6, сумісна з світовим лідером на ринку САПР і підтримуюча DWG/DXF Автокад файли версій 2.5 - 2012!

Вихідний формат програми progeCAD DWG забезпечує повну сумісність з Автокад знімаючи необхідність конвертації файлів і тим самим запобігаючи втраті важливої інформації. ProgeCAD дозволяє експорт файлів креслень як в DWG, так і в DXF формати.ProgeCAD пропонує інтуїтивний інтерфейс зі схожими з Автокад падаючими і панельними меню і командами.

ProgeCAD Professional - система автоматизованого проектування в 2D і 3D середовищах, призначена для створення схем і креслень, конструкторських і технологічних документів, а також 3D моделей, і має широке застосування в архітектурному й інженерному проектуванні, машинобудуванні, електроніці, енергетиці і багатьох інших галузях.

ProgeCAD пропонує такі можливості як експорт в PDF, диспетчер бібліотек блоків iCADLib, підтримка і редагування зображень, включаючи багатокутну підрізку, підтримка зовнішніх посилань, 3D моделювання ACIS, рендеринг, можливість кастомізації в VBA.

4.

Потоки вводу-виводу в С++

Система вводу-виводу в стандартній бібліотеці С++ реалізована у вигляді потоків. Потік вводу-виводу – це логічний пристрій, який приймає та видає інформацію користувача. Кожен потік зв’язаний з фізичним пристроєм (клавіатура, монітор) або з файлом. Бібліотека потоків iostream реалізована як ієрархія класів та забезпечує широкі можливості для виконання операцій вводу-виводу. Далі наведено призначення деяких класів потокового вводу-виводу:

istream – підтримує операції по вводу;

ostream – підтримує операції по виводу;

iostream – підтримує операції по вводу-виводу;

іfstream – підтримує операції по вводу з файлу;

ofstream – підтримує операції по виводу у файл;

fstream – підтримує операції з файлами по вводу-виводу.

Стандартні потоки

Коли запускається програма на С++, автоматично створюються чотири стандартних потоки.

Потік

Призначення

Пристрій по замовчуванню

cin

Стандартний ввід

Клавіатура

cout

Стандартний вивід

Монітор

cerr

Стандартний вивід повідомлень про помилки

Монітор

clog

Стандартний вивід повідомлень про помилки (буферизований)

Монітор

Щоб мати можливість використовувати стандартні потоки необхідно підключити заголовочний файл iostream.h.

Об’єкт стандартного потоку вводу cin класу istream, зв’язаний із стандартним пристроєм вводу, за звичай клавіатурою. Об’єкт стандартного потоку виводу cout класу ostream, зв’язаний із стандартним пристроєм виводу, за звичай монітором. Об’єкт cerr класу ostream, зв’язаний із стандартним пристроєм виводу повідомлень про помилки. Потоки даних, що виводяться, для об’єкту cerr являються небуферизованими. Тобто кожна операція помістити в cerr приводить до миттєвої появи повідомлень про помилки. Об’єкт clog класу ostream, зв’язаний із стандартним пристроєм виводу повідомлень про помилки. Потоки даних, що виводяться, для об’єкту clog являються буферизованими. Тобто кожна операція помістити в clog може привести до того, що вивід буде зберігатися в буфері до тих пір, поки буфер повністю не заповниться або ж поки вмістиме буферу не буде виведене примусово.

Вивід в потік виконується за допомогою операції «помістити в потік», а саме перевантаженої операції <<. Дана операція перевантажена для виводу елементів даних стандартних типів, для виводу рядків та значень вказівників.

Операція << повертає посилання на об'єкт типу ostream, для якого вона викликана. Це дозволяє будувати ланцюжок викликів операції «помістити в потік», що виконуються зліва направо.

іnt і = 5;

double d = 2.08;

cout << "і = " << і << ", d = " << d << '\n';

Ці оператори приведуть до виведення на екран наступного рядка:

і = 5, d = 2.08

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

^ Засоби форматування потоку

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

Функція-член

Призначення

width(int wide)

Дозволяє задати мінімальну ширину поля для виведення значення. При вводі задає максимальне число символів, що читаються. Якщо значення, що виводиться, має менше символів, чим задана ширина поля, то воно доповнюється символами-заповнювачами до заданої ширини (за замовчуванням - пробілами). Якщо ж значення, що виводиться має більше символів, чим ширина відведеного йому поля, то поле буде розширене.

precision(int prec)

Дозволяє прочитати або встановити точність (число цифр після десяткової крапки), з якою виводяться числа з плаваючою крапкою. По замовчуванню числа з плаваючою крапкою виводяться з точністю, рівною шести цифрам.

fill(char ch)

Дозволяє прочитати або встановити символ-заповнювач.

void main()

{

double x;

cout.precision(4);

cout.fill('0');

cout << " x sqrt(x)\n";

for (x = 1.0; x <= 6.0; x++)

{

cout.width(7);

cout << x << ' ';

cout.width(7);

cout << sqrt(x) << '\n';

}

}

Результат роботи програми наступний:

x sqrt(x)

0000001 0000001

0000002 001.414

0000003 001.732

0000004 0000002

0000005 002.236

0000006 002.449

З кожним потоком зв'язаний набір прапорців, що керують форматуванням потоку. Вони являють собою бітові маски. Прапорці форматування і їхнє призначення приведені в табл.3. Встановити значення одного або декількох прапорців можна за допомогою функції-члену setf(long mask).

Розв'язання СЛАР методом Якобі

Метод рішення задачі називають ітераційним, якщо в результаті отримують нескінченну послідовність наближень до рішення. Основна перевага ітераційних методів полягає в тому, що точність шуканого рішення задається. Число ітерацій, яке необхідно виконати для отримання заданої точності , Є основною оцінкою якості методу. З цього числа проводиться порівняння різних методів.

Головним недоліком цих методів є те, що питання збіжності ітераційного процесу вимагає окремого дослідження. Прикладом звичайних ітераційних методів служать: метод ітерацій (метод Якобі), метод Зейделя, метод верхніх релаксацій.

Почнемо з методу ітерацій або як його ще називають методу Якобі.

Існує сиcтема де матриця має зворотну матрицю; - вектор невідомих, f - вектор вільних членів. Систему потрібно перетворити до наступного вигляду: , де , , При цьому aii 0.

Значення суми вважається рівним 0, якщо верхня межа підсумовування менше нижнього. Тоді при рівняння має вигляд: . У методі Якобі виходять із запису системи у вигляді (2), ітерації при цьому визначають наступним чином: , .

Початкові значення - задаються довільно (у програмі ми це робимо, вводячи функцію по генерації випадкових чисел - «random»). Закінчення ітераційного процесу визначають або завданням максимального числа ітерацій n 0, або наступною умовою: ,

Де > 0. В якості нульового наближення в системі (4) приймемо .

Якщо послідовність наближень , ..., , , , ..., , ..., , , ..., має межу , , То ця межа є рішенням системи.

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

Складаючи завдання на мові програмування Borland C + + для реалізації точних методів розв'язання СЛАР я враховував різну кількість рівнянь в системі (розмірність матриці ставив рівним ). Але для перевірки результатів використовував систему рівнянь:

Взагалі кажучи, процес Зейделя сходиться швидше, ніж метод Якобі. Буває, що процес Зейделя сходиться, коли проста ітерація розходиться і т.п. Правда, буває і навпаки. У всякому разі, достатні умови збіжності для методу Якобі достатні і для збіжності методу Зейделя. Реалізувавши програми з одержаної відповіді я побачив, що процес Зейделя сходиться швидше. Це видно за кількістю ітерацій отриманих в програмі при наближеною точності = 0,000001. Якщо для методу Якобі вони становлять 16, то для методу Зейделя вони становлять 9.

Також розглядаючи метод верхньої релаксації і порівнюючи його з двома іншими методами видно, що в методі верхньої релаксації кількість ітерацій залежить від заданого числового параметра w. Задаючи w = 1, кількість ітерацій дорівнює 9, зменшуючи значення параметра від 1 кількість ітерацій починає рости, у свою чергу збільшуючи параметр кількість ітерацій теж починає зростати.

Наведемо таблицю показують кількість ітерацій (k) при різних значеннях параметра w:

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

Код програми:

#include "stdafx.h"

#include <iostream>

#include <conio.h>

#include <math.h>

#include <fstream>

using namespace std;

/* функція (метод Якобі)

size - розмірність матриці коефіцієнтів

A - матриця коефіцієнтів

F - вектор вільних членів

X - вектор початкових наближень

exactitude - точність розв'язків

norm - норма (найбільша різниця значень вектора X сусідніх ітерацій)

TempX - додатковий вектор*

Результат записується у вектор X

Вектор нев'язки записується у вектор F*/

int Jacobi (int size, double **A, double *F, double *X, double eps)

{

int iter = 0;

double * TempX = new double[size];

double norm;

do {

for (int i = 0; i < size; i++) {

TempX[i] =- F[i];

for (int g = 0; g < size; g++) {

if (i != g)

TempX[i] += A[i][g] * X[g];

}

TempX[i] /= -A[i][i];

}

norm = fabs(X[0] - TempX[0]);

for (int h = 0; h < size; h++) {

if (fabs(X[h] - TempX[h]) > norm)

norm = fabs(X[h] - TempX[h]);

X[h] = TempX[h];

}

iter ++;

} while (norm > eps);

for (int i = 0; i < size; i++)

{

double k = 0;

for (int g = 0; g < size; g++)

{

k+= A[i][g]*X[g];

}

F[i] = k - F[i];

}

delete[] TempX;

return iter;

}

int main()

{

char * temp_string = new char[100]; //масив для зчитування рівнянь

int total_count_equation;

int count_equation = 0; //лічильник введених рівнянь

int quant = 0;

printf("\nEnter the value of n : ");

scanf("%i", &quant);

if (quant>0)

{

double ** A;

A = new double *[quant];

for (int i=0; i<quant; i++)

A[i]=new double [quant];

for (int i = 1; i<= quant; i++)

{

printf("\n\n");

for (int j = 1; j<=quant; j++)

{

printf("A[%i][%i]= ", i, j);

scanf("%lf", &A[i - 1][j - 1]);

}

}

printf("\n");

double * F = new double [quant];

for (int i = 1; i<=quant; i++)

{

printf("F[%i]= ", i);

scanf("%lf", &F[i-1]);

}

printf("\n");

double * X = new double [quant];

for (int i = 1; i<=quant; i++)

{

printf("X[%i]= ", i);

scanf("%lf", &X[i-1]);

}

double eps;

cout << "\n Eps = ";

cin >> eps;

cout << "\n System:\n\n";

for (int i = 1; i<= quant; i++)

{

cout << " ";

for (int j = 1; j<=quant; j++)

{

if (A[i-1][j-1] >= 0)

cout << "+";

cout << A[i-1][j-1];

cout << " * X" << j <<" ";

}

cout << " = " << F[i-1];

cout <<"\n";

}

cout << "\n Vector of approximations:\n\n ";

cout << " (";

for (int i=0; i<quant-1; i++)

cout << X[i] << ", ";

cout << X[quant-1] << ")";

cout << "\n\n —-------------------\n Result:\n\n";

int iter = Jacobi(quant,A,F,X,eps);

for (int i=1; i<= quant; i++)

cout << " X" << i << " = " << X[i-1] << "\n";

cout << "\n\n Vector of no tied:\n";

cout << " (";

for (int i=0; i<quant-1; i++)

cout << F[i] << ", ";

cout << F[quant-1] << ")";

cout << "\n\nCount of iteration is " << iter;

}else

{

cout << "\n Error: quantity of unknowns is no correct !";

}

_getch();

return 0;

}

Висновок:

На навчальній практиці я поглиблено вивчав пакети Microsoft Office. А саме програми Microsoft Word та Microsoft Excel.

Також ознайомився і працював з програмою Origin. Ця програма значно спрощую вирішення математичних задач та побудови графіків,

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

Також розглядав і вивчав програму Proge-CAD система автоматизованого проектування в 3D и 2D середовищах, вона призначена для створення схем, об'ємних і плоских моделей технологічних виробів а також використовується в архітектурі для моделювання проектів.

Ще виконували завдання щоб закріпити вивчений за семестр матеріал мови програмування С++, детально розбирали та вивчали потоковий ввід та вивід інформації на С++.

Також було індивідуальне завдання “Розв'язання СЛАР методом Якобі”, і по цьому завданню я розібрав теорію цього методу, написав та відлагодив програму.

Список використаних джерел

1. А.А. Богданов Визуализация даных в Microcal Origin / М. : Альтекс , 2003. –

103 с.

2. Тюріна А.Д. Інтегровані програмні пакети /А .Д. Тюріна - М. : Ексмо, 2008 -

300 с

3. Офіційний сайт компанії Microsoft Corp. : http :// www.microsoft.com/rus в Internet: http: / / www.microsoft.com / rus

4. - Джинжер Саймон: издательство – «Диалектика», 2004г. «Аналіз даних в Excel» - Джинжер Саймон: видавництво - «Діалектика», 2004р.

5. «Microsoft Office для студента» - Л.В. Excel для студента »- Л.В. Рудікова: видавництво - «БХВ-Петербург»; 2005р.

6. ». Симонович С., Євсєєв Г. «Excel». - «М.: ИНФРА-М», 1998.

7. 2000». «Навчання. Excel 2000». », 2000. - М.: Видавництво «Media», 2000.

8. «Основи інформатики: Учеб. Посібник »/ О.М. Морозевич, М.М. Говядінова та ін; Під ред. О.М. Морозевича. - Мн.: «Нове знання», 2001.

9. Ланджер для Windows». М. "Microsoft Office Excel 2003 для Windows». НТ - «НТ Прес »- 2005.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]