Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Парочка вопросов


Автор: Aannttoonn 7.12.2005, 19:30
Парочка вопросов. Заранее спасибо.
1. Моно ли в поле Memo обращаться к отдельной букве? Если нет то как считать код с файла,
например txt-ишного, и, взависимости от того что там, что-то делать?
2. Как в StrinGrid дать возможность регулировать её размер пользователю.
Возможно лучше открыть таблицу в новом окне, но как?

Автор: _hunter 7.12.2005, 19:35
1: Memo->Lines->Text[index]
2: поставь Align в alClient

Автор: Aannttoonn 7.12.2005, 20:21
1.Написал вот такую штуку для заполнения таблицы, где \n конец строки,а }- конец столбца
и выдаёт при заполнении ошибку, указывая на dstring.h. Я думаю ошибка где-то здесь
int i=0,j=0; char q[100];
for(i=0;i<kol_str;i++)
{
while((q[a]!='\n') || (j<kol_stol))
{
while(q[a]!='}') q[a]=Memo1->Lines->Text[a++];
StringGrid1->Cells[i][j]=q;
j++; a++;
}
}
2. Спасибо, просто у меня ни книг, ни чо нету по Билдеру, приходится тыкать куда попало. Одного знакомого уже достал спрашивать вот и решил в инет заглянуть.

Автор: _hunter 7.12.2005, 20:26
не знаю что такое a ( объявления нет ) и чему оно равно, но скорее всего равно оно 0 ( в начальный момент ) а индексация у AnsiString идет с 1

Автор: Aannttoonn 7.12.2005, 20:42
Понятно. Теперь нашёл ещё одну ошибку, но думаю справлюсь. smile smile smile

Автор: sexton 8.12.2005, 09:03
Aannttoonn, в качестве спасательного круга могу дать книжку Архангельского (или если есть возможность скачай сам).

Автор: Aannttoonn 8.12.2005, 16:49
Возможности, всмысле денег, нету. Но я очень хочу. Слышал что это самая толковая книга по Борланду. Можешь кинуть на tupici@rambler.ru пожалуйста если есть электронный вариант?(или где найти)

Автор: Aannttoonn 8.12.2005, 17:10
Большое спасибо. smile Качаю. smile Потом буду читать. smile Круто! Ещё раз спасибо.

Автор: Aannttoonn 9.12.2005, 11:39
Смотрите пишу простую программу:

void __fastcall TForm1::Button1Click(TObject *Sender)
{

int o=1;
OpenDialog1->Execute();
Memo1->Lines->LoadFromFile(OpenDialog1->FileName);
do Memo2->Lines->Text[o]=Memo1->Lines->Text[o++];
while(Memo1->Lines->Text[o]!='}');
}

там должен загрузится файл с текстом оканчивающийся тогда когда найдётся }, но прога выдаёт ошибку. Скоко уже бьюсь, что за ерунда, Похоже я в этом деле нуб последний, если сегодня не найду ошибку, перейду на Делфи.

sexton-с моей почты, блин, не качаются учебники, пишет докачка не поддерживается. Одно расстройство с этим Билдером.

Автор: _hunter 9.12.2005, 11:51
а не проще ли найти первое вхождение:
int pos = Memo1->Lines->Text.Pos('}');
а потом добавить этот текст:
Memo2->Lines->Add(Memo1->Lines->Text.SubStr(1, pos));

Автор: sexton 9.12.2005, 12:12
Найди книжку в инете и скачай, ссылки на форуме есть.

Автор: Aannttoonn 12.12.2005, 21:41
Жуткий глюк или чё. Пишу
float a=0.0001;
Edit1->Text=a;
Выводит в Edit1:
9,99999974737875E-5
Объясните кто знает.

Автор: sexton 13.12.2005, 11:49
FloatToStr(a) тебе в руки

Автор: Aannttoonn 13.12.2005, 13:02
Пробовал. Не катит.
Добавлено @ 13:07
hunter-
Memo2->Lines->Add(Memo1->Lines->Text.SubStr(1, pos));
означает типа вывести текст до первого нахождения '}'
или зачем тогда единица. И как сделать вывод текста от первого до второго вхождения. Спасибо!

Автор: _hunter 13.12.2005, 14:19
Цитата
означает типа вывести текст до первого нахождения '}'

да.
Цитата
И как сделать вывод текста от первого до второго вхождения.

предварительно удалить текст до первого вхождения

Автор: Aannttoonn 13.12.2005, 14:21
Весело. Попробую.

Автор: Aannttoonn 13.12.2005, 19:37
Помоему функции StrToFlot и FloatToStr сдецл глючные.

Автор: Neitron 14.12.2005, 17:52
А как ты хотел? smile

Автор: Aannttoonn 15.12.2005, 10:03
Я хотел очень точно считать,а они, понимаешь ли, правильно не работают когда числа очень маленькие. Вот не знаю теперь как переводить из Str во Float.

Автор: Vyacheslav 15.12.2005, 10:17
Цитата(Aannttoonn @ 13.12.2005, 19:37)
Помоему функции StrToFlot и FloatToStr сдецл глючные.

Господа. А что Вы хотели? Чем простите, отличаются два числа?
0.0001 и 9,99999974737875E-5. Вы машине хотя бы то скажите как вам нужно выводить
Код

float a=0.0001;
Edit1->Text=Format("%.4f", ARRAYOFCONST((a)) );
Edit2->Text=AnsiString::FloatToStrF( a, ffFixed, 10, 4)



Автор: Aannttoonn 15.12.2005, 10:52
А как считать a с Edit1

Автор: Vyacheslav 15.12.2005, 11:53
Код

float a = Edit1->Text.ToDouble();


Автор: Aannttoonn 16.12.2005, 22:09
Vyacheslav не получается!
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   float a = Edit1->Text.ToDouble();
   Edit1->Text=Format("%.4f", ARRAYOFCONST((a)) );
   if(a==0.001) Edit2->Text="Õîðîøî";
    else Edit2->Text="Ìàìà";
   a=a++;
   Edit3->Text=AnsiString::FloatToStrF( a, ffFixed, 10, 10);
}

Автор: Vyacheslav 19.12.2005, 13:49
Кто Вас учил так сравнивать float? Вы можете только проверить, что два числа равны друг другу с определенной прогрешностью. Это же не целые числа
Хотя бы так, что ли
Код

if(  SameValue(a, float(0.001)  ) 

Это азы, которые надо знать при решении в численном виде. А так же, что если Вы ввели число 0.001, то оно в компьютере будет храниться только только, число равное ему с определенной погрешностью

ВниманиеПодправил выражение сравнения float. В Builder 6 появились специальные функции для таких целей

Автор: Aannttoonn 19.12.2005, 21:29
Но мне ведь изестно это число точно. Как мне следить за тем что комп его также точно понимает. Просто я делаю лабораторные и мне нужны только точные значения или ну с погрешностью там до 0,000000001.

Автор: Vyacheslav 20.12.2005, 09:05
Вы не доверяете компьютеру? Как то я работал со сотрудницей, которая в свои обязанности включила проверку правильности расчета на компьютере smile
А если Вам нужна большая точность, то Вы должны то надо тспользовать соответствующие приемы. Например вместо float, использовать double( long double) . Или даже скорее всего не long double, а BCD ( TBcd ).

Автор: Aannttoonn 23.12.2005, 12:04
Как я понял чтобы в Memo обращаться к какой-нибудь строке надо либо заранее задать кол-во строк в Memo. Либо после заполнения одной строки организовывать переход на другую - как это сделать (когда пишу ”\n” остаются какие-то чёрые полоски).

Автор: _hunter 23.12.2005, 12:45
можно и так Lines->Add()

Автор: abrekos 23.12.2005, 13:56
Цитата(Aannttoonn @ 12.12.2005, 21:41)
Жуткий глюк или чё. Пишу
float a=0.0001;
Edit1->Text=a;
Выводит в Edit1:
9,99999974737875E-5
Объясните кто знает.

Используй в таких случаях double smile

Автор: Aannttoonn 24.12.2005, 22:24
Как в Memo удалять символы до какого-нибудь знака?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)