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

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


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

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

Выпуск № 875
от 13.10.2007, 05:35

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


Вопрос № 104565: Здарствуйте у меня два вопроса(MFC): 1) как определить где находиться указатель мыши в клиентской области (я находил так через GetCursorPos потом вычитал это расположения окна и получалось маленькое смещение. Думаю это что я не учитывал рамку...
Вопрос № 104593: Доброго времени суток уважаемые эксперты, нужно написать рекурсивную функцию, которая переводит число из десятичной системы счисления в троичную. Спасибо....
Вопрос № 104602: Уважаемые эксперты. Мне нужно построить линию алгоритмом Брезенхема. Я нашел исходник, но не знаю в какой среде с++ и как его скомпилировать. Помогите пожалуйста. Код в приложении....

Вопрос № 104.565
Здарствуйте у меня два вопроса(MFC):
1) как определить где находиться указатель мыши в клиентской области
(я находил так через GetCursorPos потом вычитал это расположения окна и получалось маленькое смещение. Думаю это что я не учитывал рамку окна)
2) По поводу CListCtrl. что мыша была нажата на определеном SubItem или просто item??(стиль как поняли LVS_REPORT)
Отправлен: 07.10.2007, 14:50
Вопрос задал: CruelHity (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: mega
Здравствуйте, CruelHity!

POINT cursor;
GetCursorPos(&cursor);
ScreenToClient(Handle,&cursor);

после таких манипуляций, cursor будет указывать в координатах клиентской области окна Handle
Ответ отправил: mega (статус: 3-ий класс)
Ответ отправлен: 07.10.2007, 14:56
Оценка за ответ: 5
Комментарий оценки:
Отлично,спасибо!! работает!!


Вопрос № 104.593
Доброго времени суток уважаемые эксперты, нужно написать рекурсивную функцию, которая переводит число из десятичной системы счисления в троичную. Спасибо.
Отправлен: 07.10.2007, 19:21
Вопрос задал: Виктор Малейчик (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Зелик Колабухин
Здравствуйте, Виктор Малейчик!
Из задания не понятно, что в каком виде должно входить число в функцию и в каком - выходить. У меня число в троичной системе пишется в десятичное число, так что как с числом с ним работать нельзя, но посмотреть, как выглядит заданное десятичное число в троичной системе счисления можно.
Думаю не сложно эту процедурку подправить согласно уточненному заданию.
Главное знать, что при переводе берутся остатки деления на 3 и выстраиваются справа на лево.

Приложение:

Ответ отправил: Зелик Колабухин (статус: 3-ий класс)
Ответ отправлен: 08.10.2007, 10:11
Оценка за ответ: 5
Комментарий оценки:
Пробовал писать сам и получилось почти как у вас, но сомневался в оптимальности решения, но думаю более простого способа нет.

Отвечает: Sov
Здравствуйте, Виктор Малейчик!
#include <stdlib.h>
#include <stdio.h>

const int osn=3;//троичная система счисления

int funk(int a,int p)
{
int res;
div_t d=div(a,osn);
int k=1;
div_t d1;
for(d1.quot=d.rem;d1.quot>10;k++)
d1=div(d1.quot,10);
if(d.quot<osn)
{
res=d.rem*p;
for(int i=0;i<k;i++)
p*=10;
res=res+d.quot*p;
return res;
}
if(p!=0)
res=p*d.rem;
else
{
res=d.rem;
p=1;
}
for(int i=0;i<k;i++)
p*=10;
res=res+funk(d.quot,p);

return res;
}

int main(int argc, char* argv[])
{
int chislo=1000;
printf("%d ",funk(chislo,0));
system("pause");
return 0;
}
Ответ отправил: Sov (статус: 7-ой класс)
Ответ отправлен: 08.10.2007, 10:14
Оценка за ответ: 5
Комментарий оценки:
Пробовал писать сам, получил что-то похожее на ответ другого эксперта, из вашего же ответа узнал о С++ что-то новое:) Спасибо.


Вопрос № 104.602
Уважаемые эксперты. Мне нужно построить линию алгоритмом Брезенхема. Я нашел исходник, но не знаю в какой среде с++ и как его скомпилировать. Помогите пожалуйста. Код в приложении.

Приложение:

Отправлен: 07.10.2007, 20:46
Вопрос задал: Евлампий Семенович Шпак (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

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

Держите работающую программу...на Turbo C++ 3.0...просто нет ничего другого сейчас под рукой...
Только там в коде измените координаты на те, которые Вам нужны...Та и оси можете поменять и подписис как Вам удобно...
и еще! не забудте поменять там путь к вашему BGI(ф-ция initgraph)...BGI находится в папке ТС...

#include <stdio.h>
#include <conio.h>
#include <graphics.h>
main ()
{
int gdriver=DETECT,i,y,x,gmode,errorcode,x1=170,y1=70,x2=60,y2=60,c;
float e ,pe;
float p,px,py;
initgraph(&gdriver, &gmode,"D:\TC\BGI");
errorcode=graphresult();
if (errorcode !=grOk)
{printf ("Graphics error");}
setbkcolor(15);
setcolor(RED);
settextstyle(GOTHIC_FONT,HORIZ_DIR,1);
outtextxy (250,10,"Laboratornaya rabota N 3");
outtextxy (250,30,"Gal'cov Andrey");
if (x1>x2 && y1>y2)
{
c=x1; x1=x2; x2=c;
c=y1; y1=y2; y2=c;
}
px=x2-x1;
py=y2-y1;
putpixel(x1,y1,13);
pe=py*1.0;
while(y1<y2)
{
e+=pe;
if (e>=px)
{ y1++; e=e-px; }
x1++;
putpixel(x1,y1,13);
}
setcolor(3);
outtextxy (120,100,"otrezok (170-70)-(60,60) po algoritmu Brezenhema. Turbo C");
setcolor(BLUE);
line (50,50,180,50);
line (50,50,50,130);

line (180,50,177,47);
line (180,50,177,53);
line (50,130,47,127);
line (50,130,53,127);

for (x=80;x<180;x+=30)
{
line (x,48,x,52);
}

for (y=80;y<130;y+=30)
{
line (48,y,52,y);
}

setcolor(GREEN);
outtextxy(43,43,"0");

outtextxy(65,40,"80");
outtextxy(95,40,"110");
outtextxy(125,40,"140");
outtextxy(155,40,"170");

outtextxy(30,75,"80");
outtextxy(23,105,"110");

setcolor(12);
outtextxy(182,55,"X");
outtextxy(45,132,"Y");
getch();
}


---------
Да здравтствует С++!!!...;)
Ответ отправил: Гальцов Андрей Михаилович (статус: 7-ой класс)
Ответ отправлен: 07.10.2007, 21:03
Оценка за ответ: 5

Отвечает: kool
Здравствуйте, Евлампий Семенович Шпак!
Вы нашли не весь алгоритм.
В нем нет определений ф-ций distance(X0, Y0, X1, Y1),
swap (Y0,Y1) и т.д. Среда разработки возможно Билдер.
Ищите дальше!
Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 08.10.2007, 19:02


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

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

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

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

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


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


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

В избранное