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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2009, 22:23   #1
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию обращение к элементам двумерного массива через указатели в С++

Код:
#include<stdio.h>                 
#include<conio.h>                      
#include<stdlib.h>
#include<clocale>

int main ()
{ 
setlocale(LC_ALL, "Russian");
int i,j;
int mas[10][6];
int* masp[10];
int* Mas[6];
for (i=0;i<=9;i++) {
	*masp[i] = &mas[i];
}
for (i=0;i<=9;i++)
int *Mas=&masp[i];
for (j=0;j<=5;j++)
*(Mas+j)=rand()%200-100 ;
{ printf("\n");
for (j=0;j<=5;j++) 
	printf(" %d",*(Mas+j));
}
	for (j=0;j<=5;j++)
		{
			if (*(Mas+j)<0)
			*(Mas+j)=*-(Mas+j);
			else 
			*(Mas+j)=*(Mas+j);
		}
printf("\n \n \n \n");
{printf(" \n");
	for (j=0;j<=5;j++) 
		printf(" %d",*(Mas+j));}
getch();
}
серг вне форума Ответить с цитированием
Старый 05.12.2009, 22:25   #2
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

обращаться причем обязателно нужно через * и &
ошибки в задании типов не может конвертировать из инт в инт со * или с **
серг вне форума Ответить с цитированием
Старый 05.12.2009, 22:25   #3
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

и заменить все отрицательные елементы на положительные
серг вне форума Ответить с цитированием
Старый 05.12.2009, 23:28   #4
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Если с одинарным указателем то так
Код:
#include "stdafx.h"
#include <iostream>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
	int i,j,N,M; 
	double *mas;
	N=10; M=6;// Размерность масива 
	mas = new double [N*M]; // Резервирование памяти для динамического массива
	
	// Заполнение массива
	for (i=0;i<N;i++)	
	   	   for (j=0;j<M;j++)
				*(mas+i*M+j)=rand()%200-100;
	

	// Вывод заполненого массива на консоль
	for (i=0;i<N;i++)	
	   	   {
			for (j=0;j<M;j++)
				{
				cout<<*(mas+i*M+j)<<"\t";
				}
			cout<<"\n";
			}

	// Если элемент меньше нуля то умножается на -1 (получается положительный)
		for (i=0;i<N;i++)	
	   	   	for (j=0;j<M;j++)
				if (*(mas+i*M+j)<0)
					*(mas+i*M+j)=*(mas+i*M+j)*(-1);
				
			cout<<"\n";
	// Вывод массива
		for (i=0;i<N;i++)	
	   	   {
			   for (j=0;j<M;j++)
				{
				cout<<*(mas+i*M+j)<<"\t";
				}
			cout<<"\n";
			}

		delete [] mas; // Освобождение памяти
}
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
atenon вне форума Ответить с цитированием
Старый 05.12.2009, 23:31   #5
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

да не атенон твоя прога не ботат буду еще думать че делать (((
серг вне форума Ответить с цитированием
Старый 06.12.2009, 00:38   #6
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

Цитата:
Сообщение от серг Посмотреть сообщение
да не атенон твоя прога не ботат буду еще думать че делать (((
лучше подумай почему нормальный рабочий код от atenon у Тебя не работает
m0nax вне форума Ответить с цитированием
Старый 06.12.2009, 12:47   #7
atenon
Форумчанин
 
Регистрация: 05.12.2009
Сообщений: 253
По умолчанию

Серг код рабочий. Напиши что за ошибка. А вообще код выглядеть будет симпатичней если использовать двойной указатель и сделать функцию вывода.

Код:
/// 2.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;

void out_cons (double **x, int N, int M)
{
	int i,j;
	for (i=0;i<N;i++)
		{
	   		for (j=0;j<M;j++)
					cout<<x[i][j]<<"\t";
		cout<<"\n";
	    }
		
}
int _tmain(int argc, _TCHAR* argv[])
{
	int i,j,N,M; 
	double **mas;
	N=10; M=6;// Размерность масива 

	// Резервирование памяти для динамического массива (двойной указатель)
	mas = new double *[N]; 
	for (i=0;i<N;i++)
		mas[i]= new double [M];

	// Заполнение массива
	for (i=0;i<N;i++)	
	   	   for (j=0;j<M;j++)
				mas[i][j]=rand()%200-100;
	
	// Вывод заполненого массива на консоль
	out_cons (mas, N, M);

	// Если элемент меньше нуля то умножается на -1 (получается положительный)
		for (i=0;i<N;i++)	
	   	   	for (j=0;j<M;j++)
				if (mas[i][j]<0)
					mas[i][j]=mas [i][j]*(-1);
							
	// Вывод массива
		cout<<"\n";
		out_cons (mas, N, M);

		delete [] mas; // Освобождение памяти
}
Приходится бежать со всех ног, чтобы только остаться на том же месте! Если хочешь попасть в другое место, тогда нужно бежать по меньшей мере вдвое быстрее! Льюис Кэрол
atenon вне форума Ответить с цитированием
Старый 06.12.2009, 12:59   #8
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

мне интересно, а как создать указатель на двумерный массив в Си и рисвоить ему адрес двумерного массива. Для одномерного это делается так
Код:
int a[10];
int *b = a;
а как для двумерного также ?
NiCola999 вне форума Ответить с цитированием
Старый 06.12.2009, 14:57   #9
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

да ребят проблема в том что атенон написал на С а надо С++
серг вне форума Ответить с цитированием
Старый 06.12.2009, 15:01   #10
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

вот ошибка fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory
серг вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обращение к элементам двумерного массива через указатели серг Общие вопросы C/C++ 2 05.12.2009 23:33
обращение к элементам двумерного массива на С++ серг Помощь студентам 16 05.12.2009 21:01
обращение к элементам двумерного массива через указатели в С ++ серг Помощь студентам 0 23.11.2009 22:43