| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1258 人关注过本帖
标题:求助 谁能帮我把这个C语言转换VB
只看楼主 加入收藏
tayxou
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-7-18
收藏
 问题点数:0 回复次数:10 
求助 谁能帮我把这个C语言转换VB

bool timeint(char ad)
/*时间片中断*/
// char ad;
{ int x;
printf("ad=%c",ad);
x=rand1();
printf("x=%d",x);
if ( (x<0)&&(exe==0)) return(FALSE);
if ( (x<1)&&(exe==1)) return(FALSE);
if ( (x<2)&&(exe==2)) return(FALSE);
savearea[exe][0]=i; /*优先级*/
savearea[exe][1]=ad; /*随机数*/
pcb[exe].ch='t';
printf("\n");
printf("\n");
printf(" ★★★注意★★★ !!! 发生时间片中断!!!\n");
//sleep(3);
// clrscr();
//sleep(1);
//delay(6000000);
printf(" *****进程%d进入低就绪状态.*****\n",exe+1);
exe=NIL;
return(TRUE);

}
find()
{ int j,pd=NIL,w=MAX;
for (j=0;j<3;j++)
if (pcb[j].ch=='r')
if(pcb[j].priority<w)
{ w=pcb[j].priority;
pd=j;
}
if(pd==NIL)
for(j=0;j<3;j++)
if(pcb[j].ch=='t')
if(pcb[j].priority<w)
{ w=pcb[j].priority;
pd=j;
}
return(pd);
}
scheduler()
{ int pd;
if( (pd=find())==NIL && exe==NIL)
return(NIL);
if(pd!=NIL)
{ if(exe==NIL)
{ pcb[pd].ch='e';
exe=pd;
printf("********进程%d正在执行!!!*** ******\n",exe+1);
}
else if (pcb[pd].priority<pcb[exe].priority)
{ pcb[exe].ch='r';
printf(" 进程%d进入等待状态!\n" ,exe+1);
pcb[pd].ch='e';
exe=pd;
printf("****进程%d正在执行!!!*****\n",exe+1);
}
}
i=savearea[exe][0]; /*优先权*/
addr=savearea[exe][1]; /*地址*/
return(exe);
}
void block(int se) /*阻塞*/
//int se;
{ int w;
printf(" 进程%d 现在被阻塞,调用进程入等待队列!!\n",exe+1);
pcb[exe].ch='w';
pcb[exe].nextwr=NIL;
printf("当前在等待队列中的为第%d个进程\n",exe+1);
if((w=sem[se].firstwr)==NIL)
sem[se].firstwr=exe;
else { while(pcb[w].nextwr!=NIL)
w=pcb[w].nextwr;
pcb[w].nextwr=exe;
}
getchar();
}

p (int se,char ad)
//int se;
//char ad;
{ if (--sem[se].value>=0) return(FALSE);
block(se);
savearea[exe][0]=i;
savearea[exe][1]=ad;
exe=NIL;
return(TRUE);
}
void wakeup(int se)
// int se;
{ int w;
w=sem[se].firstwr;
printf("从等待队列唤醒等待进程%d!",w+1);
if(w!=NIL)
{ sem[se].firstwr=pcb[w].nextwr;
pcb[w].ch='r';
printf(" 进程%d被唤醒!\n",w+1);
}
}


v(int se,char ad)
//int se;
//char ad;
{ if(++sem[se].value>0) return(FALSE);
wakeup(se);
savearea[exe][1]=ad;
savearea[exe][0]=i;
return(TRUE);
}
void eexit(int n) /*结束函数*/
// int n;
{ pcb[n].ch='c';
printf("______________进程%d被完成!!!________________\n",n+1);
exe=NIL;
}

