C言語なら俺に聞け(入門編)Part 66
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/06/12(土) 19:36:52★前スレ
C言語なら俺に聞け(入門編)Part 65
http://pc12.2ch.net/test/read.cgi/tech/1274976173/
★過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★初心者、初級者の方は他の質問スレのほうが良いかもしれません。
例えば
【初心者歓迎】C/C++室 Ver.73【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1274395127/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 136代目
http://pc12.2ch.net/test/read.cgi/tech/1274827528/
★C++言語については避けてください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0002デフォルトの名無しさん
2010/06/12(土) 19:57:412 static int foo(
3 int (*say)(char const*),
4 char const*message
5 ) {
6 return say(message);
7 }
8 static int bar(
9 int say(char const*),
10 char const*message) {
11 return say(message);
12 }
13
14 static int baz(char const*message) {
15 return puts(message);
16 }
17 int main(void) {
18 foo(baz, "hello");
19 bar(baz, "world");
20 return 0;
21 }
9行目のsayは、C言語の規格としてはなんと呼ばれていますか
規格のセクションを引用して答えてください
一応、環境とか
cc -Wall -std=c89 -pedantic-errors -c foo.c
cc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-48)
0003デフォルトの名無しさん
2010/06/12(土) 20:08:49じゃないの?
第一引数は関数のポインタです って使い方っぽいのだが
0004デフォルトの名無しさん
2010/06/13(日) 02:24:39ポインタ使わずに関数そのものをコールすれば済むことじゃないですか???
0005デフォルトの名無しさん
2010/06/13(日) 02:30:11switch(state)
{
case TITLE:
titile();
break;
case MENU:
menu();
break;
case PLAY:
play();
break;
(延々つづく)
}
================================
state = TITLE;
func[state];
0006デフォルトの名無しさん
2010/06/13(日) 02:31:550007デフォルトの名無しさん
2010/06/13(日) 02:34:44たとえば
titile()とmenu()の関数の型が
int titile(void)
double menu(int)
とかになっていても
state = TITLE;
func[state];
これで実行させることができるの?
さすがに関数の型を合わさないといけないような気がしますが
0008デフォルトの名無しさん
2010/06/13(日) 02:41:430009デフォルトの名無しさん
2010/06/13(日) 02:44:39使う利点なんて無いよ。
0010デフォルトの名無しさん
2010/06/13(日) 02:48:28今はコンパイラが勝手にテーブルにしたり、そこまで速度を気にしなくてもよくなったり
0011デフォルトの名無しさん
2010/06/13(日) 02:51:550012デフォルトの名無しさん
2010/06/13(日) 02:55:04一部の関数の型を変えないといけなくなった。そうなったときに
こうなったとき修正がめっちゃやばそうなが気がします
0013デフォルトの名無しさん
2010/06/13(日) 02:55:15速度を極力落とさずに分岐する手段として使うけどね。
0014デフォルトの名無しさん
2010/06/13(日) 03:01:540015デフォルトの名無しさん
2010/06/13(日) 03:06:360016デフォルトの名無しさん
2010/06/13(日) 03:27:040017デフォルトの名無しさん
2010/06/13(日) 07:41:160018デフォルトの名無しさん
2010/06/13(日) 08:48:28今のCPUのようにパイプライン段数が深くなったCPUでは、関数ポインタの
呼び出しの時に一度パイプラインをフラッシュして投機実行も破棄してしま
うのでパフォーマンスは落ちる
C++の仮想関数も同じ仕組みを使っているから、パフォーマンスを最大限に
追求する場面では仮想関数はあまり使わない
http://gigo.retrogames.com/t_lab/chapter2.html
でも上記のようなURLを見るとあまり関係ないようである
実際Cのqsort()とC++のsort()ではsort()の方が速いが、それは関数ポインタ
による物ではなく、主にデータのコピー方法によるものである
qsort()はバイト単位でコピーするが、sort()はtemplateを使っているので
それぞれのデータ型に最も適した方法でコピーするから速いのである
0019デフォルトの名無しさん
2010/06/13(日) 08:50:21乗る前がものすごく遅いだけで、一度L2キャッシュにテーブルが乗って
しまえば、以降の呼び出しは同じラインによって上書きされない限り
それほど気になるコストは掛からないと言える
0020デフォルトの名無しさん
2010/06/13(日) 09:23:26構造体を使わないからだよ
0021デフォルトの名無しさん
2010/06/13(日) 10:51:21つqsort()
0022デフォルトの名無しさん
2010/06/13(日) 10:56:210023デフォルトの名無しさん
2010/06/13(日) 11:03:22見た目のグロさに過剰反応してしまう奴が後を絶たない
0024デフォルトの名無しさん
2010/06/13(日) 13:02:150025デフォルトの名無しさん
2010/06/13(日) 13:09:090026デフォルトの名無しさん
2010/06/13(日) 13:21:39龍神録の9章を参考にコンフィグを作っています。
が、2P(player_flag==1)コンフィグ用の configpad.◯◯[1] に値が代入されません。
少々分かりづらくて恐縮ですが、対応策をお願いします。
また1P(player_flag==0)は問題なく動きます。
0027デフォルトの名無しさん
2010/06/13(日) 13:28:56それ言うためだけに書き込むのか・・・・・
0028デフォルトの名無しさん
2010/06/13(日) 14:04:190029デフォルトの名無しさん
2010/06/13(日) 14:05:37それ言うためだけに書き込むのか・・・・・
0030デフォルトの名無しさん
2010/06/13(日) 14:28:56それ言うためだけに書き込むのか・・・・・
0031デフォルトの名無しさん
2010/06/13(日) 14:30:310032デフォルトの名無しさん
2010/06/13(日) 14:35:01マジで一言多いから自重してほしい
0033デフォルトの名無しさん
2010/06/13(日) 14:38:49煽るだけで何もできない奴と
余計な一言付ける奴とがいる
0034デフォルトの名無しさん
2010/06/13(日) 14:40:09アドバイスはちゃんとしてるのに余計なこと付け加えるヤツと、>>25みたいなのが居るよな
0035デフォルトの名無しさん
2010/06/13(日) 14:41:04そのソースでない所にある、configpad.◯◯[1]に代入してる所でミスってるんじゃないかな
if(player_flag==0){return pad_2.key[Handle}
else if(player_flag==1){return pad_2.key[Handle}
どっちもpad_2.key返してるけど、ここも気になる
0036デフォルトの名無しさん
2010/06/13(日) 14:45:15お前らまとめてどっか行けよ
0037デフォルトの名無しさん
2010/06/13(日) 14:46:42ワロタw
0038デフォルトの名無しさん
2010/06/13(日) 14:47:220039デフォルトの名無しさん
2010/06/13(日) 14:52:090040デフォルトの名無しさん
2010/06/13(日) 14:53:070041デフォルトの名無しさん
2010/06/13(日) 14:54:250042デフォルトの名無しさん
2010/06/13(日) 14:55:11お前らいい加減にしろよ
0043デフォルトの名無しさん
2010/06/13(日) 14:56:081pが動くときは
if(player_flag==0){return pad.key[Handle}
else if(player_flag==1){return pad_2.key[Handle}
こうなってます。確認のため一時的にpad_2にしましたすいません。
>そのソースでない所にある、configpad.◯◯[1]に代入してる所でミスってるんじゃないかな
その通りでした。
5時間くらいずっと悩んでましたがおかげさまでうまくいきました。
以下を書き足したらすんなりと・・・。
configpad.down[1]=0;
configpad.left[1]=1;
configpad.right[1]=2;
configpad.up[1]=3;
configpad.bom[1]=4;
configpad.shot[1]=5;
configpad.slow[1]=11;
configpad.start[1]=13;
configpad.change[1]=6;
ありがとうございました。
0044デフォルトの名無しさん
2010/06/13(日) 14:56:30お前ら(ry
馬鹿すぎw
0045デフォルトの名無しさん
2010/06/13(日) 15:03:180046デフォルトの名無しさん
2010/06/13(日) 15:12:36お前らどっかいけよ
0047デフォルトの名無しさん
2010/06/13(日) 15:14:08お前どっかいけよ
0048デフォルトの名無しさん
2010/06/13(日) 15:16:360049デフォルトの名無しさん
2010/06/13(日) 15:26:170050デフォルトの名無しさん
2010/06/13(日) 15:28:400051デフォルトの名無しさん
2010/06/13(日) 16:23:17http://www.nicovideo.jp/watch/nm6415611
自分でやったんだけど何故か除算が表示されないんです。↓
#include<stdio.h>
double tasizan(double x, double y);
double hikizan(double x, double y);
double kakezan(double x, double y);
double warizan(double x, double y);
int main(void){double a,b;scanf("%lf&lf",&a,&b);
printf("加算:%f\n",tasizan(a,b));printf("減算:%f\n",hikizan(a,b));
printf("乗算:%f\n",kakezan(a,b));printf("除算:%f\n",warizan(a,b));return 0;}
double tasizan(double x,double y){
double answer;
answer=x+y;
return answer;}
double hikizan(double x,double y){
double answer;
answer=x-y;
return answer;}
double kakezan(double x,double y){
double answer;
answer=x*y;
return answer;}
double warizan(double x,double y){
double answer;
if(y==0){
printf("ゼロ除算エラー\n");
answer=0.0;}else{answer=x/y;}return answer;}
何処が間違ってるか教えて下さい!!
005251
2010/06/13(日) 16:24:41見辛くてすいませんがどうかヨロシクお願いします!
0053デフォルトの名無しさん
2010/06/13(日) 16:25:250054デフォルトの名無しさん
2010/06/13(日) 16:26:08#include<math.h>
つけてみろカス
0055デフォルトの名無しさん
2010/06/13(日) 16:28:34005651
2010/06/13(日) 16:37:30ハズレの時に来ちゃったか
ありがとうございましたー
0057デフォルトの名無しさん
2010/06/13(日) 16:40:54warizan()のif(y==0)も怪しい
0058デフォルトの名無しさん
2010/06/13(日) 16:44:310059デフォルトの名無しさん
2010/06/13(日) 18:36:58scanf("%c",a[x]);
みたいに使えないんだけど
0060デフォルトの名無しさん
2010/06/13(日) 18:46:210061デフォルトの名無しさん
2010/06/13(日) 18:48:280062デフォルトの名無しさん
2010/06/13(日) 19:34:006行目のscanfの %記号
scanf("%lf&lf",&a,&b);
↓
scanf("%lf%lf",&a,&b);
0063デフォルトの名無しさん
2010/06/13(日) 20:11:26全部 gets でやらせろ。
0064デフォルトの名無しさん
2010/06/13(日) 20:16:130065デフォルトの名無しさん
2010/06/13(日) 20:22:390066デフォルトの名無しさん
2010/06/13(日) 21:13:570067デフォルトの名無しさん
2010/06/13(日) 21:15:480068デフォルトの名無しさん
2010/06/13(日) 21:19:28|= ~たしてる値
0069デフォルトの名無しさん
2010/06/13(日) 21:20:53&= ~たしてる値
0070デフォルトの名無しさん
2010/06/13(日) 21:21:43a |= b;
a &= ~b;
0071デフォルトの名無しさん
2010/06/13(日) 21:30:16何も知らない初心者にいきなりポインタ教えるのは酷というもの。
0072デフォルトの名無しさん
2010/06/13(日) 21:31:400073デフォルトの名無しさん
2010/06/13(日) 22:25:54gets()がダメな理由が、引数がポインタだからってことだったら、fgets()とかなにもかもダメだろ。
0074デフォルトの名無しさん
2010/06/13(日) 22:33:270075デフォルトの名無しさん
2010/06/13(日) 22:37:410076デフォルトの名無しさん
2010/06/13(日) 22:56:390077デフォルトの名無しさん
2010/06/13(日) 23:08:36getintとすべきでは?
0078デフォルトの名無しさん
2010/06/13(日) 23:11:421. 戻り値としてEOFの可能性がある。
2. 昔はchar型を戻り値とすることができなかった。
0079デフォルトの名無しさん
2010/06/13(日) 23:16:200080デフォルトの名無しさん
2010/06/13(日) 23:17:37いわれてみれば戻り値がcharの標準関数ってみたことないな。
0081デフォルトの名無しさん
2010/06/13(日) 23:23:000082デフォルトの名無しさん
2010/06/14(月) 00:42:010084デフォルトの名無しさん
2010/06/14(月) 05:10:55cstl
使ったことはないけどな!
0085デフォルトの名無しさん
2010/06/14(月) 06:13:12a=1;
b=1;
a|=b; // a == 1;
a&=~b; // a == 0;
足したのを引いたつもりがずいぶん引かれてしまったように見える。
質問があいまいだからこれでもよかったのかもしれないし、違った(足す前の状態に戻したかった)のかもしれない。
0086デフォルトの名無しさん
2010/06/14(月) 07:20:15前のに戻したいなら前のを覚えとけ
0087デフォルトの名無しさん
2010/06/14(月) 07:40:38足した時点で足されてないのが原因では
0088デフォルトの名無しさん
2010/06/14(月) 08:35:31float a = -1.5;
long* t = (long*)&a;
t &= 0x7FFFFFFF; // これで a=1.5 になる
これは問題ある?
互換性とか
008988
2010/06/14(月) 08:37:18誤)t &= 0x7FFFFFFF;
正)*t &= 0x7FFFFFFF;
0090デフォルトの名無しさん
2010/06/14(月) 09:44:57IEEE754ならそれでいいけど、他の浮動小数点フォーマットの場合も
多々あるので互換性はない
0091デフォルトの名無しさん
2010/06/14(月) 10:56:49x86みたいに実数演算プロセッサが別にある場合、一旦メインメモリに転送しないといけなくなるので無駄に遅くなる恐れがある。
そうでなくても、fabs()自体が高速に実行できるように実装されているはずだから特にメリットはない。
0092デフォルトの名無しさん
2010/06/14(月) 10:59:170093デフォルトの名無しさん
2010/06/14(月) 13:14:16フラグ倒すだけならXOR使うでしょ普通。
>>87
え?
0094デフォルトの名無しさん
2010/06/14(月) 16:44:29え?
0095デフォルトの名無しさん
2010/06/14(月) 17:05:06> >>86
> フラグ倒すだけならXOR使うでしょ普通。
え?
> >>87
> え?
うん
0096デフォルトの名無しさん
2010/06/14(月) 17:39:08これ使わなかったらどうなるの?関数を多用する時にとりあえず
*つけとけばいいんですか?
0097デフォルトの名無しさん
2010/06/14(月) 17:47:080098デフォルトの名無しさん
2010/06/14(月) 18:15:01これ使わなかったらどうなるにゃ?関数を多用する時にとりあえず
*つけとけばいいのかにゃ?
0099デフォルトの名無しさん
2010/06/14(月) 18:20:590100デフォルトの名無しさん
2010/06/14(月) 18:26:41(゚、 。`フ _
_」、 "∨
└じl_r' ,)
0101デフォルトの名無しさん
2010/06/14(月) 18:30:15例えば、printf("Hello!\n");と書いたとき、あんたは既にポインタを使っている。
0102デフォルトの名無しさん
2010/06/14(月) 18:32:04意味がわからん
0103デフォルトの名無しさん
2010/06/14(月) 18:34:38与えたビットを 強制的に立てるのが or
与えたビット以外を 強制的に落すのが and
与えたビットを 反転するのは xor
足すとか引くとかの意の取り扱いが難しい
# 論理数学的には 加算法 って xor が一番近いんだっけか?
0104デフォルトの名無しさん
2010/06/14(月) 18:38:131ビットの足し算はxorだよ。繰り上がりはandね。
0105デフォルトの名無しさん
2010/06/14(月) 18:40:33文字列リテラルはそれ自体がchar *と言う型のポインタ値として扱われる。
つまり、printf("Hello\n");と書いただけで、printf()関数にcharへのポインタを渡すと言うプログラムになっているわけだ。
0106デフォルトの名無しさん
2010/06/14(月) 18:42:150107デフォルトの名無しさん
2010/06/14(月) 18:46:40配列を渡す場合
FILE みたいに、ものすごくカプセル化したい場合
0108デフォルトの名無しさん
2010/06/14(月) 18:49:080109デフォルトの名無しさん
2010/06/14(月) 18:51:080110デフォルトの名無しさん
2010/06/14(月) 18:52:55文字列リテラルの型は配列だ
そして配列からポインタへの暗黙の変換が規定されているだけだ
0111デフォルトの名無しさん
2010/06/14(月) 18:55:48大丈夫、誰もそれを否定していない。
0112デフォルトの名無しさん
2010/06/14(月) 19:02:49文字列リテラルは文字列リテラルであって配列じゃないだろう
0113デフォルトの名無しさん
2010/06/14(月) 19:03:16アホ
0114デフォルトの名無しさん
2010/06/14(月) 19:07:03配列は内容が同じであっても必ず別々に確保されるぞ
0115デフォルトの名無しさん
2010/06/14(月) 19:22:030116デフォルトの名無しさん
2010/06/14(月) 19:35:22規格も読まないアホなんだなお前って
0117デフォルトの名無しさん
2010/06/14(月) 19:42:22人をアホ呼ばわりするだけで根拠を示せないの?どっちが…
初期化するときにもリテラルは使えるが配列は使えないよね
0118デフォルトの名無しさん
2010/06/14(月) 19:49:480119デフォルトの名無しさん
2010/06/14(月) 19:50:36"ABC" と "ABC" のような全く同じ文字列どころか、
"DEF" と "ABCDEF" のように最後だけ同じ文字列を
1つにまとめるとかいう最適化だって許されてるくらいだのに
0120デフォルトの名無しさん
2010/06/14(月) 19:56:25ここで「書き換えてはならない」という持って回った言い方にしたのは、
書き換えてはならないにも関わらず、
昔との互換性のためにchar*への変換が許されているから
こういう特殊な扱いがあるという意味では確かに普通の配列とは異なるが、
型としては確かに配列型だ
0121デフォルトの名無しさん
2010/06/14(月) 20:08:40特別な配列だということで納得しました
0122デフォルトの名無しさん
2010/06/14(月) 20:57:03それはねーよ
0123デフォルトの名無しさん
2010/06/14(月) 21:04:400124デフォルトの名無しさん
2010/06/14(月) 21:20:230125デフォルトの名無しさん
2010/06/14(月) 21:21:300126デフォルトの名無しさん
2010/06/14(月) 21:22:370127デフォルトの名無しさん
2010/06/14(月) 21:23:170128デフォルトの名無しさん
2010/06/14(月) 21:25:31整数の足し算が xor と and で出来るって言いたいんだろう
まあ幼稚園児でも知ってることだけど
0129デフォルトの名無しさん
2010/06/14(月) 21:27:191桁の足し算は、と言ってるだけだ
0130デフォルトの名無しさん
2010/06/14(月) 21:27:420131デフォルトの名無しさん
2010/06/14(月) 21:30:170132デフォルトの名無しさん
2010/06/14(月) 21:37:440133デフォルトの名無しさん
2010/06/14(月) 21:53:56「char *への変換が許されてる」っていうけど、そうじゃなく
配列のまま使うなんてことあるの?
"hello"[2]
こういう感じ?
0134デフォルトの名無しさん
2010/06/14(月) 22:10:470135デフォルトの名無しさん
2010/06/14(月) 22:21:22そういうかんじ。
0136デフォルトの名無しさん
2010/06/14(月) 22:23:55printf("%c\n", array[1]);
0137デフォルトの名無しさん
2010/06/14(月) 22:28:19ポインタだね。
0138デフォルトの名無しさん
2010/06/14(月) 22:59:08おいおい
ポインタでもできることだろう・・・
0139デフォルトの名無しさん
2010/06/14(月) 23:06:59一行目、なんか気になる。
そんな規定あったっけ?
入門スレだから?
0140デフォルトの名無しさん
2010/06/14(月) 23:18:18書き換え不可だと、同じ文字列をまとめたりする最適化ができるからね
0141デフォルトの名無しさん
2010/06/14(月) 23:30:580142デフォルトの名無しさん
2010/06/14(月) 23:34:50そうだっけか?こりゃ失礼。
未定義なだけかと思ってた。
もっかい読み直してくるわ。
0143デフォルトの名無しさん
2010/06/15(火) 00:02:010144デフォルトの名無しさん
2010/06/15(火) 01:48:53それだけのために最適化とか考える物なのかな
0145デフォルトの名無しさん
2010/06/15(火) 02:15:53もしくは、マクロ中に含めてたりしたらいつのまにか爆散してるかもしれない
0146デフォルトの名無しさん
2010/06/15(火) 02:22:380147デフォルトの名無しさん
2010/06/15(火) 02:41:370148デフォルトの名無しさん
2010/06/15(火) 02:53:43リテラルは1か所に集められるだろ。
int a=100, b=100, c;
c = a + b + 100 + 100;
if(printf("%d",100)==100);
これだけあっても 100 は1つだけで良い。
0149デフォルトの名無しさん
2010/06/15(火) 02:58:32ここは200になるだろw
0150デフォルトの名無しさん
2010/06/15(火) 03:00:48add ax, [label1]
よりも
add ax, 0064H
のがどう考えても効率がいい。使用メモリも少ない。
0151デフォルトの名無しさん
2010/06/15(火) 06:32:45初期化データはここに入れられる
0152デフォルトの名無しさん
2010/06/15(火) 06:34:020153デフォルトの名無しさん
2010/06/15(火) 07:02:430154デフォルトの名無しさん
2010/06/15(火) 08:07:150155デフォルトの名無しさん
2010/06/15(火) 08:41:350156デフォルトの名無しさん
2010/06/15(火) 09:06:22ならよかったのに
0157デフォルトの名無しさん
2010/06/15(火) 14:20:180158デフォルトの名無しさん
2010/06/15(火) 17:33:55首吊ってきていいですか?
0159デフォルトの名無しさん
2010/06/15(火) 20:16:17#define N 20
int main (void)
{
int j;
int f[N + 1];
f[0] = 1;
f[1] = 1;
f[j] = f[j - 2] + f[j - 1];
for (j = 0; j <= N; j++)
printf("f%d:%d\n",j,f[j]);
return (0);
}
上のプログラムを書きました。
f0:1
f1:1
f2:2
f3:3
f4:5
f5:8
以科略
という結果が欲しいです。
どこが間違えていてどこをどのように直せばいいのか教えてもらえませんか?
よろしくお願いします。
0160デフォルトの名無しさん
2010/06/15(火) 20:20:35j に適切な値を代入して繰り返すべき
f[j] = f[j - 2] + f[j - 1];
0161デフォルトの名無しさん
2010/06/15(火) 20:30:00#define N 20
int main (void)
{
int j;
int f[N + 3];
f[0] = 1;
f[1] = 1;
for (j = 0; j <= N; j++){
f[j + 2] = f[j + 1] + f[j];
printf("f%d:%d\n",j,f[j]);
}
return (0);
}
無理矢理
0162159
2010/06/15(火) 21:10:30>>160
そのようにしたいのですが、どうすればいいのかわからないのです
自分の書いたものではどこが間違っているのですか?
>>161
f[j + 2] = f[j + 1] + f[j]をfor文のループに入れてしまうんですね
自分のように上に書いておくとどうおかしいのかよかったら教えてください
自宅のパソコンにgnome端末が無いのでいまはできないのですが、明日>>161さんのを見せてもらいますね
0163デフォルトの名無しさん
2010/06/15(火) 21:19:56元のだと、f[2]以降は定義されてないから、それを表示させようとしてもうまくいかない。
別にprintfのループに入れる必要はないが、繰り返し文が増えるが先に↓を書くとか
for (j = 2; j <= N; j++)
f[j] = f[j - 2] + f[j - 1];
↓環境がないなら例えばここを使おう
http://codepad.org/
0164デフォルトの名無しさん
2010/06/15(火) 21:21:130165デフォルトの名無しさん
2010/06/15(火) 21:56:000166159
2010/06/15(火) 22:07:23なるほど!解決しました
これは便利ですね、丁寧な説明ありがとうございました
>>164
まだ配列だとか繰り返しだとかよくわからないのです
0167デフォルトの名無しさん
2010/06/16(水) 10:12:48うっせーな
0168デフォルトの名無しさん
2010/06/16(水) 10:16:570169デフォルトの名無しさん
2010/06/16(水) 10:29:49(1) int hoge1[10] = {0,1,2,3,4,5,6,7,8,9};
(2) static int hoge2[10] = {0,1,2,3,4,5,6,7,8,9};
(3) static const int hoge3[10] = {0,1,2,3,4,5,6,7,8,9};
プログラムを実行すると(1)と(2)はRAMメモリ上のどこかに確保されますよね
(3)もRAMメモリ上のどこかに確保されるんでしょうか?
0170デフォルトの名無しさん
2010/06/16(水) 10:46:08環境が具体的に示してないので何とも言えないが、組み込み用の
Cコンパイラでは(3)の場合オプションを付ける事でROM上に置くような
環境も存在する
0171デフォルトの名無しさん
2010/06/16(水) 10:56:11その他、通常(1)はスタックに確保されてその宣言に到達するたびに初期化される。
(2)は静的領域に確保されて起動時に一度だけ初期化される。
(3)は(2)とは別の静的領域に確保されて初期化される。また、更新できない。
それはさて、初期値を全て列挙するなら要素数は省略した方が意図が判りやすいかと。
0172デフォルトの名無しさん
2010/06/16(水) 10:59:10組み込みコンピューターの開発でsinとcosの計算結果を予め360*2個分
static constで定義しておいて利用するのが目的です
実行時にRAMに再び確保されるのはなんかメモリの無駄だなーと思いまして
質問させて頂きました
0173デフォルトの名無しさん
2010/06/16(水) 11:00:16なんと無駄なことを。
0174デフォルトの名無しさん
2010/06/16(水) 11:19:21要求するスピードや、RAM、ROM容量にもよるけど、最低45°分あれば可能。
0175デフォルトの名無しさん
2010/06/16(水) 11:43:3545度分用意すればいいのは知っているのですが、今回は速度最優先なので
fn_sin(angle)という関数より sin[angle] で処理することにしました
余談ですが、始め0.1度づつ3600個*2のデーター用意したら
「そこまで精度はいらん」と怒られちゃいました(汗
0176デフォルトの名無しさん
2010/06/16(水) 12:05:52メモリはたくさん使っていいみたいだし。
0177デフォルトの名無しさん
2010/06/16(水) 12:19:46>組み込みコンピューターの開発で
その開発環境の説明書見たほうが良いよー
何処に配置するかの説明が必ずあるハズ
(or 上司に聞く 明示的にROMに配置させるには どう記述するれば良い? って
0178デフォルトの名無しさん
2010/06/16(水) 21:09:170179デフォルトの名無しさん
2010/06/16(水) 21:13:100180デフォルトの名無しさん
2010/06/16(水) 21:26:520181デフォルトの名無しさん
2010/06/16(水) 22:30:17速度最優先なら内臓RAMに展開を考慮
内臓Flashへのアクセスがノーウェイトで出来るなら良いが
CPU動作クロックが高い場合はウェイトが入っている可能性が高い
0182デフォルトの名無しさん
2010/06/16(水) 23:10:51○ 内蔵
0183デフォルトの名無しさん
2010/06/17(木) 00:00:48整数を固定小数点数として扱って計算したほうがいいかも知れない
0184デフォルトの名無しさん
2010/06/17(木) 01:02:29FPUがないCPUで速度最優先なのに浮動小数点演算するって低脳だろ
必然と固定小数点数にして整数演算することになる
0185デフォルトの名無しさん
2010/06/17(木) 01:50:39ターゲットCPUはもっとも一般的なcore2で
0186デフォルトの名無しさん
2010/06/17(木) 01:54:070187デフォルトの名無しさん
2010/06/17(木) 01:54:28sin(theta)
0188デフォルトの名無しさん
2010/06/17(木) 02:03:110189デフォルトの名無しさん
2010/06/17(木) 04:44:010190デフォルトの名無しさん
2010/06/17(木) 04:51:030191デフォルトの名無しさん
2010/06/17(木) 05:07:29毎回計算してるとかライブラリさんも大変なんだなぁ
0192デフォルトの名無しさん
2010/06/17(木) 05:54:48精度に問題がない限り、ライブラリはその結果を必要に応じて丸めてるだけ
0193デフォルトの名無しさん
2010/06/17(木) 06:49:33がどうしてクワインになるの?
printfの中身にトリックがあると思うんだけど、
元ネタのWikipediaの説明読んでも理解不能でした。
ttp://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AF%E3%82%A4%E3%83%B3_%28%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%29
0194デフォルトの名無しさん
2010/06/17(木) 07:11:110195デフォルトの名無しさん
2010/06/17(木) 07:13:240196デフォルトの名無しさん
2010/06/17(木) 07:31:290197デフォルトの名無しさん
2010/06/17(木) 16:24:33プリプロセサーはどのように認識するの?
コメントとして?
0198デフォルトの名無しさん
2010/06/17(木) 17:20:36その言語によるだろ
プリプロセッサーが機能する物もあるしそうでない物もある
0199デフォルトの名無しさん
2010/06/17(木) 17:38:29スレタイ読めよw
0200デフォルトの名無しさん
2010/06/17(木) 17:43:410201デフォルトの名無しさん
2010/06/17(木) 17:46:44そのC言語に色々な種類があるということなんだよ
そもそもコンパイラ固有の指定を行う手段だと規定されているんだから
0202デフォルトの名無しさん
2010/06/17(木) 17:53:410203デフォルトの名無しさん
2010/06/17(木) 18:00:23プリプロセッサーを含めたコンパイラということ
0204デフォルトの名無しさん
2010/06/17(木) 18:03:230205デフォルトの名無しさん
2010/06/17(木) 18:03:51それはC言語の種類じゃなくて、処理系の種類だよ。
C言語の種類といったら、K&RとかANSIとかC89とかC99のような言語仕様の違いを言うんだよ。
0206デフォルトの名無しさん
2010/06/18(金) 05:23:430207デフォルトの名無しさん
2010/06/18(金) 09:55:06君が言ってるのは、自分で書いてる通り「言語仕様」の種類だろ
もちろんそれを指すこともあるが、開発メーカーやそのバージョンによる違い、
処理系の違い、その他諸々を含めて色んな種類があるということ。
0208デフォルトの名無しさん
2010/06/18(金) 10:20:030209デフォルトの名無しさん
2010/06/18(金) 10:35:010210デフォルトの名無しさん
2010/06/18(金) 13:00:34つまりVC8とVC9は別の言語であると。
0211デフォルトの名無しさん
2010/06/18(金) 13:16:430212デフォルトの名無しさん
2010/06/18(金) 13:22:16#pragma の仕様なんてバージョンごとに変わる
素人でも常識だわ
0213デフォルトの名無しさん
2010/06/18(金) 13:30:46対応度違うからね、厳密には違うとみていい
別の言語とはどういうことだ
東京市の山手言葉と下町言葉は別言語なのか
大阪民国弁と帝都弁はは別言語なのか
0214デフォルトの名無しさん
2010/06/18(金) 13:34:52#pragmaの仕様は特に変わってないとおもったけど、なんかかわったの?c99とか?
0215デフォルトの名無しさん
2010/06/18(金) 13:55:37だから言語の種類によって変わる
どういう仕様かはそのコンパイラの仕様書やマニュアル見ないとわからん
コンパイル時に機能するとは限らず、
プリプロセスで機能するものから、リンクの動作を制御するのまで様々
そもそも #pragma 自体を認識せずエラーとなるコンパイラだって存在する(した)
0216デフォルトの名無しさん
2010/06/18(金) 15:12:59Rogueというゲームを立ち上げて強制的にプレイさせるようになっていた
#pragmaが完全に処理系依存だという事を逆手に取ったジョークだ
0217デフォルトの名無しさん
2010/06/18(金) 16:23:54「#pragma」自体が言語仕様では定められておらず、ベンダの個別実装であるということか。
0218デフォルトの名無しさん
2010/06/18(金) 16:33:29#pragma自体は言語仕様にあるよ
#pragmaを認識しないコンパイラってのは、関数でint型しか返せないコンパイラみたいなもんだよ
0219デフォルトの名無しさん
2010/06/18(金) 16:52:24>関数でint型しか返せないコンパイラみたいなもんだよ
さすがにそれはないな、#pragma が使えるようになったのはもっと最近だよ
0220デフォルトの名無しさん
2010/06/18(金) 17:28:03"#" で表記してるんだろ。
対応してない処理系でも最初に消えるようにな。
0221デフォルトの名無しさん
2010/06/18(金) 17:30:00プロセス プロセサ
まあ個人的にはプロセサーだな。
0222↓ブックマーク推奨
2010/06/18(金) 17:43:26NHKの極左売国捏造路線何とかなりませんか?19
http://yutori.2ch.net/test/read.cgi/nhk/1273991231/
次スレ
NHKの極左売国捏造路線何とかなりませんか?20
http://yutori.2ch.net/test/read.cgi/nhk/1276388465/
0223デフォルトの名無しさん
2010/06/18(金) 18:02:090224デフォルトの名無しさん
2010/06/18(金) 18:11:430225デフォルトの名無しさん
2010/06/18(金) 18:51:40http://livedoor.blogimg.jp/tekepo/imgs/3/4/3414dfca.jpg
ばらまこうぜ!
0226デフォルトの名無しさん
2010/06/18(金) 19:05:19参政権ほしいですか?
やめてください
0227デフォルトの名無しさん
2010/06/18(金) 21:24:36このエラーはどういう意味ですか?
0228デフォルトの名無しさん
2010/06/18(金) 21:41:510229デフォルトの名無しさん
2010/06/18(金) 21:42:180230デフォルトの名無しさん
2010/06/18(金) 21:43:490231デフォルトの名無しさん
2010/06/18(金) 21:46:54宣言されてません
0232デフォルトの名無しさん
2010/06/18(金) 21:47:400233デフォルトの名無しさん
2010/06/18(金) 21:50:04どういう事ですか?
0234デフォルトの名無しさん
2010/06/18(金) 22:01:57関数・変数などの全ての識別子は、そのソースファイルにおいて最初に*使われる*までに
宣言されている必要がある。
例えば、以下のソースをコンパイルすると、そのメッセージがでる。
---ここから---
void foo() { x = 5; }
int x;
int main(void) { return 0; }
---ここまで---
1: error: ‘x’ undeclared (first use in this function)
これは1行めで変数xが*使われて*いるにも関わらず、この時点ではxの宣言がなされていないことを
意味する。
2行めのxの宣言を1行めより先に書けばエラーにならない。
---ここから---
int x;
void foo() { x = 5; }
int main(void) { return 0; }
---ここまで---
この場合は、xは同じファイルで定義されているが、別のファイルで定義されている場合も
宣言は必要。そのときは、以下のように書く。
extern int x;
0235デフォルトの名無しさん
2010/06/18(金) 22:04:00他の人説明してくれませんか?
0236デフォルトの名無しさん
2010/06/18(金) 22:04:240237デフォルトの名無しさん
2010/06/18(金) 22:10:50ソースコードとerror: ‘hoge’ undeclared (first use in this function)のhogeを晒せや
0238デフォルトの名無しさん
2010/06/18(金) 22:17:04ソースコードさらしたら別にエラー内容なんていらんだろ
0239デフォルトの名無しさん
2010/06/18(金) 22:23:58よく分からんマクロとかかも知れんだろ
0240デフォルトの名無しさん
2010/06/18(金) 22:27:23家にソースを持って帰ったり会社で2chにアクセスできたりするクソ会社じゃあるまいし
0241デフォルトの名無しさん
2010/06/18(金) 22:28:26え?意味が分からない
0242デフォルトの名無しさん
2010/06/18(金) 22:37:100243デフォルトの名無しさん
2010/06/18(金) 22:37:47変数の宣言忘れてエラーの意味もわからないプロがいたら怖いわ
0244デフォルトの名無しさん
2010/06/18(金) 22:45:11どう考えても仕事絡みの質問じゃないだろ
0245デフォルトの名無しさん
2010/06/18(金) 22:48:340246デフォルトの名無しさん
2010/06/18(金) 23:01:290247デフォルトの名無しさん
2010/06/18(金) 23:22:16自分の思いつく限りの事はしたのですが、これ以上に速くなりますか?
ご指摘お願いします。
http://codepad.org/u2IDYxvs
0248デフォルトの名無しさん
2010/06/18(金) 23:32:410249デフォルトの名無しさん
2010/06/18(金) 23:33:54普通、職業プログラマなら職場のよくわかっている奴に聞くだろ
0250デフォルトの名無しさん
2010/06/18(金) 23:35:490251デフォルトの名無しさん
2010/06/18(金) 23:36:480252デフォルトの名無しさん
2010/06/18(金) 23:37:27どういう意味ですか?
0253デフォルトの名無しさん
2010/06/18(金) 23:39:48なんでここまで遅くできるのかわからんw
普通に約数の和を関数化して戻り値と引数を比較すればいいのに
0254デフォルトの名無しさん
2010/06/18(金) 23:40:280255デフォルトの名無しさん
2010/06/18(金) 23:40:360256デフォルトの名無しさん
2010/06/18(金) 23:45:24こういう事ですね
http://codepad.org/RI5MDSCC
それ以外にはありますか?
0257デフォルトの名無しさん
2010/06/18(金) 23:49:39int divsum(int n)
{
int sum = 1, i;
for(i = 2; i * i < n; i++) if(n % i == 0) sum += i + n / i;
return i * i == n ? sum + i : sum;
}
int main(void)
{
int i, j, c = 0;
for(i = 220; i < 1000000; i++) {
if((j = divsum(i)) <= i) continue;
if(i == divsum(j)) {
printf("%d %d\n", i, j);
c++;
} }
printf("%d\n", c);
return 0;
}
0258デフォルトの名無しさん
2010/06/18(金) 23:57:470259デフォルトの名無しさん
2010/06/19(土) 00:06:090260デフォルトの名無しさん
2010/06/19(土) 00:08:05凄いですね・・・。
以前に作った事がありますか?
>>258
自分の作ったプログラムだと、
それが無いと同じペアを2回表示する事になるので・・・。
0261デフォルトの名無しさん
2010/06/19(土) 00:10:57多分自分でそこまで作るのにあれこれ苦労したと思うんだけど、その苦労が経験となり、身につく。
おつかれさま。
0262デフォルトの名無しさん
2010/06/19(土) 00:20:15if(n < s) があるから、同じの2回表示されないと思うけど。
0263デフォルトの名無しさん
2010/06/19(土) 00:23:58ありがとうございます
0264デフォルトの名無しさん
2010/06/19(土) 00:32:58#include<stdio.h>
long calc_yuai(long value){
long i, j, yuai=1, tmp, sum, value_org;
value_org=value;
for(i=2;value/i>=i;i++){
sum=1;
tmp=1;
for(j=0;value%i==0;j++){
value/=i;
tmp*=i;
sum+=tmp;
}
yuai*=sum;
}
if(value>1) yuai*=(value+1);
return yuai-value_org;
}
int main(void){
long i, yuai;
for(i=2;i<1000000;i++){
yuai=calc_yuai(i);
if(i<yuai && calc_yuai(yuai)==i){
printf("%ld %ld\n", i, yuai);
}
}
return 0;
}
0265デフォルトの名無しさん
2010/06/19(土) 00:41:580266デフォルトの名無しさん
2010/06/19(土) 00:44:580267デフォルトの名無しさん
2010/06/19(土) 01:05:41速いな
今度からこれ使うことにしよう
0268デフォルトの名無しさん
2010/06/19(土) 07:07:030269デフォルトの名無しさん
2010/06/19(土) 07:35:38ぐぐったけど互除法の変形とも違うし何やってるんだ、これ?
0270デフォルトの名無しさん
2010/06/19(土) 07:41:15= 1 + a + ... + a^m + a * b + a^2 *b + ... + a^m * b + .... + a^m * b + ... a^m + b^n
0271デフォルトの名無しさん
2010/06/19(土) 07:42:35だった
0272デフォルトの名無しさん
2010/06/19(土) 07:43:38最後はa^m * b^nだ。
0273デフォルトの名無しさん
2010/06/19(土) 08:57:21アルゴリズム名は知らないけど、例えば220の約数は1,2,4,5,10,11,20,22,44,55,110。
1を無視して、両端から数字をひとつづつ取って掛け合わせると、以下のように220になる。
2*100=220
4*55=220
5*44=220
10*22=220
11*20=220
約数の和sumを得るためには、a=2,3,4,5,6,...で割ってみるが、
割りきれたらsum=sum+a+220/a
a<=220/aの間、aをカウントアップして割りきれるか試す。
それ以上続けても、既に見つけた約数しかないので、無駄になるから計算しない。
0274デフォルトの名無しさん
2010/06/19(土) 08:59:05X:2*100=220
○:2*110=220
0276デフォルトの名無しさん
2010/06/19(土) 10:47:130277デフォルトの名無しさん
2010/06/19(土) 10:51:18>>273の説明は全然関係ないと思うんだが。
0278デフォルトの名無しさん
2010/06/19(土) 11:26:10だから、>>264のアルゴリズムのfor(j=0以降は
>>270がヒントになってると思いますよ?
0279デフォルトの名無しさん
2010/06/19(土) 11:28:530280デフォルトの名無しさん
2010/06/19(土) 11:33:28>>273が叩かれる筋合いはないのでは?
>>273の説明のおかげで>>264のiのforループも理解し易くなると思うんだが。
0281デフォルトの名無しさん
2010/06/19(土) 11:42:271210=2^1*5^1*11^2
であるとき
全ての約数の和は
(2^0+2^1)*(5^0+5^1)*(11^0+11^1+11^2)=2394
ここから元の数を引けば
2394-1210=1184
となる
0282デフォルトの名無しさん
2010/06/19(土) 11:57:50じゃあ遠慮なく・・・アホ!
0283デフォルトの名無しさん
2010/06/19(土) 12:06:300284デフォルトの名無しさん
2010/06/19(土) 12:10:10コンピューターの性質を踏まえた上でもう一工夫するんだよ
0285デフォルトの名無しさん
2010/06/19(土) 12:18:580286デフォルトの名無しさん
2010/06/19(土) 12:54:110287デフォルトの名無しさん
2010/06/19(土) 13:39:32#define RAKKA_SPEED 8.0
#define BLOCK_TATE 32.00
(略)
double rakka_calc=BLOCK_TATE/RAKKA_SPEED;
(略)
board[i][j][2][player_flag]+=double(rakka_calc*rakka_flag[player_flag]+shot_calc*shot_flag[player_flag]);
で計算が上手くいかないというか、
rakka_calkの値の小数点以下が計算されてないみたいで、
どうすれば小数点以下を反映できますか?
board[][][][]をdouble宣言ってのはなしの方向で。
0288デフォルトの名無しさん
2010/06/19(土) 14:01:460289デフォルトの名無しさん
2010/06/19(土) 14:04:500290デフォルトの名無しさん
2010/06/19(土) 14:45:170291デフォルトの名無しさん
2010/06/19(土) 15:07:380292デフォルトの名無しさん
2010/06/19(土) 17:05:28穴掘り法で迷路を作成しようとしたのですが、参考にしたソースと同じ様に動かすつもりで
書いたのに、なぜか、掘られていない穴が残ってしまいます。
ソースを載せますので、自分のソースのどこに問題があるのか教えてください。
参考にしたもの
ttp://codepad.org/9iaa2YAs
自分で書いたヤツ
ttp://codepad.org/DYLuK5Ca
よろしくお願いします。
0293292
2010/06/19(土) 17:08:180294デフォルトの名無しさん
2010/06/19(土) 17:19:020295デフォルトの名無しさん
2010/06/19(土) 17:19:260296デフォルトの名無しさん
2010/06/19(土) 18:44:210297デフォルトの名無しさん
2010/06/19(土) 21:57:150298デフォルトの名無しさん
2010/06/19(土) 23:56:17前後もコードもちゃんとみてないんで、
何するコードか分からんのだけど、
jをインクリメントしてんの、何で?
0299デフォルトの名無しさん
2010/06/20(日) 00:01:48途中で書き直した名残
j はいらない
0300デフォルトの名無しさん
2010/06/20(日) 00:32:45for(j = 1; value % i == 0; j++, value /= i);
yuai *= (pow(i, j) - 1) / (i - 1);
とか書くと笑えるくらい遅くなるなw
0301デフォルトの名無しさん
2010/06/20(日) 00:53:01for(j = 1; n % i == 0; j = j * i + 1) n /= i;
yuai *= j;
}
これなら計算回数変わらずに変数節約できる
0302デフォルトの名無しさん
2010/06/20(日) 01:45:17具体的にはフォトショップSDKで書いたプラグインです。
0303302
2010/06/20(日) 01:48:440304デフォルトの名無しさん
2010/06/20(日) 02:16:54BSDは別にいいんじゃないかな
0305デフォルトの名無しさん
2010/06/20(日) 02:37:28まぁあえて危ない橋渡る人が居ないだろうけど。
0306デフォルトの名無しさん
2010/06/20(日) 06:10:19http://codepad.org/v5IiMN8I
/* これ */
0308デフォルトの名無しさん
2010/06/20(日) 11:59:40たいしたこと教えてないからお礼はいらないよ
0309デフォルトの名無しさん
2010/06/20(日) 14:40:40お礼?ふざけんな
2chでちょっと投稿したからと言って何かもらえるという考えは甘い
0310デフォルトの名無しさん
2010/06/20(日) 14:44:440311デフォルトの名無しさん
2010/06/20(日) 14:48:24いえいえ
0312デフォルトの名無しさん
2010/06/20(日) 18:01:02いったんプログラムを止めて
エンターキーを1回押して再開させたいのですが
fprintf(stdout,"Push Enter\n");
getchar();
と書いたらエンターキーを2回押さないと再開しません
仕方ないのでしょうか?
0313デフォルトの名無しさん
2010/06/20(日) 19:51:08どうもどうも
0314デフォルトの名無しさん
2010/06/20(日) 20:37:230315312
2010/06/20(日) 23:50:26でいいのでしょうか?
これにするとエンターを何回押しても進みません。
エンター1回で進むようにする方法はないのでしょうか?
0316デフォルトの名無しさん
2010/06/21(月) 01:03:01#include <conio.h>
int main(void)
{
puts("before");
while(getch() != '\r'){
}
puts("after");
return 0;
}
0317デフォルトの名無しさん
2010/06/21(月) 01:16:40俺の環境だと、その書き方でenter一回押したら再開されるんだが。
0318312
2010/06/21(月) 01:32:112回押さなければ進まなかった原因は
他の関数で入力待ちしている部分があったためでした。
ありがとうございました。
0319デフォルトの名無しさん
2010/06/21(月) 01:33:09いいよ別に
0320デフォルトの名無しさん
2010/06/21(月) 21:59:08aは3であることが保証されるのでしょうか??
浮動小数点数は誤差とか怖いので気になりました・・・
0321デフォルトの名無しさん
2010/06/21(月) 22:07:10保険をかけるなら四捨五入すべし
0322デフォルトの名無しさん
2010/06/21(月) 23:11:17一旦循環小数や精度オーバーを経由して
整数に戻ってくるような演算でない限り、誤差は発生しない
(Cの規格で保証されているわけではないが)
0323デフォルトの名無しさん
2010/06/21(月) 23:16:300324デフォルトの名無しさん
2010/06/21(月) 23:42:00誤差が出るのは小数点イカでゲソ
0325デフォルトの名無しさん
2010/06/21(月) 23:45:07http://ja.wikipedia.org/wiki/%E5%BA%8A%E9%96%A2%E6%95%B0%E3%81%A8%E5%A4%A9%E4%BA%95%E9%96%A2%E6%95%B0#C.E8.A8.80.E8.AA.9E.E3.81.AE.E6.BC.94.E7.AE.97.E5.AD.90_.28int.29
0326320
2010/06/21(月) 23:46:34>>320のケースは大丈夫なようですが、大事をとって0.5f足してからの丸め(四捨五入)をする方針でいくように
したいと思います。
0327デフォルトの名無しさん
2010/06/21(月) 23:47:20round 使ったほうがいいかも
0328デフォルトの名無しさん
2010/06/22(火) 00:16:010.5f足して四捨五入しちゃだめー
0329デフォルトの名無しさん
2010/06/22(火) 00:34:01ああああわわわてててるななな
二つの3次元ベクトルに対して、それらの和を求める関数を定義する。
和を計算する関数はaddvec関数定義の頭部は
void addvec(const float x[3], const float y[3], float z[3])とする。
プログラムの動作は、二つの3次元ベクトルaとbの各成分を順次に入力して、それらの和を求めて出力する。
というものをつくりたいです、そこで
#include <stdio.h>
void addvec(const float x[3], const float y[3], float z[3])
{
int i;
for(i = 0; i < 3; i++) z[i] = x[i] + y[i];
}
これに続くmain関数を作りたいのですがどうすればいいのかわからないので教えてください。
int main (void)
{
float x1,y1,z1,x2,y2,z2;
puts("各成分を入力してください.");
printf("ベクトルa:"); scanf("(%d,%d,%d)", &x1, &y1, &z1);
printf("ベクトルb:"); scanf("(%d,%d,%d)", &x2, &y2, &z2);
printf("和%d \n", addvec(わからない));
return (0);
}
上のように作ろうとしたのですが、どうも的外れな気がして…
0331デフォルトの名無しさん
2010/06/22(火) 02:12:27void addvec(const float a[3], const float b[3], float c[3])
{
int i;
for(i = 0; i < 3; i++) c[i] = a[i] + b[i];
}
int main (void)
{
float a[3], b[3], c[3];//x,y,z成分
puts("各成分を入力してください.");
printf("ベクトルa:"); scanf("%f %f %f", &a[0], &a[1], &a[2]);
printf("ベクトルb:"); scanf("%f %f %f", &b[0], &b[1], &b[2]);
addvec(a, b, c);
printf("a+b:%f, %f, %f\n",c[0], c[1], c[2]);
return (0);
}
0332デフォルトの名無しさん
2010/06/22(火) 02:18:01ありがとうございます、凄く助かりました!
0334デフォルトの名無しさん
2010/06/22(火) 04:49:11>>301 にするだけでも >>264 の 1.8 倍速
これだと >>264 の 2.5〜3 倍速になる
除算は遅いから書き直せるものは書き直したほうがいいね
long calc_yuai(long value){
long i, j, yuai, value_org;
if(value<=1) return 0;
value_org=value;
for(i=0;(value&1)==0;i++) value>>=1;
yuai=(2<<i)-1;
for(i=3;i*i<=value;i+=2){
for(j=1;value%i==0;j=j*i+1){
value/=i;
}
if(j>1) yuai*=j;
}
if(value>1) yuai*=(value+1);
return yuai-value_org;
}
0335デフォルトの名無しさん
2010/06/22(火) 06:40:02なるほど。書き方によってスピードがずいぶん違うね。
ところで、スピードアップしたいときには試行錯誤で、
早そうな書き方をいくつか試してるんだが、定石パターンってあるんだろうか?
処理系によっても、この演算は遅いor早い、とかあると思うんだが。
0336デフォルトの名無しさん
2010/06/22(火) 06:47:01掛け算は遅いから可能ならビットシフトに置き換える
割り算はもっと遅いからできるだけ使わないように工夫する
条件分岐は足を引っ張る
ループの中で使う変数が増えると、ある時点でスピードががたっと落ちる
コードサイズが大きくなると不利
基本はCPUやパソコンの構造をよく理解すること
小手先の工夫をするよりアルゴリズムをよく練ること
0337デフォルトの名無しさん
2010/06/22(火) 06:49:190338デフォルトの名無しさん
2010/06/22(火) 07:18:100339デフォルトの名無しさん
2010/06/22(火) 08:58:19ちゃんとコメントは書いとこうね
0340デフォルトの名無しさん
2010/06/22(火) 09:02:26今どき乗除算も遅くないから
無理にシフト使って命令数増やすより1命令で済ませる方がいい
0341デフォルトの名無しさん
2010/06/22(火) 09:40:42コードを汚くして.0001秒速くするなど、正に愚の骨頂。
そして演算時間が問題となり本当に高速化が必要なところでは、
こんな小学生的な発想のレベルの最適化など殆ど役に立たん。
0342デフォルトの名無しさん
2010/06/22(火) 09:48:380343デフォルトの名無しさん
2010/06/22(火) 10:59:450344デフォルトの名無しさん
2010/06/22(火) 11:41:060345デフォルトの名無しさん
2010/06/22(火) 13:25:18コードの保守性が高いかどうかはユーザに関係ないよ
なぜこの処理は遅いのですか?と質問されたら、保守性を下げない為です、と回答するの?
それともこれより速く出来ませんと回答するの?
0346デフォルトの名無しさん
2010/06/22(火) 13:29:35抽象論で他人を叩いて優越感に浸りたいだけ
まともに相手する必要なないと思う
0347デフォルトの名無しさん
2010/06/22(火) 13:57:39データシート見てこい
SALは0.33クロック、IMULは0.5クロックに対してIDIVはmax36クロック
つまり100倍遅い
0348デフォルトの名無しさん
2010/06/22(火) 14:41:20一万ぽ譲って関係ないとして、ユーザに関係ないなら無視して良いの?
0349デフォルトの名無しさん
2010/06/22(火) 14:50:21速度が問題なのであればそれを改善するのは当然。
それによって保守性が下がると思うのであれば、同等のコード、または
普段よりも注意深く詳しいコメントを記述する
ってなんでこんな学生相手に話すような展開になってんだ?普通だろこれ。
0350デフォルトの名無しさん
2010/06/22(火) 14:52:06ふおお。0.5がでてきたときもびっくりしたけど、いまや3命令が同時に行えるようになっているのか
0351デフォルトの名無しさん
2010/06/22(火) 14:56:10でも遅い遅いとユーザから不満が出てる一般的なアプリケーションはビット演算なんて使ってないんだろうね
0352デフォルトの名無しさん
2010/06/22(火) 15:05:15>>334 のコードの保守性が低いと言ってるんだよ。醜いということ。
で、こういうコードを書いた理由がこっちの方が速いだろ。
それに対して、その部分が速いといっても全体から見れば極々一部のコードなんだし、
そこが何倍になろうとも全体が速くなるわけではない。と言ったまで。
高速化というのは、その必要性が生じたときに、
ボトルネックとなっている部分を調べて、
その部分を対象に行うものだよ。
そもそも 334 は単に自分のスキルを自慢したいだけだんだろ?
当然ながらこういうコードは、以下略
0353デフォルトの名無しさん
2010/06/22(火) 15:20:38その部分はアセンブリで書くのが普通。
C言語で書いておいて、シフト演算使ったから速いとか、
そのプログラマーのマスタベーションでしかありえない。
どうして究極の速度が要求されるような状況でC言語で開発してんだ?
そこまでの要求がないからだろ。
0354デフォルトの名無しさん
2010/06/22(火) 15:21:470355デフォルトの名無しさん
2010/06/22(火) 15:22:22ループ変数を+=2にして高速化してるだけじゃんw
この程度で保守性低いとか、スキル自慢とか、やばすぎだろw
0356デフォルトの名無しさん
2010/06/22(火) 15:27:150357デフォルトの名無しさん
2010/06/22(火) 15:42:55>これだと >>264 の 2.5〜3 倍速になる
>除算は遅いから書き直せるものは書き直したほうがいいね
流石にこれはないなw
0358デフォルトの名無しさん
2010/06/22(火) 16:19:380359デフォルトの名無しさん
2010/06/22(火) 16:24:33かわいそうに、いやマジで
0360デフォルトの名無しさん
2010/06/22(火) 16:46:58ちょっと>>334の代わりになる保守性の高いコードとやらを書いてみてよ
0361デフォルトの名無しさん
2010/06/22(火) 16:59:32どこがボトルネックだと考えているのか教えてほしいわ。
0362デフォルトの名無しさん
2010/06/22(火) 18:13:59高速化を考えるんだったら、そのマシンや環境がどうかで大きく変わるし、
それ以前に最大桁が幾らかでも手法は色々考えられる。
例えばその辺のWindowsPCとかなら、そこそこメモリも使えるから、
#include <stdio.h>
#define N 1000000
int main(void)
{
static long table[N];
long i, j;
for (i = 1; i < N; i++)
for (j = i+i; j < N; j += i)
table[j] += i;
for (i = 0; i < N; i++) {
j = table[i];
if (j <= N && i < j && table[j] == i)
printf("%ld %ld\n", i, j);
}
return 0;
}
0363デフォルトの名無しさん
2010/06/22(火) 18:20:07はやいな、おい
0364デフォルトの名無しさん
2010/06/22(火) 18:24:47>>264 の10倍速
0365デフォルトの名無しさん
2010/06/22(火) 18:56:50え、一般論だと思うけど。それがコードチューニングってやつだよ
どこがボトルネックか教えろって、なに言ってるの?
0366デフォルトの名無しさん
2010/06/22(火) 19:00:10ボトルネックの部分をチューニングしてるわけだけど、そこをチューニングするなといっているように見える
0367デフォルトの名無しさん
2010/06/22(火) 19:01:20なんで動いてるのかが分からない!かっけー
0368デフォルトの名無しさん
2010/06/22(火) 19:03:56逆転の発想スゴス
0369デフォルトの名無しさん
2010/06/22(火) 19:40:57ボトルネックというのは、プログラムの実行時間の大半を占める部分だよ
0370デフォルトの名無しさん
2010/06/22(火) 19:52:510371デフォルトの名無しさん
2010/06/22(火) 19:57:09そんで、今回の友愛数を求めるプログラムのボトルネックはどこなの?
0372デフォルトの名無しさん
2010/06/22(火) 20:05:53速くしたいのなら、いくらでもすればいいんじゃないでしょうか
保守なんていらないよ、そんなパーツには
0373デフォルトの名無しさん
2010/06/22(火) 20:11:41Nの大きさに対する演算回数の多さじゃないの?
演算回数を減らす工夫が効果的ってことでしょ。
N*N だったものを 2*N にするとかはよくある話じゃないの。
0374デフォルトの名無しさん
2010/06/22(火) 20:17:00>336の挙げた項目を整理すると、
・実数より整数の方が速いが、型変換は遅いから要注意。
・CPUによってはビットシフトは必ずしも速くない。
・条件分岐はできるだけループの外に。
・「ループの中で使う変数」だと意味不明だが、一次変数を利用してループ内の演算量を減らすのは有効。
・どうせ今時のコンパイラはstatic関数のインライン展開くらいしてくれるから、関数は機能ごとに分割すべき。
となるかな。
0375デフォルトの名無しさん
2010/06/22(火) 20:18:42実行速度の要求もないのに、
自分の趣味で速くしたくてシフト演算使って高速化するの?
それで保守のことなど知ったことはないと開き直るの?
うちの会社なら即クビだ。
0376デフォルトの名無しさん
2010/06/22(火) 20:25:38そういうことだ
0377320
2010/06/22(火) 20:44:43ありがとございます。
残念ながら、VC++はC99に対応していないので、roundが使えないです・・・
>>328
あ、たしかに一律0.5f足すだと、負の四捨五入がおかしくなりますね・・・
調べてみたところ、次のようなやり方で絶対値的四捨五入ができると分かりました。
float a = -4.6f;
float b = ( a > 0 ) ? floor( a + 0.5f ) : ceil( a - 0.5f );
最終的に求めたいのはint型なので、以下のようなカタチでも良いと思うのですが、どうでしょう??
int b = ( int )( ( a > 0 ) ? ( a + 0.5f ) : ( a - 0.5f ) )
0378デフォルトの名無しさん
2010/06/22(火) 20:51:41> 誰が
>>247
0379デフォルトの名無しさん
2010/06/22(火) 20:53:38足して切り捨てしてるならおk。足して四捨五入ってところを心配したのだろうと思う。
0380デフォルトの名無しさん
2010/06/22(火) 20:56:36最近はその程度の最適化はやってくれる。
ただ、特定の乗除算とビットシフトが等価だって知らない人とは一緒に仕事したくない。
そんなの2進数の基本的な性質じゃん。
その程度のことで保守性が下がるとか、何寝言言ってんのって感じ。
0381デフォルトの名無しさん
2010/06/22(火) 20:58:16ええと、あなたの会社のコーディング規約ではシフト演算が禁止、ただし要求速度を満たせない
場合を除くとなっているのですか?
どこからが複雑だから禁止になり、どこまでが許容される記述なのか、そのガイドラインを
社内で作成し、周知徹底されていますか?
また、速度に関する要件がない場合、速度はどれだけ遅くとも問題ないのですか?
0382デフォルトの名無しさん
2010/06/22(火) 21:06:490383デフォルトの名無しさん
2010/06/22(火) 21:29:160385デフォルトの名無しさん
2010/06/22(火) 23:43:300386デフォルトの名無しさん
2010/06/23(水) 00:23:48「今は気にしなくていい。scanf使うときは&をつけるように」
といい加減な回答が返ってきました。
お金払ってるんだからちゃんと説明しろよ
0387デフォルトの名無しさん
2010/06/23(水) 00:25:400388デフォルトの名無しさん
2010/06/23(水) 00:28:05自分で調べられる程度の範囲は自分で調べろよ
小中学生じゃないんだから
0389デフォルトの名無しさん
2010/06/23(水) 00:40:32俺が言いたいのは教授の教え方がいい加減だっていってるんだ。
他にもソースファイルの先頭に書くinclude文についてもそう。
教授は「プログラムを動かすためのおまじないだと思ってください」
とか抜かしやがる。
0390デフォルトの名無しさん
2010/06/23(水) 00:42:38物事には学ぶための順序ってもんがある。
0391デフォルトの名無しさん
2010/06/23(水) 00:44:00何も分かってない人に教える場合はそれが普通
0392デフォルトの名無しさん
2010/06/23(水) 00:45:25それが定番になってるけど、俺もどうかと思う。ガキに教えるんじゃないんだから
0393デフォルトの名無しさん
2010/06/23(水) 00:45:51残念ながら最初に聞いたときぽかーんだったよ。
そもそも「おまじない」って何だよって?w
さすがに調べて分かったが。俺とおんなじこと考えてた人きっといるはず
0394デフォルトの名無しさん
2010/06/23(水) 00:49:33前者は至極分かり易いと思うぞ。
0395デフォルトの名無しさん
2010/06/23(水) 00:53:14「テスト済みの処理構造をブラックボックスとして使う」という意味で。
あとで暇な時にそのおなじないの内容を理解しておくことは必須
0396デフォルトの名無しさん
2010/06/23(水) 00:54:590397デフォルトの名無しさん
2010/06/23(水) 00:56:16大まかには「お決まりの処理」という理解で、さらには「なぜその処理が必要か」という理解に踏み込んでいくという、
二段階の理解ステップとなるわけだ。
経験上、こういうのはけっこうあるね。
何となしにやっていたことの意味が徐々に明らかになっていくのは、成長を実感できてうれしいものだ。
>>386も是非この楽しさを知ってほしい。
0398デフォルトの名無しさん
2010/06/23(水) 00:57:510399デフォルトの名無しさん
2010/06/23(水) 00:59:49できれば本当の意味にすぐに気づきたい。時間はそんなに待ってくれないぞ
0400デフォルトの名無しさん
2010/06/23(水) 01:01:42この関数を使うときはこれをインクルードと言っちゃうんだから
初めからprintfや標準入出力関数を使うためにこうすると言えばいいだろ、馬鹿らしい
0401デフォルトの名無しさん
2010/06/23(水) 01:01:45printfの使い方とか、要所を抑えておけばあとは適当な理解でいいようなことは結構あるよ
0402デフォルトの名無しさん
2010/06/23(水) 01:01:490403デフォルトの名無しさん
2010/06/23(水) 01:04:480404デフォルトの名無しさん
2010/06/23(水) 01:08:40Bを(ry
人に教えるならどこかで堺をつけないといけない
調べてわかるレベルならなおさら教えない
おしえてクンをその道に育てるのは自殺行為
0405デフォルトの名無しさん
2010/06/23(水) 01:11:040406デフォルトの名無しさん
2010/06/23(水) 01:11:40それを遠回しな表現で学生を撹乱させて時間稼ごうだってそうはいかない
お金払ってるんだから教授はちゃんと仕事しろってんだ
0407デフォルトの名無しさん
2010/06/23(水) 01:11:41もし関数が0を返したらwhile(!0)になると思うんですがこれは真なんでしょうか?
よろしくお願いします。
0408デフォルトの名無しさん
2010/06/23(水) 01:13:00金払ってんだ、質問した事に答えろよ。
0409デフォルトの名無しさん
2010/06/23(水) 01:13:430410デフォルトの名無しさん
2010/06/23(水) 01:16:29>>393>>400>>403みたいな馬鹿学生が山ほど潜んでるんだから教える方も大変だよ
0411デフォルトの名無しさん
2010/06/23(水) 01:18:17順序を考えればおまじないなんて馬鹿なことを言わずに済むだろ
0412デフォルトの名無しさん
2010/06/23(水) 01:19:51「おまじない」とかふざけすぎ。
まず最初は printf を使わずに教えるべき。
C は、入出力は言語機能自体には含まれていない、と教えるべき。
苦C とかいうサイトはそういう始め方だったから好感が持てた。
0413デフォルトの名無しさん
2010/06/23(水) 01:22:05#include で別のファイルを読み込みます
↓
中を見てみましょう
↓
???
これじゃ先に進みそうにないから
おまじないっていうんだよ
0414デフォルトの名無しさん
2010/06/23(水) 01:24:28「おまじない」が「おまじない」じゃなくなる時点でもヘッダファイルの中身なんて見てないだろ
関数の概念だけ教えれば済む話。高校以上なら簡単なに受け入れられる
0415デフォルトの名無しさん
2010/06/23(水) 01:24:34初心者にはまず目に見える結果が出る部分を教えないと。
自分の覚えたことの結果が出ないと正しいのか間違ってるのかの判断も付かない。
だからprintfを最初に教えるのは理にかなっている。
printfを使うためにはインクルードがどうたらこうたらやり始めるのか?アホクセー
0416デフォルトの名無しさん
2010/06/23(水) 01:26:52puts とか putchar が先だろ。
0417デフォルトの名無しさん
2010/06/23(水) 01:27:03授業とは違うんだよ、生徒の質問に答えろって話。
0418デフォルトの名無しさん
2010/06/23(水) 01:28:030419デフォルトの名無しさん
2010/06/23(水) 01:28:470420デフォルトの名無しさん
2010/06/23(水) 01:29:440421デフォルトの名無しさん
2010/06/23(水) 01:30:10どんな言葉なら気が済むんだ
0422デフォルトの名無しさん
2010/06/23(水) 01:31:48「これからC言語のプログラムを書きます」の合図でいいんじゃないです?
0423デフォルトの名無しさん
2010/06/23(水) 01:32:03>>419 それC#。JavaはSystem.out.println()な。Java.langパッケージは宣言なしで使えるから。
0424デフォルトの名無しさん
2010/06/23(水) 01:32:33おまじないよりタチ悪いな
0425デフォルトの名無しさん
2010/06/23(水) 01:33:21おまじないと同レベルに糞。
0426デフォルトの名無しさん
2010/06/23(水) 01:33:58ハァ?同レベル?
0427デフォルトの名無しさん
2010/06/23(水) 01:35:20そう。どっちもまるで必須みたいで的外れ。printfを使いたいがために書いてるんだからそう言えばいいだけ
0428デフォルトの名無しさん
2010/06/23(水) 01:36:32お前も同レベルの事言うんだろ?言ってみろや
0429デフォルトの名無しさん
2010/06/23(水) 01:38:260430デフォルトの名無しさん
2010/06/23(水) 01:39:100431デフォルトの名無しさん
2010/06/23(水) 01:39:36それおまじないとどう違うの?
printfを使うためのおまじないじゃん
0432デフォルトの名無しさん
2010/06/23(水) 01:40:46「おまじない」と「printfを使うためのおまじない」とには大きな差があるんだが
0433デフォルトの名無しさん
2010/06/23(水) 01:42:37A 「printfを使うためのおまじない」だよ
すげえ、大きな差だ
レベルたけえwwwwww
0434デフォルトの名無しさん
2010/06/23(水) 01:43:120435デフォルトの名無しさん
2010/06/23(水) 01:44:23それを「printfを使うためのおまじない」と答えて大きな差だと言う。
0436デフォルトの名無しさん
2010/06/23(水) 01:44:42おまじないと言うより百倍良いだろう
0437デフォルトの名無しさん
2010/06/23(水) 01:45:39それを「スタンダードアイオー、標準入出力関数だよ。」と答えて大きな差だと言う。
0438デフォルトの名無しさん
2010/06/23(水) 01:45:46printf を使うためってのを理解させるには関数について教えなきゃいかんだろ
最初は #include も main も printf も return もおまじない
0439デフォルトの名無しさん
2010/06/23(水) 01:46:430440デフォルトの名無しさん
2010/06/23(水) 01:46:45それなんも教えてないよ。関数って何?ってなるだけだろ。
0441デフォルトの名無しさん
2010/06/23(水) 01:47:11>>438
俺は初めから関数について教えればいいと言ってるだろ
0442デフォルトの名無しさん
2010/06/23(水) 01:48:450443デフォルトの名無しさん
2010/06/23(水) 01:49:170444デフォルトの名無しさん
2010/06/23(水) 01:49:59引数も戻り値も分かってないから当然だわな。関数を教えて、mainが特殊な関数だと教えればいいだろう
0445デフォルトの名無しさん
2010/06/23(水) 01:50:360446デフォルトの名無しさん
2010/06/23(水) 01:50:560447デフォルトの名無しさん
2010/06/23(水) 01:51:23みるだろ。
printfってどうなってんの^^と気軽にのぞいて凹むステップは必要。
0448デフォルトの名無しさん
2010/06/23(水) 01:51:270449デフォルトの名無しさん
2010/06/23(水) 01:51:420450デフォルトの名無しさん
2010/06/23(水) 01:52:420は偽なので、その反対は真です。
0451デフォルトの名無しさん
2010/06/23(水) 01:52:500452デフォルトの名無しさん
2010/06/23(水) 01:52:58それには同意。用意されてるソートとかな
0453デフォルトの名無しさん
2010/06/23(水) 01:54:04それはお前がやってるプログラミングが今もおまじないだからだろ
0454デフォルトの名無しさん
2010/06/23(水) 01:54:350455デフォルトの名無しさん
2010/06/23(水) 01:54:38話をすりかえるな
馬鹿学生の話をしてんだよ?
0456デフォルトの名無しさん
2010/06/23(水) 01:56:03printfを用いるとしても、printf("%s\n", "Hello world.");と記述させるべきなのではないか?
0457デフォルトの名無しさん
2010/06/23(水) 01:56:100458デフォルトの名無しさん
2010/06/23(水) 01:57:210459デフォルトの名無しさん
2010/06/23(水) 01:57:36ここまでいっておきながら、
なぜprintfでなければならないのかの説明がない
というところに進めないところに馬鹿の壁を見た。
0460デフォルトの名無しさん
2010/06/23(水) 01:58:18なぜHello Worldでなければならないのかと同義だろ
0461デフォルトの名無しさん
2010/06/23(水) 01:58:460462デフォルトの名無しさん
2010/06/23(水) 02:00:17プログラムにはそんな曖昧な要素が入り込む余地はないから、
おまじないって言葉を使うのはふさわしくない。
0463デフォルトの名無しさん
2010/06/23(水) 02:00:520464デフォルトの名無しさん
2010/06/23(水) 02:01:030465デフォルトの名無しさん
2010/06/23(水) 02:02:070466デフォルトの名無しさん
2010/06/23(水) 02:02:500467デフォルトの名無しさん
2010/06/23(水) 02:03:03文字列をコンソールに出力しましょう。文字列は別に何でも良いですが、Hello world.と出力しましょう。
これで十分理由に値する。
しかし、なぜprintfを用いるのかについては理由が明らかになっていない。
まるでリテラルを出力するためにはprintfでなければならないと思い込んでいるかのようだ。
scanfにはなぜアドレスを渡さなければならないのか。これについての疑問が解けた直後、
なぜ可変個の引数が渡せるのかという疑問を持つべきである。
>>461
もちろん、明日に向かって進んでいる。その延長には明後日がある。
0468デフォルトの名無しさん
2010/06/23(水) 02:04:07実生活でも説明するのが面倒なときはおまじないって言うだろ
とくに子供に対して、前提となる知識や経験が不足している場合はとくに
プログラミングでも同様だよ
きちんと説明するには手間がかかりすぎるからおまじないって言われた、
つまり言われた側はまだまだレベルが低いってこと
0469デフォルトの名無しさん
2010/06/23(水) 02:04:28説明?どれの事だね?
0470デフォルトの名無しさん
2010/06/23(水) 02:05:02なんでもいいが、Hello worldと出力しましょう。なんでもいいが、printfを使いましょう
0471デフォルトの名無しさん
2010/06/23(水) 02:06:11おまじないでいい
という認識でいいのか?
教授は正しかったんだよな?
0472デフォルトの名無しさん
2010/06/23(水) 02:06:370473デフォルトの名無しさん
2010/06/23(水) 02:07:03ばかだなぁ。
高校出た時点で知識レベルをそろえる必要なんてなくなるんだから
おまじないで済ませてよい学生と、済ませてはならない学生が出てくるのは確か。
しかし、教授にその説明を求めるのもまた間違いだろうな。
金さえ払えばなんでもできるなんて甘えは捨てないと。
0474デフォルトの名無しさん
2010/06/23(水) 02:07:150475デフォルトの名無しさん
2010/06/23(水) 02:07:53は?俺教授に質問した学生なの?
0476デフォルトの名無しさん
2010/06/23(水) 02:08:180477デフォルトの名無しさん
2010/06/23(水) 02:08:250478デフォルトの名無しさん
2010/06/23(水) 02:09:05ごめんね。後段はあなたへのレスじゃなかったんです。ツイート()なんです
0479デフォルトの名無しさん
2010/06/23(水) 02:09:15じゃあお前は今もおまじないと思ってるわけ?ちゃんと分かってるなら、そう説明すればいいだろ
0480デフォルトの名無しさん
2010/06/23(水) 02:10:030481デフォルトの名無しさん
2010/06/23(水) 02:10:26なんかずれてんぞ。
この場で説明してあげるべきだと考えてるなら説明すればいいだろ、じゃないのか?
0482デフォルトの名無しさん
2010/06/23(水) 02:10:58プリプロセッサから解説しないといけないし
おまじないでいいと思うけどな。最初は不要な知識だし
0483デフォルトの名無しさん
2010/06/23(水) 02:11:35初心者にいきなり関数の説明とかポインタの説明したってわかる訳がない。
順序立てて学習して行くことでいままでおまじないだった事が理解できるようになる。scanfに何で&を付けるのかもわかるようになる。それで良いじゃないか
0484デフォルトの名無しさん
2010/06/23(水) 02:11:36そこでおまじないとか言って二極化を促進させる教授パネェよ
0485デフォルトの名無しさん
2010/06/23(水) 02:12:051の位:
10の位:
100の位:
1000の位:
・
・
・
ってな感じで出力する簡単な計算式教えてください
0486デフォルトの名無しさん
2010/06/23(水) 02:12:410487デフォルトの名無しさん
2010/06/23(水) 02:14:05おまじないには自己暗示効果があるから、信じて実行すれば効果があるよ。
少しでも疑ったら魔法は消える。
0488デフォルトの名無しさん
2010/06/23(水) 02:14:46ちゃんと試験でバカは落とせよ
0489デフォルトの名無しさん
2010/06/23(水) 02:14:560490デフォルトの名無しさん
2010/06/23(水) 02:15:54プロセスを「プロセッス」とか言うわけ?
「キッス」とか旧世代の言葉を使う人?w
0491デフォルトの名無しさん
2010/06/23(水) 02:15:59マジレスすると大学のプログラミング講義でおまじないレベルからやるのって興味ない人向けの授業だよ
興味のある人は入門なんか飛ばして次の講義を受けるべき
0492デフォルトの名無しさん
2010/06/23(水) 02:16:54あれもこれもインクルードするぐらいになったらもうおまじないじゃなくなってるだろ
0493デフォルトの名無しさん
2010/06/23(水) 02:17:00『お前には分からんかもしれんけど俺が正しいから従え』というのを言い換えただけ。
0494デフォルトの名無しさん
2010/06/23(水) 02:17:26マジレスすると入門向けの講義受ければ休みまくっても余裕でいい成績が取れる
0495デフォルトの名無しさん
2010/06/23(水) 02:17:46さがんないよ。授業余裕なら単位取れる最低限の行動だけして残った時間を有意義に過ごせばいい。
それが大学だろ。
0496デフォルトの名無しさん
2010/06/23(水) 02:18:13お前らもそうだったよな?
0497デフォルトの名無しさん
2010/06/23(水) 02:18:43質の高い教育はそれなりの場所へ行かなきゃ受けられないんだよ
授業料さえ払えばなんでも教えてもらえると思うのが大間違い
これが格差というもの
0498デフォルトの名無しさん
2010/06/23(水) 02:18:480499デフォルトの名無しさん
2010/06/23(水) 02:19:230500デフォルトの名無しさん
2010/06/23(水) 02:19:52http://www.intel.co.jp/jp/products/processor_number/
インテルにあやまれ
>>494
きちんとサボればおまじないが気になることなんて無い
0501デフォルトの名無しさん
2010/06/23(水) 02:21:14中学の頃はPC-8001にカセットテープの時代だったのでCコンパイラが動く環境がありませんでした
0502デフォルトの名無しさん
2010/06/23(水) 02:21:42サボりまくっても2chにこんだけおまじないの人がいるんだから気になるよ
0503デフォルトの名無しさん
2010/06/23(水) 02:22:010504デフォルトの名無しさん
2010/06/23(水) 02:24:57具体的な説明をする予定がないんじゃないの?
0505デフォルトの名無しさん
2010/06/23(水) 02:26:38while(n) {
printf("%d\n", n % 10);
n /= 10;
}
0506デフォルトの名無しさん
2010/06/23(水) 02:31:110507デフォルトの名無しさん
2010/06/23(水) 02:38:27ありがとうございます
0508デフォルトの名無しさん
2010/06/23(水) 03:19:18数学には「おまじない」など存在しない。
数学においては、新出の語句や定理は、必ずそれ以前に学習した定義・定理から導き出せる。
>>386の言い分もわからんでもない。
むしろ、「おまじない」になんの疑問も抱かない奴よりは見込みある。
教授にはぐらかされても放置せず、自分で調べようとしているならば、だが。
0509デフォルトの名無しさん
2010/06/23(水) 03:22:44決めごとなんだから。
0510デフォルトの名無しさん
2010/06/23(水) 03:47:21その定義・定理を自分で調べようともせず教授に教えろと言ってんだよ
どこに見込みがあるってんだ
0511デフォルトの名無しさん
2010/06/23(水) 04:06:01ちゃんと最後の行読みなよ。
0512デフォルトの名無しさん
2010/06/23(水) 04:24:47ちゃんと今までの話を読んだか?
最後の行はまるで的外れ。
0513デフォルトの名無しさん
2010/06/23(水) 04:30:081:事実に対して仮定を持ち出す
2:ごくまれな反例をとりあげる
3:自分に有利な将来像を予想する
4:主観で決め付ける
5:資料を示さず自論が支持されていると思わせる
6:一見関係ありそうで関係ない話を始める
7:陰謀であると力説する
8:知能障害を起こす
9:自分の見解を述べずに人格批判をする
10:ありえない解決策を図る
11:レッテル貼りをする
12:決着した話を経緯を無視して蒸し返す
13:勝利宣言をする
14:細かい部分のミスを指摘し相手を無知と認識させる
15:新しい概念が全て正しいのだとミスリードする
0514デフォルトの名無しさん
2010/06/23(水) 04:30:22もうすこし読解力をあげましょう。
または、もうすこし落ち着きましょう。
または、良い睡眠をとりましょう。
0515デフォルトの名無しさん
2010/06/23(水) 04:34:28まさに詭弁だな。
おまえのことだよ、わかってるか?
0516デフォルトの名無しさん
2010/06/23(水) 04:50:47本人乙
0517デフォルトの名無しさん
2010/06/23(水) 07:38:15授業でおまじないと言うのはいいが教えを乞いにきた学生に詳しく教えないのはおかしい。
ある講義で質問しに行ったら聞いてないことまで長々と話す教授もいた。
その教授はハズレ。
0518デフォルトの名無しさん
2010/06/23(水) 08:12:29教授からすれば、馬鹿な質問はするなってことなんだろうけど。学生からすれば馬鹿な回答なんだよ
0519デフォルトの名無しさん
2010/06/23(水) 08:17:140520デフォルトの名無しさん
2010/06/23(水) 12:38:310521デフォルトの名無しさん
2010/06/23(水) 13:08:450522デフォルトの名無しさん
2010/06/23(水) 13:26:230523デフォルトの名無しさん
2010/06/23(水) 15:43:47メイン文でも反映されてるようにしたいんだけどいまいちポインタの使い方がわからない・・・
だれか教えてくれ
0524デフォルトの名無しさん
2010/06/23(水) 15:52:58http://codepad.org/VJwuQQT9
0525デフォルトの名無しさん
2010/06/23(水) 19:56:220526デフォルトの名無しさん
2010/06/23(水) 20:08:490527デフォルトの名無しさん
2010/06/23(水) 21:51:58そりゃ参照渡しじゃねーよ
0528デフォルトの名無しさん
2010/06/23(水) 22:03:150529デフォルトの名無しさん
2010/06/23(水) 22:15:02Cには参照渡しはねーんだよ
全部値渡し
それは「アドレス」を値で渡しているだけ
0530デフォルトの名無しさん
2010/06/23(水) 22:17:530531デフォルトの名無しさん
2010/06/23(水) 22:19:33まあ言いたいことは分かるが、言い方がなんかダサいよ。なんで喧嘩腰というか、キレてんの?
0532デフォルトの名無しさん
2010/06/23(水) 22:21:260533デフォルトの名無しさん
2010/06/23(水) 22:26:14ポインタの値渡しってのもなんか回りくどいしさ。
0534デフォルトの名無しさん
2010/06/23(水) 22:28:54{
int *GetX(void)
{
return &x;
}
int *pGetX;
pGetX = GetX();
pGetX += 10;
0535デフォルトの名無しさん
2010/06/23(水) 22:32:32ミス
0536デフォルトの名無しさん
2010/06/23(水) 22:44:080537デフォルトの名無しさん
2010/06/23(水) 22:47:09こいつなにしようとしたの?
0538デフォルトの名無しさん
2010/06/23(水) 22:47:47キレてるようには見えないなぁ。
馬鹿にしてるようには見えるけど。
0539デフォルトの名無しさん
2010/06/23(水) 22:50:230540デフォルトの名無しさん
2010/06/23(水) 23:02:550541デフォルトの名無しさん
2010/06/23(水) 23:48:19居たら何で勉強したのか教えてくれ
それとオススメの本とかあったらそれも
0542デフォルトの名無しさん
2010/06/23(水) 23:56:280543デフォルトの名無しさん
2010/06/24(木) 00:09:050544デフォルトの名無しさん
2010/06/24(木) 01:55:070545デフォルトの名無しさん
2010/06/24(木) 03:40:410546デフォルトの名無しさん
2010/06/24(木) 03:43:230547デフォルトの名無しさん
2010/06/24(木) 03:45:340548デフォルトの名無しさん
2010/06/24(木) 03:49:320549デフォルトの名無しさん
2010/06/24(木) 04:54:160550名無し
2010/06/24(木) 07:56:44同じ表現と考えていいのか?
105 :デフォルトの名無しさん:2010/06/14(月) 18:40:33
>>102
文字列リテラルはそれ自体がchar *と言う型のポインタ値として扱われる。
つまり、printf("Hello\n");と書いただけで、printf()関数にcharへのポインタを渡すと言うプログラムになっているわけだ。
これあるじゃん?
char *だからさ "aiueo"だとしたら まずaiueoをメモリ上に確保して a,i,u,e,o,\0みたいな16進数だけど そして確保したら その先頭のアドレスaの場所のアドレスを返すんだろ?
aの場所が100番地だったら100をchar *へ渡すみたいな?
っで気になるのが ポインタを返す と アドレスを返すって同じ意味でとらえていいのか?
これは先頭のアドレスを返してるよな? char *に先頭のアドレスを渡している
ポインタを返す と アドレスを返す これって同じ意味なのか?
ポインタ変数を返すなら違うが ポインタとは で検索したら e-wordではアドレスを保持する変数とあるが
それならポインタ変数=ポインタだよな?どうなんだ?
ポインタを返す を アドレスを返す 検索しても ポインタを返す関数 アドレスを返す関数とあるが
だれか教えてくれー
0551デフォルトの名無しさん
2010/06/24(木) 08:17:100552デフォルトの名無しさん
2010/06/24(木) 09:27:31メモリアドレス→メモリ上の住所を示す「定数」
ポインタ→任意のメモリアドレスを示すことができる「変数」
0553デフォルトの名無しさん
2010/06/24(木) 09:38:33sizeof a と sizeof "aiueo" は違う
0554デフォルトの名無しさん
2010/06/24(木) 09:48:36アドレス = 型情報は含まない。
"単なる住所"
ポインタ = アドレスと共に型情報も含む
加減算や指し先の参照等で、与えられた型に応じて評価してくれる
"どういう住人が住んでいるかを示している住所"
0555名無し
2010/06/24(木) 10:21:07"aiueo"はchar p[10]="aiueo";
ポインタを返すとは 先頭アドレスのpを返すこと?
配列の場合は&をつけなくていいんだよな先頭は
char *a;
a=p;
アドレスを返す場合は&p[0]などでいいんだよな?
文字リテラルは配列になるので &をつけなくても先頭のアドレスをポインタというのか?
0556名無し
2010/06/24(木) 10:37:49があるとすると
>>この "abc" という式を評価すると、先頭の文字 'a' が格納されたメモリ領域を示すポインタが返ってきます!
と書いてあるのだが、100番地から始まったとして
a b c \0
100番地,101番地,102番地,103番地
この領域をひっくるめてポインタというであっているのか
100番地とかはアドレスであり ポインタを返すという表現は
100~103番地全体を返すということ?
0557名無し
2010/06/24(木) 10:39:31100や101それぞれはアドレスでおk?
0558デフォルトの名無しさん
2010/06/24(木) 10:44:590559デフォルトの名無しさん
2010/06/24(木) 11:00:06アドレス:ナメック星一番地
ポインタ:住所はナメック星一番地、俺はピッコロだぁああああ
0560デフォルトの名無しさん
2010/06/24(木) 11:05:070561デフォルトの名無しさん
2010/06/24(木) 12:26:09通りすがりの元プログラマーです
ポインタは「アドレス用の変数」と思っておけばOKです
例えばアドレスが16ビットの環境なら
char *a;
int *b;
long *c;
printf("%d %d %d",sizeof(a),sizeof(b),sizeof(c));
↑16ビットなので全て2になる…はず(今、手元にCの環境が無いので確認できないw)
ポインタの型は
*c、← cにはアドレスが入ってるので、その位置にLong型があると解釈される
b++ ← int型ポインタなので、アドレスに(16ビット環境なら)+2される
などの時に必要になります
0562デフォルトの名無しさん
2010/06/24(木) 12:28:010563デフォルトの名無しさん
2010/06/24(木) 12:29:35調べてみてください
0564デフォルトの名無しさん
2010/06/24(木) 12:40:190565デフォルトの名無しさん
2010/06/24(木) 12:43:34ポインタ全部が同じ大きさであるような言い方は良くない
0566デフォルトの名無しさん
2010/06/24(木) 12:48:07たからどうしたとしか思えない
0567デフォルトの名無しさん
2010/06/24(木) 13:27:390568デフォルトの名無しさん
2010/06/24(木) 16:04:530569デフォルトの名無しさん
2010/06/24(木) 17:13:14で型はどのように決められるの?
0570質問
2010/06/24(木) 17:13:52http://www.geocities.jp/kenji_y0328/crenshu/renshu/r011.gif
こちらのHPにある解答を実行してみたら、
goukei=2144332132 average is=2442545234
のような表示結果が出てきてうまくいきませんでした。
どこが違うのかどなたか教えていただけますか?
よろしくお願いします
0571デフォルトの名無しさん
2010/06/24(木) 17:15:21ここはエスパーを召還するスレか?
うまくいかなかったソースを貼れよ
0572デフォルトの名無しさん
2010/06/24(木) 17:17:41>>557
>100~103全体がポインタ
仮にC言語に文字列型があれば、その例では、全体は(文字列型)
0573デフォルトの名無しさん
2010/06/24(木) 17:33:480574554
2010/06/24(木) 17:36:17宣言時に * の前に型指定してるじゃん(ex int * 等) それを指して型情報を持っている と捉えてる。
void * 中の void も 型無し という型指示されている という意識ね
int a[3]
int *p = a;
int *q = a + 2;
void *hoge = a;
q-p は合法で sizeof(int) に関係無く 2 を返すし hoge - p は非合法。
アドレスは、ただの整数値 という意識
0575デフォルトの名無しさん
2010/06/24(木) 17:45:16ヴォケ
0576デフォルトの名無しさん
2010/06/24(木) 17:48:16ポインタ - ポインタ の値だぞ? アドレスの距離を返さずに、要素差返すんだけど?
0577デフォルトの名無しさん
2010/06/24(木) 17:56:090578デフォルトの名無しさん
2010/06/24(木) 18:21:56ポインタの差を出すことは合法だろ
専用の型まであんのに
0579デフォルトの名無しさん
2010/06/24(木) 18:25:37#include <stdio.h>
main()
{
int kokugo,shakai,rika;
int goukei,heikin;
printf("国語の点数=");
scanf("%d",&kokugo);
printf("社会の点数=");
scanf("%d",&shakai);
printf("理科の点数=");
scanf("%d",&rika);
goukei = kokugo + shakai + rika;
heikin = goukei / 3;
printf("合計=%d 平均=%d \n",goukei,heikin);
return 0;
}
0580デフォルトの名無しさん
2010/06/24(木) 18:27:59レスも安価も間違っちゃってるが
0581デフォルトの名無しさん
2010/06/24(木) 19:04:55>>579
正常に動作している。
cygwin 1.7/gcc 4.3.4/Windows XP SP3
0582デフォルトの名無しさん
2010/06/24(木) 19:07:190583名無し
2010/06/24(木) 19:13:26char *p="ABC";
ポインタを返すという表現をのせてるサイトがあったが
abcを確保して
先頭のアドレスを返すって意味と同じだったらしい
ポインタを返すって書くんじゃなくて abcが保存されてる場所の先頭アドレスを返すっていみ
すっきりしたよ
0584デフォルトの名無しさん
2010/06/24(木) 20:09:13char *p="ABC";
でOKなの?
0585デフォルトの名無しさん
2010/06/24(木) 20:14:04内容書き換えちゃだめだけど
0586デフォルトの名無しさん
2010/06/24(木) 20:22:53C言語/C++03以前では非constポインタへの暗黙変換が許される
0587デフォルトの名無しさん
2010/06/24(木) 20:40:46確認して書いたわけじゃないんで記憶違いならすまん。
0588デフォルトの名無しさん
2010/06/24(木) 20:43:43sizeof は char* とは異なる
0589デフォルトの名無しさん
2010/06/24(木) 20:45:39C++03でも許されてるはずだけど
「以前」ってのは含むのか含まないのか
0590デフォルトの名無しさん
2010/06/24(木) 20:46:53文字列リテラルは array of const char で、当然 const char* に暗黙変換可能
ただし、例外的に char* に暗黙変換可能
0591デフォルトの名無しさん
2010/06/24(木) 21:57:16一般ピーポーじゃあるまいし含むのが普通だろう
0592デフォルトの名無しさん
2010/06/24(木) 21:58:54template<typename T>class A;
void f(A<char const>x); // void f(A<char>); で呼べないのは不便だとおもう。
0593名無し
2010/06/24(木) 22:06:51ねえ、int a;
&a=0xbffff978;とか代入できないんだが何故?
アドレスを直接いれるってのは無理なの?
0594デフォルトの名無しさん
2010/06/24(木) 22:10:130は特別扱い
0595デフォルトの名無しさん
2010/06/24(木) 22:11:03と同じ
0596594
2010/06/24(木) 22:13:34なんだそれ
0597デフォルトの名無しさん
2010/06/24(木) 22:24:06int a;
*(&a)=0xbffff978;
0598デフォルトの名無しさん
2010/06/24(木) 22:27:03int *a = (int*)0xbffff978;
*a = 0;
メモリマップドI/Oならvolatileつけた方が良い
0599デフォルトの名無しさん
2010/06/24(木) 22:27:110600デフォルトの名無しさん
2010/06/24(木) 22:28:410601デフォルトの名無しさん
2010/06/24(木) 22:30:370602デフォルトの名無しさん
2010/06/24(木) 22:31:10アドレスは定数だっつーのに代入しようとすんなよ
0603名無し
2010/06/24(木) 22:31:53もやっと解消してくれてありがとう^w^b
アドレスを直でいれられたとは初めてしったお
0604デフォルトの名無しさん
2010/06/24(木) 22:44:28むしろシステム他に使われてるからこそ、そこを指したいだろ
0605デフォルトの名無しさん
2010/06/24(木) 22:49:46配列と混同した
0606デフォルトの名無しさん
2010/06/25(金) 00:43:54いい加減入門レベルから卒業したいんですがどういうプログラムがかけるようになれば
中級、上級者になれるのですか。
私は、他の人が作成したプログラムにけちをつけるくらいの力は持っています
0607デフォルトの名無しさん
2010/06/25(金) 00:46:450608デフォルトの名無しさん
2010/06/25(金) 01:09:39入門編としてマスターマインドを作ってみる
0609デフォルトの名無しさん
2010/06/25(金) 01:12:230610デフォルトの名無しさん
2010/06/25(金) 01:13:29どこに入門するんだよ
ハードルたけぇよ
0611デフォルトの名無しさん
2010/06/25(金) 01:15:34gccレベルのもん書いてから偉そうなこと言えっつーの
0612デフォルトの名無しさん
2010/06/25(金) 01:16:20偉そうなだけの人キタw
0613デフォルトの名無しさん
2010/06/25(金) 01:28:260614デフォルトの名無しさん
2010/06/25(金) 01:32:020615デフォルトの名無しさん
2010/06/25(金) 02:02:05ある一つの処理系について何処が処理系依存がどう動くか、
その処理系の独自拡張や使えるライブラリ群に精通するぐらいが中級。
世にある代表的な多くの処理系について中級レベルに
分かるようになると上級。
実際に複雑なプログラムを作るには、Cの技術力より
設計やテストの技術、そして作りたい物の分野に対する
知識の方が重要です。
つまり>>606はスレ違い。
強いて言えば、コンパイラ作れて中級の入口じゃね?
構文解析手法やら機械語やらCそのものとは
あまり関係ない知識もたらふく要るけど。
0616デフォルトの名無しさん
2010/06/25(金) 02:16:03あーん?
0617デフォルトの名無しさん
2010/06/25(金) 09:41:33あなたの書いた「gccレベルのもん」を拝見させていただこうか
0618デフォルトの名無しさん
2010/06/25(金) 10:27:34何と比べて、どの部分がどう高いんだ???
CでなくC++という意味か?
Unix系のOSが扱えるということ?
0619デフォルトの名無しさん
2010/06/25(金) 10:37:230620デフォルトの名無しさん
2010/06/25(金) 13:00:010621デフォルトの名無しさん
2010/06/25(金) 15:41:51あれはあれで聞く気になれないよなw
0622デフォルトの名無しさん
2010/06/25(金) 16:06:35そんな偉そうなことを言えるほどお前は有能なのか
身の程を知れよ
0623デフォルトの名無しさん
2010/06/25(金) 16:14:540624デフォルトの名無しさん
2010/06/25(金) 17:10:12と言われて gcc くらいしか発想にない頭の不自由な方イタすぎ
0625デフォルトの名無しさん
2010/06/25(金) 17:14:300626デフォルトの名無しさん
2010/06/25(金) 17:21:54大学1年だろ、プログラミングを始めてまだ半年も経っていないから…
0627デフォルトの名無しさん
2010/06/25(金) 17:25:27今でもgccレベルのものなんて容易には作れないが。
0628デフォルトの名無しさん
2010/06/25(金) 19:38:49そして人の作成したプログラムの欠陥部分が見つけられるようになれば上級。
0629デフォルトの名無しさん
2010/06/25(金) 19:44:220630デフォルトの名無しさん
2010/06/25(金) 19:48:19中級だな。少なくとも何を書こうとしてるか本人が一番よくわかってるはず。
0631デフォルトの名無しさん
2010/06/25(金) 21:13:030632デフォルトの名無しさん
2010/06/25(金) 21:20:310633デフォルトの名無しさん
2010/06/25(金) 22:06:23簡単でいいからプログラム見せなさい。
関数の復帰値チェックしてなかったらアウトだよ
0634デフォルトの名無しさん
2010/06/25(金) 22:17:53return 0;
}
0635デフォルトの名無しさん
2010/06/26(土) 00:34:110636デフォルトの名無しさん
2010/06/26(土) 00:48:080637デフォルトの名無しさん
2010/06/26(土) 02:19:48何か作って公開し、バグを見つけたらお金あげる^^
というクヌース先生の2番煎じをやるといいよ
0638デフォルトの名無しさん
2010/06/26(土) 05:05:00せめて「 ”」と「“ 」は分けてほしかった。
" だけではねえ。
0639デフォルトの名無しさん
2010/06/26(土) 05:06:15判別しにくいから勘弁してくれw
0640デフォルトの名無しさん
2010/06/26(土) 05:32:31判別しにくい? どういうこと?
括弧とか片方だけだと不便だろ?
クォーテーションだって開始と終了があったほうが便利じゃん。
0641デフォルトの名無しさん
2010/06/26(土) 10:21:07int a;
int b;
int* c;
};
typedef struct A A;
void func(const A* reference){
reference->c[3] = 7;
}
int main(void)
{
A tmp;
int array[10] = {0};
tmp.c = array;
func(&tmp);
return 0;
}
以上のように、func内でreference->cが指す値を書き換えられるのは
理解しているのですが、cが指す値もread-onlyにする方法はないでしょうか。
cはintへの配列にはわけあって出来ません。
0642デフォルトの名無しさん
2010/06/26(土) 11:55:520643デフォルトの名無しさん
2010/06/26(土) 12:24:14>>642
それ、c 自体が const になるだけで
c が指す先は const にならない
0644デフォルトの名無しさん
2010/06/26(土) 12:30:050645デフォルトの名無しさん
2010/06/26(土) 12:33:12別名構造体はconst A*の代わりに、const B*のように使用します
0646デフォルトの名無しさん
2010/06/26(土) 12:36:15オシロでデューティ比を50%にしようとif elseを使ったのですが50%にはならず・・・
原因はそこにあるのかなぁと
0647デフォルトの名無しさん
2010/06/26(土) 12:46:22デバイスに繋がるバスを考慮して妥当な時間差かどうか自分で判断するしかないんじゃ…
0648デフォルトの名無しさん
2010/06/26(土) 12:52:46このif elseをwhileで無限ループさせているだけです
この場合ifとelseの出力時間は等しくなると思うのですが
結果としてはどちらかの出力時間が長かったのです
0649デフォルトの名無しさん
2010/06/26(土) 12:55:25「こんすたんちのーぶる」
0650デフォルトの名無しさん
2010/06/26(土) 12:55:42if else処理後にi++も入れてます
0651デフォルトの名無しさん
2010/06/26(土) 12:59:32のーぶるw
0652デフォルトの名無しさん
2010/06/26(土) 13:03:43分岐予測でずれんじゃないかな
分からんけど
まず、どうコンパイルされたのかアセンブラを見せてくれ
0653デフォルトの名無しさん
2010/06/26(土) 13:09:21{
int x,i;
while(1)
{
if(i%2==0)
{
call(0x0110,(void*)0);
}
else
{
call(0x0100,(void*)0);
}
i++;
}
}
0654デフォルトの名無しさん
2010/06/26(土) 13:18:050655641
2010/06/26(土) 13:18:25この場合は const int* c; にすればよいですね。
でも実際に扱っているソースでは、
func1(const A*);
func2(A*);
というように複数あり、func2では値を変えたいのです。
0656デフォルトの名無しさん
2010/06/26(土) 13:23:02cを const int * hoge;に代入して取り回せばいいだろ
0657647
2010/06/26(土) 13:25:07生成されたコード→コンパイル/リンクした結果のアセンブラコード
プロセッサ→CPUのこと
普通計測された時間があって、その理由を推測するならソフト的には処理を
分割してより細かく計測していって原因追求するんだけど、もうそのレンジに
ないのでアセンブラコードとCPUやその他のペリフェラルの特性を元に
自分で推測するしかないよ。
0658デフォルトの名無しさん
2010/06/26(土) 13:27:01ご回答ありがとうございました。
0659641
2010/06/26(土) 14:10:12それでは構造体メンバをすべて別々に引数にして渡す必要がありますね。
でも仕方なさそうですね。
0660641
2010/06/26(土) 14:39:55int a;
int b;
int* c;
};
と、
struct B{
int a;
int b;
const int* c;
};
を宣言しておいて、
func1(const B*);
func2(A*)
引数で渡すときに、(const B*)A* とキャストすれば大丈夫なことが分かりました。
こんなことしてるソースコードは見たことないのが不安ですが……
0661デフォルトの名無しさん
2010/06/26(土) 15:50:15ストゥディオ?エスティディオ?
0662デフォルトの名無しさん
2010/06/26(土) 15:51:130663デフォルトの名無しさん
2010/06/26(土) 15:57:230664デフォルトの名無しさん
2010/06/26(土) 15:57:530665デフォルトの名無しさん
2010/06/26(土) 16:33:220666デフォルトの名無しさん
2010/06/26(土) 16:35:41スタンダード インプット アウトプット だよ
0667デフォルトの名無しさん
2010/06/26(土) 16:37:140668デフォルトの名無しさん
2010/06/26(土) 16:40:090669デフォルトの名無しさん
2010/06/26(土) 16:49:090670デフォルトの名無しさん
2010/06/26(土) 17:06:070671デフォルトの名無しさん
2010/06/26(土) 21:21:00関数なり記述方法はありませんか?
よろしくお願いします。
可能ならば1fps毎に1ずつ増えるカウント cntを使用して
0672デフォルトの名無しさん
2010/06/26(土) 21:24:150673デフォルトの名無しさん
2010/06/26(土) 21:24:39x=3-abs((cnt%5)-3)
0674デフォルトの名無しさん
2010/06/26(土) 21:26:40%6 にしてちょ
0675デフォルトの名無しさん
2010/06/26(土) 21:29:25int foo[]={0,1,2,3,2,1};
return foo[cnt%(sizeof(foo)/sizeof(foo[0]))];
0676デフォルトの名無しさん
2010/06/26(土) 21:29:48なるほど絶対値でやればできますね、即レスありがとうございました。
0677デフォルトの名無しさん
2010/06/27(日) 10:12:300678デフォルトの名無しさん
2010/06/27(日) 10:29:14要は実体を確保すればいい
int main(void)
{
int *p;
p = &p; //ポインタ自身が持つアドレスを渡す。これでpは通常のローカル変数のように扱える。
}
0679デフォルトの名無しさん
2010/06/27(日) 10:38:060680デフォルトの名無しさん
2010/06/27(日) 10:41:10ポインタをローカル変数として扱う方法を教えてあげるよ
int main(void)
{
int *p;
}
0681678
2010/06/27(日) 10:43:40int main(void)
{
int *p;
p = &p; //ポインタ自身が持つアドレスを渡す。これでpは通常のローカル変数のように扱える。
*p = 3;
printf("%d\n",*p);
return 0;
}
コンパイルかけた結果、警告メッセージだけですんだ。どうやら問題ないらしい
mm.c: In function `main':
mm.c:7: warning: assignment from incompatible pointer type
$ ./a.exe
15805 [main] a 3244 _cygtls::handle_exceptions: Error while dumping state
(probably corrupted stack)Segmentation fault (core dumped)
0682678
2010/06/27(日) 10:47:020683デフォルトの名無しさん
2010/06/27(日) 11:02:34*p = 3; が未定義動作だからじゃないか?
副作用居完了点をまたがずに参照と代入を行ってるから
0684デフォルトの名無しさん
2010/06/27(日) 11:14:51>>683
いや二回目でどこ参照してるか考えろよアホどもwwww
0685デフォルトの名無しさん
2010/06/27(日) 11:17:29int main(void)
{
int *p;
p = &p; //ポインタ自身が持つアドレスを渡す。これでpは通常のローカル変数のように扱える。
*p = 3;
printf("%d\n", (int)p);
return 0;
}
こうすれば理解できるか?
0686デフォルトの名無しさん
2010/06/27(日) 11:18:53*p = 3; は p = (int*)3; と同じ動作になる
p には既に p のアドレスが入ってないどころか
単なる 3 という数値しか入ってないので
*p が変な所を指して死ぬ
0687デフォルトの名無しさん
2010/06/27(日) 13:48:450688デフォルトの名無しさん
2010/06/27(日) 14:11:06メモリ保護のあるOSならゼロアドレスを含むページは
読み書き禁止にするのが普通だ
0689デフォルトの名無しさん
2010/06/27(日) 14:20:41int* p; // メモリ番地 0x123 の値は不定
p = &p // メモリ番地 0x123 の値は 0x123
*p // "メモリ番地 0x123 に書いてあるメモリ番地 0x123" の内容を読んだり書いたりする命令
*p = 3 // この場合は、メモリ番地 0x123 に書いてあるメモリ番地 0x123 の場所に、数字の 3 を記録する
// この時点で、 メモリ番地 0x123 に書いてある数字は 0x123 ではなく 3 になっている。
//次に、*p として参照すると
*p // これはメモリ番地0x123 に書いてあるメモリ番地 3 を参照する命令となる。
// もちろんメモリ番地 3 には、まだ何もデータを書き込んでない。(それどころか、そこが使えるかどうかも不明)
だから何らかのメモリエラーが予想されますし、案の定、エラーでで止まりませんか?
0690デフォルトの名無しさん
2010/06/27(日) 14:31:56わかりやすい解説どうもありがとうございました
0691デフォルトの名無しさん
2010/06/27(日) 18:10:07いえいえ
0692デフォルトの名無しさん
2010/06/27(日) 18:11:27気にすんなよ
0693デフォルトの名無しさん
2010/06/27(日) 18:17:09なあに、困ったときはお互い様よ
0694デフォルトの名無しさん
2010/06/27(日) 18:21:12よ
0695デフォルトの名無しさん
2010/06/27(日) 19:08:330696デフォルトの名無しさん
2010/06/28(月) 00:06:22答え甲斐のある質問どうもありがとうございました
0697デフォルトの名無しさん
2010/06/28(月) 09:04:55早くもCUIの連続で挫折しそうです
昨日Pythonの入門書を注文してしまいました
自分は駄目な人間なのでしょうか
0698デフォルトの名無しさん
2010/06/28(月) 09:13:52だめなのかはともかく
どのみちPythonでも最初はCUIですよ
というより、基礎構文の使い方やら基本的なことを習得する過程はどの言語でもそう変わりません
Cのほうがエラーがやたら不親切だったり、ポインタとかあったり大変でしょうけど
とはいえPythonなら標準でもGUIライブラリが付いていたり、容易に追加ライブラリを扱えたりと
かなりお手軽ですが
0699デフォルトの名無しさん
2010/06/28(月) 23:54:25int main(void)
{
char no [] ={"0011"};
printf("%s\n",no);
char name [] ="Yamada";
printf("%s\n",name);
return 0;
}
0700デフォルトの名無しさん
2010/06/29(火) 00:01:390701デフォルトの名無しさん
2010/06/29(火) 00:11:540702デフォルトの名無しさん
2010/06/29(火) 02:23:53Run-Time Check Failure #2 - Stack around the variable 'c' was corrupted.
(どこか回りっぱなしになってる?) どこがまちがっているんでしょうか?
#include<stdio.h>
#include<iostream>
#include<conio.h>/*while(kbhit()){}で一時停止させる為*/
int main() /*整数値のみを使った電卓*/
{
int a,b,d; char c;
printf("数字を入力してください\n");
scanf("%d",&a);
printf("%dが代入されました",a);
printf("aは+\n" "bは-\n" "cは*\n" "dは/です\n");
scanf("%s",&c);/*%dは10進法整数、%sは文字列*/
printf("次の数字を入力してください\n");
scanf("%d",&b);
0703デフォルトの名無しさん
2010/06/29(火) 02:24:34switch(c){
case 'a':
printf("%d+%d=%d\n",a,b,a+b);
break;
case 'b':
printf("%d-%d=%d\n",a,b,a-b);
break;
case 'c':
printf("%d*%d=%d\n",a,b,a*b);
break;
case 'd':
printf("%d/%d=%f\n",a,b,(double)a/b);/*キャスト*/
break;
default:
printf("エラーです\n");
break; }
while(!kbhit()){}/*http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1242481837*/
return 0; }
0704デフォルトの名無しさん
2010/06/29(火) 02:29:39%cじゃないとまずいんじゃないですかね
0705デフォルトの名無しさん
2010/06/29(火) 02:47:55printf("次の数字を入力してください\n");
まで飛んでしまうバグが発生したので調べて
%sに修正しました。
Run-Time Check Failure #2 - Stack around the variable 'c' was corrupted.
というエラーが発生するのはswitch以降みたいです
0706デフォルトの名無しさん
2010/06/29(火) 02:49:330707デフォルトの名無しさん
2010/06/29(火) 02:50:54%sにしたいならそれを格納する先はchar配列、それなりのメモリを確保したポインタにしましょう。
0708デフォルトの名無しさん
2010/06/29(火) 02:52:100709デフォルトの名無しさん
2010/06/29(火) 02:52:33こういうことあるからscanfよりもgets使ってほしいんだけど
0710デフォルトの名無しさん
2010/06/29(火) 02:59:25とりまポインタというところまで勉強を進めれば理解できるってことですか?
今やっと制御文まで本を読み進めたところです。
0711デフォルトの名無しさん
2010/06/29(火) 03:00:310712デフォルトの名無しさん
2010/06/29(火) 03:17:15char型は文字ひとつだけ入る
一文字に見える文字列は、その文字と、終端文字(見えない)の二文字から成り立つ
cにはその文字が入り、cの隣、変数じゃないところに終端文字をねじ込んでしまった。
それと、cは壊れてないよ。cの周辺がおかしいよ、と書いてるでしょ
0713デフォルトの名無しさん
2010/06/29(火) 03:20:28やっぱり同じエラーが出ます。
これでcharに対応させて、文字もa,b,c,dのいづれか一つの文字しか入れてないはず・・・
でもエラー増えてる;ω;
3 IntelliSense: 型 "int" の引数は型 "const char *" のパラメーターと互換性がありません c:\users\shintarou\documents\visual studio 2010\projects\calc\calc\calc.cpp 20
エラー 2 error C2664: 'scanf' : 1 番目の引数を 'int' から 'const char *' に変換できません。(新しい機能 ; ヘルプを参照) c:\users\shintarou\documents\visual studio 2010\projects\calc\calc\calc.cpp 20
いつint c;なんて入れたんだよ・・・俺はcharだって言ってるじゃないか・・・
0714デフォルトの名無しさん
2010/06/29(火) 03:21:48読み飛ばしてました。
ちょっと修正しまあす
0715デフォルトの名無しさん
2010/06/29(火) 03:31:24scanf(" %c", &c); で改行文字を読み飛ばす。
0716デフォルトの名無しさん
2010/06/29(火) 03:43:56すっごくうれしいです!!
やっぱオリジナルが完成すると嬉しいっすね。
バグは自分のミスだってわかってるけど、イライラしてしょうがなかったです
0717デフォルトの名無しさん
2010/06/29(火) 03:44:55#include<stdio.h>
#include<iostream>
#include<conio.h>/*while(kbhit()){}で一時停止させる為*/
/*整数値のみを使った電卓*/
int main()
{
int a=0,b=0;
char c;
printf("数字を入力してください\n");
scanf("%d",&a);
printf("%dが代入されました",a);
printf("どうするか入力してください\n""aは+\n"
"bは-\n"
"cは*\n"
"dは/です\n");
scanf(" %c",&c);/*%dは10進法整数、%sは文字列%cは文字一つ(勝手に二つになる場合アリ)*/
/*scanf("%c",&c)だと、改行文字("dは/です\n")を読み込んでしまう
scanf(" %c",&c);で空白をいれるとOk */
printf("次の数字を入力してください\n");
scanf("%d",&b);
0718デフォルトの名無しさん
2010/06/29(火) 03:46:53case 'a':
printf("%d+%d=%d\n",a,b,a+b);
break;
case 'b':
printf("%d-%d=%d\n",a,b,a-b);
break;
case 'c':
printf("%d*%d=%d\n",a,b,a*b);
break;
case 'd':
printf("%d/%d=%f\n",a,b,(double)a/b);/*キャスト*/
break;
default:
printf("エラーです\n");
break;
}
while(!kbhit()){}/*勝手に終了させない処理*/
return 0;
}
0719デフォルトの名無しさん
2010/06/29(火) 03:48:59今猫でも分かるC(二版)で勉強中です。
次質問する時は、そのポインタって所を読み終えてからにします
0720デフォルトの名無しさん
2010/06/29(火) 04:01:230721デフォルトの名無しさん
2010/06/29(火) 04:02:220722デフォルトの名無しさん
2010/06/29(火) 04:55:49そばに立つと書いてスタンド
0723デフォルトの名無しさん
2010/06/29(火) 04:56:19int c;が入ってるなんて言ってない。
落ち着いて読むんだシンタロウ。1番目の引数だ。
0724デフォルトの名無しさん
2010/06/29(火) 07:42:40お前が落ち着け
0725デフォルトの名無しさん
2010/06/29(火) 07:59:170726デフォルトの名無しさん
2010/06/29(火) 09:28:52少しは自分で考えろよ
0727デフォルトの名無しさん
2010/06/29(火) 10:15:40C言語ってオヤジの言語だよね。なんでいまさらCなんかやろうとするのか意味不明。
せめてC++だろう。それでも不十分だけど。
0728デフォルトの名無しさん
2010/06/29(火) 10:18:12Cは組み込み、Javaはエンプラ、中小相手だとVBだと思うんだが
C++ってゲームぐらいしか使い道ないんじゃないか?
0729デフォルトの名無しさん
2010/06/29(火) 10:18:16ほどほどにできる人は道具次第
できる人は何使ってもできる
0730デフォルトの名無しさん
2010/06/29(火) 10:56:34>Cは組み込み、Javaはエンプラ、中小相手だとVBだと思うんだが
世間知らずにも程があるぞwwwww
0731デフォルトの名無しさん
2010/06/29(火) 11:06:54逆にjavaとかObjective-Cとかとっつきにくいと言われてる言語の話をなぜしないかね。
できる人はなに使ってもできるんでしょ。いまさら利用環境の少なくなってきたCでもないでしょ。
携帯だってCでプログラムしてる人はもうほとんどいないでしょ。
0732デフォルトの名無しさん
2010/06/29(火) 11:35:06関係ない言語の話はその言語のスレでしてください
0733デフォルトの名無しさん
2010/06/29(火) 11:47:41古臭いものにこだわる人間って、そうやって人の話に耳を傾けないんだよな。
0734デフォルトの名無しさん
2010/06/29(火) 12:25:32ここは古臭いものにこだわる人間の隔離スレですよ
0735デフォルトの名無しさん
2010/06/29(火) 12:26:540736デフォルトの名無しさん
2010/06/29(火) 18:03:16アセンブラやってなさそうな人だな
0737デフォルトの名無しさん
2010/06/29(火) 18:33:150738デフォルトの名無しさん
2010/06/29(火) 18:47:350739デフォルトの名無しさん
2010/06/29(火) 18:58:360740デフォルトの名無しさん
2010/06/29(火) 18:58:48.Netに移行するよりはJavaに移行した企業の方が多かったみたいだね。
それでCの存在価値が失われるわけじゃないけど。
0741デフォルトの名無しさん
2010/06/29(火) 22:31:460742デフォルトの名無しさん
2010/06/30(水) 10:05:100743デフォルトの名無しさん
2010/06/30(水) 11:14:23少なくとも、残りを取り入れ終わる頃までは、Cは使われ続けるだろうな。
http://www.nurs.or.jp/~sug/soft/super/lisp.htm#sec6
0744デフォルトの名無しさん
2010/06/30(水) 12:48:170745デフォルトの名無しさん
2010/06/30(水) 13:30:080746デフォルトの名無しさん
2010/06/30(水) 13:54:110747デフォルトの名無しさん
2010/06/30(水) 14:16:36C言語が使いこなせられるようになれば、仕事でjavaとかC++を使わざるをえなくなっても
考え方はCと似ているからすんなりうけいれられるんちゃう?
0748デフォルトの名無しさん
2010/06/30(水) 15:00:52あと、”言語”って呼び名から来る誤解もあるんじゃないか?
C言語を駆使してOSとか他言語(Java,Ruby,Pythonとか)を構成できるけど、
人間の言語だと、例えば日本語を使って英語を創り上げる、なんて出来ない。
Programming Languageの、Languageの意味は本来、”表記”だったんだが、
いつのまにか”言語”で定着しちゃったしな。
0749デフォルトの名無しさん
2010/06/30(水) 15:04:070750デフォルトの名無しさん
2010/06/30(水) 15:04:20誤解してるのは君だけだと思う
0751デフォルトの名無しさん
2010/06/30(水) 15:14:02エスペラント語とかクリンゴン語は人間の言葉が作り出したように思うが
0752デフォルトの名無しさん
2010/06/30(水) 15:21:14そのレベルの機能を直接利用せずに 言語の範囲内でやりたいことを記述できるなら
別言語へいってもさしさわりはないだろうね。
0753デフォルトの名無しさん
2010/06/30(水) 16:01:55現在のところスーパービギナーレベルのC言語知識しかありませんが
どうにか車両の群れのシミュレーションをしたいのですが。
何からどう手をつけてよいのかわかりません。
どなたかBoidアルゴリズム等のプログラミング経験ある方いたら
助言をいただけませんか?
0754デフォルトの名無しさん
2010/06/30(水) 16:17:480755デフォルトの名無しさん
2010/06/30(水) 17:01:38そのアルゴリズムを構築するのがお前の研究じゃないの?
0756デフォルトの名無しさん
2010/06/30(水) 17:25:12既にモデルができてるかどうかによって難易度が変わるね
自動車が得ることのできる情報を列挙する
方角
速度
前方の信号
前車までの距離 等
自動車が起こす事のできるアクションを列挙する
加減速
右左折 等
それぞれの自動車に与える目的地の設定とか
さらに目的地までのルート予測とか大変そうだw
碁盤の目じゃないとムリぽ
0757デフォルトの名無しさん
2010/06/30(水) 20:12:40インターフェースって自分で言ってて C スタイルが多いって何?
システムコールが C 関数のように見えた時代は後にも先にも特殊だったんだが
0758デフォルトの名無しさん
2010/06/30(水) 20:44:50> システムコールが C 関数のように見えた時代は後にも先にも特殊だったんだが
kwsk
0759デフォルトの名無しさん
2010/06/30(水) 20:51:08専門的に研究してる方なのですし、どうせ全部想定済みなんでしょうけど…
各車は当然個別に目的地をもってるわけで、状況に応じてルートを変化させる個体もあるわけで…それの計算が結構重くて大変かもしれませんよ。
単純にルート変更と言っても、(最適とまではいかなくても)まぁまぁ妥当なルートを選び出す作業を各車が行うわけで、カーナビ有り・無し、習慣優先・勘優先、いろいろな個体があります。
それだけでも専門家ですら泡吹くような厄介なプログラムになると思います…
これらが相互に影響しあうわけで、数千台レベルで動かしたら、ちょっとしたレイトレーシング並の重さになるかもしれません。
ましてや、自動車の中身は魚じゃなくて人間ですから、コンビニとかにも平気で寄りますし、事故も起こしますし、気も変わります。カオスです。…意味もなく峠をぐるぐる走りつづける個体とかw
…完成したモノを想像すると、すごく楽しそうですが、
おそらく、自動車の性能や交通ルール回りはもちろん、社会学やら心理学やら、様々な分野の要素を考慮しないと意味のあるシミュレーション結果にはならないと思いますし、
また計算量も、たとえば各車は近くの他車の状況に応じてルートを変えたり変えなかったり、また、無意味に峠をぐるぐるする個体があらわれたり、かなりカオスでおもしろそうですが
計算量も膨大になりそうな予感です。
専門家じゃないのでわかりませんが、個々の個体はそれぞれ似てるようで、実際はそれぞれ微妙に異なった振る舞いをする、これら集合をあつかう問題にこそ、オブジェクト指向が向いてるような気がします。
CよりもC++で書いた方が頓挫する可能性が低く安全かもしれません。(当初は想定外だった要素を、あとから必要になってあるグループに追加するケースが出てくるでしょうし。その場合、おそらくC++の方がマシです)
0760デフォルトの名無しさん
2010/06/30(水) 22:57:47アルゴリズム屋さんだね。
プログラミング言語をツールとして扱えると幅が広がるよ。
C++でオブジェクト指向設計して組めればかなり強い。
博士持っててアルゴリズム考えるのは立派だけど、それを実際に動かす力が乏しい人間を知ってる。
一方、実装力はあるが、アルゴリズムを考えるのは苦手な人もいる。
両方できると楽しいぞ。
0761デフォルトの名無しさん
2010/06/30(水) 22:58:46なぜそこにレスしたのかが
0762デフォルトの名無しさん
2010/06/30(水) 23:09:44禿でさえ virtual の創設をためらったんだぞ
0763デフォルトの名無しさん
2010/06/30(水) 23:19:100764デフォルトの名無しさん
2010/06/30(水) 23:35:09交差点では適当に入ってくる車と出て行く車を確率密度に沿った乱数で決定
信号のタイミング
信号の青黄赤の点灯時間や矢印信号
車線の数
進行方向毎の自動車の出現確率
右折時のパラメータ
運転者のクセ(車間距離、アクセルブレーキタイミング)
これだけ弄るものがあったら好きなだけグラフが作れる
ってか卒論でこれだけできたらすごいと思うよ
0765デフォルトの名無しさん
2010/06/30(水) 23:43:400766デフォルトの名無しさん
2010/06/30(水) 23:45:070767デフォルトの名無しさん
2010/06/30(水) 23:50:44ではなく、生徒のレベル。
0768デフォルトの名無しさん
2010/07/01(木) 02:00:370769デフォルトの名無しさん
2010/07/01(木) 02:29:06+だったら−にして
−だったら+にして返す関数を作りたいのですが
fanc(int i)
{
int a;
a=-(-1*i)/i
a=a*i;
return a;
}
この方法以外にありますか?
0770デフォルトの名無しさん
2010/07/01(木) 02:39:200771デフォルトの名無しさん
2010/07/01(木) 02:39:27{
return -i;
}
ってはなしではなく?
0772デフォルトの名無しさん
2010/07/01(木) 02:43:13せっかくなので違う例を書いてみると
int fanc(int i) {
return -1 * i;
}
0773デフォルトの名無しさん
2010/07/01(木) 02:48:44return ~((unsigned int)i-1);
}
0774デフォルトの名無しさん
2010/07/01(木) 09:30:46それにしても、fanc()って辺りが余りに情けない。
0776デフォルトの名無しさん
2010/07/01(木) 09:39:520778デフォルトの名無しさん
2010/07/01(木) 10:42:10int f(int i){return 0-i;}
0779デフォルトの名無しさん
2010/07/01(木) 10:45:00int f(int i){return -i;}
って言ってやれよwwwwww
0780デフォルトの名無しさん
2010/07/01(木) 10:49:01>>769 の関数の戻り値は引数と同じなんだよ。
どうして符号を反転して返す関数を作ってるの?
ソース読めないの?馬鹿のなの?
必要とされるのは符号を一旦変えてまた元に戻す関数なんだよ。
0781デフォルトの名無しさん
2010/07/01(木) 11:01:40ごめんなんで>>769見てその結論がでるのかわからない
0782デフォルトの名無しさん
2010/07/01(木) 11:03:00>769のfanc()の実装を見たんじゃね?
0783デフォルトの名無しさん
2010/07/01(木) 11:05:34>この方法以外にありますか?
とあるので、同じ動作をする別の方法という意味だろうね。
0784デフォルトの名無しさん
2010/07/01(木) 11:06:52そもそも前半の説明と
後半のソースに整合性がないんだよな
つまり・・・・・どういうことだってばよ・・・・・
0785デフォルトの名無しさん
2010/07/01(木) 11:07:41すべては >>770 が悪いwwww
他の人は釣られただけw
0786デフォルトの名無しさん
2010/07/01(木) 11:09:36だったら、答える前にそれを突っ込むのが筋
0787デフォルトの名無しさん
2010/07/01(木) 12:53:510788デフォルトの名無しさん
2010/07/01(木) 13:05:31いったん変えて元に戻す?馬鹿ですか?a=1;a=a*i;のどこを見ればそう解釈できるの?
0789デフォルトの名無しさん
2010/07/01(木) 13:31:34はい。ばかです。
0790デフォルトの名無しさん
2010/07/01(木) 13:35:280791デフォルトの名無しさん
2010/07/01(木) 14:41:270792デフォルトの名無しさん
2010/07/01(木) 16:40:10いや、本当に行きづまっていたので、とても参考になりました。
専門家でないのに専門家のようなレベルのアドバイスもらえて涙目です。
とりあえずマルチエージェントシステム的な考えを基に、直線や碁盤の目のような
比較的単純なモデルを想定して進めてみようかと思います。
できるだけ自分で考えてやってみたい気持ち一心もあって、
「こいつ何勘違いしてんだ」的な部分多くあったかと思いますが。。。
とにかくありがとうございました
0793デフォルトの名無しさん
2010/07/01(木) 22:50:13“本物のマクロ”でCのコード行数を半分に!
2009/09/07" http://www.atmarkit.co.jp/news/200909/07/lltv02.html
0794デフォルトの名無しさん
2010/07/02(金) 06:11:24別の言語使えばいいじゃんっていう皮肉?
0795デフォルトの名無しさん
2010/07/02(金) 07:44:180796デフォルトの名無しさん
2010/07/02(金) 08:07:43趣味なら好きにすればいいが。
0797デフォルトの名無しさん
2010/07/02(金) 08:12:24移植させる気まったくないですよねこいつ
0798デフォルトの名無しさん
2010/07/02(金) 08:28:24むしろ固定してたら移植できないだろ。
0799デフォルトの名無しさん
2010/07/02(金) 08:37:55ハードの制約とか、意味論的に統一困難なもの以外で、不統一って例えば?
0800デフォルトの名無しさん
2010/07/02(金) 12:24:41初歩的ですみません。どうしてもうまくいかないので。
0801デフォルトの名無しさん
2010/07/02(金) 12:30:520802デフォルトの名無しさん
2010/07/02(金) 12:39:31if (配列[定数] == EOF) …
0804デフォルトの名無しさん
2010/07/02(金) 13:15:000805デフォルトの名無しさん
2010/07/02(金) 13:22:33長くないなら、プログラムをここにコピペしてみたらどうかな
何らかの理由で、配列[定数]の中身が-1(EOF)じゃないだろうから
0806デフォルトの名無しさん
2010/07/02(金) 21:22:32http://www1.axfc.net/uploader/File/so/46695
pass:prog
遅くなりました。
0808デフォルトの名無しさん
2010/07/03(土) 00:14:260809デフォルトの名無しさん
2010/07/03(土) 00:26:24プログレスバーを表示させたいんだが、以下のやり方では
プログレスバーが表示された状態で処理が止まってしまう。
ファイルの処理をしながらダイアログを更新するにはスレッド処理はダメ?
main {
// プログレスバー表示スレッド作成
A = (HANDLE)_beginthreadex(NULL,0,ProgressBarThread,hFrame,0,0);
// csvファイル読込みスレッド作成
B = (HANDLE)_beginthreadex(NULL,0,FileOpenThread,hFrame,0,0);
}
ProgressBarThread {
// プログレスバー表示イベントの作成
CreateEvent();
// プログレスバーダイアログ作成
DialogBoxParam(); ←ここで止まってしまう。。。
}
FileOpenThread {
// ファイル読込み、ソートの間にプログレスバーダイアログをUpdateWindowする
UpdateWindow(hProgress);
}
0810デフォルトの名無しさん
2010/07/03(土) 00:52:23モーダルじゃなくてモードレスダイアログ作れ
0811デフォルトの名無しさん
2010/07/03(土) 01:30:37>配列[定数]がEOFの場合
>scanf("%f",&kaz[n])!=EOF
1.プログラム中でkaz[n] = EOF;とするか、もしくはコマンドプロンプトで-1を代入するしか方法はない
2.コマンドプロンプトで、Ctrl+Z 若しくは EOFタイプ後、Enterキーを押下するとscanfの返り値
として-1(EOF)が返されるが、この場合kaz[n]に値が代入されるわけではない
よって>>802は1.の場合で有効
0812デフォルトの名無しさん
2010/07/03(土) 01:40:54プログラムの最後の動作が、どのようになればよいか教えてもらえれば
そのように変更しますよ。
300個すべてとあるが、float kaz[301]; なのでkaz[0]〜kaz[300]は、計301個ある
また、299+EOFとは具体的にどういった操作ですか?
例)こんな感じで教えてください
1.n=299の時に、コマンドプロンプト上で数字を入力しEnterキー押下
2.n=300の時に、コマンドプロンプト上でEOFを入力しEnterキー押下
0813806 ◆UTq41fopXE
2010/07/03(土) 08:54:14そうです。確認しました。申し訳ございません。
今作っている本プログラムとは数値等を変えているので。
301個すべて数値→OK(n=301)
n(n<300)+EOF→nに入力回数が反映
300+EOF→n=301となります。
ですから、2に該当するかと。
私としては、いかなる場合(300+EOF)でも、nが「入力回数」になってもらえれば良いのですが。
よろしくお願いします。
>>811
最初にEOFに相当する何かを定めないといけないのですね。
参考にさせていただきます。
0814デフォルトの名無しさん
2010/07/03(土) 09:56:40if(n==300){s+=kaz[300];n++;}←これを消して、whileの中身を↓に変える
while(n<301 && scanf("%f",&kaz[n])!=EOF )
0815デフォルトの名無しさん
2010/07/03(土) 13:09:52クズみたいな教育機関しか日本にはない。
海外に行けばいいとか、全く見当違いだね。
人間は環境の中で育つものだ。
クズみたいな教育機関しかない日本では周りにクズしかいないんだよ。
クズの中で育った俺もクズなのさ。
したがって大学に上がろうという段階では既にクズが決定しているから海外なんて行けるはずも無いわけさ。
0816デフォルトの名無しさん
2010/07/03(土) 15:39:52int main(void)
{
int n;
char *a[]={"クズ","ホモ","ゆとり","@ピザ","イケメン"};
printf("1〜5までで好きな数字を入れてください。:");
scanf("%d",&n);
if (n<1 || n>5){printf("最初からやり直してください。\n");return 0;}
printf("俺はなんて不幸な時代に生まれたんだろう。\n"
"%sみたいな教育機関しか日本にはない。\n"
"海外に行けばいいとか、全く見当違いだね。\n"
"人間は環境の中で育つものだ。\n"
"%sみたいな教育機関しかない日本では周りに%sしかいないんだよ。\n"
"%sの中で育った俺も%sなのさ。\n"
"したがって大学に上がろうという段階では既に%sが決定しているから海外なんて行けるはずも無いわけさ。"
"\n",a[n-1],a[n-1],a[n-1],a[n-1],a[n-1],a[n-1]);
return 0;
}
0817デフォルトの名無しさん
2010/07/03(土) 18:55:26周りにクズしか居ないというのには同意だが、
残念ながら俺はクズではない。
なぜなら、俺だからだ。
0818デフォルトの名無しさん
2010/07/03(土) 18:56:510820デフォルトの名無しさん
2010/07/03(土) 23:10:59解決しました
0821デフォルトの名無しさん
2010/07/03(土) 23:51:57お礼は?(-_-;)
0822デフォルトの名無しさん
2010/07/03(土) 23:57:51まあまあ
0823デフォルトの名無しさん
2010/07/04(日) 00:42:25どう見ても精子です。
本当にありがとうございました。
0824デフォルトの名無しさん
2010/07/04(日) 11:52:31n / 2とするより、
n * 0.5とする方が速いんですかね?
0825デフォルトの名無しさん
2010/07/04(日) 11:54:38そうだよ
0826デフォルトの名無しさん
2010/07/04(日) 12:02:400827デフォルトの名無しさん
2010/07/04(日) 12:03:200828デフォルトの名無しさん
2010/07/04(日) 12:06:27元々が浮動小数点数なら *0.5 の方が早いけど
整数だと実測してみたほうがいい
0829デフォルトの名無しさん
2010/07/04(日) 12:10:19ふと疑問に思ったんです。
0830デフォルトの名無しさん
2010/07/04(日) 14:51:31nが浮動小数だとすると、速さ変わらないと思う
それに割り算が遅い、というのは昔の(16ビットとかの)CPUの話
0831デフォルトの名無しさん
2010/07/04(日) 15:06:400832デフォルトの名無しさん
2010/07/04(日) 15:17:12当時の16ビットCPUも今の64ビットCPUも、実質は8ビットCPUだろ。
たまには1バイト12ビットくらいのCPU作れよ。
オクタル4桁でキリが良いから表記しやすいし。
ファイルパーミションも1バイトに納まるから便利だしな。
0833デフォルトの名無しさん
2010/07/04(日) 15:34:53アセンブラでプログラミングした経験ある?
ネイティブアプリをバイナリエディタでハックしたことある?
0834デフォルトの名無しさん
2010/07/04(日) 15:38:34あるよ。
0835デフォルトの名無しさん
2010/07/04(日) 15:38:430836デフォルトの名無しさん
2010/07/04(日) 15:42:430837デフォルトの名無しさん
2010/07/04(日) 15:45:348bitCPUと64bitCPUは全く同じように扱えましたか?
0838デフォルトの名無しさん
2010/07/04(日) 16:00:29Z80 と 6502 でも全然違うしw
0839デフォルトの名無しさん
2010/07/04(日) 16:23:120840デフォルトの名無しさん
2010/07/04(日) 16:38:280841デフォルトの名無しさん
2010/07/04(日) 16:40:29アドレスの振り方もそのように変えちゃったらいいのにな。
0842デフォルトの名無しさん
2010/07/04(日) 16:44:370843デフォルトの名無しさん
2010/07/04(日) 18:49:160844デフォルトの名無しさん
2010/07/04(日) 20:03:250845デフォルトの名無しさん
2010/07/04(日) 20:47:55悪かったよ。謝るから、もうこの話題は終わりにしようぜw
0846デフォルトの名無しさん
2010/07/04(日) 23:04:420847デフォルトの名無しさん
2010/07/05(月) 21:02:17CPUの仕様見てみろ
割り算はレイテンシもスループットも桁が違う
0848デフォルトの名無しさん
2010/07/06(火) 01:32:49掛け算は回路を工夫すれば2、3クロックで解くことも可能そうな気がするけど、
割り算は、どうがんばっても2進桁数+2、3クロック程度は掛かりそうな気がする。
パイプラインで流せば、結果的に1割り算1クロックとみなしても妥当…って言い方は可能でしょうけど、
単体で、1個だけを、割り算したときと、掛け算したときとでくらべたら、どうかんがえても掛け算並みのクロックで割り算するのは、
そんなアルゴリズム、ちょっとありえないと思う。もしあるなら教えてください。煽りではなく純粋に知りたいです興味あります。
0849デフォルトの名無しさん
2010/07/06(火) 02:01:480850デフォルトの名無しさん
2010/07/06(火) 02:07:330851デフォルトの名無しさん
2010/07/06(火) 03:19:080852デフォルトの名無しさん
2010/07/06(火) 03:20:170853デフォルトの名無しさん
2010/07/06(火) 03:38:390854デフォルトの名無しさん
2010/07/06(火) 07:35:180855デフォルトの名無しさん
2010/07/06(火) 08:09:370856デフォルトの名無しさん
2010/07/06(火) 11:10:080857デフォルトの名無しさん
2010/07/06(火) 14:31:560858デフォルトの名無しさん
2010/07/06(火) 19:46:180859デフォルトの名無しさん
2010/07/06(火) 20:12:540860デフォルトの名無しさん
2010/07/06(火) 20:16:00出来ました!ありがとうございます!
0861デフォルトの名無しさん
2010/07/06(火) 20:27:070862デフォルトの名無しさん
2010/07/06(火) 21:37:430863デフォルトの名無しさん
2010/07/06(火) 21:42:49プログラム問題サイトとかで速度を競う際に、
割り算は確実に速度に響くぜ
0864デフォルトの名無しさん
2010/07/07(水) 10:03:570865デフォルトの名無しさん
2010/07/07(水) 13:06:28ふつうは無い。実行時パフォーマンスも悪くなりそうだし。
0866デフォルトの名無しさん
2010/07/07(水) 22:46:060867デフォルトの名無しさん
2010/07/07(水) 22:47:350868デフォルトの名無しさん
2010/07/07(水) 22:56:200869デフォルトの名無しさん
2010/07/07(水) 23:00:35sqrtはどうやって計算してるんだ?
0870デフォルトの名無しさん
2010/07/07(水) 23:11:460871デフォルトの名無しさん
2010/07/07(水) 23:20:40#include<stdio.h>
#include<math.h>
int main(void){
double x,y;
x=sqrt(5);
y=5^(1/2);
printf("x=%f,y=%f\n",x,y);
getchar();
return 0;
}
結果
x=2.236068,y=5,000000
ならなかったけど、やり方間違えてるかな
0872デフォルトの名無しさん
2010/07/07(水) 23:22:26xor じゃん
0873デフォルトの名無しさん
2010/07/07(水) 23:24:390874デフォルトの名無しさん
2010/07/07(水) 23:25:160875デフォルトの名無しさん
2010/07/07(水) 23:27:010876デフォルトの名無しさん
2010/07/07(水) 23:27:20排他的理論和?
0877デフォルトの名無しさん
2010/07/07(水) 23:33:080878デフォルトの名無しさん
2010/07/07(水) 23:33:360879デフォルトの名無しさん
2010/07/07(水) 23:37:070880デフォルトの名無しさん
2010/07/07(水) 23:37:530881デフォルトの名無しさん
2010/07/07(水) 23:39:190882デフォルトの名無しさん
2010/07/07(水) 23:40:470883デフォルトの名無しさん
2010/07/07(水) 23:41:02インクルードしてるmath.hの中身を確認して来いよ
0884デフォルトの名無しさん
2010/07/07(水) 23:42:420885デフォルトの名無しさん
2010/07/07(水) 23:45:340886デフォルトの名無しさん
2010/07/07(水) 23:45:35無理じゃね?
0887デフォルトの名無しさん
2010/07/07(水) 23:48:49今、プログラミング言語の世界では、仕事において、何が主流ですか?
C言語は人気ありますか?
0888デフォルトの名無しさん
2010/07/07(水) 23:53:120889デフォルトの名無しさん
2010/07/07(水) 23:56:020890デフォルトの名無しさん
2010/07/07(水) 23:57:11引数に負数とか0付近の数値を渡しちゃダメ
数値誤差の範囲が狭いから大きすぎる値もダメ
#include<stdio.h>
double mysqrt(double y)
{
double d, d_abs, x=1.0;
while(1)
{
d=y-x*x;
d_abs=(d>0)?d:-d;
if(d_abs<=1.0e-10) break;
x+=d/(2*x);
}
return x;
}
int main(void)
{
printf("%f\n", mysqrt(5));
return 0;
}
0891デフォルトの名無しさん
2010/07/07(水) 23:57:43なるほど。貴重な情報ありがとうございます。
0892デフォルトの名無しさん
2010/07/07(水) 23:59:36VBA人口が一番多いかも
0893デフォルトの名無しさん
2010/07/08(木) 00:03:32理想としては配列のように関数をまとめたいです。
0894デフォルトの名無しさん
2010/07/08(木) 00:05:360895デフォルトの名無しさん
2010/07/08(木) 00:08:01#include<stdio.h>
void hoge(void){
printf("hoge\n");
}
void huga(void){
printf("huga\n");
}
void moga(void){
printf("moga\n");
}
int main(void){
void (*foo[])(void)={hoge, huga, moga};
int i;
for(i=0;i<3;i++) foo[i]();
return 0;
}
0896デフォルトの名無しさん
2010/07/08(木) 00:21:480897デフォルトの名無しさん
2010/07/08(木) 00:23:150898デフォルトの名無しさん
2010/07/08(木) 00:24:50なるほど、関数にもポインタがあるんですね。
C++も並行して勉強中なのでそちらでも聞いてみます。
ありがとうございました。
0899デフォルトの名無しさん
2010/07/08(木) 00:37:37ありがとうございます
0900デフォルトの名無しさん
2010/07/08(木) 00:56:400901デフォルトの名無しさん
2010/07/08(木) 01:03:220902デフォルトの名無しさん
2010/07/08(木) 01:11:430903デフォルトの名無しさん
2010/07/08(木) 01:13:180904デフォルトの名無しさん
2010/07/08(木) 01:14:50大卒にもこんなんがいるのか?本当に?
0905デフォルトの名無しさん
2010/07/08(木) 01:16:420906デフォルトの名無しさん
2010/07/08(木) 01:26:01アルゴリズムの本一冊読んだら大体出てくるんじゃね
0907デフォルトの名無しさん
2010/07/08(木) 01:34:350908デフォルトの名無しさん
2010/07/08(木) 01:43:35単に知っているか知っていないか、
自分の道具箱に入っているかどうかの問題
ニュートン法は有名な手法だから、知っている人も多い
独力でこの手のアルゴリズムをひねり出すのは、
無理ではないと思うが、骨が折れる
興味があるなら数値計算の本をかじっておけばいい
0909デフォルトの名無しさん
2010/07/08(木) 02:11:50主流:javascript, php, java, Cなど
0910デフォルトの名無しさん
2010/07/08(木) 02:28:36ちなみにsinged int が2byteだとしてでお願いします。
0911デフォルトの名無しさん
2010/07/08(木) 02:34:310912910
2010/07/08(木) 02:37:020913デフォルトの名無しさん
2010/07/08(木) 02:40:350914デフォルトの名無しさん
2010/07/08(木) 02:41:130915デフォルトの名無しさん
2010/07/08(木) 02:43:300916デフォルトの名無しさん
2010/07/08(木) 03:32:270917デフォルトの名無しさん
2010/07/08(木) 04:03:391 バイトのビット数も指定しないと確定しないだろ。
あと、負の数の表現方法もだな。
1 の補数なのか 2 の補数なのか。
0918デフォルトの名無しさん
2010/07/08(木) 04:10:390919デフォルトの名無しさん
2010/07/08(木) 10:50:00投資と考えるなら、マスターにかかる年数と、その後の数年間は自分で活用できるものかどうかを予測したほうがいい。
0920デフォルトの名無しさん
2010/07/08(木) 11:10:54-1
0921デフォルトの名無しさん
2010/07/08(木) 11:17:44kwsk
0922デフォルトの名無しさん
2010/07/08(木) 11:20:470923デフォルトの名無しさん
2010/07/08(木) 12:38:590924デフォルトの名無しさん
2010/07/08(木) 12:52:530925デフォルトの名無しさん
2010/07/08(木) 14:15:58無理
無限小数は無限にあるので、それら全ての集合もまた無限にある
0926デフォルトの名無しさん
2010/07/08(木) 14:20:30内部形式で扱える桁数は有限
もうちょっとメモリが安くなったら平方根や三角関数あたりは全データをテーブル化するようになるだろうな
0927デフォルトの名無しさん
2010/07/08(木) 15:29:57全データってw
どのくらいになるか試算してみた?
0928デフォルトの名無しさん
2010/07/08(木) 15:31:190929デフォルトの名無しさん
2010/07/08(木) 15:36:528byte の double なら 4G 通りしか無いから、
32GB のメモリがあれば良いことになる。
0930デフォルトの名無しさん
2010/07/08(木) 15:43:51もう一度計算しなおしてくれ
0931デフォルトの名無しさん
2010/07/08(木) 15:48:29ttp://download.intel.com/jp/developer/jpdoc/IA32_Arh_Dev_Man_Vol1_Online_i.pdf
単純に 必要bit数 * 値を詰むだけの領域 だけメモリがあれば足りる?のか?
所々 QNAN 等の不定値を指すビットパターンもありうるわけだけど。 少なくなる方向だしなぁ
0932デフォルトの名無しさん
2010/07/08(木) 15:58:580933デフォルトの名無しさん
2010/07/08(木) 16:20:32計算するにしてもファイルから読むにしても
0934デフォルトの名無しさん
2010/07/08(木) 16:24:420935デフォルトの名無しさん
2010/07/08(木) 16:25:360936デフォルトの名無しさん
2010/07/08(木) 16:28:47>>929 が違うじゃねーかってこと
0937デフォルトの名無しさん
2010/07/08(木) 16:36:35ROMっていうかCPUの中の話だろ。
0938デフォルトの名無しさん
2010/07/08(木) 16:42:10-1
0939デフォルトの名無しさん
2010/07/08(木) 17:13:29kwsk
0940デフォルトの名無しさん
2010/07/08(木) 17:16:240941デフォルトの名無しさん
2010/07/08(木) 17:38:180942デフォルトの名無しさん
2010/07/08(木) 17:39:300943デフォルトの名無しさん
2010/07/08(木) 17:45:09>>932 も違うだろカスが。
0944デフォルトの名無しさん
2010/07/08(木) 17:48:400945デフォルトの名無しさん
2010/07/08(木) 19:07:050946デフォルトの名無しさん
2010/07/08(木) 19:08:53検索サイトで検索すれば教えてくれますよ
0947デフォルトの名無しさん
2010/07/08(木) 19:51:57フリーならeclipse、有料ならvisual studio
0948デフォルトの名無しさん
2010/07/08(木) 20:04:43貴重な情報ありがとうございました
NetBeansに決めました
0949デフォルトの名無しさん
2010/07/08(木) 20:55:510950デフォルトの名無しさん
2010/07/08(木) 20:59:16つまんねーよカスが死ね
0952デフォルトの名無しさん
2010/07/08(木) 21:54:400953デフォルトの名無しさん
2010/07/08(木) 23:26:240954デフォルトの名無しさん
2010/07/08(木) 23:32:120955デフォルトの名無しさん
2010/07/08(木) 23:42:090956デフォルトの名無しさん
2010/07/08(木) 23:44:350957デフォルトの名無しさん
2010/07/09(金) 00:21:430958デフォルトの名無しさん
2010/07/09(金) 02:45:500959デフォルトの名無しさん
2010/07/09(金) 06:51:57Turbo C++ 1.01
0960デフォルトの名無しさん
2010/07/09(金) 09:19:44ターボ、ボーランド以外でお願いします。
0961デフォルトの名無しさん
2010/07/09(金) 09:57:200962デフォルトの名無しさん
2010/07/09(金) 12:40:07emacs
0963デフォルトの名無しさん
2010/07/09(金) 15:45:310964デフォルトの名無しさん
2010/07/09(金) 22:29:111,2,3!?4,5,6!?7,8,9!?10,11,12,13!?
オモロー!
こんなプログラムはどうやって作ればいいんですか?古くてごめんなさい。
0965964
2010/07/09(金) 22:29:530966デフォルトの名無しさん
2010/07/09(金) 22:35:410967デフォルトの名無しさん
2010/07/09(金) 23:43:15ポインタ変数int *paと配列int a[5]ってのを宣言した時、
pa = a;
printf("%d",*pa);
と記述したら、%dにa[0]の値が出るのは分かりました。
でもポインタ変数int *pbと多次元配列b[3][4]の場合、
pb = b;
って記述しようとするとエラーになります。
何故でしょうか?
最終的にpb+1で4バイトずつアドレスをずらして多次元配列がどういった順序で記録されているか知るプログラムを作りたいです。
0968デフォルトの名無しさん
2010/07/09(金) 23:52:380969デフォルトの名無しさん
2010/07/10(土) 00:10:00馬鹿なの?死ぬの?
と、30秒くらい自問自答しましたが、
新しい技術を使おうとしたからしょうがないと結論づけました。
感謝です。
まだ何かがおかしいけど
もうしばらく自力でやってみます。
0970デフォルトの名無しさん
2010/07/10(土) 00:46:550971デフォルトの名無しさん
2010/07/10(土) 00:57:100972デフォルトの名無しさん
2010/07/10(土) 01:09:55int **pb
0973デフォルトの名無しさん
2010/07/10(土) 01:28:33{
int* pa;
int a[3][4] = {{1,2,3,4}, {5,6,7,8}, {9,10,11,12}};
pa = *a;
printf("a:%p, *a:%p, pa:%p, *pa:%d\n", a, *a, pa, *pa);
return 0;
}
$ ./a.exe
a:0x22cd00, *a:0x22cd00, pa:0x22cd00, *pa:1
なんか分かんなくなってきたぞ
0974名無しさん@そうだ選挙に行こう
2010/07/10(土) 08:01:510975名無しさん@そうだ選挙に行こう
2010/07/10(土) 08:11:00できるだけ一つの関数の長さを短くしようとしたら関数の数がけっこう増えてしまった上に
複雑な感じ(main関数のための関数のための関数のための関数など)になってしまったんだが。
今後のために聴きたいんだが、一つの関数のプログラムの理想の長さってどれくらい?
ちなみに今回書いたのは400行のプログラムに対して15の関数を使ってるんだが・・・
0976名無しさん@そうだ選挙に行こう
2010/07/10(土) 08:20:42基本的にスクロール無しで一画面で表示しきれる程度が最大行数の目安らしいよ
あくまで目安だから分かりにくくしてまで無理してわける必要は無い
0977名無しさん@そうだ選挙に行こう
2010/07/10(土) 08:39:20ありがとです
今回のは大体スクロールなしでおさまってるから安心した。
一応今回は関数は必要な部分だけ分けたつもりだから、まぁ大丈夫でしょう・・
0978TreeBoa
2010/07/10(土) 08:55:15Objective-Cでもやれば?^^b
C言語wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
(笑)
0979名無しさん@そうだ選挙に行こう
2010/07/10(土) 08:59:480980名無しさん@そうだ選挙に行こう
2010/07/10(土) 09:25:100981名無しさん@そうだ選挙に行こう
2010/07/10(土) 09:34:48基本を知らないプログラマーなんて存在そのものが恥ずかしいだけだぜ?
いいなれば、何かを組み立てるのに木材を自分で適当な形に加工できる職人と
加工された木材をただネジなどで組み立てるだけの違いはある。
まぁ標準ライブラリも充実して、扱いも楽なプログラミングでもして満足してなさいってこった。
自分で適当に数式も組み立てられないようじゃ、ねぇ。
数学を学ぶ事も重要さ。
0982名無しさん@そうだ選挙に行こう
2010/07/10(土) 09:44:22あったらやりたいんだが
0983TreeBoa
2010/07/10(土) 09:48:51^^b
0984名無しさん@そうだ選挙に行こう
2010/07/10(土) 10:45:56くらいなもんだよ
0985名無しさん@そうだ選挙に行こう
2010/07/10(土) 11:10:25^^b
0986名無しさん@そうだ選挙に行こう
2010/07/10(土) 11:12:14ハーローキティかよw
0987名無しさん@そうだ選挙に行こう
2010/07/10(土) 14:29:06開平って知ってるか?
0988名無しさん@そうだ選挙に行こう
2010/07/10(土) 15:25:39基本的に関数は
・ほとんど同じことを2度以上書かない(再利用目的)
・データと処理が完全に分離できる場合(保守性アップ目的)
を念頭に置いとけば自然と1画面に収まるくらいになるよ
0989名無しさん@そうだ選挙に行こう
2010/07/10(土) 15:28:510990名無しさん@そうだ選挙に行こう
2010/07/10(土) 15:38:110991名無しさん@そうだ選挙に行こう
2010/07/10(土) 15:49:02言ってる人がいるけど、本当にそんな基準でやってたのかね。
「適当に50行くらい」とか言っとけばいいのに、スクロールしないで見られる
からバグが少なくなるとか理由付けするとうさんくなる。
0992名無しさん@そうだ選挙に行こう
2010/07/10(土) 15:59:13調査した結果がいくつか掲載されてるけど、行数がすくないほど
バグが少ないってのは否定されてるね。
ただ200行をこえるとやばいって書いてある。
よくネットなんかで言われる行数よりだいぶ大きい。
0993名無しさん@そうだ選挙に行こう
2010/07/10(土) 16:06:360994名無しさん@そうだ選挙に行こう
2010/07/10(土) 16:06:500995名無しさん@そうだ選挙に行こう
2010/07/10(土) 16:44:500996名無しさん@そうだ選挙に行こう
2010/07/10(土) 16:51:120997名無しさん@そうだ選挙に行こう
2010/07/10(土) 16:56:510998名無しさん@そうだ選挙に行こう
2010/07/10(土) 19:58:22C言語なら俺に聞け(入門編)Part 67
http://pc12.2ch.net/test/read.cgi/tech/1278759538/
1000名無しさん@そうだ選挙に行こう
2010/07/10(土) 21:10:5410011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。