Задание на матрицы и вставку солбцов в них
Даны действительные числа a1,..,an, действительная квадратная матрица порядка n(n>=6). Получить действительную матрицу размера n(n+1), вставив в исходную матрицу между пятым и шестым столбцами новый столбец с элементами a1,..,an.
заранее спасибо)
В Факе Студентам на 3 странице есть пример на С++.
Даны действительные числа a1,..,an, действительная квадратная матрица порядка n(n>=6). Получить действительную матрицу размера n(n+1), вставив в исходную матрицу между пятым и шестым столбцами новый столбец с элементами a1,..,an.
заранее спасибо)
Если лень заглянуть в фак, то вот пример:
//#include "stdafx.h"
#include <iostream>
#include <time.h>
using std::cout;
using std::endl;
using std::cin;
void filling(double **matrix, int n)
{
int i = 0;
int j = 0;
srand(time(0));
for( i=0; i<n; i++)
{
for( j=0; j<n; j++)
{
matrix[j] = rand()%(10-0+1)+0;
cout << matrix[j]<< "\t";
}
cout << endl;
}
}
void pasting(double **matrix, int n)
{
int i = 0;
int j = 0;
double **temp = matrix;
matrix = NULL;
matrix = new double*[n];
for( i=0; i<n; i++)
matrix = new double[n+1];
for(i=0; i<n; i++)
for(j=0; j<(n+1); j++)
{
if(j==5)
matrix[j] = 0;
else if(j>6)
matrix[j] = temp[j-1];
else
matrix[j] = temp[j];
}
temp = NULL;
cout << "New matrix: "<< endl;
for( i=0; i<n; i++)
{
for( j=0; j<(n+1); j++)
cout << matrix[j]<< "\t";
cout << endl;
}
}
int main(void)
{
int n = 0;
do
{
cout << "Please ente the size of array: ";
cin >> n;
if(n<6||n<=0)
cout << "\nSize incorrect. Error."<< endl;
}while(n<6||n<=0);
system("cls");
double **matrix;
matrix = new double*[n];
for(int i=0; i<n; i++)
{
matrix = new double[n];
}
cout << "Matrix: "<< endl;
filling(matrix, n);
pasting(matrix, n);
for(int i=0; i<n; i++)
delete matrix;
delete [] matrix;
system("pause");
return EXIT_SUCCESS;
}
Учебник по С++ тебе в руки, примеров по двумерным массивам море, дерзай!
<skip>
double **matrix;
matrix = new double*[n];
Это чтоб жизнь медом не казалась? :)
Вот ещё забавное место:
matrix = new double*[n];
<skip>
double **matrix;
matrix = new double*[n];
Это чтоб жизнь медом не казалась? :)
В общем воспользовавшись вашим замечанием я лихорадочно искал в чем моя оплошность, но так и не понял. К примеру вот тут данный способ описывается как единственный вариант создания динамического двумерного массива...:confused: Может вы поясните??? Во втором месте я тоже не до конца понял в чем узкое место....:confused: Кто нить может меня просветить? А то я как то сам не могу дойти!:(
Не уверен, но в первом отрывке его наверно удивило то, что используется стандартная библиотека STL, но не используется vector для создания матрицы. Если это так - то, думаю, зря придрался.
Во втором отрывке и мне не ясно, зачем нужна операция matrix = NULL; что она тут дает, если сразу после этого вы пишете matrix = new double*[n]; Может вы думаете, что этой операцией вы освобождаете память на которую ссылается matrix? Это не так.
Не уверен, но в первом отрывке его наверно удивило то, что используется стандартная библиотека STL, но не используется vector для создания матрицы. Если это так - то, думаю, зря придрался.
Во втором отрывке и мне не ясно, зачем нужна операция matrix = NULL; что она тут дает, если сразу после этого вы пишете matrix = new double*[n]; Может вы думаете, что этой операцией вы освобождаете память на которую ссылается matrix? Это не так.
Спасибо! Теперь все ясно!=) Обязательно исправлюсь!=)
Понял правильно.
Не уверен, но в первом отрывке его наверно удивило то, что используется стандартная библиотека STL, но не используется vector для создания матрицы. Если это так - то, думаю, зря придрался.
Ну почему же зря.
Если используется STL, то почему бы не использовать стандартные контейнеры, это значительно упростит жизнь и сократит код.
Если используется STL, то почему бы не использовать стандартные контейнеры, это значительно упростит жизнь и сократит код.
Думаю, эта задачка нужна для развития у студента навыков работы с обыкновенными массивами, а каким образом осуществляется ввод-вывод данных тут не важно.
Ну почему же зря.
Если используется STL, то почему бы не использовать стандартные контейнеры, это значительно упростит жизнь и сократит код.
Совершенно с вами согласен, но если человек просит помочь решить на столько простое задание, то боюсь код с использованием стандартных контейнеров вызовет у него больше проблем чем сама задача.:) Да и к тому же я считаю, что когда выполняешь учебные задачи лучше идти более сложеым путем, просто для саморазвития!:)
Не вижу сложности в использовании контейнеров. Это проще и удобнее, чем **p. Для того они и были созданы.
[QUOTE=Kogrom]Думаю, эта задачка нужна для развития у студента навыков работы с обыкновенными массивами, а каким образом осуществляется ввод-вывод данных тут не важно.[/QUOTE]
Я против такого подхода к обучению.
Не менее важно, чем обучение самому приему, обучение правильно применять эти приемы. При таком виде обучения это совершенно упускается и это чуть ли не самая большая ошибка.
Представьте себе отлично исполненный нижний брейк на балу у английской королевы под вальс Венского... :)
Даже при обучении "обстановка должна быть приближена к боевой".
Хотя, сколько людей - столько мнений!:D:);)