質問編集履歴

4

情報の追加

2021/08/31 08:47

投稿

shousanryusan
shousanryusan

スコア0

test CHANGED
File without changes
test CHANGED
@@ -96,7 +96,7 @@
96
96
 
97
97
  {
98
98
 
99
- d1[i] = j;
99
+ d1[i] = j;   /0からi-1番目までの非ゼロでない列番号
100
100
 
101
101
  printf("%d\n", d1[i]);
102
102
 
@@ -108,7 +108,7 @@
108
108
 
109
109
  if(matrix1[i][j]!=0 ) {
110
110
 
111
- d2[i] = j;
111
+ d2[i] = j;             /iからn-1番目までの非ゼロでない列番号
112
112
 
113
113
  printf("%d\n", d2[i]);
114
114
 

3

書式改善

2021/08/31 08:47

投稿

shousanryusan
shousanryusan

スコア0

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

2

情報の追加

2021/08/31 08:43

投稿

shousanryusan
shousanryusan

スコア0

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

1

情報の追加

2021/08/29 23:05

投稿

shousanryusan
shousanryusan

スコア0

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