![]() |
Симметричная матрица
Это матрица у которой столбец под главной диогональю равен соотведствующей строке над главно диогональю. Посути получаеться два треугольника. Так вот в моей задаче мне нужно хронить в память не всю матрицу а один из таких треугольников(я выбрал нижний). У меня возникают проблемы при вводе, вот код:
Код:
#include <iostream.h>вот ошибка: http://www.grove.bsu.by/images/gallery/vlad@error.JPG |
Ответ: Симметричная матрица
Попробуй так, минус (-) я так понял значит эдемент не будет храниться в таблице.
int m; cout <<"enter m:"; cin >>m; int **mas=new int *[m-1]; int **tmp=mas; for (int i=1; i<m; i++, tmp++) *tmp=new int [i]; tmp=mas+m-2; cout <<"enter simmetri4nuu matricu:"<<endl; for (int i=0; i<m; i++) { cout <<"enter "<<(i+1)<<" stroku:"<<endl; int k=0; for (int j=0; j<m; j++) { if (j<=i) { int t; cout <<"\n-"; cin >>t; } else { cout <<"\n+"; cin >>*(*tmp+k); ++k; } } tmp--; } tmp=mas; for (int i=0;i<m-1;++i){ for (int j=0;j<i+1;++j) printf("%d ",tmp[i][j]); printf("\n"); } getch(); return 0; Добавлено через 12 минут for (int i=0; i<m; i++, mas++) *mas=new int [i]; обрати внимание на этот фрагмент,тут ты создаёшь таблицу размером 0.А потом в цикле где вводишь элементы начинаешь вписывать элемент строки в таблицу размером 0. Добавлено через 21 минуту Замени for (int i=1; i<=m; i++, mas++) И тут cin >>**(mas+j); замени на *(*mas+j); чтобы правильно перемещаться по таблице, отсюда ошибка обращения к памети. |
Ответ: Симметричная матрица
Цитата:
И я думаю что: *mas=new int [0]; равносильно *mas=new int; веди в массиве а[1] - 2 элемента, а не 1. Или я не прав? |
Ответ: Симметричная матрица
Я соглашусь с тобой в первом случае, но при такой арифметике ты перемещаешься не по таблице а по таблицам. Может я не правильно тебя понял чего ты хочешь, может именно этого ты и хочешь, но тут сдвигается указатель на указатель таблицы.
cin >>**(mas+j); |
Ответ: Симметричная матрица
Нет по поводу замены **(mas+j) на *(*mas+j) ты ПРАВ! Это просто я идиот. А вот по поводу выделения памяти я придерживаюсь своего мнения.
|
Ответ: Симметричная матрица
Цитата:
|
Ответ: Симметричная матрица
По поводу выделения памяти, я проверял в несколких источниках, в том числе www.cplusplus.com. Там написано как раз что :
int *point=new int[n], где n - это количество элементов под которые выделяется память. :quest: |
Ответ: Симметричная матрица
Ну программа покрайней мере работает правельно.
сегодня чуть по позже проверю точно этот нюанс. |
Ответ: Симметричная матрица
Предлагаю альтернативное решение:
Создать класс треугольных матриц. Код:
class matr3 |
Ответ: Симметричная матрица
2 zss:
хороший подход, мне как раз нужно несколько таких матриц. 2 flipBoy: вот код: Код:
#include "stdafx.h" |
Ответ: Симметричная матрица
Цитата:
создавать сколько угодно: matr3 m1,m2,m3[1000]; |
Ответ: Симметричная матрица
Цитата:
|
Ответ: Симметричная матрица
Цитата:
такому выводу, так что безопаснее безусловно делать так как я писал выше, и резервировать памяти столько сколько нужно. |
Ответ: Симметричная матрица
Код:
#include <iostream> |
| Текущее время: 13:16. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Copyright ©2004 - 2026 NoWa.cc