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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2009, 22:01   #1
Adya
 
Регистрация: 26.08.2009
Сообщений: 4
Вопрос Множество точек пространства. Тетраэдр.

Задача звучит следующим образом:
Дано множество точек пространства(читается из файла, вводится с клавиатуры - без разницы). Среди них найти тетраэдр, который содержит максимальное количество точек этого пространства.
До конца код не доделан.
Но сразу возник вопрос с выделением памяти. Ввожу точек 5-6 - работает, при большем выводит ошибку или зацикливается.
Adya вне форума Ответить с цитированием
Старый 29.09.2009, 22:02   #2
Adya
 
Регистрация: 26.08.2009
Сообщений: 4
По умолчанию 1 часть кода

Код:
#include<iostream>
#include<fstream>
#include<vector>
#include<stack>
#include<stdio.h>
#include<math.h>
using namespace std;

void uravneniya(int i, int j, int k, int l, double **Koord, double Mur[4][4])
{

	//Плоскость i - j - k
							Mur[0][0] = Koord[1][j]*Koord[2][k] - Koord[1][j]*Koord[2][i] - Koord[1][i]*Koord[2][k] - Koord[1][k]*Koord[2][j] + Koord[1][k]*Koord[2][i] + Koord[1][i]*Koord[2][j];
							Mur[0][1] = Koord[0][k]*Koord[2][j] - Koord[0][k]*Koord[2][i] - Koord[0][i]*Koord[2][j] + Koord[0][i]*Koord[2][k] - Koord[0][j]*Koord[2][k] + Koord[0][j]*Koord[2][i];
							Mur[0][2] = Koord[0][j]*Koord[1][k] - Koord[0][j]*Koord[1][i] - Koord[0][i]*Koord[1][k] - Koord[0][k]*Koord[1][j] + Koord[0][k]*Koord[1][i] + Koord[0][i]*Koord[1][j];
							Mur[0][3] = -Koord[0][i]*Koord[1][j]*Koord[2][k] - Koord[0][k]*Koord[1][i]*Koord[2][j] - Koord[0][j]*Koord[1][k]*Koord[2][i] + Koord[0][k]*Koord[1][j]*Koord[2][i] + Koord[0][i]*Koord[1][k]*Koord[2][j] + Koord[0][j]*Koord[1][i]*Koord[2][k];
							cout<<Mur[0][0]<<"   "<<Mur[0][1]<<"   "<<Mur[0][2]<<"   "<<Mur[0][3]<<endl;
							
	//Плоскость i - j - l
							Mur[1][0] = Koord[1][j]*Koord[2][l] - Koord[1][j]*Koord[2][i] - Koord[1][i]*Koord[2][l] - Koord[1][l]*Koord[2][j] + Koord[1][l]*Koord[2][i] + Koord[1][i]*Koord[2][j];
							Mur[1][1] = Koord[0][l]*Koord[2][j] - Koord[0][l]*Koord[2][i] - Koord[0][i]*Koord[2][j] + Koord[0][i]*Koord[2][l] - Koord[0][j]*Koord[2][l] + Koord[0][j]*Koord[2][i];
							Mur[1][2] = Koord[0][j]*Koord[1][l] - Koord[0][j]*Koord[1][i] - Koord[0][i]*Koord[1][l] - Koord[0][l]*Koord[1][j] + Koord[0][l]*Koord[1][i] + Koord[0][i]*Koord[1][j];
							Mur[1][3] = -Koord[0][i]*Koord[1][j]*Koord[2][l] - Koord[0][l]*Koord[1][i]*Koord[2][j] - Koord[0][j]*Koord[1][l]*Koord[2][i] + Koord[0][l]*Koord[1][j]*Koord[2][i] + Koord[0][i]*Koord[1][l]*Koord[2][j] + Koord[0][j]*Koord[1][i]*Koord[2][l];
							cout<<Mur[1][0]<<"   "<<Mur[1][1]<<"   "<<Mur[1][2]<<"   "<<Mur[1][3]<<endl;
	//Плоскость i - k - l
							Mur[2][0] = Koord[1][k]*Koord[2][l] - Koord[1][k]*Koord[2][i] - Koord[1][i]*Koord[2][l] - Koord[1][l]*Koord[2][k] + Koord[1][l]*Koord[2][i] + Koord[1][i]*Koord[2][k];
							Mur[2][1] = Koord[0][l]*Koord[2][k] - Koord[0][l]*Koord[2][i] - Koord[0][i]*Koord[2][k] + Koord[0][i]*Koord[2][l] - Koord[0][k]*Koord[2][l] + Koord[0][k]*Koord[2][i];
							Mur[2][2] = Koord[0][k]*Koord[1][l] - Koord[0][k]*Koord[1][i] - Koord[0][i]*Koord[1][l] - Koord[0][l]*Koord[1][k] + Koord[0][l]*Koord[1][i] + Koord[0][i]*Koord[1][k];
							Mur[2][3] = -Koord[0][i]*Koord[1][k]*Koord[2][l] - Koord[0][l]*Koord[1][i]*Koord[2][k] - Koord[0][k]*Koord[1][l]*Koord[2][i] + Koord[0][l]*Koord[1][k]*Koord[2][i] + Koord[0][i]*Koord[1][l]*Koord[2][k] + Koord[0][k]*Koord[1][i]*Koord[2][l];
							cout<<Mur[2][0]<<"   "<<Mur[2][1]<<"   "<<Mur[2][2]<<"   "<<Mur[2][3]<<endl;
	//Плоскость k - j - l
							Mur[3][0] = Koord[1][j]*Koord[2][l] - Koord[1][j]*Koord[2][k] - Koord[1][k]*Koord[2][l] - Koord[1][l]*Koord[2][j] + Koord[1][l]*Koord[2][k] + Koord[1][k]*Koord[2][j];
							Mur[3][1] = Koord[0][l]*Koord[2][j] - Koord[0][l]*Koord[2][k] - Koord[0][k]*Koord[2][j] + Koord[0][k]*Koord[2][l] - Koord[0][j]*Koord[2][l] + Koord[0][j]*Koord[2][k];
							Mur[3][2] = Koord[0][j]*Koord[1][l] - Koord[0][j]*Koord[1][k] - Koord[0][k]*Koord[1][l] - Koord[0][l]*Koord[1][j] + Koord[0][l]*Koord[1][k] + Koord[0][k]*Koord[1][j];
							Mur[3][3] = -Koord[0][k]*Koord[1][j]*Koord[2][l] - Koord[0][l]*Koord[1][k]*Koord[2][j] - Koord[0][j]*Koord[1][l]*Koord[2][k] + Koord[0][l]*Koord[1][j]*Koord[2][k] + Koord[0][k]*Koord[1][l]*Koord[2][j] + Koord[0][j]*Koord[1][k]*Koord[2][l];
							cout<<Mur[3][0]<<"   "<<Mur[3][1]<<"   "<<Mur[3][2]<<"   "<<Mur[3][3]<<endl;
	return ;
}

