C言語での間違いを見つけてください

このQ&Aのポイント
  • C言語のコードに間違いがあります。正しいコードを見つけてください。
  • C言語のコードにエラーが含まれています。修正してください。
  • C言語のプログラムに誤りがあります。正しいプログラムを作成してください。
回答を見る
  • ベストアンサー

C言語 間違ったところを見つけてください。

/* 自動検索装置        */ /* 2012年9月4日  MICR0904  */ /* AT90S2323/2343       */ #include <avr\io.h> int main (void) /*   汎用レジスターの指定     */ { long ka; long ke; long ke1; long k10; int kk; int pa; long tm1; long tm2; long tm3; DDRB = 0xfe; /* 11111110 PB0;入力 PB1;出力 */ if (!(PINB && BV(PB0)) tm2=0; tm1++; pa=tm1/100; if (pa>=10) { ka =12345; /* カルテNO ka=1~99999 */ ke = 0; /* 検索アドレス */ ke1 = 0; /* 桁検索アドレス */ k10 = 1; /* 桁x10 */ kk = 0; /* 桁カウンタ   */ pa = 0; /* 信号カウンタ */ tm1 = 0; /* 信号ONタイマ */ tm2 = 0; /* 信号OFFタイマ */ tm3 = 0; /* LED,ON-OFFタイマ */ } return 0; else ( (PINB && BV (PB0)) tm1=0; tm2++; if {(tm2!=100) return 0;} else if (tm2==100) if {(kk>5) return 0; } else if (kk<=4) ke1 = pa*k10; ke = ke+ke1; k10 = k10*10; kk ++; pa = 0; ke1 =0; tm2 = 0; if (kk!=5) return 0; else if (kk==5) if( !(PINB & BV (PB0)) return 0; else if ((PINB && BV (PB0)) if (ka !=ke) return 0; else if (ka==ke) do{ tm3=800; do{ tm3--; if (tm3>400) POBTB 0xff; else if (tm3<400) PORTB 0xfe; } while (tm3 !=0); } while (tm3 ==0); /* end of file */ }

  • micr1
  • お礼率2% (1/44)

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.1

一般論として... > #include <avr\io.h> ヘッダ名に逆斜線(\は逆斜線の意味ですよね?)が含まれる場合の動作は未定義です。 あとは、どう動いてほしいのか、現在どうなのか、(想像はつきますが)処理系は何なのかを明確にしないと何ともいえません。

