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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2012, 00:13   #1
zorg-kirill
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 32
Вопрос Программа работает, выдает правильные ответы, но завершается ошибкой

Выдает такую ошибку:
Windows has triggered a breakpoint in paragraph task 6.7(convex shell).exe.

This may be due to a corruption of the heap, which indicates a bug in paragraph task 6.7(convex shell).exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while paragraph task 6.7(convex shell).exe has focus.

з.ы. я F12 не нажимал.
zorg-kirill вне форума Ответить с цитированием
Старый 19.11.2012, 01:07   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Цитата:
Сообщение от zorg-kirill Посмотреть сообщение
з.ы. я F12 не нажимал.
молодец! код где?
counter вне форума Ответить с цитированием
Старый 19.11.2012, 01:08   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну так вам написали в чем проблема: убили кучу... освобождаете, наверное, уже освобожденное или типа того.
p51x вне форума Ответить с цитированием
Старый 20.11.2012, 13:09   #4
zorg-kirill
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 32
По умолчанию

Цитата:
Сообщение от counter Посмотреть сообщение
молодец! код где?
Код:
#include <iostream>
#include <math.h>
using namespace std;
short l=2;
int n,pl_pt_n=2;
struct pt
{
	short first_n;
	bool allow;
	float x, y;
};
pt *st,*shell;
void input()
{
	short i;
	do
	{
		cout<<"Number of points =";
		cin>>n;
	}
	while (n<3 || n>1000);
	st=new pt[n-1];
	shell=new pt[n];
	cout<<"Write points' coordinates:";
	for (i=0; i<n; i++)
	{
		st[i].allow=true;
		st[i].first_n=i+1;
		cout<<endl<<i+1<<".\nx=";
		cin>>st[i].x;
		cout<<"y=";
		cin>>st[i].y;
	}
}
void change (short a, short b)
{
	pt temp;
	temp=st[a];
	st[a]=st[b];
	st[b]=temp;
}
void sort_pt()
{
	short i;
	bool flag;
	while (true)
	{
		flag=false;
		for (i=0; i<n-1; i++)
			if (st[i].x>st[i+1].x)
			{
				flag=true;
				change(i,i+1);
			}
		if (flag==false)
			break;
	}
	while (true)
	{
		flag=false;
		for (i=0; i<n-1; i++)
			if (st[i].x==st[i+1].x && st[i].y>st[i+1].y)
			{
				flag=true;
				change(i,i+1);
			}
		if (flag==false)
			break;
	}
	shell[0]=st[0];
}
float arccos_v(pt a, pt b, pt c)
{
	return acos(double(((a.x-b.x)*(c.x-b.x)+(a.y-b.y)*(c.y-b.y))
		/sqrt((pow(a.x-b.x,2)+pow(a.y-b.y,2))*(pow(c.x-b.x,2)+pow(c.y-b.y,2)))));
}
void find_second_p()
{
	float angle=0;
	short i,j;
	pt temp;
	temp=shell[0];
	temp.y+=1;
	for (i=1; i<n; i++)
		if (arccos_v(temp,shell[0],st[i])>angle)
		{
			angle=arccos_v(temp,shell[0],st[i]);
			shell[1]=st[i];
			j=i;
		}
	st[j].allow=false;
}
void make_shell()
{
	bool flag=false;
	float angle;
	short i,j=1;
	while (j!=0)
	{
		if (flag==true)
		{
			shell[l]=st[j];
			st[j].allow=false;
			++l;
			++pl_pt_n;
		}
		angle=0;
		flag=false;
		for (i=0; i<n; i++)
			if (st[i].allow==true && arccos_v(shell[l-2],shell[l-1],st[i])>=angle)
			{
				flag=true;
				j=i;
				angle=arccos_v(shell[l-2],shell[l-1],st[i]);
			}
	}
}
void output()
{
	short i;
	cout<<"Polygon consists of "<<pl_pt_n<<" points:"<<endl;
	for (i=0; i<l; i++)
		cout<<shell[i].first_n<<" ";
}
void main()
{
	input();
	sort_pt();
	find_second_p();
	make_shell();
	output();
	delete st,shell;
	system ("pause");
}
zorg-kirill вне форума Ответить с цитированием
Старый 20.11.2012, 16:21   #5
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

индексация в Си начинается с 0
Код:
st=new pt[n];
shell=new pt[n];
cout<<"Write points' coordinates:";
for (i=0; i<n; i++)
counter вне форума Ответить с цитированием
Старый 20.11.2012, 18:57   #6
zorg-kirill
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 32
Хорошо

Цитата:
Сообщение от counter Посмотреть сообщение
индексация в Си начинается с 0
Код:
st=new pt[n];
shell=new pt[n];
cout<<"Write points' coordinates:";
for (i=0; i<n; i++)
Спасибо большое!)
zorg-kirill вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
GetMailslotInfo завершается с ошибкой. tamTam C# (си шарп) 0 26.12.2011 14:42
Программа стартует и сразу же завершается IceExecutioner Общие вопросы Delphi 1 03.03.2011 13:18
Синий кружок должен двигаться треугольной траектории, программа завершается нажатием любой клавиши. Pan_rust Паскаль, Turbo Pascal, PascalABC.NET 3 24.05.2010 23:02
ПРограмма вываливается с ошибкой. bullvinkle Общие вопросы C/C++ 0 23.03.2010 00:12
Структыры в С++ в борланд си, программа есть, но не работает... Помогите с ошибкой... Катюшенька Помощь студентам 2 29.03.2009 14:12