void process1( )
{
if (addr=='a') goto a1;
if (addr=='b') goto b1;
if (addr=='c') goto c1;
if (addr=='d') goto d1;
if (addr=='e') goto e1;
if (addr=='f') goto f1;
for (i=1;i<6;i++)
{ printf("\n 现在开始调度进程一\n");
printf("进程一调用P信号1 !\n");
if(p(0,'a')) break; /*进程一被阻塞*/
a1: printf("进程一被执行使用临界资源 s1 !\n");
if (timeint('b')) break; /*时间片中断*/
b1: printf("s1=%d\n",++s1);
printf("进程一调用V信号1并且释放临界资源 s1 !\n");
if (v(0,'c')) break; /*唤醒一个阻塞进程*/
c1: printf("进程一调用P信号2 !\n");
if(p(1,'d')) break;
d1: printf("进程一被执行使用临界资源 s2 !\n");
if(timeint('e')) break;
e1: printf("s2=%d\n",++s2);
printf("进程一调用V信号 2并且释放临界资源 s2 !\n");
if (v(1,'f')) break; /*唤醒一个阻塞进程*/
f1: printf("##############进程一循环数=%d#################\n",i);
}
if(i<6) return;
eexit(0);
getchar();
}
void process2( )
{ if (addr=='a') goto a2;
if (addr=='b') goto b2;
if (addr=='c') goto c2;
if (addr=='d') goto d2;
if (addr=='e') goto e2;
if (addr=='f') goto f2;
for(i=1;i<6;++i)
{ printf("\n 现在开始调度进程二\n");
printf("进程二调用P信号2 !\n");
if(p(1,'a')) break; /*进程二被阻塞*/
a2: printf("**********进程二被执行使用临界资源 s2 ! \n");
if(timeint('b')) break;
b2: printf("s2=%d\n",++s2);
printf("进程二调用V信号2并且释放临界资源 s2 !\n");
if(v(1,'c')) break; /*唤醒一个阻塞进程*/
c2: printf("进程二调用P信号1!\n");
if(p(0,'d')) break; /*进程二被阻塞*/
d2: printf("*********进程二被执行使用临界资源 s1!\n");
if(timeint('e')) break;
e2: printf("s1=%d\n",++s1);
printf("进程二调用V信号 1 并且释放临界资源 s1 !\n");
if(v(0,'f')) break; /*唤醒一个阻塞进程*/
f2: printf("################进程二循环数=%d##############\n",i);
}
if(i<6) return;
eexit(1);
getchar();
}
void process3( )
{
if(addr=='a') goto a3;
if(addr=='b') goto b3;
if(addr=='c') goto c3;
for(i=1;i<6;++i)
{ printf("\n 现在开始调度进程三\n");
printf("进程三调用P信号 2 !\n");
if(p(1,'a')) break; /*进程三被阻塞*/
a3: printf("进程三被执行使用临界资源 s1 !\n");
if(timeint('b')) break;
b3: printf("s2=%d\n",++s2);
printf("进程三调用V信号2释放临界资源s1 !\n");
if(v(1,'c')) break; /*唤醒一个阻塞进程*/
c3: printf("###############进程三循环数=%d#############\n",i);

搜索更多相关主题的帖子: C语言 printf FALSE 
2006-07-18 16:33
dragonfly
Rank: 5Rank: 5
等 级:贵宾
威 望:17
帖 子:1024
专家分:0
注 册:2006-3-20
收藏
得分:0 
太长了

2006-07-18 17:05
阿牛不是牛
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2006-7-12
收藏
得分:0 
这个C程序不完全正确,main 函数都没有

Private Function timeint(ByVal ad As Byte) As Boolean
'时间片中断
Dim ad As Byte
Dim x As Integer

Print "ad=" & ad
x = rand
Print "x=" & x
If ( (x<0) And (exe==0)) Then '哪来的 exe 变量?
timeint = False
End If
If ( (x<1) And (exe==1)) Then
timeint = False
End If
If ( (x<2) And (exe==2)) Then
timeint = False
End If
savearea(exe)(0) = i '优先级(savearea 哪来的???)
savearea(exe)(1) = ad '随机数
pcb[exe].ch='t' '还有这里,VB不支持这样赋值
Print vbCrlf
Print vbCrlf
Print " ★★★注意★★★ !!! 发生时间片中断!!!" & vbCrlf
'sleep(3);
'clrscr();
'sleep(1);
'delay(6000000);
Print " *****进程" & exe+1 & "进入低就绪状态.*****" & vbCrlf
exe=NIL
timeint = True
End Funciton

Private Function find() As Integer
Dim j As Integer
Dim pd As Integer
Dim w As Integer

pd=NIL,w=MAX;
For j=0 To 2 Step 1
If (pcb(j).ch = 'r') Then 'VB不支持这样赋值
If (pcb(j).priority < w) Then
w = pcb(j).priority
pd = j
End If
End If
Next

If pd = NIL Then
For j=0 To 2 Step 1
If pcb(j).ch = 't' Then
If (pcb(j).priority < w) Then
w = pcb(j).priority
pd = j
End If
End If
Next
End If
find = pd
End Function

'真长


阿牛不是牛,可他确实牛。
2006-07-18 19:15
阿牛不是牛
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2006-7-12
收藏
得分:0 
Private Function scheduler() As Integer
Dim pd As Integer

pd = find()
If (pd = NIL And exe = NIL) Then
scheduler = NIL
End If

If pd <> NIL Then
If exe = NIL Then
pcb(pd).ch = 'e'
exe = pd
Print "********进程" & exe+1 & "正在执行!!!*** ******" & vbCrlf
ElseIf (pcb(pd).priority<pcb(exe).priority)
pcb(exe).ch = 'r'
Print " 进程" & exe+1 & "进入等待状态!" & vbCrlf
pcb(pd).ch = 'e'
exe = pd
Print "****进程" & exe+1 & "正在执行!!!*****" & vbCrlf
End If
EndIf
i = savearea(exe)(0) '优先权
addr = savearea(exe)(1) '地址
scheduler = exe
End Function

阿牛不是牛,可他确实牛。
2006-07-18 19:23
阿牛不是牛
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2006-7-12
收藏
得分:0 
Private Sub block(ByVal se As Integer) As Integer '阻塞
'int se;
Dim w As Integer

Print "进程" & exe+1 & "现在被阻塞,调用进程入等待队列!!" & vbCrlf
pcb(exe).ch = 'w'
pcb(exe).nextwr = NIL
Print "当前在等待队列中的为第" & exe+1 & "个进程" & vbCrlf
w = sem(se).firstwr
If w = NIL Then
sem(se).firstwr = exe
Else
While (pcb(w).nextwr <> NIL
w = pcb(w).nextwr
Wend
pcb(w).nextwr = exe
End If
End Sub

阿牛不是牛,可他确实牛。
2006-07-18 19:28
阿牛不是牛
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2006-7-12
收藏
得分:0 

Private Function p(ByVal se As Integer,ByVal ad As Byte) As Integer
'int se;
'char ad;
sem(se).value = sem(se).value - 1
If sem(se).value >= 0 Then
p = False
End If
block
savearea(exe)(0) = i
savearea(exe)(1) = ad
exe = NIL
p = True
End Function

Private Sub wakeup(ByVal se As Integer)
' int se;
Dim w As Integer
w = sem(se).firstwr
Print "从等待队列唤醒等待进程" & w+1 & "!"
If w <> NIL Then
sem(se).firstwr = pcb(w).nextwr
pcb(w).ch = 'r'
Print " 进程" & w+1 & "被唤醒!" & vbCrlf
End If
End Sub

Private Sub v(ByVal se As Integer,ByVal ad As Byte)
'int se;
'char ad;
sem(se).value = sem(se).value + 1
If (sem(se).value > 0) Then
v = False
End If
wakeup se
savearea(exe)(1) = ad
savearea(exe)(0) = i
v = True
End Sub

Private Sub eexit(ByVal n As Integer) '结束函数
' int n;
pcb(n).ch = 'c'
Print "_________进程" & n+1 & "被完成!!!____________" & vbCrlf
exe = NIL
End Sub


阿牛不是牛,可他确实牛。
2006-07-18 19:38
阿牛不是牛
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2006-7-12
收藏
得分:0 
后面那几个函数goto跳来跳去,不翻译了。累了。

还有就是,别指望我翻译对了,我只是简单的对语法转一转(这C程序本来就是错漏百出)。

[此贴子已经被作者于2006-7-18 19:44:43编辑过]


阿牛不是牛,可他确实牛。
2006-07-18 19:43
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-19 08:25
阿牛不是牛
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2006-7-12
收藏
得分:0 
以下是引用穆扬在2006-7-19 8:25:58的发言:
阿牛还真是牛
不过我的看法是这程序应该重写

赞同,重写会好一些。


阿牛不是牛,可他确实牛。
2006-07-19 13:20
tayxou
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-7-18
收藏
得分:0 
很感谢,我们现在在学校做 课设,老师不只在那弄的C语言 的让我们改,,,,,,成VB的郁闷,变态老师
2006-07-19 23:14
快速回复:求助 谁能帮我把这个C语言转换VB
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027406 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved