随机点名程序matlab【1】待修改
(2017-11-13 23:04:05)clear;
%disp,显示输入提示或者为文字;
disp('--------随机点名程序----------');
n=input('请输入班级总人数:');
m=input('请输入本次抽检的人数:');
%总人数为n,代表最大的学号;并将所有学号组成一个数列Z,这个表达式很简练的生成了一个行矩阵;
z=1:n;
%k0为所有学号第一次随机排列后的数列.
k0=randperm(n);
%从数列k0中随机生成m个不重复的学号,作为第一次抽检的学号数列;
s1=z(k0(1:m));
%有了第1次随机生成的数列S1,要从总数列Z中排除掉这个元素并形成一个新的矩阵s10;
%setdiff表示从temp和S1中挑选中不同的!因为上面重复了多次,所以和原始人数比较选出不同的可以消去重复。
s10=setdiff(z,s1);
%====================
disp('【【【【第1次抽查学号如下】】】');s1
%====================
disp('【【【第1次抽查后剩余的学号如下】】】');s10
%==第2次抽查过程==================
k1=randperm(length(s1));k10=randperm(length(s10));
%然后随机整数k1,k2将赋给第二轮抽查的学号,分别是s2和s20
s2=s1(k1(1:round(0.3*m)));s20=s10(k10(1:round(0.7*m)));
%输出第二抽检的学号
disp('【【【第2次抽检的学号】】】')
ss2=[s20,s2]
disp('【【【第2次抽检后剩余的学号】】】')
temp=setdiff(z,s1);
s20=setdiff(temp,ss2)
if length(s20)<=0
end
%==第3次抽查过程==================
k2=randperm(length(s1));k20=randperm(length(s10));
%然后随机整数k1,k2将赋给第二轮抽查的学号,分别是s2和s20
s3=s2(k2(1:round(0.3*m)));s30=s20(k20(1:(m-round(0.3*m))));
%输出第二抽检的学号
disp('【【【第3次抽检的学号】】】')
ss3=[s30,s3]
disp('【【【第3次抽检后剩余的学号】】】')
temp1=setdiff(z,s2);
temp2=setdiff(temp1,ss2);
s30=setdiff(temp,ss3)
if length(s30)<=0
end
%==第4次抽查过程==================
%s1表示第一次抽查学号;s10表示未经抽查学号
%接下来,从s1中随机抽出k1=round(0.3*m)个,从s10中随机抽出k10=(m-round(0.3*m))
%k1,k10表示随机生成了0.3m个和0.7m个随机的数字;m为一次抽检人数;
k3=randperm(length(s2));k30=randperm(length(s20));
%然后随机整数k1,k2将赋给第二轮抽查的学号,分别是s2和s20
s4=s3(k3(1:round(0.3*m)));s40=s30(k30(1:(m-round(0.3*m))));
%输出第二抽检的学号
ss4=[s40,s4];
disp('【【【第4次抽检的学号】】】')
ss4
disp('【【【第4次抽检后剩余的学号】】】')
temp1=setdiff(z,s2);
temp2=setdiff(temp1,ss2);
temp3=setdiff(temp2,ss3);
s40=setdiff(temp,ss4)
if length(s40)<=0
end
%==第5次抽查过程==================
%s1表示第一次抽查学号;s10表示未经抽查学号
%接下来,从s1中随机抽出k1=round(0.3*m)个,从s10中随机抽出k10=(m-round(0.3*m))
%k1,k10表示随机生成了0.3m个和0.7m个随机的数字;m为一次抽检人数;
k4=randperm(length(s3));k40=randperm(length(s30));
%然后随机整数k1,k2将赋给第二轮抽查的学号,分别是s2和s20
s5=s4(k4(1:round(0.3*m)));s50=s40(k40(1:(m-round(0.3*m))));
%输出第二抽检的学号
ss5=[s50,s5];
disp('【【【第5次抽检的学号】】】')
ss5
disp('【【【第5次抽检后剩余的学号】】】')
temp1=setdiff(z,s2);
temp2=setdiff(temp1,ss2);
temp3=setdiff(temp2,ss3);
temp4=setdiff(temp3,ss4);
s50=setdiff(temp,ss5)
if length(s50)<=0
end
%==第6次抽查过程==================
%s1表示第一次抽查学号;s10表示未经抽查学号
%接下来,从s1中随机抽出k1=round(0.3*m)个,从s10中随机抽出k10=(m-round(0.3*m))
%k1,k10表示随机生成了0.3m个和0.7m个随机的数字;m为一次抽检人数;
k5=randperm(length(s4));k50=randperm(length(s40));
%然后随机整数k1,k2将赋给第二轮抽查的学号,分别是s2和s20
s6=s5(k5(1:round(0.3*m)));s60=s50(k50(1:(m-round(0.3*m))));
%输出第二抽检的学号
ss6=[s60,s6];
disp('【【【第6次抽检的学号】】】')
ss6
disp('【【【第6次抽检后剩余的学号】】】')
temp1=setdiff(z,s2);
temp2=setdiff(temp1,ss2);
temp3=setdiff(temp2,ss3);
temp4=setdiff(temp3,ss4);
temp5=setdiff(temp4,ss5);
s60=setdiff(temp,ss6)
if length(s60)<=0
end
%==第7次抽查过程==================
%s1表示第一次抽查学号;s10表示未经抽查学号
%接下来,从s1中随机抽出k1=round(0.3*m)个,从s10中随机抽出k10=(m-round(0.3*m))
%k1,k10表示随机生成了0.3m个和0.7m个随机的数字;m为一次抽检人数;
k6=randperm(length(s5));k60=randperm(length(s50));
%然后随机整数k1,k2将赋给第二轮抽查的学号,分别是s2和s20
s7=s6(k6(1:round(0.3*m)));s70=s60(k60(1:(m-round(0.3*m))));
%输出第二抽检的学号
ss7=[s70,s7];
disp('【【【第7次抽检的学号】】】')
ss7
disp('【【【第7次抽检后剩余的学号】】】')
temp1=setdiff(z,s2);
temp2=setdiff(temp1,ss2);
temp3=setdiff(temp2,ss3);
temp4=setdiff(temp3,ss4);
temp5=setdiff(temp4,ss5);
temp6=setdiff(temp5,ss6);
s70=setdiff(temp,ss6)
if length(s70)<=0
end
还存在的问题:m-round(0.3*m)可能超出数列的个数(即每次抽检的人数可能会变)
前一篇:量子力学学习笔记
后一篇:matlab随机点名程序