15 电气 齐振昊 VB中制作鞍点(老师讲解)K=m+1
2016-06-16 12:56
330 查看
实验名称:找出鞍点(老师讲解)
程序思想:
首先生成五行六列的数(在1~100之间)这一步是通过循环实现的,即分别定义i,j,通过循环生成二维数组。
第二步,也是较为关键的一步,即找出每一行的最大值并标记,这一步又是怎样实现的呢?
很简单,也是通过循环,还记得比较几个数大小的方法吗?其实方法类似,假设a>b,只不过在这里如果为假我们并不交换两个数,而是如果a>b为假,直接把b的值给a.我们不妨假设第一行第一列的数最大,那么在第一行此数会依次与第二行、第三行。。。进行比较,如果后一个数比前一个数大,那么此数的列号会被记录。其他行也用此方法找出行最大数。
第三步,分析上步所得的行最大数是不是所在列的列最小数,这时我们就要借助于媒介K来分析。原理很简单:
从k=1一直到m行,对比一列中前后两个数的大小关系,若前一个数总是比后一个数小即:anma(k,
column_max) < row_max总成立,则是鞍点,此时k=m+1,若anma(k, column_max)
< row_max有一个不成立,则退出循环,无鞍点。
这个原理简单说就是:如果在这一列中(m行)有一个数比你设定的最小值还小,那么你设定的数肯定不是最小值,则m行的数都比它小,k=m+1(m行都循环过来,找不到比它大的数,k=m+1)
4.问题解决了
代码如下:
Option Base 1
Dim anma() As Integer
Dim m As Byte, n As Byte
Private Sub Command1_Click()
Cls
m = 5: n = 6
ReDim anma(m, n)
Dim i As Byte, j As Byte, k As Byte
For i = 1 To m
For j = 1 To n
anma(i, j) = 10 + Int(Rnd * 90)
Next j
Next i
For i = 1 To m
For j = 1 To n
Print anma(i, j); Spc(3);
Next j
Print
Next i
Dim row_max As Integer, column_max As Byte
For i = 1 To m
row_max = anma(i, 1)
column_max = 1
For j = 2 To n
If anma(i, j) > row_max Then
row_max = anma(i, j)
column_max = j
End If
Next j
For k = 1 To m
If anma(k, column_max) < row_max Then
Exit For
End If
Next k
If k = m + 1 Then
Print "鞍点:"
& i & "," & column_max
End If
Next i
End Sub
程序思想:
首先生成五行六列的数(在1~100之间)这一步是通过循环实现的,即分别定义i,j,通过循环生成二维数组。
第二步,也是较为关键的一步,即找出每一行的最大值并标记,这一步又是怎样实现的呢?
很简单,也是通过循环,还记得比较几个数大小的方法吗?其实方法类似,假设a>b,只不过在这里如果为假我们并不交换两个数,而是如果a>b为假,直接把b的值给a.我们不妨假设第一行第一列的数最大,那么在第一行此数会依次与第二行、第三行。。。进行比较,如果后一个数比前一个数大,那么此数的列号会被记录。其他行也用此方法找出行最大数。
第三步,分析上步所得的行最大数是不是所在列的列最小数,这时我们就要借助于媒介K来分析。原理很简单:
从k=1一直到m行,对比一列中前后两个数的大小关系,若前一个数总是比后一个数小即:anma(k,
column_max) < row_max总成立,则是鞍点,此时k=m+1,若anma(k, column_max)
< row_max有一个不成立,则退出循环,无鞍点。
这个原理简单说就是:如果在这一列中(m行)有一个数比你设定的最小值还小,那么你设定的数肯定不是最小值,则m行的数都比它小,k=m+1(m行都循环过来,找不到比它大的数,k=m+1)
4.问题解决了
代码如下:
Option Base 1
Dim anma() As Integer
Dim m As Byte, n As Byte
Private Sub Command1_Click()
Cls
m = 5: n = 6
ReDim anma(m, n)
Dim i As Byte, j As Byte, k As Byte
For i = 1 To m
For j = 1 To n
anma(i, j) = 10 + Int(Rnd * 90)
Next j
Next i
For i = 1 To m
For j = 1 To n
Print anma(i, j); Spc(3);
Next j
Next i
Dim row_max As Integer, column_max As Byte
For i = 1 To m
row_max = anma(i, 1)
column_max = 1
For j = 2 To n
If anma(i, j) > row_max Then
row_max = anma(i, j)
column_max = j
End If
Next j
For k = 1 To m
If anma(k, column_max) < row_max Then
Exit For
End If
Next k
If k = m + 1 Then
Print "鞍点:"
& i & "," & column_max
End If
Next i
End Sub
相关文章推荐
- VB.net学习笔记(三十)认识线程池
- VB函数Time和Timer的区别
- VBA Study Notes
- VBA Study Notes
- VBA Study Notes
- VBA Study Notes
- VBA Study Notes
- VBA Study Notes
- VBA Study Notes
- vb.net 托盘图标的使用
- 经典TVB台词100句
- vbox ubuntu 挂载共享目录
- vba 判断是否为数字
- AOPR软件更改Excel VBA密码方法
- VB.net学习笔记(二十九)认识STA与MTA
- VB.Net隐式转换和显式转换的方法(转)
- 第 3 章 VBScript流程控制
- 第 2 章 VBScript基本概念
- lab 相关--使用vb.net实现对控制文件的管理操作
- 从VB来看-排序