質問編集履歴

2 編集

carnage0216

carnage0216 score 122

2018/07/28 21:54  投稿

プログラムが正しいかどうかの確認をお願い致します。
```
https://qiita.com/haya_walker/items/d64a5fc624c65a324fa2
```こちらのサイトの方程式を使わせていただきました
以下は自作のプログラムです。
```
#include <stdio.h>
#define N 3
int main(void) {
   float a[N][N+1] = {
   {5,-1,-1,0},
   { 2,1,-3,-5 },
   { 1,1,1 ,6} };   // The matrix
   
   int t;
   int u;
   for (t = 0; t <= 3; t++) {
       for (u = 0; u <= 3; u++) {
           printf("中身は%fです\n", a[t][u]);
   
       }}
   int i;
   float d = a[1][0] / a[0][0];
   for (i = 0; i <= 3; i++) {//forを使う上で上限がなかったので3までが上限なのでi<=3と書いた。
       a[1][i] = a[1][i] - a[0][i] * d;
       {
           printf("a[1][%d]=%fとなる\n", i,a[1][i]);
       }
       //printf("a[1][%d]= a[1][%d]- a[0][%d]* a[0][%d]/ a[0][%d]である\n", i, i, i, i, i);
   }
   
   float r;
   r = a[2][0] / a[0][0];
   for (i = 0; i <= 3; i++) {
       a[2][i] = a[2][i] - a[0][i] * r;
   }
   int I;
   for (I = 0; I <= 3; I++) {
       printf("a[2][%d]=%fとなる\n", I,a[2][I]);
       }
   float z;
   z= a[2][1] / a[1][1];
   int y; //iは1から3まで入るのでkに+1した形で入ってもらいiを利用する。kはforより3までとする。
   for (y = 0; y <= 3; y++) {
       a[2][y] = a[2][y] - a[1][y] * z;
       printf("a[2][%d]=%fとなる\n", y, a[2][y]);
   }
   float g = a[2][3] / a[2][2];
   printf("Z=%f\n", g);
   float h;
   h = a[1][3] / a[1][2] + a[1][1] / a[1][2];
   printf("Y=%f\n", h);
   float j;
   j = h / a[0][0] + g / a[0][0];
   printf("X=%f\n", j);
   return 0;
}
```
以下は実行結果です。
```
中身は5.000000です
中身は-1.000000です
中身は-1.000000です
中身は0.000000です
中身は2.000000です
中身は1.000000です
中身は-3.000000です
中身は-5.000000です
中身は1.000000です
中身は1.000000です
中身は1.000000です
中身は6.000000です
中身は0.000000です
中身は0.000000です
中身は0.000000です
中身は0.000000です
a[1][0]=0.000000となる
a[1][1]=1.400000となる
a[1][2]=-2.600000となる
a[1][3]=-5.000000となる
a[2][0]=0.000000となる
a[2][1]=1.200000となる
a[2][2]=1.200000となる
a[2][3]=6.000000となる
a[2][0]=0.000000となる
a[2][1]=0.000000となる
a[2][2]=3.428571となる
a[2][3]=10.285715となる
Z=3.000000
Y=1.384615
X=0.876923
```
サイトでの答えは 
```
x=1, y=2, z=3
```なのですが、私のプログラムの出した答えは正しいのでしょうか?紙にも計算してみましたがサイトとは違う答えになりました。
<編集>7/28
以下が正しいプログラムです。皆様の知恵をお借りしてできました。どうもありがとうございます。  
```
#include <stdio.h>
#include <time.h>
#define N 3
int main(void) {
   clock_t start, end;
   start = clock();
   float a[N][N+1] = {
   {5,-1,-1,0},
   { 2,1,-3,-5 },
   { 1,1,1 ,6} };   // The matrix
   
   int t;
   int u;
   for (t = 0; t <= 3; t++) {
       for (u = 0; u <= 3; u++) {
           printf("中身は%fです\n", a[t][u]);
           //printf("中身は%fです\n", a[0][0]);
           //printf("中身は%fです\n", a[0][0]);
       }}
   int i;
   float d = a[1][0] / a[0][0];
   for (i = 0; i <= 3; i++) {//forを使う上で上限がなかったので3までが上限なのでi<=3と書いた。
       a[1][i] = a[1][i] - a[0][i] * d;
       {
           printf("a[1][%d]=%fとなる\n", i,a[1][i]);
       }
       //printf("a[1][%d]= a[1][%d]- a[0][%d]* a[0][%d]/ a[0][%d]である\n", i, i, i, i, i);
   }
       //printf("%fです\n", a[1][0]);
       //printf("%fです\n", a[1][1]);
       //printf("%fです\n", a[1][2]);
       //printf("%fです\n", a[1][3]);
       //int I;//forを使ってまとめた。
       //for (I = 0; I <= 3; I++) {
           //printf("forを使うと%fとなる\n", a[1][I]);
       //}
       
   float r;
   r = a[2][0] / a[0][0];
   for (i = 0; i <= 3; i++) {
       a[2][i] = a[2][i] - a[0][i] * r;
   }
   int I;
   for (I = 0; I <= 3; I++) {
       printf("a[2][%d]=%fとなる\n", I,a[2][I]);
       }
   float z;
   z= a[2][1] / a[1][1];
   int y; //iは1から3まで入るのでkに+1した形で入ってもらいiを利用する。kはforより3までとする。
   for (y = 0; y <= 3; y++) {
       a[2][y] = a[2][y] - a[1][y] * z;
       printf("a[2][%d]=%fとなる\n", y, a[2][y]);
   }
   float g = a[2][3] / a[2][2];
   printf("Z=%f\n", g);
   float h;
   h = a[1][3] / a[1][1] - a[1][2] / a[1][1]* a[2][3] / a[2][2];
   printf("Y=%f\n", h);
   float j;
   j = h / a[0][0] + g / a[0][0];
   printf("X=%f\n", j);
   end = clock();
   printf("%f sec\n", (double)(end - start) / CLOCKS_PER_SEC);
   return 0;
}
```
  • C++

    4418 questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • C

    4514 questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

