Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Открыть новую тему     Написать ответ в эту тему

65daysofstatic

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помогите, пож, ато у меня уже мозги плавятся, прога не хочет пахать только изза одной хрени: не могу обьявить функции в классе TForm, компилятор ругается, что неразрешенное обьявление.  
где их вообще обьявлять и как?

Всего записей: 6 | Зарегистр. 01-11-2007 | Отправлено: 20:59 02-11-2007
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
65daysofstatic
Мы не телепаты. Код в студию и выдели те части на которые ругается компилятор.

Всего записей: 2735 | Зарегистр. 16-10-2003 | Отправлено: 22:20 02-11-2007
65daysofstatic

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
прога создает массив, вводимый целиком в edit на form1, сортирует его пузырьком по возрастанию или убыванию в зависимости от радикнопки. отсортировав, массив должен быть выведен на form2.
 
ENTR.cpp:

Код:
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
 
#include "ENTR.h"
#include "RSLT.h"
#include "Error.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 exit(0);
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try{
 AnsiString text = Form1->Edit1->Text;
 int i = 0, t = 0, k = 0, p = 0, l = text.Length();
 for (i = 0; i < l; i++) {if ((text[i] == ',') || (text [i] == '.')) k++;}  // - определение длины массива k
 
 int *pMas;
 pMas = new int[k];  // - динамическое обьявление массива длиной k
 i = 0;
 
 while (i < l)  // заполнение массива
 {
  while ((text[i+t] != ',') || (text[i+t] != '.')) t++;
  pMas[p] = text.SubString(i, i+t).ToInt();
  p++;
  i+=t;
  t = 0;
 }
 
 if (Form1->RadioButton2->Checked == true) RVRS(pMas, k);
 SORT(pMas, k);                                                                      // - собственно сортировка
 if (Form1->RadioButton2->Checked == true) RVRS(pMas, k);
 
 Form2->Visible = true;
 for (i = 0; i < k-1; i++) Form2->Edit1->Text += pMas[i] + ",";
 Form2->Edit1->Text += ".";
}
 
catch (...) { Form3->Visible = true; }
}
//---------------------------------------------------------------------------
 
void TForm1::RVRS(int pMas[], int k)
{
 for (int i = 0; i < k; i++) pMas[i] *= -1;
}
//---------------------------------------------------------------------------
 
void TForm1::SORT(int pMas[], int k)
{
 int i = 0;
 for (int s = 0; s < k-1; s++)
 {
  for (i; i < k-1; i++)
  {
   if (pMas[i] > pMas[i+1])
   {
    pMas[i] += pMas[i+1];
    pMas[i+1] = pMas[i] - pMas[i+1];
    pMas[i] = pMas[i] - pMas[i+1];
   }
  }
  i = 0;
 }
}
//---------------------------------------------------------------------------
void TForm1::DELT(int pMas[]) {delete pMas;}
//---------------------------------------------------------------------------

 
ENTR.h:

Код:
//---------------------------------------------------------------------------
#ifndef ENTRH
#define ENTRH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:    // IDE-managed Components
        TLabel *Label1;
        TEdit *Edit1;
        TButton *Button1;
        TButton *Button2;
        TRadioGroup *RadioGroup1;
        TRadioButton *RadioButton1;
        TRadioButton *RadioButton2;
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall Button1Click(TObject *Sender);
private:    // User declarations
public:        // User declarations
 
 
        void RVRS(int pMas[], int k);
        void SORT(int pMas[], int k);
        void DELT(int pMas[]);
 
 
        __fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

 
эти функции мною написанные, т.е. не билдеровский events, поэтому для них надо прописывать все самостоятельно:
void TForm1::RVRS(int pMas[], int k)
void TForm1::SORT(int pMas[], int k)
void TForm1::DELT(int pMas)
 
допустим, обьявить у меня даже получилось и прога вроде компилируется, но теперь в другом косяк. при нажатии кнопки вылезает ошибка: "Project Massiv.exe raised exception class EAccessViolation with message 'Access violation at adress 40009720. Read of address 77682603'.
Process stopped.  Use Step or Run to continue."
 
