精华内容
下载资源
问答
  • 讨论一下海盗分金问题vb.net解决方法 dim x as int16 dim y as int16 问题是 有x个海盗抢了y个金币,他们要瓜分这些赃物,分发如下 1 抽签决定各人的号码 2 由1号提出分配方案,然后其余人表决,当且仅当超过...
    VB.NET源码-156个实用实例哦……
    
    <script type="text/javascript"
    src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script>
    
    讨论一下海盗分金问题的vb.net解决方法
    dim x as int16
    dim y as int16
    问题是 有x个海盗抢了y个金币,他们要瓜分这些赃物,分发如下
    1 抽签决定各人的号码
    2 由1号提出分配方案,然后其余人表决,当且仅当超过半数同意方案被通过,否则他将被扔入大海喂鲨鱼;
    3 1号死后,由2号提方案,其他人表决,当且仅当超过半数同意时案通过,否则2号同样被扔入大海;
    4 依次类推......

    假定 每个海盗都是很聪明的人,都能很理智的判断得失,从而做出选择 ,那么 第一个海盗提出怎样的分配方案才能够使自己的收益最大化?

    附属问题,如果分配人数过多的话有多少人势必会被杀掉

    请完全用vb.net的方法解决问题,不要调用其他语言
    __________________________________________________________________________
    这个问题的答案很有规律:
    简单的说就是这么写:
    Dim x As Int16 盗贼数量
    Dim y As Int16 宝石数量

    最明智的第一个盗贼会这样分
    If x Mod 2 = 0 Then 人数为偶数
    MsgBox( 除第一个盗贼之外,凡是序号为偶数的人,都可以获得一颗宝石,第一个盗贼可以获得其余的宝石 )
    Else
    MsgBox( 除第一个盗贼之外,凡是序号为奇数的人,都可以获得一颗宝石,第一个盗贼可以获得其余的宝石 )
    End If
    __________________________________________________________________________
    这样解不行吧

    因为当海盗为5,金币为100的时候正确答案是

    97 , 0 , 1 , 2 , 0
    不符合楼上的答案阿
    __________________________________________________________________________
    展开全文
  • 讨论VB中的结构体

    千次阅读 2010-03-13 16:24:00
    讨论VB中的结构体[转载]2009年10月20日 星期二 11:30VB里面的结构体是一种WORD/DWORD对齐的结构体,这一点在编程中尤其要注意,如果是纯VB编程,则结构体的各个域如何排列可以基本不用关心,而如果是调用API或者是...
    讨论VB中的结构体[转载]
    2009年10月20日 星期二 11:30


    VB里面的结构体是一种WORD/DWORD对齐的结构体,这一点在编程中尤其要注意,如果是纯VB编程,则结构体的各个域如何排列可以基本不用关心,
    而如果是调用API或者是调用其他的动态链接库,则很容易出问题,原因就在于:这些动态链接库是用C/C++写的,而大部分C/C++环境里的
    结构体是非DWORD对齐的。这就导致调用动态链接库的时候,如果传一个结构体给一个动态链接库的接口函数,可能会导致不期望的结果;

    经过实验,发现VB里面结构体的DWROD规则如下:

    如果结构体里面类型最大的域的字节数大于等于4个字节:
    1.结构体变量的起始地址必须是4的整数倍;
    2.结构体的每个域的起始地址必须是4的整数倍;(如果需要,通过在前一个域的末尾补占位字节来达到该目的)
    3.结构体的总的字节数必须是4的整数倍;(不够的话,在末尾补占位字节)

    如果结构体里面类型最大的域的字节数等于2个字节(就是说最大的类型才是integer):
    1.结构体变量的起始地址必须是2的整数倍;
    2.结构体的每个域的起始地址必须是2的整数倍;(如果需要,通过在前一个域的末尾补占位字节来达到该目的)
    3.结构体的总的字节数必须是2的整数倍;(不够的话,在末尾补占位字节)

    如果结构体里面类型最大的域的字节数等于1个字节(就是说最大的类型才是Byte):
    没有DWORD对齐规则,所有的域紧凑的排列,每个域紧密连在一起;也就是说:有几个域就有几个字节;


    实验用代码如下,通过该代码可以清楚的窥探到VB结构体的存储规则:
    -----------------------------------------------------
    Option Explicit

    Private Type aaa
    f As Byte
    g As Byte
    x As Byte
    y As Byte
    z As Byte
    a As Double
    b As Integer
    c As Byte
    d As Byte
    e As Byte
    End Type


    Private Type bbb
        a As Byte
        b As Integer
        c As Byte
    End Type

    Private Type ccc
        a As Byte
        b As Double
    End Type

    Private Type ddd
        a As Byte
        b As Byte
        e As Byte
        f As Byte
        g As Byte
    End Type


    Private Sub Command1_Click()
    Dim s As aaa
    MsgBox LenB(s)
    MsgBox VarPtr(s) Mod 4
    End Sub

    Private Sub Command2_Click()
    Dim x As bbb

    MsgBox LenB(x)
    MsgBox VarPtr(x) Mod 4

    End Sub

    Private Sub Command3_Click()
    Dim x As ccc
    MsgBox LenB(x)
    End Sub

    Private Sub Command4_Click()
    Dim x As ddd
    MsgBox LenB(x)
    MsgBox VarPtr(x)
    End Sub
    -----------------------------------------------------

    根据这个规则,会发现有时候声明同样的一个结构体,仅仅由于各个域的次序不同,就会导致结构体占用的空间大小不同的现象,
    这也可用作一个程序优化技巧,减少程序的内存占用率;

    例如:
    Private Type bbb
        a As Byte
        b As Integer
        c As Byte
    End Type

    Private Type bbb
        a As Byte
        c As Byte
        b As Integer
    End Type

    两种声明方式完成的目的一样,但占用的内存空间是不一样的,显然后者会更节约内存;


    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/qiqi5521/archive/2006/06/23/826040.aspx

     

    展开全文
  • 一款VB做的聊天工具。很不错的哦!(有上面问题大家一起讨论
  • [img=http://hi.baidu.com/hhayy7758/album/item/8f11510828381f304824ab1fa9014c086e06f001.html#][/img] 上面是界面 下面的代码虽然长,但是很简单 ... Private Sub Button1_Click(ByVal sender As System....
  • vb

    2012-06-03 13:16:35
    随着越来越多的学习vb课程,发现自己对vb了解的少之又少,老师上课提问问题叫起来的同学总能回答上来可是自己想想就是不会做,什么编程、字符串、数组、运算符自己根本就不懂,看书吧随着自己静下心来用越来越多的...
    随着越来越多的学习vb课程,发现自己对vb了解的少之又少,老师上课提问问题叫起来的同学总能回答上来可是自己想想就是不会做,什么编程、字符串、数组、运算符自己根本就不懂,看书吧随着自己静下心来用越来越多的时间去看书才发现自己也不是太笨,vb也不是太难学,总之呢一句话好好学习天天向上总会学会的。世上无难事只怕有心人嘛!从学习vb以来学习了很多的编程当然自己不太会但是根据老师提供的信息加同学之间的讨论嘿嘿每次还是能写出来的。“请您输入一个正整数,我们来帮您分析他是不是素数”、“实现两个数大小的比较,并输出最大的数”呵呵这些可都是曾经自己在各方面的帮助下做出来的,当然也不仅仅只是这些了,只是在这里就不一一列举了。呵呵。同时还在上课和其他的时间里编写了实验书上的几个程序文字倒序输出,数据统计计算、成绩输入及计算等等程序,学习vb久而久之其实课本上的很多我们不在意的东西都是很重要的东西。不管学习什么只要我们耐心去学习不断去渗透学会的。
    
    展开全文
  • VB高精度计时器编程的讨论

    千次阅读 2008-10-02 16:12:00
    VB高精度计时器编程的讨论 VB记时器编程的讨论 在很多场合下编程(例如工业控制、游戏)中需要比较精确的记时器,本文讨论的是在VB下实现记时器的若干方法以及它们的精度控制问题。 在VB中最常用的是Timer控件,它的...
     VB高精度计时器编程的讨论   
       
      VB记时器编程的讨论   在很多场合下编程(例如工业控制、游戏)中需要比较精确的记时器,本文讨论的是在VB下实现记时器的若干方法以及它们的精度控制问题。   在VB中最常用的是Timer控件,它的设置和使用都非常方便,理论上它的记时精度可以达到1ms(毫秒)。但是众所周知的,实际上Timer在记时间隔小于50ms之下是精度是十分差的。它只适用于对于精度要求不太高的场合。   这里作者要介绍的是两中利用Windows   API函数实现精确记时的方法。第一中方法是利用高性能频率记数(作者本人的称呼)法。利用这种方法要使用两个API函数QueryPerformanceFrequency和QueryPerformanceCounter。QueryPerformanceFrequency函数获得高性能频率记数器的震荡频率,该函数的定义如下:    
       
      Private   Declare   Function   QueryPerformanceFrequency   Lib   "kernel32"   _  
                                  (lpFrequency   As   LARGE_INTEGER)   As   Long  
      函数中的数据结构LARGE_INTEGER定义如下:  
      Type   LARGE_INTEGER  
              lowpart   As   Long  
              highpart   As   Long  
      End   Type  
       
      调用该函数后,函数会将系统频率记数器的震荡频率保存到lpPerformanceCount中,其中低位保存到lowpart中,高位保存到highpart中。但是现在的Windows没有使用到hightpart(系统频率记数器的震荡频率与计算机的主频无关,我在几台机上做过验证,都是lowpart为1193180,highpart为0)。  
      QueryPerformanceCounter函数获得系统频率记数器的震荡次数,函数的定义如下  
       
      Private   Declare   Function   QueryPerformanceCounter   Lib   "kernel32"   _  
                      (lpPerformanceCount   As   LARGE_INTEGER)   As   Long  
       
      获得记时器震荡次数保存在lpPerformanceCount中。  
      显然,如果首先获得利用QueryPerformanceFrequency函数获得频率记数器的震荡频率,然后在执行某个程序段之前调用QueryPerformanceCounter函数获得频率记数器的震荡次数,在程序段结束再调用QueryPerformanceCounter函数获得频率记数器的震荡次数,将两次获得的震荡次数相减后再除以震荡频率就获得的了两次间隔之间的时间(以秒为单位)。如果在程序中建立一个循环,在循环中不停的调用QueryPerformanceCounter获得频率记数器的震荡次数并同先前的频率记数器的震荡次数相减,将结果除以频率记数器的震荡频率,如果达到一定的时间就执行某个任务,这样就实现了一个比较精确的记时器的功能。  
       
      另外的一种精确记时器的功能是利用多媒体记时器函数(这也是作者的定义,因为这个系列的函数是在Winmm.dll中定义并且是为媒体播放服务的)。  
      实现多媒体记时器首先要定义timeSetEvent函数,该函数的定义如下:  
       
      Public   Declare   Function   timeSetEvent   Lib   "winmm.dll"   (ByVal   uDelay   As   Long,   ByVal   _  
                      uResolution   As   Long,   ByVal   lpFunction   As   Long,   ByVal   dwUser   As   Long,   _  
                      ByVal   uFlags   As   Long)   As   Long  
       
      函数定义中参数uDelay定义延迟时间,以毫秒为单位,该参数相当于Timer控件的Interval属性。参数uResolution定义记时精度,如果要求尽可能高的精度,要将该参数设置为0;参数lpFunction定义了timeSetEvent函数的回调函数的地址。参数dwUser定义用户自定义的回调值,该值将传递给回调函数。参数uFlags定义定时类型,如果定义为Time_OneShot,则只会在当达到uDelay定义的时间后调用回调函数一次,如果定义为TIME_PERIODIC,则在每次达到定时时间后调用回调函数。  
      如果函数调用成功,在系统中建立了一个多媒体记时器对象,每当经过一个uDelay时间后lpFunction指定的函数都会被调用。同时函数返回一个对象标识,如果不再需要记时器则必须要使用timeKillEvent函数删除记时器对象。  
      由于Windows是一个多任务的操作系统,因此基于API调用的记时器的精度都会受到其它很多因素的干扰。到底这两中记时器的精度如何,我们来使用以下的程序进行验证:  
      设置三种记时器(Timer控件、高性能频率记数、多媒体记时器)。将它们的定时间隔设置为10毫秒,让它们不停工作直到达到一个比较长的时间(比如60秒),这样记时器的误差会被累计下来,然后同实际经过的时间相比较,就可以得到它们的精度。  
      下面是具体的检测程序。  
      首先建立一个工程文件,在Form1中加入一个Timer控件,两个CommandButton控件和三个TextBox控件,然后在Form1的代码窗口中加入以下代码  
       
       
      Option   Explicit  
       
      Private   Sub   Command1_Click()  
              Dim   lagTick1   As   LARGE_INTEGER  
              Dim   lagTick2   As   LARGE_INTEGER  
              Dim   lTen   As   Long  
               
              Command2.Enabled   =   True  
              Command1.Enabled   =   False  
              iCountStart   =   60  
              lmmCount   =   60  
              TimerCount   =   60  
              actTime1   =   GetTickCount  
              lTimeID   =   timeSetEvent(10,   0,   AddressOf   TimeProc,   1,   1)  
              Timer1.Enabled   =   True  
               
              lTen   =   10   *   lMSFreq  
              Call   QueryPerformanceCounter(lagTick1)  
              lagTick2   =   lagTick1  
              While   iCountStart   >   0  
                      Call   QueryPerformanceCounter(lagTick2)  
                      '如果时钟震动次数超过10毫秒的次数则刷新Text1的显示  
                      If   lagTick2.lowpart   -   lagTick1.lowpart   >   lTen   Then  
                              lagTick1   =   lagTick2  
                              iCountStart   =   iCountStart   -   0.01  
                              Text1.Text   =   Format$(iCountStart,   "00.00")  
                      End   If  
                      DoEvents  
              Wend  
      End   Sub  
       
      Private   Sub   Command2_Click()  
              EndCount  
      End   Sub  
       
      Private   Sub   Form_Load()  
              Dim   lim   As   LARGE_INTEGER  
               
              Text1.Text   =   "60.00"  
              Text2.Text   =   "60.00"  
              Text3.Text   =   "60.00"  
              Command1.Caption   =   "开始倒记时"  
              Command2.Caption   =   "停止记时"  
              Command2.Enabled   =   False  
               
              '获得系统板上时钟频率  
              QueryPerformanceFrequency   lim  
               
              '将频率除以1000就的出时钟1毫秒震动的次数  
              lMSFreq   =   (lim.highpart   *   2   ^   16)   /   1000   +   lim.lowpart   /   1000  
              Timer1.Interval   =   10  
              Timer1.Enabled   =   False  
      End   Sub  
       
      Private   Sub   Timer1_Timer()  
              TimerCount   =   TimerCount   -   0.01  
              Text3.Text   =   Format$(TimerCount,   "00.00")  
              If   TimerCount   <=   0   Then  
                      Timer1.Enabled   =   False  
              End   If  
      End   Sub  
      在Project中加入一个Module,然后在其中加入以下代码:  
      Option   Explicit  
       
      Type   LARGE_INTEGER  
              lowpart   As   Long  
              highpart   As   Long  
      End   Type  
       
      Public   Declare   Function   QueryPerformanceCounter   Lib   "kernel32"   _  
                      (lpPerformanceCount   As   LARGE_INTEGER)   As   Long  
      Public   Declare   Function   QueryPerformanceFrequency   Lib   "kernel32"   _  
                      (lpFrequency   As   LARGE_INTEGER)   As   Long  
      Public   Declare   Function   timeSetEvent   Lib   "winmm.dll"   (ByVal   uDelay   As   Long,   ByVal   _  
                      uResolution   As   Long,   ByVal   lpFunction   As   Long,   ByVal   dwUser   As   Long,   _  
                      ByVal   uFlags   As   Long)   As   Long  
      Public   Declare   Function   timeKillEvent   Lib   "winmm.dll"   (ByVal   uID   As   Long)   As   Long  
      Public   Declare   Function   GetTickCount   Lib   "kernel32"   ()   As   Long  
       
      Public   lMSFreq   As   Long  
      Public   TimerCount   As   Single  
      Public   lmmCount   As   Single  
      Public   lTimeID   As   Long  
      Public   actTime1   As   Long  
      Public   actTime2   As   Long  
      Public   iCountStart   As   Single  
       
      Dim   iCount   As   Single  
       
      'timeSetEvent的回调函数  
      Sub   TimeProc(ByVal   uID   As   Long,   ByVal   uMsg   As   Long,   ByVal   dwUser   As   Long,   _  
              ByVal   dw1   As   Long,   ByVal   dw2   As   Long)  
               
              Form1.Text2.Text   =   Format$(lmmCount,   "00.00")  
              lmmCount   =   lmmCount   -   0.01  
              If   lmmCount   <=   0   Then  
                      iCountStart   =   60  
                      lmmCount   =   60  
                      TimerCount   =   60  
                      EndCount  
              End   If  
      End   Sub  
      Sub   EndCount()  
              iCount   =   iCountStart  
              iCountStart   =   0  
              timeKillEvent   lTimeID  
              actTime2   =   GetTickCount   -   actTime1  
              With   Form1  
                      .Command1.Enabled   =   True  
                      .Command2.Enabled   =   False  
                      .Timer1.Enabled   =   False  
                       
                      .Text1   =   "计数器记时"   +   Format$((60   -   iCount),   "00.00")   +   "     "   _  
                                      +   "实际经过时间"   +   Format$((actTime2   /   1000),   "00.00")  
                      .Text2   =   "计数器记时"   +   Format$((60   -   lmmCount),   "00.00")   +   "     "   _  
                                      +   "实际经过时间"   +   Format$((actTime2   /   1000),   "00.00")  
                      .Text3   =   "计数器记时"   +   Format$((60   -   TimerCount),   "00.00")   +   "     "   _  
                                      +   "实际经过时间"   +   Format$((actTime2   /   1000),   "00.00")  
              End   With  
      End   Sub  
       
       
      运行程序,点击“开始倒记时”按钮开始倒记时,可以看到两种API记时器工作基本正常,文本框中的倒记时显示流畅,而Timer控件的时间显示相比之下却不堪重负,十分缓慢。按“停止记时”按钮就可以停止倒记时,由图1可以看到,两种API记时器的累计误差在2‰以下,考虑到系统原因和处理记时显示的时间,这个误差基本是可以接受的,而且经过作者的多次检测,误差都在3‰以下。而Timer控件的误差简直是无法接受的。  
       
      图   三种不同的记时器记时结果  
       
       
      在运行程序时作者还发现一个问题,如果在倒记时时拖动窗口,文本框中的显示都会停止,而当停止窗口拖放后,多媒体记时器显示会跳过这段时间记时,而其它两种记时器显示倒记时却还是从原来的时间倒数。这说明多媒体记时器是在独立的线程中运行的,不会受到程序的影响。  
      综合上面的介绍和范例,我们可以看到,如果要建立高精度的记时器,使用多媒体记时器是比较好的选择。而高性能频率记数法比较适合计算某个耗时十分短的过程所消耗的时
    展开全文
  • 我爱北京天安门天安门上太阳升伟大领袖毛主席指引我们向前进VB里面的结构体是一种WORD/DWORD对齐的结构体,这一点在编程中尤其要注意,如果是纯VB编程,则结构体的各个域如何排列可以基本不用关心,而如果是调用API...
  • 有文法:S->when (E) S1 S2 语义如: ┌────┐ │ 计算E值 ↑...............│ ┌─E值为?─┐=0 ↑.......↓.........│........↑____↓___↓........................................很多问题的,各位高手,请教请教
  • 随着业务状况的不断发展,提出了更多的挑战和问题. 其一:子类化在VB6的IDE调试阶段会出现崩溃情况,需要实现子类化的无崩溃调试; 其一:我的窗体或自定义控件中可能有很多控件需要跟踪鼠标移出事件;甚至可能会...
  • 另附一个帖子:http://bbs.csdn.net/topics/390580540,这个帖子讨论的不错,可以提供很多思路。 解决办法:http://rewwensoftware.blog.163.com/blog/static/1841283032013928956442/ 实际解决不需要那么麻烦,我...
  • 谈谈C#和VB.NET代码的转换问题本文为中国ASP.NET开发网原创在.NET1.X时代,C#和VB.NET有着天然的相似性,随着时光的流逝,.NET已经到了3.0/3.5,二者之间的差异越来越远,关于二者之间的差异问题不是本文讨论的内容...
  • 基于VB-CrystalReport 的C/S报表架构讨论

    千次阅读 2007-02-02 15:47:00
    在这里我主要想和大家讨论一下Crystal Report的总体框架模式方面的问题,重点是如何使用...在以后的讨论中,我们可以针对具体的问题讨论具体的技术细节。我准备了一份源代码,已经发给了部分网友,但是没有做详细的测试
  • 再次讨论向Excel插入图片方法,有兴趣的朋友可以进来看一下,帮我解决一下问题!谢了 oSheet.Pictures.Insert( "F:/hgn.jpg ").select() 其实用这个语句就可以实现插入功能了。(我根据宏做的) 但现在是,我要...
  • Anole控件问题讨论

    2007-05-22 16:28:00
    如果您在使用或试用Anole控件时发现BUG、遇到困难,或者有何建议等等,总之和Anole有关的问题,都可以在此回复。 如果您对此控件还不了解,请访问作者主页: http://www.vb99.com
  • GifButton控件问题讨论

    千次阅读 2007-05-22 16:38:00
    如果您在使用或试用GifButton控件时发现BUG、遇到困难,或者有何建议等等,总之和Anole有关的问题,都可以在此留言。 如果您对此控件还不了解,请访问作者主页: http://www.vb99.com
  • VB网络编程实例

    千次下载 热门讨论 2007-05-29 15:46:04
    ◆ 93.htm 用VB实现聊天讨论室和点对点会话 ◆ 94.htm 用VB写一个定时PING某IP的程序 ◆ 95.htm 用VB制作器 ◆ 96.htm 用Visual Basic 5.0设计E-mail程序(MAPI) ◆ 97.htm 用Visual Basic...
  • 关于VB.NET中实现嵌套数据控件中数据绑定的问题LanFan [原创] 在ASP.NET中经常会用到嵌套的数据控件,比如Repeater、...对于该数据绑定问题网上已有很多讨论,但用C#实现的居多,在VB.NET中很多人遇到了一些问题
  • 1. 在开发一个系统时,因为软件版本问题,我界面开发使用的是VB,核心代码使用的是C++(C++生成DLL文件,供VB调用)。 2. 运行过程:VB调用dll函数,函数运行完成之后返回一个值,但是dll函数在运行的过程中,某一...
  • VB学生成绩管理论文

    2009-09-09 12:06:07
    VB学生成绩管理论文,本文主要是讨论如何解决根据学生成绩评估教学质量的信息化问题
  • 讨论的几个问题:1. Basic已经很古老了,为何MS还在维护?2. 维护VB成本不会很高吗?3. VB和C#语法上怎么如此接近?4. VB和C#语法上如此直接近,为何不合并为一个?可能看上去是一些见怪不怪或者不太值得讨论的...
  • 首先我们来讨论一个争议性问题,用Python做窗口(GUI)编程到底有没有意义?总体来说,意义不大。为什么呢?很明显,Python的强项在于代码优美、简洁,把更多的工作留给计算机去运行,从而解放程序猿们。所以用...
  • 一、问题引入在VS2005网站开发过程中,网站发布问题一直是个问题.VS2005创建的网站有几个默认的目录:App_Code,App_Data,App_Themes........如果是但cs/vb文件,比如UploadFile.cs类UploadFile,这个类文件没有可视的...
  • 如果您在使用ThemeButton控件时发现BUG、遇到困难,或者有何建议等等,总之和ThemeButton有关的问题,都可以在此留言。 如果您对此控件还不了解,请访问作者主页: http://www.vb99.com
  • 分享讨论界面问题

    2011-05-14 01:33:00
    <br />  个人感觉VB处理界面的几个难点: 1,界面的表达能力,个人理解:越简单越好; 2,界面的外观,俗话说:人靠衣衫。在处理界面的时候合理运用“炫”的手法还是必要的;   --...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 267
精华内容 106
关键字:

vb问题讨论