Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改代码以使其并行 #包括 #包括 #包括 #定义最大项目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 - Fatal编程技术网

更改代码以使其并行 #包括 #包括 #包括 #定义最大项目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

更改代码以使其并行 #包括 #包括 #包括 #定义最大项目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-我一眼就不知道这些是什么,我不想通过理解你写的内容来找出答案。我打赌你也不会明白你下周写了什么。帮每个人一个忙,把名字改好 请,请在你的“代码想法”之间留一点空

我需要更改此程序,以便通过两个过程“并行”搜索: 每个用户将搜索n-1,第一个用户在[n-1]上,另一个用户不在。
问题是在数组中找到一个数字,该数字的所有值都等于另一个数字b

不是答案,但我确实有一些建设性的意见要给你

阅读上面的代码是有害的。它伤害了我的眼睛和大脑。为什么?

  • 变量名是非描述性的,通常只有一个字母(在I之外)
    b
    n
    a
    -我一眼就不知道这些是什么,我不想通过理解你写的内容来找出答案。我打赌你也不会明白你下周写了什么。帮每个人一个忙,把名字改好
  • 请,请在你的“代码想法”之间留一点空白。您的代码看起来像一个长时间运行的句子,它也隐藏了它的功能
  • 不要混合使用大括号和非大括号的代码——特别是当缩进不一致时。现在很难遵循你的if逻辑。继续吧,浪费几字节的硬盘空间,也许。25秒添加大括号,或者至少修复缩进
  • 写一些有用的评论<代码>/*如果*/是一个糟糕的评论,而你在任何地方都做类似的事情。我知道什么是if,但也许是一个快速的不是你正在检查什么 <>不要在代码的中间混合全局和外部定义。把它们放在一起,这样就更容易记住什么是全球性的,什么不是全球性的。虽然这是最轻微的冒犯,但其他人可能不同意

  • 无论如何,你的问题有点离题了,这很可能会结束,因为你自己很少努力解决它,但我的评论可能会帮助你完成未来的编码项目,至少会让其他人更容易帮助你前进。

    你付多少钱?正如其他人所说,试一试。尝试传入每个线程应该处理的范围的参数…一种方法。
       #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;
       }