Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

консоль->bcb

13K
16 ноября 2005 года
Посторонним В.
17 / / 16.11.2005
Прошу подсказки.
Имеется консольное приложение на С++.
Хочу сделать ему интерфейс в Билдере (только осваиваю).
Но возникла проблема.
Все параметры ввода-вывода в исходном приложении записаны соответственно через cin-cout. Простой заменой внутри членов-функций класса - cin на string=Edit1->Text,и cout на ListBox->Items->Add(..) не удается обеспечить вывод. А очень бы хотелось.
Может можно как-то объявить заранее в -.cpp или -.h файлах Edit,ListBox и пр. чтобы они работали на ввод-вывод изнутри определенного класса.
(Вся программа реализуется нажатием одной клавиши. Т.е. я хочу, чтоб в обработчике Клика по ней участвовали только функции-члены определенных классов, т.е., грубо говоря, чтоб обработчик работал как старый добрый main)
Может есть несложные способы перехода от рабочего консольного приложения к оконному.
Страницы:
335
16 ноября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by Посторонним В.
Может есть несложные способы перехода от рабочего консольного приложения к оконному.



как мне кажется есть: пишется новое оконное приложение :).

13K
16 ноября 2005 года
Посторонним В.
17 / / 16.11.2005
Цитата:
Originally posted by enola
как мне кажется есть: пишется новое оконное приложение :).


Проблема в том, что я пытаюсь сделать это уже не первый день. В Билдере оказалось столько разных заморочек, которые мне , воспитанному на школьном Паскале, даже не снились.
Мне всего-то надо, чтобы два численных параметра ввести с формы, и чтоб программа выдала массив данных (в пределе график).
Я не понимаю, как можно использовать вместе классы, построенные мной, и визуальные компоненты. Они ведь тоже классы или функции классов, но они ведь не дают себя использовать внутри моих классов.
Иначе как можно ввести и вывести данные из моего класса через все эти кнопки и едиты.
Если начать строить новое оконное приложение, то что, в обработчике Клика писать всю программу целиком наподобие Си? Мне ясно, что это глупо, но как перекидывать данные между моими классами и встроенными?

335
16 ноября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by Посторонним В.
В Билдере оказалось столько разных заморочек, которые мне , воспитанному на школьном Паскале, даже не снились.



так может стоит писать на дельфи, раз такое дело?

13K
16 ноября 2005 года
Посторонним В.
17 / / 16.11.2005
Цитата:
Originally posted by enola
так может стоит писать на дельфи, раз такое дело?


Так вышло, что под рукой оказался Билдер, а не Делфи. Впрочем все равно, я и в Делфи не работал.Для меня вообще все компоненты и пр. как темный лес. Примеры из книжек получаются, а самому переделать свою же прогу с Си на Си - никак :) :{
Ведь это наверняка можно как-то сделать. Может сделать параметры классов типа public или вообще глобальные? чтоб обработчик присваивал этим переменным значения, а потом их использовал класс для вычислений.
Ведь все как-то совмещают свои классы и встроенные, или опытные программеры по-другому организуют процесс?

335
16 ноября 2005 года
enola
379 / / 25.01.2005
Цитата:
Originally posted by Посторонним В.
Так вышло, что под рукой оказался Билдер, а не Делфи. Впрочем все равно, я и в Делфи не работал.Для меня вообще все компоненты и пр. как темный лес. Примеры из книжек получаются, а самому переделать свою же прогу с Си на Си - никак :) :{
Ведь это наверняка можно как-то сделать. Может сделать параметры классов типа public или вообще глобальные? чтоб обработчик присваивал этим переменным значения, а потом их использовал класс для вычислений.
Ведь все как-то совмещают свои классы и встроенные, или опытные программеры по-другому организуют процесс?



так тебе в дэльфи проще будет т.к. паскаль знаешь, в билдере не Си а С++ (это так на заметку), вот я ни разу не встречал, чтоб какую-нибудь прогу из консоли в окошки переделали! Они консоль развивают :) Вот например "клиент банки".

Что очень много переписывать надо?

276
16 ноября 2005 года
Rebbit
1.1K / / 01.08.2005
Цитата:
Originally posted by Посторонним В.
Может сделать параметры классов типа public или вообще глобальные? чтоб обработчик присваивал этим переменным значения, а потом их использовал класс для вычислений.
Ведь все как-то совмещают свои классы и встроенные, или опытные программеры по-другому организуют процесс?



Опытным меня не назовеш, но всеже....
Твой клас делает какието вичисления. Так ?
Но я так понимаю что он при етом организавывает ввод вивод средствами cin, cout. Я правильно понимаю ?
Если да то советую переделать свой клас так чтоб он занимался токо вычислениями. Вводом/виводом пусть занимаются стандартные компоненты, например в класе формы. Надо еще организовать интерфейс твоего класа (функции которые принимают входные даные для вичислений и возвращают результати которые надо виводить).
И вообще если делаеш клас для вичислений или вообще обработки даных, то не советую тикать в нево любой интерфейс пользователя. Если он (клас) независим от платформи то егоможно без проблем перенести куда угодно.
Удачи в роботе.

3
16 ноября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by Rebbit
Опытным меня не назовеш, но всеже....
Твой клас делает какието вичисления. Так ?
Но я так понимаю что он при етом организавывает ввод вивод средствами cin, cout. Я правильно понимаю ?
Если да то советую переделать свой клас так чтоб он занимался токо вычислениями. Вводом/виводом пусть занимаются стандартные компоненты, например в класе формы. Надо еще организовать интерфейс твоего класа (функции которые принимают входные даные для вичислений и возвращают результати которые надо виводить).
И вообще если делаеш клас для вичислений или вообще обработки даных, то не советую тикать в нево любой интерфейс пользователя. Если он (клас) независим от платформи то егоможно без проблем перенести куда угодно.
Удачи в роботе.


Молодец! Поддерживаю!
Я бы к этому ещё бы добавил Unit Testing.

4.8K
16 ноября 2005 года
Jump
128 / / 09.11.2005
5 копеек от ламера :)
Если переделывать этот весь вычислстельный класс действительно влом :D , да "нафик нада", то действительно делаешь так, как изначально ты сам и предлагал:

Я тока совсем по действиям распишу, чтоб не париться

1.Создал новый проект (формочку т.е., к примеру Form1)
2.Вставляешь в свой класс пару компонент(не мышкой на форму, а ручками в текст класса):
 
Код:
TListBox *MyListBox = new TListBox(Form1);
    TEdit *MyEdit = new TEdit(Form1);

3.Корректируешь позицию своих компоней на формочке:

MyEdit->Top = xx (высота)
--|-- ->Left = xx (смещение вправо)

4.Вуаля!!! Пихаешь свои эдит с листбоксом куда надо.


ЗЫ: Знаю, что так не хорошо, но иногда "так хоцца..." :D
4.8K
16 ноября 2005 года
Jump
128 / / 09.11.2005
Совсем забыл...
Не забудь включить в свой модуль заголовок в котором формочка прописана
 
Код:
#include "Unit1.h"

а то он не будет знать хуиз Form1 :)
276
16 ноября 2005 года
Rebbit
1.1K / / 01.08.2005
Цитата:
Originally posted by Jump
Если переделывать этот весь вычислстельный класс действительно влом :D , да "нафик нада"


У Freeman-a спроси. Он когдато так подисывался :)

Цитата:
2.Вставляешь в свой класс пару компонент(не мышкой на форму, а ручками в текст класса):
 
Код:
TListBox *MyListBox = new TListBox(Form1);
    TEdit *MyEdit = new TEdit(Form1);

3.Корректируешь позицию своих компоней на формочке:

MyEdit->Top = xx (высота)
--|-- ->Left = xx (смещение вправо)


А вот тут я не понял. Почему мышкой нельзя ???

ЗЫ. Я тут подумал что можно переопределить сами cin & cout полностью. Но дуиаю ето не каждому под силу. (Я б не смог)

13K
17 ноября 2005 года
Посторонним В.
17 / / 16.11.2005
Цитата:
Originally posted by Rebbit
1.Создал новый проект (формочку т.е., к примеру Form1)
2.Вставляешь в свой класс пару компонент(не мышкой на форму, а ручками в текст класса):

code:--------------------------------------------------------------------------------
TListBox *MyListBox = new TListBox(Form1);
TEdit *MyEdit = new TEdit(Form1);



Цитата:
А вот тут я не понял. Почему мышкой нельзя ???


Мышкой объект инициализируется сразу (при компиляции, что ли?), а через new в процессе работы программы. Также и уничтожается.

Но вот вчера мне такое же в голову пришло. и .. не работает :o .Объект созданный внутри класса не ассоцируется с формой. при этом include<Haзвание.h> конечно же имеется. Видимо изнутри класса увидеть Форму нельзя. Jump, если у тебя эта программа работает, то не можешь ли более подробный листинг. Я вот помещаю чего я пытался сделать для простго возведения в квадрат. Класс делался т.к. я думал, что при конструировании его, объекты возникнут и дождутся ввода.
-----------------------------------------
[COLOR=green]#include <cstring.h>[/COLOR]
[COLOR=blue] TForm1 *Form1;
class Sqr { public: TEdit *MyEdit;
TListBox *MyListBox;
Sqr();~Sqr();
int sqr(int);
void outtoList(int);};
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner) {}
//---------------------------------------------------------------------------
Sqr::Sqr() {
TEdit *MyEdit=new TEdit(Form1);
TListBox *MyListBox=new TListBox(Form1);};
//---------------------------------------------------------------------------
Sqr::~Sqr(void){
delete MyEdit; delete MyListBox;};
//---------------------------------------------------------------------------
int Sqr::sqr(int i)
{String str1=MyEdit->Text;
i=str1.ToInt();
return i*i; };
//---------------------------------------------------------------------------
void Sqr::outtoList(int i){
MyListBox->Items->Add(sqr(i));};
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Sqr proba;
proba.outtoList(5);
}[/COLOR]
//---------------------------------------------------------------------------

