teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

情報の追加

2021/08/31 08:47

投稿

shousanryusan
shousanryusan

スコア0

title CHANGED
File without changes
body CHANGED
@@ -47,13 +47,13 @@
47
47
  {
48
48
  if(matrix1[i][j]!=0 )
49
49
  {
50
- d1[i] = j;
50
+ d1[i] = j;   /0からi-1番目までの非ゼロでない列番号
51
51
  printf("%d\n", d1[i]);
52
52
  }
53
53
  }
54
54
  for(j=i; j<n; j++) {
55
55
  if(matrix1[i][j]!=0 ) {
56
- d2[i] = j;
56
+ d2[i] = j;             /iからn-1番目までの非ゼロでない列番号
57
57
  printf("%d\n", d2[i]);
58
58
  }
59
59
  }

3

書式改善

2021/08/31 08:47

投稿

shousanryusan
shousanryusan

スコア0

title CHANGED
@@ -1,1 +1,1 @@
1
- ヤコビ法の連立一方程式解くプログラム
1
+ 元配列各行のゼロでない値の列番号の左端と右端をだすプログラム
body CHANGED
@@ -1,8 +1,61 @@
1
- C言語について
2
- C言語で要素数nの一次元配列を2つ使用て、疎行列で非ゼロ要素で始まる場所を一つの配列に、非ゼロ要素で終わる場所をもう一つの配列に入れるプログラムを知りたいです。付け加えとして疎行列では、ほとんどが0が多いので、行列の計算を圧縮するために非ゼロ要素の番地を各行ごとに端から端を特定してその容量内で計算するプログラムを作りたいのですが、なかなか思いつかず、苦戦しています。インターネットでは、さまざまなサイトを参照しました。上記に書かれたことに近い内容のものは発見できたのですが、表現したいプログラムとは少し違うようでした。if文やfor文を使いながら組み立てていくイメージはあるのですが、どうプログラムを作成してよいか、わかりません。プログラムを作成するヒントでも良いので、よろしければ、どなたか教えていただけないでしょうか。
3
- 例えば、のような正方行があったとします。この場合、4x4なの、n=4要素数となります。
4
- 1 2 0 0
5
- 3 1 2 0
6
- 0 2 1 0
7
- 0 0 1 1
8
- この行列の行成分を一次元配列として、各行ごとにゼロでない部分の左はしと右のはしの部分の場所を記憶します。
1
+ 先日は、見苦し質問をししまい、申し訳ありませんでした。自分で考えて次のようなプログラムを作成しました。以下に実現したいことを記載しました。何が足りないのか、アドバイスをいただけないでしょうか。
2
+ ### 前提・実現したいこと
3
+ 元配列で各行ゼロでない値の左端右端を導出るプログラムは途中まではうまくかけました
4
+ しかし、ゼロでない数値の列番号がすべて記憶されて出力してしまいます。なお、容量としては、各行の非ゼロでない数値の列番号の最小値と最大値を記憶することでうまくいくのだろうとは予想できたのですが、そのプログラム
5
+ ソースコードの二次元配列は例です。すべての二次元配列に対して成立させたいです。
6
+
7
+ ### 出力結果
8
+ 0
9
+ 1
10
+ 3
11
+ 0
12
+ 1
13
+ 2
14
+ 0
15
+ 3
16
+ 4
17
+
18
+
19
+ ### 該当のソースコード
20
+
21
+ ```C言語
22
+ ソースコード
23
+ ```
24
+ #include <stdio.h>
25
+
26
+ #define n 5
27
+
28
+ void main()
29
+ {
30
+ int i=0,j=0, k=0, m=0;
31
+
32
+ int matrix1[n][n] =
33
+ {{1,2,0,3,0}
34
+ ,{4,5,0,0,0}
35
+ ,{0,0,6,0,0}
36
+ ,{7,0,0,8,0}
37
+ ,{0,0,0,0,9}};
38
+
39
+
40
+
41
+
42
+ int d1[n];
43
+ int d2[n];
44
+ for(i=0; i < n; i++)
45
+ {
46
+ for(j=0; j < i; j++)
47
+ {
48
+ if(matrix1[i][j]!=0 )
49
+ {
50
+ d1[i] = j;
51
+ printf("%d\n", d1[i]);
52
+ }
53
+ }
54
+ for(j=i; j<n; j++) {
55
+ if(matrix1[i][j]!=0 ) {
56
+ d2[i] = j;
57
+ printf("%d\n", d2[i]);
58
+ }
59
+ }
60
+ }
61
+ }

2

情報の追加

2021/08/31 08:43

投稿

shousanryusan
shousanryusan

スコア0

title CHANGED
File without changes
body CHANGED
@@ -1,2 +1,8 @@
1
1
  C言語について
2
- C言語で要素数nの一次元配列を2つ使用して、疎行列で非ゼロ要素で始まる場所を一つの配列に、非ゼロ要素で終わる場所をもう一つの配列に入れるプログラムを知りたいです。付け加えとして疎行列では、ほとんどが0が多いので、行列の計算を圧縮するために非ゼロ要素の番地を各行ごとに端から端を特定してその容量内で計算するプログラムを作りたいのですが、なかなか思いつかず、苦戦しています。インターネットでは、さまざまなサイトを参照しました。上記に書かれたことに近い内容のものは発見できたのですが、表現したいプログラムとは少し違うようでした。if文やfor文を使いながら組み立てていくイメージはあるのですが、どうプログラムを作成してよいか、わかりません。プログラムを作成するヒントでも良いので、よろしければ、どなたか教えていただけないでしょうか。
2
+ C言語で要素数nの一次元配列を2つ使用して、疎行列で非ゼロ要素で始まる場所を一つの配列に、非ゼロ要素で終わる場所をもう一つの配列に入れるプログラムを知りたいです。付け加えとして疎行列では、ほとんどが0が多いので、行列の計算を圧縮するために非ゼロ要素の番地を各行ごとに端から端を特定してその容量内で計算するプログラムを作りたいのですが、なかなか思いつかず、苦戦しています。インターネットでは、さまざまなサイトを参照しました。上記に書かれたことに近い内容のものは発見できたのですが、表現したいプログラムとは少し違うようでした。if文やfor文を使いながら組み立てていくイメージはあるのですが、どうプログラムを作成してよいか、わかりません。プログラムを作成するヒントでも良いので、よろしければ、どなたか教えていただけないでしょうか。
3
+ 例えば、次のような正方行列があったとします。この場合、4x4なので、n=4の要素数となります。
4
+ 1 2 0 0
5
+ 3 1 2 0
6
+ 0 2 1 0
7
+ 0 0 1 1
8
+ この行列の行成分を一次元配列として、各行ごとにゼロでない部分の左はしと右のはしの部分の場所を記憶します。

1

情報の追加

2021/08/29 23:05

投稿

shousanryusan
shousanryusan

スコア0

title CHANGED
File without changes
body CHANGED
@@ -1,2 +1,2 @@
1
1
  C言語について
2
- C言語で要素数nの一次元配列を2つ使用して、疎行列で非ゼロ要素で始まる場所を一つの配列に、非ゼロ要素で終わる場所をもう一つの配列に入れるプログラムを知りたいです。付け加えとして疎行列では、ほとんどが0が多いので、行列の計算を圧縮するために非ゼロ要素の番地を各行ごとに端から端を特定してその容量内で計算するプログラムを作りたいのですが、なかなか思いつかず、苦戦しています。よろしければ、どなたか教えていただけないでしょうか。
2
+ C言語で要素数nの一次元配列を2つ使用して、疎行列で非ゼロ要素で始まる場所を一つの配列に、非ゼロ要素で終わる場所をもう一つの配列に入れるプログラムを知りたいです。付け加えとして疎行列では、ほとんどが0が多いので、行列の計算を圧縮するために非ゼロ要素の番地を各行ごとに端から端を特定してその容量内で計算するプログラムを作りたいのですが、なかなか思いつかず、苦戦しています。インターネットでは、さまざまなサイトを参照しました。上記に書かれたことに近い内容のものは発見できたのですが、表現したいプログラムとは少し違ううでした。if文やfor文を使いながら組み立てていくイメージはあるのですが、どうプログラムを作成してよいか、わかりません。プログラムを作成するヒントでも良いので、よろしければ、どなたか教えていただけないでしょうか。