Увидев, какое задание на вторую лабораторную приготовил мне преподаватель, я немного ужаснулся... Тогда я мог только нарисовать матрицу, но никак не мог даже представить, какие операции надо будет сделать, чтобы написать лабораторную..
Но это было недолго..Пораскинув мозгами, я и мой однокурсник (да..признаюсь..лабу делал не я один) написали более - менее рабочую программку. Вот задание и код:
Вот результат работы программы:
P.S. Была небольшая неразбериха с k и n, но в конечном результате все работает
Но это было недолго..Пораскинув мозгами, я и мой однокурсник (да..признаюсь..лабу делал не я один) написали более - менее рабочую программку. Вот задание и код:
/*1. Даны действительная матрица размера n x (n+1), действительные числа a1, ..., an+1, b1, ..., bn+1,
натуральные числа p, q, (p n, q n+1). Образовать новую матрицу размера (n+1) x (n+2)
вставкой после строки с номером p данной матрицы новой строки с элементами a1, ..., an+1 и
последующей вставкой после столбца с номером q нового столбца с элементами b1, ..., bn+1 .
Лабораторная работа № 2
Разработать алгоритм решения задачи обработки двумерного массива, хранящегося в динамической области памяти.
Реализовать алгоритм на языке С++ с помощью функций с параметрами:
1) функция выделения памяти для размещения массива, возвращающая указатель на указатель на массив;
2) функция ввода массива (в качестве параметров выступают указатель на указатель на массив и его размерность)
3) функция вывода массива (в качестве параметров выступают указатель на указатель на массив и его размерность);
4) функция (функции) расчета (может быть с типом, т.е. возвращает значение результата или void-функция);
5) 1) функция освобождения памяти. В главной функции должны быть объявлены указатели, реализованы вызовы функций
и вывод результатов на экран. Условие задачи выбрать из файла Приложение1.doc (Задача 2) по номеру в журнале.
*/
#include <iostream>
#include <stdlib.h>
using namespace std;
/////////////////////////////////////////////////////
//Выделение памяти под матрицу
double **createMatrix(int k,int n){
double **matrix = new double *[k];
for (int i = 0; i < k; i++){
matrix[i] = new double [n];
}
return matrix;
}
/////////////////////////////////////////////////////
//Выделение памяти под динамически массив
double *takeMassiv (int k)
{
double *massiv = new double [k+2];
return massiv;
}
/////////////////////////////////////////////////////
//Ниже представлены функции удаления динамических массивов и матриц
void deleteMatrix (int k, double **matrix){
for (int i = 0; i < k; i++) delete matrix[i];
delete [] matrix;
}
////
void massivDelete(double *massiv)
{
delete[]massiv; massiv=NULL;
}
////////////////////////////////////////////////////
///Следующие три функции
//inputMatrix - заполнение выделеной пямяти под матрицу числами
//inputMatrix - заполнение выделеной пямяти под матрицу числами
//inputMassiv - заполнение выделеной памяти под массив числами
//outputMatrix - вывод матрицы на экран консоли
void inputMatrix(int k,int n, double **matrix){
cout << "Введите элементы матрицы:" << endl;
for (int i = 0; i < k; i++){
for (int j = 0; j < n; j++){
cout << " a[" << i+1 << "," << j+1 << "] = ";
cin >> matrix[i][j];
}
}
}
////
void inputMassiv(int k, double *massiv){
cout << "Введите элементы 2х масивов а и b:" << endl;
for (int i = 0; i < k+1; i++){
cout << " №[" << i+1 << "] = ";
cin >> massiv[i];
}
}
////
void outputMatrix(int k,int n, double **matrix){
cout << "Ваша матрица:" << endl;
for (int i = 0; i < k; i++){
for (int j = 0; j < n; j++){
cout << " " << matrix[i][j] << " ";
}
cout << endl;
}
}
///////////////////////////////////////////////////////
//Перед вами функция обработки матрицы, тоисть
//создание новой матрицы k+1 x k+2, куда после р-строки ставится *massiv1
//а после q столбца ставится *massiv2
double ** matrixProcessing(int k,int n, double **matrix,int p,int q, double *massiv1, double *massiv2)
{
double **newMatrix = createMatrix(k+1,k+2);//создание новой матрицы
int i,j;
for(i=0; i<k;i++) { //цикл копирования в новую матрицу данных из старой
for(j=0;j<k+1;j++){
newMatrix[i][j]=matrix[i][j];
}
}
for(i=k; i>p;i--) { //цикл с убыванием
for(j=0;j<k+1;j++){//котобый создает пустую строку после строки с номером р
newMatrix[i][j]=matrix[i-1][j];
}
}
for(j=0;j<k+1;j++){
newMatrix[p][j]=massiv1[j];//заполнение пустой строки массивом *massiv1
}
for(i=0; i<k+1;i++) { //создание пустого столбца
for(j=k+1;j<k+1;j--){
newMatrix[i][j]=matrix[i][j-1];
}
}
for(i=0; i<k+1;i++) { //заполнение его *massiv2
newMatrix[i][q]=massiv2[i];
}
cout << "Матрица обработана!" << endl;
return newMatrix;
}
void main(){
setlocale(LC_ALL,"Russian");
int k,n,p,q;
cout<<"Число строк матрицы = ";
cin>>k;
cout<<"Число столбцов матрицы = ";
cin>>n;
//Выделение памяти
double **uMatrix = createMatrix(k,k+1);
double **newMatrix = createMatrix(k+1,k+2);
double *masiv1 = takeMassiv(k);
double *masiv2 = takeMassiv(k);;
//Ввод матрицы
inputMatrix(k,n,uMatrix);
//Вывод матрицы
outputMatrix(k,n,uMatrix);
//ввод масивов
inputMassiv(k,masiv1);
inputMassiv(k,masiv2);
cout<<"Число p = ";
cin>>p;
cout<<"Число q = ";
cin>>q;
//Обработка матрицы
newMatrix=matrixProcessing(k,n,uMatrix,p,q,masiv1,masiv2);
//Вывод матрицы
outputMatrix(k+1,n,newMatrix);
//Освобождение памяти
deleteMatrix(k,newMatrix);
deleteMatrix(k,uMatrix);
massivDelete(masiv1);
massivDelete(masiv2);
cin.get();
cin.get();
}
Вот результат работы программы:
P.S. Была небольшая неразбериха с k и n, но в конечном результате все работает
Комментариев нет:
Отправить комментарий