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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2013, 22:59   #1
Putin-mode
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 82
По умолчанию Ошибка в канвасе

Доброй всем ночи.

Есть программа, переписана на ооп, но после этого перестала работать прорисовка треугольника по 3 и более точек. Постоянно ругается на конструктор класса. Подскажите в чем проблема.

Архив перезалил.
Вложения
Тип файла: rar Канва.rar (7.9 Кб, 9 просмотров)

Последний раз редактировалось Putin-mode; 19.11.2013 в 23:30.
Putin-mode вне форума Ответить с цитированием
Старый 19.11.2013, 23:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
D:\РГАТУ\2 курс\Объектно-ориентированное программирование\Гот\Гот\Unit1.cpp
Здорово. Поздравляю твой код посмотреть невозможно из-за этого.
Показывай строку где происходит ошибка.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.11.2013, 23:26   #3
Putin-mode
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 82
По умолчанию

вот весь код, ошибку я нашел, вернее источник, как мне связать класс и переменные x[i] y[i]
Код:
#include <vcl.h>
#include <math.h>
#pragma hdrstop
#include "Unit1.h"

#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//TMyThread *Thr[1];
//Triangle **MassivTreugol[100];
/////////////////////////////////////////////////////////////////////////////
//вот я не понял как все сюда переместить

//Класс треугольников, самый минимум, завтра еще что нибудь придумаем а то в час ночи голова уже не соображает:(
class Triangle
	{   //public: Triangle() {};
		public: int x1,x2,x3,y1,y2,y3;
		public: Triangle(int Getx1, int Getx2, int Getx3, int Gety1, int Gety2, int Gety3)
		{
			this->x1 = Getx1;
			this->x2 = Getx2;
			this->x3 = Getx3;
			this->y1 = Gety1;
			this->y2 = Gety2;
			this->y3 = Gety3;

		}

	};



 /////////////////////////////////////////////////////////////////////////////
 int x[100],y[100],n;  // массив макисмум из 100 точек по икус и игреку
 // a b  строковые числа координат
 // n  число точек
 // y x  координаты точек по иксу и игреку
 // i j k точки на плоскости
 //---------------------------------------------------------------------------
 __fastcall TForm1::TForm1(TComponent* Owner)
 : TForm(Owner)
 {
 }

 
 //---------------------------------------------------------------------------


 void __fastcall TForm1::TrackBar1Change(TObject *Sender)
 {
 Edit1->Text=IntToStr(TrackBar1->Position);
 }
 //---------------------------------------------------------------------------
 void create_triangles(){ //процедура прорисовки треугольников


 Triangle *MassivTreugol = new Triangle[100];//Создаем массив таких наших треугольников
 int t=0;//Итераток цикла по нашему массиву треугольников
 int i,j,q,k;
 q = 0;

 for (i=0; i<n; i++){ //выполняется пока i не достигнет кол-во точек
 for (j=i; j<n; j++){
 for (k=j; k<n; k++){
 if ((i != j) && (j != k) && (k != i)) {
   q++;

 
 MassivTreugol[t]=Triangle(x[i],x[j],x[k],y[i],y[j],y[k]);
 t++;

 Form1->PaintBox1->Canvas->MoveTo(MassivTreugol[t].x1,MassivTreugol[t].y1); //Определяет текущую позицию пера
 Form1->PaintBox1->Canvas->LineTo(MassivTreugol[t].x2,MassivTreugol[t].y2); //Рисует прямую до заданной точки

 Form1->PaintBox1->Canvas->MoveTo(MassivTreugol[t].x2,MassivTreugol[t].y2); //Определяет текущую позицию пера
 Form1->PaintBox1->Canvas->LineTo(MassivTreugol[t].x3,MassivTreugol[t].y3); //Рисует прямую до заданной точки

 Form1->PaintBox1->Canvas->MoveTo(MassivTreugol[t].x3,MassivTreugol[t].y3); //Определяет текущую позицию пера
 Form1->PaintBox1->Canvas->LineTo(MassivTreugol[t].x1,MassivTreugol[t].y1); //Рисует прямую до заданной точки
 }
 }
 }
 }
 Form1->Label2->Caption = "Число треугольников " + IntToStr(q);
 }

 void __fastcall TForm1::BitBtn1Click(TObject *Sender)
 {
 int t,i;
 PaintBox1->Canvas->Rectangle(0,0,600,400); // рисует прямоугольную область на
											//которой будут треугольники каждый
											//раз обновляя область
 if (RadioButton2->Checked){             //определяет состояние свойства Radio2
 RadioButton1->Checked = false;
 n=StrToInt(Edit1->Text);  				 //число точек
 for (i=0; i<n; i++){					 //создание точек рандомом
 x[i]=rand()%590+1; 					 //случайное число не больше 591
 y[i]=rand()%390+1; 					 //случайное число не больше 416
 PaintBox1->Canvas->Ellipse(x[i]-2,y[i]-2,x[i]+2,y[i]+2); //рисует кружок в
														  //местах точек
 }
 create_triangles();                      //передача параметров в функцию
 }
 if (RadioButton1->Checked){  			  //определяет состояние свойства Radio1
 RadioButton2->Checked = false;
 n=Memo2->Lines->Count-1;                 //определение количества строк
 AnsiString a,b;  						  //объявление типа
 for (i=0; i<n; i++){ 					  //чтение введённых точек
 a=Memo2->Lines->Strings[i+1];			  //перебираем строки в мемо
 t=a.Pos(" ");   						  //вход по счету пробела в строку
 b=a.SubString(1,t-1); 					  // читает число до 2 символа
 a=a.Delete(1,t);    					  // читает число с 3 символа
 x[i]=StrToInt(b);                        //присваивание точек
 y[i]=StrToInt(a);                        //присваивание точек
 PaintBox1->Canvas->Ellipse(x[i]-2,y[i]-2,x[i]+2,y[i]+2); //рисует кружок в
														  //местах точек
 }
 create_triangles();                      //передача параметров в функцию
 }
 }
