Можливості використання паралельних алгоритмів.

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

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

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

Рік:
2005
Тип роботи:
Лабораторна робота
Предмет:
Паралельні та розподілені обчислення
Група:
КІ-З

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

Міністерство освіти і науки України Національний університет „Львівська політехніка” Кафедра електронних обчислювальних машин Звіт про виконання лабораторної роботи № 3 з курсу „ Паралельні та розподілені обчислення ” Тема: Можливості використання паралельних алгоритмів Виконав: студент групи КІ-3 Львів – 2005 Мета: дослідити можливості розв'язання різноманітних задач за допомогою паралельних алгоритмів. Навчитись виділяти паралельні гілки обчислень та виконувати їх паралельно. Завдання Варіант 11. Лабіринт задається матрицею з'єднань в якій для кожної пари кімнат вказано чи з'єднані вони коридором. Задати (ввести з клавіатури, або генерувати випадковим чином): кількість кімнат лабіринту(n), матрицю з'єднань для них, номери кімнат i та j (1<= i,j <=n). Побудувати шлях з кімнати з номером і в кімнату з номером j. Текст програмної реалізації #include <cstdio> #include <string.h> #include <stdlib.h> #include <time.h> #include <iomanip.h> int **A; int n; //***************************************** int**ManualInput(int n) { int **a, i, j; a = new int*[n]; for(i=0; i<n; i++) { a[i]= new int[n]; a[i][i]=1; } cout << endl << "Input matrix of connections (0=no; 1=yes)" << endl; for(i=0;i<n;i++) for(j=0;j<i;j++) { cout << "Is there a corridor between rooms " << (j+1) << " and " << (i+1) << ": "; cin >> a[i][j]; while (a[i][j]!=0 && a[i][j]!=1) { scanf("%d",&a[i][j]); } } for(i=0;i<n;i++) for(j=0;j<i;j++) a[j][i]=a[i][j]; return a; }//***************************************** int** AutoGen(int n) { int **a, **b, **c, i ,j; a = new int*[n]; for(i=0; i<n; i++) a[i]= new int[n]; b = new int*[n]; for(i=0; i<n; i++) b[i]= new int[n]; c = new int*[n]; for(i=0; i<n; i++) c[i]= new int[n]; for(i=0; i<n; i++) { for(j=0; j<n; j++) { if(j < i) a[i][j] = 0; else if(i == j) a[i][j] = 1; else a[i][j] = rand()%2; } } for(i=0; i<n; i++) for(j=0; j<n; j++) b[i][j] = a[j][i]; for(i=0; i<n; i++) { for(j=0; j<n; j++) { if(i == j) c[i][j] = 1; else c[i][j] = b[i][j] + a[i][j]; } } return c; } //***************************************** void Out(int **a, int n) { int i, j; for(i=0; i<n; i++) { for(j=0; j<n; j++) cout << setw(2) << a[i][j] << " "; cout << "\n"; } cout << "\n"; } //***************************************** void FindTheWay(int r1, int r2) { if(A[r1-1][r2-1] == 1) cout << r1 << " " << r2; else { int i, j, k = 0, k1 = 0, *mas1, *mas2, count1 = 0, count2 = 0; mas1 = new int[n]; mas2 = new int[n]; for(i = 0; i < n; i++) mas1[i] = 0; for(i = 0; i < n; i++) mas2[i] = 0; for(i = 0; i < n; i++) { if(A[r1-1][i] == 1) { k = i + 1; mas1[count1] = k; count1++; } } for(i = 0; i < n; i++) { if(A[i][r2-1] == 1) { k1 = i + 1; mas2[count2] = k1; count2++; } } cout << r1 << " "; for(i = 0; i < count1; i++) { for(j = 0; j < count2; j++) { if(mas1[i] == mas2[j] && mas1[i] != 0 && mas2[j] != 0) cout << mas1[i] << " "; } } cout << r2 << " "; } } void main() { srand(time(NULL)); cout << "Please enter number of rooms:" << endl; cin >> n; cout << " * MENU *\n"; cout << "1. Input matrix from keyboard\n"; cout << "2. Generate matrix of connections\n"; char menu; cin >> menu; switch (menu){ case '1': A = ManualInput(n); break; case '2': A = AutoGen(n); break; default: cout << "Wrong choice. Enter 1 or 2.\n"; } Out(A,n); int i, r1, r2; for(i = 0; i < n; i++) { cout << endl << "First room: "; do cin >> r1; while ( (r1<=0) || (r1>n) ); cout << "Second room: "; cin >> r2; if(r1 == r2) cout << " First & second rooms are the same" << endl; else FindTheWay(r1, r2); } cout << " * END *\n"; getchar(); } Приклад виконання програми Please enter number of rooms: 5 * MENU * 1. Input matrix from keyboard 2. Generate matrix of connections 2 1 1 0 0 1 1 1 0 0 1 0 0 1 1 0 0 0 1 1 1 1 1 0 1 1 First room: 1 Second room: 3 1 3 First room: 5 Second room: 3 5 4 3 Висновок: на даній лабораторній роботі я дослідив можливості розв'язання різноманітних задач за допомогою паралельних алгоритмів. Здобуті навики я закріпив на прикладі реалізації поставленої мені задачі про лабіринт.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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