注册 登录
编程论坛 VB6论坛

求大神指点,如果写代码,让这些公式显示>=50,<=1,且不重复

wenchen1987 发布于 2015-07-06 23:16, 857 次点击
我想要的显示结果效果是这样的,
如果公式相加>50的数字,不显示,最大50
如果公式相减<1的数字字,不显示,最小1
如果公式相减=负数,也那么不显示,
如果公式计算的结果相同,那么,只显示一次就好了,不要重复数字,求大神指点
n1+1
n4-8
n3+8
n3-10
n1+16
n6-8
n4+8
n4-5
n2-8
n1-8
n4+16
n4-20
n1-1
n6+8
n2-1
n2-20
n1-32
n3-1
n6-1
n3-8
n1+3
n1-5
n2+8
n2+24
n1-3
n1-16
n1-20
n5+3
n3+24
n3-5
n2+5
n3+20
n5-20
n5+5
n4+40
n6-5
n5+32
n4-1
n6+40
n4-32
n4+3
n5+40
n2-24
n1-40
n6+5
n5-40
n4+32
n4-16
n3-3
n3+40
n1+5
n2+20
n6+10
n6+32
n2+32
n2+40
n6-40
n6-16
n5-32
n2+10
n5+8
n4+24
n2+16
n2-40
n1-30
n5-3
n2-3
n1+20
n4-10
n1-10
n5-5
n2-5
n5-30
n1+24
n3+30
n5+24
n6+20
n6+24
n6-30
n5+10
n1+8
n2-30
n4+1
n6-20
n4-40
n2-32
n3-30
n3+3
n1-24
n6-32
n3+16
n3+1
n2-16
n5+30
n3+32
n5-10
n5-24
n3+10
n5+20
n2-10
n1+10
n3-40
n4+10
n4+30
n3+5
n5-16
n6+1
n4+5
n2+30
n4-30
n5-8
n6-24
n3-32
n5+16
n3-20
n6+30
n4+20
n5+1
n3-16
n1+30
n4-3
n6-10
n4-24
n2+3
n6+16
n2+1
n3-24
n6+3
n5-1
n1+32
n6-3
n1+40
19 回复
#2
wenchen19872015-07-06 23:16
如何写代码,求大神指点,写错一个字
#3
vbhello2015-07-07 02:37
不是很懂题目,例如:
公式n1+1 与 公式n4-8 相减
(n1+1)-(n4-8)= n1-n4+9这个结果算什么?
#4
风吹过b2015-07-07 08:15
好吧,首先,计算过程,按我写的 24点代码里的 第一次的代码。计算公式写在 一个文件里。
其次,计算结果去重功能,按我 24点代码第二次的代码里的去重功能就可以了。

------------------------------
你这些计算式没有规律,无法使用循环来做,那就先定义好式子,然后计算吧。
#5
lianyicq2015-07-07 09:27
回复 楼主 wenchen1987
要求比较容易实现,便感觉这个计算组合不妥。
输入每个数对应输出22个数,总共有6个数,对应输出132个数。一般情况下去除掉小于1,大于50,重复的数,余下的数仍然很多。
简单写了代码,你自己试试,希望你对代码写的过程感兴趣。
程序代码:
Option Explicit
Dim a(10) As Integer
Dim n(1 To 6) As Integer
Dim Output() As Integer
Sub Init_a()
  a(0) = 1
  a(1) = 3
  a(2) = 5
  a(3) = 8
  a(4) = 10
  a(5) = 16
  a(6) = 20
  a(7) = 24
  a(8) = 30
  a(9) = 32
  a(10) = 40
End Sub
Sub Init_n()
  n(1) = 15
  n(2) = 8
  n(3) = 45
  n(4) = 32
  n(5) = 36
  n(6) = 16