Putin-mode вне форума Ответить с цитированием
Старый 20.11.2013, 06:53   #4
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Сформулируй четче вопрос, ни черта не понятно.
nikmoon вне форума Ответить с цитированием
Старый 20.11.2013, 07:13   #5
Putin-mode
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 82
По умолчанию

вообщем мне нужно в этот код добавить ооп, то есть сделать через классы. Щас все работает на процедурах, а нужно чтоб хоть какой нибудь класс сделать. Класс точек на пример.

Код:
#include <vcl.h>
 #include <math.h>
 #pragma hdrstop

 #include "Unit1.h"
 //---------------------------------------------------------------------------
 #pragma package(smart_init)
 #pragma resource "*.dfm"
 TForm1 *Form1;
 /////////////////////////////////////////////////////////////////////////////
 class treugol {
 public:
	   int x,y,i,j,k;
	   paint_tr();
	   count_tr();
 };





 /////////////////////////////////////////////////////////////////////////////
 int x[100],y[100],n;  // массив макисмум из 100 точек по икус и игреку
 // a b  строковые числа координат
 // n  число точек
 // y x  координаты точек по иксу и игреку
 // i j k точки на плоскости
 //---------------------------------------------------------------------------
 __fastcall TForm1::TForm1(TComponent* Owner)
 : TForm(Owner)
 {
 }

 
 //---------------------------------------------------------------------------


 void __fastcall TForm1::TrackBar1Change(TObject *Sender)
 {
 Edit1->Text=IntToStr(TrackBar1->Position); 
 }
 //---------------------------------------------------------------------------
 void create_triangles(){ //процедура прорисовки треугольников
 int i,j,q,k;
 q = 0;
 for (i=0; i<n; i++){ //выполняется пока i не достигнет кол-во точек
 for (j=i; j<n; j++){
 for (k=j; k<n; k++){
 if ((i != j) && (j != k) && (k != i)) {
   q++;  


 Form1->PaintBox1->Canvas->MoveTo(x[i],y[i]); //Определяет текущую позицию пера
 Form1->PaintBox1->Canvas->LineTo(x[j],y[j]); //Рисует прямую до заданной точки

 Form1->PaintBox1->Canvas->MoveTo(x[j],y[j]); //Определяет текущую позицию пера
 Form1->PaintBox1->Canvas->LineTo(x[k],y[k]); //Рисует прямую до заданной точки

 Form1->PaintBox1->Canvas->MoveTo(x[k],y[k]); //Определяет текущую позицию пера
 Form1->PaintBox1->Canvas->LineTo(x[i],y[i]); //Рисует прямую до заданной точки
 }
 }
 }
 }
 Form1->Label2->Caption = "Число треугольников " + IntToStr(q);
 }

 void __fastcall TForm1::BitBtn1Click(TObject *Sender)
 {
 int t,i;
 PaintBox1->Canvas->Rectangle(0,0,600,400); // рисует прямоугольную область на
											//которой будут треугольники каждый
											//раз обновляя область
 if (RadioButton2->Checked){             //определяет состояние свойства Radio2
 RadioButton1->Checked = false;
 n=StrToInt(Edit1->Text);  				 //число точек
 for (i=0; i<n; i++){					 //создание точек рандомом
 x[i]=rand()%590+1; 					 //случайное число не больше 591
 y[i]=rand()%390+1; 					 //случайное число не больше 416
 PaintBox1->Canvas->Ellipse(x[i]-2,y[i]-2,x[i]+2,y[i]+2); //рисует кружок в
														  //местах точек
 }
 create_triangles();                      //передача параметров в функцию
 }
 if (RadioButton1->Checked){  			  //определяет состояние свойства Radio1
 RadioButton2->Checked = false;
 n=Memo2->Lines->Count-1;                 //определение количества строк
 AnsiString a,b;  						  //объявление типа
 for (i=0; i<n; i++){ 					  //чтение введённых точек
 a=Memo2->Lines->Strings[i+1];			  //перебираем строки в мемо
 t=a.Pos(" ");   						  //вход по счету пробела в строку
 b=a.SubString(1,t-1); 					  // читает число до 2 символа
 a=a.Delete(1,t);    					  // читает число с 3 символа
 x[i]=StrToInt(b);                        //присваивание точек
 y[i]=StrToInt(a);                        //присваивание точек
 PaintBox1->Canvas->Ellipse(x[i]-2,y[i]-2,x[i]+2,y[i]+2); //рисует кружок в
														  //местах точек
 }
 create_triangles();                      //передача параметров в функцию
 }
 }
 //---------------------------------------------------------------------------