void proverka(int i, int j, int k, int l, int n, int z, double **Koord, double Mur[4][4], bool **Mass)
{
	int m;
	double a, b, c, d, e, f, g, h;

	a = Mur[0][0]*Koord[0][l] + Mur[0][1]*Koord[1][l] + Mur[0][2]*Koord[2][l] + Mur[0][3];
	b = Mur[1][0]*Koord[0][k] + Mur[1][1]*Koord[1][k] + Mur[1][2]*Koord[2][k] + Mur[1][3];
	c = Mur[2][0]*Koord[0][j] + Mur[2][1]*Koord[1][j] + Mur[2][2]*Koord[2][j] + Mur[2][3];
	d = Mur[3][0]*Koord[0][i] + Mur[3][1]*Koord[1][i] + Mur[3][2]*Koord[2][i] + Mur[3][3];

	for(m = 0; m < n/3; m++)
	{
		e = Mur[0][0]*Koord[0][m] + Mur[0][1]*Koord[1][m] + Mur[0][2]*Koord[2][m] + Mur[0][3];
		f = Mur[1][0]*Koord[0][m] + Mur[1][1]*Koord[1][m] + Mur[1][2]*Koord[2][m] + Mur[1][3];
		g = Mur[2][0]*Koord[0][m] + Mur[2][1]*Koord[1][m] + Mur[2][2]*Koord[2][m] + Mur[2][3];
		h = Mur[3][0]*Koord[0][m] + Mur[3][1]*Koord[1][m] + Mur[3][2]*Koord[2][m] + Mur[3][3];

		if(
			(a>0 && e>0 || a<0 && e<0) && 
			(b>0 && f>0 || b<0 && f<0) &&
			(c>0 && g>0 || c<0 && g<0) &&
			(d>0 && h>0 || d<0 && h<0)
		   )
		{
		   Mass[z][m] = true;
		}
		else 
		{
			Mass[z][m] = false;
		}
	}
	return;
}

