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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

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

Код:
#include "stdаfx.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; // Освобождение памяти
}
а ошибка такая : fatal error C1083: Cannot open include file: 'stdаfx.h': No such file or directory
компилирую на вижуал студио 2005 С++
серг вне форума Ответить с цитированием
Старый 06.12.2009, 15:20   #2
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

на что можно заменить эту функцию
серг вне форума Ответить с цитированием
Старый 09.08.2010, 10:25   #3
ZanLeO
 
Регистрация: 09.08.2010
Сообщений: 6
По умолчанию

У меня назрел вопрос: для чего она тебе?
Скомпилил на обычном Си+ компиляторе.
Он только на неизвестный тип (_TCHAR) матюгнулся.
PS И почему например не "rand()%99+1;" ? И потом без лишних "..умножается на -1.."

Последний раз редактировалось ZanLeO; 09.08.2010 в 10:31.
ZanLeO вне форума Ответить с цитированием
Старый 09.08.2010, 12:37   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Код:
double *mas;
N=10; M=6;// Размерность масива 
mas = new double [N*M]; // Резервирование памяти для динамического массива
У вас не двумерный массив, а одномерный
Двумерный массив NxM создается так:
Код:
N=10, M=6;
double **mas = new double*[N]; // строки матрицы
for(int i=0; i<N; i++)  mas[i] = new double[M]; // столбцы
еще...
Код:
*(mas+i*M+j)=rand()%200-100;
зачем так писать? сам же потом запутаешься когда будет много таких выражений
Полностью аналогичный и ничем не отличающийся вид записи:
Код:
mas[i][j]=rand()%200-100;
согласись, намного удобнее

Код:
delete [] mas; // Освобождение памяти
помоему данная запись освободит только строки матрицы, указатели на столбцы останутся, надо так:
Код:
for(int i=0; i<N; i++)
    delete mas[i]; // Освобождение строк
delete mas;  // Освобождение столбцов
еще надо в конце функции обязательно написать return 0;
а твои ошибки возможно связаны с тем что ты создал Си проект, а не C++

Последний раз редактировалось NiCola999; 09.08.2010 в 12:52.
NiCola999 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


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