-----------------------------------------
Придется конечно как предложил Rabbit

Цитата:
советую переделать свой клас так чтоб он занимался токо вычислениями. Вводом/виводом пусть занимаются стандартные компоненты, например в класе формы.


Но предполагаю так тоже возникнут проблемы. Т.к. пока что слабо представляю насколько сложно/просто выводить большие массивы данных через средства предлагаемые Билдером.
Пожалуй это все равно оптимальный вариант.

585
17 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Rebbit
У Freeman-a спроси. Он когдато так подисывался :)

А вот тут я не понял. Почему мышкой нельзя ???

ЗЫ. Я тут подумал что можно переопределить сами cin & cout полностью. Но дуиаю ето не каждому под силу. (Я б не смог)


Я что-то не совсем понимаю... Зачем переделывать велосипед? Cin и cout функции вывода в поток из std, никаких определенных пользователем вычислений в них не производится. Используй вывод VCL.

[COLOR=red]Per rectum ad astra [/COLOR]

Цитата:
Originally posted by Jump
1.Создал новый проект (формочку т.е., к примеру Form1)
2.Вставляешь в свой класс пару компонент(не мышкой на форму, а ручками в текст класса):

code:
TListBox *MyListBox = new TListBox(Form1);
TEdit *MyEdit = new TEdit(Form1);


3.Корректируешь позицию своих компоней на формочке:

MyEdit->Top = xx (высота)
--|-- ->Left = xx (смещение вправо)

4.Вуаля!!! Пихаешь свои эдит с листбоксом куда надо.

13K
17 ноября 2005 года
Посторонним В.
17 / / 16.11.2005
Тут морда посреди листинга попала. На самом деле там :о. а как смайл - это :o. :)
585
17 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Посторонним В.
Мышкой объект инициализируется сразу (при компиляции, что ли?), а через new в процессе работы программы. Также и уничтожается.

Но вот вчера мне такое же в голову пришло. и .. не работает :o .Объект созданный внутри класса не ассоцируется с формой. при этом include<Haзвание.h> конечно же имеется. Видимо изнутри класса увидеть Форму нельзя. Jump, если у тебя эта программа работает, то не можешь ли более подробный листинг. Я вот помещаю чего я пытался сделать для простго возведения в квадрат. Класс делался т.к. я думал, что при конструировании его, объекты возникнут и дождутся ввода.
-----------------------------------------
[COLOR=green]#include <cstring.h>[/COLOR]
[COLOR=blue] TForm1 *Form1;
class Sqr { public: TEdit *MyEdit;
TListBox *MyListBox;
Sqr();~Sqr();
int sqr(int);
void outtoList(int);};
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner) {}
//---------------------------------------------------------------------------
Sqr::Sqr() {
TEdit *MyEdit=new TEdit(Form1);
TListBox *MyListBox=new TListBox(Form1);};
//---------------------------------------------------------------------------
Sqr::~Sqr(void){
delete MyEdit; delete MyListBox;};
//---------------------------------------------------------------------------
int Sqr::sqr(int i)
{String str1=MyEdit->Text;
i=str1.ToInt();
return i*i; };
//---------------------------------------------------------------------------
void Sqr::outtoList(int i){
MyListBox->Items->Add(sqr(i));};
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Sqr proba;
proba.outtoList(5);
}[/COLOR]
//---------------------------------------------------------------------------

-----------------------------------------
Придется конечно как предложил Rabbit

Но предполагаю так тоже возникнут проблемы. Т.к. пока что слабо представляю насколько сложно/просто выводить большие массивы данных через средства предлагаемые Билдером.
Пожалуй это все равно оптимальный вариант.


Это наше все.... пипец
Во-первых пользуйся тегами code
Во-вторых, на кой хрен в твоем классе инкапсулировать VCL компоненты ????
Во так не пробовал
ввод

 
Код:
sqr(Edit1->Text.ToInt)

вывод
 
Код:
Memo1->Lines->Add(IntToStr(sqr(Edit1->Text.ToInt)));
13K
17 ноября 2005 года
Посторонним В.
17 / / 16.11.2005
Цитата:
Originally posted by honeybeer
Я что-то не совсем понимаю... Зачем переделывать велосипед? Cin и cout функции вывода в поток из std, никаких определенных пользователем вычислений в них не производится. Используй вывод VCL.



В том то и дело, что cin и cout работают вне зависимости от того где они прописаны, в классе ли, в функции, в основной части (это я main имею в виду), чтобы ими пользоваться надо всего хедер поставить iostream и все. И в ЛЮБОМ МЕСТЕ они работают. А всякие компоненты vcl являются объектами различных классов, с множеством функций, и поэтому через них в лоб никак ввод вывод не устроить. Ограничение даже в том что ввод-вывод только строчный. Вывод int и float - это большая поблажка разработчиков. По нормальному и их надо переводить в строки (как при вводе - строки в числа переводить необходимо).
Я бы вообще DOS-ом (консолью) обходился, но нужен график сразу, чтоб с ним можно было работать. И вообще хочется простой программы - запустил и пользуйся. А через консоль - в файл запиши, потом его проверь, потом этот файл через Excel-подобную программу в графику перевести. (это у кого-то возникал вопрос зачем мне все это)

Поэтому я и пытаюсь выяснить - как можно встроить в ранее написанные классы vcl-объекты.Или не встроить, а выкинуть из классов вывод.

585
17 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Посторонним В.
В том то и дело, что cin и cout работают вне зависимости от того где они прописаны, в классе ли, в функции, в основной части (это я main имею в виду), чтобы ими пользоваться надо всего хедер поставить iostream и все. И в ЛЮБОМ МЕСТЕ они работают. А всякие компоненты vcl являются объектами различных классов, с множеством функций, и поэтому через них в лоб никак ввод вывод не устроить. Ограничение даже в том что ввод-вывод только строчный. Вывод int и float - это большая поблажка разработчиков. По нормальному и их надо переводить в строки (как при вводе - строки в числа переводить необходимо).
Я бы вообще DOS-ом (консолью) обходился, но нужен график сразу, чтоб с ним можно было работать. И вообще хочется простой программы - запустил и пользуйся. А через консоль - в файл запиши, потом его проверь, потом этот файл через Excel-подобную программу в графику перевести. (это у кого-то возникал вопрос зачем мне все это)

Поэтому я и пытаюсь выяснить - как можно встроить в ранее написанные классы vcl-объекты.Или не встроить, а выкинуть из классов вывод.



Любите книгу - источник знаний(с). Больше вопросов не имею. Ответов то же.

P.S.
Вы все попутали

13K
17 ноября 2005 года
Посторонним В.
17 / / 16.11.2005
Цитата:
Originally posted by honeybeer
Во так не пробовал
ввод
 
Код:
sqr(Edit1->Text.ToInt)

вывод
 
Код:
Memo1->Lines->Add(IntToStr(sqr(Edit1->Text.ToInt)));


Благодарю.
Коротко и ясно. И главное - работает без всяких проблем.
Т.е. для класса проще создать отдельные функции-члены, отвечающие за передачу данных между формой и классом.

Тут появился Ваш ответ. А у меня вопрос - чего я попутал? Вообще все я напутать не мог, потому что писал исключительно из опыта, а как уж там все внутри организовано я толком-то не знаю. Так что же не верно? Хотя в принципе не очень-то важно. Все равно Спаси Бог Вас за помощь и науку. :)

585
17 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Посторонним В.
Благодарю.
Коротко и ясно. И главное - работает без всяких проблем.
Т.е. для класса проще создать отдельные функции-члены, отвечающие за передачу данных между формой и классом.

Тут появился Ваш ответ. А у меня вопрос - чего я попутал? Вообще все я напутать не мог, потому что писал исключительно из опыта, а как уж там все внутри организовано я толком-то не знаю. Так что же не верно? Хотя в принципе не очень-то важно. Все равно Спаси Бог Вас за помощь и науку. :)


Да пожалуйста, но про все таки почитать литературу по этому вопросу. Ведь что такое cin и сout, это глобальные объекты классов istream и ostream соответственно в которые через перегруженные << и >> передаются параметры. Ну вот к примеру:

Код:
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
:::DDummy(); // вызов глобальной Dummy
Dummy();   // вызов метода Dummy
// и та и другая изменяют свойство Caption класс TForm1
}
//---------------------------------------------------------------------------

void Dummy(void) // не метод TForm1
{
Form1->Caption = "Аналогично cout << \"Аналогично Form1->Caption = \"\" в VCL\" в std";
}

void TForm1:::DDummy(void) // метод, член класса TForm1
{
Caption = "Совсем другая песня";
}

Это конечно грубая аналогия, но для начала сойдет.
13K
17 ноября 2005 года
Посторонним В.
17 / / 16.11.2005
Появилась одна загвоздка при передаче параметров в класс. Если передавать параметры ввода через конструктор (или другую функцию) класса, то возникает непоследовательность. В общем все в программе:

Код:
//------------
class Sqr {private: int N;
           public:  Sqr();
               int in(int);
               int out(int);};

  Sqr::Sqr() {N=in(???);};
 int Sqr::in(int i){return i;};
 int Sqr::out(int){return N*N;};
//-----------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{ Sqr sqr1;
  sqr1.in(Edit1->Text.ToInt());
  Memo1->Lines->Add(IntToStr(sqr1.out(Edit1->Text.ToInt())));
}
//-----------------------------------------------

Где ??? стоят, что там должно быть?
585
17 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Посторонним В.
Появилась одна загвоздка при передаче параметров в класс. Если передавать параметры ввода через конструктор (или другую функцию) класса, то возникает непоследовательность. В общем все в программе:

Код:
//------------
class Sqr {private: int N;
           public:  Sqr();
               int in(int);
               int out(int);};

  Sqr::Sqr() {N=in(???);};
 int Sqr::in(int i){return i;};
 int Sqr::out(int){return N*N;};
//-----------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{ Sqr sqr1;
  sqr1.in(Edit1->Text.ToInt());
  Memo1->Lines->Add(IntToStr(sqr1.out(Edit1->Text.ToInt())));
}
//-----------------------------------------------

Где ??? стоят, что там должно быть?


Фуух...

Код:
class Sqr
{
private:
    double FN;
    void SetN(double i){FN = i * i;}
    double GetN(void){return FN;}
public:
    Sqr(int N = 0){FN = N;}
    __property double N = {read = GetN, write = SetN};
};

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Sqr var;
var.N = Edit1->Text.ToDouble();
this->Caption = var.N;
}
276
17 ноября 2005 года
Rebbit
1.1K / / 01.08.2005
Цитата:
Originally posted by Посторонним В.
В том то и дело, что cin и cout работают вне зависимости от того где они прописаны, в классе ли, в функции, в основной части (это я main имею в виду), чтобы ими пользоваться надо всего хедер поставить iostream и все. И в ЛЮБОМ МЕСТЕ они работают. А всякие компоненты vcl являются объектами различных классов, с множеством функций, и поэтому через них в лоб никак ввод вывод не устроить. Ограничение даже в том что ввод-вывод только строчный. Вывод int и float - это большая поблажка разработчиков. По нормальному и их надо переводить в строки (как при вводе - строки в числа переводить необходимо).


Ввод/вивод чисел ето не поблажка разаработчиков, а перегрузка операторов << >>

На счет cin cout
cin как роботает ? Он ожидает на ввод.
Я предогаю на базе потоков сделать свои cin cout (не те что в iostream а свои).
cin будет выдавать модальное окно с едитом и ожыдать на ввод. cout может видавать меседж.
Еще можно сделать Мемо для того чтоб емулировать екран текстовый. Если все ето запихнуть в модуль и правильно использовать, то досовскую прогу перенести будет елементарно. Но интерфейс конечно ужасный получится.

585
17 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Rebbit
Ввод/вивод чисел ето не поблажка разаработчиков, а перегрузка операторов << >>

На счет cin cout
cin как роботает ? Он ожидает на ввод.
Я предогаю на базе потоков сделать свои cin cout (не те что в iostream а свои).
cin будет выдавать модальное окно с едитом и ожыдать на ввод. cout может видавать меседж.
Еще можно сделать Мемо для того чтоб емулировать екран текстовый. Если все ето запихнуть в модуль и правильно использовать, то досовскую прогу перенести будет елементарно. Но интерфейс конечно ужасный получится.


Вопрос на засыпку - зачем? Это что бы жизнь медом не казалась?

276
17 ноября 2005 года
Rebbit
1.1K / / 01.08.2005
Цитата:
Originally posted by honeybeer
Вопрос на засыпку - зачем? Это что бы жизнь медом не казалась?


:D Бредовая идея тоже идея :D

585
17 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Rebbit
:D Бредовая идея тоже идея :D


Оно конечно, но только эта идея явно о том, как максимально возможно усложнить себе жизнь :)

13K
17 ноября 2005 года
Посторонним В.
17 / / 16.11.2005
В общем-то вроде кк-бы все понятно.
Но переношу на свою программу, и чего-то не катит.
Пишет "is not accessible" для __property var.N при попытке присвоить значение. Вроде все точно также делаю. :???:

А N в Sqr(int N=0) и property компилятор как разные N видит? Я проперти не использовал и не знаю чего это. Как понимаю свойство класса. Ну и при конструировании он его зачитывает, или нет?
585
17 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Посторонним В.
В общем-то вроде кк-бы все понятно.
Но переношу на свою программу, и чего-то не катит.
Пишет "is not accessible" для __property var.N при попытке присвоить значение. Вроде все точно также делаю. :???:

А N в Sqr(int N=0) и property компилятор как разные N видит? Я проперти не использовал и не знаю чего это. Как понимаю свойство класса. Ну и при конструировании он его зачитывает, или нет?


1) вынеси объявление пропертиса в секцию public
2) Разные

276
17 ноября 2005 года
Rebbit
1.1K / / 01.08.2005
Цитата:
Originally posted by honeybeer
Оно конечно, но только эта идея явно о том, как максимально возможно усложнить себе жизнь :)


А вот тут не соглашусь.
Сделать ето не так уж и сложно. Ну день надо посидеть. Ну может и больше.
Я так понял что человеку не очень то интерфейс и важен. Ему нужно чтоб ВСЛ был и чтоб компоненти график рисовали. А прежнюю програму ему переделовать не очень и надо. (Может я и не правильно понял).
А так один раз сделал модуль и любую консоль без проблем на форму переносиш.
Опять же говорю. Опыта у меня мало. Может я и ошибаюсь.
Кроме того если бы я себе жызнь не усложнял, то вообще программировать бы не умел. А так опит создания своего класа с визуальными компонентами, переопределения операторов, созданиэ модального окна. ПРАКТИКА :)

ЗЫ. Предлогаю закрыть мою идею. Ето было мое ИМХО. Поскольку автор решыл идти другим путем (что и на мое мнение абсолютно логично и правильно :) ), то не вижу повода для дискусии.

4.8K
17 ноября 2005 года
Jump
128 / / 09.11.2005
Цитата:
Originally posted by Посторонним В.

...Объект созданный внутри класса не ассоцируется с формой...



Я еще забыл :)

 
Код:
MyEdit->Parent = Form1;
MyListBox->Parent = Form1;

Правда я явно погорячился по части замены Edit'ом cin'а. cin - ведь ждет ввода, а эдит... нет. придется еще кнопочку на форму прилепить - которая будет запускать вычисление.
И еще... Не создавай эти компоненты во время выполнения. Создай заранее (скажем на форм-криэйт повесь).


ЗЫ: А вообще маньячная ветка получилась :D . Это ж надо! Написать класс для возведения числа в квадрат :D :D :D
Цитата:
Originally posted by Rebbit
Я предогаю на базе потоков сделать свои cin cout (не те что в iostream а свои).


Жуть :) Ваще маниак :D :D :D
Хотя если это рассматривать не для данной темы, а просто поставить перед собой цель "перевод из консоли под окошки" - то это идея :)

299
18 ноября 2005 года
3D Bob
885 / / 18.04.2005
Читать тему только улыбаться.
Не удивительно, что УМЫ форума здесь вообще почти ничего не писали.
Сначало бы выучили Си++, поняли бы его мощь, по работе с классами перегрузкой, что такое cin и cout а потом бы что-нибудь предлагали.
13K
18 ноября 2005 года
Посторонним В.
17 / / 16.11.2005
В общем с проперти у меня ничего не получилось. Он требует в аттрибуиах write, а мне нужно только переправить в класс данные,и не одно число, и вытащить оттуда массив тыщ на десять.
Поэтому я пошел простым путем. Создал функции в классе отвечающие за передачу внутрь класса и передачу наружу. Но что б дотумкать до этого мне и нужны были все ваши советы. Может попозже когда я освою всякие перегрузки и свойства и прочее многое, я напишу нечто простое элегантное и миниатюрное. Ну а пока буду страдать от собственного невежества. :).
Я тему то не закрываю, хоть выход и нашелся. Может со временем он меня не будет устраивать.
Скоро надо будет графику создавать так что через сутки или побольше возопию к помощи.
Цитата:
Не удивительно, что УМЫ форума здесь вообще почти ничего не писали.
Сначало бы выучили Си++, поняли бы его мощь, по работе с классами перегрузкой, что такое cin и cout а потом бы что-нибудь предлагали.


Да не удивительно, что им, с ламерами и флудерами общаться.Так посмеяться только X)- .
Что проку мне-то от этих УМов. Как бы то ни было но первый шаг сделать мне помогли.
И вообще 3D Bов, взял бы да и написал как перегрузить cin cout, так чтобы взял старенькую досовскую прогу, прогнал ее в билдере и готово.

Цитата:
Хотя если это рассматривать не для данной темы, а просто поставить перед собой цель "перевод из консоли под окошки" - то это идея :)

585
18 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Посторонним В.
...
И вообще 3D Bов, взял бы да и написал как перегрузить cin cout, так чтобы взял старенькую досовскую прогу, прогнал ее в билдере и готово.


