Программная реализация

Содержание Курсовой работы

 

1. СОДЕРЖАНИЕ КУРСОВОЙ РАБОТЫ.. 2

2. Полный текст задания к курсовой работе. 3

3. Содержание. 4

3.1 Краткая теория. 4

3.2 Программная реализация. 5

3.3 Результаты расчетов. 7

4. Заключение. 8

Библиография. 9

 

 


Полный текст задания к курсовой работе

 

 

Задача для курсовой работы


ВАРИАНТ 6

Элементы тех столбцов матрицы, в которых есть нули, увеличить на скаляр, равный количеству нулей в соответствующем столбце матрицы.

Транспонировать полученную матрицу и поменять местами первый и последний столбец исходной матрицы.

В подзадаче а) предусмотреть формирование матрицы тремя способами: ввод данных в матрицу с клавиатуры;

Заполнение матрицы случайными числами; из файла. Способ формирования матрицы должен выбираться в режимедиалога.

 

 

СОДЕРЖАНИЕ

Краткая Теория по теме курсовой работы:

 

Структура двумерного массива, с именем A, размером M на N

Где, M — количество строк двумерного массива;
N — количество столбцов двумерного массива;
M*N — количество элементов массива.

В объявлении двумерного массива, также как и в объявлении одномерного массива, первым делом, нужно указать:

  • Тип данных;
  • Имя массива.

После чего, в первых квадратных скобочках указывается количество строк двумерного массива, во вторых квадратных скобочках — количество столбцов двумерного массива. Двумерный массив визуально отличается от одномерного второй парой квадратных скобочек.

 

пример объявление двумерного массива:

inta[5][3];

  • A — имя целочисленного массива
  • число в первых квадратных скобках указывает количество строк двумерного массива, в данном случае их 5;
  • число во вторых квадратных скобках указывает количество столбцов двумерного массива, в данном случае их 3.

 

 

Программная реализация

/* Элементы тех столбцов матрицы, в которых есть нули, увеличить на скаляр,

равный количеству нулей в соотсвествующем столбце матрицы.

Транспонировать полученную матрицу и поменять местами первый и

последний столбец исходной матрицы. */

#include<iostream> // Библиотека для ввода-вывода

#include<cmath>//библиотека для для арифметический вычислений

#include<cstdlib>// библиотека для функции srand (В нашем случае используется только она)

#include<ctime>//библиотека для времени.

#include<fstream>//библиотека для работы с файлами

usingnamespacestd;// объявление пространства имён. (Ну и чтобы каждый раз не писать std::)

