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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.10.2009, 20:44   #1
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
Восклицание Работа с матрицей

Уважаемые члены форума...У меня к вам большая просьба: помогите, пожалуйста, найти и исправить ошибку в нижепреведенном коде:

Код:
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;

int Elmatr(int i, int j, int x, int y)
{
	if (j<(x/2)) return rand()%1000+1;
	else return 0;
}

int Adress (int i, int j, int x)
{
	return (i-(x/2+1)*4+j);
}

int main()
{
	setlocale(0,"");
	int i,j,x,y,x1,y1;
	do {
	cout<<"Введите размерность матрицы. Число должно быть четным: ";
	cin>>x;
	} while (x%2!=0);
	y=x;
	int r=x*y;
	int *A=new int [r];
	cout<<endl;
	for (i=0; i<x; i++)
	{
		for (j=0; j<y; j++)
		
			if (Elmatr(i,j,x,y)!=0){
			
				A[Adress(i,j,x)]=Elmatr(i,j,x,y);
			}
	}
	for (i=0; i<x; i++)
	{
		for (j=0; j<y; j++)
		{
			if (j<(x/2))
				cout<<setw(6)<<A[Adress(i,j,x)];
			else cout<<setw(6)<<"0";
		}
		cout<<endl;
		cout<<endl;
	}
	cout<<endl;

	cout<<"Введите номер строки: ";
	cin>>x1;
	cout<<"Введите номер столбца: ";
	cin>>y1;
while (((x1>x)||(x1<=0))||((y1>y)||(y1<=0)))
{
		cout<<"Вы ввели неверно\n";
	cout<<"Введите номер строки: ";
	cin>>x1;
	cout<<"Введите номер столбца: ";
	cin>>y1;
	}
	cout<<"Элемент = "<<A[Adress(x1-1,y1-1,x)];
	getch();
	return 0;
	}
1) ошибка возникает, если ввести размерность матрицы больше 6;
2) ошибка возникает после вывода на экран элемента с запрашиваемым адрессом, после нажатия клавиши Enter..

Заранее огромное спасибо...!!!

Последний раз редактировалось Sazary; 25.10.2009 в 21:29.
JeyKip вне форума Ответить с цитированием
Старый 25.10.2009, 21:10   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

извините, а для чего такая дикая арифметика?

если задача сводится к нахождению элемента матрицы, то вот так намного проще


Код:
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <ctime>

using namespace std;

void main()
{
	setlocale(LC_ALL,"rus");
	int n,**mas,x,y;

	do {
		cout<<"Введите размерность матрицы. Число должно быть четным: ";
		cin>>n;
	}while(n%2);

	mas=new int*[n];               // выделение памяти под массив
	for(int i=0;i<n;i++)              //
		mas[i]=new int[n];   //

	srand(time(0));
	cout<<"\nМатрица :\n\n";
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			mas[i][j]=rand()%1001;
			cout<<setw(6)<<mas[i][j];
		}
		cout<<endl;
	}

	cout<<endl<<endl;

	do {
		cout<<"\nВведите номер строки: ";
		cin>>x;
	}while( x>n || x<1 );

	do {
		cout<<"\nВведите номер столбца: ";
		cin>>y;
	}while( y>n || y<1 );

	cout<<"\nЭлемент = "<<mas[x-1][y-1];

	_getch();
}
counter вне форума Ответить с цитированием
Старый 25.10.2009, 21:42   #3
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
По умолчанию

Спасибо за помощь...)) Но здесь нужно расположить нули в правой части матрицы...а функции задания адреса и элемента должны быть по условию...)))
JeyKip вне форума Ответить с цитированием
Старый 25.10.2009, 22:06   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

в вашем коде нужно вот так

Код:
int Adress (int i, int j, int x)
{
	return (i+(x/2+1)*4+j);
}

и вот тут немного не так

Код:
if (Elmatr(i,j,x,y)!=0)            // здесь функция вернет одно значение, которое проверите
{
    A[Adress(i,j,x)]=Elmatr(i,j,x,y);       // а здесь - другое, которое может быть и 0
}
вот так будет правильней

Код:
int x=Elmatr(i,j,x,y);
if (x!=0)          
{
    A[Adress(i,j,x)]=x;      
}
counter вне форума Ответить с цитированием
Старый 25.10.2009, 22:47   #5
JeyKip
Форумчанин
 
Регистрация: 18.09.2009
Сообщений: 133
Хорошо

Спасибо...очень помогли...все-го лишь сменил "-" на "+" и перестала программа выдавать ошибки..)))
JeyKip вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с матрицей Absent Помощь студентам 2 05.04.2009 15:46
Работа с матрицей Absent Помощь студентам 1 24.05.2008 13:33
Работа с матрицей Absent Помощь студентам 3 17.05.2008 22:20
Помогите с матрицей Zolotce Помощь студентам 4 21.04.2008 14:15