Вот если бы ты выложил DOS-исходник, был бы другой разговор

13K
18 ноября 2005 года
Посторонним В.
17 / / 16.11.2005
Цитата:
Originally posted by honeybeer
Вот если бы ты выложил DOS-исходник, был бы другой разговор


Выкладывать весь исходник не вижу смысла (нет ничего такого особенного для программирования, очень частная расчетная задача).Надо то что характерно в простом примере.Опять же мучать возведение в квадрат - не дело.А впрочем...

Код:
class Pow
{private:
    int N; float X,*x;
public: Pow(){ cout<<"\n Enter N "; cin>>N;
               cout<<"\n Enter X "; cin>>X;
     x=new float[2*N+10];
       if(!x){cout<<"Little of Memory for x\n";return;};
     };
       ~Pow(){delete x;};
    void power();
    };
//Просто возводит в степень N число X,
// и определяет так все x
void Pow::power()
   { for (int i=-N;i<=N;i++){x=X;
     if (i>0)  for(int k=2;k<=i;k++) x*=X;
       else for(int k=0;k>=i;k--) x/=X;
 cout<<X<<"^"<<i<<" = "<<x<<"\n";};
    };

int main(int argc, char* argv[])
{  Pow pow1;
pow1.power();
return 0;
};

Вот пожалуйста. Задача та же. На форме два едита, один лист и одна кнопка которой все запускается.
Но если надо исходник именно моей проги, то даже не знаю..Мне кажется в такой задаче все это есть.
585
18 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Посторонним В.
Выкладывать весь исходник не вижу смысла (нет ничего такого особенного для программирования, очень частная расчетная задача).Надо то что характерно в простом примере.Опять же мучать возведение в квадрат - не дело.А впрочем...
Код:
class Pow
{private:
    int N; float X,*x;
public: Pow(){ cout<<"\n Enter N "; cin>>N;
               cout<<"\n Enter X "; cin>>X;
     x=new float[2*N+10];
       if(!x){cout<<"Little of Memory for x\n";return;};
     };
       ~Pow(){delete x;};
    void power();
    };
//Просто возводит в степень N число X,
// и определяет так все x
void Pow::power()
   { for (int i=-N;i<=N;i++){x=X;
     if (i>0)  for(int k=2;k<=i;k++) x*=X;
       else for(int k=0;k>=i;k--) x/=X;
 cout<<X<<"^"<<i<<" = "<<x<<"\n";};
    };

int main(int argc, char* argv[])
{  Pow pow1;
pow1.power();
return 0;
};

Вот пожалуйста. Задача та же. На форме два едита, один лист и одна кнопка которой все запускается.
Но если надо исходник именно моей проги, то даже не знаю..Мне кажется в такой задаче все это есть.


Это не код, а издевательство над ним. И скорее всего при его выполнении получишь AV.

13K
18 ноября 2005 года
Посторонним В.
17 / / 16.11.2005
Цитата:
Originally posted by honeybeer
Это не код, а издевательство над ним. И скорее всего при его выполнении получишь AV.


Код работает. Не надо конечно при запросе вводить чего попало, а только числа лучше целые и все будет нормально.
Ну не придумал больше ничего, чтоб ввод - два числа,вывод - динамический массив. Если не нравится сама функция придумай другую. Дело ведь не в ней, а в тех самых cin-ах и cout-ах. Где их и как использовать, дело ваше. Эта задачка похожа на мою. Ну не мой исходник же вставлять, в конце концов. Придумывайте свое. На вычислительные функции можно спокойно забить. Главно чтоб перегруженные син-саут работали подобно обычным.

ЗЫ:На данный момент, для себя я проблему решил, т.е. это для тех кому любопытно. Ну и УМЫ могут подключаться. Что ж, ничего для них зазорного.;)

585
18 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Посторонним В.
Код работает. Не надо конечно при запросе вводить чего попало, а только числа лучше целые и все будет нормально.
Ну не придумал больше ничего, чтоб ввод - два числа,вывод - динамический массив. Если не нравится сама функция придумай другую. Дело ведь не в ней, а в тех самых cin-ах и cout-ах. Где их и как использовать, дело ваше. Эта задачка похожа на мою. Ну не мой исходник же вставлять, в конце концов. Придумывайте свое. На вычислительные функции можно спокойно забить. Главно чтоб перегруженные син-саут работали подобно обычным.

ЗЫ:На данный момент, для себя я проблему решил, т.е. это для тех кому любопытно. Ну и УМЫ могут подключаться. Что ж, ничего для них зазорного.;)


хидер

Код:
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
//---------------------------------------------------------------------------
class Pow
{
private:
    int iPow;
    double dResult, dNum;
    double GetNum(){return dNum;}
    void SetNum(double Num){dResult = dNum = Num;}
    int GetPow(){return iPow;}
    void SetPow(int Pow){iPow = Pow;}
public:
    Pow(){iPow = 0, dResult = 0, dNum = 0;}
    ~Pow(){}
    double power();
    __property int Pow = {read = GetPow, write = SetPow};
    __property double Num = {read = GetNum, write = SetNum};
};

class TForm1 : public TForm
{
__published:    // IDE-managed Components
    TListBox *lbxResult;
    TEdit *edNum;
    TEdit *edPow;
    TButton *btnStart;
    TLabel *lblNum;
    TLabel *lblPow;
    void __fastcall btnStartClick(TObject *Sender);
    void __fastcall lbxResultKeyUp(TObject *Sender, WORD &Key,
          TShiftState Shift);
private:    // User declarations
    Pow var;
public:     // User declarations
    __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------

#endif

cpp
Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------

double Pow::power()
{
dResult = dNum;
try
    {
    while(--iPow) dResult *= dNum;
    }
catch(...)
    {
    dResult = 0;
    MessageBox(NULL, "Переполнение!", "Класс Pow", MB_OK|MB_ICONERROR);
    }
return dResult;};
//---------------------------------------------------------------------------

void __fastcall TForm1::btnStartClick(TObject *Sender)
{
if(edPow->Text.IsEmpty() || edNum->Text.IsEmpty())return;
var.Pow = edPow->Text.ToInt();
var.Num = edNum->Text.ToDouble();
lbxResult->Items->Add(FloatToStr(var.Num) + " в степени " + IntToStr(var.Pow) + " = " + FloatToStr(var.power()));
}
//---------------------------------------------------------------------------
void __fastcall TForm1::lbxResultKeyUp(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key == VK_DELETE)lbxResult->DeleteSelected();
}
//---------------------------------------------------------------------------
3
18 ноября 2005 года
Green
4.8K / / 20.01.2000
Ой, жуть!
try/catch внутри рекурсии...
рекурсия завязанна на поля класса...
класс Pow зачем-то привязан к компилятору и платформе...
куча ненужных переменных...

Плохой код.
Закчем так сложно и криво?
585
18 ноября 2005 года
honeybeer
297 / / 06.09.2004
Цитата:
Originally posted by Green
Ой, жуть!
try/catch внутри рекурсии...


Реализацию возведения в степень я оставляю на совести того кому это надо.

Цитата:
Originally posted by Green
Ой, жуть!
рекурсия завязанна на поля класса...


И что? Функция-член не может быть рекурсивной по отношению к данным-членам?

Цитата:
Originally posted by Green
Ой, жуть!
класс Pow зачем-то привязан к компилятору и платформе...


Имеете в виду __property? И что с того?

Цитата:
Originally posted by Green

куча ненужных переменных...


Не умничай - пальцем покажи(с)... лол (собственно не факт, там их всего 3)

Цитата:
Originally posted by Green

Плохой код.
Закчем так сложно и криво?


Вы уверены в его кривизне, уважаемый? На счет сложности умолчу.

2.3K
18 ноября 2005 года
ART-CODE
134 / / 15.11.2004
На этом сайте есть статья по перехвату и внешнему управлению StdIn/StdOut для любой консольной программы.
http://www.codenet.ru/progr/bcb/pipes.php
Этот метод проверен, работает, и исходники консольной программы не нужны :)
Там есть грабли в случае, когда консольная программа не все данные качает через StdIn/StdOut , а работает напрямую с экранным буфером, но это только немного усложняет нам жизнь, все решаемо (сам делал).
585
18 ноября 2005 года
honeybeer
297 / / 06.09.2004
Рекурсия действительно в этом виде не хороша, пришлось убрать.
3
18 ноября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by honeybeer

И что? Функция-член не может быть рекурсивной по отношению к данным-членам?


Может, но это криво, ибо неявно.

Цитата:
Originally posted by honeybeer

Имеете в виду __property? И что с того?


Некрасиво, ибо неявно.

Цитата:
Originally posted by honeybeer

Не умничай - пальцем покажи(с)... лол (собственно не факт, там их всего 3)


Да все они не нужны...
Собственно, весь класс ненужный.
Но допустим, что очень хочется класс. Допустим, что надо хранить iPow, dNum, что уже кривовато.
Но зачем хранить dResult, если доступ к нему только через вычисления? Я б ещё понял, еслиб расчет производился единожды...

Цитата:
Originally posted by honeybeer

Вы уверены в его кривизне, уважаемый? На счет сложности умолчу.


Уверен.
Кстати, с "ненужной привязкой к компилятору и платформе" ты согласился?

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог