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

Висновки

 

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


 

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

83501. Стадії укладання міжнародного договору 39.55 KB
  Можна виділити наступні стадії укладання міжнародного договору: прийняття тексту встановлення автентичності тексту вираження згоди на обовязковість. Для участі у будьякій з стадій укладення договору представник держави повинен мати повноваження. Повноваження оформлюються документом що видається компетентним органом держави і за допомогою якого одна чи кілька осіб призначаються представляти цю державу з метою ведення переговорів прийняття тексту договору або встановлення його автентичності вираження згоди держави на обовязковість ДЛЯ...
83502. Застереження до міжнародного договору 36.01 KB
  Застереження це одностороння заява в будьякому формулюванні і під будьякою назвою зроблена державою при підписанні ратифікації прийнятті чи затвердженні договору або приєднанні до нього за допомогою якої вона бажає виключити або змінити юридичну дію певних положень договору в їхньому застосуванні до цієї держави ст. Застереження не повинно суперечити цілям і принципам договору змінювати його головний зміст. Воно не може бути зроблене якщо такого роду застереження заборонені договором або якщо договір допускає лише певний вид...
83503. Депозитарій міжнародного договору. Реєстрація договорів 33.67 KB
  Депозитарій зберігач оригіналу багатостороннього договору і всіх документів що до нього відносяться. Депозитарієм договору може бути одна або кілька держав міжнародна організація або головна посадова особа організації. функції депозитарію серед іншого полягають у: зберіганні автентичного тексту договору і переданих депозитарієві повноважень; підготовці засвідчених копій з автентичного тексту; одержанні підписів під договором та одержанні і зберіганні документів оповіщень і повідомлень які його стосуються; інформуванні учасників і...
83504. Форма, найменування, структура міжнародного договору 36.79 KB
  Коли автентичність тексту договору було встановлено двома або кількома мовами його текст кожною мовою має однакову силу якщо договором не передбачено або учасники не домовились що в разі розходження між цими текстами переважну силу матиме якийсь один певний текст. Міжнародний договір може мати різні найменування використання яких визначається практикою і не впливає на юридичну природу договору. Такими частинами є: найменування або титул; преамбула вказує мотиви укладення договору його цілі та принципи; основна частина статті договору...
83505. Тлумачення міжнародного договору 36.3 KB
  Під тлумаченням договору розуміють зясування сенсу та змісту його положень а також справжнього наміру сторін договору. У міжнародній практиці застосовуються два види тлумачення: офіційне та неофіційне. Тлумачення договору державами або міжнародними органами вважається офіційним тлумаченням. У офіційному тлумаченні виділяють автентичне тлумачення яке здійснюється державами що є учасницями договору і має силу положень самого міжнародного договору.
83506. Набрання міжнародним договором чинності. Дія міжнародного договору 36.58 KB
  Дія міжнародного договору. При відсутності такого положення або домовленості договір набирає чинності як тільки буде виражено згоду всіх учасників переговорів на обовязковість для них договору. Учасник договору не може посилатись на положення свого внутрішнього права як на виправдання для невиконання ним договору. Однак за взаємною згодою сторони можуть поширити дію договору на події і факти що існували до набирання ним чинності.
83507. Недійсність міжнародних договорів 32.55 KB
  Таким чином недійсність договору має бути встановлена після чого кожен учасник має право вимагати щоб в межах можливого було відновлене положення змінене в результаті виконання договору. Недійсність договору може бути відносною і абсолютною. Відносна недійсність робить договір оскаржуванимїї підставами є помилка обман підкуп представника держави укладення договору з порушенням положень внутрішнього права які стосуються компетенції укладати договори. Абсолютна недійсність означає нікчемність договору із самого початку.
83508. Припинення і зупинення дії договору 36.45 KB
  Припинення договору або вихід з нього учасника можуть мати місце відповідно до положень договору або в будьякий час за згодою всіх учасників після консультації з іншими договірними державами. Договір може бути припинений у випадку: 1 закінчення строку на який він був укладений; виконання договору; за згодою всіх сторін що домовляються скасування; у звязку з укладенням нового договору з тих самих питань між тими самими державами новація; денонсації яка означає односторонню відмову держави від договору з попередженням інших...
83509. Поняття і джерела права міжнародних організацій 34.3 KB
  Право міжнародних організацій є сукупністю норм що регулюють процес утворення діяльності та припинення діяльності організації взаємодії з іншими субєктами міжнародного права та міжнародних відносин. Право міжнародних організацій як самостійна галузь міжнародного права складається з двох груп міжнародних норм утворюючих: поперше внутрішнє право організації норми що регулюють структуру організації компетенцію її органів і порядок роботи статус персоналу інші правовідносини і подруте зовнішнє право організації норми договорів...