関連するQ&A

  • C言語 間違ったところを見つけてください

    /* 自動検索装置        */ /* 2012年9月4日  MICR0904  */ /* AT90S2323/2343       */ #include <avr\io.h> int main (void) /*   汎用レジスターの指定     */ { long ka; long ke; long ke1; long k10; int kk; int pa; long tm1; long tm2; long tm3; DDRB = 0xfe; /* 11111110 PB0;入力 PB1;出力 */ if (!(PINB && BV(PB0)) tm2=0; tm1++; pa=tm1/100; if (pa>=10) { ka =12345; /* カルテNO ka=1~99999 */ ke = 0; /* 検索アドレス */ ke1 = 0; /* 桁検索アドレス */ k10 = 1; /* 桁x10 */ kk = 0; /* 桁カウンタ   */ pa = 0; /* 信号カウンタ */ tm1 = 0; /* 信号ONタイマ */ tm2 = 0; /* 信号OFFタイマ */ tm3 = 0; /* LED,ON-OFFタイマ */ } return 0; else ( (PINB && BV (PB0)) tm1=0; tm2++; if {(tm2!=100) return 0;} else if (tm2==100) if {(kk>5) return 0; } else if (kk<=4) ke1 = pa*k10; ke = ke+ke1; k10 = k10*10; kk ++; pa = 0; ke1 =0; tm2 = 0; if (kk!=5) return 0; else if (kk==5) if( !(PINB & BV (PB0)) return 0; else if ((PINB && BV (PB0)) if (ka !=ke) return 0; else if (ka==ke) do{ tm3=800; do{ tm3--; if (tm3>400) POBTB 0xff; else if (tm3<400) PORTB 0xfe; } while (tm3 !=0); } while (tm3 ==0); /* end of file */ } 流れ図は/* 自動検索装置        */ /* 2012年9月4日  MICR0904  */ /* AT90S2323/2343       */ #include <avr\io.h> int main (void) /*   汎用レジスターの指定     */ { long ka; long ke; long ke1; long k10; int kk; int pa; long tm1; long tm2; long tm3; DDRB = 0xfe; /* 11111110 PB0;入力 PB1;出力 */ if (!(PINB && BV(PB0)) tm2=0; tm1++; pa=tm1/100; if (pa>=10) { ka =12345; /* カルテNO ka=1~99999 */ ke = 0; /* 検索アドレス */ ke1 = 0; /* 桁検索アドレス */ k10 = 1; /* 桁x10 */ kk = 0; /* 桁カウンタ   */ pa = 0; /* 信号カウンタ */ tm1 = 0; /* 信号ONタイマ */ tm2 = 0; /* 信号OFFタイマ */ tm3 = 0; /* LED,ON-OFFタイマ */ } return 0; else ( (PINB && BV (PB0)) tm1=0; tm2++; if {(tm2!=100) return 0;} else if (tm2==100) if {(kk>5) return 0; } else if (kk<=4) ke1 = pa*k10; ke = ke+ke1; k10 = k10*10; kk ++; pa = 0; ke1 =0; tm2 = 0; if (kk!=5) return 0; else if (kk==5) if( !(PINB & BV (PB0)) return 0; else if ((PINB && BV (PB0)) if (ka !=ke) return 0; else if (ka==ke) do{ tm3=800; do{ tm3--; if (tm3>400) POBTB 0xff; else if (tm3<400) PORTB 0xfe; } while (tm3 !=0); } while (tm3 ==0); /* end of file */ } マイクロチップの型式は/* AT90S2323/2343        ネットに書いてあるAVRISP mkllとAVR Studio 4で始めるAVRマイコン開発でAVR Studio 4をインストールして打ち込んだものです。 AVRISP mkllとAVR Studio 4で始めるAVRマイコン開発にかいてあることが間違っている場合は どの本を買えばいいんですか

  • C言語間違っている所を見つけてください。

    /* 自動□□装置           */ /* 2013年01月08日 MICR-V1      */ /* AVR TOOLS    AVR studio 4   */ /* マイコン型式    AT90S2323/2343   */ #include <avr\io.h> int main(void) long ka; long ke; long ke1; long k10; int kk; int pa; long tm1; long tm2; long tm3; DDRB =0xfe; /* 11111110 PB0;入力 PB1;出力*/ /* 1箇所エラー */ if (!(PINB&_BV(PB0)) /*  PB0入力有り  */ /* 1箇所エラー */ { {tm2=0; tm1++; pa=tm1/100;} if (pa>=10) { ka =12345; /* カルテNO ka=1~99999 */ ke = 0; /* 検索アドレス */ ke1 = 0; /* 桁検索アドレス */ k10 = 1; /* 桁x10 */ kk = 0; /* 桁カウンタ   */ pa = 0; /* 信号カウンタ */ tm1 = 0; /* 信号ONタイマ */ tm2 = 0; /* 信号OFFタイマ */ tm3 = 0; /* LED,ON-OFFタイマ */ return 0; else return 0;} else if((PINB &_BV(PB0)) /* PB0入力無し */ { {tm1=0; tm2++;} if {(tm2!=100) return 0;} else if (tm2==100) if {(kk>=5) return 0; } else if (kk<=4) { ke1 = pa*k10; ke = ke+ke1; k10 = k10*10; kk ++; pa = 0; ke1 =0; tm2 = 0; } if (kk!=5) return 0; else if (kk==5) if (ka !=ke) return 0; } else if (ka==ke) do{ tm3=800; do{ tm3--; if (tm3>400) POBTB 0xff; else if (tm3<400) PORTB 0xfe; } while (tm3 !=0); } while (tm3 ==0); /* end of file */ /* Build failed with 3 errors and 0 warnings...*/ /* 1箇所エラー */

  • マイコンソフトビルド異常修正方法を教えてください。

    /*------ 自動□□装置        ------------*/ /*------ 2013年02月06日 MICR-V1   -----------*/ /*------ AVR TOOLS    AVR studio 4 ----------*/ /*------ マイコン型式    AT90S2323/2343 --------*/ #include <stdio.h> long ka; long ke; long ke1; long k10; int kk; int pa; long tm1; long tm2; long tm3; #include <avr\io.h> #define _PORT PORTB #define _DDR DDRB #define _PIN PINB /*---------------------メインプログラム------------------*/ int main(void) { DDRB = 0xfe; /*---- 11111110 PB0;入力 PB1;出力--*/ /*------------------ PB0入力有り-------------------*/ if (!(PINB &_BV (PB0)) { /*異常(1)../micrv001.c:31: error: expected ')' before '{' token ------*/ {tm2 = 0; tm1++; pa=tm1/100; } if (pa>=10) { ka =12345; /* ------ □ NO ka=1~99999 ---------*/ ke = 0; /*------- 検索アドレス ---------*/ ke1 = 0; /*------- 桁検索アドレス ---------*/ k10 = 1; /*------- 桁x10 ---------*/ kk = 0; /*------- 桁カウンタ ---------*/ pa = 0; /*------- 信号カウンタ ---------*/ tm1 = 0; /*------- 信号ONタイマ ---------*/ tm2 = 0; /*------- 信号OFFタイマ ---------*/ tm3 = 0; /*--------LED,ON-OFFタイマ ---------*/ return (0); } else if return (0); /* ----------------PB0入力無し---------------------*/ else ((PINB &_BV (PB0)) {tm1=0; tm2++; } if {(tm2!=100) return (0);} else (tm2==100) if {(kk>=5) return (0);} else if (kk<=4) { ke1 = pa*k10; ke = ke+ke1; k10 = k10*10; kk ++; pa = 0; ke1 = 0; tm2 = 0; } if (kk!=5) return (0); else if (kk==5) if (ka!=ke) return (0); else if (ka==ke) /*-------------------LED表示 ---------------------*/ do { tm3=800; do { tm3--; if (tm3>400) POBTB 0xff; else if (tm3<400) PORTB 0xfe; } while (tm3 !=0); } while (tm3 ==0); } /*異常(2)../micrv001.c:79: error: expected declaration or statement at end of input ----*/ /* ------------------- end of file ---------------*/ /* Build failed with 2 errors and 0 warnings... */

  • プログラムをBuildすると、エラーが発生

    /* 自動□□装置           */ /* 2013年01月31日 MICR-V1      */ /* AVR TOOLS    AVR studio 4   */ /* マイコン型式    AT90S2323/2343   */ #include <avr/io.h> #include <stdio.h> int main (void) long ka; long ke; long ke1; long k10; int kk; int pa; long tm1; long tm2; long tm3; #define _PORT PORTB #define _DDR DDRB #define _PIN PINB DDRB = 0xfe; /* 11111110 PB0;入力 PB1;出力 */ /* .c:23: error: expected declaration specifiers before '(' token */ if (!(PINB &_BV (PB0)) /*  PB0入力有り  */ /* .c:26: error: expected declaration specifiers before 'if' */ { {tm2=0; tm1++; pa=tm1/100;} if (pa>=10) { ka =12345; /* カルテNO ka=1~99999 */ ke = 0; /* 検索アドレス */ ke1 = 0; /* 桁検索アドレス */ k10 = 1; /* 桁x10 */ kk = 0; /* 桁カウンタ   */ pa = 0; /* 信号カウンタ */ tm1 = 0; /* 信号ONタイマ */ tm2 = 0; /* 信号OFFタイマ */ tm3 = 0; /* LED,ON-OFFタイマ */ else return 0; else ((PINB &_BV (PB0)) /* PB0入力無し */ { {tm1=0; tm2++;} if {(tm2!=100) return 0;} else (tm2==100) if {(kk>=5) return 0; } else if (kk<=4) { ke1 = pa*k10; ke = ke+ke1; k10 = k10*10; kk ++; pa = 0; ke1 =0; tm2 = 0; } if (kk!=5) return 0; else if (kk==5) if (ka !=ke) return 0; } else if (ka==ke) do{ tm3=800; do{ tm3--; if (tm3>400) POBTB 0xff; else if (tm3<400) PORTB 0xfe; } while (tm3 !=0); } while (tm3 ==0); /* end of file */ /* 77: error: old-style parameter declarations in prototyped function definition */ /* Build failed with 3 errors and 0 warnings... * 上記のプログラムをBuildすると、エラーが23、26、77行に発生します、どう訂正すれば良いか具体的に教えてください。

  • マイコンビルドエラー修正方法を教えて下さい。

    /*------ 自動□□装置 -----------*/ /*------ 2013年02月26日 MICR-V1 -----------*/ /*------ AVR TOOLS AVR studio 4 ----------*/ /*------ マイコン型式 AT90S2323/2343 --------*/ #include <stdio.h> long ka; long ke; long ke1; long k10; int kk; int pa; long tm1; long tm2; long tm3; long kn; #include <avr\io.h> #define _PORT PORTB #define _DDR DDRB #define _PIN PINB /*---------------------メインプログラム-------------------*/ int main(void) { DDRB = 0xfe; /*---- 11111110 PB0;入力 PB1;出力--*/ /*------------------ PB0入力有り--------------------*/ while(!(PINB &_BV (PB0)) { /* 異常(1)../micrv001.c:30: error: expected ')' before '{' token-----*/ tm2 = 0; tm1++; pa=tm1/100; if (pa>=10); ka =12345; /* ------ □ NO ka=1~99999----------*/ ke = 0; /*------- 検索アドレス ---------*/ ke1 = 0; /*------- 桁検索アドレス ---------*/ k10 = 1; /*------- 桁x10 ---------*/ kk = 0; /*------- 桁カウンタ ---------*/ pa = 0; /*------- 信号カウンタ ---------*/ tm1 = 0; /*------- 信号ONタイマ ---------*/ tm2 = 0; /*------- 信号OFFタイマ ---------*/ tm3 = 0; /*--------LED,ON-OFFタイマ ---------*/ } /* ----------------PB0入力無し---------------------*/ while ((PINB &_BV (PB0)) { tm1=0; tm2++; if (tm2==100) if (kk<=4) ke1 = pa*k10; ke = ke+ke1; k10 = k10*10; kk ++; pa = 0; ke1 = 0; tm2 = 0; if (kk==5) if (ka==ke) } /*-------------------LED表示 ---------------------*/ do { tm3=800; do { tm3--; if (tm3>400) PORTB 0xff; else if (tm3<400) PORTB 0xfe; } while (tm3 !=0); } while (tm3 ==0); } /*異常(2)../micrv001.c:78: error: expected declaration or statement at end of input ----*/ /*-------------------- end of file ---------------*/ /* Build failed with 2 errors and 0 warnings... */

  • C言語のqsortについて

    現在、qsortのコードに取り組んでいます。 if (strcmp(ad, "ASC") == 0) { qsort(sin, sizeof(cnt), sizeof(sin[0]), cmp_u); } else { qsort(sin, sizeof(cnt), sizeof(sin[0]), cmp_d); } 恐らくこちらのqsortでの第二引数が書き方を間違えていると思うのですが、修正の方法が分からず、どなたか教えて頂けないでしょうか? #include <stdio.h> #include <time.h> #include <string.h> #include <stdlib.h> static char ad[10]; int cmp_u(const void* a, const void* d) { return strcmp((char*)a, (char*)d); } int cmp_d(const void* a, const void* d) { return strcmp((char*)d, (char*)a); } int main() { int num1, num2; char op; float answer; int r,i; FILE* fp; char c[11]; char sin[1000][1000]; char ad[8]; fp = fopen("log.txt", "a+"); if (fp == NULL) { printf("ファイルオープン失敗\n"); return -1; } while (1) { r = scanf("%d%c%d", &num1, &op, &num2); if (r != 3) { puts("input error"); return 1; } if (op == '+') { answer = num1 + num2; } else if (op == '-') { answer = num1 - num2; } else if (op == '*') { answer = num1 * num2; } else if (op == '/') { answer = (float)num1 / num2; } time_t t = time(NULL); struct tm* tm = localtime(&t); printf("%d/%02d/%02d ", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); printf("%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec); printf("%d%c%d,%f\n", num1, op, num2, answer); fprintf(fp, "%d/%02d/%02d ", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday); fprintf(fp, "%02d:%02d:%02d ", tm->tm_hour, tm->tm_min, tm->tm_sec); fprintf(fp, "%d%c%d,%f\n", num1, op, num2, answer); printf("計算を続けますか?"); scanf("%s\n", &c); if (strcmp(c, "no") == 0) { break ; } } fclose(fp); fp = fopen("log.txt", "r"); int cnt = 0; for (i = 0;i < 1000;i = i + 1) { if (fgets(sin[i], sizeof(sin[0]), fp)) ++cnt; else break; } fclose(fp); printf("ASC or DESC: "); scanf("%s", ad); if (strcmp(ad, "ASC") == 0) { qsort(sin, sizeof(cnt), sizeof(sin[0]), cmp_u); } else { qsort(sin, sizeof(cnt), sizeof(sin[0]), cmp_d); } for (i = 0;i < cnt;i = i + 1) { printf("%s", sin[i]); } return 0; }

  • C言語プログラムの並列化について

    OpenMPを用いて以下のC言語プログラムを並列化させようと考えています。 (sumの部分は今は単純な足し算ですが、kk0~kk4を用いた複雑な計算を考えています。) ------------------------------------------------------------------------------ #include <stdio.h> #include <time.h> #define PARA_NUM 200 int main(void) { long kk0, kk1, kk2, kk3, kk4; long i; long parameter_num = 5; long pn[parameter_num]; long sum; long sum_max = 0; long sum_min = PARA_NUM*parameter_num; long sum_min0 = PARA_NUM*parameter_num; long sum_max0 = 0; for( kk0 = 0; kk0 < PARA_NUM-4; kk0++ ) { for( kk1 = kk0+1; kk1 < PARA_NUM-3; kk1++ ) { for( kk2 = kk1+1; kk2 < PARA_NUM-2; kk2++ ) { for( kk3 = kk2+1; kk3 < PARA_NUM-1; kk3++ ) { for( kk4 = kk3+1; kk4 < PARA_NUM; kk4++ ) { sum = kk0+kk1+kk2+kk3+kk4; if ( sum_max0 < sum ) {sum_max0 = sum;} if ( sum_min0 > sum ) {sum_min0 = sum;} }}}}} printf("max: %d\n", sum_max0); printf("min: %d\n", sum_min0); return 0; } ------------------------------------------------------------------------------ 以上のプログラムを以下のように書き変えました。 ------------------------------------------------------------------------------ #include <stdio.h> #include <time.h> #define PARA_NUM 200 int main(void) { long kk0, kk1, kk2, kk3, kk4; long i; long parameter_num = 5; long pn[parameter_num]; long sum; long sum_max = 0; long sum_min = PARA_NUM*parameter_num; long sum_min0 = PARA_NUM*parameter_num; long sum_max0 = 0; #pragma omp parallel for private(kk0, kk1, kk2, kk3, kk4, sum, sum_min0, sum_max0) schedule(static,1) for( kk0 = 0; kk0 < PARA_NUM-4; kk0++ ) { sum_max0=0; sum_min0=PARA_NUM*parameter_num; for( kk1 = kk0+1; kk1 < PARA_NUM-3; kk1++ ) { for( kk2 = kk1+1; kk2 < PARA_NUM-2; kk2++ ) { for( kk3 = kk2+1; kk3 < PARA_NUM-1; kk3++ ) { for( kk4 = kk3+1; kk4 < PARA_NUM; kk4++ ) { sum = kk0+kk1+kk2+kk3+kk4; if ( sum_max0 < sum ) {sum_max0 = sum;} if ( sum_min0 > sum ) {sum_min0 = sum;} }}}} #pragma omp critical { if ( sum_max < sum_max0 ) {sum_max = sum_max0;} if ( sum_min > sum_min0 ) {sum_min = sum_min0; } }} printf("max: %d\n", sum_max); printf("min: %d\n", sum_min); return 0; } ------------------------------------------------------------------------------ インテルコンパイラ(icl)にてコンパイルした後、 windows7に標準で搭載されているelapsedtimeで実行時間を測定した結果、 上のプログラムは 2239milliseconds 下のプログラムは446millisecondsとなりました。(cpuは8コア) 8コア使うため実行時間は1/8に近づくと考えていましたが1/5程度となってしまいました。 下のプログラムより良い並列処理をするアルゴリズムはあるのでしょうか。 また#pragma omp criticalの構文は現在の位置が最適なのでしょうか。

  • C言語の課題で悩んでいます

    線形最小2乗法と直接探索法の併用により、あるデータを最小2乗近似によって係数を求めるプログラムを作りました。 プログラムを実行したところ以下の警告が出て悩んでいます。 114行目 互換性のないポインタ型からの引数 1 個の `sweep' を渡しますです 114行目 互換性のないポインタ型からの引数 5 個の `sweep' を渡しますです 分りやすいように114行目のところに@がつけてあります。 どなたかご指摘お願いします。 #include<stdio.h> #include<math.h> #define eps 1.e-5 void sweep(double *,double *,int,int,int *,int); void DSO(double *,double *,int *,double *,double *,int,int); void FUN(double *,double *,double *,int,double *,int *); int main(void) { double a[1],da[1],x[7],y[7]; int i,n,delta[1]; scanf("%d",&n); for(i=0;i<n;++i) scanf("%lf %lf",&x[i],&y[i]); scanf("%lf %lf",&a[0],&da[0]); printf("Iteration b(1) b(2) b(3) a f\n"); DSO(a,da,delta,x,y,1,n); } /*DSO*/ void DSO(double *pa,double *pda,int *pdelta,double *px,double *py,int m,int n) { double ak,akp,akm,f0,fp,fm; int k,j,iteration=0; for(k=0;k<m;++k){ *(pdelta+k)=1; } FUN(pa,px,py,n,&f0,&iteration); do{ j=0; for(k=0;k<m;++k){ ak=*(pa+k); akp=*(pa+k)+*(pda+k); akm=*(pa+k)-*(pda+k); if(*(pdelta+k)==1){ *(pa+k)=akp; FUN(pa,px,py,n,&fp,&iteration); if(f0>fp){ *(pdelta+k)=1; f0=fp; break; } else{ *(pa+k)=akm; FUN(pa,px,py,n,&fm,&iteration); if(f0>fm){ *(pdelta+k)=-1; f0=fm; break; } else{ j++; *(pa+k)=ak; } } } else{ *(pa+k)=akm; FUN(pa,px,py,n,&fm,&iteration); if(f0>fm){ *(pdelta+k)=-1; f0=fm; break; } else{ *(pa+k)=akp; FUN(pa,px,py,n,&fp,&iteration); if(f0>fp){ *(pdelta+k)=1; f0=fp; break; } else{ j++; *(pa+k)=ak; } } } } }while(j!=m); printf("*** SOLVED ***\n"); FUN(pa,px,py,n,&f0,&iteration); return; } /*Function for sum of square errors*/ void FUN(double *pa,double *px,double *py,int n,double *pf,int *pi) { double b[3],c[3][4],iwork[3],t[3],yi; int i,ILL; c[0][0]=n; c[0][1]=0.; c[0][2]=0.; c[0][3]=0.; c[1][1]=0.; c[1][2]=0.; c[1][3]=0.; c[2][2]=0.; c[2][3]=0.; for(i=0;i<n;i++){ c[0][1]+=log10(*(px+i)); c[1][1]+=log10(*(px+i))*log10(*(px+i)); c[0][2]+=pow(log10(*(px+i)),*(pa+0)); c[1][2]+=pow(log10(*(px+i)),*(pa+0)+1.); c[2][2]+=pow(log10(*(px+i)),2.**(pa+0)); c[0][3]+=*(py+i); c[1][3]+=*(py+i)*log10(*(px+i)); c[2][3]+=*(py+i)*pow(log10(*(px+i)),*(pa+0)); } c[1][0]=c[0][1]; c[2][0]=c[0][2]; c[2][1]=c[1][2]; sweep(c,t,3,4,iwork,ILL); @114行目 for(i=0;i<3;++i){ b[i]=c[i][3]; } *pf=0.; for(i=0;i<n;++i){ yi=b[0]+b[1]*log10(*(px+i))+b[2]*pow(log10(*(px+i)),*(pa+0)); *pf+=(*(py+i)-yi)*(*(py+i)-yi); } printf("%6d %12.3e%12.3e%12.3e%7.2f%11.2e\n", *pi,b[0],b[1],b[2],*(pa+0),*pf); ++*pi; return; } /*Gauss-Jordan method*/ void sweep(double *pa,double *pt,int n,int m,int *piwork,int ILL) { double max,w; int i,j,k,iw,p,q; for(i=0;i<n;++i){ max=fabs(*(pa+m*i)); for(j=0;j<n;++j){ if(max<fabs(*(pa+m*i+j)))max=fabs(*(pa+m*i+j)); } for(j=0;j<m;++j) *(pa+m*i+j)=*(pa+m*i+j)/max; } for(j=0;j<n;++j){ max=fabs(*(pa+j)); for(i=0;i<n;++i){ if(max<fabs(*(pa+m*i+j)))max=fabs(*(pa+m*i+j)); } *(pt+j)=max; for(i=0;i<n;++i) *(pa+m*i+j)=*(pa+m*i+j)/max; } for(i=0;i<n;++i){ *(piwork+i)=i; } for(k=0;k<n;++k){ max=fabs(*(pa+m*k+k)); p=k; q=k; for(j=k;j<n;++j){ for(i=k;i<n;++i){ if(max<fabs(*(pa+m*i+j))){ max=fabs(*(pa+m*i+j)); p=i; q=j; } } } if(max<=eps){ ILL=1; printf("MATRIX IS ILL\n"); return; } for(i=0;i<n;++i){ w=*(pa+m*i+k); *(pa+m*i+k)=*(pa+m*i+q); *(pa+m*i+q)=w; } for(j=k;j<m;++j){ w=*(pa+m*k+j); *(pa+m*k+j)=*(pa+m*p+j); *(pa+m*p+j)=w; } i=*(piwork+k); *(piwork+k)=*(piwork+q); *(piwork+q)=i; for(j=k+1;j<m;++j){ *(pa+m*k+j)=*(pa+m*k+j)/(*(pa+m*k+k)); } for(i=0;i<n;++i){ if(i!=k){ for(j=k+1;j<m;++j){ *(pa+m*i+j)=*(pa+m*i+j)-*(pa+m*i+k)*(*(pa+m*k+j)); } } } } for(j=n;j<m;++j){ for(i=0;i<n;++i){ iw=*(piwork+i); *(pa+m*iw+n-1)=*(pa+m*i+j); } for(i=0;i<n;++i){ *(pa+m*i+j)=*(pa+m*i+n-1)/(*(pt+i)); } } return; }

  • C言語に直して下さい

    VisualC++で円周率を求めるプログラムなのだそうですが、 自分はC言語しか使ったことがないため、よく分かりません。 Cでコンパイルできるように直していただけないでしょうか。 よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define N 21 #define K 100000 void add(unsigned long a[],unsigned long b[]) { int c = 0, tmp; for (int i = N - 1; i > -1; i--) { tmp = a[i] + b[i] + c; a[i] = tmp % K; c = tmp / K; } } void sub(unsigned long a[],unsigned long b[]) { int c = 0, x = 0; for (int i = N - 1; i > -1 ; i--) { x = c; if (a[i] < b[i] + x ) c = 1; else c = 0; a[i] = c * K + a[i] - b[i] - x; } } void div(unsigned long a[], unsigned long x) { int c=0, tmp; if (x >= K) { printf("Div Error\n"); getchar(); exit(1); return; } for (int i = 0; i < N ; i++) { tmp = (a[i] + c * K) / x; c = (a[i] + c * K) % x; a[i] = tmp; } } void clear(unsigned long a[]) { memset(a,0x00,sizeof(a)*N); } void set(unsigned long a[], unsigned long b[]) { memcpy(a,b,sizeof(a)*N); } void set(unsigned long a[], unsigned long b) { if (b<K) { clear(a); a[0]=b; } } int _tmain(int argc, _TCHAR* argv[]) { unsigned long pai[N], fn[N], gn[N], tmp1[N], tmp2[N]; int i; unsigned long n; clear(pai); clear(fn); clear(gn); clear(tmp1); clear(tmp2); set(fn, 16*5); set(gn, 4*239); for(n=0;n<40000;n++) { div(fn, 25); div(gn, 239); div(gn, 239); set(tmp1, fn); div(tmp1, 2*n+1); set(tmp2, gn); div(tmp2, 2*n+1); if (n%2==0) { add(pai, tmp1); sub(pai, tmp2); }else{ add(pai, tmp2); sub(pai, tmp1); } } for (i=0;i<N;i++) { printf("%5lu ", pai[i]); } getchar(); return 0; }

  • エラー C言語 プログラミングについて

    #include<stdio.h> int leapYear(int); int main(void){ int year,i; for(i=2001;i=2999;i++){ year=i; printf("%d leap = %d \n",i,leapYear(int year)); return 0; } } int leapYear(int year){ if(year%100==0){ return 0; } else if(year%400==0){ return 1; } else if(year%4==0 && year%100!=0){ return 1; } } をコンパイルすると11行目に式の構文エラーが出るんですが どうしてでしょうか?? 間違ってない気がするんですけど。。

専門家に質問してみよう