поставила try catch, чтобы отловить ошибку, но исключение даже не успевает сработать, то есть мое сообщение об ошибке показывается уже после подолжения процесса. как бороться с такой ошибкой, я уже не понимаю (

Всего записей: 6 | Зарегистр. 01-11-2007 | Отправлено: 14:23 04-11-2007
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
65daysofstatic
Билдер сначала валится здесь
 for (i = 0; i < l; i++) {if ((text[i] == ',') || (text [i] == '.')) k++;}
из-за того, что считает элементы Ansistring c единицы
т.е. надо так
 for (i = 1; i <= l; i++) {if ((text[i] == ',') || (text [i] == '.')) k++;}
 
в этом блоке не учитывается, что юзер может завести "1,2,3", т.е к=2 вместо к=3
но для примера можно всегда набирать запятую в конце - "1,2,3,"
 
Другие блоки тоже можно переделать из-за Ansistring...
 
Удачи.

Всего записей: 2735 | Зарегистр. 16-10-2003 | Отправлено: 20:41 04-11-2007
65daysofstatic

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Garrett
 
спасибо, этот пункт исправили, но все-таки не изза этого глюк, там ошибка выскакивает раньше, чем происходит обращение к функции Button1Click. если трессировать, то сразу после нажатия выскакиевает эта ошибка, а потом уже генерируется исклбчение, там же стоит try-catch - если что-то после 'try{' и до '}' не получается сделать, то происходит то, что идет после 'catch(соответствующая ошибка) {' и до '}', в данном случае для любой ошибки выполняется catch(...)

Всего записей: 6 | Зарегистр. 01-11-2007 | Отправлено: 15:24 05-11-2007
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
65daysofstatic
Я сделал пример всавил твой код, и первой исключение появляется там где я сказал.
У бедиться очень просто. Перепиши свой код так
 for (i = 0; i < l; i++) {
   if ((text[i] == ',') || (text [i] == '.')) {
        k++;
   }
}  
и запусти в отладчике. Исключение выйдет при попытке выполнения строки
 if ((text[i] == ',') || (text [i] == '.')) {
а до неё компилятор дойдет нормально
 
PS. Советую вместо всяких массивов(простых и динамических) использовать вектора, списки, ассоциативные массивы, очереди.

Всего записей: 2735 | Зарегистр. 16-10-2003 | Отправлено: 16:13 05-11-2007
diaz85

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
добрый день, у меня такой вопрос:
как сделать так, чтобы перевод строки в поле Memo отображался корректно?
Т.е. есть текстовый файлик, куда после строки я добавляю например putc (s, fp), s- это char s='\n'; а когда пытаюсь вывести содержимое этого файла в Memo например вот так
Memo1->Lines->Add(str), где str - это строка которая предварительно считана из текстового файла, то в конце каждой строки печатается какая то закорючка, хотя перевод и происходит. Помогите советом плз

Всего записей: 39 | Зарегистр. 05-11-2007 | Отправлено: 17:55 05-11-2007
65daysofstatic

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
этот косяк исправлен, на него, сосбстно никто и не ругался, ошибка все равно та же самая выскакиевает при таком раскладе вещей:

Код:
/* while (i <= l)
 { while ((text[i+t] != ',') || (text[i+t] != '.'))  t++;
*/  
pMas[p] = text.SubString(i, i+t).ToInt();
/*  p++; i+=t; t = 0;
 }  */

на строчку:
pMas[p] = text.SubString(i, i+t).ToInt();
 
 
зы для векторов и списков нужно писать структуру, а синтаксис ее я, если честно, не помню, но за совет спасибо, а ассоциативные массивы и очереди я еще не знаю (
 
Добавлено:
diaz85
 
кажется там есть свойство text
попробуйте:
Memo1->Lines->Text = Memo1->Lines->Text + str;

Всего записей: 6 | Зарегистр. 01-11-2007 | Отправлено: 18:57 05-11-2007
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
65daysofstatic
ну так i опять с нуля начинается...

Всего записей: 2735 | Зарегистр. 16-10-2003 | Отправлено: 21:21 05-11-2007
65daysofstatic

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Garrett
 
нет, прямо перед этой строчкой было приравнивание i к нулю. фишка была в том, что условия нарасщивания t были заданы неверно, так получалось, что либо (text[i+t] != ','), либо (text[i+t] != '.') всегда верно.
потом:
pMas[p] = text.SubString(i, i+t).ToInt();  - тут неправильно фунция подстроки использована, вместо i+t надо писать t, вот и происходит запрос непонятно какого куска памяти.
 
прога почти заработала, осталось разобраться со значением, это вроде не сложно, у меня должно полчиться 0=Ъ
 
спасиба за помощь!

Всего записей: 6 | Зарегистр. 01-11-2007 | Отправлено: 23:09 05-11-2007
diaz85

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
65daysofstatic  
спасибо, заработало
 
 
вот еще вопрос
нужно определить есть ли вхождение одной строки в другую, если есть то вывести на экран. Идея в том чтобы сначала привести эти стороки к верхнему регистру. Приведенный ниже код работает только для латинских символов, если строки содержат русскоязычные символы, то не работает. в чем может быть дело? может какие-нибудь функции посоветуете? спасибо.
 
 
if (strstr(UpperCase((AnsiString)str).c_str(), UpperCase(p->Text).c_str())!=NULL)
                m->Lines->Text=m->Lines->Text+str;

Всего записей: 39 | Зарегистр. 05-11-2007 | Отправлено: 23:11 05-11-2007
Tantos



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
diaz85, AnsiUpperCase тебе в помощь!


----------
Чем больше узнаю людей, тем больше люблю компьютеры.

Всего записей: 1038 | Зарегистр. 31-05-2005 | Отправлено: 09:06 06-11-2007
diaz85

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tantos
Спасибо, помогло

Всего записей: 39 | Зарегистр. 05-11-2007 | Отправлено: 10:44 06-11-2007
taraslis

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Люди, такой вопрос: можно ли просто перекинуть библиотеку omp.h (параллельное программирование) из Visual Studio  в Builder. И работать с ней как ни в чём не бывало? А то очень надо, а разбираться с VS не хочется.

Всего записей: 3 | Зарегистр. 18-12-2006 | Отправлено: 12:22 13-11-2007
Afrikoff2

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
C++Builer 2007 посоветуйте какой нибудь expert типа, VisualAssist X for VS.
(Особенно интересует - convert dot to -> опция).

Всего записей: 152 | Зарегистр. 09-08-2002 | Отправлено: 20:49 13-11-2007
diaz85

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый вечер.
Интересует следущий вопрос
при получении информации ф-ей recv в Memo выводятся только первые четыре символа отправлееной строки + WinSock 2.0. Т.е. отправляем допустим asdfg получаем asdfWinSock 2.0. Если оправлять < четырех символов, то нормально. В чем может быть причина.
И еще следом, как сокет в асинхронный режим перевести?

Всего записей: 39 | Зарегистр. 05-11-2007 | Отправлено: 20:45 18-11-2007
Garrett

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
c++ помещает литералы до 4 байтов в регистры(передает как есть).
Для длинных строк надо выделять память и передавать(обрабатывать) указатель.

Всего записей: 2735 | Зарегистр. 16-10-2003 | Отправлено: 21:20 18-11-2007
Andrey32

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Недавно стал изучать C++(неделю), использую Borland 2006. Написал программку строк в десять (решение уравненений n-й степени). Все работает. Но размер консольного екзешника-287 кБайт. Это нормльно, или я неправильно скомпилировал и там чего-то лишнее?

Всего записей: 245 | Зарегистр. 12-12-2006 | Отправлено: 22:00 22-12-2007 | Исправлено: Andrey32, 22:01 22-12-2007
afiget



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
или я неправильно скомпилировал и там чего-то лишнее?

Не нашел в твоем сообщении прикрепленного адреса телепатического канала.
 
Исходник нужен плюс твои настройки среды.

Всего записей: 545 | Зарегистр. 31-12-2005 | Отправлено: 19:56 23-12-2007
Andrey32

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Не нашел в твоем сообщении прикрепленного адреса телепатического канала.
 
Исходник нужен плюс твои настройки среды.
 

Не думаю, что нужен исходник.
"Hello world!" имеет екзешник такого же размера. Подключается только <iostream>.
А вот настройки среды :
 Project->Options->Linker -снята галка "Use dynamic RTL"
 Project->Options->Packages - снята галка "Build with runtime packages"

Всего записей: 245 | Зарегистр. 12-12-2006 | Отправлено: 22:52 23-12-2007 | Исправлено: Andrey32, 22:53 23-12-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » FAQ по Borland C++ Builder


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru