75661

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

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

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

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

Украинкский

2015-01-24

204.8 KB

10 чел.

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

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

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

Кафедра ПЗ

Лабораторна робота №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 )Т, де Т - час виконання.

Висновки

 

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


 

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

14196. Управление конфликтами и стрессами на предприятии 437.5 KB
  Дипломный проект На тему Управление конфликтами и стрессами на предприятии Содержание: Введение. Глава 1. Теоретические подходы к исследованию конфликтов и стрессов на предприятии. Сущность и содержание конфликтов и стрессов на предприятии. Причины их возни
14197. Управление конфликтами на предприятии 401 KB
  Каждому из нас приходилось сталкиваться с конфликтными ситуациями. Конфликты проявляются в деятельности всех социальных институтов социальных групп во взаимоотношениях между людьми и играют ключевую роль в жизни отдельного человека семьи...
14198. УПРАВЛЕНИЕ БАНКОВСКИМИ РИСКАМИ на ЗАО «Ростовская валютно-фондовая биржа» 173.66 KB
  Содержание Введение Глава 1. Классификация банковских рисков методы их оценки и управления 1.1.Классификация рисков возникающих при проведении операций на биржевом рынке 1.2.Банковские риски при проведении операций с иностранной валютой 1.3.Банковск
14199. Использование подходов веб-аналитики для построения модели пользователя 304.5 KB
  Рассматриваются системы электронной отчетности как специфический вид веб-ресурса. Ставится цель повышения эффективности ресурса. Разрабатывается методика построения модели веб-пользователя с применением подходов веб-аналитики. Строится модель и её графическое представление.
14200. Характеристика получения взятки и взяточничества в целом 342 KB
  ВВЕДЕНИЕ В настоящее время в России в период построения цивилизованной экономики и становления демократического правового государства важная роль принадлежит органам государственной власти и исполнения а также органам местного самоупр
14201. Эмиссионные операции ОАО КБ «Сбербанка России» 212 KB
  Эмиссия краткосрочных долговых инструментов — депозитных и сберегательных сертификатов, векселей, инвестиционные свойства которых позволяют совместить высокую ликвидность, невысокий риск и...
14202. Эффективность методики оценки кредитоспособности клиента ЗАО КБ «Пятигорск» и ОАО «Ставропольпромстройбанка» 2.3 MB
  ВВЕДЕНИЕ Кредитнофинансовая система –одна из важнейших и неотъемлемых структур рыночной экономики. Развитие банковской системы и товарного производства исторически шло параллельно и тесно переплеталось. Находясь в центре экономической жизни банки опосредуют с...
14203. КОНСПЕКТЫ ЛЕКЦИЙ ПО БЕЛОРУССКОЙ МУЗЫКЕ 69.22 KB
  КОНСПЕКТЫ ЛЕКЦИЙ ПО БЕЛОРУССКОЙ МУЗЫКЕ БЕЛОРУССКАЯ МУЗЫКА XVIII ВЕКА В XVIII веке Беларусь входила в состав Речи Посполитой. В конце века Речь Посполитая была разделена тремя государствами и перестала существовать как самостоятельная политическая единица. Белору...
14204. Белорусская народная музыка 219.5 KB
  Белорусская народная музыка Музыкальный фольклор – уникальная самобытная культура наших предков – осознается современным обществом как значительный фактор духовности преемственности поколений приобщения к национальным жизненным истокам. Зарод