Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
exarion
0 / 0 / 0
Регистрация: 06.04.2011
Сообщений: 8
#1

Функция создающая новую матрицу - C++

20.03.2012, 21:18. Просмотров 852. Ответов 7
Метки нет (Все метки)

Нужна функция которая создает новую квадратную матрицу, где элементы вычисляются по формуле
B[i][j]=1/(i+j-1) Не уверен правильно ли функция возвращает значение. И еще нужно вывести получившуюся матрицу в main-e. Помогите найти ошибку и правильно вывести новую матрицу.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double createB(int n)
 {
 int i,j;
 double **B;
 B=new double *[n];
 for(i=0; i<n;i++)
 {
 B[i]=new double[n];
 }
 for(i=0;i<n;i++)
 for(j=0;j<n;j++)
 B[i][j]=1/(i+j-1); //не хочет работать если есть знак деления
 return **B;
 }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.03.2012, 21:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция создающая новую матрицу (C++):

Функция, создающая новую строку, скопировав в неё исходную сначала в прямом, а потом в обратном порядке - C++
В функцию передаётся строка произвольной длины. Функция создаёт новую строку, скопировав в неё исходную сначала в прямом, а потом в...

Функция создающая объекты производных классов - C++
Функция получает входной параметр - целое число. Если оно равно 0, создается новый объект - окружность, если равно 3 - создается...

Получить новую матрицу - C++
Даны две целочисленные квадратные матрицы порядка n. Нужно получить новую матрицу прибавлением к элементам каждого столбца первой...

Получить новую матрицу - C++
Здравствуйте, нужен код для задачки на языке C: Даны две действительные квадратные матрицы порядка n. Получить новую матрицу умножением...

Создать новую матрицу - C++
Есть такая задача: Есть квадратная матрица В(А,А).Создать новую матрицу, с данной в результате умножения всех элементов каждого рядка,...

Функция, принимающая матрицу, возвращающая матрицу - C++
... double msin(int **mtrx) { double mm; for (int i = 0; i &lt; 2; i++) for(int j=0; j&lt;3;j++) mm=sin(mtrx); return...

7
Rexer
164 / 163 / 20
Регистрация: 10.10.2010
Сообщений: 725
20.03.2012, 21:22 #2
double createB(int n)
эта строчка говорит,что функция возвращает число типа double
return **B;
а тут вы возвращаете массив указателей.
Тогда уж
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double ** createB(int n)
 {
 int i,j;
 double **B;
 B=new double *[n];
 for(i=0; i<n;i++)
 {
 B[i]=new double[n];
 }
 for(i=0;i<n;i++)
 for(j=0;j<n;j++)
 B[i][j]=1/(i+j-1); //не хочет работать если есть знак деления
 return **B;
 }
1
exarion
0 / 0 / 0
Регистрация: 06.04.2011
Сообщений: 8
20.03.2012, 21:31  [ТС] #3
Цитата Сообщение от Rexer Посмотреть сообщение
Тогда уж

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double ** createB(int n)
 {
 int i,j;
 double **B;
 B=new double *[n];
 for(i=0; i<n;i++)
 {
 B[i]=new double[n];
 }
 for(i=0;i<n;i++)
 for(j=0;j<n;j++)
 B[i][j]=1/(i+j-1); //не хочет работать если есть знак деления
 return **B;
 }
Не работает.
Поменял на return B; - заработало.
Но осталась проблема с делением(12 строка). Выдает devide error. Если меняю с деления на сложение - все отлично.
0
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
20.03.2012, 22:04 #4
Потому что на ноль делить нельзя.
0
exarion
0 / 0 / 0
Регистрация: 06.04.2011
Сообщений: 8
20.03.2012, 22:07  [ТС] #5
точно! не обратил внимание!
0
zss
Модератор
Эксперт С++
6631 / 6193 / 2048
Регистрация: 18.12.2011
Сообщений: 16,146
Завершенные тесты: 1
20.03.2012, 22:10 #6
Еще одна распространенная ошибка.
1/(i+j-1) равно нулю для любых i+j>2, т.к. целое делится на целое
исправьте на
1.0/(i+j-1)
1
Rexer
164 / 163 / 20
Регистрация: 10.10.2010
Сообщений: 725
21.03.2012, 10:19 #7
ай,не стер две звезды в конце,когда постил пост!
Извините.
Мы же возвращаем массив указателей,а если оставить звезды,то возвращаем значение B[0][0].
Или можно еще так,чтобы не писать 1.0,а задать явное преобразование
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double ** createB(int n)
 {
 int i,j;
 double **B;
 B=new double *[n];
 for(i=0; i<n;i++)
 {
 B[i]=new double[n];
 }
 for(i=0;i<n;i++)
 for(j=0;j<n;j++)
 B[i][j]=(double)1/(i+j-1); //обратите внимание
 return B;
 }
0
zss
Модератор
Эксперт С++
6631 / 6193 / 2048
Регистрация: 18.12.2011
Сообщений: 16,146
Завершенные тесты: 1
21.03.2012, 11:45 #8
Цитата Сообщение от Rexer Посмотреть сообщение
Или можно еще так,чтобы не писать 1.0,а задать явное преобразование
Оно, конечно, можно. Но Вы заставляете компилятор завести целую константу и вставить код,
преобразующий ее в действительное число.
0
21.03.2012, 11:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2012, 11:45
Привет! Вот еще темы с ответами:

Получить новую матрицу из данной - C++
Здравствуйте форумчане. Есть задача, но не могу решить. Подскажите чем-нибудь пожалуйста. Дана действительная квадратная матрица порядка...

Вычислить новую матрицу по формуле - C++
Здравствуйте, вобщем есть программка мне нужно вычислить матрицу В, по матрице А. Ответ мне выдается иероглифами в первой матрице....

Получить новую матрицу путем сложения - C++
Кто может уделить немного времени знающий язык С++ и помочь сделать данную программу плиз... с операторами ввода/вывода(...

Получить новую матрицу переставляя ее блоки - C++
Дана действительная квадратная матрица . получите новую матрицу переставляя ее блоки 1 с 4, 2 с 3.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.