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

Висновки

 

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


 

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

25365. Место и роль общественных объединений в реализации социальной работы 30.5 KB
  Место и роль общественных объединений в реализации социальной работы Современная парадигма социальной работы рассматривает ее как многосубъектную деятельность характеризующуюся активным участием наряду с государством общественных и благотворительных организаций в решении социальных проблем населения. В последние годы наблюдается значительный рост общественных организаций активизация их участия в осуществлении мероприятий по социальной защите населения. идея создания общественных объединений предполагала что они станут резервом...
25366. Социальное прогнозирование как метод научного познания: объект, предмет, его виды 14.26 KB
  В отечественной науке многочисленные попытки прогнозирования были осуществлены в 20х начале 30х годов. Научные основы прогнозирования вообще и социального в частности стали разрабатываться в нашей стране в конце 50х начале 60х годов что связано с творчеством таких ученых как Э. Цель прогнозирования не просто предвидеть те или иные явления а способствовать более эффективному воздействию на них в нужном направлении. В ходе научного прогнозирования решаются 2 задачи: 1 определяется и мотивируется цель вероятного...
25367. Антропологические основания социальной работы 23.5 KB
  Структура ответа: Вступление Понятие социальной работы Понятие антропологии. Антропологические основания социальной работы Вывод Социальная работа носит междисциплинарный характер поэтому она включает знания из различных областей. Социальная работа специфический вид профессиональной деятельности оказание государственного и негосударственного содействия человеку с целью обеспечения культурного социального и материального уровня его жизни предоставление индивидуальной помощи человеку семье или группе лиц словарьсправочник по...
25368. Социально-медицинские проблемы организации социальной работы 53.5 KB
  Социальномедицинские проблемы организации социальной работы. Все вышеперечисленные социальномедицинские проблемы свидетельствуют о том что резко возрастает объективная потребность решения взаимосвязанных проблем медицинского и социального характера на качественно новом уровне на уровне медикосоциальной работы. Специфика содержания и методики медикосоциальной работы позволяет рассматривать ее как самостоятельное направление многоаспектной социальной работы. Основным правовым актом обеспечивающим развитие социальной работы в сфере...
25369. Психология как система жизненных явлений 43.5 KB
  Психология наука о закономерностях развития и функционирования психики как особой формы жизнедеятельности. Психология как наука развивалась параллельно с такими понятиями как общественная деятельность социальная работа социальные службы и т. Психология сыграла немаловажную роль в развитии самого явления социального.
25370. Социологические проблемы 92 KB
  Проводятся многочисленные исследования имеющие целью определить экономический эффект образования проанализировать распределение детей из разных социальных слоев по типам учебных заведений влияние социальной среды на успехи учащихся в школе. Педагогика в социальной работе выступает в роли стержня деятельного компонента социальной работы потому что информационные задачи вопросы формирования знаний об обществе отношениях в группе воспитания защищенности развитие готовности личности к самопомощи решаются в основном педагогическими...
25371. Социальная сфера человеческой жизни 55.5 KB
  Многие страны пережили во второй половине XX столетия некий этапный период который потребовал не только поисков эффективных форм экономического политического и культурнодуховного развития общества но и поиска новых средств социальной поддержки населения. Это в свою очередь потребовало переосмысления противоречивого опыта социальной защиты населения советского периода истории отечественной благотворительности государственной социальной политики существующих форм организации социальной поддержки слабых групп населения. В этот период в...
25372. Экологические проблемы социальной работы 51 KB
  Главная теоретическая и практическая задача экологии раскрыть общие закономерности организации жизни и на этой основе разработать принципы рационального использования природных ресурсов в условиях все возрастающего влияния человека на биосферу. Взаимодействие человеческого общества и природы стало одной из важнейших проблем современности поскольку положение которое складывается в отношениях человека с природой часто становится критическим: исчерпываются запасы пресной воды и полезных ископаемых нефти газа цветных металлов и др....
25373. Социальная политика в системе общественных отношений, ее взаимосвязь с социальной работой 37 KB
  Социальная политика в системе общественных отношений ее взаимосвязь с социальной работой В условиях быстрых социальных перемен на макроуровне системы социальной работы для оптимизации ее деятельности требуется проведение эффективных социальных мероприятий и создание качественно новых программ разрешающих и предвосхищающих проблемы конкретного общества. Главная цель этих усилий состоит в содействии нормальному функционированию социальной сферы через реализацию социальной политики. Социальная политика представляет собой обязательный элемент...