Содержание Курсовой работы
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. Двумерные массивы(матрицы).