75661

Моделювання представлення в пам’яті векторів і таблиць

Лабораторная работа

Информатика, кибернетика и программирование

Розробити спосіб економного зберігання в пам’яті розріджених матриць (таблиць). Розробити процедури і функції для забезпечення доступу (читання-запис) до елементів матриці. В контрольному прикладі забезпечити читання і запис всіх елементів матриці. Оцінити час виконання операцій.

Украинкский

2015-01-24

204.8 KB

14 чел.

Міністерство  освіти  і  науки України

Вінницький національний технічний університет

Інститут інформаційних технологій та комп’ютерної інженерії

Кафедра ПЗ

Лабораторна робота №1 варіант №9

з дисципліни Алгоритми та структури даних

Виконала: ст. гр. 1 ПІ-13б                            Лілик Л. С.

Перевірив:                                                       Власюк В. Х.

Вінниця, 2013

Тема: моделювання представлення в пам’яті векторів і таблиць.

Мета: набуття навичок розміщення в пам’яті векторів і таблиць

Завдання:

Розробити спосіб економного зберігання в пам’яті розріджених матриць (таблиць). Розробити процедури і функції для забезпечення доступу (читання-запис) до елементів матриці. В контрольному прикладі забезпечити читання і запис всіх елементів матриці. Оцінити час виконання операцій.

Варіант № 9.

Всі елементи  парних стовпчиків – нульові.

Хід роботи

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

Створено функції множення поточної матриці на користувацьку, що за замочування створюється такої ж розмірності. Матриці перемножуються поелементно: значення кожного елемента множиться на значення відповідного елемента другої матриці. В результаті нові значення «записується» у поточну матрицю. Таким чином змінюються знову ж таки лише ненульові елементи матриці (в непарних стовпчиках). За умови множення на нульову матрицю (всі елементи якої дорівнюють нулю) поточна матриця отримує значення «0» для всіх елементів. Але в подальшому можна змінити елементи з непарних стовпчиків (хоча їх значення й дорівнюює нулю).

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


Блок-схема програми

Лістинг фрагментів програми

// Lab-1_9.cpp

#include "stdafx.h"

class Matrix

{

public:

int row;

int col;

int *(**A);   // arr of columns

 

Matrix(int _row, int _col):row(_row), col(_col) // constructor

{

 A = new int**[row];

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

 {

  A[i]=new int*[col];

  for (int j=0; j<col; ++j)

  {

   cout<<"A["<<i+1<<"]"<<"["<<j+1<<"] = ";

   int a;

   cin>>a;

   if((j%2)==0)

   {

    A[i][j]=new int;

    *A[i][j]=a;

   }

   else

   {

    A[i][j]=0;

   }

  }

 }

}

Matrix(void){} // default constructor

~Matrix()  // destructor

{

}

void Print()  // output matrix

{

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

 {

  for (int j=0; j<col; ++j)

  {

   

   if (A[i][j] != 0)

    cout<<*A[i][j]<<"  ";

   else

   {

    cout<<0<<"  ";

   }

  }

  cout<<endl;

 }

}

int PureAccess(int r, int c) // provides acces to the element

{

 if (A[r-1][c-1] != 0)

  return *A[r-1][c-1];

}

void PureChange(int r, int c, int value)  // changes the element

{

 if (A[r-1][c-1] != 0)

 {

  A[r-1][c-1]=new int;

  *A[r-1][c-1]=value;

 }

 

}

void AccessElem(int r, int c) // output of elements by coordinates

{

 if (r<=row&&c<=col&&r>0&&c>0)

 {

  cout<<"A["<<r<<"]"<<"["<<c<<"] = ";

  if (A[r-1][c-1] != 0)

   cout<<*A[r-1][c-1];

  else

  {

   cout<<0<<"  ";

  }

 }

 else

  cout<<"\nThese coordinates are invalid!\n\n";

}

 

void ChangeElem(int r, int c) // changing of element by its coordinate

{

 if (r<=row&&c<=col&&r>0&&c>0)

 {

  int value=-1;

  cout<<"\nInput new element value: ";

  cin>>value;

  if (A[r-1][c-1] != 0)

   PureChange(r,c, value);

  else

   cout<<"You can not change NULL element.\n";

 }

}

};

int r=0;

int c=0;

int command=0;

int rowG=0;

int colG=0;

void OutputByCoord(Matrix *Arr) // output of the element by its coordinates

{

cout<<"Input number of row: ";

cin>>r;

cout<<"Input number of column: ";

cin>>c;

Arr->AccessElem(r, c);

}

void Change(Matrix *Arr)  // Changes element of the matrix

{

OutputByCoord(Arr);

Arr->ChangeElem(r, c);

Arr->Print();

}

void Mult(Matrix *M, Matrix *Mul) // multiplies elements of two matrix

{

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

 for (int j=0; j<colG; ++j)

  M->PureChange(i+1, j+1, (Mul->PureAccess(i+1, j+1)*M->PureAccess(i+1, j+1)));

 

cout<<"\nThe new matrix is:\n";

M->Print();

}

int ComList ()  //  the list of commands

{

cout<<"\n\n\t~~~ MAIN MENU ~~~\n";

cout<<"\n - To output the element by its coordinates press 1. ";

cout<<"\n - To change the element press 2. ";

cout<<"\n - To multiply two matrix press 3. ";

cout<<"\n - To exit the menu 123.\n ";

   cin>>command;

cout<<"\nYour command is "<<command<<endl;

return command;

}

 

void MenuExit()  

{

cout<<"\n\nBack to the MAIN MENU. Press any key...\n";

 getch();

}

void Multiplication(Matrix *M)

{

Matrix *Mul;

cout<<"\nInput elements of matrix for multiplication:\n";

Mul = new Matrix(rowG, colG);

Mul->Print();

Mult(M, Mul);

delete Mul;

}

void Menu(Matrix * M)

{

ComList();

while (command != 123)  // while (command != (exit condition) )

{

 switch(command)

 {

  case 1:

   {

    cout<<"\n\t Output the element by its coordinates:\n";

     OutputByCoord(M);

    MenuExit(); break;

   }

  case 2:

   {

    cout<<"\n\t Changing the element:\n";

     Change(M);

    MenuExit(); break;

   }

  case 3:

   {

    cout<<"\n\t Multiplication:\n";

     Multiplication(M);

    MenuExit(); break;

   }

  default: cout<<"\nERROR! Your command is wrong. Please try again. \nPress any key: ";

        getch();

 }

ComList();

}

}

int _tmain(int argc, _TCHAR* argv[])

{

int row=0;

int col=0;

cout<<"Enter array size:\n";

cout<<"Number of rows = ";

cin>>row;

cout<<"Number of columns = ";

cin>>col;

cout<<"\nInput elements:\n";

Matrix *M;

M = new Matrix(row, col);

M->Print();

 

rowG=row;

colG=col;

cout<<"\nTo display the menu press 1.\nTo exit press any other numeric key.\n";

int a=0;

cin>>a;

if(a==1)

 Menu(M);

 

delete M;

 

cout<<endl<<endl;

return 0;

}

 Результат виконання

Складність алгоритму

Складність алгоритму дорівнює ( 11n2+5 )Т, де Т - час виконання.

Висновки

 

Набули навичок розміщення в пам’яті векторів і таблиць. У ході виконання лабораторної роботи було використано спосіб економного зберігання в пам’яті розріджених матриць (таблиць), розроблено процедури і функції для забезпечення доступу (читання-запис) до елементів матриці. Забезпечено читання і запис всіх елементів матриці.


 

А также другие работы, которые могут Вас заинтересовать

68226. УПРАВЛІННЯ ПРОЕКТАМИ РОЗВИТКУ ТЕРМІНАЛЬНИХ СИСТЕМ ДОСТАВКИ ВАНТАЖІВ АВТОМОБІЛЬНИМ ТРАНСПОРТОМ 1.55 MB
  Умовами підвищення результативності роботи організацій різної галузевої приналежності передбачається широке застосування методів стратегічного управління. В процесах стратегічного управління, розглядуваних за такі, що складаються з послідовності стадій формування...
68227. ВИХОВАННЯ ШАНОБЛИВОГО СТАВЛЕННЯ ДО МАТЕРІ У СТАРШИХ ДОШКІЛЬНИКІВ 147 KB
  Незважаючи на численність наукових напрацювань із проблеми морального виховання дитини залишаються недостатньо вивченими особливості й основні напрями діяльності дошкільних навчальних закладів щодо виховання в дітей старшого дошкільного віку шанобливого ставлення до матері як важливого складника...
68228. Діагностична значимість показників окисного стресу та нітроксидергічного дисбалансу в легеневих експіратах у новонароджених з дихальною недостатністю 356 KB
  Дихальні розлади в новонароджених є досить поширеними в практиці відділень інтенсивної терапії будьякого профілю представляють серйозну проблему та часто є причиною смерті хворих Шунько Є. Актуальність діагностики причин респіраторних розладів у новонароджених...
68229. ФОРМУВАННЯ ОПТИМАЛЬНОГО ВОДНО-СОЛЬОВОГО РЕЖИМУ ТЕМНО-КАШТАНОВИХ ҐРУНТІВ НА ФОНІ ВЕРТИКАЛЬНОГО ДРЕНАЖУ В УМОВАХ КРАСНОЗНАМ’ЯНСЬКОЇ ЗРОШУВАЛЬНОЇ СИСТЕМИ 10.63 MB
  Зрошення на фоні діючого дренажу на таких безстокових та слабодренованих територіях є обовязковою умовою для збереження родючості ґрунтів. Тому дослідження водносольового режиму темнокаштанових ґрунтів при вирощуванні пшениці озимої як основної культури сівозмін сухої Степової зони в різних...
68230. МЕХАНІЗМ ВАЛЮТНОГО РЕГУЛЮВАННЯ В УКРАЇНІ 2.95 MB
  В умовах посилення процесів глобалізації фінансових ринків відкритості економік та їх взаємозалежності що обумовлюють зростання нестабільності національних валют роль механізму валютного регулювання постійно зростає.
68231. ЕКОЛОГО-ЕКОНОМІЧНІ ЗАСАДИ УПРАВЛІННЯ ЗЕМЕЛЬНИМИ ВІДНОСИНАМИ 540 KB
  Управління земельними відносинами є одним з найважливіших завдань в економічному середовищі країни що обумовлене сучасною земельною реформою. Фактично в державі не розроблено методології управління земельними відносинами як базису просторового соціальноекономічного розвитку.
68232. Методи та засоби персоніфікації інформаційного наповнення у глобальній системі World Wide Web 1.67 MB
  Позиціонування ІН цей напрям охоплює дослідження повязані з визначенням формуванням та підвищенням ефективності позиції ІН вебсайтів окремих вебсторінок та дописів користувачів WWW І. Пояснюється це тим що вкрай необхідно поліпшити якість величезних обсягів користувацького інформаційного...
68233. ЗНАЧЕННЯ ЕРИТРОПОЕТИНУ В РОЗВИТКУ АНЕМІЧНОГО СИНДРОМУ ПРИ ГОСТРІЙ МІЄЛОЇДНІЙ ЛЕЙКЕМІЇ 224 KB
  У хворих на гостру мієлоїдну лейкемію (ГМЛ) анемія розвивається у патогенезі самого захворювання та прогресує в процесі цитостатичної терапії. Уже в дебюті захворювання анемічний синдром викликає численні патологічні ефекти, асоціюється з погіршенням якості життя, зниженням професійної...
68234. УПРАВЛІННЯ ТОРГОВИМИ МАРКАМИ НА ПІДПРИЄМСТВАХ ЛЕГКОЇ ПРОМИСЛОВОСТІ 460 KB
  В умовах постійних змін і невизначеності торгова марка як і будь-який інший елемент системи маркетингу потребує цілеспрямованого управління метою якого є отримання стійких конкурентних переваг підтримка та збільшення кількості споживачів лояльних до торгової марки підприємства.