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

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


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

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

Выпуск № 881
от 19.10.2007, 08:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 484, Экспертов: 63
В номере:Вопросов: 7, Ответов: 13


Вопрос № 105321: Здраствуйте ! Подскажите как скопировать подстроку из строки ! тоисть есть например строка "Хороший день" то например как из строки скопировать стово хороший ? Заранее благодарен ! ...
Вопрос № 105325: Начал изучать си.По книге Писал простейший пример используя MCF AppWizartюВ общем беда случилась при объявлении класса. void CSingleDIView::OnRButtonDown(UINT nFlags, CPoint point) { CInfo info; CEdit&edit=GetEditCtrl(); inf...
Вопрос № 105326: Здраствуйте! При програмировании в линуксе, gcc использовал, подключил библиотеку math - математика, чтобы использовать sqrt, а gcc говорит нет такого(sqrt), почему? ...
Вопрос № 105327: Срочно помогите написать программу на С++ для borland 3.1 Даны действительные числа X1,Y1, X2,Y2,..., X10,Y10. Найти периметр десятиугольника, вершины которого имеют соответственно координаты (X1,Y1), (X2,Y2),..., (X10,Y10). Определить проц...
Вопрос № 105331: ПОЖАШЛУСТА ПОМОГИТЕ НАПИСАТЬ ПРОГУ НА С++ ДЛЯ BORLAND 3.1 Задана строка символов. Требуется преобразовать последовательность следующим образом. Удалить группы пробелов, которыми начинается и заканчивается последовательность, а также заменить...
Вопрос № 105365: Как в С++ Builder выделить фоном или шрифтом ячейку в StringGrid? При применении функции события OnDraw() (кажется так называется), ячейка закрашивается, но текст пропадает. Спасибо....
Вопрос № 105372: У меня вопрос по работе с пораллельным портом, в частности меня интересует COM1. Мне необходимо считывать данныы (байты) и рисовать график(например полученных быйтов). Но надо чтобы график как можно быстрее реагировал на изменение принимаемых бай...

Вопрос № 105.321
Здраствуйте !
Подскажите как скопировать подстроку из строки !
тоисть есть например строка "Хороший день" то например как из строки скопировать стово хороший ?
Заранее благодарен !
Отправлен: 13.10.2007, 16:24
Вопрос задал: VaNuk (статус: 3-ий класс)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: CruelHity
Здравствуйте, VaNuk!
Функции strncpy(char *,const char*,int)- Это копировать а добавить strncatstrcpy(char *,const char*,int)
Параметры
1- буфер в который копируем или вставляем
2-буфер из которого копируеться
3-количество копируемых символов
Смотрите пример

Приложение:

Ответ отправил: CruelHity (статус: 1-ый класс)
Ответ отправлен: 13.10.2007, 16:31
Оценка за ответ: 5
Комментарий оценки:
Спасибо

Отвечает: Попов А.С.
Здравствуйте, VaNuk!
В string.h есть функция char* strtok(char* a,char* b) которая разбивает строку на подстроки разделенные любым символом из b. Решение задачи в приложении

Приложение:

Ответ отправил: Попов А.С. (статус: 2-ой класс)
Ответ отправлен: 13.10.2007, 16:58
Оценка за ответ: 5
Комментарий оценки:
Спасибо

Отвечает: Гальцов Андрей Михаилович
Здравствуйте, VaNuk!

Держите программу, которая ищет подстроку в строке (ф-ция substr) и зяменяет её новой подстракой (ф-ция replace)...

Приложение:

---------
Да здравтствует С++!!!...;)

Ответ отправил: Гальцов Андрей Михаилович (статус: 6-ой класс)
Ответ отправлен: 13.10.2007, 21:54
Оценка за ответ: 5
Комментарий оценки:
спасибо

Отвечает: kool
Здравствуйте, VaNuk!
Примерно так:

char *lpString = "Хороший день";
char *tmp,dest[0x100];
tmp=strstr(lpString,"Хороший");
memcpy(dest,tmp,strlen("Хороший"));
dest[strlen("Хороший")]=0;

Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 14.10.2007, 00:44
Оценка за ответ: 5
Комментарий оценки:
Спасибо!


Вопрос № 105.325
Начал изучать си.По книге Писал простейший пример используя MCF AppWizartюВ общем беда случилась при объявлении класса.

void CSingleDIView::OnRButtonDown(UINT nFlags, CPoint point)
{
CInfo info;
CEdit&edit=GetEditCtrl();
info.GetInfo(edit);
info.WriteInfo();
info.DoModal();

CEditView::OnRButtonDown(nFlags, point);
}

Запускаю и выводятся 4 ошибки:

error C2065: 'CInfo' : undeclared identifier
error C2146: syntax error : missing ';' before identifier 'info'
error C2065: 'info' : undeclared identifier
error C2228: left of '.DoModal' must have class/struct/union type

почему не работает,ничего не могу понять.Вроде все правильно писал,как в книге.
может кто сталкивался с таким.Помогите!!!!
Пишу программу на Visual C++ 6 , у меня установлена ОС Windows XP. Может с этим что то связано?Хотя...

Также делал примеры(уроки) с сайта progs.biz
все работало,пока не дошло дело до классов -урок 18 (http://progs.biz/vc/mfc/lessons/018.aspx)
и все,перестало работать. опять те же ошибки
помогите,срочно надо с этим разобраться!!!!!!
Отправлен: 13.10.2007, 17:20
Вопрос задал: Чижик Михаил Владимирович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: CruelHity
Здравствуйте, Чижик Михаил Владимирович!
Урок не смотрел времени нет! а ошибка у вас такая что не определен класс CInfo
Он скорее всего опрелен в другом исходнике, подключите его!
Это делаеться так находите где описан CInfo(вам важно имя файла например Info.h) и прописываете в файле где он будет фыполняться(например SingleDIView.срр)
#include "info.h"
Ответ отправил: CruelHity (статус: 1-ый класс)
Ответ отправлен: 13.10.2007, 22:22
Оценка за ответ: 5
Комментарий оценки:
Спасибо за подсказку.Так и было.Как вставил эту строчку.Так все и заработало!!!Но тот пример(урок) все равно не работает http://progs.biz/vc/mfc/lessons/018.aspx там видимо что то другое

Отвечает: Maxim V.G.
Здравствуйте, Чижик Михаил Владимирович!
Посмотрел предложенный урок. Там предлагают немного другой код добавить :(. А указанного Вами кода надо самому создать класс CInfo (в МФЦ не видел такого базового класса), а потом его использовать.
---------
Жить вредно - от неё умирают
Ответ отправил: Maxim V.G. (статус: 5-ый класс)
Ответ отправлен: 14.10.2007, 11:28


Вопрос № 105.326
Здраствуйте!
При програмировании в линуксе, gcc использовал, подключил библиотеку math - математика, чтобы использовать sqrt, а gcc говорит нет такого(sqrt), почему?

Приложение:

Отправлен: 13.10.2007, 17:26
Вопрос задал: KuchumHan (статус: Студент)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Dr_Andrew
Здравствуйте, KuchumHan!
Ответ очевиден из приведённого Вами кода:
float r,s=0.0;
/* ... *
s=sqrt(s);

Воспользуемся man math.h
Что видим? Прототипы функций:
double sqrt(double);
float sqrtf(float);
long double sqrtl(long double);

Т.е. в Вашем случае имеет место быть несоответствие типов принимаемых функцией параметров. А поскольку компилятор различает функции с одинаковыми именами по их параметрам, то, разумеется, он сообщает, что такой функции нет.
Решение: воспользуйтесь функцией sqrtf либо проведите прямое приведение типа параметра: s=sqrt((double)s);
Ответ отправил: Dr_Andrew (статус: 1-ый класс)
Ответ отправлен: 15.10.2007, 08:35
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ, проверю, а потом отвечу Вам.


Вопрос № 105.327
Срочно помогите написать программу на С++ для borland 3.1

Даны действительные числа X1,Y1, X2,Y2,..., X10,Y10. Найти периметр десятиугольника, вершины которого имеют соответственно координаты (X1,Y1), (X2,Y2),..., (X10,Y10). Определить процедуру вычисления расстояния между точками, заданными своими координатами.

Отправлен: 13.10.2007, 17:31
Вопрос задал: Предеин Денис Дмитроевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Гальцов Андрей Михаилович
Здравствуйте, Предеин Денис Дмитроевич!

К преподавателю Вы подойдёте во все оружия!...Держите!...

Приложение:

---------
Да здравтствует С++!!!...;)

Ответ отправил: Гальцов Андрей Михаилович (статус: 6-ой класс)
Ответ отправлен: 13.10.2007, 21:40
Оценка за ответ: 5
Комментарий оценки:
Молодец!!! Работает отлично!!! правильно!!!


Вопрос № 105.331
ПОЖАШЛУСТА ПОМОГИТЕ НАПИСАТЬ ПРОГУ НА С++ ДЛЯ BORLAND 3.1

Задана строка символов. Требуется преобразовать последовательность следующим образом. Удалить группы пробелов, которыми начинается и заканчивается последовательность, а также заменить каждую внутреннюю группу пробелов одним пробелом.

СПАСИБО!!!
Отправлен: 13.10.2007, 17:43
Вопрос задал: Предеин Денис Дмитроевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Mihail Yarlykov
Здравствуйте, Предеин Денис Дмитроевич!
В приложении смотрите программу

Приложение:

---------
Нет ничего невозможного!

Ответ отправил: Mihail Yarlykov (статус: 2-ой класс)
Ответ отправлен: 13.10.2007, 19:28
Оценка за ответ: 5
Комментарий оценки:
РАБОТАЕТ!!!


Вопрос № 105.365
Как в С++ Builder выделить фоном или шрифтом ячейку в StringGrid? При применении функции события OnDraw() (кажется так называется), ячейка закрашивается, но текст пропадает. Спасибо.
Отправлен: 13.10.2007, 23:32
Вопрос задал: Афтайкин Владимир Максимович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Гальцов Андрей Михаилович
Здравствуйте, Афтайкин Владимир Максимович!

Возможно стоит попробовать сначала закрасить ячейку цветом и потом уже записывать в нё текст...В полне логично, что при заливке пропадает текст...т.к. закрашивается всё её содержимое...
---------
Да здравтствует С++!!!...;)
Ответ отправил: Гальцов Андрей Михаилович (статус: 6-ой класс)
Ответ отправлен: 13.10.2007, 23:37
Оценка за ответ: 3
Комментарий оценки:
Не получается.
void __fastcall TForm2::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
TRect &Rect, TGridDrawState State)
{
if(color[ARow]) //массив bool
{
StringGrid1->Canvas->Brush->Color=clRed;
StringGrid1->Canvas->FillRect(Rect);
SetBkColor(StringGrid1->Handle,clBlack);
TextOut(StringGrid1->Handle,Rect.Left+1,Rect.Top+1,
StringGrid1->Cells[ACol][ARow].c_str(),
StringGrid1->Cells[ACol][ARow].Length()
);
//Ячейки заполняются в другой функции
//Ячейки окрашиваются, но текст не записывается (Borland Developer Studio)
}
}

Отвечает: Новак Александр Васильевич
Здравствуйте, Афтайкин Владимир Максимович!
Вот какой выход я нашёл, к сожалению у меня нет BC++ и я накатал примерчик на DELPHI я думаю больших проблем с пониманием кода не возникнет, т.к исползуются API-ф—ций и вы его увидете если модераторы не отфильтруют, мол нетот язык(-% просто хотелось помоч человеку %-)

Приложение:

---------
ПОЛЬЗУЙТЕСЯ НАШИМИ ПРОГРАММАМИ, ПОДДЕРЖИТЕ РОССИЙСКИХ ПРОГРАММИСТОВ ИНАЧЕ МЫ ВЫМРЕМ КАК МАМОНТЫ. ;-)

Ответ отправил: Новак Александр Васильевич (статус: 2-ой класс)
Ответ отправлен: 14.10.2007, 16:14
Оценка за ответ: 4
Комментарий оценки:
Не получается.
void __fastcall TForm2::StringGrid1DrawCell(TObject *Sender, int ACol, int ARow,
TRect &Rect, TGridDrawState State)
{
if(color[ARow]) //массив bool
{
StringGrid1->Canvas->Brush->Color=clRed;
StringGrid1->Canvas->FillRect(Rect);
SetBkColor(StringGrid1->Handle,clBlack);
TextOut(StringGrid1->Handle,Rect.Left+1,Rect.Top+1,
StringGrid1->Cells[ACol][ARow].c_str(),
StringGrid1->Cells[ACol][ARow].Length()
);
//Ячейки заполняются в другой функции
//Ячейки окрашиваются, но текст не записывается (Borland Developer Studio)
}
}


Вопрос № 105.372
У меня вопрос по работе с пораллельным портом, в частности меня интересует COM1.
Мне необходимо считывать данныы (байты) и рисовать график(например полученных быйтов). Но надо чтобы график как можно быстрее реагировал на изменение принимаемых байтов.
Я пользуюсь MVS2005, языком С++. Есть встроенный класс SerialPort
Даже есть функция(событие) на принятие байта
DataReceived(System::Object^ sender, System::IO::Ports::SerialDataReceivedEventArgs^ e)
все бы хорошо, но у меня скорость порта 115200 (- необходимая скорость, в свое задаче уменьшить её я не могу). Данные не успевают приниматься, из-за этого идет наполнее буффера, а в следствии задержка, которая быстро растет.
Подскажите плиз как быть.
Есть вариант использования MSCOMM, но не могу разобраться как с ним работать, все описания для VB. Может подскажете ссылку на описание в С++? Спасибо!

Отправлен: 14.10.2007, 00:46
Вопрос задал: Sat (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Aristos
Здравствуйте, Sat!

Если данные не успевают обрабатываться, то попробуйте имитировать меньшую скорость путем обработки части значений, если это приемлимо. Например, обрабатывайте каждое 2 или 3 байт. Так же можно накапливать байты, и обрабатывать (рисовать) сразу несколько. Таким образом можно будет избежать переполнения буфера.

Этот способ сработает если данные будут успевать приниматься и накапливаться. А медленной операцией является обработка, например, перерисовка графика.
---------
нет ничего невозможного
Ответ отправил: Aristos (статус: 8-ой класс)
Ответ отправлен: 14.10.2007, 01:13
Оценка за ответ: 4

Отвечает: Maxim V.G.
Здравствуйте, Sat!
Для обработки плученных данных в реальном времени надо использовать ОС реального времени (например QNX). Можно попрбывать на embeded ОС, но не пробовал.
Что касается windows то для увелечения скорости можно предпринять следующие действия:
Реализовал указанную задачу, как минимум, 2 потоками, не включая потоков главного окна - один рисует график, второй принимает данные. Причём тело графика нарисовать один раз, а потом дорисовывать кривую. И данные лучше получать не по 1 байту, а пакетом по несколько байт потом парсить строку и разбивать на одленые байты.
Но обязательно надо организовывать задержку после принятия пакета данных напрмер в 10 ms (подбирать время на месте). Без такой задержки процессор обычно виснет и данные теряются. Ещё для более реального отображения можно посчитать время на перерисовку (дорисовку) графика и отложить отрисовку в начале работы программы на посчитанное время. Т.е первые 5 сек график чистый - накопление данных. А потом через буфер начинают поступать данные и начинается отрисовка. На скорость обработки данных накладывается много параметров: загруженность ОС, выполнение других задач ОС и др. процессы связанные с работой ОС на которые повлиять не получиться.
Удачи в работе!!!
---------
Жить вредно - от неё умирают
Ответ отправил: Maxim V.G. (статус: 5-ый класс)
Ответ отправлен: 14.10.2007, 12:04
Оценка за ответ: 4


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.61.1 от 16.10.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное