Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Формы С++ 
:(
    Опции темы
Marathon
Дата 16.12.2015, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2015

Репутация: нет
Всего: нет



Доброе утро, форумчане. Есть программа,  определяет выпуклый ли многоугольник или нет, и принадлежит ли заданная точка дачному полигону. Но просят сделать ввод координат точки, и координаты вершин через форму, раньше никогда не имел дело с этим, подскажите, пожалуйста, как это можно реализовать. 
PM MAIL   Вверх
math64
Дата 16.12.2015, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 4
Всего: 72



На чем программируешь? (Visual Studio, C++Builder, Qt, etc.)
PM   Вверх
Marathon
Дата 16.12.2015, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2015

Репутация: нет
Всего: нет



math64, Builder
PM MAIL   Вверх
Marathon
Дата 16.12.2015, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2015

Репутация: нет
Всего: нет



Разобрался с вводом точки и координаты,но вот как быть с вершинами, смысл понимаю, прогон по циклу и все такое,но в форме... Понятно, что появляется  "Введите 1 точку" -> запоминается, затем обнуление ->"Введите точку 2" и т.д. Но вот как дело до реализации,что-то не получается.

PM MAIL   Вверх
xvr
Дата 16.12.2015, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Marathon @  16.12.2015,  16:06 Найти цитируемый пост)
смысл понимаю, прогон по циклу и все такое

Не понимаете  smile В Builder'е это надо делать список. Либо через ListBox, либо тупо ввести как текст в Memo и извлекать оттуда построчно (в виде текста)

PM MAIL   Вверх
math64
Дата 17.12.2015, 08:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 4
Всего: 72



Либо список, либо таблица.Внизу(или вверху) LineEdit и кнопка Add для ввода и добавления новой точки.
кнопка Delete для удаления текущей точки.
кнопка Calc (или ещё как-то назови) - для вычисления выпуклый ли многоугольник
кнопка Show - чтобы показать многоугольник
PM   Вверх
Marathon
Дата 17.12.2015, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2015

Репутация: нет
Всего: нет



Как делать через Listbox не понял, да и мемо, что-то ткговато, раньше никогда с формами не работал, получается : пользователь вводит координаты в мемо, и они считываются затем strToInt или в цикл это надо?
PM MAIL   Вверх
Marathon
Дата 17.12.2015, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2015

Репутация: нет
Всего: нет



Да и в целом как считывать координаты из мемо, т.е нужно чтобы в строчке было два числа, через пробел
PM MAIL   Вверх
math64
Дата 17.12.2015, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 4
Всего: 72



Код

void __fastcall DeleteButtonClick(TObject* Sender)
{
  int index = ListBox1->ItemIndex;
  ListBox1->Items->Delete(index);
}

void __fastcall AddButtonClick(TObject* Sender)
{
  ListBox1->Items->Add(LineEdit->Text);
}

void __fastcall CalcButtonClick(TObject* Sender)
{
  int count = ListBox1->Items->Count;
  struct Point{ int x, int y } * poligon = new Point[count];
  for(int i = 0; i < count; i++) {
     const char* s = ListBox1->Items->String[i].c_str();
     int x, y ; 
     // Выделяем из строки координаты   
     poiligon[i].x = x;
     poiligon[i].y = y;
  }
  // Работаем с полигоном
  delete[] poligon;
}

PM   Вверх
Marathon
Дата 17.12.2015, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2015

Репутация: нет
Всего: нет



math64,Спасибо большое,  но, честно, ничего не понимаю, и как соединить с своим кодом,. С вершинами и точкой все просто.
PM MAIL   Вверх
Marathon
Дата 17.12.2015, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2015

Репутация: нет
Всего: нет



math64, Начинает доходить
PM MAIL   Вверх
Marathon
Дата 17.12.2015, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2015

Репутация: нет
Всего: нет



Мне больше не понятно как связать форму эту и код. 
Код

#include <iostream>
#include <vcl.h>
#include <math.h>
#include <stdio.h>
 typedef struct
{
   int x,y;
} point;

int Convex(int n, const point* d)
{
      int i,j,k;
      int flag=0;
      double z;

      if (n<3)
       return (0);

      for (i=0; i<n; i++) {
             j=(i+1)%n;
             k=(i+2)%n;
             z=(d[j].x - d[i].x)*(d[k].y - d[j].y);
             z-=(d[j].y - d[i].y)*(d[k].x - d[j].x);
             if (z<0)
                flag |=1;
             else if (z>0)
                flag |=2;
             if (flag==3)
               return (0);
      }
      if (flag !=0)
          return (1);
}

int main(void)
{
const int n=5;
point d[n]={
        {0,5},     //{200,10},
        {10,8},    // {250,60},
        {10,25},   //  {230,110}, //
        {-15,25},    // {200,130},
        {-15,9}  //  {180,110},
                     //{150,60}
           };
           if(Convex(n,d))
    std:: cout <<"Yes." <<std::endl;
 else
    std:: cout <<"No." <<std::endl;
   system ("pause");
}

PM MAIL   Вверх
Marathon
Дата 17.12.2015, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2015

Репутация: нет
Всего: нет



math64,Единственное, что я заменил в Вашем варианте Edit на MaskEdit, чтобы ограничить пользователя только цифрами. Но как их считать в программу выше вместо массива d [n]. Ну и очищение поля после ввода :
MaskEdit1-> Clear (); Не знаю, насколько это грамотно. 

Это сообщение отредактировал(а) Marathon - 17.12.2015, 15:16
PM MAIL   Вверх
xvr
Дата 17.12.2015, 15:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 48
Всего: 223



Цитата(Marathon @  17.12.2015,  14:50 Найти цитируемый пост)
Мне больше не понятно как связать форму эту и код. 

Никак. Для начала создайте в Builder GUI проект (а не консольный, как у вас в коде). Дальше добавьте на форму все органы управления, которые math64 перечислил, создайте для них события (в дезайнере) и скопируйте код от math64 в них.
И только потом можете копировать куски своего кода в готовые обработчики.

PM MAIL   Вверх
Marathon
Дата 17.12.2015, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 2.12.2015

Репутация: нет
Всего: нет



Мне не понятно как работает CalcButton
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1604 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.