Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 599
от 01.12.2006, 23:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 428, Экспертов: 48
В номере:Вопросов: 4, Ответов: 8


Вопрос № 64290: Здравствуйте, уважаемые эксперты. У меня вопрос по C++ Builder 6: Как в среде C++ Builder 6 можно работать с фалами, какие есть функции (частоиспользуемые)? Припустим у меня есть переменная в которую уже занесен путь к файлу. Как его можно открыть, з...
Вопрос № 64292: Еще раз здравствуйте, уважаемые эксперты. Опять вопрос по C++ Builder 6. У меня есть объект типа TStringGrid (таблица) с названием sg_1. У него есть свойство "Options" и у этого свойтва есть подсвойства, как мне их поменять в процессе выпол...
Вопрос № 64315: Здравствуйте уважаемые эксперты. У меня возникли проблемки (в среде Borland C++ Builder 6.0), а именно: 1. Немогу создать обьект в виде массива, а именно, "ListBox" надо обьявить массивом, желательно динамическим, так как создать и...
Вопрос № 64328: Я начинающий(совсем зелёный) начал изучать С++. Купил диск Borland C++ 6 Builder и на Application написал программу void __fastcall TForm1::Button1Click(TObject *Sender) { int k; k = random(6) + 1; Label1->Caption...

Вопрос № 64.290
Здравствуйте, уважаемые эксперты. У меня вопрос по C++ Builder 6: Как в среде C++ Builder 6 можно работать с фалами, какие есть функции (частоиспользуемые)? Припустим у меня есть переменная в которую уже занесен путь к файлу. Как его можно открыть, записать содержимое файла в переменную, закрыть файл. Припустим у меня файл с таким путем "C:1.txt" в него занесен массив целых чисел через пробел: "1 2 3 4 5 6 7 8", мне нужно занести эти числа в массив A.

Заранее спасибо.
Отправлен: 26.11.2006, 16:50
Вопрос задал: neWMan (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: John Paramol
Здравствуйте, neWMan!

В VCL есть удобные функции FileCreate,FileOpen,FileSeek,FileRead,FileWrite,FileClose.
Все они используют стандартные ф-ии WinAPI, типа CreateFile,ReadFile и т.д.
Но использование ф-ий WinAPI для рядовых нужд типа вашей затруднено, поэтому лучше VCL.
Вто пример из которого вы можете что-нибудь взять.
Будут вопросы - пишите по внутренней почте.
Удачи!

Приложение:

---------
1=2, at values 1 large enough

Ответ отправил: John Paramol (статус: 4-ый класс)
Ответ отправлен: 26.11.2006, 19:39
Оценка за ответ: 5
Комментарий оценки:
Спасибо.

Отвечает: V1s0r
Здравствуйте, neWMan!

Не могу сказать, какие есть функции в Borland C++, но язык С++ не привязан к среде программирования, поэтому покажу, как это сделать с помощью самого языка и стандартной библиотеки (пример должен работать везде), надеюсь, что это поможет.

#include <iostream>
#include <fstream>
#include <iterator>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
vector<int> A;
const char* fileName = "c:\1.txt";
ifstream fin(fileName);
if (!fin) return 1;

// копируем все числа из файла в массив A
copy(istream_iterator<int>(fin),
istream_iterator<int>(),
back_inserter(A));

// убедимся, что числа записались в A
copy(A.begin(), A.end(),
ostream_iterator<int>(cout, " "));

return 0;
}
Ответ отправил: V1s0r (статус: 1-ый класс)
Ответ отправлен: 27.11.2006, 11:12


Вопрос № 64.292
Еще раз здравствуйте, уважаемые эксперты. Опять вопрос по C++ Builder 6. У меня есть объект типа TStringGrid (таблица) с названием sg_1. У него есть свойство "Options" и у этого свойтва есть подсвойства, как мне их поменять в процессе выполнения программы (т.е. в коде, а не визуально)? Припустим мне нужно поменять значение goEditing.

Заранее спасибо.
Отправлен: 26.11.2006, 16:55
Вопрос задал: neWMan (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: John Paramol
Здравствуйте, neWMan!
sg_1->Options является множеством (Set) зачений перечисляемого (enum) типа TGridOption.
В классе Set определены операторы << и >>, а также функция Contains.
Чтобы добавить опцию делаем так: sg_1->Options << goEditing;
Чтобы убрать: sg_1->Options >> goEditing;
А чтобы проверить наличие опции sg_1->Options.Contains(goEditing);
Удачи!
---------
1=2, at values 1 large enough
Ответ отправил: John Paramol (статус: 4-ый класс)
Ответ отправлен: 26.11.2006, 19:38
Оценка за ответ: 5
Комментарий оценки:
Спасибо за совет.


Вопрос № 64.315
Здравствуйте уважаемые эксперты. У меня возникли проблемки (в среде Borland C++ Builder 6.0), а именно:

1. Немогу создать обьект в виде массива, а именно, "ListBox" надо обьявить массивом, желательно динамическим, так как создать их прийдется под сотню, но активироватся (появлятся) они будут по очереди.

2. Имеем переменную,

String S="Hello word"

Неполучается подсчитать в ней количество определенных символов, и заменить их.
Отправлен: 26.11.2006, 21:12
Вопрос задал: Ustilkin Vladimir Vladimirovich (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: John Paramol
Здравствуйте, Ustilkin Vladimir Vladimirovich!
1.1
Можно использовать дин. массив указателей на объекты.
Плохо тем, что нельзя потом менять размер массива.
// количество листбоксов
int Total=100;
// создаем массив указателей TListBox* размерностью Total
TListBox **pListBoxes = new TListBox*[Total];
// под каждый указатель выделяем объект, привязанный к дескриптору окна
for(int i=0; i<Total; ++i) pListBoxes[i] = new TListBox(Handle);
// обращаться к каждому элементу массива можно так
pListBoxes[10]->Color = clWhite;
// после работы
// сначала удаляем каждый объект
for(int i=0; i<Total; ++i) delete pListBoxes[i];
// потом удаляем весь массив указателей на объекты
delete [] pListBoxes;
1.2
Можно использовать дин. список TList/TObjectList указателей на объекты.
Плохо тем, что не очень удобно обращаться к элементам списка.
Менять размер списка можно.
// создаем динамический список указателей на объекты TListBox
TObjectList *pListBoxes = new TObjectList;
// заполняем список указателями
for(int i=0; i<Total; ++i) pListBoxes->Add(new TListBox(Handle));
// обращаться к каждому элементу списка можно так
((TListBox*)(*pListBoxes)[10])->Color = clWhite;
// после работы
// сначала освобождаем все объекты
pListBoxes->Clear();
// потом удаляем весь список
delete pListBoxes;
1.3
Можно использовать динамический вектор STL, хранящий указатели.
Лучший вариант.
Нужно подключить #include <vector>
// создаем вектор (дин. массив) указателей на объекты TListBox
std::vector<TListBox*> pListBoxes;
// заполняем вектор
for(int i=0; i<Total; ++i) pListBoxes.push_back(new TListBox(Handle));
// обращаться к каждому элементу вектора можно так
pListBoxes[10]->Color = clWhite;
// после работы
// освобождаем память из под всех объектов
for(int i=0; i<pListBoxes.size(); ++i) delete pListBoxes[i];
// опустошаем вектор
pListBoxes.clear();

2.
Вот пример
String S="Hello world!";
int Len = S.Length();
char ChSource = 'o';
char ChDest = 'A';
int Sum = 0;
for(int i=1; i<=Len; ++i)
if(S[i]==ChSource)
{
S[i]=ChDest; ++Sum;
}
ShowMessage(S+" "+IntToStr(Sum)+" symbols replaced");

Удачи!
---------
1=2, at values 1 large enough
Ответ отправил: John Paramol (статус: 4-ый класс)
Ответ отправлен: 26.11.2006, 22:39


Вопрос № 64.328
Я начинающий(совсем зелёный) начал изучать С++.
Купил диск Borland C++ 6 Builder и на Application написал программу

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int k;
k = random(6) + 1;
Label1->Caption = IntToStr(k)
cpp23 int n;

cpp25 n = StrToInt(Edit1->Text);

if(k == n) Label1->Caption = "Вы угадали";
cpp28 else Label1=>Caption = "Вы не угадали";
}

Программа не компилирует и выдаёт следующие ошибки:

cpp23 Statement missing,
cpp25 Undefined symbol 'h'
chh28 Expression syntax.

и далее в других , где бы не встречались операторы (cin, cout) прога затыкается.
Помогите пожалуйста или посоветуйте что-нибуть.

Отправлен: 26.11.2006, 22:23
Вопрос задал: Lopzan (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Melamed
Здравствуйте, Lopzan!
22 строка не заканчивается точкой с запитой ;

28 строка должна быть вот такой:
else Label1->Caption = "Вы не угадали";

На счет 25 строки ничего сказать не могу. Возможно вы в файле вместо n набрали h. Но это только мое предположение.

Желаю успехов в освоении программирования
Ответ отправил: Melamed (статус: 8-ой класс)
Ответ отправлен: 26.11.2006, 22:43

Отвечает: V1s0r
1) cpp23 Statement missing
надо после Label1->Caption = IntToStr(k) поставить ;

2) эта ошибка пропадёт, после исправления предыдущей

3) разыменование указателя ->, а не =>, т.е.
else Label1->Caption = "Вы не угадали";