Последний раз редактировалось Sazary; 30.09.2009 в 00:42.
Adya вне форума Ответить с цитированием
Старый 29.09.2009, 22:02   #3
Adya
 
Регистрация: 26.08.2009
Сообщений: 4
По умолчанию 2я часть кода

Код:
int main(int argc, char* argv[])
{
	setlocale(LC_ALL,".1251");

	ifstream in("koord.txt");
		if (!in)
		{
			cout<<"Файл koord.txt не найден."<<endl;
			exit(1);
		}
		else
		{
			vector<double>K;
			K.reserve(300);
			int n = 0;
			double a;
				while(!in.eof())
				{
					in >> a;
					K.push_back(a);
					n++;
				}
			
			int j, i, k, m, l, z;
			double **Koord = new double *[3];
				for( i = 0; i < 3; i++)
					Koord[i] = new double[n/3];
			
			 m = 0;
			 i = 0;
			 j = 1;
			 k = 2;
			 
				while(i!=n/3)
				{
					Koord[0][i] = K[m];
					Koord[1][i] = K[j];
					Koord[2][i] = K[k];
					i++;;
					k+=3;
					j+=3;
					m+=3;
				}
			K.clear();

			bool **Mass = new bool *[1000];
				for( i = 0; i < 1000; i++)
					Mass[i] = new bool[1000];

			double Mur[4][4];
			
			z = 0;
		    for(i = 0; i < n/3 - 3; i++)
				for(j = i + 1; j < n/3 - 2; j++)
					for(k = j + 1; k < n/3 - 1; k++)
						for(l = k +1; l < n/3; l++)
						{
							uravneniya(i, j, k, l, Koord, Mur);
							proverka(i, j, k, l, n, z, Koord, Mur, Mass);
							z++;
						}

			for(i = 0; i < z; i++)
			{
				for(j = 0; j < n; j++)
					cout<<Mass[i][j]<<"    ";
				cout<<endl;
			}	

			cout<<"=============================**Координаты точек**=============================\n";
			for(i = 0; i < 3; i++)
			{
				for(j = 0; j < n/3; j++)
					cout<<Koord[i][j]<<"   ";
				cout<<endl;
			}
		}
		
		return 1;
}

Последний раз редактировалось Sazary; 30.09.2009 в 00:42.
Adya вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Множество Archangelos Паскаль, Turbo Pascal, PascalABC.NET 5 15.06.2009 17:49
множество. Юлька:) Помощь студентам 1 30.03.2009 21:27
задача на множество точек MariyaVo Паскаль, Turbo Pascal, PascalABC.NET 2 14.01.2009 21:59