75661

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

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

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

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

Украинкский

2015-01-24

204.8 KB

17 чел.

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

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

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

Кафедра ПЗ

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

Висновки

 

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


 

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

43468. Разработка технологии и проектирование оснастки для изготовления консоли рамы лесовоза 352.5 KB
  Использование сварки позволяет экономить материалы и время при производстве конструкций. В наше время практически ни одна отрасль народного хозяйства не обходится без сварки. С развитием научно-технологического процесса расширяется возможность сварки деталей различных толщин материалов а в связи с этим и набор применяемых способов сварки. Габаритные размеры: длина 7468 мм ширина 2580 мм высота 600 мм масса конструкции 35764 кг Сборка и сварка узлов изделия осуществляется на специализированных...
43469. Синтез регулятора методом желаемых ЛАЧХ 73.5 KB
  Задан объект управления описание которого определяется Wнчs передаточной функцией неизменяемой части системы. Структурная схема следящей системы представлена на рис. Требуется спроектировать регулятор включенный последовательно с неизменяемой частью системы в контуре ошибки с передаточной функцией Wрегs который обеспечивает в замкнутой следящей системе с единичной обратной связью заданный набор показателей качества. Структурная схема проектируемой следящей системы.
43470. Транспортная задача. Общая постановка, цели, задачи. 723 KB
  В общей постановке транспортная задача состоит в отыскании оптимального плана перевозок некоторого однородного груза с баз потребителям . Различают два типа транспортных задач: но критерию стоимости план перевозок оптимален если достигнут минимум затрат на его реализацию и по критерию времени план оптимален если на его реализацию затрачивается минимум времени. План перевозок с указанием запасов и потребностей удобно записывать в виде следующей таблицы называемой таблицей перевозок: Пункты Отправления Пункты назначения Запасы ...
43471. Ремонт и техническое обслуживание стератера 279.33 KB
  Устройство стартера Назначение и виды стартера Стартер представляет собой электродвигатель постоянного тока, прокручивающий коленчатый вал с частотой необходимой для пуска двигателя. При прокручивании маховика двигателя стартер должен преодолеть момент сопротивления, создаваемый силами трения и компрессией.
43472. Проект спеціального ЕРЕ – кварцового резонатора на частоту 3,58 МГц 711 KB
  Вимоги, що ставляться до параметрів, властивостей та характеристик електрорадіоелементів, і, як наслідок, обмеження на їхні типи, визначаються функціональним призначенням схем та ланцюгів, у яких вони використовуються. При виборі елементної бази до певної ЕА також необхідно враховувати умови експлуатації цієї ЕА. Для даного варіанту курсової роботи задані наступні умови експлуатації:
43473. Обобщенная характеристика и особенности системы права Республики Беларусь 179 KB
  Поэтому и нормы права регулирующие эти интересы группируются по отраслям права а отрасли соединяются в систему права взаимно согласуются и дополняют друг друга. А само понятие системы права пришло в юриспруденцию из философии где под ним подразумевалось нечто ценное представляющее собой единство закономерно расположенных и находящихся во взаимной связи частей. Римские юристы ввели это понятие для того чтобы свести в единое целое различные нормы права которые существовали в Древнем Риме. Система права изначально основывалась на...
43474. Программирование приложений Windows. Методические указания 71 KB
  К защите курсовой работы представляется: пояснительная записка; реализация программы в виде законченного приложения; информация на диске. Создание демонстрационнообучающей программы по методом численного интегрирования. Создание демонстрационнообучающей программы по методам аппроксимации функций многочлены Ньютона Лагранжа интерполяционный многочлен. Создание обучающей программы по WIN PI раздел многопоточные приложения.
43475. Подземная гидромеханика. Методические указания 188 KB
  Фильтрационноемкостные параметры коллекторов Задание 1 Для величины пористости m=30 для 1 варианта и диаметра частиц d=020 мм определить удельную поверхность Sуд фиктивного грунта радиус пор идеального грунта R проницаемость k идеального грунта удельную поверхность и проницаемость реального грунта. Задание 2 Куб с ребром 1м наполнили шарами диаметром 10 см каждый а куб с ребром 1 см точно также уложили шарами диаметром 1 мм каждый.