更改代码以使其并行 #包括 #包括 #包括 #定义最大项目50 typedef长双LD; int run_solve_eq(); void xmain(){ int-pid; pid=创建(运行求解等式,20*INITSTK,INITPRIO,“B”,0); 恢复(pid); } int solve_eq(LD b,int n,LD a[],int choosen[])){ 如果(n==1) 如果(a[0]==b){ 选择[0]=1; 返回1; }/*如果*/ else如果(b==0){ 选择[0]=0; 返回1; }/*如有其他情况*/ 否则{ 选择[0]=0; 返回0; } else/*n>1*/ if(求等式(b,n-1,a,choosen)){ 选择[n-1]=0; 返回1; }/*如果*/ else if(解方程(b-a[n-1],n-1,a,choosen)){ 选择[n-1]=1; 返回1; }/*如有其他情况*/ 否则{ 选择[n-1]=0; 返回0; } }/*求解*/ LD a[最大项目数]; int choosen[最大项]; char-pstr[200]; 外部长内部tod; int run_solve_eq(){ int n,i,结果; LD b,总和; printf(“多少个数字?不超过%d:,最多个项目); scanf(“%d”和“&n”); 看跌期权(“输入b:”); scanf(“%Lf”、&b); a[0]=1; 对于(i=1;i
我需要更改此程序,以便通过两个过程“并行”搜索: 每个用户将搜索n-1,第一个用户在[n-1]上,另一个用户不在。更改代码以使其并行 #包括 #包括 #包括 #定义最大项目50 typedef长双LD; int run_solve_eq(); void xmain(){ int-pid; pid=创建(运行求解等式,20*INITSTK,INITPRIO,“B”,0); 恢复(pid); } int solve_eq(LD b,int n,LD a[],int choosen[])){ 如果(n==1) 如果(a[0]==b){ 选择[0]=1; 返回1; }/*如果*/ else如果(b==0){ 选择[0]=0; 返回1; }/*如有其他情况*/ 否则{ 选择[0]=0; 返回0; } else/*n>1*/ if(求等式(b,n-1,a,choosen)){ 选择[n-1]=0; 返回1; }/*如果*/ else if(解方程(b-a[n-1],n-1,a,choosen)){ 选择[n-1]=1; 返回1; }/*如有其他情况*/ 否则{ 选择[n-1]=0; 返回0; } }/*求解*/ LD a[最大项目数]; int choosen[最大项]; char-pstr[200]; 外部长内部tod; int run_solve_eq(){ int n,i,结果; LD b,总和; printf(“多少个数字?不超过%d:,最多个项目); scanf(“%d”和“&n”); 看跌期权(“输入b:”); scanf(“%Lf”、&b); a[0]=1; 对于(i=1;i,c,operating-system,C,Operating System,我需要更改此程序,以便通过两个过程“并行”搜索: 每个用户将搜索n-1,第一个用户在[n-1]上,另一个用户不在。 问题是在数组中找到一个数字,该数字的所有值都等于另一个数字b 不是答案,但我确实有一些建设性的意见要给你 阅读上面的代码是有害的。它伤害了我的眼睛和大脑。为什么? 变量名是非描述性的,通常只有一个字母(在I之外)b,n,a-我一眼就不知道这些是什么,我不想通过理解你写的内容来找出答案。我打赌你也不会明白你下周写了什么。帮每个人一个忙,把名字改好 请,请在你的“代码想法”之间留一点空
问题是在数组中找到一个数字,该数字的所有值都等于另一个数字b 不是答案,但我确实有一些建设性的意见要给你 阅读上面的代码是有害的。它伤害了我的眼睛和大脑。为什么?
b
,n
,a
-我一眼就不知道这些是什么,我不想通过理解你写的内容来找出答案。我打赌你也不会明白你下周写了什么。帮每个人一个忙,把名字改好无论如何,你的问题有点离题了,这很可能会结束,因为你自己很少努力解决它,但我的评论可能会帮助你完成未来的编码项目,至少会让其他人更容易帮助你前进。你付多少钱?正如其他人所说,试一试。尝试传入每个线程应该处理的范围的参数…一种方法。
#include <conf.h>
#include <kernel.h>
#include <stdio.h>
#define MAX_ITEMS 50
typedef long double LD;
int run_solve_equ();
void xmain(){
int pid;
pid = create(run_solve_equ, 20*INITSTK, INITPRIO, "B", 0);
resume(pid);
}
int solve_equ(LD b, int n, LD a[], int choosen[] ){
if ( n == 1 )
if (a[0] == b) {
choosen[0] = 1;
return 1;
} /* if */
else if (b == 0) {
choosen[0] = 0;
return 1;
} /* else if*/
else {
choosen[0] = 0;
return 0;
}
else /* n > 1 */
if (solve_equ(b, n-1, a, choosen)) {
choosen[n-1] = 0;
return 1;
} /* if */
else if (solve_equ(b - a[n-1],n-1, a, choosen)) {
choosen[n-1] = 1;
return 1;
} /* else if */
else{
choosen[n-1] = 0;
return 0;
}
} /* solve_equ */
LD a[MAX_ITEMS];
int choosen[MAX_ITEMS];
char pstr[200];
extern long int tod;
int run_solve_equ() {
int n, i, result;
LD b, sum;
printf("How many numbers? No more than %d:", MAX_ITEMS );
scanf("%d",&n);
puts("Enter b:");
scanf("%Lf",&b);
a[0] = 1;
for (i = 1; i < n; i++)
a[i] = a[i-1]*2;
result = 0;
sprintf(pstr, "time = %ld\n", tod);
printf(pstr);
result = solve_equ(b,n, a, choosen);
sprintf(pstr, "time = %ld\n", tod);
printf(pstr);
sprintf(pstr, "Solution for b = %Lf, n = %d, value = %d :\n", b,
n,result);
printf(pstr);
printf("\ni:\n");
for (i = 0; i < n; i++) {
sprintf(pstr, "%-16d",i);
printf(pstr);
} // for
printf("\na[i]:\n");
for (i = 0; i < n; i++) {
sprintf(pstr, "%-16.1Lf", a[i]);
printf(pstr);
} // for
printf("\nchoosen[i]:\n");
for (i = 0; i < n; i++) {
sprintf(pstr, "%-16d", choosen[i]);
printf(pstr);
} // for
printf("\n");
sum = 0;
for (i = 0; i < n; i++)
if (choosen[i]) {
sum += a[i];
sprintf(pstr, " + %-16.1Lf", a[i]);
printf(pstr);
} /* if */
sprintf(pstr, " = %-16.1Lf\n", sum);
printf(pstr);
return 0;
}