intmain() { // начало выполнение программы.

setlocale(0,"rus");// Включаю русскую раскладку, без неё с++ выводит мусор в консоль)

constint n=4; /* объевление длину строк матрицы */

int account0=0; /* Объявление переменной, для использования счётчика нулей */

int q2=0;//Объявление переменной q2, и операция присваивания q2 значение 0.

int i=0;//Объявление переменной, для использования счётчика индекса строк.

int j=0;//Объявление переменной, для использования счётчика индекса стоблцов.

int m[n][n]; // Объявление двумерного массива m(исходная матрица)

int p[n][n]; // Объявление двумерного массива n (Увелич. на скаляр, равный к-ву 0 в соотв. столбце матрицы)

int t[n][n]; // Объявление двумерного массива t (Транспонированная исходная матрица)

int q[n]; // Объявление массива, куда будет присвоенно первый столбец исходной матрицы

int age; //Объявление переменной, для оператора switch.

int q1[n]; // Объявление массива, куда будет присвоенно последний столбец матрицы

cout<<"Выберите каким способом хотите сформировать матрицу: ";

endl<<"1. Ввод данных в матрицу из файла."<<endl;// вывод

cout<<"2.Ввод данных в матрицу с клавиатуры."<<endl<<"3.Заполнение матрицы случайными числами."<<endl;// вывод

cout<<"Выберите один из трёх вариантов."<<endl;//вывод

cin>>age;// вывод переменной age, для ввода выбора способа формирования матрицы.

switch (age){//проверка переменной age на равество множеству значений(от1 до 3)

case 1: {//если age=1, то выполняется данное действие, от { до }

/* ofstream f1("1.txt"); //создаем файл, по умолчанию, в папке с файлом, где хранится cpp.

for (int i=0; i<n; ++i)// Создание цикла от нуля, до длины строк матрицы

{

for (int j=0; j<n; ++j)/ Создание цикла от нуля, до длины столбцов матрицы

{

int m[n][n]; // Объявление двумерного массива m(исходная матрица)

m[i][j]=0+(rand() % 6); //присваивание каждому элементу матрицы случайное число от 0 до 6

f1<<m[i][j]<<endl;//вывод значений матрицы, в файл 1.txt

 

}}

f1.close(); */ //закрытие файла f.1

ifstream f("1.txt"); // открываю созданный файл 1.txt по умолчанию, в папке с файлом, где хранится cpp.

while (!f.eof()) // пока файл не пуст, считываем из файла по одному символу

{

if (j==n)// если j равна переменной n, то...

{

i++; //индекс длины строки увеличивается на один

j=0;// индекс длины столбцов приравнивается нулю.

}

f>>m[i][j];// считываем данные из файла и записываем их в матрицу m

j++;//индекс длины столбца увеличивается на один

}

f.close();// закрытие файла f.

break;}// break завершает выполнение ближайшего внешнего цикла

case 2: {//если age=2, то выполняется данное действие, от { до }

cout<<"Введите элементы матрицы: "<<endl;//вывод предупреждения, о том, что нужно вводить элементы матриц.

for (int i=0; i<n; ++i)// Создание цикла от нуля, до длины строк матрицы

{

for (int j=0; j<n; ++j)// Создание цикла от нуля, до длины столбцов матрицы

{

cin>>m[i][j];//ввод с клавиатуры каждое значение матрице m, в каждой координате

}cout<<endl;}// опустится вниз

break;}// break завершает выполнение ближайшего внешнего цикла

case 3:{//если age=3, то выполняется данное действие, от { до }

srand(time(NULL));//выполнение инициализации генератора случайных чисел rand

for (int i=0; i<n; i++) {// Создание цикла от нуля, до длины строк матрицы

for (int j=0; j<n; j++) {// Создание цикла от нуля, до длины столбцов матрицы

m[i][j]=0+rand()%2;//Присваивание исходной матрицы случайные числы.

}cout<<endl; }// цикл для заполнения матрицы случайными числами.

break; }// break завершает выполнение ближайшего внешнего цикла

default:{//запускается случай по умолчанию, если не один из случаев не был реализован.

cout<<"Вы ввели не 1,2,3! Перезапустите Программу!";// вывод

return 0; }}// завершение функции main, окончание программы.

cout<<"Исходная матрица: "<<endl;// вывод на экран предложение "Исходная матрица"

for (int i=0; i<n; i++) {// Создание цикла от нуля, до длины строк матрицы

for (int j=0; j<n; j++) {// Создание цикла от нуля, до длины столбцов матрицы

t[i][j]=m[i][j]; // присваивание матрице t значение матрицы n

p[i][j]=m[i][j]; // присваивание матрице t значение матрицы m

cout<<m[i][j]<<"\t"; // вывод на экран каждый элемент исходной матрицы m.// Создание цикла от нуля, до длины столбцов матрицы

}cout<<endl;//опустится вниз

}//цикл, для вывода исходной матрицы. И присваивания исходной матрицы матрицам p и t

cout<<"Обработанная матрица без нулей "<<endl;// вывод на экран предложение "Обработанная матрица без нулей "

for (int i=0; i<n; i++) {// Создание цикла от нуля, до длины строк матрицы

for (int i=0; i<n; i++) {// Создание цикла от нуля, до длины столбцов матрицы

if (m[i][q2]==0){//если в координате m [i][q2], где i-изменяет от 0 до n. а q2=0, m[i][q2]==0, то

account0++;//счетчик нулей увеличивается на один.

}}//в данном цикле считал количество нулей в одной строке.

for (int i=0; i<n; i++) {// Создание цикла от нуля, до длины строк матрицы

if (account0>0) {//если счётчик нулей больше нуля, то...

if (m[i][q2]==0){// проверяется, если в координате [i][q2] элемент матрицы равен 0, то...

m[i][q2]=m[i][q2]+account0; //присваивание этому элементу, в данной координате количество нулей во всем столбце.

}}} q2++;//q2 увеличивается на 1, чтобы просчитать каждый столбец.

account0=0;//присваивание счётчику нулей 0, чтобы посчитать количество нулей в следующем столбце.

}//создал цикл, для замены нулей, на количество нулей в столбце, где находится 0.

for (int i=0; i<n; i++) {// Создание цикла от нуля, до длины строк матрицы

for (int j=0; j<n; j++) {// Создание цикла от нуля, до длины столбцов матрицы

cout<<m[i][j]<<"\t";// вывод значение элемента m в координате [i][j]

}//закрываем цикл длины столца.

cout<<endl;// опускаемся в низ, и потом переходим обратно на проверку длины строк...

}//создал цикл, для вывода на экран обработанной матрицы, без нулей.

cout<<"Транспонированная исходная матрица"<<endl;//вывод

for (int i=0; i<n; i++) {// Создание цикла от нуля, до длины строк матрицы

for (int j=0; j<n; j++) {// Создание цикла от нуля, до длины столбцов матрицы

p[i][j]=t[j][i];//происходит операция транспонирование исходной матрицы...

cout<<p[i][j]<<"\t";//вывод траспонированной матрицы.

}//закрытие цикла длины столбцов матрицы.

cout<<endl;// опустится вниз

}//создали цикл, операции траспонирования матрицы

for (int i=0; i<n; i++) {// Создание цикла от нуля, до длины строк матрицы

q[i]=t[i][0];}//производится операция присваивания одномер.массиву q[i] элементы первого столбца матрицы.

for (int i=0; i<n; i++) {// Создание цикла от нуля, до длины строк матрицы

q1[i]=t[i][n-1];}//производится операция присваивания одномер.массиву q[i] элементы последнего столбца матрицы.

cout<<"Смена матрицы "<<endl;//вывод на экран предложение "Смена матрицы"

for (int i=0; i<n; i++) {//// Создание цикла от нуля, до длины строк матрицы

t[i][n-1]=q[i];//производится операция присваивания элементам последнего столбца матрицы, значения массива q

t[i][0]=q1[i];//производится операция присваивания элементам первого столбца матрицы, значения массива q1

}//создал цикл, для операции замены первого столбца матрицы на последний, а последний на первый.

cout<<endl;// опускание вниз

for (int i=0; i<n; i++) {// Создание цикла от нуля, до длины строк матрицы

for (int j=0; j<n; j++) {// Создание цикла от нуля, до длины столбцов матрицы

cout<<t[i][j]<<"\t";// вывод матрицы

}//закрытие цикла длины столбцов

cout<<endl;//опускание вниз

}//создали цикл, для вывода обработанной матрицы, где заменили первый и последний столбец исходной матрицы.

return0; //нормальный, либо аварийный выход из программы.

}// завершение функции main, окончание программы.

 

 

РЕЗУЛЬТАТЫ РАСЧЕТОВ

 

ЗАКЛЮЧЕНИЕ:

Написав эту курсовую работу, я освоил принципы разработки программ обработки двумерных массивов(матриц).

А именно:

‒ Траспонирование двумерных массивов(матриц).

‒ Способы замены одной строки/столбца на любую другую.

‒ Поиск элементов двумерных массивов, с разными условиями (В моем случае поиск нулей)

‒ Операции присваивания элементам двумерных массивов(матриц)

 

 

БИБЛИОГРАФИЯ

 

‒ Многомерные массивы в C++ — практическое пособие - code-live.ru/post/cpp-array-tutorial-part-2

‒ Т.А Павловская. C/C++ Программирование на языке высокого уровня- Питер, 2003.-450 c.

 

‒ Л.Ф Лебеденко, О.И Моренкова. Основы программирования на С++ Учебное пособие- СибГУТИ. – Новосибирск, 2013. – 177с.

 

‒ О.И Моренкова. Лекция 8. Циклические вычислительные процессы.

 

‒ О.И Моренкова. Лекция. Основные алгоритмы обработки массивов.

 

‒ О.И Моренкова. Лекция 15. Двумерные массивы(матрицы).


 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: