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

Висновки

 

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


 

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

39478. РАСЧЕТ ПОКАЗАТЕЛЕЙ РАЗРАБОТКИ ОДНОРОДНОГО ПЛАСТА НА ОСНОВЕ МОДЕЛИ НЕПОРШНЕВОГО ВЫТЕСНЕНИЯ НЕФТИ ВОДОЙ В УСЛОВИЯХ ЖЕСТКОГО ВОДОНАПОРНОГО РЕЖИМА 197.5 KB
  Для большинства пластов при вытеснении из них нефти водой характерно возникновение в порах раздробленных диспернированных глобул нефти. В местах пористых сред где путь движению нефти преграждается плотными скоплениями зерен породы в тупиковых зонах в поровых ловушках остаточная нефть сохраняется в виде неподвижных глобул не извлекаемых из пористой среды даже при ее бесконечной промывки. Возникновению неподвижных глобул способствуют также различие вязкостей нефти и воды и наличие у нефти неньютоновских свойств.
39479. Взаимодействие Европейского суда по правам человека и Российской Федерации: проблемы и перспективы 236 KB
  Взаимодействие Европейского суда по правам человека и Российской Федерации: проблемы и перспективы.43 Введение Европейским судом по правам человека называют совестью Европы и это не просто красивая фраза. Это стало возможным благодаря тому что Конституция Российской Федерации впервые в юридической практике нашей страны установила международные гарантии соблюдения и защиты прав и свобод человека и гражданина: Каждый вправе в соответствии с международными договорами Российской Федерации обращаться в межгосударственные органы...
39480. Расчет годовой производственной программы ЭТС 103.5 KB
  Парк электрооборудования постоянно увеличивается. Опыт электрификации сельского хозяйства показывает что без хорошей работы электротехнической эксплуатационной службы только увеличение числа электроустановок не дает ожидаемого роста эффективности производства и не позволяет полностью использовать потенциальные возможности электрооборудования. Эксплуатационная надежность электрооборудования пока еще не удовлетворяет в достаточной мере требованиям сельскохозяйственного производства. Улучшение эксплуатации...
39481. Безопасность жизнедеятельности. Характеристика условий труда программиста 1.09 MB
  В связи с этим была создана и развивается наука о безопасности труда и жизнедеятельности человека. Охрана здоровья трудящихся обеспечение безопасности условий труда ликвидация профессиональных заболеваний и производственного травматизма составляет одну из главных забот человеческого общества. Обращается внимание на необходимость широкого применения прогрессивных форм научной организации труда сведения к минимуму ручного малоквалифицированного труда создания обстановки исключающей профессиональные заболевания и производственный...
39483. Изучение четырехугольников на факультативных занятиях по геометрии 844.38 KB
  Понятие параллелограмма и некоторые его свойства были известны пифагорейцам. Евклид не упоминает о том что точка пересечения диагоналей параллелограмма делит их пополам. Все теоремы о параллелограммах основываются непосредственно или косвенно на аксиоме параллельности Евклида и если прямая падающая на две прямые образует внутренние и по одну сторону углы меньшие двух прямых то продолженные неограниченно эти прямые встретятся с той стороны где углы меньше двух прямых [44]. Свойства параллелограмма противолежащие стороны равны;...
39484. Разработка информационной системы сопровождения кредитной истории клиентов 3.89 MB
  Установление структуры и форм входных и выходных данных. Расчёт освещения Постоянное развитие и совершенствование вычислительной техники и программного обеспечения приводит к возникновению все новых технологий обработки данных. Поэтому эффективность системы обработки зависит от правильной организации входных и выходных потоков информации. Представить выходную информацию в необходимых для пользователя электронных форматах и виде печатных документов.
39485. Разработка автоматизированной системы мониторинга деятельности спортивной организации «Весна» 1.61 MB
  Цель и главная задача дипломной работы заключается в разработке автоматизированной системы мониторинга деятельности спортивной организации «Весна», деятельность которой состоит правильному физическому развитию и оздоровлению для подростков.