二次元配列の宿題が分かりません・・・。
■ このスレッドは過去ログ倉庫に格納されています
0001やばいいい
NGNG二次元配列aをメモリ上の連続した領域へ行方向に格納するとき、
a(5,6)が格納される場所の番地はどれか。ここで番地は
十進数表示とする。ちなみにa(1,1)の時の番地は100です。
0002やばいいい
NGNG0003デフォルトの名無しさん
NGNG=========END==========
0004やばいいい
NGNG0005デフォルトの名無しさん
NGNG===========END==========
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG要素のサイズは?
0008デフォルトの名無しさん
NGNG自分も、なんか挑戦したくなったので、マジレスで答えてみる
今回だけだぞ
まず、
x = ( 5*8*256 + 6*8 ) / (5*6) + 100(=a(1,1)の番地)
(8は1バイトのbit数の事)
そして、
もし環境が16bitなら、
番地 = x * 256
32bitなら、
番地 = x * 65536
windows95以降使ってるなら、32bitだよ
わからなかったら、とりあえず32bitにしておいてね
俺も100%は自信ない もし間違ってたら、誰か指摘して
0009デフォルトの名無しさん
NGNGhttp://member.nifty.ne.jp/maebashi/programmer/pointer.html
もっと宿題に答えて欲しいなら
[プログラム板] お兄ちゃんの宿題、私が答えるよ
http://piza2.2ch.net/test/read.cgi/tech/982853418/
0010>8
NGNG番地がa(1,1)で100,101だから,
(5,6)に直すと、200くらいになるんじゃないか?
0011デフォルトの名無しさん
NGNG正解。
最短で答えるとそうなる。
0012デフォルトの名無しさん
NGNG100+10*5+6
0013やばいい
NGNG200以下とはいってました。
100代とはわかるんですが・
0014分
NGNG0015やばいい
NGNG純粋に番地が分かればいい
0016デフォルトの名無しさん
NGNGソースきぼんぬ
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGa(n, m)は 100 + (n - 1) * 10 + m - 1 番地に格納される。(1 <= m <= 10)
a(5, 6)は 100 + 4 * 10 + 5 = 145番地に格納される。
0019デフォルトの名無しさん
NGNG0020デフォルトの名無しさん
NGNGa[0..9,0..9]なのか
a[1..10,1..10]なのか
それをまずはっきりさせようよ
0021やばいい
NGNG0022やばいい
NGNGa(1,2) 102になっています。
0023デフォルトの名無しさん
NGNG0024やばいい
NGNG190代だと思う。適当に答えを書き込めば、いいんだろうけど
その経緯も説明しろと言われたので、少しきついです。
0025デフォルトの名無しさん
NGNG> バイトで言えば、a(1,1)が100で、
> a(1,2) 102になっています。
ということなら 190 かと。
0026デフォルトの名無しさん
NGNG番地の増加分は1ではなく、2なのか?
0027デフォルトの名無しさん
NGNGa(5, 6)は 100 + 4 * 20 + 5 * 2 番地から格納される。
0028やばいい
NGNG多分、100でいいんだろうと思う。
a(1,2)で102,103。
答えは190で間違いないと思う。
ただ、、経緯を書いてこいと言われた。
0029経緯なんて楽勝さ
NGNG俺には解らん。
0030デフォルトの名無しさん
NGNG0031経緯なんて楽勝さ
NGNG0032やばい
NGNG0033デフォルトの名無しさん
NGNGa(1, 1) 100, 101
a(1, 2) 102, 103
...
a(2, 1) 120, 121
...
a(5, 1) 180, 181
...
a(5, 6) 190, 191
0034デフォルトの名無しさん
NGNG100 102 104 106 108 110 112 114 116 118
120 122 124 126 128 130 132 134 136 138
140 142 144 146 148 150 152 154 156 158
160 162 164 166 168 170 172 174 176 178
180 182 184 186 188 190 192 194 196 198
200 202 204 206 208 210 212 214 216 218
220 222 224 226 228 230 232 234 236 238
240 242 244 246 248 250 252 254 256 258
260 262 264 266 268 270 272 274 276 278
0035デフォルトの名無しさん
NGNGなんで 9x9 の表?
0036デフォルトの名無しさん
NGNGつぅかネタでしょ?なんで質問に>>22の条件を含めなかったんだろ?
0037age
NGNG0038デフォルトの名無しさん
NGNG0039やばいい
NGNG0040やばいい
NGNG0041やばいい
NGNG感謝しています。後は自分で考えます。
0042やばいい
NGNGあとはそれをどう説明するか、、考えてみます。
レポートとして出すのです。
0043デフォルトの名無しさん
NGNG0044おいおい
NGNG経緯も分からんぞ。。「
0045デフォルトの名無しさん
NGNGスレ読め。
0046おいおい
NGNG0048デフォルトの名無しさん
NGNGうざ
0049デフォルトの名無しさん
NGNGというマメ知識をひけらかしたくてしょうがないんだが、
…どうでもいいですか。
005049
NGNG0051デフォルトの名無しさん
NGNG>二次元配列aをメモリ上の連続した領域へ行方向に格納するとき、
>a(5,6)が格納される場所の番地はどれか。ここで番地は
>十進数表示とする。ちなみにa(1,1)の時の番地は100です。
この質問の意味がわからん。
何の意味があるんだ。
0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNG問題出した先生は逝って善しなんじゃ。
&(a[0][0])からのオフセットを表示するソフトは書けるけど、
前提条件がなさすぎじゃ。
0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNG出題者は教師失格!
0056ろん
NGNG0057ろん
NGNG0059ろん
NGNGそんな事しなくても解けるよ。
190って答え出てるんだから。
0060デフォルトの名無しさん
NGNG矛盾だらけだつうの。
1)なんでバイト配列で+2ずつアドレスが増加する?
2)配列とアドレスの関係は言語やOSのメモリ管理に依存するので
一概にこうだとは言えない。問題にも示されていない。
3)1,1からはじまる配列って本当なのか?実在しない感じだが??
4)なんだよこれ?>行方向に格納するとき
0061-
NGNGはぁ……
>20 :デフォルトの名無しさん :01/10/17 16:33
> うーむ
> a[0..9,0..9]なのか
> a[1..10,1..10]なのか
> それをまずはっきりさせようよ
>21 :やばいい :01/10/17 16:36
> (1,10)だと思います。
すでに仮定が入ってるんですけど.
0062デフォルトの名無しさん
NGNGint a[10][10]
a[10][10]=5;
とか書くんだろうか?
0063-
NGNG多分先生が使っているコンピュータはメモリ上でも定義した通りの二次元配列でマッピングされるコンピュータなのでしょう
0064デフォルトの名無しさん
NGNG教師が書いたのをコピペってわけじゃなさそ。
0065デフォルトの名無しさん
NGNG0-origin の配列なら
> ちなみにa(1,1)の時の番地は100です。
なんて書き方しないだろ。
1-origin なのは間違いないと思う。
つか、fortran くさいな。
0066デフォルトの名無しさん
NGNGFORTRAN は 1 からはじまるよ。
0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNGwarata
答えが190って教師に聞いたやつなのか?それともここのスレで聞いた数のことなのか?
Base0かbase1かの問題よりも>>1の書いた問題がネタか?と言うほうに興味がある。
数学的な質問ならば154だとする。
0071デフォルトの名無しさん
NGNGワラタ
前提条件がころころ変貌中。厨房
http://piza2.2ch.net/test/read.cgi/tech/982853418/
0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNGVBって[1]からじゃなかった?
0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNG1からの方が解りやすい。
0077デフォルトの名無しさん
NGNGオプションで1からと0からと選べる。
0078デフォルトの名無しさん
NGNGVBは本当胸が悪くなる。
0079デフォルトの名無しさん
NGNG配列の番号の範囲が指定できるのは
Pascalとかも同じ。というかPascalを真似した?
便利。高級言語。
C/C++の配列が0から始まるのは、
ポインタ演算との兼ね合いのため。
0080ネタ決定
NGNGもうあげんな
0081デフォルトの名無しさん
NGNG>C/C++の配列が0から始まるのは、
>ポインタ演算との兼ね合いのため
つーか効率最優先だからだろ?
0082デフォルトの名無しさん
NGNGchar a[20][20]; の場合、
a == &a == &a[0] == &a[0][0]
だと思うけど、これらが全てバラバラとなる処理系も当然ありうるよね。
0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNG0085デフォルトの名無しさん
NGNGstruct UNIT{
double *x
double *y
}
と、取り
UNITとx、yを malloc,reallocで増すことはできないのでしょうか。
UNIT 1
x1,x2,x3,x4,・・・・・ 可変
y1,y2,y3,y4,・・・・・ 可変
UNIT 2
x1,x2,・・・
y1,y2,・・・
・
・
・
UNITも可変
(可変とかいてあるが、増やすだけで良い)
というようにしたいのです。
コンパイラはとおるのですが、走らせるとreallocでいつもエラーでとまりま
す。
どうか宜しくお願いいたします。
0086デフォルトの名無しさん
NGNG0087デフォルトの名無しさん
NGNG1はプログラムの授業中をサボっていたのだろう。
1はプログラムの実習中にどこぞのエロWEBでも見ていたのだろう。
1はプログラムの授業中友人との話に夢中だったのだろう。
1の周りには、宿題について聞けるような友人がいないのだろう。
こんなスレ立てる奴はどうかしている。
こんな質問に答える奴もどうかしてる。
まさに「スレ立てるまでもない質問」だ。
宿題わかりません、宿題おしえてくださいスレ見るたびにうんざりする。
そんなことは友人か先生に聞け。
ああ、ごめん。優秀な友人はいないのか。
先生も相手にしてくれないからここで聞いているのか。
だったらこっちにいけバカ。
http://piza2.2ch.net/test/read.cgi/tech/1001998049/l50
0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNGその認識も実は間違いなのでは?
というのが>>82の主張だったりします。
たとえば type a[A][B] があったとして
a[x][y] のアドレスが a+(x*A+y)*sizeof(type) である 保証
ってありましたっけ?
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNGtypedef struct{
double *x;
double *y;
} UNIT;
[UNIT unit1,unit2;]※1
int main(void){
UNIT unit1,unit2;※0
[static UNIT unit1,unit2;]※2
unit1.x = realloc(unit1.x,sizeof(double)*10);
unit1.y = realloc(unit1.y,sizeof(double)*13);
unit2.x = realloc(unit2.x,sizeof(double)*5);
unit2.y = realloc(unit2.y,sizeof(double)*3);
return 0;
}
0092デフォルトの名無しさん
NGNG静的な領域はたいがい0で初期化される。
で、reallocの引数に渡すポインタが適当な値だとエラー。
0ならOKなので、※1と※2がうまく動く。
009390
NGNGでなく
a+(x*B+y)*sizeof(type)
だな。
009489
NGNGああ、タイプミス。
でも、保証があるっていうのは?
K&Rに載ってるのかな?見てみます。
これって10年前から疑問に思ってたんだけど
ほったらかしてたんだよね・・・
0095デフォルトの名無しさん
NGNGtype a1[A][B];
を
typedef type t[B];
t a2[A];
として考えてみれ。
009689
NGNGうん。考えた。で、試したりもしました。
struct TY { char a,b,c; };
main()
{
struct TY ty[3][3];
int i,j;
for( i=0;i<3;i++ ) {
for( j=0;j<3;j++ ) {
printf("%d %d: %x\n",i,j,&ty[i][j] );
}
}
}
$ ./a.out
0 0: bffffac0
0 1: bffffac3
0 2: bffffac6
1 0: bffffac9
1 1: bffffacc
1 2: bffffacf
2 0: bffffad2
2 1: bffffad5
2 2: bffffad8
むーん。ま、こういうもんか。
でも保証されてる っていう証拠にはならないんだよなぁ。
009790
NGNGa[x] のアドレスは a+x*sizeof(type) となることが保証されています。
typedef type t[B];
t a[A];
において a[x] のアドレスは
1より a+x*sizeof(t) すなわち
a+x*(sizeof(type)*B) = a+x*B*sizeof(type)
となります。
a[x][y] は
a[x] を b と置き、
b[y] のアドレスは b+y*sizeof(type) です。
b は a[x] = a+x*B*sizeof(type) なので置き換えてみると
(a+x*B*sizeof(type)) + y*sizeof(type)
= a+(x*B+y)*sizeof(type)
となります。
途中適当な所があるけど許して。
0098デフォルトの名無しさん
NGNGint i, j;
&a[i][j] ≡ a[i] + j ≡ (a + i) + j
ここでa + iの型は「type *」
aの型は「type[B] *」なので、
(unsigned long)(a + i)
≡ (unsigned long)a + sizeof(type[B]) * i
≡ (unsigned long)a + sizeof(type) * B * i
(unsigned long)((a + i) + j)
≡ (unsigned long)(a + i) + sizeof(type) * j
≡ (unsigned long)a + sizeof(type) * B * i + sizeof(type) * j
≡ (unsigned long)a + sizeof(type) * (B * i + j)
規格(ANSI ISO IEC 9899-1999)では6.5.2.1だ。
...(上のような規則の説明があって)、
It follows from this that arrays are stored in row-major
order (last subscript varies fastest).
0099デフォルトの名無しさん
NGNG結局は規格でどう定められているか、という問題でしょ。
この手の話題は Followup-To: fj.comp.lang.c だね。
イヤというほど詳細なフォローが貰えると思うよ。
010089
NGNG>規格でどう定められているか
まあ、そこです。
でもfjには投稿できないんだよな〜
0101デフォルトの名無しさん
NGNGどこだったかな・・・。
■ このスレッドは過去ログ倉庫に格納されています