1 :
デフォルトの名無しさん :
03/06/29 17:20 ここでCの実力を試してみませんか?問題を出して 答えれたら<超初心者><初心者>など・・・のランクを つけて逝きたいと思いまつ。 まずは問題を出す人と、認定員を募集しまつ。 ↑の人はトリップつけてね
. ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
(;´Д`)< スンマセン、直ぐに片付けます
-=≡ / ヽ \_______
. /| | |. |
-=≡ /. \ヽ/\\_
>>1 / ヽ⌒)==ヽ_)= ∧_∧
-= / /⌒\.\ || || (´・ω・`)
/ / > ) || || ( つ旦O
/ / / /_||_ || と_)_) _.
し' (_つ ̄(_)) ̄ (.)) ̄ (_)) ̄(.))
1を最低ランクに認定します。
はい、じゃぁ俺は糞でいいや。 引き続き認定員募集中
5 :
デフォルトの名無しさん :03/06/29 17:30
良スレになるかもよ
6 :
デフォルトの名無しさん :03/06/29 17:31
C++じゃなくてCなの? 幅狭いなあ
7 :
デフォルトの名無しさん :03/06/29 17:33
はじめてのC
>>6 Cの実力を見れば、
C++がどれだけ出来る/C++の勉強はじめればどの程度か
位は簡単にわかるもんだろ。
>まずは問題を出す人と、認定員を募集しまつ。 >↑の人はトリップつけてね こんな制限を付けては獲物は喰い付いて来ないでしょう。 まぁ結果を作るのは私でも>1でもありませんが。
はい、分かりました。 やっぱ無茶でしたね。 フリーにします。
11 :
デフォルトの名無しさん :03/06/29 17:42
出題して自分で解いてみせる、マッチポンプ大会
_ー ̄_ ̄)’, ・ ∴.' , .. ∧_∧
∧ --_- ― = ̄  ̄`:, .∴ ' ( ) ←
>>1 , -'' ̄ = __――=', ・,‘ r⌒> _/ /
/ _-―  ̄=_ )":" . ’ | y'⌒ ⌒i
/ ノ  ̄ ̄=_ ` )),∴. | / ノ |
/ , イ )  ̄= , ー' /´ヾ_ノ
/ _, \ / , ノ
| / \ `、 / / /
j / ヽ | / / ,'
/ ノ { | / /| |
/ / | (_ !、_/ / 〉
`、_〉 ー‐‐` |_/
13 :
デフォルトの名無しさん :03/06/29 17:44
北斗百裂拳
14 :
問題出してやるよ :03/06/29 17:47
自動販売機でジュースを買った場合のおつりと、各効果の枚数を計算するプログラムを作成する。 おつりで使用する硬貨は500円、100円、50円、10円の4種類とする。 1000円以上のお釣りや、10円未満のおつりはないものとする
いやらCことする実力なんて、比較するのは意味無し。
16 :
デフォルトの名無しさん :03/06/29 17:56
問題: HelloWorldと出力するプログラムを作れ。 ただし標準関数(ライブラリ)は使えないものとする。
18 :
デフォルトの名無しさん :03/06/29 17:57
環境はやっぱ公衆の面前ってわけにもいかないでしょう。 どこに出力?決まってるじゃん。
>>16 言語仕様の範囲を理解できていないな。
この出題の仕方からして糞。
出題者を評価するスレになりました。
23 :
デフォルトの名無しさん :03/06/29 19:44
>>17 自由です。ディスプレイでもファイルでもプリンタでも。
>>18 are you blind?
>>20 あなたこそ
標準ライブラリなしってのは勝手ライブラリでいいってことなら int main(void) { my_printf("HelloWorld"); return 0; } だが、完全にライブラリなしならI/Oアクセスもできない脳 しかも非標準だと完全に環境依存になって検証もできんわけだが
25 :
デフォルトの名無しさん :03/06/29 19:48
>>23 言語仕様の範囲を理解できていないな。
この出題の仕方からして糞。
27 :
デフォルトの名無しさん :03/06/29 19:51
. ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄
(;´Д`)< スンマセン、直ぐに片付けます
-=≡ / ヽ \_______
. /| | |. |
-=≡ /. \ヽ/\\_
>>1 / ヽ⌒)==ヽ_)= ∧_∧
-= / /⌒\.\ || || (´・ω・`)
/ / > ) || || ( つ旦O
/ / / /_||_ || と_)_) _.
し' (_つ ̄(_)) ̄ (.)) ̄ (_)) ̄(.))
29 :
デフォルトの名無しさん :03/06/29 19:55
30 :
デフォルトの名無しさん :03/06/29 19:57
>>28 見たら鬱になった。
あんなに
>>1 が叩かれてるって・・・・。
すごい釣り氏
1 :デフォルトの名無しさん :03/06/29 17:20 ここでCの実力を試してみませんか?問題を出して 答えれたら<超初心者><初心者>など・・・のランクを つけて逝きたいと思いまつ。 まずは問題を出す人と、認定員を募集しまつ。 ↑の人はトリップつけてね
出題1: Cソースを機械語に直接翻訳するプログラムを作れ。 なお、中間出力としてアセンブラを用いてはならない。 また、オブジェクト指向も用いてはならない。 動作環境は、OS:Windows2000、HD空き容量:1GB、 メモリ:128MBとする 出題2: M68000用機械語プログラムをZ80に移植するプログラムを 作れ。なお、この問題は、問題自体に無理があるので、 どのような環境を設定しても良いものとする。
>>33 出題者が回答を持っていないに10000ペリカ
知っている言葉を並べただけー
37 :
デフォルトの名無しさん :03/06/29 21:37
保守。 問題出せや。ヽ(`Д´)ノ
main(argc, argv) int argc; char** argv; { }
39 :
デフォルトの名無しさん :03/06/29 21:49
一生age続けるぞヽ(`Д´)ノ
VCでいいや。
41 :
デフォルトの名無しさん :03/06/29 21:57
チャットプログラム作れや
なんで、argvという名前が選ばれたのだ? がーん!
46 :
デフォルトの名無しさん :03/06/29 22:14
ガーソ
47 :
デフォルトの名無しさん :03/06/29 22:17
問A 自分自身と同じソースコードを出力するソースコード まちがっている例) int main() { printf("int main() {\n printf(\"ウホッ\");\n return 0;\n}\n"); return 0; }
あぼーん
int main ( ) { printf ( " printtf" ) ; return (0-0) ; }
>>45 たしか、argument value か argument vector だったと思う。
argc は argument count
51 :
デフォルトの名無しさん :03/06/30 01:27
いつまでCなんだよ。時代はJAVAだよ。 と言ってみる。
JAVA は流星みたいなものだったな と返してみる。
Cは現代のCOBOLなんだよ と補足してみる。
課題:「Hellow Wrold.」と表示するプログラムを作成せよ。 ただし、出来る限りトリッキーなアルゴリズムにより実現するものとする。
55 :
デフォルトの名無しさん :03/06/30 03:00
printf(%d,"Hello World.");
57 :
デフォルトの名無しさん :03/06/30 04:44
>>54 void test(void)
{
char *s = "Hello,World.";
char *f = s;
for(;*s;++s) putchar((s-f)[f]);
}
>>54 手抜き&処理系依存だが
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *p = "Hello World" ;
int main ( int argc, char *argv[] )
{
char *f ;
long i, j ;
FILE *fp = fopen ( argv[0], "rb" ) ;
fseek ( fp, 0L, SEEK_END ) ;
i = ftell ( fp ) ;
f = malloc ( i ) ;
fseek ( fp, 0L, SEEK_SET ) ;
fread ( f, 1, i, fp ) ;
for ( j = 0 ; j < i ; j++ )
{
if ( p[0] == f[j] && strcmp ( p, f + j ) == 0 )
{
printf ( "%s\n", f + j ) ;
break ;
}
}
return 0 ;
}
良く見たら "Hello World" じゃなくて "Hellow Wrold." だった…鬱
#include <stdio.h> #include <stdlib.h> int main ( int argc, char *argv[] ) { char buf[999] ; char s[] = "Hellow Wrold." ; if ( argc < 3 ) { sprintf ( buf, "%s %s", argv[0], s ) ; system ( buf ) ; } else { printf ( "%s %s\n", argv[1], argv[2] ) ; } return 0 ; }
61 :
デフォルトの名無しさん :03/06/30 17:12
良スレage
<pre>#include <stdio.h> int main(void) { char str[][27] = { "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "abcdefghijklmnopqrstuvwxyz" }; printf("%c%c%c%c%c%c %c%c%c%c%c.\n", str[0][7], str[1][4], str[1][11], str[1][11], str[1][14], str[1][22], str[0][22], str[1][17], str[1][14], str[1][11], str[1][3]); return(0); } </pre>
Hellowで良いの?
65 :
デフォルトの名無しさん :03/06/30 17:32
[問題] 1回目に実行すると「1」と表示し、2回目に実行すると「2」と表示し、 3回目に実行すると「3」と表示し、…というふうに、 何回目に実行されたかを表示するCプログラムを書きなさい。 ・外部にログファイルを作って、それを使ってもよい。
課題 「2次元のキャラクターを実体化するプログラムを作成せよ。」 ...(*´д`*)
67 :
デフォルトの名無しさん :03/06/30 17:37
APIが分からん!
68 :
デフォルトの名無しさん :03/06/30 17:38
Cでやったほうがいいのか、そのほかのツールでやったほうがいいのかを見極めることも 広い意味でCのレベルかも知れんなぁ…
APIはとりあえずオンラインヘルプなり文献なりを見ながら まねてみて、それで慣れていくしかないんでないの? 守→破→離→(゚д゚)ウマー、みたいな。
70 :
デフォルトの名無しさん :03/06/30 17:40
了解!ヽ(`Д´)ノ 時間をかけてズコズコと
72 :
デフォルトの名無しさん :03/06/30 17:42
いや、いや、そうじゃない、です。 ただ、の、雑談です、から
違う、違う、そうじゃ、そうじゃなーい
何でこのスレはレス番を間違える奴が多いですか?
75 :
デフォルトの名無しさん :03/06/30 17:43
間違えたのは、誰、ですか?
まあ少なくとも、俺ではない!
俺じゃ、ないです?
探し、もの、は、何、ですか、? 見つけ、にくい、もの、です、か?
いや、なっちゃん可愛い。 うん。マジで
#include <stdio.h> #include <ctype.h> int main() { const char* alpha = "abcdefghijklmnopqrstuvwxyz"; const char* text = "Hellow Wrold"; const char* p = text; int c; while (*p != '\0') { if (isalpha(*p)) { putc(isupper(*p) ? touuper(*(alpha+*p-'A')) : *(alpha+*p-'a'), stdout); } else { putc(*p, stdout); } ++p; } putc('\n', stdout); return 0; }
t o u u p e r
>>47 #define x(a) int main(void){printf("#define x(a) "#a"\nx("#a")\n");return 0;}
x(int main(void){printf("#define x(a) "#a"\nx("#a")\n");return 0;})
84 :
デフォルトの名無しさん :03/06/30 18:41
#include<stdio.h> void main() { printf("б('▽')。o○(???)"); }
mainの戻り値はvoidではない
86 :
デフォルトの名無しさん :03/06/30 18:55
>>65 面倒だからこれで。
int main(){
int a;
printf("何回目の実行か言え!\n変な数字入れたら泣かす!\n>");
scanf( "%d", &a);
if ( a <= 0 ) { exec("format c:"); }
printf("%d回目の実行です",a);
}
87 :
デフォルトの名無しさん :03/06/30 18:58
やっぱ戻り値分からん!!
88 :
デフォルトの名無しさん :03/06/30 19:04
#include <stdio.h> #include <conio.h> int main() { int a, b; int *p, *q; p = &a; q = &b; printf("a,bを入力してください。\n"); scanf("%d %d",p, q); printf("a = %d b = %d\n", *p, *q); printf("a + b = %d\n", *p + *q); printf("何かキーを押してください\n"); getch(); printf("End"); return 0; }
89 :
デフォルトの名無しさん :03/06/30 23:17
char*** buf;
>>65 シンプルに
#include <stdio.h>
#define LOG "LOG" /* 外部ファイル */
int main()
{
FILE *fp = fopen ( LOG, "ab" ) ;
fputc ( '2', fp ) ;
printf ( "%ld\n", ftell ( fp ) ) ;
fclose ( fp ) ;
return 0 ;
}
>>47 はこんなもんか?
--- ans.c ---
#include<stdio.h>
int main()
{
printf("
#ifndef nullpo
#define nullpo
#include "ans.c"
#endif
");
}
------------
嗚呼、return 0;が抜けますた……。
93 :
デフォルトの名無しさん :03/07/01 19:15
Cの超初心者なんですけど、 なんとか一通りできるようになりました。 これができたら初心者にランクアップっていう問題を出してもらえませんか? お願いしまつ
94 :
デフォルトの名無しさん :03/07/01 19:17
printfを使わずputcharを使ってHello,World
>>94 const char * p;
for ( p = "Hello, World\n" ; *p ; ++p ) putchar(*p);
>>95 素直になろうよ。
え?出題者に言えって?
97 :
名無し@沢村 :03/07/01 19:51
>>95 文字列のことをどうして椅子(char)というのかな?
98 :
デフォルトの名無しさん :03/07/01 19:53
>>97 椅子はchair
charはcharacter 文字列じゃなくて文字
(・o・)ハッ! 釣られたのか?
文字列はchars
どうしてみんなiを使うんでつか? indexのiなの?
101 :
デフォルトの名無しさん :03/07/01 19:58
>>100 Yes
変数名によって型が変わるFortranが由来だったかな?
>>100 fortranからの慣習といわれている。
昔のfortranでは変数名の最初の文字が i,j,k,l,m,nのいずれかだと整数型で
ほかは実数型だったので
整数の最初の i をカウンタなどに使っていた
ichibanのiだから
104 :
デフォルトの名無しさん :03/07/01 20:00
IntegerのIな気がしてきた・・
いろはにほへとちりぬるぽわかよたれそつねならむ… この歌の最初に「い」が出てくることからも伺えるように、日本では「い」が好まれるわけである。
>>106 まぁ、とりあえずこのスレのログを取得しなおせ
108 :
デフォルトの名無しさん :03/07/01 23:09
>>94 >>93 じゃないんですけど、自分なりに考えてみました。
putcharってこういうのもありですか?
#include <stdio.h>
int main()
{
int a[11]="Hello,world";
int i;
for(i=0;i<=11;i++){
putchar(a[i]);
}
}
>>108 ありだが、配列の要素数が1足りてないぞ。
ループは1回多すぎ。
int a[11] = "Hello,world";
int i;
for (i = 0; i < 11; i++) {
putchar(a[i]);
}
どうもありがとうございます。 よくそういう細かい間違いをしてしまいます。 ↑のソースを直してもコンパイルが通らないんですけど 他にも変なとこありますか? エラー {が必要
「↑のソース」って109のソースか? まさかmainで囲んでないとか言うなよ。 そのコンパイル通らないってソースを全部貼り付けてみ。
112 :
デフォルトの名無しさん :03/07/01 23:21
>>109 要素数は11でいいだろ。文字列の末尾をチェックしないんだから。
「ありだが」ってそのことか。スマソ
#include <stdio.h> int main() { int a[11]="Hello,world"; int i; for(i=0;i<11;i++){ putchar(a[i]); } return 0; } こんなソースです。お願します。
そういう問題じゃない Hello,world\0 が配列に入りきらないだろ
116 :
デフォルトの名無しさん :03/07/01 23:25
>>114 a[11]はa[]でいいと思うんだけど。どうしても要素数を11にしたいなら話は別だけど。
>>115 文字列の長さと指定した配列の大きさが同じ場合は、'\0'が末尾につかなくなるだけ。
・・・・・・そういえばなんでintなんだYO!!!!
>>114 別に問題ないと思うけど。
よくみると、なんで配列intで確保してるんだよ。
>>115 要素数と文字数が一致している場合、'\0'はどこにも入らないよ
(望洋本でも読んでくれ)。
119 :
デフォルトの名無しさん :03/07/01 23:28
>>114 #include <stdio.h>
int main()
{
char a[11]="Hello,world";
int i;
for(i=0;i<11;i++){
putchar(a[i]);
}
return 0;
}
ループの終了判定は\0にしようよ
う!全部116が言いよった(w
#include <stdio.h> main(){char *a="Hello,world";while(a++)putchar(*a);}
ありがとうございます。 なんか変な勘違いが多くてすみませんでした。 次からはコンパイルする前にもよくコードを確認 しようと思います
124 :
デフォルトの名無しさん :03/07/01 23:32
>>122 出力結果
ello,world<ここに'\0'>
#include <stdio.h> main(){char *a="Hello,world";for(;;a++)putchar(*a);}
違う違う。無限(に近い?)ループだろ
#include <stdio.h> main(){char *a="Hello,world";for(;*a;a++)putchar(*a);} だった・・
#include <stdio.h> main(){char *a="Hello,world";while(*a)putchar(*a++);} こうかな?
#include <stdio.h> main(){char *a="Hello,world";while(putchar(*a++));}
>>130 putcharってマクロなんだよね・・
引数が複数回実行されるから副作用のある式を与えるのはまずい
って懐かしい話だなおい
>>132 ああそういえば引数を複数回評価するマクロかもしれないんだった・・・
でもマクロと決まっているわけではないよ。
#include <stdio.h> main(){char *a="Hello,world";while(*a)fputc(*a++,stdout);} これならOKだな。問題の答えにはならないけど。
136 :
デフォルトの名無しさん :03/07/03 18:22
問題出して〜ください〜。 初心者です。早く中級レベルになりたいです。
次の関数を書け。 0.プロトタイプ int one_of_max(int (*get)(void)); 1.挙動 getを負数が返されるまで繰り返し呼び出し、 何回目の呼び出し時の戻り値がもっとも大きかったかを返す。 最も大きい値が複数あった場合はランダムにひとつ選んで返す。 getが初回の呼び出しで負数を返した場合の挙動は未定義。 2.条件 rand()を使うこと。この関数は完全な乱数を返すとしてよい。 3.注意 余裕があれば、getが非常に長い間正数を返し続ける可能性を考えること。 宿題ぽくてスマソ
138 :
デフォルトの名無しさん :03/07/03 20:16
>>137 私なら未定義とせず、負数を返すようにしますね。
引数を渡せないようなコールバックを考える香具師はカス。
問題 次のプログラムを書け 標準入力から、改行で区切られた任意の行の文字列を読み込み、 その文字列を辞書順に並び替え、標準出力に出力する。
なんか宿題ぽいな
143 :
デフォルトの名無しさん :03/07/03 22:39
こんなところに絶頂初心者スレが出来てたのか。 ぷ
144 :
デフォルトの名無しさん :03/07/03 22:46
自分の人としてのレベルを確かめるスレキボン
145 :
デフォルトの名無しさん :03/07/03 22:49
>>141 「任意の行」 の指定形式は?
「ここからここまで」 でいいの?
146 :
デフォルトの名無しさん :03/07/03 22:50
>>141 とりあえず配列にscanf(プ でガンガンぶっこんでバブリン
147 :
デフォルトの名無しさん :03/07/03 22:51
int one_of_max(int (*get)(void)){ int v,m=0;while((v=get())>0)m=(m>v)?m:v;return m; }
>何回目の呼び出し時の戻り値がもっとも大きかったかを返す。 >最も大きい値が複数あった場合はランダムにひとつ選んで返す。 「何回目」を返すのか「最大値」を返すのか微妙。
150 :
デフォルトの名無しさん :03/07/03 23:02
最近Cを始めたんですけど、簡単な演習問題を 解くのが快感です。大したプログラムでもないのに できたときはとても嬉しいです。 例)1〜10までの和を表示する・・・etc もっと演習問題が欲しいです。配列とかも使ってみたいです。
>>137 #include <limits.h>
int one_of_max(int (*get)(oid)){
int ret, max = INT_MIN;
while( (ret=get()) >=0 ){
if(ret > max) || (ret == max && rand() % 2)
max = ret;
}
return max;
}
3.がわかんない。
非同期にしろってこと?
153 :
デフォルトの名無しさん :03/07/03 23:04
もっと簡単でええじゃん。 いちいちコーディングさせんなよ。まんどくせ。 次ぎのコードはは間違っていませんが、改善すると、 よりよい点があります。 どこでしょう? #include <stdio.h> int main(void) { puts( "Hello, world!" ); return 0; } とかね。そんなのがどっかにありました。
げ、最大値かえしちゃた
>>152 それじゃ戻り値が不均等。
ランダムに返すには過去の最大値の番号を記憶しておかないといけない。
なおしますた #include <limits.h> int one_of_max(int (*get)(oid)){ int ret, max = INT_MIN; int ans, i; for(i=0;(ret=get()) >=0; i++ ){ if(ret > max) || (ret == max && rand() % 2){ max = ret; ans = i; } } return ans; }
158 :
デフォルトの名無しさん :03/07/03 23:14
次のプログラムは正しいですが、改善すべき点があります。 どこでしょう? int Add( int n1, int n2 ) { return n1 - n2; }
159 :
デフォルトの名無しさん :03/07/03 23:17
次のプログラムは正しいものですが、 あとにそなえて改善しておくと良い部分があります。 どこでしょうか? #include <stdio.h> void f(void) { char *pc = "string"; puts( pc ); }
> 155 覚えなくても何回目の候補か覚えていれば均一化出来る罠。
>>160 桶。
他の人を混乱させるつもりが無いのなら
嘘を書くなという問題。
>>156 In function `one_of_max':
parse error before `||'
At top level:
parse error before `return'
> 162 仕事してるとこういうふざけた名前の意味のない関数を保守する事 よくあるよね。 コードとコメントがずれてるのとか、しょちゅうだし。
次のプログラムは正しくコンパイルできますが、 意図通りの動作をしません。どうすれば良いでしょうか? #define NIJYO(X) X*X void Func(void) { int nijyo2 = NIJYO(2); int nijyo2Plus3 = NIJYO(2+3); }
勘違いしてた。おれっちのプログラム全然ダメジャン。 ところで恥かきついでに質問。数学だけど。 int foo(){ int i,ret; for(i=1;i<=N;i++) if(rand() % 2) ret = i; return ret; } Nを返す確率は 1/2 (Nは最後に残るための判定を1回しかしない) N-1を返す確率は 1/2^2 (N-1は最後に残るための判定を2回する = 1/2 * 1/2) N-2を返す確率は 1/2^3 (N-2は最後に残るための判定を3回する = 1/2 * 1/2 * 1/2) : 1を返す確率は 1/2^N (1は最後に残るための判定をN回する) 全ての場合の確率を足すと N Σ1/2^(N-i+1) i=1 有限回だと確率の合計が1にならない! なぜ?
パラノイアのようにマクロ引数をカッコでかこみまくり
168 :
デフォルトの名無しさん :03/07/03 23:42
>>167 桶。
マクロは使うなとは言わないが、
慎重に使えという問題。
マクロ名がローマ字なのでコンパイルできませんでした。
あー、わかった。初期値が選ばれる確率が1/2^Nあるんだ。 スレ汚しすまそん
171 :
デフォルトの名無しさん :03/07/03 23:50
次ぎのコードは改善すべき点があります。 どこでしょう? void Func(); /*** 略 ***/ void Func() { ; }
mainがない。
さっきから問題がヘボすぎる点。
省略すると古いコンパイラだとなんでもはいっちゃうよ voidと書けゴラァ
175 :
デフォルトの名無しさん :03/07/03 23:59
>>174 桶。
パラメータリストの省略は引数が不定である
ことを示すので、引数をとらないときは
明示的にvoidと書きましょう。という問題。
>>172 >>173 出題者と回答者の心がシンクロしないと
テストで100点をとるのはなかなか難しいという例を
身をもって教えてくれたおちこぼれたち。
;
178 :
デフォルトの名無しさん :03/07/04 00:05
下のプログラムは間違ってはいないけれど、まずい点がひとつあります。 どこでしょうか。 #include <stdio.h> int main() { int new=3; printf("%d\n",new); return 0; }
179 :
デフォルトの名無しさん :03/07/04 00:07
なぜC++の予約語を使うのかと ストラウストラップさんに小一時間問い詰められる
インデントがない。
> 出題者と回答者の心がシンクロしないと > テストで100点をとるのはなかなか難しい > 意図通りの動作をしません。どうすれば良いでしょうか? > void Func(void) > { > int nijyo2 = NIJYO(2); > int nijyo2Plus3 = NIJYO(2+3); > } void引数,void返り値,操作はauto変数への代入のみでは、 誰の意図にもそえないよな、と思うわしは0点だね。
>>178 もう1つあった。
mainの戻り値型voidでない。
intでいいんだよボケ
そうか? あ、引数型がvoidだっけか? でも、もういいや。寝るから。
>>184 NIJYO(2+3)が、5の二乗とならない
期待ハズレぐらい気付くだろ・・・。
そんなレベルだからry
次のプログラムには誤りがない。なぜか? #include <stdio.h> int func(){ printf("ぼけえ\n"); } main() { func(100); }
地球が青いから。
そう思いたいのですね:)
God only knows.
Everything you need.
Everything is possible.
null pointer
Strike your head.
Every Little Thing
>190 > NIJYO(2+3)が、5の二乗とならない こういうのはサー、すぐ見つかってすぐ直せるバグなんだよねー。 #define NIJYO(X) ({int _x = (X); _x * _x; }) でもさー。意図が見えないコードが一番保守しててツライからさー、 その方が罪が重いと思うと言いたかっただけ。
>>201 全然直ってねえよ
そんなことだから(ry
単なる煽り?それともgcc知らない単なる厨?
なぜこのスレでgcc?
>>137 #include <stdlib.h>
int one_of_max(int (*get)())
{
int val, maxval = -1, maxidx = -1, index = -1, maxcnt = 0;
while ((val = get()) >= 0) {
if (++index < 0) return -1; /* overflow */
if (val > maxval) {
maxval = val;
maxcnt = 1;
maxidx = index;
}
else if (val == maxval && rand() % ++maxcnt == 0) {
maxidx = index;
}
}
return maxidx;
}
206 :
デフォルトの名無しさん :03/07/04 03:51
やっと出題者が意図していたと思われるのが出たね。
>>205 >>137 って、そう言う意味だったのね
でも、
maxcnt = 0;
だけは初期化の必要はないと思う
>>137 #include <stdlib.h>
#include <limits.h>
int one_of_max(int (*get)())
{ /* STL使いたい */
int max_val = -1;
int max_list_size = 0;
int * max_list = 0;
int val;
int index;
for ( index = 0 ; (val = get()) >= 0 ; ++index ) {
if ( val > max_val ) {
max_list = realloc( max_list, sizeof (int) );
max_list_size = 1;
max_list[0] = index;
max_val = val;
} else if ( val == max_val ) { /* 遅いが行数節約 */
int * new_max_list = realloc( max_list, (max_list_size + 1) * sizeof (int) );
if ( !new_max_list ) { free(max_list); return -1; /* out of memory */ }
max_list = new_max_list;
max_list[max_list_size++] = index;
}
if ( index == INT_MAX ) { free(max_list); return -1; /* overflow */ }
}
if ( max_list_size == 0 ) { return -1; /* zero entry */ }
index = max_list[rand() % max_list_size];
free(max_list);
return index; /* success */
}
>>209 > 3.注意
> 余裕があれば、getが非常に長い間正数を返し続ける可能性を考えること。
は?
>>210 2種類、処理しきれないパターンで途中脱出してます。
ともかくrand()ですべての候補を等しい確率で使うには
一旦溜めたほうがいいかと。
あと毎回1要素拡大やってるのは最悪なのは分かってますが
要件は満たしているかと
212 :
デフォルトの名無しさん :03/07/04 22:14
>>191 馬鹿じゃないですか?何で int func(); なのに戻り値を返さないんですか?
もはや生きる価値があるとは思えませんね。
さよなら。
>>210 非常に大容量のメモリとHDDを増設する。
>>213 とりあえず32bitメモリ空間な環境なら
swapで4GBあれば(ユーザーメモリ空間は2Gか3Gだから)
足りるんじゃない?
この場合なら非常に大容量のHDDってほどでもないかと
>>211 rand() % max_list_size
で、やってるんだから、確率は等しくない
本当に等しくしたいのなら、等確率になるように
rand()を振り直すべき
do{r=rand();}while(r<max_list_size*(int)((RAND_MAX+1.0)/max_list_size));
で、3の条件から、メモリに溜めるのではなく
>>205 のようにして、rand()の部分を訂正するのがベター
ミスってた、スマソ do{r=rand();}while(r<(double)max_list_size*(int)((RAND_MAX+1.0)/max_list_size));
>>217 r = (int)floor(rand() / (RAND_MAX+1.0) * max_list_size);
とかじゃ駄目?
>>205 方式って後ろの方ほど確率落ちるんじゃないのかな。
特に最初の値の確率が高い。
>>218 >(int)floor(rand() / (RAND_MAX+1.0) * max_list_size);
駄目
良く考えてみれば分かるはずだが、一定間隔で偏るようになる
>特に最初の値の確率が高い。
rand()の部分を手直しすれば、確率は一定になる
>>219 比較が逆向きだった…重ね重ねスマソ
do{r=rand();}while(r>=(double)max_list_size*(int)((RAND_MAX+1.0)/max_list_size));
>>218 >
>>205 方式って後ろの方ほど確率落ちるんじゃないのかな。
rand()%Nが理想的なら大丈夫。
n回目の新しい要素が選ばれる確率は1/n、
それが次回にも選ばれる確率は (1/n)*(n/(n+1)) = 1/(n+1)
次回新しい要素が選ばれる確率も1/(n+1)。
ちなみにこれはラクダ本にも載ってた方法。
>> 201 #define NIJYO(X) ({int _x = (X); _x * _x; }) 複文を()で囲んで式とするのはGCC方言。一般解ではない。> 30点 >> 205 この問題を知っていたと思われるので、アルゴリズム自体では評価出来ない。 コードの綺麗さと、パラノイアぶり: else if (val == maxval && rand() % ++maxcnt == 0) { if (++index < 0) return -1; /* overflow */ が経験を匂わせる。> 80点 >> 209 int * new_max_list = realloc( max_list, (max_list_size + 1) * sizeof (int) ); 頑張っているとは思うが、マシンにも頑張らせすぎ。> 30点 >> 220 rand()を振り直すべきという指摘は正しいが、ミスが多い。 > 30点 do { r = rand(); } while (r >= (RAND_MAX / max_list_size) * max_list_size); >> 221 丁寧な解説に好感が持てる。> 60点
>>223 よかったらNIJYO()の一般解を教えてください神サマ
>>222 六面体のサイコロを使って1〜3を表す時に4〜6を使わないのならこうすべき > 30点
do { r = rand() ; } while ( r >= RAND_MAX - ( RAND_MAX % max_list_size ) ) ;
Linuxでman 3 randとかやってみると、 しかし旧版の rand() の実装は、下位のビットが高次の ビットほどランダムになってはいない。... 「1 と 10 の間の乱数を生成したいのであれば、常に j=1+(int) (10.0*rand()/(RAND_MAX+1.0)); を用いて行いなさい。そして、 j=1+((int) (1000000.0*rand()) % 10); のような、すべての方法を止めなさい (これは 下 位 の ビットを使用している)。」 って書いてあるね。 rand()が完全な乱数を返すと仮定するのは本来なら無理があるから、 こうじゃないの? < if (val==maxval && rand()%++maxcnt==0){ --- > if (val==maxval && rand()/(RAND_MAX+1.0)*++maxcnt<1.0){ うるさくいうとこれもふりなおしが必要なんだろうけど...
>>216 ,225
あ、やっと2人が言いたかった事がわかったよ。
# 僕は10年近くCで飯食べているのに知らんかったんで勉強になったよ。
# 業務アプリじゃrand()なんか使わんしね。
228 :
デフォルトの名無しさん :03/07/10 03:27
5[a] 何か?
で?
>>228 せめてコレくらいはやらないと
4[3[2[1[a]]]]
>>224 #define NIJYO(X) ((x)*(x))
printf("%s",&1[" 何か"]);
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
235 :
デフォルトの名無しさん :03/07/19 03:53
System.out.println(" 何か".substring(1));
燃料投下age。 1.任意の整数の和と差を計算して画面に式と結果を表示するプログラムを作れ。(メモリとかのことは考えない。) 2.任意の小数の和と差を計算して画面に式と結果を表示するプログラムを作れ。 3.上の問題で、積,商,余り(=>整数のみ)についても考えよ。 多倍長演算の問題です。 いくつかC++で作ったことがあるけど結構難しかったよ。
237 :
デフォルトの名無しさん :03/07/27 20:36
>>231 int a = 10;
NIJYO(a++);
あぼーん
239 :
デフォルトの名無しさん :03/07/27 21:50
<初心者> 以下の A - I の位置に 1 から 9 までの数字を各一つずつ当てはめ、 それぞれの括弧の中の合計数が同じになるような組み合わせを すべて見つけてほしい。 ( A [ B ) C ( D ] E [ F ) G ( H ] I ) 例) ( 8 [ 3 ) 7 ( 1 ] 6 [ 4 ) 5 ( 2 ] 9 ) 8+3 = 3+7+1 = 1+6+4 = 4+5+2 = 2+9 = 13
<中級者> 覆面算の自動回答プログラム(足し算限定)を作成すること。 例) SEND +MORE ----- MONEY 9567 +1085 ----- 10652
<上級者> まず、マッチ棒を3本使用し、平面上に三角形の形に並べてみる。 この場合、各マッチ棒の両端は必ず他の1本の端と接していることになる。 次に、各マッチ棒の両端が必ず他のマッチ棒2本と接するように並べるには、 マッチ棒を12本使用すればできる(図省略)。 では、各マッチ棒の両端が必ず他のマッチ棒3本と接するように並べるには、 最低何本のマッチ棒が必要となるだろうか?
<仙人> 4色問題を「自力で」証明してみなさい。 <神> Collatz の予想を証明、若しくは判例を挙げてみなさい。
243 :
デフォルトの名無しさん :03/07/27 23:23
244 :
デフォルトの名無しさん :03/07/27 23:27
C Magazineの最後のほうにあるような問題書き込んでいるやつがいるな。
4色問題って3次元でも4色でOK?
くそ 順列生成ルーチンで一苦労だぜ
今気づいたがすでにC言語をどれだけ知ってるかは関係なくなってるな
>>239 をやろうとしているのなら1-9の9個だな
9!通りあるのか…
251 :
デフォルトの名無しさん :03/07/28 12:16
>>237 最近の言語だと、;がくるまで++は評価されない罠
>>251 最近の言語って何だ。C2003でも出て規定されたのか?
(^^)
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
ichibanのiだから
257 :
デフォルトの名無しさん :03/08/24 18:11
>>14 の課題が出来たので、見てもらいたいのですが、
ソースをgzip + uuencodeしたものを張り付けてもいいでつか?
200行ちょっとあって、そのまま張り付けるには行数が多いんです。
258 :
デフォルトの名無しさん :03/08/24 18:20
begin 644 jihan.c.gz M'XL( /Z!2#\ Z56WT\;1Q!^]OT5*Z(TMK'C.PHO''8?JE;J2]*'2E5%+63L M,YQJSL0^!]&*/X8PIE%(&RA5J .&MDXQ,<2\@=160:4EM(0GTM=4G=G=.]^= M3=JJB8#;W=GY\<TWLW/%M+*%2LY@(V4[9Q:O3Z84Y4K.R)N6P6Y\\-'[[XS= M?'?L[9OOW0@-AA)1IJDQ-H0_FLH_5!9-*$HBJK H>W3\Y">%UO;LM($:6-DN M5;(V^S!3*!CVF%@IGRFDQK1L9FGJK&'%F#4D_Z).9X,^=-(5XI+9HFF-^KQ) MZZA&"=$_- UU.(=-_&G7?OCJ"-I;?[I'ZL[!WL]P7U-7CN;O:&(Q1(L%^N^( M)90YZ:=.X3"AIO&TT0J_7D&$[I*/W,4T2S(,, B2,H=:)4K3)90>F^&V6)R# MAH:>;^W Q9/ZQEVHP0L2V_L%SAI/40!:L,91O5TT<[[;8>$PBXIEA* E3TPT M%LH72RQLHCNJSDPVXD\E;O7W1\C3$%>8#_==?3.'D+-A=G4P]['5%Q/QF.D8 M$]KC*4ON1'0E-*>X%^VBG2G@-7DK4\A6"AG;/*-OX)2]_H4LFP*R5+5^84 M%XR@.,9;/UM_]? 8$WFZ=@@7:X?KZUV0>$44%_^@Y4O0$:=Z3ZAB\O2UL"%H M4JH_V04.Q22^W(!=B]ZX)S/6A#$V5;2,6<KQ/0SG A[ (ZCAL2]8==ASN@Y; M3!N6GRU8@@9L=1#P* W3QDS&LHU<C%V"1+Y4G*+XD>[+YSL'M6, 3OM]5S^( M"LRSL%#%^IG&DDD_*@2(C#2ND3XA[\5%W.[7TG19I0L^7YUCAVN1?] BF'O) M83RN7W*8IH3YA1/>8[T3B"HX[@G+D[SI#.5LN_'X3+2;,/6["#2_/Z$\M3Z' MQ>X<XBY\^R,V*,H?<U?!%*)JGCG2&,R;%MP8<#-I&5FC7,Z49@DX=\$<>@XX M.)#:-,G,3)H%P\%7\QTCZ5T- FC*A"]?PCMY.2*$B$6P"N?+K<V3 ']"H?&2 MD?F$X)TC6+VY#=A.)8/&42VA!5]P[+BZGC?C22\*CI _<E[6P20K/A,R(=Q0 M3Q5Q!U0M &IOMX1%:=!/H_$*T<@E30.VJ]]43^8WJC6X:/[:BT2X2[[%-?JZ
MVT4>5,C)@YTYV\4>SA6Y94]-T^O)7'O\H8.+U59S@YKM_ +\#K"W^=TRW%\_ M1&0>HR6W&W3U4'RPB5-NZ[SL#< 8N&NZ(("4'Q$-P==!>OA67:U"]27L?ET3 M#P+WQ>W<OH:$=C3JWBG1Q>-QP20+Y;A]EO#T:.Z*Q5+HA>"Q$"$Z^7IY*(2H M77?;?))B1CXSHU VQ,7 N>KRG<+)&>.5"?EH.L_W&WB#WD6:H$@&!X65HYC& M?P^)SQ4<0NJG.P?0%(\ -9?_'CF%R#N+4[0QQFUW*C?(_\WSVBGLS]\)9*'= M>N4\4[*R92/Q/SWDAF."#U@=*#JEYZF$"9P.36NZ0O,0^O$ _H"VOQ:@#4OH MS7/<>0B[VW^U]V$-MN$8)1<#15*_UUYG*778[[I;)*ZM,,U3O"K0^1(63WY4 M4P<&TY+5DJD2:5WW3TL]O01XALQ<>FM4A:5;T"1'TFRX+^*P+(^VRV$T%&-E M\U.CF*?O""YP[K:<9) @^:+RM_+:K6L"04_+<BB:9!F[:'(=NDRCID)S]3<X MXV_+"RSB1=AUBZ5SSU<%JCNSJ(+GG"U<(B4?:]>\4[XBF91!@FHJ8UJ\\61* M$]D8XW!&H[BX[6TZ,W*Z]J+;F<'(*%WOFBYHY!#0_-N)5C9B;RURH,BA49/& M!R>"3O'^#]VFYUWC:OPU[DPTS &_0T"QV2W;*5KJZ+*;.X<$4%SK]"I!Q[J' FBOLXR-7@2]CFC\0S?(A?SB_@<![I5&%O%Y5 >?X-OR:'W!H. #K end
261 :
デフォルトの名無しさん :03/09/02 20:56
#including studio.h; void main (void){ fprintf("My darring!\\n"); }
262 :
デフォルトの名無しさん :03/09/02 21:06
スミマセン!厨な質問なんですが OSがMEで、VC++6.0でのことなんですが、 場合によりけりで リンク中... LIBCD.lib(crt0.obj) : error LNK2001: 外部シンボル "_main" は未解決です Debug/Lesson01.exe : fatal error LNK1120: 外部参照 1 が未解決です。 link.exe の実行エラー とでてしまいます。どういう場合にでるか、つかめないのですが、頻繁にでます。 どういう原因が考えられますか?ちなみに、アンチウィルス等解除してやっても同じです。
263 :
デフォルトの名無しさん :03/09/02 21:55
264 :
デフォルトの名無しさん :03/09/02 22:03
>>263 あっ!はい!ダメなときは何度やってもダメです。
標準的なHALLOでも出てしまいます。末期ですかねェ・・(´д`;);
265 :
デフォルトの名無しさん :03/09/02 22:06
>>264 HALLOなんて書いてる時点で末期(W
てか最初のウィザードでできたmainを使いたまへ
266 :
デフォルトの名無しさん :03/09/02 22:14
>>264 265の言うようにソース退避して作り直すのがいいな。
うまくいったりいかなかったりって変だな。
プロジェクトの設定いじったの?
267 :
デフォルトの名無しさん :03/09/02 22:14
>>265 あぁぁぁ・・・、HALLOはどうなるか試しにやってみました。
そしたら、こんな結果に・・・。ダメダ・・(;´д`);
>てか最初のウィザードでできたmainを使いたまへ
単純なwin32アプリケーション使えてことでよいでしょうか?
268 :
デフォルトの名無しさん :03/09/02 22:17
269 :
デフォルトの名無しさん :03/09/02 22:17
>>266 あぁぁぁ・・・、行き違いました。(;´д`);
>うまくいったりいかなかったりって変だな。
立ち上げなおすとコンパイル、リンク通ったりします。
>プロジェクトの設定いじったの?
いえ、まだ、アプリとウィンドウの初期化などの雛形を作って、チョコチョコやってる段階ですので、全然できません。
270 :
デフォルトの名無しさん :03/09/02 22:20
>>268 チュ、チュートリアルとはなんでしょうか?
バカでスミマセンデス。。。(;´д`);
271 :
デフォルトの名無しさん :03/09/02 22:21
>>269 リソースを使はなそうなコンソールアプリケーションをやる。
だめなら
OSを2000にしてメモリ増設する。
272 :
デフォルトの名無しさん :03/09/02 22:22
>>270 ヘルプについてるやつで説明を読みながら物を作ってくやつ。
しかしそれ以前の問題の気がする。 271参照
>>271 やはり、MEは対応怪しいのでしょうかねェ・・・(T.T)
C++6.0はXPは全く問題なくいくのでしょうか・・・?
>>273 Xpはまだやってないよん。
2000Proは良いよ。
メモリは最低256は欲しいが。
アリガトウございます。見てみます。 誤りの修正を導いてくれるような感じなのかなぁ。(´Д`)
>>275 さんもアリガトウございます。
こんなにレスが来るとは・・・(T_T)
間違いました
>>274 さんへです。みなさんドウモでした!!
スミマセンでした。 解決いたしましたので御一報を入れさせてください。 結論から申し上げますと、操作間違いでした。 新しく、フォルダの.cppを開いた後、ファイル>ワークスペースを開く とやるべきところを そのまま、コンパイルしてしまって、プログラムに自動で開く.dswファイルを選ばせてしまったのが原因でした。
280 :
デフォルトの名無しさん :03/09/13 16:59
>>355 一般家庭でDNAコンピュータなんてあと20年は無理ですな。
配られない客がかわいそうだな
283 :
supermathmania ◆ViEu89Okng :03/09/19 15:27
出来る人出てきてください。 [問題]インクルードはstdio.hとstdlib.hのみで、 画面のどこかにサイズ100×100以上のウィンドウを1秒以上5秒以下の間出して、そのウィンドウを閉じるプログラムを書け。
>>283 へんな問題(´д`)
なんでstdio, stdlibだけっていってるのにGUIなんだ?
GUI環境も指定してないし。
>>283 自分でもできない問題を解いてもらいたいのなら、宿題スレへどうぞ。
まぁ、おまえのCのレベルは分かったわけだが。
引数で再入チェック有りの一秒以上、五秒以下で終了するプログラムを書いて、自分自身をsystemで呼び出せばいい Windows環境ならこれで出来る
って言うか、100×100の単位はなんだよ? Cの前に、日本語学べ。
>>280 =288
なぁ、このスレを1から読んでみなよ。ひどいスレだろ?
最初からまともな問題がなかったので、だれもまじめに解こうなんてしないんだよ。
最新は
>>283 だが、これもひどいだろ?
どこか別のスレでやったほうが報われるぞ。
290 :
supermathmania ◆ViEu89Okng :03/09/22 16:14
Re:>287 ピクセル
ウィンドウのサイズの単位ってピクセル以外にあるの?
292 :
supermathmania ◆ViEu89Okng :03/09/22 17:13
Re:>291 cmとかインチがある。(印刷設定の場合。) あとはcharacter単位のサイズというのがある。
294 :
デフォルトの名無しさん :03/09/23 01:33
>>236 正直、そのソースを書き込むのは無理があると思われ
それともここにかけるような短いコードで書けるのか・・?
>>294 任意の 和・差であって 1+2+3 のような式ではないから書けると思うよ
任意の整数と言う事は、事実上無限の整数を扱える必要があるんだが。 そこんとこを考慮して、メモリの考慮が不用なんだろ?
>>296 出題者自身も正しいコードを書けてるか不明だよな。
ところで、ここは出題者のレベルを確かめるスレだろ?
char Add(char a, char b,int *cy){ int r; a-='0' ; if( a<0 || a>9) a=0; b-='0' ; if( b<0 || b>9) b=0; r= a+b; *cy += r / 10; r=r % 10; return r+'0'; }
299 :
デフォルトの名無しさん :03/09/24 00:40
>>298 遅そうだなぁ
長い整数を(10進数として)表示することを考えると
そうしたくなる気持ちもまあわかるけど。
そのアプローチなら、256*256の加算テーブルとキャリーテーブル
を用意してはどうか?
char add(char lhs, char rhs, int* carry)
{
static char ADD_TABLE[256][256] = { /*...*/ };
static char CARRY_TABLE[256][256] = { /*...*/ };
*carry=CARRY_TABLE[lhs][rhs];
return ADD_TABLE[lhs][rhs];
}
近年は300ゲットがおしゃれ。
あ、>299では中途半端な全加算機か・・・ こうでつね。 char add(char lhs, char rhs, int* carry) { static char ADD_TABLE[256][256] = { /*...*/ }; static char CARRY_TABLE[256][256] = { /*...*/ }; //lhsにcarryを足しておく。テーブルもそのように用意しておく lhs+=*carry; *carry=CARRY_TABLE[lhs][rhs]; return ADD_TABLE[lhs][rhs]; }
a[i]と等価な式を、添字を使わずに記述せよ。 また、同様にa[i][j]も。
*((*a+i)+j)
>>303 微妙に間違ってるぞ。
あと、iやjに足し算やらが入ってもいいようにしてやってくれ。
305 :
デフォルトの名無しさん :04/01/03 22:30
Cなら宣言には関わらず a[i] => *(a+i) a[i][j] => *(*(a+i)+j) じゃないの?
308 :
デフォルトの名無しさん :04/01/06 00:02
問1:空所に適当な語句を入れよ。 #include <stdio.h> #define NUM 10 void main(void){ int i, goukei=0; for(i=0 ; i<NUM ; i++){ goukei+=NUM-i; } printf("0〜%dまでの和=%d",NUM,goukei); } ヽ( ゚∀゚)ノ ワーイ、できた!これで僕も[ ]。
>307 配列についての理解不足
あーちょっと質問っつうかアンケ〜トいいかな。 C++で new 使うのって抵抗ある? (Cならmallocとかね。) コレ系って、ほとんどの処理系でヒープ領域に確保に行くじゃない。 んで、自分の中では以下のような理由で、「抵抗あり」なんだけど、みんなはどう? ・ヒープ領域の断片化がイヤ ・割り当て/解放時のオーバヘッドがイヤ ・領域不足でbad_allocが投げられるかもしれないからイヤ (Cなら NULLが返ってくるケース) ちなみに↓は俺の場合は無い。 ・ポインタだらけになるからイヤ * placement newとかは持ち出さないでね。ややこしくなるから。
>>311 サイズのわかんない2次元配列で
一体どうやって
a[1][0]
にアクセスできんだよ。
たとえば、a[x][y]であれば、
a[0][0], a[0][1], a[0][2], ... a[0][y-1] まで行き着いたら、
やっと
a[1][0]
にたどり着けんだよ。
最初の添字にyを乗ずる必要があんだよ。
宣言時のyに当たるものを欠いた>307の式では、
意図する要素には辿りつけねえんだ。
でもな、そもそも>302の問題にはyに当たる宣言時のサイズがねえんだよ。
だから>306が突っ込んでんだよ。
>aの宣言次第で解が変化する
ってな。
まあ、2次元配列なんてめったにお目にかかんねえだろ。
満足したか。ありがとう。
ごめん訂正。 >たとえば、a[x][y]であれば、 ↓ たとえば宣言が、int a[x][y];であれば、 もう満足だろ。ありがとう。
>>313 あんたが一番理解してないように見えるけど。
まずは a[i][j] が *(*(a+i)+j) と異なるような a の宣言を示してくれないか?
確かにa[i][j]は、宣言が
int **a; or int *a[x];
の時と、
int (*a)[y]; or int a[x][y];
の時とで意味が違うが、どちらにしても*(*(a+i)+j)と等価だ。
>>313 宣言がint a[x][y];の時に*(*(a+i)+j)と書くと、
a /* type=int [x][y]; */
a+i /* type = int (*)[y]; value = &a[i] */
*(a+i) /* type = int [y]; value = a[i] */
*(a+i)+j /* type = int *; value = &a[i][j] */
*(*(a+i)+j) /* type= int; value = a[i][j] */
こういう風に、解釈されるはずだ。
>最初の添字にyを乗ずる必要があんだよ。
>宣言時のyに当たるものを欠いた>307の式では、
>意図する要素には辿りつけねえんだ。
これは、aの型情報の中にyがある(aの型はint [x][y]で、暗黙にint (*)[y]になる)
ので問題なし。
なるほど
>>308 でも考えたら最後の10-10は足す必要ないからこのコードでいいんだよね。
…力業だなー。
aa
Cなら宣言には関わらず式中の a[i] は*(a+i)に読み替えられるって、 K&RにもエキスパートCプログラミングにも、前橋のポインタ本にも 書いてあった気が。