//---------------------------------------------------------------------------
Putin-mode вне форума Ответить с цитированием
Старый 20.11.2013, 07:50   #6
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

Ладно, то, что тебе требуется использовать классы, понятно.
Если я правильно понял, тебе нужно отрисовывать треугольники. Чтобы отрисовать треугольник тебе нужно знать координаты трех его опорных точек. Не могу понять почему ты задаешь количество точек? Не проще задавать количество треугольников, которые нужно отрисовать?
nikmoon вне форума Ответить с цитированием
Старый 20.11.2013, 12:29   #7
Putin-mode
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 82
По умолчанию

Нет, нужно имеено хаотичное количество точек, и их хаотичное нахождение.
Putin-mode вне форума Ответить с цитированием
Старый 20.11.2013, 12:35   #8
Putin-mode
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 82
По умолчанию

Я не прошу ничего такого, лишнего, главное внести в эту программу класс, хотя бы чтоб в нем были точки.
Putin-mode вне форума Ответить с цитированием
Старый 20.11.2013, 13:42   #9
nikmoon
Форумчанин
 
Регистрация: 13.11.2013
Сообщений: 149
По умолчанию

А треугольник то тебе чем не класс???
nikmoon вне форума Ответить с цитированием
Старый 20.11.2013, 13:47   #10
Putin-mode
Пользователь
 
Регистрация: 04.06.2010
Сообщений: 82
По умолчанию

согласен, но нужно чтоб в коде был отдельный свой класс. Помочь не сможешь?
Putin-mode вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Клавиши в канвасе treut Java Мобильная разработка (Android) 1 24.03.2012 00:55
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Конструктор на канвасе Heming Помощь студентам 5 07.07.2010 00:35
Как вывести на канвасе текст не с белым, а прозрачным фоном? Altera Общие вопросы Delphi 2 29.03.2008 20:21