Добрый день, у меня есть код, но в нем есть ошибка, не могу найти
В общем, задача была сделать форму с c++, с задачей “Найти количество точек в каждой полуплоскости” при этом пользователь вводит сам точки и выбирает их
Проблема собственно в чем
Например: ввожу 6 точек, но у меня записывает почему-то всего 5, и получается из 6 точек, я могу выбрать всего 5, можете пожалуйста указать на ошибку? Не могу найти все еще
Вот код
Для удобства, код где форма, убрал
Если понадобиться, могу докинуть
#pragma once
#include <cstdlib>
#include <ctime>
namespace Project6 {
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
using namespace std;
struct Point
{
int x, y;
int number;
Point * next;
};
Point *first = new Point;
Point *addPoint(int a, int b, int c)
{
Point *pv = new Point;
pv->x = a;
pv->y = b;
pv->number = c;
pv->next = NULL;
if (first->x == -842150451)
{
first = pv;
}
else
{
Point *p = first;
while (p->next != NULL)
{
if (p->next != NULL)
{
p = p->next;
}
}
p->next = pv;
}
return first;
}
int m,i=1;
int x1, y1, x2 , y2, z, n, t1, t2, t3, a, b, c;
String ^go(String ^a)
{
if (a[1] == ':')
{
a = Convert::ToString(a[0]);
}
else
{
if (a[2] == ':')
{
a = Convert::ToString(a[0] + a[1]);
}
}
return a;
}
#pragma endregion
private: System::Void button4_Click(System::Object^ sender, System::EventArgs^ e) {
if (textBox8->Text != "")
{
m = Convert::ToInt32(textBox8->Text);
m = m;
first->next = NULL;
groupBox1->Visible = false;
groupBox2->Visible = true;
}
else MessageBox::Show("Введите количество точек");
}
void ghost()
{
Point *pv = first;
while (pv)
{
comboBox1->Items->Add(Convert::ToString(pv->number + ":" + pv->x + "," + pv->y));
comboBox2->Items->Add(Convert::ToString(pv->number + ":" + pv->x + "," + pv->y));
pv = pv->next;
}
}
private: System::Void button3_Click(System::Object^ sender, System::EventArgs^ e) {
if (textBox6->Text != "" && textBox7->Text != "")
{
timer1->Start();
}
else MessageBox::Show("Введите координаты точки");
}
private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
if (Convert::ToString(comboBox2->SelectedItem) != Convert::ToString(comboBox1->SelectedItem))
{
if (textBox4->Text != "" && textBox3->Text != "" && textBox1->Text != "" && textBox2->Text != "")
{
t1 = 0; t2 = 0; t3 = 0;
x1 = Convert::ToInt32(textBox1->Text);
x2 = Convert::ToInt32(textBox4->Text);
y1 = Convert::ToInt32(textBox2->Text);
y2 = Convert::ToInt32(textBox3->Text);
Point *pv = first;
while (pv)
{
if (pv->number != Convert::ToInt32(go(Convert::ToString(comboBox1->SelectedItem))) && pv->number != Convert::ToInt32(go(Convert::ToString(comboBox2->SelectedItem))))
{
if (pv->y > (((y2 - y1) / (x2 - x1)*pv->x) + ((-a) * x1 + y1)))
{
t1++;
}
if (pv->y < (((y2 - y1) / (x2 - x1)*pv->x) + ((-a) * x1 + y1)))
{
t2++;
}
if (pv->y == (((y2 - y1) / (x2 - x1)*pv->x) + ((-a) * x1 + y1)))
{
t3++;
}
}
pv = pv->next;
}
textBox9->Text = Convert::ToString(t1);
textBox5->Text = Convert::ToString(t2);
textBox10->Text = Convert::ToString(t3);
}
else MessageBox::Show("Выберите вторую точку");
}
else MessageBox::Show("Нельзя ставить одну и туже точку");
}
private: System::Void timer1_Tick(System::Object^ sender, System::EventArgs^ e) {
if (i < m)
{
addPoint(Convert::ToInt32(textBox6->Text), Convert::ToInt32(textBox7->Text), i);
i++;
timer1->Stop();
}
else
{
timer1->Stop();
groupBox2->Visible = false;
groupBox3->Visible = true;
ghost();
}
}
private: System::Void textBox8_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {
if (!((e->KeyChar >= 48) && (e->KeyChar <= 57) || (e->KeyChar == '-') || (e->KeyChar == ',') || (e->KeyChar == '.')))
{
e->Handled = true;
if (e->KeyChar == 8)
{
e->Handled = false;
}
}
}
private: System::Void textBox6_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {
if (!((e->KeyChar >= 48) && (e->KeyChar <= 57) || (e->KeyChar == '-') || (e->KeyChar == ',') || (e->KeyChar == '.')))
{
e->Handled = true;
if (e->KeyChar == 8)
{
e->Handled = false;
}
}
}
private: System::Void textBox7_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {
if (!((e->KeyChar >= 48) && (e->KeyChar <= 57) || (e->KeyChar == '-') || (e->KeyChar == ',') || (e->KeyChar == '.')))
{
e->Handled = true;
if (e->KeyChar == 8)
{
e->Handled = false;
}
}
}
private: System::Void comboBox1_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) {
int tempcom;
tempcom = Convert::ToInt32(go(Convert::ToString(comboBox1->SelectedItem)));
Point *pv = first;
while (pv)
{
if (pv->number == tempcom)
{
textBox1->Text = Convert::ToString(pv->x);
textBox2->Text = Convert::ToString(pv->y);
break;
}
else
{
pv = pv->next;
}
}
}
private: System::Void comboBox2_SelectedIndexChanged(System::Object^ sender, System::EventArgs^ e) {
int tempcom;
tempcom = Convert::ToInt32(go(Convert::ToString(comboBox2->SelectedItem)));
Point *pv = first;
while (pv)
{
if (pv->number == tempcom)
{
textBox4->Text = Convert::ToString(pv->x);
textBox3->Text = Convert::ToString(pv->y);
break;
}
else
{
pv = pv->next;
}
}
}