C++Builder 程序员博客
23 Aug
#include<iostream>
#include<list>
#include<algorithm>
#include<cmath>
#include<cassert>
using namespace std;
struct term{
int coef;
int exp;
//term *next;
};
list<term> la,lb,lc;
void output(list<term> l);
//多项式检查、合并
int check(list<term> &l,term &x)
{
term t=x;
list<term>::iterator p=l.begin();
term p1=(term)*p;
for(;p!=l.end();p++)
{
p1=(term)*p;
if(x.exp==p1.exp)
{
t.coef=p1.coef+x.coef;
return t.coef;
}
}
return NULL;
}
//输入多项式
void input()
{
int n;
list<term>::iterator pa=la.begin();
list<term>::iterator pb=lb.begin();
term ta=(term)*pa;
term tb=(term)*pb;
cout<<"输入多项式①的项数(最多20项): ";
cin>>n;
for(int i=1;i<=n;++i)
{
term t;
cout<<"输入第"<<i<<"项的系数与指数:";
cin>>t.coef>>t.exp;
check(la,t);
if(check(la,t)!=NULL)
{
t.coef=check(la,t);
}
la.push_back(t);
}
n=0;
cout<<endl;
cout<<"输入多项式②的项数(最多20项): ";
cin>>n;
for(int j=1;j<=n;j++)
{
term t;
cout<<"输入第"<<j<<"项的系数与指数:";
cin>>t.coef>>t.exp;
check(lb,t);
if(check(lb,t)!=NULL)
{
t.coef=check(lb,t);
}
lb.push_back(t);
}
cout<<"输入的多项式为: "<<endl<<endl;
cout<<"多项式①: ";output(la);cout<<endl;
cout<<"多项式②: ";output(lb);cout<<endl;
}
//输出多项式
void output(list<term> l)
{
list<term> lx=l;
list<term>::iterator p=lx.begin();
for(;p!=lx.end();)
{
term t=*p;
cout<<t.coef<<"x^"<<t.exp;
if(++p!=lx.end())
{
if(&p>0)
cout<<" + ";
else cout<<" - ";
}
}
cout<<endl;
}
//多项式加法运算
void add()
{
cout<<"输入要相加的多项式"<<endl;
input();
list<term>::iterator pa=la.begin();
list<term>::iterator pb=lb.begin();
list<term>::iterator pc=lc.begin();
term tc=(term)*pc;
while(pa!=la.end()&&pb!=lb.end())
{
term t;
term ta=(term)*pa;
term tb=(term)*pb;
if(ta.exp>tb.exp)
{
lc.push_back(ta);
pa++;
}
else if(tb.exp>ta.exp)
{
lc.push_back(tb);
pb++;
}
else
{
t.coef=ta.coef+tb.coef;
t.exp=ta.exp;
lc.push_back(t);
pa++;
pb++;
}
}
for(;pa!=la.end();pa++)
{lc.push_back(*pa);}
for(;pb!=lb.end();pb++)
{lc.push_back(*pb);}
output(lc);
cout<<endl;
output(la);
}
void main()
{
add();
}
我想将输入的节点和已有的链表传入check函数,在check函数里实现读取所输入节点的指数,然后在已有的链表中查找含有相同指数的节点,如果存在,则系数相加,返回新的系数,如此实现节点的插入合并,但是现在check函数的返回值好像没有起作用,输出函数输出的内容还是分散的原内容。有人知道怎么修改吗?
输入条件什么都没有,怎么看啊?
代码没太看懂,帮顶
la,lb在哪里赋初值了?
19 Aug
对于某一个函数S,它的值又满足另一个函数S1但是对于S值中的几个数字比如3,6,9又满足函数S2,这个函数该怎么写啊,
怎么我写if(S=3)运行的时候有警告啊
if(S == 3 )吧?
= 是赋值符号
== 才是逻辑相等符号
S=3 是把常数3,赋值给S。。。。
lz去你看看C++基礎的書吧
5 Aug
本人一直以为构造函数总是先执行,今天写了个小程序时发现执行中出了问题,通过断点发现“FormCreate”要先于“Form"构造函数执行,真有些郁闷,一直以来的感觉都是错误的!我使用的是bcb2007,望各位高手发表自己的看发,交流交流!
构造函数
即:
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
先执行
FormCreate后执行的
你可以在两个函数里分别添加
ShowMessage("构造")
ShowMessage("FormCreate")
来判断先后的顺序
你另外建个窗口,使用new来创建一下试一下
关于Form的初始化,要么全部放在构造里做,要么全部放在OnCreate里做,不建议分在两块地方.
不知道BCB2007的情况是什么样的,就BCB6来说,TForm有一个oldCreateOrder属性,如果为false,则构造先于Create,为true则反之. 联机帮助则干脆建议把初始工作全部放在构造里做
毛毛讲的有道理,把初始工作全部放在构造里,我还一直没注意过oldCreateOrder属性,学习了,呵呵
构造函数先进行
习惯 FormCreate
顶,学习学习。我一直以为是构造函数先执行。
毛毛讲的不错
顶,从来没在这个问题上仔细研究,学习了。
在Delphi1、2、3的VCL中,TCustomForm的构造函数在中间调用了OnCreate事件处理(如果有的话),析构函数调用了OnDestroy事件处理(如果有的话)。
从Delphi4的VCL开始,默认状态下,构造函数中不再调用OnCreate,析构函数中不再调用OnDestroy。可以使用OldCreateOrder来控制是否使用旧的方式。
好像不同版本BCB运行的顺序不一样
结 贴了,参加的都有分,呵呵
13 Jul
void setDateEdit(HWND hwnd,char * factoryCode)
{
SetDlgItemText(hwnd,IDC_FACTORYCODE,factoryCode);
}
其中IDC_FACTORYCODE是一个文本输入框的ID,如何将其作为一个形参用来传递?
说的是vc的吗?bcb好像没id这个概念的
5 Jul
void __stdcall Fun()
{
__asm
{
pushad
//—–
popad
}
}
编译后在函数中 pushad 前面还有函数自动生成的
push ebp
mov ebp,esp
等初始化语句,怎样让函数不自动生成这些?他改变了我想要得ESP的值。
我是希望在使用__asm{} 得到调用函数前 的 所有寄存器的值
我在 __asm{} 中有可能 使用 jmp 强行跳走,这样寄存器就不平了。
5 Jul
void __stdcall Fun()
{
__asm
{
pushad
//—–
popad
}
}
编译后在函数中 pushad 前面还有函数自动生成的
push ebp
mov ebp,esp
等初始化语句,怎样让函数不自动生成这些?他改变了我想要得ESP的值。
我是希望在使用__asm{} 得到调用函数前 的 所有寄存器的值
我在 __asm{} 中有可能 使用 jmp 强行跳走,这样寄存器就不平了。
5 Jul
void __stdcall Fun()
{
__asm
{
pushad
//—–
popad
}
}
编译后在函数中 pushad 前面还有函数自动生成的
push ebp
mov ebp,esp
等初始化语句,怎样让函数不自动生成这些?他改变了我想要得ESP的值。
我是希望在使用__asm{} 得到调用函数前 的 所有寄存器的值
我在 __asm{} 中有可能 使用 jmp 强行跳走,这样寄存器就不平了。
1 May
一般视频播放器都有一个可以用鼠标拖动的滑块的,我虽然实现了播放的办法,但是不知道怎么得到视频文件长度(最大总时间)
所以无法给滑块控件(TrackBar1)赋值,而实现拖动效果
还有一个奇怪的问题,就是我无论把代码摆到哪,都不能产生公共函数.
比如下面的这函数….
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
IGraphBuilder *pGraph;
IMediaControl *pMC;
IMediaEvent *pEv;
IMediaSeeking *pSm;
IMediaPosition *pPo;
IVideoWindow *pVW = NULL;
IBasicAudio *pBA = NULL;
IBasicVideo *pBV = NULL;
CoInitialize(NULL);
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraph);
pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
+++++++++++++++++++++++++++++++++++++++++
我必须在按扭控件区,播放菜单,暂停菜单,停止菜单等地方都放上这个定义,否则编译通不过, 有什么办法解决
是不是用IMediaSeeking 的GetStopPosition?
具体怎么实现?特别是后面的括号的东西
30 Apr
本来用循环可以显示一副图片,语句如下:
for(int i=0;i<w;i++)
{
BitBlt(hDC2,0,0,i,h,hDC1,w-i,0,SRCCOPY);
Sleep(10);
}
但显示图片时其他按钮不能点击,要等显示完以后才有反应,所以改用Timer
i=0;
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
BitBlt(hDC2,0,0,i,h,hDC1,w-i,0,SRCCOPY);
i++;
if(i>w)
Timer1->Enabled=false;
}
但不能显示图片,问题出在哪,帮我看看吧
怎么没人跟啊
for(int i=0;i <w;i++)
{
BitBlt(hDC2,0,0,i,h,hDC1,w-i,0,SRCCOPY);
Application->ProcessMessages();
}
不行哎
<
hDC2 hDC1 是什么??估计是已经失效了。
Timer1->Enabled=false; ???
Application->ProcessMessages();
BitBlt是位图转换的函数,你为啥用这个来显示图片啊
19 Apr
包括里面所有能用到的宏,比如EM_EXLINEFROMCHAR 这些,还有这些宏指的各是什么意思,先谢谢大家了
还有一个问题,我要让richedit的某一行(比如第7行)为当前可视行的第一行,怎么设置?
看看richedit.h就够了,这些消息从字面上也比较容易理解。
至于楼主在一楼提到的问题,可以google "EM_SCROLLCARET"
Perform(EM_SCROLLCARET, 0, 0); 可以把光标位置在可视区域显示出来,但并不一定是在最上面一行.如果光标位置是可见的,那就不会滚动.