Практика - это, конечно, отлично, но и без теории никуда.
Почитай книгу по C++, благо на рынке выбор большой.
Как совсем начинающему, могу порекомендовать С за 21 день и С++ за 21 день.

В приложении исправленная программа.

Приложение:

Ответ отправил: V1s0r (статус: 1-ый класс)
Ответ отправлен: 27.11.2006, 10:24

Отвечает: Блок Иван/ Blin
Здравствуйте, Lopzan!
Попробуй мой вариант, но мне не совсем понятно, что значит в твоей программе строка cpp23 int n; Зачем тут cpp23(и вообще, что это такое?) ?

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int k;
k = random(6) + 1;
Label1->Caption = IntToStr(k);
int n;

n = StrToInt(Edit1->Text);

if(k == n) Label1->Caption = "Вы угадали";
else Label1->Caption = "Вы не угадали";
Ответ отправил: Блок Иван/ Blin (статус: 1-ый класс)
Ответ отправлен: 27.11.2006, 13:20

Отвечает: _beast
Здравствуйте, Lopzan!

Label1->Caption = IntToStr(k);
cpp23 int n;

в первой строчке, в конце ';'

cpp28 else Label1=>Caption = "Вы не угадали";
^^^
else Label->Caption
Ответ отправил: _beast (статус: 3-ий класс)
Ответ отправлен: 28.11.2006, 07:39


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.37 от 04.10.2006
Яндекс Rambler's Top100

В избранное