Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2012, 22:30   #1
ShockTrooper
 
Регистрация: 26.02.2012
Сообщений: 9
Восклицание Вывод динамической матрицы через указатели

Код:
# include <math.h>
# include <conio.h>
# include <iostream.h>
# include <stdlib.h>
# include <stdio.h>
class ClMatr
{
	int **M;
   int n,m;
   public:

   ClMatr(int size1,int size2)
   {
   	n=size1; m=size2;
   	M=new int*[n];
   	for(int i=0;i<n;i++)
   		M[i]=new int[m];
   }

   //Vvod:
   void MyInp()
   {  printf("\n\nVvedite element'i matrici M:\n");
   	for(int i=0;i<n;i++)
      {
      	for(int j=0;j<m;j++)
         {
         	cout<<"M["<<(i+1)<<"]["<<(j+1)<<"]="; cin>>(*(M[i]+j));
         }
      }
   }

   //Vivod
   void MyOut()
   {
   printf("\n\n\n     Matrica M:\n");
   int x, y=wherey()+1;
		int *p1, *p2 ;
      for (p1=M[0];  p1<=M[n-1];  p1+=m+1,  y++)

              for (x=1, p2=p1; p2<=p1+m-1; p2++, x+=5)
              {
                     gotoxy(x,y);
	             printf("%5d", *p2);
              }

   }
 


	~ClMatr()
   {
   for(int i=0;i<n;i++)
   	delete []M[i];
   delete []M;
   }




};
int main()
{
	int m1,m2;
   printf("Opredelite Razmernost' Matrici M: \n");
	printf("Vvedite N Strok: ");
   cin>>m1;
   printf("Vvedite N Stolbcov: ");
   cin>>m2;
   ClMatr objMatr(m1,m2);
   objMatr.MyInp();
   objMatr.MyOut();
  

   getch(); return 0;
}

Неверно выводит матрицу! В чем ошибка?? Заранее спасибо!
ShockTrooper вне форума Ответить с цитированием
Старый 26.02.2012, 22:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
p2=p1
А кто тебе сказал что все элементы матрицы будут лежать рядом?
new может размещать в куче где угодно, где менеджер памяти найдет свободное местечко, но не обязательно это будет рядом.
Впрочем еще ИМХО: for (x=1, p2=*p1... Ведь в первом уровне матрицы лежат указатели на второй уровень, и их нужно разименовать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.02.2012, 00:02   #3
ShockTrooper
 
Регистрация: 26.02.2012
Сообщений: 9
По умолчанию

Ну а почему для матрицы размером, к примеру, 3 на 3 нормально.. а вот для 2 на 2 уже не работает?

также, если создать массив все хорошо)

Еще если такой вывод использовать для частично динамической матрицы все работает.. по-моему не в этом проблема..

Последний раз редактировалось Stilet; 27.02.2012 в 10:02.
ShockTrooper вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Матрицы,Выделение динамической axel43 Общие вопросы C/C++ 1 26.06.2011 00:50
Структуры через указатели ensoleille Помощь студентам 2 21.02.2011 14:10
сделать программу через указатели toxa201091 Общие вопросы C/C++ 1 06.11.2010 01:08
Выделение динамической памяти под правый треугольник квадратной матрицы Assasin92 Общие вопросы C/C++ 0 30.10.2010 23:14
Работа с массивом через указатели Kirk_Hammett Общие вопросы C/C++ 2 27.10.2009 22:43