1 編集

carnage0216

carnage0216 score 122

2018/07/28 21:53  投稿

プログラムが正しいかどうかの確認をお願い致します。
```
https://qiita.com/haya_walker/items/d64a5fc624c65a324fa2
```こちらのサイトの方程式を使わせていただきました
以下は自作のプログラムです。
```
#include <stdio.h>
#define N 3
int main(void) {
   float a[N][N+1] = {
   {5,-1,-1,0},
   { 2,1,-3,-5 },
   { 1,1,1 ,6} };   // The matrix
   
   int t;
   int u;
   for (t = 0; t <= 3; t++) {
       for (u = 0; u <= 3; u++) {
           printf("中身は%fです\n", a[t][u]);
   
       }}
   int i;
   float d = a[1][0] / a[0][0];
   for (i = 0; i <= 3; i++) {//forを使う上で上限がなかったので3までが上限なのでi<=3と書いた。
       a[1][i] = a[1][i] - a[0][i] * d;
       {
           printf("a[1][%d]=%fとなる\n", i,a[1][i]);
       }
       //printf("a[1][%d]= a[1][%d]- a[0][%d]* a[0][%d]/ a[0][%d]である\n", i, i, i, i, i);
   }
   
   float r;
   r = a[2][0] / a[0][0];
   for (i = 0; i <= 3; i++) {
       a[2][i] = a[2][i] - a[0][i] * r;
   }
   int I;
   for (I = 0; I <= 3; I++) {
       printf("a[2][%d]=%fとなる\n", I,a[2][I]);
       }
   float z;
   z= a[2][1] / a[1][1];
   int y; //iは1から3まで入るのでkに+1した形で入ってもらいiを利用する。kはforより3までとする。
   for (y = 0; y <= 3; y++) {
       a[2][y] = a[2][y] - a[1][y] * z;
       printf("a[2][%d]=%fとなる\n", y, a[2][y]);
   }
   float g = a[2][3] / a[2][2];
   printf("Z=%f\n", g);
   float h;
   h = a[1][3] / a[1][2] + a[1][1] / a[1][2];
   printf("Y=%f\n", h);
   float j;
   j = h / a[0][0] + g / a[0][0];
   printf("X=%f\n", j);
   return 0;
}
```
以下は実行結果です。
```
中身は5.000000です
中身は-1.000000です
中身は-1.000000です
中身は0.000000です
中身は2.000000です
中身は1.000000です
中身は-3.000000です
中身は-5.000000です
中身は1.000000です
中身は1.000000です
中身は1.000000です
中身は6.000000です
中身は0.000000です
中身は0.000000です
中身は0.000000です
中身は0.000000です
a[1][0]=0.000000となる
a[1][1]=1.400000となる
a[1][2]=-2.600000となる
a[1][3]=-5.000000となる
a[2][0]=0.000000となる
a[2][1]=1.200000となる
a[2][2]=1.200000となる
a[2][3]=6.000000となる
a[2][0]=0.000000となる
a[2][1]=0.000000となる
a[2][2]=3.428571となる
a[2][3]=10.285715となる
Z=3.000000
Y=1.384615
X=0.876923
```
サイトでの答えは 
```
x=1, y=2, z=3
```なのですが、私のプログラムの出した答えは正しいのでしょうか?紙にも計算してみましたがサイトとは違う答えになりました。
```なのですが、私のプログラムの出した答えは正しいのでしょうか?紙にも計算してみましたがサイトとは違う答えになりました。
<編集>7/28
```
#include <stdio.h>
#include <time.h>
#define N 3
int main(void) {
   clock_t start, end;
   start = clock();
   float a[N][N+1] = {
   {5,-1,-1,0},
   { 2,1,-3,-5 },
   { 1,1,1 ,6} };   // The matrix
   
   int t;
   int u;
   for (t = 0; t <= 3; t++) {
       for (u = 0; u <= 3; u++) {
           printf("中身は%fです\n", a[t][u]);
           //printf("中身は%fです\n", a[0][0]);
           //printf("中身は%fです\n", a[0][0]);
       }}
   int i;
   float d = a[1][0] / a[0][0];
   for (i = 0; i <= 3; i++) {//forを使う上で上限がなかったので3までが上限なのでi<=3と書いた。
       a[1][i] = a[1][i] - a[0][i] * d;
       {
           printf("a[1][%d]=%fとなる\n", i,a[1][i]);
       }
       //printf("a[1][%d]= a[1][%d]- a[0][%d]* a[0][%d]/ a[0][%d]である\n", i, i, i, i, i);
   }
       //printf("%fです\n", a[1][0]);
       //printf("%fです\n", a[1][1]);
       //printf("%fです\n", a[1][2]);
       //printf("%fです\n", a[1][3]);
       //int I;//forを使ってまとめた。
       //for (I = 0; I <= 3; I++) {
           //printf("forを使うと%fとなる\n", a[1][I]);
       //}
       
   float r;
   r = a[2][0] / a[0][0];
   for (i = 0; i <= 3; i++) {
       a[2][i] = a[2][i] - a[0][i] * r;
   }
   int I;
   for (I = 0; I <= 3; I++) {
       printf("a[2][%d]=%fとなる\n", I,a[2][I]);
       }
   float z;
   z= a[2][1] / a[1][1];
   int y; //iは1から3まで入るのでkに+1した形で入ってもらいiを利用する。kはforより3までとする。
   for (y = 0; y <= 3; y++) {
       a[2][y] = a[2][y] - a[1][y] * z;
       printf("a[2][%d]=%fとなる\n", y, a[2][y]);
   }
   float g = a[2][3] / a[2][2];
   printf("Z=%f\n", g);
   float h;
   h = a[1][3] / a[1][1] - a[1][2] / a[1][1]* a[2][3] / a[2][2];
   printf("Y=%f\n", h);
   float j;
   j = h / a[0][0] + g / a[0][0];
   printf("X=%f\n", j);
   end = clock();
   printf("%f sec\n", (double)(end - start) / CLOCKS_PER_SEC);
   return 0;
}
```
  • C++

    4418 questions

    C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

  • C

    4514 questions

    C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る