End Sub
Sub Cal()
  Dim i As Integer
  Dim j As Integer
  Dim k As Integer
  Dim temp As Integer
  ReDim Output(0)
    For i = 1 To 6
      For j = 0 To 10
        temp = n(i) + a(j)
        If AddIn(temp) = True Then
          ReDim Preserve Output(k)
          Output(k) = temp
          k = k + 1
        End If
        temp = n(i) - a(j)
        If AddIn(temp) = True Then
          ReDim Preserve Output(k)
          Output(k) = temp
          k = k + 1
        End If
      Next
    Next
End Sub
Function AddIn(x As Integer) As Boolean
  Dim i As Integer
  AddIn = True
  If x < 1 Or x > 50 Then AddIn = False: Exit Function
  For i = 0 To UBound(Output)
    If x = Output(i) Then
      AddIn = False
      Exit For
    End If
  Next
End Function

Private Sub Command1_Click()
  Dim i As Integer
  Dim temp As String
  Cal
  For i = 0 To UBound(Output)
    temp = temp & Output(i) & " "
  Next
  Debug.Print temp
End Sub

Private Sub Form_Load()
  Init_a
  Init_n
End Sub

 
#6
wenchen19872015-07-07 20:03
回复 2楼 wenchen1987
不是这样的,如:N1+1=50,n2-1=1,然后判断是否>50或小于1
#7
wenchen19872015-07-07 20:17
回复 5楼 lianyicq
你好,大神,你写的代码好像是我要的,但是我想要的效果是N1-N6人可以自己输入数字的,
然后那些公式,是根据我自己输入的数字来判定结果是否>50,或<1的不重复数字的,

n1-n6是文本框,对应TEXT1.TEXT-TEXT6.TEXT,然后在TEXT7.TEXT显示计算结果
#8
w2009w2015-07-07 20:34
#9
wenchen19872015-07-07 20:54
回复 楼主 wenchen1987
我再简化一下公式,就是
N1+1,n1-1,n1+3,n1-3,n1+5,n1-5,n1+8,n1-8,n1+16,n1-16,n1+24,n1-24,n1+32,n1-32,n1+40,n1-40,
n2到n6同上,
n1到n6是我自己输入的数字
n1=val(text1.text)
n2=val(text2.text)
n3=val(text3.text)
n4=val(text4.text)
n5=val(text5.text)
n6=val(text6.text)
#10
wenchen19872015-07-07 21:30
回复 7楼 wenchen1987
我再简化一下公式,就是
N1+1,n1-1,n1+3,n1-3,n1+5,n1-5,n1+8,n1-8,n1+16,n1-16,n1+24,n1-24,n1+32,n1-32,n1+40,n1-40,
n2到n6同上,
n1到n6是我自己输入的数字
n1=val(text1.text)
n2=val(text2.text)
n3=val(text3.text)
n4=val(text4.text)
n5=val(text5.text)
n6=val(text6.text)
#11
风吹过b2015-07-07 21:35
程序代码:
Option Explicit

Dim n(1 To 6) As Long

Dim a(1 To 8) As Long

Sub Init_a()

a(1) = 1
a(2) = 3
a(3) = 5
a(4) = 8
a(5) = 16
a(6) = 24
a(7) = 32
a(8) = 40

End Sub


Private Sub Command1_Click()
'n 的文本框是:text1(?)
Dim i As Long
Dim j As Long

Dim b As Long
Dim bc(1 To 96) As Long
Dim bw As Long, bi As Long

For i = 0 To 5
    If IsNumeric(Text1(i).Text) Then
        n(i + 1) = Val(Text1(i).Text)
    Else
        MsgBox "" & i + 1 & " 个数输入不正确", vbCritical, "错误"
        Exit Sub
    End If
Next i

For i = 1 To 6
    For j = 1 To 8
        b = n(i) + a(j)                     '加法
        If b <= 50 Then                     '符合条件
            For bi = 1 To bw                '搜索历史答案
                If bc(bi) = b Then          '找到
                    Exit Sub                '退出循环
                End If
            Next bi
            If bi = bw + 1 Then             '如果没找到
                bw = bw + 1                 '计数
                bc(bw) = b                  '保存历史
                Text2.Text = Text2.Text & vbCrLf & n(i) & "+" & a(j) & "=" & b  '添加结果
            End If
        End If
        
        b = n(i) - a(j)                     '减法
        If b >= 0 Then                      '符合条件
            For bi = 1 To bw
                If bc(bi) = b Then
                    Exit Sub
                End If
            Next bi
            If bi = bw + 1 Then
                bw = bw + 1
                bc(bw) = b
                Text2.Text = Text2.Text & vbCrLf & n(i) & "-" & a(j) & "=" & b
            End If
        End If
    Next j
Next i
End Sub
Private Sub Form_Load()
    Call Init_a
End Sub


text2 是多行,带竖滚动条
text1 是控件数组,下标从 0 到 5
#12
lianyicq2015-07-07 21:54
回复 7楼 wenchen1987
仅仅就是文本框输入数字而已,还不能自己动手?
#13
wenchen19872015-07-07 22:36
回复 12楼 lianyicq
只有本站会员才能查看附件,请 登录

是这样的,我想在TEXT1.TEXT到TEXT6.TEXT文本框里,分别输入我想要的数字,
但是要赋值,让N1=VAL(TEXT1.TEXT),N2=VAL(TEXT2.TEXT),N3=VAL(TEXT3.TEXT),N4=VAL(TEXT4.TEXT),N5=VAL(TEXT5.TEXT),N6=VAL(TEXT6.TEXT)
但是,我单击"按钮"之后,然后开始计算我上面的那些公式,
然后,显示的结果是在TEXT7.TEXT里显示,
--------------------------------------------
还有,大神你刚才给我的代码为什么老出错?
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录
#14
风吹过b2015-07-07 22:40
你看了我代码下面的说明吗?
我用的是控件数组
#15
wenchen19872015-07-07 22:47
回复 13楼 wenchen1987
看了,不过我是菜鸟,实在不懂呀
#16
风吹过b2015-07-07 23:56
在窗体放个 textbox ,自动名字为 text1
然后复制这个 text1,然后再粘贴,会提示是否创建控件数组,点是,然后继续粘贴,直到粘出6个来为止。

再手动放一个 textbox ,自动名字为 text2
MultiLine 设为真,
ScrollBars 设为 VbVertical

然后放个 CommandButton  ,自动名字为 Command1
#17
lianyicq2015-07-08 09:26
回复 13楼 wenchen1987
风版在16楼详细写了建文本框组数组的方法,再给5楼代码数组n赋值。
本来希望你对写代码的过程感兴趣,没有实现。
#18
wenchen19872015-07-08 23:22
回复 17楼 lianyicq
谢谢大神,我的问题解决了,
#19
wenchen19872015-07-08 23:24
回复 17楼 lianyicq
只是大神能告诉我,怎么赋值不
只有本站会员才能查看附件,请 登录
#20
lianyicq2015-07-09 08:56
回复 19楼 wenchen1987
零基础的情况在短时间内就做出来了,看来VB6真的很容易。
在窗体内建Text1(0)至Text1(5)控件数组后,调整2个地方。
1、如你所标记的,修改Init_n()
程序代码:
Sub Init_n()
  Dim i As Integer
  For i = 0 To 5
    n(i + 1) = Val(Text1(i).Text)
  Next
End Sub
2、将Form_Load()中的Init_n语句移至Command1_Click()中
程序代码:
Private Sub Command1_Click()
  Dim i As Integer
  Dim temp As String
  Init_n
  Cal
  For i = 0 To UBound(Output)
    temp = temp & Output(i) & " "
  Next
  Debug.Print temp
End Sub

Private Sub Form_Load()
  Init_a
End Sub
没有考虑文本框内输入数据不符合条件的情况,自己把握。也可以借鉴风版的方法。

1