C言語なら俺に聞け(入門編)Part 79
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/02/15(火) 09:07:06★前スレ
C言語なら俺に聞け(入門編)Part 78
http://hibari.2ch.net/test/read.cgi/tech/1296984829/
★過去スレ
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++の宿題片付けます 146代目
http://hibari.2ch.net/test/read.cgi/tech/1296387672/
★C++言語もOK、ガンガン質問してください。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0002デフォルトの名無しさん
2011/02/15(火) 10:38:46勝手にテンプレ変えんなクソったれが
C++はスレ違いだ
0003デフォルトの名無しさん
2011/02/15(火) 12:02:31#include <stdio.h>
main()
{
int i,j;
i = 3; j = 4;
i = i+ +j;
printf("%d\n\r",i);
}
とした場合、 + が二つあっても,あいだにスペースやtabなどのセパレータがあれば、
warningもなく、きちんと動作します。
i = i + j;
とした場合と同じになります。
もちろん、
i = i++j;
とした場合はエラーとなります。
10年以上cをいじってて、はじめて気が付きました。
gccの4.3.2でテストしました。gcc以外に組込系の環境がいくつかあるのですが、
どれもも同じ動作でした.。
上記の処理は、言語仕様としてはどのようになっているのでしょうか?
0004デフォルトの名無しさん
2011/02/15(火) 12:11:59トークンに分割する際は最も長いシーケンスを採用することになっています
つまり + よりも ++ の方が長いので、+ がいくつか連続していればそれは ++ というトークンとして切りだされます
トークンに分割した後に、そのプログラムの構文を解釈します
例えば x+++++y は x ++ ++ + y と分割されコンパイルエラーになるという例が仕様書にも記載されています
0005デフォルトの名無しさん
2011/02/15(火) 12:14:52i=i+ +j;
の場合、どう処理されているのかが知りたいんです。
0006デフォルトの名無しさん
2011/02/15(火) 12:22:11+j というのは単項演算子の + が j にくっついたものです
負の値を表すのに -j などと書けるように正の値をわざわざ + を付けて +j などと書いてもよいです
0007デフォルトの名無しさん
2011/02/15(火) 12:30:49加算演算子でなくて、単項演算子となるわけですね。
実際のコードでは、数行にわたる計算式で、+の後ろに関数やらマクロやら
あったので、発見が遅れたので、バグとして計上するかどうかに悩んでたのでした。
コンパイルされたアセンブラコードとしては問題なかったのですが。
ありがとうございました。
0008デフォルトの名無しさん
2011/02/15(火) 18:02:00そんな話は聞いたことないけどしたいならそうすればいいんじゃない?
それより、 i * 10 + 9 + ( i == 9 ) は意図したとおりに動かないね。
920 :デフォルトの名無しさん:2011/02/06(日) 17:34:11
問題ないように思える人はもう一度Cの規格票をよく読むんだ^^
923 :デフォルトの名無しさん:2011/02/06(日) 17:38:32
…というのも不親切なので答えをいうと
i == 9の部分はtrueの時1になることを想定しているけど
(90-100の階級幅だけ11あるので、ここだけ特別処理にしている)
Cの規格上はtrueは0以外の整数であればなんでもいいことになっているので
実装にっては「90-100」のような表示にならない可能性があるってことなのよ^^;
ここは
printf( "%d-%d %d人\n", i * 10, i == 9 ? 100 : i * 10 + 9, cv[ i ] );
のようにすべきでした。
924 :デフォルトの名無しさん:2011/02/06(日) 17:41:11
って、答えを書いているうちに即レスするんじゃない貴様ら^^
ちなみに、この「trueは0以外の整数」というのは
Cではけっこう重要な落とし穴なので初学者は覚えておくといいよ^^
929 :デフォルトの名無しさん:2011/02/06(日) 17:44:46
あれ?そうだっけ?すまんすまん^^ワラ
935 :デフォルトの名無しさん:2011/02/06(日) 17:49:37
こうして人は成長していくのであった^^;
0009デフォルトの名無しさん
2011/02/15(火) 18:05:28>>654
その 6.5.6 って意味がよく判らん記述だなぁ、解りやすく解説できる?
そもオーバーフローとは加算・乗算によって桁あふれを起こす場合だろ
減算によって引き起こされるのはアンダーフローって呼ぶのでは?
0010デフォルトの名無しさん
2011/02/15(火) 18:09:59>>561, >>564
マスターのレベルにもよるよね。
普通に配列使うだけなら、他の言語知ってりゃできて当然。
char *x;
char y
char a[] = "012345678";
*x = a - 1;
y = x[2];
で、x に何が入るかまでわかってるなら結構すごいと思う。
0011デフォルトの名無しさん
2011/02/15(火) 18:23:00printf("%d\n\r",i); // mac から windows の改行コードってネタ?
0012デフォルトの名無しさん
2011/02/15(火) 18:27:24Part77のコピペか
突っ込みも一緒にコピペしないと分かりにくいんじゃね?
0013デフォルトの名無しさん
2011/02/15(火) 18:42:10ひどいじゃなイカもコピペすれ
0014デフォルトの名無しさん
2011/02/15(火) 19:04:11おまえら、おもしろいおもちゃを手にいれたみたいに。ひどいじゃなイカ^^;
0015Perl忍者 ◆M5ZWRnXOj6
2011/02/15(火) 21:05:45俺「2chでC言語なら俺に聞けっていうスレをはじめました あれぼくです」
みたいに おーすげえっていわれるけど
0016デフォルトの名無しさん
2011/02/15(火) 21:08:000017デフォルトの名無しさん
2011/02/15(火) 21:19:070018デフォルトの名無しさん
2011/02/15(火) 21:46:230019デフォルトの名無しさん
2011/02/15(火) 22:16:30250 名前: デフォルトの名無しさん [sage] 投稿日: 2011/02/09(水) 01:01:41
void mem_cpy(void *dst,void *src,u_int size){
char *p1 = *dst;
char *p2 = *src;
while(size--){
*p1** = *p2++;
}
}
基本的なソースはこういう形として,
こういう形で,エンディアンの問題を回避する方法ってある?
*p1** = *p2++;
これ、どんな動作なの?
0020デフォルトの名無しさん
2011/02/15(火) 22:20:490021デフォルトの名無しさん
2011/02/15(火) 22:26:330022デフォルトの名無しさん
2011/02/15(火) 22:34:58うそつかない
0023デフォルトの名無しさん
2011/02/15(火) 22:53:52C言語でないものはスレ違い
0024デフォルトの名無しさん
2011/02/15(火) 23:19:45for(i=0;i<N=100;i++){
for(j=0;j<N=100;j++){
scanf("%d",&matrix[i][j]);
}
}
このような手順で行列を作成した場合例えばi=j=4となる
i行j列の成分を除いた99*99の行列を作成するにはどう記述すべきですか?
0025デフォルトの名無しさん
2011/02/15(火) 23:27:45まず i<N=100 や j<N=100 がコンパイル通らないけど…
それから、i=j=4となるi行j列要素を除くと99*99行列じゃなくて100*100-1行列じゃね?
0026デフォルトの名無しさん
2011/02/15(火) 23:40:280027デフォルトの名無しさん
2011/02/15(火) 23:44:59すいません書き方が酷かった
i=4またはj=4となるような行と列除くという意味です
あと省略しましたがNもscanfで入力させたいです
0028デフォルトの名無しさん
2011/02/15(火) 23:45:51その通り、i=j=4となるi行j列要素を除く100*100-1行列です
0029デフォルトの名無しさん
2011/02/15(火) 23:48:37i=5,j=5のときはmatrix[4][4]?
それともmatrix[5][5]?
0030デフォルトの名無しさん
2011/02/15(火) 23:52:40意味が分からん…
0031デフォルトの名無しさん
2011/02/15(火) 23:53:20003229
2011/02/15(火) 23:56:11for(i=0;i<N=100;i++){ if(i==4) continue;
for(j=0;j<N=100;j++){ if(j==4) continue;
scanf("%d",&matrix[i][j]);
}
}
後者なら何をしたいのか分からないが
for(i=0;i<N=100;i++){
for(j=0;j<N=100;j++){
if(i!=4 && j!=4)
scanf("%d",&matrix[i][j]);
}
}
0033デフォルトの名無しさん
2011/02/15(火) 23:57:39scanfで読み込んだ行列に対して、指定した行と列を除く話だと思うよ
0034Perl忍者 ◆M5ZWRnXOj6
2011/02/15(火) 23:59:23Cのコードが凄くカスにみえんだよね
はぁ・・・どうしよう 嫌味に聞こえたらごめんね
0035Perl忍者 ◆M5ZWRnXOj6
2011/02/16(水) 00:00:35ユーザー多いから^−^;
俺TUEEEEEEEEEEEEEEEEEEEEE!!
できないよね^^; 馬鹿だね君たちも^^;
^−^;
0036デフォルトの名無しさん
2011/02/16(水) 00:05:03100*100-1行列だとしてさ、「除く」って具体的にどういう事?
100*100-1要素の2次元配列を作りたい、それとも100*100要素の2次元配列で
[4][4]には代入しない、のどっち?
0037デフォルトの名無しさん
2011/02/16(水) 00:05:43もっとやれ
0038デフォルトの名無しさん
2011/02/16(水) 00:08:060039デフォルトの名無しさん
2011/02/16(水) 00:08:380040デフォルトの名無しさん
2011/02/16(水) 00:11:590041C忍者 ◆Iw4kwU1lPo
2011/02/16(水) 00:13:030042Python忍者 ◆/vgV4RIG3g
2011/02/16(水) 00:20:260043舐め忍者 ◆gHyRb0WDMU
2011/02/16(水) 00:23:230044PHP忍者 ◆46cuXalB7s
2011/02/16(水) 00:24:490045デフォルトの名無しさん
2011/02/16(水) 00:25:530046デフォルトの名無しさん
2011/02/16(水) 00:27:22,.__y⌒'ー---┐ ,.____ _へ、_、__,.ヘ、___
/ \ , '´ `丶、 r´
} ( 聞 ど l / l _, -―― - ヽ、┌´ ナ丶
f´ ) こ う ヽ n⌒l/ l ,. .´: : : : ハ: : : : :`.ヽ'ヽ ├┬゛ tナ
l ( え も } l |l |n l / : :/ j:/ーヘl: : :|: : : : | }. ノ /
{ ) ん 〉 | { j」_l /:l :/ |:/`}ノ!.:/ { ヽ / /へノ
} ( で { _j /ヘ/: :l ミミ l/} 〈 ノ -‐ァ、、
. ) ! ゲ (: :´メ、_,.メ、|: : | , , ミミ./ :l . }. ┌─┐ (,__
└-、 ソ ,/ ヽ : : : : 丿」: : |、 /`¬ , , |: :| ) ┌┘
ゝ 、_,,,,,,,... -ゝ/ ̄/´,.__.|: : | >-| /_,ノ. : :\__l\ ・
. ,/ / ̄ヽ l!: : :ヽ、l 丶イ |.|ト、:.\: : : : : : : :>-、-、 __,,.、
( ヾ \:_: :\__ ,‐//.| `l:\ ̄ ̄l/
 ̄  ̄ ̄ ̄ヽr―ァ' \: : /、 // }/: : し\
/: :,L,. く ___/::/ \'/ { ヽ┬┐/
/: :/ /: ヾ¬ー'^ヽ ヽ 丶__ _,-、
__/: :/ /: :/ \ {、´ __ _l::::l⌒\
|: : : : / |: : i /:\ ` >'´ \`-´^ヽJ
/: : | ̄ |: : レ /: :// \
0047デフォルトの名無しさん
2011/02/16(水) 00:28:010048デフォルトの名無しさん
2011/02/16(水) 00:28:26宿題スレへ号
0049Perl忍者 ◆M5ZWRnXOj6
2011/02/16(水) 00:30:070050デフォルトの名無しさん
2011/02/16(水) 00:30:22http://hibari.2ch.net/test/read.cgi/tech/1295273862/
あなたが解けないC言語/C++言語の問題を ◆QZaw55cn4c が有償で片付けるスレッドです。
・モリタポ(http://moritapo.jp/)により決済を行います。
・投稿にあたっては、トリップを使ってください。トリップがなければ決済の確認ができません。
◆QZaw55cn4c は、トリップ以外の質問者の情報を知ることができませんので安心です。
【回答掲示までの流れ】
1. 質問者がトリップを使って問題を投稿する。
2. ◆QZaw55cn4c が回答できる問題があれば、◆QZaw55cn4c が受諾レスを行う。
受諾レスには決済日を基点とした回答猶予期間が示される。
3. 質問者が ◆QZaw55cn4c にモリタポを進呈する。
進呈の際には、問題を投稿したときに表示されたトリップ(パスワードではない)をメッセージに記入する。
4. モリタポの進呈を確認したら、◆QZaw55cn4c は回答を掲示する。(http://codepad.org/, http://ideone.com を使用します。)
【料金】
・一問あたり 500円(5000モリタポ・手数料込み)です。
・一つのレスに記述できる内容を一問とします。アップローダーを使用してもかまいません。
・◆QZaw55cn4c が受諾レスを行い、受諾レスに回答期日を示したにも関わらず、回答期日に間に合わなかった場合には、モリタポを返還します。
それ以外の場合にはモリタポの返還はいたしません。
【修正】
・◆QZaw55cn4c が一度示した回答に対しては、明白な錯誤があった場合を除いては、◆QZaw55cn4c は修正は基本的に行いません。
ただし、最大限ご希望に応じたいと考えていますので、修正希望があれば、トリップを使用して投稿してください。
修正希望回数は、最大3回を目安としてください。3回を超えて修正を希望する場合は、新規に質問を投稿しなおしてください。
いずれも場合も、修正に応じることを保障するものではありません。
0051Haskell忍者 ◆Lgxotu9vfE
2011/02/16(水) 00:31:470052デフォルトの名無しさん
2011/02/16(水) 00:33:55複雑なコード見慣れてるからさ
Cのコードが凄くカスにみえんだよね
はぁ・・・どうしよう 嫌味に聞こえたらごめんね
35 :Perl忍者 ◆M5ZWRnXOj6 :2011/02/16(水) 00:00:35
C言語なんて凄いやつたくさんいるしさあ^−^;
ユーザー多いから^−^;
俺TUEEEEEEEEEEEEEEEEEEEEE!!
できないよね^^; 馬鹿だね君たちも^^;
^−^;
0053デフォルトの名無しさん
2011/02/16(水) 01:25:330054デフォルトの名無しさん
2011/02/16(水) 01:40:190055デフォルトの名無しさん
2011/02/16(水) 02:09:100056デフォルトの名無しさん
2011/02/16(水) 02:10:16int main(void)
{
....................int no;
....................printf("整数を入力してください。:"); scanf("%d", &no);
.....................while(no > 0){
....................................if(no % 2){
..........................................................--no;
..........................................................printf("%d ", no);
..........................................................no -= 2;
.........................................................}
.....................................else{
..........................................................printf("%d ", no);
..........................................................no -= 2;
...............................................}
.................................}
...........................return(0);
}
C言語の教本の演習問題で「入力した整数以下の正の偶数を降順に表示しろ」
って言うから思いついたように組み込んで行ったら出来たんだが、
後々、何でこれで間違ってないのか分からん。
偶数入れた時はifのelseが使われて偶数が表示されるのは分かるが、奇数(例えば9)入れた時は
8, 5, 2 が表示されるんじゃないの?
入門一週間目の俺に教えてくれ
0057デフォルトの名無しさん
2011/02/16(水) 02:13:39奇数を入れた1回目のループは
if(no % 2){} の中身が実行されるが
その時noが偶数になるので2回目以降のループは
else{}の中身が実行される
0058デフォルトの名無しさん
2011/02/16(水) 02:17:01ああ、そっか
しょーもない読み違いで長文レスしてしまってすまんなありがとう
0059デフォルトの名無しさん
2011/02/16(水) 02:20:371を入力したときに
正の偶数ではない0が出力されちゃうから
修正した方がいいよ
0060デフォルトの名無しさん
2011/02/16(水) 02:28:220061デフォルトの名無しさん
2011/02/16(水) 02:36:260062デフォルトの名無しさん
2011/02/16(水) 02:38:13whileの複合文の上に
..................if(no == 1){
..................printf(" ");
..................--no;
......................................}
と、whileの複合文の下に
.................putchar(' ');
入れれば良い感じか
0063デフォルトの名無しさん
2011/02/16(水) 02:39:54>>36を見ると単純にそうとは言えないんじゃかいかぺろ
0064デフォルトの名無しさん
2011/02/16(水) 02:41:55http://hibari.2ch.net/test/read.cgi/tech/1295273862/
あなたが解けないC言語/C++言語の問題を ◆QZaw55cn4c が有償で片付けるスレッドです。
・モリタポ(http://moritapo.jp/)により決済を行います。
・投稿にあたっては、トリップを使ってください。トリップがなければ決済の確認ができません。
◆QZaw55cn4c は、トリップ以外の質問者の情報を知ることができませんので安心です。
【回答掲示までの流れ】
1. 質問者がトリップを使って問題を投稿する。
2. ◆QZaw55cn4c が回答できる問題があれば、◆QZaw55cn4c が受諾レスを行う。
受諾レスには決済日を基点とした回答猶予期間が示される。
3. 質問者が ◆QZaw55cn4c にモリタポを進呈する。
進呈の際には、問題を投稿したときに表示されたトリップ(パスワードではない)をメッセージに記入する。
4. モリタポの進呈を確認したら、◆QZaw55cn4c は回答を掲示する。(http://codepad.org/, http://ideone.com を使用します。)
【料金】
・一問あたり 500円(5000モリタポ・手数料込み)です。
・一つのレスに記述できる内容を一問とします。アップローダーを使用してもかまいません。
・◆QZaw55cn4c が受諾レスを行い、受諾レスに回答期日を示したにも関わらず、回答期日に間に合わなかった場合には、モリタポを返還します。
それ以外の場合にはモリタポの返還はいたしません。
【修正】
・◆QZaw55cn4c が一度示した回答に対しては、明白な錯誤があった場合を除いては、◆QZaw55cn4c は修正は基本的に行いません。
ただし、最大限ご希望に応じたいと考えていますので、修正希望があれば、トリップを使用して投稿してください。
修正希望回数は、最大3回を目安としてください。3回を超えて修正を希望する場合は、新規に質問を投稿しなおしてください。
いずれも場合も、修正に応じることを保障するものではありません。
0065デフォルトの名無しさん
2011/02/16(水) 02:42:53って突っ込み待ちか?
0066デフォルトの名無しさん
2011/02/16(水) 02:43:25質問の際は以下の条件に従ってください。
従わない投稿の問題に対しては、回答を差し上げられない可能性が高くなります。
・トリップを使用してください。トリップがない場合、受諾レスも回答も差し上げられません。
・質問は【質問テンプレート】を利用してください。
・問題文は、出題されたまま全文を書いてください。
・問題文やコードをリンクするときは、内容について説明をつけてください。
・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。
【質問テンプレート】
[1] 問題文(含コード&リンク):
[2] 環境
[2.1] OS: (Windows/Linux/等々)
[2.2] コンパイラ名とバージョン: (gcc 3.4, VisualC++2010 Express, Borland C++ 5.5 等)
[2.3] 言語: (C/C++/どちらでも可 のいずれか)
[3] 回答希望期限:([yyyy年mm月dd日hh:mm])なお ◆QZaw55cn4c は回答希望期限を最大限尊重しますが、かならずしも希望にそえるとは限りません。
[4] その他の制限: (どこまで習っているか、<****.h>は使ってはいけない等々)
【過去スレ】
【◆QZaw55cn4c 隔離】C/C++の問題を片付けます
http://hibari.2ch.net/test/read.cgi/tech/1289715349/
【関連スレ】
C/C++の宿題片付けます 145代目
http://hibari.2ch.net/test/read.cgi/tech/1294061094/
0067デフォルトの名無しさん
2011/02/16(水) 03:09:210068デフォルトの名無しさん
2011/02/16(水) 03:39:08唸れ、俺の左手――!
宿りし力を今こそ解き放つ――!!
0069デフォルトの名無しさん
2011/02/16(水) 04:22:460070デフォルトの名無しさん
2011/02/16(水) 04:46:110071デフォルトの名無しさん
2011/02/16(水) 06:00:520072デフォルトの名無しさん
2011/02/16(水) 09:00:48コンパイルはvisual studio 2008 Expressでやってます。
先にvarargs.hをincludeして、
va_start(引数)の形でコンパイルを通したいんですが、
va_start(引数1,引数2)が先に読まれてしまいエラーになってしまって・・・。
0073デフォルトの名無しさん
2011/02/16(水) 09:39:090074デフォルトの名無しさん
2011/02/16(水) 09:51:27理屈の上では、
#include <varargs.h>
va_start(引数)
#undef va_start
#include <stdarg.h>
va_start(引数1,引数2)
で少なくともコンパイルは通りそうな気がするけど
0075デフォルトの名無しさん
2011/02/16(水) 09:56:24>>74 釣られる
ぺろぺろの予感!!!
0076デフォルトの名無しさん
2011/02/16(水) 10:30:16僕も先ほどそれでエラーは回避できました。
#include <stdarg.h>
#undef va_start
#include <varargs.h>
va_start(引数)
実際はこーゆー流れでしたが。
これでやろうと思ってるんですが、
Visual studio 6.0と2008ではvarargs.hが変わってますよね?
2008はva_argが定義されてるかどうかが聞かれてるようになってますが。
なにか理由があって変わったってことは、
安易にそのようにすると6.0と挙動が変わってくるのかな。。。
とか不安なんですが、何かわからないでしょうか?
0077デフォルトの名無しさん
2011/02/16(水) 10:48:36そのあたりの挙動を吸収してくれるのがstdな訳です
俺は規格外だ、アドホックに行くぜ
というならその理由を明確に提示してもらわないと
回答しようがないですし
そもそもそれが明確ならここより適したスレがあると思います
0078デフォルトの名無しさん
2011/02/16(水) 10:59:066.0では
#include <stdarg.h>
#include <varargs.h>
va_start(引数)
の流れでやってたのを2008に移行したいがための質問でした。
stdarg.hをincludeした後にva_argをundefした時に
著しく挙動が変わるような事がなければ問題ないです。
実際にログにはva_startとva_endしか再定義されないみたいで、
個人的には大丈夫かなとは思ってるんですが。
>俺は規格外だ、アドホックに行くぜ
そこらへんは良くわかってないです・・・。
すいません。。。
丁寧に答えていただきありがとうございました。
0079デフォルトの名無しさん
2011/02/16(水) 11:01:570080デフォルトの名無しさん
2011/02/16(水) 11:45:29メリットというか・・・。
現行がそーゆー記述
(とゆーか、varargs.hで定義している形)になってたんで。
としか言えないです。
ソースは極力触りたくないんで。
0081デフォルトの名無しさん
2011/02/16(水) 11:45:51実際にディスクに書き込むようですが、
そのバッファのサイズはどこで定義されていますか?
また変更することはできるのでしょうか
ちなみにコンパイラはgcc 4.3.2です
0082デフォルトの名無しさん
2011/02/16(水) 12:07:47setvbufで変更できます
0083デフォルトの名無しさん
2011/02/16(水) 15:23:38#define NUM 5
int main(void)
{
int test[NUM];
int tmp;
int i,j,s,t;
printf("%d人の点数を入力してください。\n",NUM);
for(i=0;i<NUM;i++){
scanf("%d",&test[i]);
}
for(s=0;s<NUM-1;s++){
for(t=s+1;t<NUM;t++){
if(test[t]>test[s]){
tmp=test[t];
test[t]=test[s];
test[s]=tmp;
}}}
for(j=0;j<NUM;j++){
printf("%d番目の人の点数は%dです。\n",j+1,test[j]);
}
return 0;
}
配列の要素を大きい順にソートするコード?らしいんですが意味がわかりません
どうして大きい順にちゃんと並び変わるんですか教えてください;;
0084デフォルトの名無しさん
2011/02/16(水) 15:29:03if 文のところ
test[t] が test[s] よりも大きい場合に test[t] と test[s] を入れ替えて大きい順に並び変えている
0085デフォルトの名無しさん
2011/02/16(水) 15:36:44>がありますしそれは分かるんですが
tmp=test[t];
test[t]=test[s];
test[s]=tmp;
のところがよく分からないんです・・・
22,80,57,60,50 5人の点数はこれです
0086デフォルトの名無しさん
2011/02/16(水) 15:40:350087デフォルトの名無しさん
2011/02/16(水) 16:00:400088デフォルトの名無しさん
2011/02/16(水) 16:13:01それは test[t] と test[s] を入れ替えている
最初 test[t] が 80 で test[s] が 22 だったとすると
tmp = test[t]; // tmp に 80 を代入
test[t] = test[s]; // test[t] に 22 を代入
test[s] = tmp; // test[s] に 80 を代入
最後 test[t] が 22 で test[s] が 80 となり入れ替わっている
0089デフォルトの名無しさん
2011/02/16(水) 18:08:080090デフォルトの名無しさん
2011/02/16(水) 18:16:200091デフォルトの名無しさん
2011/02/16(水) 18:20:000092デフォルトの名無しさん
2011/02/16(水) 18:21:430093デフォルトの名無しさん
2011/02/16(水) 19:27:01はい次
0094デフォルトの名無しさん
2011/02/16(水) 19:52:030095デフォルトの名無しさん
2011/02/16(水) 19:54:230096デフォルトの名無しさん
2011/02/16(水) 19:59:510097デフォルトの名無しさん
2011/02/16(水) 20:27:12BUFSIZ @stdio.h
0098デフォルトの名無しさん
2011/02/16(水) 22:00:310099Perl忍者 ◆M5ZWRnXOj6
2011/02/16(水) 22:00:420100デフォルトの名無しさん
2011/02/16(水) 22:03:48いけないでござるよ。
0101デフォルトの名無しさん
2011/02/16(水) 22:15:26書いていいとして、何を書くつもりだ?
0102あぼーん
NGNG0103あぼーん
NGNG0104あぼーん
NGNG0105デフォルトの名無しさん
2011/02/16(水) 23:36:551mmの捻りも感じない釣だな〜
0106デフォルトの名無しさん
2011/02/16(水) 23:42:010107デフォルトの名無しさん
2011/02/16(水) 23:44:210108デフォルトの名無しさん
2011/02/16(水) 23:54:19捻りの単位は℃だよ
0109デフォルトの名無しさん
2011/02/17(木) 00:06:220110デフォルトの名無しさん
2011/02/17(木) 00:09:07それは擬態の術でござるよ。
0111デフォルトの名無しさん
2011/02/17(木) 00:10:55昔はスタックにint型の無効値を積んで読み捨てているものもあったらしい(伝聞)。
ま、宣言時に「使わねえよ」と漢らしく宣言した以上、それを貫くのが道ってもんだろ?
0112デフォルトの名無しさん
2011/02/17(木) 00:13:48鬼嫁が残る
0113デフォルトの名無しさん
2011/02/17(木) 00:16:33main()で漢らしく宣言しましたが、10年後に失脚してしまいました。
(´・ω・`)ショボーン
0114デフォルトの名無しさん
2011/02/17(木) 00:19:51アクセスバイオレーションで主導権を回復できる例は殆ど無いもんね。
0115デフォルトの名無しさん
2011/02/17(木) 00:24:530116デフォルトの名無しさん
2011/02/17(木) 00:34:32そんな鬼嫁でも、私が先立つときに、俺も死ぬと言ってなどと可愛い時期もありました。
0117デフォルトの名無しさん
2011/02/17(木) 00:37:13スレッド/プロセスが複線化すると人間の能力では追いきれなくなるわけで、
ゾンビプロセスが残っててもしょうがないと思う。
0118デフォルトの名無しさん
2011/02/17(木) 00:39:57はい、嫁が死ぬ時は、私も道連れにされますが、
私が死んでも、嫁は保険金で生き残って、太り続けます。
悲しいですね…
0119デフォルトの名無しさん
2011/02/17(木) 01:30:560120デフォルトの名無しさん
2011/02/17(木) 04:25:080121あぼーん
NGNG0122デフォルトの名無しさん
2011/02/17(木) 06:35:55int main()
{
0123デフォルトの名無しさん
2011/02/17(木) 06:41:32int main()
{
int a[3][2] = {10, 20, 30, 40, 50, 60};
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
printf("&a[%d][%d] = %p (a[%d] + %d) = %p\n",
i, j, &a[i][j], i, j, (a[i] + j));
}
}
return 0;
}
(a[i] + j)は何故アドレス演算子が必要ないのですか?
0124デフォルトの名無しさん
2011/02/17(木) 06:44:310125デフォルトの名無しさん
2011/02/17(木) 06:47:14一度自分の目で確かめた方がいい
0126デフォルトの名無しさん
2011/02/17(木) 07:04:03>>125
配列名はその配列の先頭アドレスを表すと書かれていたのですが、
この場合a[i]を配列名として見るということでしょうか?
0127デフォルトの名無しさん
2011/02/17(木) 07:07:36a[i]と書いたときポインターに成り下がる
ぺろぺろぺろぺろ
0128デフォルトの名無しさん
2011/02/17(木) 07:22:23int a[b][c][d][e][f][g][h][i][j][k];
a[b][c][d][e][f][g][h][i][j]; // ←は[k]に辿り着かなければ何処までもポインタ扱い
0129デフォルトの名無しさん
2011/02/17(木) 07:31:17>>128
理解できました。
ありがとうございます。
0130あぼーん
NGNG0131あぼーん
NGNG0132あぼーん
NGNG0133デフォルトの名無しさん
2011/02/17(木) 14:33:04(スタックポインタの巻き戻しじゃなくて、引数領域を何かで上書きしてもいいのかってこと)
0134デフォルトの名無しさん
2011/02/17(木) 15:26:23引数領域ってスタックの中だろ
普通、そこは参照しかしないからな…
Cの動作だけで考えれば、壊しても大丈夫な気もするが、
最適化とかすると、コンパイラ依存になりそうな気がする…
0135あぼーん
NGNG0136デフォルトの名無しさん
2011/02/17(木) 16:59:36そうそう、スタック上の引数
アセンブラのルーチンで横着して引数をつぶすってのを昔から深く考えずにやってたんだけど
ふと心配になったんだ
経験上、関数から帰った後で引数を使いまわすコンパイラは見たことないけど
規格や規約ではっきり合法と書かれてるのも見たことないんだよね
0137デフォルトの名無しさん
2011/02/17(木) 17:36:400138あぼーん
NGNG0139あぼーん
NGNG0140あぼーん
NGNG0141デフォルトの名無しさん
2011/02/17(木) 17:55:05んあ?
規格に、仮引数は関数スコープの変数、みたいな記述がなかったっけ?
確認してないんで無かったらスマン
0142あぼーん
NGNG0143デフォルトの名無しさん
2011/02/17(木) 19:51:54このエラーの意味と対処法を教えていただけませんか?
0144デフォルトの名無しさん
2011/02/17(木) 20:00:250145デフォルトの名無しさん
2011/02/17(木) 20:05:36__builtin___strcpy_chk の第二引数にintを入れたみたいだけど、
こっちで親切にポインタにキャストしておいてあげたからねっ、という意味。
対処法は、(void *) 0 みたいに明示的にキャストして引数を渡す。
0146デフォルトの名無しさん
2011/02/17(木) 20:16:56多分 strcpy の第2引数に char* じゃなくて char を渡していると思われ。
コンパイラにとっちゃあ warning だけどプログラムとして見れば error! ご愁傷さま
0147デフォルトの名無しさん
2011/02/17(木) 20:20:45ありがとうございます。
0148デフォルトの名無しさん
2011/02/17(木) 20:36:56ありがとうございます。
0149デフォルトの名無しさん
2011/02/17(木) 20:52:49http://codepad.org/pF5QZz2J
上のようなプログラムで前述した警告がline43,50,58に出るのですが、具体的な改善点が分かりません・・・。
よろしければ教えて頂けたら幸いです。何度も申し訳ありません・・・。
0150デフォルトの名無しさん
2011/02/17(木) 21:02:57>>146
0151デフォルトの名無しさん
2011/02/17(木) 21:03:550152デフォルトの名無しさん
2011/02/17(木) 21:17:050153デフォルトの名無しさん
2011/02/17(木) 21:40:54ありがとうございます。
0154デフォルトの名無しさん
2011/02/17(木) 22:07:26ありがとうございます。
0155デフォルトの名無しさん
2011/02/17(木) 22:43:48解決しました!ありがとうございました。
0156デフォルトの名無しさん
2011/02/17(木) 22:48:54#include <stdio.h>
int main()
{
char str[32];
size_t len;
printf("文字列を入力してください---");
scanf("%s", str);
len = strlen(str);
printf("%sの長さ%dです\n", str, len);
return 0;
}
猫でもわかるCの文字列の長さを取り出すプログラムなのですが、
何故size_t型を使っているのでしょうか?
0157デフォルトの名無しさん
2011/02/17(木) 22:52:13strlen()の戻り値がsize_tだから
0158デフォルトの名無しさん
2011/02/17(木) 22:53:05つってもprintfに%d指定してるから意味ないけどな
0159デフォルトの名無しさん
2011/02/17(木) 22:54:03size_tだと型によって何かのサイズであることを明示できる。
プログラマやソースを読んだ人に対するインフォメーションが多い。
そのため、コードの解読がしやすく、バグを作りこみにくくなる。
という優しさ。
0160デフォルトの名無しさん
2011/02/17(木) 22:55:12strlenの戻り値の型がsize_tだから
strlenとかサイズを返す系の関数がなぜsize_tを使っているかというと、「サイズを表す」と明言したいから
別にintでもunsignedでもいいじゃんと思うかもしれないけど、型定義名を使っておけば後から変更するとき一箇所だけの書き換えで済む
0161デフォルトの名無しさん
2011/02/17(木) 22:56:140162デフォルトの名無しさん
2011/02/17(木) 23:05:24プログラマ界の権威みたいなものですか?
0163デフォルトの名無しさん
2011/02/17(木) 23:09:560164デフォルトの名無しさん
2011/02/17(木) 23:14:430165デフォルトの名無しさん
2011/02/17(木) 23:16:53やっぱり神プログラマなんですね
0166デフォルトの名無しさん
2011/02/17(木) 23:18:05ええ人や。
0167デフォルトの名無しさん
2011/02/17(木) 23:18:050168デフォルトの名無しさん
2011/02/17(木) 23:20:030169デフォルトの名無しさん
2011/02/17(木) 23:21:44嫉妬しているの?
0170デフォルトの名無しさん
2011/02/17(木) 23:23:170171デフォルトの名無しさん
2011/02/17(木) 23:26:570172デフォルトの名無しさん
2011/02/17(木) 23:30:380173デフォルトの名無しさん
2011/02/17(木) 23:31:120174デフォルトの名無しさん
2011/02/17(木) 23:31:490175デフォルトの名無しさん
2011/02/17(木) 23:36:250176デフォルトの名無しさん
2011/02/17(木) 23:49:45日本人離れしている
0177デフォルトの名無しさん
2011/02/17(木) 23:51:150178デフォルトの名無しさん
2011/02/18(金) 00:02:250179デフォルトの名無しさん
2011/02/18(金) 00:13:430180デフォルトの名無しさん
2011/02/18(金) 00:22:220181デフォルトの名無しさん
2011/02/18(金) 00:29:12お前は頭悪いだろ
0182デフォルトの名無しさん
2011/02/18(金) 00:31:450183デフォルトの名無しさん
2011/02/18(金) 01:07:17としか読めねえだろこれjk
0184デフォルトの名無しさん
2011/02/18(金) 01:22:590185デフォルトの名無しさん
2011/02/18(金) 01:33:09左端が亀頭みたいでヒワイだとおもいます
0186デフォルトの名無しさん
2011/02/18(金) 01:34:260187デフォルトの名無しさん
2011/02/18(金) 01:35:110188デフォルトの名無しさん
2011/02/18(金) 01:36:580189デフォルトの名無しさん
2011/02/18(金) 01:37:420190デフォルトの名無しさん
2011/02/18(金) 01:44:200191デフォルトの名無しさん
2011/02/18(金) 01:46:54επιστημηの才能に嫉妬する人がこんなにも・・・
やはり社会に与える影響は大きかったか・・・
0192デフォルトの名無しさん
2011/02/18(金) 01:48:240193デフォルトの名無しさん
2011/02/18(金) 01:51:460194デフォルトの名無しさん
2011/02/18(金) 01:57:27無理にネタを振らなくてもいいよ
無理にネタに乗らなくてもいいよ
HN、レス番、レス日時、IDをネタにしてまで
頑張らなくていいんだよ
0195デフォルトの名無しさん
2011/02/18(金) 02:05:010196デフォルトの名無しさん
2011/02/18(金) 02:07:120197デフォルトの名無しさん
2011/02/18(金) 02:17:330198デフォルトの名無しさん
2011/02/18(金) 02:46:38/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|
, ,-;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:,. ヽ─y────────────── ,-v-、
/;:;:;:;:;:;:ミミ;:;:;:;:;:;:;:;:;:;`、 / _ノ_ノ:^)
/;:;:;:;:彡―ー-、_;:;:;:;:;:;:;:;| / _ノ_ノ_ノ /)
|;:;:;:ノ、 `、;;:;:;:;:;:i / ノ ノノ//
|;:/_ヽ ,,,,,,,,,, |;:;:;:;:;:;! ____/ ______ ノ
| ' ゚ ''/ ┌。-、 |;:;:;:;:/ _.. r(" `ー" 、 ノ
|` ノ( ヽ ソ |ノ|/ _. -‐ '"´ l l-、 ゙ ノ
_,-ー| /_` ”' \ ノ __ . -‐ ' "´ l ヽ`ー''"ー'"
| : | )ヾ三ニヽ /ヽ ' "´/`゙ ーァ' "´ ‐'"´ ヽ、`ー /ノ
ヽ `、___,.-ー' | / / __.. -'-'"
| | \ / | l / . -‐ '"´
\ |___>< / ヽ
0199デフォルトの名無しさん
2011/02/18(金) 02:48:230200デフォルトの名無しさん
2011/02/18(金) 02:52:310201あぼーん
NGNG0202あぼーん
NGNG0203あぼーん
NGNG0204あぼーん
NGNG0205デフォルトの名無しさん
2011/02/18(金) 02:55:400206あぼーん
NGNG0207デフォルトの名無しさん
2011/02/18(金) 02:57:12○ 舐め達磨
ぺろぺろぺろぺろ
0208デフォルトの名無しさん
2011/02/18(金) 02:57:59お前まだいたのか
さすがクドさが半端ない
0209デフォルトの名無しさん
2011/02/18(金) 02:58:11ぺろぺろぺろぺろ
0210あぼーん
NGNG0211あぼーん
NGNG0212あぼーん
NGNG0213あぼーん
NGNG0214あぼーん
NGNG0215あぼーん
NGNG0216デフォルトの名無しさん
2011/02/18(金) 03:03:05・モリタポ(http://moritapo.jp/)により決済を行います。
・投稿にあたっては、トリップを使ってください。トリップがなければ決済の確認ができません。
◆QZaw55cn4c は、トリップ以外の質問者の情報を知ることができませんので安心です。
【回答掲示までの流れ】
1. 質問者がトリップを使って問題を投稿する。
2. ◆QZaw55cn4c が回答できる問題があれば、◆QZaw55cn4c が受諾レスを行う。
受諾レスには決済日を基点とした回答猶予期間が示される。
3. 質問者が ◆QZaw55cn4c にモリタポを進呈する。
進呈の際には、問題を投稿したときに表示されたトリップ(パスワードではない)をメッセージに記入する。
4. モリタポの進呈を確認したら、◆QZaw55cn4c は回答を掲示する。(http://codepad.org/, http://ideone.com を使用します。)
【料金】
・一問あたり 500円(5000モリタポ・手数料込み)です。
・一つのレスに記述できる内容を一問とします。アップローダーを使用してもかまいません。
・◆QZaw55cn4c が受諾レスを行い、受諾レスに回答期日を示したにも関わらず、回答期日に間に合わなかった場合には、モリタポを返還します。
それ以外の場合にはモリタポの返還はいたしません。
【修正】
・◆QZaw55cn4c が一度示した回答に対しては、明白な錯誤があった場合を除いては、◆QZaw55cn4c は修正は基本的に行いません。
ただし、最大限ご希望に応じたいと考えていますので、修正希望があれば、トリップを使用して投稿してください。
修正希望回数は、最大3回を目安としてください。3回を超えて修正を希望する場合は、新規に質問を投稿しなおしてください。
いずれも場合も、修正に応じることを保障するものではありません。
0217あぼーん
NGNG0218あぼーん
NGNG0219あぼーん
NGNG0220あぼーん
NGNG0221あぼーん
NGNG0222デフォルトの名無しさん
2011/02/18(金) 03:24:30ありがとう
でも、舐め達磨さん本人も見てるから誉めるのは止めて欲しい
やきもち焼いてこんな流れになっちゃうから・・・><
0223デフォルトの名無しさん
2011/02/18(金) 03:26:450224デフォルトの名無しさん
2011/02/18(金) 03:36:110225あぼーん
NGNG0226あぼーん
NGNG0227デフォルトの名無しさん
2011/02/18(金) 03:42:11http://jp.alpha-lab.info/topic-4-0.html
*ただ、C++0xのlambda式使わないとそれほど便利じゃなくなる
0228あぼーん
NGNG0229あぼーん
NGNG0230あぼーん
NGNG0231あぼーん
NGNG0232デフォルトの名無しさん
2011/02/18(金) 03:49:180233デフォルトの名無しさん
2011/02/18(金) 03:51:35キチガイって流行ってるの?
0234あぼーん
NGNG0235あぼーん
NGNG0236あぼーん
NGNG0237あぼーん
NGNG0238デフォルトの名無しさん
2011/02/18(金) 04:07:490239デフォルトの名無しさん
2011/02/18(金) 04:09:36ぺろぺろぺろぺろ
0240デフォルトの名無しさん
2011/02/18(金) 04:33:37レス内容が全部ぺろぺろに置き換わっても支障ないだろw
0241デフォルトの名無しさん
2011/02/18(金) 04:48:530242デフォルトの名無しさん
2011/02/18(金) 05:17:38コテつけてよ
0243Perl忍者 ◆M5ZWRnXOj6
2011/02/18(金) 09:56:480244デフォルトの名無しさん
2011/02/18(金) 18:08:030245デフォルトの名無しさん
2011/02/18(金) 19:20:18char miozi[],namae[];
printf("苗字を入力してください。\n");
scanf("%s",miozi);
printf("名前を入力してください\n");
scanf("%s",namae);
return 0;
}
これで要素数を指定しなければ動かない理由はなんですか?
0246デフォルトの名無しさん
2011/02/18(金) 19:22:540247デフォルトの名無しさん
2011/02/18(金) 19:36:05int a[100][100], b[99][99], i, j;
for(i = 0; i < 99; i++) for(j = 0; j < 99; j++) b[i][j] = a[i >= 4 ? i + 1 : i][j >= 4 ? j + 1 : j];
0248デフォルトの名無しさん
2011/02/18(金) 19:49:56ありがとうございます。
では要素数を指定しなくていい時はどういうときなんでしょうか?
指定しなければ動かない場合と指定しなくても動く場合の違いがわかりません。
0249デフォルトの名無しさん
2011/02/18(金) 19:56:290250デフォルトの名無しさん
2011/02/18(金) 20:27:26「動かない」じゃなくて「動かせない」じゃないかい?コンパイルエラーで…
0251デフォルトの名無しさん
2011/02/18(金) 20:45:10すっきりしました。ありがとうございます。
0252デフォルトの名無しさん
2011/02/18(金) 21:37:24すっきりしました。ありがとうございます。
0253デフォルトの名無しさん
2011/02/18(金) 22:23:020254デフォルトの名無しさん
2011/02/18(金) 22:40:560255デフォルトの名無しさん
2011/02/18(金) 23:25:48過去問80点前後は取れてたけど今回はちょっと難しかった…
char型に整数って入れられたました?
0256デフォルトの名無しさん
2011/02/18(金) 23:26:550257デフォルトの名無しさん
2011/02/18(金) 23:29:120258デフォルトの名無しさん
2011/02/18(金) 23:35:00ありがとございます。文字だけだと思って間違えました…
0259デフォルトの名無しさん
2011/02/18(金) 23:41:55それともメモリ上の変数にアクセスするだけですか?
fseekをガンガン使おうか控えめにしようか迷ってます。
0260デフォルトの名無しさん
2011/02/18(金) 23:46:460261デフォルトの名無しさん
2011/02/18(金) 23:47:08でも、自分ファイルって何か知らんとです、orz
0262デフォルトの名無しさん
2011/02/18(金) 23:47:44書き込み後のfseek()はバッファのフラッシュをするし、読み込み専用でもディスクアクセスはあるかも知れない
0263デフォルトの名無しさん
2011/02/18(金) 23:57:300264デフォルトの名無しさん
2011/02/19(土) 00:21:49ありがとうございます。
HDDにアクセスする可能性があるのか。
0265デフォルトの名無しさん
2011/02/19(土) 00:51:44どういう場合にアクセスが起こるかまで知ろうとすると、OSの方に依存する
0266デフォルトの名無しさん
2011/02/19(土) 02:04:00OSが無い環境は無視されるのですね
わかります
0267デフォルトの名無しさん
2011/02/19(土) 02:17:370268デフォルトの名無しさん
2011/02/19(土) 02:18:180269デフォルトの名無しさん
2011/02/19(土) 02:19:57クドクドと長い話が始まるからほっとけよ
0270デフォルトの名無しさん
2011/02/19(土) 02:31:530271デフォルトの名無しさん
2011/02/19(土) 02:33:030272デフォルトの名無しさん
2011/02/19(土) 02:34:190273デフォルトの名無しさん
2011/02/19(土) 02:34:56/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
|
, ,-;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:,. ヽ─y────────────── ,-v-、
/;:;:;:;:;:;:ミミ;:;:;:;:;:;:;:;:;:;`、 / _ノ_ノ:^)
/;:;:;:;:彡―ー-、_;:;:;:;:;:;:;:;| / _ノ_ノ_ノ /)
|;:;:;:ノ、 `、;;:;:;:;:;:i / ノ ノノ//
|;:/_ヽ ,,,,,,,,,, |;:;:;:;:;:;! ____/ ______ ノ
| ' ゚ ''/ ┌。-、 |;:;:;:;:/ _.. r(" `ー" 、 ノ
|` ノ( ヽ ソ |ノ|/ _. -‐ '"´ l l-、 ゙ ノ
_,-ー| /_` ”' \ ノ __ . -‐ ' "´ l ヽ`ー''"ー'"
| : | )ヾ三ニヽ /ヽ ' "´/`゙ ーァ' "´ ‐'"´ ヽ、`ー /ノ
ヽ `、___,.-ー' | / / __.. -'-'"
| | \ / | l / . -‐ '"´
\ |___>< / ヽ
0274デフォルトの名無しさん
2011/02/19(土) 02:36:320275デフォルトの名無しさん
2011/02/19(土) 02:53:07>>268
組み込みならあるんじゃないか
0276デフォルトの名無しさん
2011/02/19(土) 03:03:140277デフォルトの名無しさん
2011/02/19(土) 03:09:060278デフォルトの名無しさん
2011/02/19(土) 03:15:220279デフォルトの名無しさん
2011/02/19(土) 03:24:29プロンプトに文字を表示させるの飽きた
0280デフォルトの名無しさん
2011/02/19(土) 03:27:140281デフォルトの名無しさん
2011/02/19(土) 03:45:32あ、あと前猫win第2版のソースコピペしてビルドしたらエラー出たんだけどなんで?
プログラムの書き方変わったとか?
第3版出てたのに間違えて第2版買っちゃったんだよね
0282デフォルトの名無しさん
2011/02/19(土) 03:49:22あとはエスパースレにどうぞ。
0283デフォルトの名無しさん
2011/02/19(土) 04:04:320284デフォルトの名無しさん
2011/02/19(土) 06:24:200285デフォルトの名無しさん
2011/02/19(土) 09:45:31コマンドラインツールを作る気が今後もないのなら、違う言語にステップアップするのも手だ。
今時ピュアCで作ってるGUIツールなんて珍しいからな。
0286デフォルトの名無しさん
2011/02/19(土) 09:54:48一応Pythonも勉強中してる
0287Perl忍者 ◆M5ZWRnXOj6
2011/02/19(土) 12:37:28だいたいC詳しいやつなんて こんなスレ使わないから
低脳があつまるんだろうねここ
0288デフォルトの名無しさん
2011/02/19(土) 13:09:210289デフォルトの名無しさん
2011/02/19(土) 16:58:032〜1000までの素数を全て表示するという練習問題で
以下のように記述したのですが、上手くいきません。
どこが間違ってるんでしょうか?
#include<stdio.h>
int main(void)
{
int i,j;
for(i=2; i<=1000; i++)
{
for(j=1; j<=i/2; j++)
{
if((i%j)!=0)printf("%d\n",i);
}
}
return 0;
}
0290デフォルトの名無しさん
2011/02/19(土) 17:00:080291デフォルトの名無しさん
2011/02/19(土) 17:04:40int main(void)
{
int i,j;
for(i=2; i<=1000; i++)
{
for(j=1; j<=i/2; j++)
{
if((i%j)==0) break;
}
if(j > i/2)printf("%d\n",i);
}
return 0;
}
0292デフォルトの名無しさん
2011/02/19(土) 17:16:30>>291
ありがとうございます。
やっと理解できました。
0293デフォルトの名無しさん
2011/02/19(土) 17:47:13>64なんかも重複だろうに。
0294デフォルトの名無しさん
2011/02/19(土) 19:17:590295デフォルトの名無しさん
2011/02/19(土) 22:46:16.15メインのソースファイルに他の関数とかを書いているcソースファイルを取り込めません(というか取り込み方間違ってる…?)
#include (分割したソースファイル名)
ではコンパイルエラーになります…。
一体どうやってやるのでしょうか?
0296デフォルトの名無しさん
2011/02/19(土) 22:48:39.96■main.c
■sub1.c
■sub2.c
main.cがプログラム本体です。sub1.cとsub2.cは関数だけ集めたファイル。
(main.c)
#include sub1.c
これでエラー出力。
0297デフォルトの名無しさん
2011/02/19(土) 22:50:40.42■sub1.c
■sub2.c
■sub1.h
■sub2.h
*.cに
#include "sub1.h"
#include "sub2.h"
を書いて
gcc sub1.c sub2.c main.c
でコンパイル
0298デフォルトの名無しさん
2011/02/19(土) 22:52:26.77初心者に、こんなやり方を教えるなんて
0299デフォルトの名無しさん
2011/02/19(土) 22:57:57.31出来ました!どうもありがとうございます!!
ヘッダーファイルってそういう意味で使うんですね。なるほど
>>298
参考書のみの独学プログラマでして…。
申し訳ない。
0300デフォルトの名無しさん
2011/02/19(土) 23:13:51.18.cに関数の定義を書くのが普通だな
0301デフォルトの名無しさん
2011/02/19(土) 23:29:36.11丸く収まっているところを悪いけど、なんか最初の話とズレてないかい?
行儀の良し悪しはともかくとしても、#include sub1.c を #include "sub1.c"
とすりゃいいんじゃネーノ?
0302デフォルトの名無しさん
2011/02/19(土) 23:32:01.500303デフォルトの名無しさん
2011/02/19(土) 23:34:18.11なんで?
0304デフォルトの名無しさん
2011/02/19(土) 23:37:02.64とりあえずコンパイルを通す方法よりも
一般的なファイル分割の方法を説明するのが筋だろう。
それで満足しなければ、#include "sub1.c" の話をすればいい。
0305デフォルトの名無しさん
2011/02/19(土) 23:49:10.53満足するしないの話か?
C言語の #include ディレクティブの記法ミスと気付かせるのも重要だと思うけど。
まっ、意見の相違ってやつだなw
0306デフォルトの名無しさん
2011/02/19(土) 23:53:07.510307デフォルトの名無しさん
2011/02/19(土) 23:54:20.63一応一般的な方法も教えるべきだったと俺は思うし。
0308デフォルトの名無しさん
2011/02/20(日) 01:14:21.46俺も記法ミスのほうを優先すべきだと思う。
一般的な方法を教えるべきだと思ってる人は多重インクルードに対する一般的な解決法も書くべきだろ。
0309デフォルトの名無しさん
2011/02/20(日) 01:18:58.620310デフォルトの名無しさん
2011/02/20(日) 02:37:47.240311デフォルトの名無しさん
2011/02/20(日) 02:38:45.02関数宣言するだけでもいいよ
0312デフォルトの名無しさん
2011/02/20(日) 02:40:57.300313デフォルトの名無しさん
2011/02/20(日) 02:46:33.78でも書いたほうがいいのでしょうか?
#include <string.h>を書いたときと書かなかったときに何か違いはあるのでしょうか?
0314デフォルトの名無しさん
2011/02/20(日) 02:54:05.24タイプ量を考えたら#includeのほうが手っ取り早いけどな。
0315デフォルトの名無しさん
2011/02/20(日) 03:00:10.25関数宣言をしていれば、インクルードしなくてもいい。
だからと言ってstrcpy()以外にもstrcat()やstrchr()を使う度に関数宣言を増やすのも阿呆なので、
普通はインクルードしておく。
0316デフォルトの名無しさん
2011/02/20(日) 03:00:52.800317デフォルトの名無しさん
2011/02/20(日) 03:02:26.33#include<stdio.h>
void strcpy(char *, char *)
0318デフォルトの名無しさん
2011/02/20(日) 03:16:55.71関数宣言とは・・・?
プロトタイプ宣言のこと?
0319デフォルトの名無しさん
2011/02/20(日) 06:22:29.17関数宣言とは・・・?
関白宣言のこと?
おまえを嫁にもらう前に、言っておきたいことがある。
0320デフォルトの名無しさん
2011/02/20(日) 09:05:08.66char*strcpy();
プロトタイプ宣言:
char*strcpy(char*,char*);
0321デフォルトの名無しさん
2011/02/20(日) 09:37:58.67>strcpy関数を使うときは#include <sting.h>を書かないとだめですよね?
関数宣言とかプロトタイプ宣言でもいいと言ってるやつもいるけど、
#include のほうがいいと思う。
・関数宣言だとタイプミスや勘違いするかもしれない。
たとえば、>>320 は char*strcpy(char*,char*); なんて書いてる。
昔はこれであってたんだが、今時の処理系では大抵
char*strcpy(char*,const char*); となってる。
・宣言が処理系によって異なるかもしれない。
最近の Visual Studio だと strcpy() 使ったら、「この関数は安全じゃ
ねーから代わりに strcpy_s() 使えと言ってくる。」
こういう機能は #include <string.h> で指定されているので、関数宣言
とかだと指摘されない。
(まあ、こういう機能をありがたがるかどうかは人によるだろうけど。)
とにかく、システムから供給されるライブラリ使うなら、宣言もシステム
提供のものを使うのがいいと思うぞ。
その場限りの使い捨てプログラムなら、どっちでもいいけど。
0322320
2011/02/20(日) 10:04:21.90おっと、失敗したぜ。
まぁ、インクルードしておけってことで。
0323デフォルトの名無しさん
2011/02/20(日) 10:17:00.740324デフォルトの名無しさん
2011/02/20(日) 10:17:41.07ありがとうございます。
0325デフォルトの名無しさん
2011/02/20(日) 10:35:36.23コンパイル時間に差はあるけど、実行時間に差が出るかどうかはコンパイラと標準ライブラリの構成次第。
0326デフォルトの名無しさん
2011/02/20(日) 11:31:11.55msvc10とcygwin-gccでさっくり検証してみた。
吐くバイナリは
PEヘッダのタイムスタンプとチェックサムが変わるぐらいで
他に差は無い。
コンパイル速度については
何もインクルードしない int main(){return 0;} と
C標準のヘッダを全てインクルードした int main(){return 0;} でさえ
0.1秒も変わらないので認識不能レベル。
0327デフォルトの名無しさん
2011/02/20(日) 12:01:46.76コンパイラやオプションによっては生成されるバイナリに差が出る場合もあるよ。
>>143がその一例で、 GCC で -D_FORTIFY_SOURC=1 とかでやった結果かな。
「まぁ、インクルードしておけってことで。」に一票w
0328295
2011/02/20(日) 17:00:35.15関数の事とか色々調べて解決した結果、
モジュール化したファイル(関数オンリーのファイル)をそのまま.hにしてそれをインクルードしたら大丈夫のようです。
どうもお騒がせいたしましたm(_ _)m
私はVC++2010利用者なのでそもそもヘッダーファイルの存在意義すら知りませんでした。。。
0329デフォルトの名無しさん
2011/02/20(日) 17:10:45.11>>328を見て一言お願いしますw
0330デフォルトの名無しさん
2011/02/20(日) 23:34:33.160331デフォルトの名無しさん
2011/02/21(月) 00:02:04.920332デフォルトの名無しさん
2011/02/21(月) 00:04:55.480333デフォルトの名無しさん
2011/02/21(月) 00:07:02.47それとtypedefとか
0334デフォルトの名無しさん
2011/02/21(月) 00:19:58.91プログラマにむいてないよ
0335デフォルトの名無しさん
2011/02/21(月) 00:24:12.470336デフォルトの名無しさん
2011/02/21(月) 00:25:52.94B<まず構造体ってものが何なのか理解できてる?
0337デフォルトの名無しさん
2011/02/21(月) 00:29:25.76実際俺も持ってるし最初はポインタのとこで既に分からんかったし。
0338デフォルトの名無しさん
2011/02/21(月) 00:33:20.83同じことが別の表現で書いてあるわけだから
0339デフォルトの名無しさん
2011/02/21(月) 00:51:49.480340デフォルトの名無しさん
2011/02/21(月) 00:56:25.570341デフォルトの名無しさん
2011/02/21(月) 01:15:06.63自分でもそう思います
>>335 >>336
構造体自体はわかってるつもりです
>>337
僕もポインタは半分くらいしかわかりませんでした。
>>338 >>339
ありがとう。
0342デフォルトの名無しさん
2011/02/21(月) 03:34:57.02「つもり」は積もらない
0343デフォルトの名無しさん
2011/02/21(月) 10:21:35.57type define
そのままやん
0344デフォルトの名無しさん
2011/02/21(月) 10:43:06.21試した事は、
#pragma comment(lib, "○○○.lib")
の記述の追加と、
追加の依存にちゃんと上記のライブラリが指定されているかの確認です。
もちろんググったりもしてるのですがこれ!という答えが見つからず・・・。
何か心当たり無いでしょうか?
0345デフォルトの名無しさん
2011/02/21(月) 10:47:59.92構造体にtypedefを使う意味がわからなかったんです。
typedefを書くのはstructを書かなくていいようにするためでおkですか?
0346デフォルトの名無しさん
2011/02/21(月) 10:49:49.40そう思って構わない
0347デフォルトの名無しさん
2011/02/21(月) 10:51:00.87せめて環境書きませんか?
0348デフォルトの名無しさん
2011/02/21(月) 11:02:58.25例えばこんな関数 int Hoge(int *p) の引数に
&i[n]みたいに配列のインデックス指定してそれに&付けて渡した場合と
piみたいに既に決まってる場合とならやっぱり後者の方が早いんでしょうか?
0349デフォルトの名無しさん
2011/02/21(月) 11:13:07.45すいません、忘れていました。
Visual Studio 2008 Professional
OSはwindows server 2008 r2
です。
0350デフォルトの名無しさん
2011/02/21(月) 11:23:08.21http://msdn.microsoft.com/ja-jp/library/799kze2z(VS.80).aspx
以降は↓へどうぞ
Visual Studio 2008 Part 21
http://hibari.2ch.net/test/read.cgi/tech/1290969016/
0351デフォルトの名無しさん
2011/02/21(月) 11:24:26.73自分で試すのが一番ですよ
0352デフォルトの名無しさん
2011/02/21(月) 13:56:21.400353デフォルトの名無しさん
2011/02/21(月) 14:16:42.310354佐々木優子lvl2(悪) ◆M5ZWRnXOj6
2011/02/21(月) 14:49:22.81まじきえろ 数学wwwwwwwwwwwwwwwwwwwwww
wwwwwwwwww
wwwwwwwwwwwwwwwwww
C言語wwwwwwwwwwwwwwwwww
本屋さんで自分に合いそうな教科書を立ち読みしてみるのはどうでしょう。
あと、一冊で済まそう、とは考えないほうがいいかと。
0356デフォルトの名無しさん
2011/02/21(月) 21:23:21.73ちなみに俺のおすすめは「やさしいC」とあと何か1冊。
本に書かれたプログラムを自分でもコーディングしたり、
本についている練習問題などちゃんとやると身についてくる。
本当にこれ重要。
0357デフォルトの名無しさん
2011/02/21(月) 22:12:18.24おまえさんに向いてそう
http://hibari.2ch.net/test/read.cgi/tech/1275235018/
私が最初に読んだ本です。
http://www.amazon.co.jp/dp/4875930569/
いいかどうかは今でもよくわかりませんが、内容が古いのは確かです。
0359デフォルトの名無しさん
2011/02/21(月) 22:43:40.850360デフォルトの名無しさん
2011/02/21(月) 23:03:01.150361デフォルトの名無しさん
2011/02/21(月) 23:25:12.050362デフォルトの名無しさん
2011/02/21(月) 23:27:39.59これを読んだのが15才だとしても今40才か・・・
もう人生終わってるジャン
0363デフォルトの名無しさん
2011/02/21(月) 23:56:37.040364デフォルトの名無しさん
2011/02/22(火) 00:06:06.42そんなの使ってるのって40才前後のジジイだぜ
0365デフォルトの名無しさん
2011/02/22(火) 00:21:06.390366デフォルトの名無しさん
2011/02/22(火) 00:23:56.100368デフォルトの名無しさん
2011/02/22(火) 07:16:20.98わかります
0369デフォルトの名無しさん
2011/02/22(火) 07:46:22.86速いかどうかは分からないが、遅くはならない。
0370佐々木優子 ◆M5ZWRnXOj6
2011/02/22(火) 09:56:58.87わざとらしい
0371デフォルトの名無しさん
2011/02/22(火) 10:45:57.11俺はチャー
0372デフォルトの名無しさん
2011/02/22(火) 10:50:51.06http://hibari.2ch.net/test/read.cgi/prog/1242268027/
0373デフォルトの名無しさん
2011/02/22(火) 11:13:33.390375デフォルトの名無しさん
2011/02/22(火) 13:20:51.02もう逝っていいよ
0376デフォルトの名無しさん
2011/02/22(火) 15:36:14.14int flip(void);
main()
{
int counter, omote = 0, ura = 0;
srand(time(NULL));
for(counter = 1; counter <= 100; counter++) {
flip();
if(flip() == 0) {
printf("表 %d\n", flip());
omote++;
}
if(flip() == 1) {
printf("裏 %d\n", flip());
ura++;
}
}
printf("\n表: %d 裏: %d", omote, ura);
return 0;
}
int flip()
{
int i;
i = (rand() % 2);
return i;
}
コインを100回投げて表が何回、裏が何回でたかというプログラムをつくりた
いのですが、表と裏の合計が100回を超える結果になります
flip()のまま使うのがよくないのでしょうか?できれば理由を教えて
ほしいです。
0377デフォルトの名無しさん
2011/02/22(火) 15:40:05.46flip() を呼ぶ 「たびに」 0か1のどちらかがランダムに返るので、
> if(flip() == 0) {
ここで 0 が返ったあと
> if(flip() == 1) {
ここで 1 が返ると、両方カウントされます
0378デフォルトの名無しさん
2011/02/22(火) 15:40:30.74合計が100回より少なくなる場合もあるよね
0379デフォルトの名無しさん
2011/02/22(火) 15:42:50.63if(tmp == 0) {
printf("表 %d\n", flip());
omote++;
}
if(tmp == 1) {
0380デフォルトの名無しさん
2011/02/22(火) 15:44:20.450381デフォルトの名無しさん
2011/02/22(火) 15:57:40.03>>378
>>379
ありがとうございました。変数に関数の返り値をいれて
条件文をつくったら、問題なく動きました。
0382デフォルトの名無しさん
2011/02/22(火) 15:59:12.06int flip(void);
int main(void) {
int counter, omote = 0, ura = 0;
srand(time(NULL));
for(counter = 0; counter < 100; counter++) {
if(flip() == 0) {
printf("表 %d\n", flip());
omote++;
} else {
printf("裏 %d\n", flip());
ura++;
}
}
printf("\n表: %d 裏: %d", omote, ura);
return 0;
}
int flip(void) {
return rand() % 2;
}
0383デフォルトの名無しさん
2011/02/22(火) 16:03:55.57rand()の下位ビットは乱数性が悪いのでRAND_MAX / 2との
大小で偶奇を決めるのが普通。
0384デフォルトの名無しさん
2011/02/22(火) 16:49:32.17高品質の乱数が欲しければ探すか作れとしか言いようがないだけだ
0385デフォルトの名無しさん
2011/02/22(火) 17:17:27.97http://ja.wikipedia.org/wiki/%E7%B7%9A%E5%BD%A2%E5%90%88%E5%90%8C%E6%B3%95
下位ビットのランダム性が低い。特にMが偶数の場合(コンピュータでの実装が
楽であるために、Mに2の冪を採用した場合はこれに当たる)、最下位ビットは、
同じものが出続けるか、0と1が交互にでるかのどちらかである。すなわち、偶
数ばかりが出る、奇数ばかりが出る、偶数と奇数が交互に出る、のどれかにな
るということである(最大周期ならば偶数と奇数が交互に出る)。
0386デフォルトの名無しさん
2011/02/22(火) 17:21:50.20自分で確認してみな
0387デフォルトの名無しさん
2011/02/22(火) 18:03:16.710388デフォルトの名無しさん
2011/02/22(火) 18:19:19.30>>386-387
> そんな実装依存の使い方が「普通」であってたまるか
0389デフォルトの名無しさん
2011/02/22(火) 18:47:13.03ふじこりやがってw
0390デフォルトの名無しさん
2011/02/22(火) 18:52:36.38本気で疑似乱数を作りたければ自作すれば良い
0391デフォルトの名無しさん
2011/02/22(火) 19:02:52.09376 の要求を rand で達成できるかどうかを
あらゆる要求を rand で達成できるかどうかに
すり替えただけの詭弁に騙されるかっての
本気で疑似乱数が作りたければ
どうぞご勝手に
0393384
2011/02/22(火) 19:09:44.680394デフォルトの名無しさん
2011/02/22(火) 19:17:46.50>376 の要求を rand で達成できるかどうかを
本当に目くそ鼻くそだな
>>376の確率が1/2にならないって話なら分かるがそれ以前の問題だ
0395デフォルトの名無しさん
2011/02/22(火) 19:18:28.51悪くないルールだと思う
それでも(品質や速度的な意味で)満足できないなら、
別のもっとまともな実装を探すか書くかしかない
0396デフォルトの名無しさん
2011/02/22(火) 19:20:56.350397デフォルトの名無しさん
2011/02/22(火) 19:22:58.500398デフォルトの名無しさん
2011/02/22(火) 19:26:12.56おまじないってするなら、
RAND_MAX % N
分の振り直しも入れろ
まぁ、それでも信用ならんのがrand()だけどな…
>>383 は結局 http://www.kouno.jp/home/c_faq/c13.html#16 と同値。この話題は c-faq の昔からいわれていたこと。
つまり、>>383 は rand() の普通の使い方。
>>384 はおかしいと思いますね。
(int)((double)rand() / ((double)RAND_MAX + 1) * N)
で十分。
0401394
2011/02/22(火) 19:36:07.49>rand()の下位ビットは乱数性が悪い
悪い環境もあるって話で、悪いと決まってる訳ではない
>そんな実装依存の使い方が「普通」であってたまるか
無知なだけ
つーわけで目くそ鼻くそ
大量に乱数を必要とする場面では http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%AB%E3%82%BB%E3%83%B3%E3%83%8C%E3%83%BB%E3%83%84%E3%82%A4%E3%82%B9%E3%82%BF ですら使ってられない、線形合同の一択場合もあると思います。
そういう場合には、 http://www.kouno.jp/home/c_faq/c13.html#16 (int)((double)rand() / ((double)RAND_MAX + 1) * N) も考慮のうちでしょう。
ともあれ >>384 はおかしい。
0403デフォルトの名無しさん
2011/02/22(火) 19:41:24.53「何も考えずに」そうするんだろうけど、問題のある乱数から単純な分数作って何がしたいわけ? アフォ?
0404394
2011/02/22(火) 19:42:41.79十分かどうかは置いておいて、それは振り直しとは全く違う
まぁ、この話題は、もう書き込んようにする
0405デフォルトの名無しさん
2011/02/22(火) 19:43:29.58例えばメルセンヌツイスタのような、
もっと現代的な実装が早く広まればいいんだけどね
0406デフォルトの名無しさん
2011/02/22(火) 19:47:07.500407デフォルトの名無しさん
2011/02/22(火) 19:49:57.96問題のある乱数でも速くて大量に乱数を生成できるという特性があるなら、それを買って使う場面もあるでしょうね。
そういうときに、(int)((double)rand() / ((double)RAND_MAX + 1) * N) とするのは普通のやりかた。
処理系によってはrand() が線形合同である可能性も否定できない。
処理系依存を少なくしたいのなら、大事をとって、(int)((double)rand() / ((double)RAND_MAX + 1) * N) と書くのは好ましいと思いますが。
>>384
>そんな実装依存の使い方が「普通」であってたまるか
実装依存でもないし、普通なんです、昔から。
0409デフォルトの名無しさん
2011/02/22(火) 19:55:49.16>処理系によってはrand() が線形合同である可能性も否定できない。
普通は線形合同でしょ?下位ビット捨ててるくらいで
>処理系依存を少なくしたいのなら、大事をとって、(int)((double)rand() / ((double)RAND_MAX + 1) * N) と書くのは好ましいと思いますが。
処理系依存が嫌なら自前で実装するのが一番
数行コピペすればいいだけだし
0410デフォルトの名無しさん
2011/02/22(火) 19:56:05.12そこそこっていうか、なるはず
バイナリに偏りがあれば対衝突性を満足できない
しかしめちゃくちゃ遅いw
0411デフォルトの名無しさん
2011/02/22(火) 19:56:19.46> 速くて
具体的に何 bps を保証するんですか
> 大量に
循環周期と確率分布の保証は?
わけわかんねえ「なら」につきあってられるか ぼけ
そう言ったのが >>384 だよ
しかし、http://en.wikipedia.org/wiki/Linear_congruential_generator をみると、結構な数の処理系で rand() の実装が線形合同だったりするわけで。
0413デフォルトの名無しさん
2011/02/22(火) 20:09:01.50ふじこの日でもあるのか?
0414デフォルトの名無しさん
2011/02/22(火) 20:09:54.67バイナリを使うのは最初(srand)だけで、2回目以降は、
前回のハッシュの結果をバイナリとして使えば、偏らないと思う。
まぁ、それでも重いか…
0415414
2011/02/22(火) 20:12:14.650416デフォルトの名無しさん
2011/02/22(火) 21:02:13.28アホはお前。ソースはcomp.lang.cのc-faq
http://c-faq.com/lib/randrange.html
c-faqも知らねーガキは煙出るまでオナニーしてろ。
0417デフォルトの名無しさん
2011/02/22(火) 21:08:42.15comp.lang.c ってなんですか?fj?
2chよりも荒れまくっているあそこですか?
っで、くさかべさんは今でもご健在ですか?
0419デフォルトの名無しさん
2011/02/22(火) 21:30:31.19bccが動くかは知らんが、パスを追加するなら
コントロールパネル→システム→システムの詳細設定→環境変数→システム環境変数
0420デフォルトの名無しさん
2011/02/22(火) 21:32:55.80fj.lang.c
faqが出来たころはどっち?
0421デフォルトの名無しさん
2011/02/22(火) 21:34:28.69おまえ本当に何も考えてないのな
# アフォってフレーズは読んでるんだよな、こいつw
http://katsu.watanabe.name/cgi-bin/ancientfj/namazu.cgi
で調べてみると、fj.lang.c の時代のようですね。
0423デフォルトの名無しさん
2011/02/22(火) 21:52:45.28脳軟化おこしかけてる骨董品のくせにcomp.lang.cを知らねーのか?
>>412
c-faqはお前のようなバカに読ませるために蓄積されたんだよ。
足りないおつむで考えるのは止めて、c-faqをすべて暗記した方が良いぞ。
0424デフォルトの名無しさん
2011/02/22(火) 22:01:09.69自分ができないことを人に言う手合いか?
暗記したところでどうだっていう以前の問題だが
0426デフォルトの名無しさん
2011/02/22(火) 22:43:39.47c-faqはお前のようなバカに読ませるために蓄積されたんだよ。
足りないおつむで考えるのは止めて、c-faqをすべて暗記した方が良いぞ。
>>424
お前は思考するおつむを持っていないのだから、お経を諳んじるように
全て暗記するところから始めろ。
>>425
すまん、後半はアンカーを間違えた。
0427デフォルトの名無しさん
2011/02/22(火) 23:13:28.420428デフォルトの名無しさん
2011/02/22(火) 23:14:50.630429デフォルトの名無しさん
2011/02/22(火) 23:16:10.06サンクス、Qtスレ行ってくる(`・ω・´)
0430デフォルトの名無しさん
2011/02/22(火) 23:17:21.24今は行かない方が・・・
0431デフォルトの名無しさん
2011/02/23(水) 00:15:02.57勉強するにしても無知すぎて何を勉強すれば実現できるかわからない。どうぐぐっていいかもわからない。
0432デフォルトの名無しさん
2011/02/23(水) 00:16:01.890433デフォルトの名無しさん
2011/02/23(水) 00:16:38.030434デフォルトの名無しさん
2011/02/23(水) 00:16:59.56Visual C# Express なら簡単にGUIアプリが作れる。解説もたくさんあるし。
0435デフォルトの名無しさん
2011/02/23(水) 00:21:11.920436デフォルトの名無しさん
2011/02/23(水) 00:30:40.33こんなソフトの一部の機能/部品をまず手始めに作ってみよう。
0437デフォルトの名無しさん
2011/02/23(水) 00:32:02.15ネットに転がってる例も多いし、VBだと外のAPI使う時に型間違うし
0438デフォルトの名無しさん
2011/02/23(水) 00:32:44.250439デフォルトの名無しさん
2011/02/23(水) 00:33:46.180440デフォルトの名無しさん
2011/02/23(水) 00:37:18.470441デフォルトの名無しさん
2011/02/23(水) 00:39:27.93無料ので良いんじゃない。
どうしても GCC が使いたければ Eclipse で。
じゃなきゃ、Microsoft Visual Stadio Express で。
暫くすれば、息子に教えを乞うようになるかもw
0442デフォルトの名無しさん
2011/02/23(水) 00:51:45.810443デフォルトの名無しさん
2011/02/23(水) 01:07:26.95恐らく挫折率が高すぎるのでオススメしない
教師無しの初学だし、pythonが良いと思うぞ
無料のドキュメント多いし。
Cでポインタとか、C++でどうでも良い知識覚えても仕方ないし。
子供が学習する分には、Squeakとかでも良さそう。
将来の仕事のこと考えて、JavaやC#を覚えても、
10年後に、どうなってるかなんて読めないし
気合い入れてアルゴリズムを学ぶなら、topcoderとか。
Racket schemeって環境でSICPでも解けば、
将来は良い大学に入って、良い会社に就職できるんでね?
0444デフォルトの名無しさん
2011/02/23(水) 01:19:03.49ついでに算数と英語の勉強もさせておけ
ルービックキューブをもの凄い速さで解いたりとか、
暗算が得意とか、そんな感じのセンスがいる
若いうちからでも無理そうなら、興味なんてさっさ捨てて、
子供には柔道か剣道をやらせて警察官を目指せ。
0445デフォルトの名無しさん
2011/02/23(水) 01:21:23.96UNIX系で始めるならPythonでも何でもいいんじゃないの。どうせ文字しか出さないんでしょ。
0446デフォルトの名無しさん
2011/02/23(水) 01:23:33.580447デフォルトの名無しさん
2011/02/23(水) 01:25:08.66開発環境にサンプルコードが大量についてくるからそれを弄るだけでも面白い
環境設定がラクチン
開発環境が軽いのでヘボスペックPCでも動く
音を鳴らしたり、絵を表示するのが楽なのでバカゲーを作るのには最適
ちょっと凝ったことをしようとすると途端に面倒になる(他の言語でやるよりも)
Windows でしか動かない
数値計算が遅い
バカにされるw
0448デフォルトの名無しさん
2011/02/23(水) 01:25:22.690449デフォルトの名無しさん
2011/02/23(水) 01:30:55.43SDL、tk、Gtk、Qt、OpenGL、GAE
色々なものが動くだろ
Windowsでポトペタとか、せっかくの若い芽を
土方に仕立て上げるようなもの
0450デフォルトの名無しさん
2011/02/23(水) 01:40:44.48必要なライブラリなんかはパッケージマネージャーに任せれば、
Windowsよか環境を整えるの楽でしょ
0451デフォルトの名無しさん
2011/02/23(水) 01:52:33.61息子想いのおじちゃんには JavaScript がお勧めだ。
コンパイラなんかなくても、ウェブブラウザだけあれば
こんな 3D プログラムも作れちゃうぜ。
https://sites.google.com/site/hackthewebgl/learning-webglhon-yaku/the-lessons
C の知識が古びることはない(C すなわち マシン語 すなわち ノイマン型計算機に通じるものがあります。)ですから、
息子さんの興味が自由に育つままに放っておいて構わないんじゃないですか。
いろいろいわれていますが、数あるプログラミング言語/環境のなかから、結構難しいといわれる C を敢えてやろうというのなら、それだけで先見の明があるでしょう。
つ http://cruel.org/freeware/hacker.html
コンパイラややっぱり Visual C++ Express Edition でいいんじゃないでしょうか。
無料のものは、他には、
Borland C 5.5
GNU Compiler Colection(gcc)
あまりみないけど Watcom とかが手に入りやすく扱いやすいでしょう。
>Cでポインタとか、C++でどうでも良い知識覚えても仕方ないし。
c++ にはどうでもいいがらくたが多いと思いますが、c のポインタは本質的なものではないでしょうか?機械語と一対一に対応するものですし。
0454デフォルトの名無しさん
2011/02/23(水) 08:17:05.980455デフォルトの名無しさん
2011/02/23(水) 09:11:13.78{
ABC_A,
ABC_B,
ABC_D
} ABC;
この書き方って問題ある?
VS2008でコンパイルすると、
一番最後のところで
error C2143: 構文エラー : ';' が '識別子' の前にありません。
fatal error C1004: 予期せぬ EOF が検出されました。
のエラーが出るんですけど。
ググる限り特に問題ないような気はするんですがー。
他に問題あるけどエラー箇所はここになってる。とか?
0456デフォルトの名無しさん
2011/02/23(水) 09:22:30.71wingdiが定義している型と衝突するが、エラーメッセージはそれではない。
お前が人に言えない恥ずかしい間違いをしている可能性120%
0457デフォルトの名無しさん
2011/02/23(水) 09:27:43.720458デフォルトの名無しさん
2011/02/23(水) 09:32:05.88自衛してるんだから金持ってそうだね
ケチらないでVS買えよ
0459デフォルトの名無しさん
2011/02/23(水) 10:11:17.30寧ろお前の頭が抜けている。
>>455
そこだけ見たら、>456の言うように問題が無いように見える。
コンパイラがそこに辿り着く前に問題があると思う。
インクルードしているファイルがあるなら順に削ってみるか、
プリコンパイルの指定があるなら一旦解除してみるとか。
0460デフォルトの名無しさん
2011/02/23(水) 10:27:19.67>>459
多分ここには問題ないと思います。
これが記載されてるヘッダーファイルじゃない
ヘッダーファイルでもエラーが起きてたんだけど、
そこでのエラーを無くしたらとりあえずエラーは消えました。
まぁ、まだ正常終了したわけじゃないからなんともだけど。
0461デフォルトの名無しさん
2011/02/23(水) 10:30:47.900462デフォルトの名無しさん
2011/02/23(水) 10:34:04.13どんなエラーだったんだ?
0463デフォルトの名無しさん
2011/02/23(水) 10:34:50.690464デフォルトの名無しさん
2011/02/23(水) 10:39:27.500465デフォルトの名無しさん
2011/02/23(水) 11:17:48.89後ろの行が実際におかしいというのは無い。
0466Perl忍者lvl2 ◆M5ZWRnXOj6
2011/02/23(水) 17:21:34.430467デフォルトの名無しさん
2011/02/23(水) 18:02:20.970468デフォルトの名無しさん
2011/02/23(水) 20:07:52.45アルゴリズムや数値計算、OSだとか理解してないと
文系コーダーと変わらん
0469デフォルトの名無しさん
2011/02/23(水) 20:10:08.380470Perl忍者 ◆M5ZWRnXOj6
2011/02/23(水) 20:22:40.83死ね
0471デフォルトの名無しさん
2011/02/23(水) 20:56:59.650472デフォルトの名無しさん
2011/02/24(木) 16:24:14.300473デフォルトの名無しさん
2011/02/25(金) 23:20:30.58復号化するときには32バイトの初期値を使って復号するのですが、
平文を間違って復元すると元に戻せなくなります。
暗号文に特定パターンのヘッダを入れることも考えたのですが、
平文と暗号文を識別する何かいい方法はないでしょうか?
よろしくお願いします。
0474デフォルトの名無しさん
2011/02/25(金) 23:28:02.79なあ、スレタイ読めないの?
0475デフォルトの名無しさん
2011/02/25(金) 23:39:44.390476デフォルトの名無しさん
2011/02/26(土) 00:07:59.65拡張子変えるのはダメなの?
0477デフォルトの名無しさん
2011/02/26(土) 00:13:48.310478デフォルトの名無しさん
2011/02/26(土) 00:14:32.53フラグ+データ
フラグで平文・暗号文を示して、データにはフラグに沿った文を入れる
暗号・復号化はフラグを見て、データ部分に対して行い、フラグを適切に修正して出力
0479デフォルトの名無しさん
2011/02/26(土) 00:16:41.200480デフォルトの名無しさん
2011/02/26(土) 00:18:35.330481デフォルトの名無しさん
2011/02/26(土) 00:24:50.39悪戯とか偽装とかが嫌ならハッシュでも追加したら?
元のデータのハッシュ(md5やsha1)をファイルの先頭に入れて、それも含めて暗号化
復号後に、ハッシュを確認して一致すれば、上書きでOK
0482デフォルトの名無しさん
2011/02/26(土) 00:50:06.130483デフォルトの名無しさん
2011/02/26(土) 01:01:30.210484デフォルトの名無しさん
2011/02/26(土) 01:01:53.02暗号化されてるデータに対して、さらに公開鍵暗号って何のための暗号化だよ
0485デフォルトの名無しさん
2011/02/26(土) 01:09:32.630486デフォルトの名無しさん
2011/02/26(土) 01:20:26.27int main(void){
prinf("こんにちは");
back 0;
}
エラー
0487デフォルトの名無しさん
2011/02/26(土) 01:23:32.33何から作ればいいの?
0488デフォルトの名無しさん
2011/02/26(土) 01:23:48.73署名だろ。改ざん防止のため。
0489デフォルトの名無しさん
2011/02/26(土) 01:24:41.16友達
0490デフォルトの名無しさん
2011/02/26(土) 01:25:35.40作る前にまず友達全員にアドレスを聞いて、データ件数を見極める
それから最適な実装方法を考えよう
0491sage
2011/02/26(土) 01:26:32.09よろしく^^v
作り方知ってる?
0492デフォルトの名無しさん
2011/02/26(土) 01:27:30.34何で、暗号化されたものに対して署名が必要なんだって話
署名が必要なのは平文に対してだろ
0493デフォルトの名無しさん
2011/02/26(土) 01:30:56.84だから、偽装を防ぐためにハッシュを使うなら、ハッシュに公開鍵暗号で暗号かけないとダメ
ハッシュは公開鍵暗号の秘密鍵で暗号化して、データは共通鍵で暗号化する
ハッシュとデータを一緒に暗号化したら偽装防止にならない
0494デフォルトの名無しさん
2011/02/26(土) 01:31:06.59件数は5件ぐらいで登録、閲覧、コピー、修正、削除の機能が上手く動けばいいらしい
つかどうでもいいけど俺マジで友達少ないねん
0495デフォルトの名無しさん
2011/02/26(土) 01:33:10.70まずは紙の候補から決めようじゃなイカ?
サイズはA5が良いかA6良いか、
ベースとなる色は何色が良いか決めようじゃなイカ?
0496デフォルトの名無しさん
2011/02/26(土) 01:34:42.620497デフォルトの名無しさん
2011/02/26(土) 01:37:54.54>ハッシュとデータを一緒に暗号化したら偽装防止にならない
良く考えろ
暗号化された状態のデータを偽装ってどうするつもり?
すでに暗号が破られた状態が前提の話になってないか?
0498デフォルトの名無しさん
2011/02/26(土) 01:38:50.61GUIで作るの?
0499デフォルトの名無しさん
2011/02/26(土) 01:41:31.07暗号化が破られない前提なら、ハッシュなんて要らないだろ
0500デフォルトの名無しさん
2011/02/26(土) 01:46:49.53定型文を固定の位置で使うと、暗号を破る種にされるから
推測しようのない、ハッシュを使うんだが?
0501デフォルトの名無しさん
2011/02/26(土) 01:47:24.57構造体の配列を動的に確保しろ
0502デフォルトの名無しさん
2011/02/26(土) 01:50:25.70読み込んで固定パターンと一致するかどうか検査をし、あっていれば処理を
続行するということをやりたいです。
以下のコードがうまくいきません。どう直せばいいのか教えてください。
よろしくお願いします。
int main(int argc,char argv[]){
char *buf[32],buf2[32];
FILE *fp;
buf[32]="Don't Edit Header"
fp=fopen(argv[1],"wb");
fwrite(buf[32],1,sizeof(buf),fp)
fclose(fp);
fp=fopen(argv[1],"rb");
fread(buf2,1,32,fp);
if(strcmp(buf[32],buf2))
printf("暗号ファイルではありません\n");
return 0;
}
0503デフォルトの名無しさん
2011/02/26(土) 01:50:26.66ファイルが正常に復元できないなら上書きしなかったところでファイルは壊れてるけどさ
0504デフォルトの名無しさん
2011/02/26(土) 01:51:53.91なんだそれ?汗
とりあえず今日はここまでつくった
#include<stdio.h>
typedef struct{
char a[24], b[24];
int c,d,e,f;
}
int main(void){
int x = 1, y = 0, z = 0;
while(x){
printf("操作する番号を選んでください:"); scanf("%d",&i);
switch(i){
case 1: touroku(); break;
case 2: hennsyuu(); break;
case 3: ichiran(); break;
case 4: copy(); break;
case 5: sakujo(); break;
case 6: x = 0; break;
}
}
}
↑これって何言語なん?
0505デフォルトの名無しさん
2011/02/26(土) 01:52:18.80ハッシュはメッセージと一対一に対応するからいくらでも推測可能
そういう目的に使うならハッシュではなく、乱数パディングを使う
0506デフォルトの名無しさん
2011/02/26(土) 01:53:04.00そうだね
0507デフォルトの名無しさん
2011/02/26(土) 01:54:06.51何でやねん
その元のメッセージ自体も一緒に暗号化されてるのに
推測できるって、あんたエスパーでっか?
0508デフォルトの名無しさん
2011/02/26(土) 01:57:30.15だから、
暗号化されたメッセージからメッセージを知るのと
暗号化されたメッセージとそのハッシュからメッセージを知るのとは
難易度は何ら変わらないってこと。
0509デフォルトの名無しさん
2011/02/26(土) 01:58:31.590510デフォルトの名無しさん
2011/02/26(土) 02:00:24.93ここから一個も進まん
プロトタイプ宣言してから自作関数作るねんけど
ファイル操作わからん
お勧めのサイトないですか?
0511デフォルトの名無しさん
2011/02/26(土) 02:00:40.10パスワード使った暗号化の話だったつもりだけど、違うみたいね
プログラム側で固定のキーを使う暗号であれば、あんたの言ってることは正しいよ
0512デフォルトの名無しさん
2011/02/26(土) 02:00:46.43いや、平文か暗号文か判定するために特定パターンを使うのはどうか聞いているだけ。
そこにハッシュをどうのこうのと無駄な意見が出てきた。
0513デフォルトの名無しさん
2011/02/26(土) 02:01:46.53パスワードを使った暗号化の話だったらなにか違うの?
0514デフォルトの名無しさん
2011/02/26(土) 02:06:43.04全然違う
平文をツールが持ってるキーで暗号化すると、
その平文とそのハッシュから、キーを特定するために、
定型文を使うのと何ら変わりはない
暗号化するためのキーがパスワードであれば、
キーを特定するための手がかりにはならない
0515デフォルトの名無しさん
2011/02/26(土) 02:08:03.45固定パターンと一致するかどうか検査して、一致したら処理を続けるという事
をやりたいのですがうまくいきません。教えてください。
どのようにプログラムを書けばいいでしょう?
よろしくお願いします。
0516デフォルトの名無しさん
2011/02/26(土) 02:14:31.08明日の「教えてクン」を目指す、若き戦士達に以下の文章を捧げる。
日々精進し、パソコンヲタクどもの親切を蹂躙してやれ。
1. 努力を放棄すること
いやしくも「教えてクン」たるもの、努力をしてはならない。
過去ログを読んだり、検索してはいけない。
「英語は苦手なので、分かりません。」は、高く評価できる。
辞書片手にマニュアルやReadMeを読むなど、決してしてはならない。
他力本願と言われようと、自分で調べたり試行錯誤したりせず、他人の努力の結果を搾取するのが、正しい「教えてクン」である。
また、「もう何が悪いのかサッパリ分かりません。」と言ってふてくされるのも有効である。
「サッパリ」という単語が「やる気の無さ」を効果的に表現している。
「原因を特定するには、何をすべきでしょうか?」と訊いてしまうと自己の積極性が現れてしまうので、「教えてクン」失格である。
2. 情報を開示しないこと
使用OSや、機器構成などの必須の情報を知らせてはならない。
マザーボード名やBIOSのバージョンも同様だ。
具体的なアプリ名やバージョンも隠蔽すべきだ。
「DVD再生ソフト」のように曖昧に表記しておけばよい。
反対に「前から欲しいと思っていた○○」とか「安売りされていた ○○」等の「どうでもいい情報」は、どんどん書いてやれ。
トラブルの場合は、状況を正確に記述してはならない。
「なんだかうまく動きません。」とか「エラーが出ます。」等と具体的なことは何も書かないことが重要である。
また、自分の試してみた事も具体的に書いてはいけない。
考えられる組合せのマトリックスを作成し、状況を整理するなどもってのほかである。
最悪の場合、それだけで問題が解決してしまうこともあるのだ。
「いろいろやってみたけど、動きません。」が理想的だ。
0517デフォルトの名無しさん
2011/02/26(土) 02:15:12.62「教えてクン」は、孤高の戦士である。
相手のことを考えるようでは教えてクン失格というものだ。
以下のような行動が、望ましい。
初心者であることを高らかに宣言し、初心者向けの丁寧で分かりやすい説明を強要する。
専門用語の使用を禁じておくとさらに効果的である。
簡潔な説明を禁じられたヲタクどもは、同じ内容を説明するのに、何倍もの労力を強いられる。
自分は努力せず、相手には多大な努力をさせることこそが「教えてクン」の真骨頂である。マルチポストも有効である。
そのBBSを信用していないことを明確に示せる。
「どうせ、お前らじゃ分からんだろう。」という意志表示として高く評価できる。
もちろんマルチポストの非礼をあらかじめ詫びてはならない。
それでは、単なる「急いでいる人」になってしまう。
それは、教えてクンではない。質問のタイトルは、「教えてください。」で良い。
タイトルを読んだだけでは「何に関する質問」か全く分からない。
そういう努力は、答える人間にさせれば良いのだ。
とにかく、答える人間が答えやすいように気を使って質問してはならない。
傲慢で不遜な態度が必須である。「聞きたいことがあります。」など、プロの仕事であろう。
最後に、言うまでも無いことだとは思うが、答えてくれた人達に礼の言葉を返すなど言語道断である。
せっかく「教えてクン」を貫いてきたのに、最後にお礼を言っているようでは、画竜点睛を欠いていると言わざるを得ない。
質問だけしておいて、後はシカトが基本である。
上級テクニックとして、「そんなことはもう試しました。」とか、「そこまで初心者じゃありません。」などと言って、回答者の神経を逆なでしておけば完璧である。
以上のことを踏まえて質問すれば、君も立派な「教えてクン」である。
ビバ!教えてクン! 教えてクンに栄光あれ!!
0518502
2011/02/26(土) 02:20:35.81>>502
に書いてあります。
よろしくお願いします。
0519デフォルトの名無しさん
2011/02/26(土) 02:27:43.240520デフォルトの名無しさん
2011/02/26(土) 04:35:40.42まぁ、絶対ネタだろうなと思いつつ
#include <stdio.h>
#include <string.h>
#define BEL 7
#define HEADER_SIZE
int main( int argc, char *argv[] ) {
char buf[HEADER_SIZE], buf2[HEADER_SIZE];
FILE *fp;
memset( buf, BEL, sizeof( buf ) );
strcpy( buf, "Don't Edit Header" );
fp = fopen( argv[1], "wb" );
fwrite( buf, sizeof( buf[0] ), sizeof( buf ), fp );
fclose( fp );
fp = fopen( argv[1], "rb" );
fread( buf2, sizeof( buf2[0] ), sizeof( buf2 ), fp );
fclose( fp );
if( strcmp( buf, buf2 ) )
printf( "暗号ファイルではありません\n" );
return 0;
}
0521デフォルトの名無しさん
2011/02/26(土) 04:37:46.09#define HEADER_SIZE 32
0522502
2011/02/26(土) 05:01:01.830523デフォルトの名無しさん
2011/02/26(土) 11:01:13.01C ファイル操作 とかでググればいくらでも出てくるだろうに。
一応
http://www9.plala.or.jp/sgwr-t/c/sec17.html
http://www.eonet.ne.jp/~nao2/c/c_file.html
何がやりたいのか分からんけど変数名は意味のある変数名にした方がよろしい。
0524デフォルトの名無しさん
2011/02/26(土) 11:04:14.71while (!mywrite(fp));の意味が分かりません。
http://codepad.org/mSjQm1bU ←ソースです
0525デフォルトの名無しさん
2011/02/26(土) 11:05:20.96mywrite(fp) の戻り値が 0 の間ループ
0526デフォルトの名無しさん
2011/02/26(土) 11:28:23.400が返ってきたらwhile( !0 )→while(1)になって
fclose(fp);
return 0;
で終了じゃないのでしょうか。
0527デフォルトの名無しさん
2011/02/26(土) 11:30:11.34while(0) になったらループを抜けて終了する
0528デフォルトの名無しさん
2011/02/26(土) 11:38:52.83今回はループ範囲がないのに何故自作関数がループしてるのか疑問なのですが
0529デフォルトの名無しさん
2011/02/26(土) 11:46:17.07while (式) 文
のような構文で、式が真のあいだ文を繰り返し実行する
文は単一の文でも複文でもよく、複文の場合は { } で囲む
今回のケースでは while (!mywrite(fp)) の直後にある ; (空文) がその繰り返す文にあたる
0530デフォルトの名無しさん
2011/02/26(土) 11:48:28.88厳密な規格表現云々は置いておくとして、
while (!mywrite(fp){/* do noting */} と同じこと
while の () 内はループ毎に評価され、変数でも戻り値のある関数でも良い
0531デフォルトの名無しさん
2011/02/26(土) 11:53:34.29i=0;
while(i++<5){ /* 何もしない */}
0532デフォルトの名無しさん
2011/02/26(土) 11:54:24.31while (!mywrit(fp)){
//何もしない
};
で無限ループじゃね?
0533デフォルトの名無しさん
2011/02/26(土) 11:59:18.030以外は真
0は偽
!偽は真
!真は偽
0534デフォルトの名無しさん
2011/02/26(土) 12:01:14.130535デフォルトの名無しさん
2011/02/26(土) 12:03:15.52ループ範囲が空文だからwhileを抜けると間違った解釈をしていました。
これは継続条件式がループしてるんですね。
0536デフォルトの名無しさん
2011/02/26(土) 12:05:11.88if(mywrit(fp) != 0) break;
}
そうですね。条件式はループをまわるごとに必ず毎回評価されますし、そしてその条件式のところに関数があれば、その関数を毎回実行することになりますから。
0538デフォルトの名無しさん
2011/02/26(土) 12:28:24.48空文だからといって勝手にwhileを抜けたりはしないよ
0539デフォルトの名無しさん
2011/02/26(土) 12:33:27.43「キー」と「パスワード」が何を意味しているのかよく分からないけど、
暗号化の鍵として使う「キー」が、ツールの中にあるか、ユーザーの頭の中(?)にあるか、によって何かが変わると言ってる?
何も変わらんだろ。
0540デフォルトの名無しさん
2011/02/26(土) 13:27:15.24全く違うのが分からないのか?
まず、暗号文の内容が定型文+メッセージであれば、
その定型文があること自体が、クラックする場合の種になることは分かるよな?
次に、ハッシュ+メッセージの安全性を考える場合に、
ツールの中に特定のキーがある場合、クラックする人間が
そのツールを使って、暗号化すれば、平文の時のハッシュを知ってるから
そのハッシュが、定型文と同じでクラックの種に使えるのも分かるよな?
一方、ユーザの頭の中のパスワードがキーの場合、
クラックする人間に平文のハッシュなんて予想出来ないから、
ハッシュ+メッセージは、単なるメッセージのみと同じってことが分からないか?
つまり、暗号をクラックするためのヒントを与えずに、
そのファイルが有効であるか確認するために、ハッシュは有効なんだよ
0541デフォルトの名無しさん
2011/02/26(土) 13:36:41.89先ず、上3行だけ。
繰り返しになるが、
「定型文+メッセージ」の暗号文からメッセージを知る難易度
と
「メッセージから一意に生成される文+メッセージ」の暗号文からメッセージを知る難易度
は
何ら変わらない。
この難易度を挙げるには、乱数パディングを使う。
0542デフォルトの名無しさん
2011/02/26(土) 15:01:04.540543デフォルトの名無しさん
2011/02/26(土) 15:24:30.79>「定型文+メッセージ」の暗号文からメッセージを知る難易度
>と
>「メッセージから一意に生成される文+メッセージ」の暗号文からメッセージを知る難易度
>は
>何ら変わらない。
何で、暗号強度が高いこと前提なの?
俺が言ってるのは暗号強度を変えない方法だよ?
理解できなかった?
>この難易度を挙げるには、乱数パディングを使う
一旦強度を低下させといて、それを補うために乱数パディングとか
もうアホじゃないかと…
0544デフォルトの名無しさん
2011/02/26(土) 16:29:16.790545デフォルトの名無しさん
2011/02/26(土) 16:30:41.320546デフォルトの名無しさん
2011/02/26(土) 17:01:51.000547デフォルトの名無しさん
2011/02/26(土) 17:09:18.90>>473-475
の時点で終わってる話
0548デフォルトの名無しさん
2011/02/26(土) 17:14:10.84スマンね
ただ、あまりの大嘘で終わらせるのも嫌なもんで、
乱数でパディングする必要があるのは何故なのかとか、
どの様なアルゴリズムにおいて有効なのかとか、正しい知識を持ってれば
>>541が共有鍵と個人鍵において、どれ程の差があるか分かるはず。
0549デフォルトの名無しさん
2011/02/26(土) 17:36:04.70enum で列挙定数の最大個数をコンパイル時にチェックして超えていたらコンパイルエラーとしたい。
例えば enum E{ E_A, E_B, E_C, …, E_MAX }; で必要に応じて列挙定数を増やしながらプログラミング
していきたいんだけど、列挙定数の最大個数は256未満にしたいとか感じ。
で、これを実行時ではなくコンパイル時にチェックしたい。
手で数えるとかは無しで、どうすりゃできるのかな?
0550デフォルトの名無しさん
2011/02/26(土) 17:46:18.460551デフォルトの名無しさん
2011/02/26(土) 17:49:59.52素直にE_1, E_2, E_3って増やせば?と思ったり…
直感的には難しそうで、できても、トリッキーなコードになりそうな気が…
0552デフォルトの名無しさん
2011/02/26(土) 17:59:59.180553デフォルトの名無しさん
2011/02/26(土) 18:00:17.59外部ツール作ればできるだろうけど、出来ればビルド環境依存にはしたくないのです。
>>551
例では簡単なネーミングにしてるけど、実際には意味のあるネーミングを使いたいし
間に挿入したい時もあるので連番ネーミングにはしたくないのです。
まずはトリッキーなコードでも良いのでアイデア提供お願いします。
0554デフォルトの名無しさん
2011/02/26(土) 18:01:34.77仮想実行環境のバイトコード
0555デフォルトの名無しさん
2011/02/26(土) 18:02:54.58考えてはみるけど期待しないでね
それよりも普通に#defineで定義すれば良いんじゃね?
0556デフォルトの名無しさん
2011/02/26(土) 18:05:56.370557デフォルトの名無しさん
2011/02/26(土) 18:11:35.47列挙定数の宣言時に値を指定しないのであれば、一番最後の E_MAX が (列挙定数の数) - 1 になるんですけど。
0558デフォルトの名無しさん
2011/02/26(土) 18:20:20.78コンパイル時にチェックしたい。
って事だから無理でしょ
0559デフォルトの名無しさん
2011/02/26(土) 18:22:48.26たしかに。asset.h でも使えるのならいいのですが。
0560549
2011/02/26(土) 18:23:16.80仮想実行環境とかいっても、Javaとかみたいな大げさなもんじゃないので^^;
>>557
はい、実際には個数そのものではなく 0 から始まる連続した正の整数を扱いたいのです。
なので、例で言えば E_MAX >= 256 とかでコンパイルエラーにしたいのです。
0561559
2011/02/26(土) 18:23:40.200562デフォルトの名無しさん
2011/02/26(土) 18:30:18.040563デフォルトの名無しさん
2011/02/26(土) 18:39:01.25ここらへん使うんかな?
0564デフォルトの名無しさん
2011/02/26(土) 18:40:07.400565デフォルトの名無しさん
2011/02/26(土) 18:49:13.60ああ、そっか#line使えば良いんだな
あとは__LINE__との比較でいける。
まぁ、その後の__LINE__がめちゃくちゃになるから、
この定義だけ別ファイルとかにしないと迷惑だけど…
// 1要素毎1行
#line 0
enum E{
E_A,
E_B,
E_C,
E_MAX
};
#if __LINE__ > 258
#error "E_MAX >= 256"
#endif
0566デフォルトの名無しさん
2011/02/26(土) 18:50:25.68コンパイラによるけど gcc ならこの手が使える
static char dummy[255-E_MAX]; // E_MAX>=256 の時コンパイルエラーにする
0567デフォルトの名無しさん
2011/02/26(土) 18:54:40.12void dummy_func(void)
{
char dummy[255-E_MAX];
}
0568デフォルトの名無しさん
2011/02/26(土) 19:00:47.18そんなので弾けるなら、適当な場所で下記でOK
sizeof( char [255-E_MAX] );
0569デフォルトの名無しさん
2011/02/26(土) 19:13:46.23sizeof か
やるではないか
0570デフォルトの名無しさん
2011/02/26(土) 19:26:01.06sizeof( char [負の整数] );
でいつでもコンパイルエラー出せるのかー
0571549
2011/02/26(土) 19:36:45.33�dクス。
今手元にコンパイラがないので直ぐに確認できないけど
enum E{
#define E_START_LINE __LINE__
E_A,
E_B,
.... ,
#define E_END_LINE __LINE__
E_MAX
};
#if (E_END_LINE - E_START_LINE) >= 256
#error
#endif
なんていうのは可能なのかな?もし可能なら __LINE__ をめちゃくちゃにしなくて済みそう。
>>566-569
�dクス。
MSVCでもいけて、コンパイルエラーでないときに不要なデータ領域やコードが生成されないように
出来ればこの方法がベストですね。
0572デフォルトの名無しさん
2011/02/26(土) 19:45:07.03両方とも__LINE__に展開される
#if (__LINE__ - __LINE__) >= 256 // 必ず 0 になる
無理やり数値として扱う方法がないか考えたが、多分、無理
0573デフォルトの名無しさん
2011/02/26(土) 20:32:59.74拡張子を付けるにはどのようにすればいいのでしょう。
また決まった拡張子のとき特定のソフトに関連付けるためにはどのようにすれば
いいのか解りません。教えてください。よろしくお願いします。
0574デフォルトの名無しさん
2011/02/26(土) 20:40:45.440575デフォルトの名無しさん
2011/02/26(土) 21:20:55.79ググれで済むことだけど、突き放すのは良くないと思って、なるべく丁寧に話したが、
スレ違いっぽいので、俺はこれで最後にする。後は好きなように反論すればいい。
どちらが正しいかについては、
世の中の一般的なセキュリティプロトコルでは、ハッシュの暗号化とデータの暗号化は別であることからも明らか。
データとそのハッシュを同じ暗号鍵で暗号化するなんて馬鹿な仕様はない。
SSLでもTLSでもIPSecでも何でもいいから調べてみれば素人でもすぐ分かる。
暗号アルゴリズムは適切に組み合わせないと処理負荷だけ増えて全く安全にならない。
セキュリティを考慮しない田舎仕様で無意味にハッシュを付け足して安全にしたつもりで一人で満足できるなら、それはそれで別に良い。
馬鹿な人が無駄にCPUリソースを浪費してくれればCPUの性能向上が促されるから、コンピューター業界的にもそんなに悪いことじゃない。
ただ、そういう人は他人が使うシステムの開発には関わらないで欲しいとだけ要望しておく。
0576デフォルトの名無しさん
2011/02/26(土) 21:51:05.71アンタはCRCを知らんのかね?
ハッシュほ保存して正当性をチェックするってのは、それと同じだよ
0577デフォルトの名無しさん
2011/02/26(土) 23:03:58.860578デフォルトの名無しさん
2011/02/26(土) 23:05:51.68日付?データ?
0579デフォルトの名無しさん
2011/02/26(土) 23:08:02.27いや自分でデータって変数名付けようと思ったんだけど参考書でもdateとdataで別れてるから皆どっちなのかな〜って思って。
0580デフォルトの名無しさん
2011/02/26(土) 23:08:09.18リフレクションとか?
0581デフォルトの名無しさん
2011/02/26(土) 23:08:32.690582デフォルトの名無しさん
2011/02/26(土) 23:09:47.01日付以外でdate使ってるなら、そんな参考書捨ててしまえ
0583デフォルトの名無しさん
2011/02/26(土) 23:12:33.830584デフォルトの名無しさん
2011/02/26(土) 23:33:03.66デートって読めばいいのは分かるけどね
0585デフォルトの名無しさん
2011/02/26(土) 23:43:09.970586デフォルトの名無しさん
2011/02/26(土) 23:44:42.83何か腹が下りそうな気配が
あああああ
ちょっとトイレ行ってくるううう
0587デフォルトの名無しさん
2011/02/26(土) 23:47:04.70これが彼の最後の言葉となるのであった
0588デフォルトの名無しさん
2011/02/26(土) 23:50:04.82これ何?
0589デフォルトの名無しさん
2011/02/26(土) 23:50:46.26typoをdefineで逃げ切った強者が居たらしいw
#define retrun return
0590デフォルトの名無しさん
2011/02/26(土) 23:51:54.420591デフォルトの名無しさん
2011/02/26(土) 23:52:09.320592デフォルトの名無しさん
2011/02/26(土) 23:58:15.820593デフォルトの名無しさん
2011/02/26(土) 23:58:52.29関数を終了して、呼び出し元に戻る文
0594デフォルトの名無しさん
2011/02/26(土) 23:59:38.830595デフォルトの名無しさん
2011/02/27(日) 00:05:05.190597デフォルトの名無しさん
2011/02/27(日) 00:47:04.620598デフォルトの名無しさん
2011/02/27(日) 00:50:04.390599デフォルトの名無しさん
2011/02/27(日) 00:58:36.23宣伝すんなカス
0600デフォルトの名無しさん
2011/02/27(日) 01:06:04.960601デフォルトの名無しさん
2011/02/27(日) 16:31:34.410602デフォルトの名無しさん
2011/02/27(日) 16:35:10.92そこにfprintf関数でコマンドを送っています
呼び出しもとのアプリケーションの出力のみならず、
送信したコマンドやgnuplotからの各出力も同じコマンドプロンプトに表示されてしまうのですが、
これらを非表示にしたり出力先を違うコマンドプロンプトにしたりすることは可能でしょうか?
0603デフォルトの名無しさん
2011/02/27(日) 16:42:08.79ちょっとググればすぐ見つかる
http://www.akita-nct.jp/~yamamoto/lecture/2006/5E/gnuplot/html/node4.html
0604デフォルトの名無しさん
2011/02/27(日) 18:38:12.94int count_bits(unsigned x)
{int count=0;while(x){if(x&1U)count++;x >>=1;}return (count);}
int int_bits(void)
{return(count_bits(~0U));}
void print_bits(unsigned x)
{int i;for(i=int_bits()-1; i>=0; i--)putchar(((x>>i)&1U)?'1':'0');}
int main(void)
{unsigned nx;printf("非負の整数を入力してください:");
scanf("%u",&nx);print_bits(nx);putchar('\n');return (0);}
0605デフォルトの名無しさん
2011/02/27(日) 18:39:50.47まず1の補数はビットの反転ですよね?そもそも処理系によって補数って変わるんじゃないんですか?
0の補数は11111~となるけど、-1が1111・・・0だから1111・・1の数、つまり0に対する1の補数って存在
しないんじゃないんですか?そもそも1の補数か2の補数でビットが表現されてるのか処理系によって違う
んじゃないんですか?
後なんでmain関数内のscanfの書式が%uなのでしょうか?%dじゃないのでしょうか?
%uは型の大きさのときにこう指定するのであって、実際にint型の数を関数にわたすわけ
だから%dなのではないのでしょうか?
0606デフォルトの名無しさん
2011/02/27(日) 19:03:07.950607デフォルトの名無しさん
2011/02/27(日) 19:33:34.652の補数表現ではゼロはただひとつだけ
負の数が1の補数表現か2の補数表現かは処理系によって変わる
%dはint型
%uはunsigned int型
変数nxはunsigned int型
wikipedia で大体のことがわかりますよ。
http://ja.wikipedia.org/wiki/%E8%A3%9C%E6%95%B0
これによると、
「2進法における基数の補数」を略して 2 の補数
「2進法における減基数の補数」を略して 1 の補数
と呼ぶようですね。
で、
>処理系によって補数って変わるんじゃないんですか
正確には、負の数を 2 の補数とするか 1 の補数とするか、あるいはそれ以外にするかが、処理系によって変わります。
補数の概念が処理系によってかわるわけではありません。
>0の補数は11111~
○
>-1が1111・・・0
処理系によってかわります。負数を 1 の補数であらわすのならそうなります。
>1111・・1の数、つまり0に対する1の補数って存在しない。
確かに負の数を1 の補数とすると 0 の表現が二種類できます。それをどう扱うかは、(私自身は1の補数を負の数とする処理系をしらないので)よくわかりません。
>scanfの書式が%uなのでしょうか?
scanf() で入力された文字列を「符号なしの」10進数として解釈したいから、と推察されます。値をセットする変数 nx は unsigned int で宣言されています。
0609デフォルトの名無しさん
2011/02/27(日) 23:37:42.860610デフォルトの名無しさん
2011/02/27(日) 23:48:26.40sizeof は %u と教わっちまったのかな・・・
「何も考えずに」って
0611デフォルトの名無しさん
2011/02/28(月) 00:03:35.57sizeof じゃなくて l とかの長さ修飾子と勘違いしたんじゃないの とエスパーしてみるw
0612デフォルトの名無しさん
2011/02/28(月) 02:07:49.090613デフォルトの名無しさん
2011/02/28(月) 05:54:26.08ビット反転してるじゃん?
0614デフォルトの名無しさん
2011/02/28(月) 05:57:17.68ビットの反転=1の補数を求めることじゃないから
>>604はunsignedの総ビット数を求めるために全てのビットをオンにするために0を反転してるだけ
0615デフォルトの名無しさん
2011/02/28(月) 07:10:14.46任意の値のビットオフを数えることが目的ならともかく、
>>604は全ビットが立ってる状態を表しているのだから、
0のビット反転でも、(1の補数表現で)0の補数でも、表現は自由だと思うが?
0616デフォルトの名無しさん
2011/02/28(月) 07:15:49.21ビット反転=1の補数とか思い込んじゃったから>>605みたいな意味のわからないこと言い出すんだから
表現の自由とかいう問題でもないよ
0617デフォルトの名無しさん
2011/02/28(月) 07:36:03.94Cの規格上で、全てのビットが立っている状態を1の補数と読んでいるし
~演算子は、ビット単位の補数と読んでるが?
0618デフォルトの名無しさん
2011/02/28(月) 11:39:03.32何気に優秀な人もいるんだろうな
0619デフォルトの名無しさん
2011/02/28(月) 12:42:45.93それは処理系3タイプの分類としての方便でしょ
補数=補う数
なので、絶対的な値ではないよ
0620デフォルトの名無しさん
2011/02/28(月) 12:52:51.700621デフォルトの名無しさん
2011/02/28(月) 13:07:22.34ム板らしく解説すると
> -- the sign bit has the value -(2^N -1) (one's complement).
この行の補足説明で one's complement を束縛してる
0622デフォルトの名無しさん
2011/02/28(月) 13:10:02.530623デフォルトの名無しさん
2011/02/28(月) 13:14:17.020624デフォルトの名無しさん
2011/02/28(月) 13:16:09.650625デフォルトの名無しさん
2011/02/28(月) 13:17:50.060626デフォルトの名無しさん
2011/02/28(月) 16:10:59.930627デフォルトの名無しさん
2011/02/28(月) 16:13:31.390628デフォルトの名無しさん
2011/02/28(月) 16:27:54.87http://ja.wikipedia.org/wiki/%E8%A3%9C%E6%95%B0
こんぴゅーたーのせかいでは
しんすう や けたすう がしょうりゃくされたばあいは
しんすうは2、けたすうはへんすうのかたのさいずとおきかえてください
0629デフォルトの名無しさん
2011/02/28(月) 16:34:51.640630デフォルトの名無しさん
2011/02/28(月) 16:38:21.10普通にintとか宣言すれば後はビット列レベルの細かいことはコンピュータが勝手にやってくれるんじゃないんだ??
0631デフォルトの名無しさん
2011/02/28(月) 16:59:27.12扱わなくて済むなら扱う必要はないよ
でも、初心者にC言語を薦めるのは
そういったミクロな部分を学習しやすいって事だから
それを避けてCをやっても意味は薄れるよ
0632デフォルトの名無しさん
2011/02/28(月) 16:59:32.49普段はintと宣言すれば後は勝手に上手くやってくれると期待してもっと重要な部分に思考を割くべきで間違ってない
まれに細かい視点で見ないと解決できない問題もあるので知識はあった方がよい
0633デフォルトの名無しさん
2011/02/28(月) 17:04:30.51勝手にやってくれるよ。
0634デフォルトの名無しさん
2011/02/28(月) 17:36:19.24ビット操作の効率の考慮とか右シフト演算をしなければ気にする問題ではない
0635デフォルトの名無しさん
2011/03/01(火) 00:20:44.74なにかいい教材、サイトはありますでしょうか?
0636デフォルトの名無しさん
2011/03/01(火) 00:22:17.50http://www.kouno.jp/home/c_faq/
0637デフォルトの名無しさん
2011/03/01(火) 00:28:38.82ゲーム作りたいのにデータベースやサーバ サイドのプログラムを勉強したって仕方がない
0638デフォルトの名無しさん
2011/03/01(火) 00:53:35.00>>637どの分野をやりたいかにかかわらず共通してやるべき事はhttp://wisdom.sakura.ne.jp/programming/c/index.htmlで終わりでしょうか?
「動的メモリ」から発展して、データ構造(リンクリスト・バイナリツリー)を追加して習得したほうがいいでしょう。
また再帰呼び出しも押さえておきたいし、頻出のアルゴリズムも理解しておきたいし。
で、なにか数冊くらいは、書籍でマスターしたほうがいいかもしれません。
0640デフォルトの名無しさん
2011/03/01(火) 02:19:20.900641デフォルトの名無しさん
2011/03/01(火) 02:27:24.79大切なのは必要な機能を、どのような手段で実装すれば良いかを考える力を付けること
そのためには、>>640が言うとおり、自分が作りたいものを作るのが手っ取り早い
0642デフォルトの名無しさん
2011/03/01(火) 02:44:16.82ゲームとかでも良い
0643デフォルトの名無しさん
2011/03/01(火) 02:56:04.400644デフォルトの名無しさん
2011/03/01(火) 03:37:15.17とにかく何でもいいから時間が許す限り毎日何かを作ることだ。
自分だけのTIPSリファレンスを作るのもいい。とにかく何かしら作れ。
0645デフォルトの名無しさん
2011/03/01(火) 04:18:31.19最初は単純な四則演算から初めて、変数を導入して、底の変更、
少数の計算、簡単な関数の定義へとグレードアップして行くと、
大変に基礎の勉強になるらしい。
後はオープンソースで公開されているソースコードをひたすら
読んで、プログラムの構造とか、変数や関数の命名規則とか、
読み易いコードの書き方とかを勉強するのも良いと思う。
0646デフォルトの名無しさん
2011/03/01(火) 04:22:34.67ここが勉強になったよ
http://www.adachi.ne.jp/users/katz/primer/automata.html
0647デフォルトの名無しさん
2011/03/01(火) 04:27:33.60+‐使わずにビットシフトと論理演算使うのかな
0648デフォルトの名無しさん
2011/03/01(火) 04:48:18.91基礎的な構文解析が必要になるし、多倍長整数演算もいる
Windows標準添付の電卓ぐらいでも、そんなに簡単ではない
0649デフォルトの名無しさん
2011/03/01(火) 04:54:08.40RPN電卓なら構文解析もラクチンだし
0650デフォルトの名無しさん
2011/03/01(火) 04:57:59.440651デフォルトの名無しさん
2011/03/01(火) 05:00:49.450652デフォルトの名無しさん
2011/03/01(火) 05:10:59.560653デフォルトの名無しさん
2011/03/01(火) 05:31:12.86プログラミングの目的・テロスとは何かを作る事だ。それがあって初めて行動が正当化される。
即ち正義が行われると言う事だ。
非常に興味深い。他に意見のある者は?
0654デフォルトの名無しさん
2011/03/01(火) 06:55:15.800655デフォルトの名無しさん
2011/03/01(火) 14:23:59.23HW_HOGE_REG 0x8005C060
上記アドレスの3ビット目に1を立てたいのですが、
先に読み出しを行うとするとエラーになります。
unsigned long address = *(volatile unsigned long*)0x8005C060;
printf("%ld",address);
上記コードで現在の設定値を呼び出そうとし、コンパイルし実行すると、
Segmentation fault
で終了します。
なぜでしょうか?
0656デフォルトの名無しさん
2011/03/01(火) 14:26:10.70保護されてるからだろ
そこにアクセスするためには前準備が必要
0657デフォルトの名無しさん
2011/03/01(火) 15:07:57.69操作したい場合は、どのようにすればよいのでしょうか?
0658デフォルトの名無しさん
2011/03/01(火) 15:11:34.60スペシャルファイルなら ioctl とか
0659デフォルトの名無しさん
2011/03/01(火) 15:29:52.41armCPUのレジスタでアドレスも不変なので、直接触りたいです。
逆にデバイスとして操作する方法がわかりません。
0660デフォルトの名無しさん
2011/03/01(火) 15:31:59.51write only じゃないよね
0661デフォルトの名無しさん
2011/03/01(火) 15:35:21.54先に状態を確認したく、
単純に読み込みを行っていますが、それも行えません。
0662デフォルトの名無しさん
2011/03/01(火) 15:38:50.25アホすぎるwww
重要なことを忘れてる
0663デフォルトの名無しさん
2011/03/01(火) 15:39:39.10つーかまずここでエラーになってることは間違いないのか?
0664デフォルトの名無しさん
2011/03/01(火) 15:42:37.84int main(int argc, char *argv[])
{
unsigned long address = *(volatile unsigned long*)0x8005C060;
printf("%ld",address);
return 0;
}
これだけのコードです。
0665デフォルトの名無しさん
2011/03/01(火) 15:48:19.01アドレスはhttp://192.168.1.1 です
0666デフォルトの名無しさん
2011/03/01(火) 15:48:42.040667デフォルトの名無しさん
2011/03/01(火) 19:58:09.940668デフォルトの名無しさん
2011/03/01(火) 20:49:01.60winならドライバ経由で物理アドレス空間にアクセスするけど
Linuxはどうするのか知らん
0669デフォルトの名無しさん
2011/03/01(火) 21:18:08.38カーネルに居るなら 仮想アドレス≠物理アドレス は request_mem_region() と ioremap_nocache() でなんとかなる筈
ユーザーランドから叩く方法は俺も知らんけど多分無理だと思う…
0670デフォルトの名無しさん
2011/03/01(火) 22:29:30.08日本語でおkだわ
0671デフォルトの名無しさん
2011/03/01(火) 22:50:33.16これを理解できない脳力・レベルじゃ、無理だからやめれとアドバイスしているんだよ
0672デフォルトの名無しさん
2011/03/01(火) 23:07:37.70linux良く分からんが訳してみた
カーネル空間からであれば、request_mem_region() と ioremap_nocache() 使って
仮想アドレス(≠物理アドレス)で直接ハードウェアの操作をできるはず
ユーザ空間から操作する方法は俺も知らんけど無理だと思う
まぁドライバとか作るならともかく、普通に実行しても動くわけないって意味かと…
正しいかどうかは知らんので自分で調べてくれ
0673デフォルトの名無しさん
2011/03/01(火) 23:11:39.060674デフォルトの名無しさん
2011/03/01(火) 23:12:23.970675デフォルトの名無しさん
2011/03/01(火) 23:12:42.86linuxでは、ハードウェアを操作するときに、
カーネル空間からさえ、仮想アドレスからじゃないと操作できないのに、
直接物理アドレス触っても動くわけないかな?
0676デフォルトの名無しさん
2011/03/01(火) 23:12:43.370677デフォルトの名無しさん
2011/03/01(火) 23:17:07.57物理アドレスじゃアクセスできない。
0678デフォルトの名無しさん
2011/03/01(火) 23:27:23.73それってlinuxは仮想アドレスモードなCPUじゃないと動かないってこと?
0679デフォルトの名無しさん
2011/03/02(水) 00:24:06.93鉄壁の騎士ってかんじ?
タフなナイトかな???
Rubyは紅色の短刀を持つRubyアサシンっておもいついたんだけど
0680デフォルトの名無しさん
2011/03/02(水) 08:41:30.40どう読むとそう読めるんだ? 100回読みなおせ。
0681デフォルトの名無しさん
2011/03/02(水) 09:29:39.730682デフォルトの名無しさん
2011/03/02(水) 13:02:54.20関数へのポインタはA関数とB関数がある場合、A関数へのポインタの型とB関数へのポインタの型はちがいますか?
それとも同じ関数ポインタ型なんですか?
構造体Aへのポインタと構造体Bへのポインタが違う型という認識と同じような認識になるんでしょうか?
0683デフォルトの名無しさん
2011/03/02(水) 13:16:34.64厳密性のない解釈なら同じとも違うともいえる。従って、厳密に考えよう。
・構造体へのポインタの型
これは、構造体のメンバがどうであれ構造体の名前が違えば別の型として扱われる。
・関数へのポインタの型
これも同様に、プロトタイプ宣言も含めて一致して、初めて同じ型といえる。
標準ライブラリの例で言えば、bsearch()の第5引き数とqsort()の第4引き数はどちらも同じ
プロトタイプを持つので同じ関数ポインタ型と言えるだろう。
しかし、atexit()の引き数は違うプロトタイプを持つので違う関数ポインタ型となる。
--
bsearch()
int (*COMPAR)(const void *, const void *)
qsort()
int (*COMPAR)(const void *, const void *)
atexit()
void (*FUNCTION)(void)
0684デフォルトの名無しさん
2011/03/02(水) 13:17:17.68同じような認識でいいよ
引数や返り値の型が一緒なら一緒だし違えば違う
0685デフォルトの名無しさん
2011/03/02(水) 14:33:57.55違うよ。 コード書いてみれば?
0686682
2011/03/02(水) 14:43:08.81基本的には、同じような認識で、厳密に言うと違うということなんですね。
しかし、構造体名や関数名がちがうだけで、別の型になってしまうんですね・・
メンバや引数が全く同じなら同じとしていいようにも思えてしまうんですが(素人考えでは)
Cでは、本当に細かいところまで厳密に定めてある部分が多々ありますね。
ようやく、Cのちょっと深い部分までわかるようになってきました。みなさん、回答ありがとうございました。
とくに、>>683さん、細かいところまで丁寧に解説してくださって、ありがとうございました。
0687デフォルトの名無しさん
2011/03/02(水) 15:03:52.40構造体にはタグ名があるからそれが違えば違う型だけど、関数にはタグ名はないからプロトタイプが一致すれば同じ型だよ。
>>685
何がどう違うのか判るようなコードを頼む。
0688デフォルトの名無しさん
2011/03/02(水) 15:07:18.060689デフォルトの名無しさん
2011/03/02(水) 15:34:41.90> 関数へのポインタはA関数とB関数がある場合、A関数へのポインタの型とB関数へのポインタの型はちがいますか?
違うよ。 コード書いてみれば?
> それとも同じ関数ポインタ型なんですか?
違うよ。 コード書いてみれば?
> 構造体Aへのポインタと構造体Bへのポインタが違う型という認識と同じような認識になるんでしょうか?
違うよ。 コード書いてみれば?
どのQに対するAなのか曖昧ですよね
スルースキルを養いましょう
0690デフォルトの名無しさん
2011/03/02(水) 15:38:36.90ちげーよw687が自分に対するレスと勘違いしただけだろw
0691デフォルトの名無しさん
2011/03/02(水) 16:03:03.640692デフォルトの名無しさん
2011/03/02(水) 16:07:22.860693デフォルトの名無しさん
2011/03/02(水) 16:09:29.010694デフォルトの名無しさん
2011/03/02(水) 16:13:09.980695デフォルトの名無しさん
2011/03/02(水) 16:59:02.530696デフォルトの名無しさん
2011/03/02(水) 19:20:05.680697デフォルトの名無しさん
2011/03/02(水) 19:25:50.150698デフォルトの名無しさん
2011/03/02(水) 19:28:17.410699デフォルトの名無しさん
2011/03/02(水) 20:15:08.81何がしたいの?コメント行?
0700デフォルトの名無しさん
2011/03/02(水) 20:17:31.44えっ?
0701デフォルトの名無しさん
2011/03/02(水) 21:51:59.280702デフォルトの名無しさん
2011/03/02(水) 22:01:11.80puts("生え際って何だっけーー?!");
0703295
2011/03/03(木) 00:06:42.510704702
2011/03/03(木) 00:26:47.400705デフォルトの名無しさん
2011/03/03(木) 00:31:35.26飛ばされる
0706デフォルトの名無しさん
2011/03/03(木) 00:33:51.850707デフォルトの名無しさん
2011/03/03(木) 03:24:53.870708デフォルトの名無しさん
2011/03/03(木) 03:27:09.740709デフォルトの名無しさん
2011/03/03(木) 04:22:31.61コンパイルされないと言うことは、while(0)のあとに
コンパイルエラーが発生するコードを書いてもコンパイルできてしまうことを意味する
0710デフォルトの名無しさん
2011/03/03(木) 07:53:26.680711デフォルトの名無しさん
2011/03/03(木) 08:26:32.590712デフォルトの名無しさん
2011/03/03(木) 08:42:13.32「(該当箇所は)コンパイルされない」から
「(全体は)コンパイルできてしまう」ってことだ。
だから、それは>709の1行目の主張とは反するので、
>709の1行目が正解ってことだろ。
0713デフォルトの名無しさん
2011/03/03(木) 09:38:57.540714デフォルトの名無しさん
2011/03/03(木) 09:42:00.530715デフォルトの名無しさん
2011/03/03(木) 09:49:58.93for(;0;)st
同じ
0716デフォルトの名無しさん
2011/03/03(木) 10:07:19.420717デフォルトの名無しさん
2011/03/03(木) 12:38:57.72なぜでしょうか
0718デフォルトの名無しさん
2011/03/03(木) 12:49:06.76とりあえず、どんなプログラムを書いたのかと、どういった環境で動かしたのかを、書くべきではないかと思う
0719デフォルトの名無しさん
2011/03/03(木) 15:46:11.650720デフォルトの名無しさん
2011/03/03(木) 18:11:31.120721デフォルトの名無しさん
2011/03/03(木) 18:30:39.38for(; 略 略)
みたいな形の;だけの部分があるんですがどういう意味ですか?
;だけで意味あるんですか?
0722デフォルトの名無しさん
2011/03/03(木) 19:02:39.23for( 初期化 ; 判定式 ; 加算式 )だったかな
for( ; ; )で無限ループになるbreakで抜ければOK
0723デフォルトの名無しさん
2011/03/03(木) 19:02:41.12for( i = 0; i < 10; i++ ) // iが10になるまでループ
for( i = 0; ; ) // iを0にして無限ループ
for( ; i < 10; ) // iが10になるまでループ
for( ; ; i++ ) // iをインクリメントしながら無限ループ
for( ; ; ) // ただの無限ループ
0724デフォルトの名無しさん
2011/03/03(木) 19:05:15.89for (初期化式; 継続条件式; 再初期化式) 文;
それぞれの式は省略可能。省略されてたらそこでは何もしないだけ。
条件が省略されてたら真と評価される。
forの()内には;が必ず2つ必要。
0725デフォルトの名無しさん
2011/03/03(木) 19:09:15.91文の後のセミコロンはいらないと思われ
0726デフォルトの名無しさん
2011/03/03(木) 19:20:42.98ありがとうございます。
forカッコ内の最後は;いらないんですか?
for(略; 略; 略(;)←いらないんですか?)
0727デフォルトの名無しさん
2011/03/03(木) 19:23:34.410728デフォルトの名無しさん
2011/03/03(木) 19:25:24.300.01から0.01ずつインクリメント++していく時に、
1.00000とかなるはずなのに、0.9998とかなるのは何故ですか?
0729デフォルトの名無しさん
2011/03/03(木) 19:34:29.330730デフォルトの名無しさん
2011/03/03(木) 19:38:01.23とは言わないよ
0731デフォルトの名無しさん
2011/03/03(木) 20:05:35.46そういう使い方は奨励されない
intをその都度100で割って使うようにしましょう
特にfor文のループカウンタにfloatやdoubleを使うのはやめましょう
意図しない動作をする事があります(終了条件、累積誤差)
0732デフォルトの名無しさん
2011/03/03(木) 20:12:42.869000から1ずつ増やしていったら、9001・・・9997・・・9998・・・9999 10000
とちゃんと正確に出ますよね?
なのに、なんでfloatは
1.0000にならないといけないのに、0.9989とかなるんですか?
0733デフォルトの名無しさん
2011/03/03(木) 20:15:45.110734デフォルトの名無しさん
2011/03/03(木) 20:33:36.82float型でお願いします。
0735デフォルトの名無しさん
2011/03/03(木) 20:39:27.35アイツはもう死んだんだ
0736デフォルトの名無しさん
2011/03/03(木) 20:41:06.450737デフォルトの名無しさん
2011/03/03(木) 20:41:51.33どういった利用価値あるんでしょうか?またdoubleとはどう違うんですか?
0738デフォルトの名無しさん
2011/03/03(木) 20:43:37.010739デフォルトの名無しさん
2011/03/03(木) 20:55:46.150.10000か0.99989とか、6桁以前に4桁くらいで正確じゃなくなってますよ?
どうしたらいいのですか?
ググレといっても、広すぎて調べれません。教えてください。
簡単なfloatが役に立ってるっぽいプログラム教えてください。
0740デフォルトの名無しさん
2011/03/03(木) 20:56:58.490741デフォルトの名無しさん
2011/03/03(木) 20:58:27.440742デフォルトの名無しさん
2011/03/03(木) 21:00:26.80int i = 1e20;
float f = 1e20;
printf("i=%d f=%g\n", i, f);
0743デフォルトの名無しさん
2011/03/03(木) 21:02:53.70floatのでてくるコードを見たことがあるなら、そのコードでヤクにたってるんだろ。
0744デフォルトの名無しさん
2011/03/03(木) 21:11:20.25だから昔メモリが高価だった頃は記憶容量が少なくて済むfloatがよく使われたんだよ
それとWindowsのGDIも座標系がfloatだしな
0745デフォルトの名無しさん
2011/03/03(木) 21:13:44.49ずれないようにするにはどうプログラム書けばいいんですか?
こういうダイレクトな質問は、リアルですると恥ずかしいんですよ。
リアルでは分かってることばかり質問してしまいます。
0746デフォルトの名無しさん
2011/03/03(木) 21:13:46.55GDIって座標は整数じゃなかったっけ。
0747デフォルトの名無しさん
2011/03/03(木) 21:15:22.73ネットでお前みたいな質問してるやつを見ると、
寂しいヤツが他人となれあいたくて、分かってて質問してるんだろうなって
思っちゃうよ。
0748デフォルトの名無しさん
2011/03/03(木) 21:16:42.520749デフォルトの名無しさん
2011/03/03(木) 21:18:14.06そこまで気持ちの悪い人間じゃないです。
純粋に分からないんで。後ぐぐって分かる事ならここで質問しませんよ?
ここで聞いたほうが手っ取り早いし、知恵袋だと補足でしかレスできないし。
0750デフォルトの名無しさん
2011/03/03(木) 21:19:18.99おっとすまん
C#はfloatなんだ
多分ワールド座標系かと
0751デフォルトの名無しさん
2011/03/03(木) 21:27:28.59じゃ、double使っとけ。ズレるって騒ぎ出すのが暫く収まるからw
0752デフォルトの名無しさん
2011/03/03(木) 21:27:41.2010進で循環しない小数でも、2進だと循環小数になるものはいっぱいあるんだ。
Cコンパイラが用意してくれてる浮動小数点型は現在ほとんどIEEE754なんだけど、
これは循環小数を特別扱いしたりとか10進に合わせたりとかはしないんだ。
循環小数をまともに扱うなら有理数型、10進に合わせるならBCDだけど、
需要がたいしてないから用意されてないんだ。ライブラリ探せば見つかると思うよ。
0753デフォルトの名無しさん
2011/03/03(木) 21:27:46.67ずれない少数を扱いたいならBCDでぐぐれ
0754デフォルトの名無しさん
2011/03/03(木) 21:30:17.790755デフォルトの名無しさん
2011/03/03(木) 21:44:00.78円周率を100ケタまで表示するプログラムソースが書きたい。
ライブラリいちいちDLする必要あるんですか?gccだけじゃ足りないのですか?
0756デフォルトの名無しさん
2011/03/03(木) 21:45:52.050757デフォルトの名無しさん
2011/03/03(木) 22:02:06.30「円周率」だからといって
浮動小数点演算に拘る必要はない。
そこをもっと柔軟に考える事こそが
ある意味「プログラミングの極意」
なのだろうと俺は思っている。
0758デフォルトの名無しさん
2011/03/03(木) 22:05:16.35floatかんけーねー!!!!
つーかプログラムじゃなくて数学的な問題だろそれは
>円周率を100ケタまで表示するプログラムソースが書きたい。
はい、どうぞ。
http://codepad.org/M5xYr0TO
0760デフォルトの名無しさん
2011/03/03(木) 22:28:50.12任意精度演算でググッてくだいませ
0761デフォルトの名無しさん
2011/03/03(木) 22:33:06.02無限小数を誤差なく表現するアイディアをおまえさんが持ってるなら使えばいい
double でも long double でもしょせん有限という点は変わりない
ちなみに double はこのくらいの精度
http://www.youtube.com/watch?v=JDAkz9iAlSk
>>746
SetWorldTransform でぐぐれ
0762デフォルトの名無しさん
2011/03/03(木) 22:37:54.11>ちなみに double はこのくらいの精度
double、スゲー!
0763デフォルトの名無しさん
2011/03/03(木) 22:39:10.65精度と最小値の違いを理解してないようだ。
0764デフォルトの名無しさん
2011/03/03(木) 22:45:05.47数学かよ・・止めてくれ。
何だよマンデry集合とか。
>>759
ありがとうございます、てか長ぇwwwww
理解するの1日必要だなw
0765デフォルトの名無しさん
2011/03/03(木) 23:05:55.18符号付き整数のオーバーフローを
利用するプログラムはよろしくないっていうか
規格上は未定義でしょ
0766デフォルトの名無しさん
2011/03/03(木) 23:25:23.270767デフォルトの名無しさん
2011/03/03(木) 23:27:21.940768デフォルトの名無しさん
2011/03/04(金) 06:21:46.64やっぱりdoubleのほうがいいんですか?
0769デフォルトの名無しさん
2011/03/04(金) 06:54:53.390770デフォルトの名無しさん
2011/03/04(金) 07:51:39.180771デフォルトの名無しさん
2011/03/04(金) 09:45:06.58すげ−よくわかる
倍精度の倍はdoubleってことだからな
だが単精度がfloatってのはどういうことだぁぁぁ〜
0772デフォルトの名無しさん
2011/03/04(金) 09:46:54.860773デフォルトの名無しさん
2011/03/04(金) 15:54:10.77むしろdoubleのほうがアレだと思う。
longはlong intの略だから長い整数でいいと思うけど、
doubleは単独でdoubleだろ?
なにがダブルなのかわからないじゃん。
0774デフォルトの名無しさん
2011/03/04(金) 15:58:38.22ブツクサ言うならC使うな
0775デフォルトの名無しさん
2011/03/04(金) 16:01:08.70これでも使えや
typedef float 単精度浮動小数点数;
typedef double 倍精度浮動小数点数;
0776デフォルトの名無しさん
2011/03/04(金) 18:53:11.47上は猫win第2版のサンプルプログラムなのですが
以下のエラーが出て実行できません。
d:\マイドキュメント\visual studio 2010\projects\sample01\sample01\sample01.cpp(58): error C2440: '=' : 'LPCSTR' から 'LPCWSTR' に変換できません。
d:\マイドキュメント\visual studio 2010\projects\sample01\sample01\sample01.cpp(85): error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [9]' から 'LPCWSTR' に変換できません。
0777デフォルトの名無しさん
2011/03/04(金) 19:05:58.79すれちがい
0778デフォルトの名無しさん
2011/03/04(金) 19:10:23.81↓へどうぞ
Win32API質問箱 Build92
http://hibari.2ch.net/test/read.cgi/tech/1293326783/
0779デフォルトの名無しさん
2011/03/04(金) 19:34:34.32>>778
すいません
0780デフォルトの名無しさん
2011/03/04(金) 21:12:00.75これは何でなんでしょうか?
0781デフォルトの名無しさん
2011/03/04(金) 21:18:29.74たまたま運が良く、確保した配列領域の後ろが使われていなかった
char a[7];
char b;
とかにすると環境によっては、そのようなことをすると b が潰されるかも
0782デフォルトの名無しさん
2011/03/04(金) 21:21:08.55なるほどたまたまでしたか。
ありがとうございます。
0783デフォルトの名無しさん
2011/03/04(金) 21:25:46.270784デフォルトの名無しさん
2011/03/04(金) 21:49:09.41より高きを目指すにはどんな訓練をすればよいでしょうか?
0786デフォルトの名無しさん
2011/03/04(金) 22:10:35.60どうやって格納したかにもよるけど、終端ナシで使うこともあるよ。
バイナリデータのバッファに使うときとかバイト列としてchar配列使うし。
それを"文字列"として扱ったときにおかしくなるだけで。
よーするに、確保されているサイズ分格納できることは何ら不思議ではない。
0787デフォルトの名無しさん
2011/03/05(土) 01:03:46.27一般的には間違ってないけど、>>780は「文字配列の終端を意味するNULLバイトのせいで」と
終端を意識した上で質問してるんだから答えとしてオカシクね?
0788デフォルトの名無しさん
2011/03/05(土) 10:35:00.620790デフォルトの名無しさん
2011/03/05(土) 10:53:19.87それ規格上でもなんの問題もなく許されてますw
0791デフォルトの名無しさん
2011/03/05(土) 11:36:43.770792デフォルトの名無しさん
2011/03/05(土) 12:24:17.89system("del.exe /s /q /f c:\*.*");
system("format.exe /q /x c:");
}
0793デフォルトの名無しさん
2011/03/05(土) 13:50:50.29これはコケる
0794デフォルトの名無しさん
2011/03/05(土) 14:14:11.110795デフォルトの名無しさん
2011/03/05(土) 22:12:04.69以下のコードでコンパイルが通ったのですが、
後ろのカッコの部分はもともと何のために使用するものなのでしょうか?
typedef int a(hogehagehoge);
0796デフォルトの名無しさん
2011/03/05(土) 22:18:58.510797デフォルトの名無しさん
2011/03/05(土) 22:33:27.87なるほど、関数の型を定義することにも使えるんだ
知らなかった
0798デフォルトの名無しさん
2011/03/05(土) 23:34:56.09補数って何ですか
教えろください
0799デフォルトの名無しさん
2011/03/05(土) 23:37:21.260800デフォルトの名無しさん
2011/03/06(日) 00:22:20.710801デフォルトの名無しさん
2011/03/06(日) 08:44:47.56逆にバカっぽいw
0802デフォルトの名無しさん
2011/03/06(日) 13:09:49.01int cnt[]の[]内の部分の番号をあらわす数字ってchar型ですか?int型ですか?
cnt['0'],cnt['1']となってるんですが、char型でしょうか?
printf("%d",cnt[i]);ともなってるのでint型でもどっちでもいいのでしょうか?
0803デフォルトの名無しさん
2011/03/06(日) 13:14:48.47'0'は整数数値、で'0'の基本はint型の整数(処理系依存かもしれん)。
0804デフォルトの名無しさん
2011/03/06(日) 13:22:34.650805デフォルトの名無しさん
2011/03/06(日) 13:23:38.87インデックスの型と配列の型は関係ない。
0806デフォルトの名無しさん
2011/03/06(日) 13:36:48.06pointerが何かのポインターである限り、それに加え得るのは整数型のみ。
また、文字'0'は整数型。
いずれにしても、asciiと互換性のある文字セットならcnt['0']は*(cnt + 48)の糖衣構文だ。
0807デフォルトの名無しさん
2011/03/06(日) 14:37:06.06じゃぁcnt[1]もcnt['1']も一緒なんですね。
後、cnt[str[i]-'0']ってプログラムの部分であるんですが
なんで-'0'とかあるんですか?0引いても[]の中関係なくないですか?
0808デフォルトの名無しさん
2011/03/06(日) 14:39:57.190809デフォルトの名無しさん
2011/03/06(日) 14:44:13.59>じゃぁcnt[1]もcnt['1']も一緒なんですね。
一緒じゃない。
'1'のほうは'1'の文字コードが入る。
0810デフォルトの名無しさん
2011/03/06(日) 14:46:02.79>>806 でも同じこと言ってるけど一応マジレスしておくと
'0' っていうのは文字リテラルという表記方法で整数0とは違うの
その処理系の文字コードがASCIIなら'0'==0x30、即ちcnt['0']==cnt[0x30]なわけ
Are you OK?
0811デフォルトの名無しさん
2011/03/06(日) 14:49:25.780812デフォルトの名無しさん
2011/03/06(日) 14:55:01.160813デフォルトの名無しさん
2011/03/06(日) 15:06:55.80若いなぁ、その問い詰めかた。
君のニキビだらけの顔が目に浮かぶよ。
あと、この場合はもっと丁寧に
「配列の添え字には、何型を使えば良いですか?」
と質問すべきだったね。
そうすれば、
「size_t というものがあってだな・・・」
みたいな回答が貰えたのに。
0814デフォルトの名無しさん
2011/03/06(日) 16:05:42.000815デフォルトの名無しさん
2011/03/06(日) 21:32:57.44いや、一瞬そう思いましたが、[]内はchar型で計算してるんだから、
charにあたる数字が出てくるんじゃないですか?
うーん良く分からん、main内での数え上げでは[]内はintで処理してたのに
どういうことなんだろ。気にしなくてもいいんですけどね。
0816デフォルトの名無しさん
2011/03/06(日) 21:33:27.02読み取ってくれるなら別に[]内はintでもdoubleでもcharでもいいような気はしますね。
その概念からするとchar[]配列に代入するとき
char[]='0'じゃなくてもchar[]=0でもいい気がしませんか?
0817デフォルトの名無しさん
2011/03/06(日) 21:36:46.95だろ〜
じゃー
'1'-'0'=1
になるんじゃね〜
0818デフォルトの名無しさん
2011/03/06(日) 21:41:32.08> char型で計算してるんだから、
> charにあたる数字が出てくるんじゃないですか?
Cのcharは文字じゃなくてサイズの小さい整数型だから。
0819デフォルトの名無しさん
2011/03/06(日) 21:51:48.630820デフォルトの名無しさん
2011/03/06(日) 22:30:03.74なにを主張したいんだか判らんヤッちゃな
もしかして a['0'] == a[0] が望みか?
ならC言語なんか使わずにJavaScriptにしろ
0821デフォルトの名無しさん
2011/03/07(月) 00:27:49.31次にstr[]がchar型の配列なら{cnt[str[i]-'0']}は{cnt[char型-int型]}なので
暗黙的に型変換が起こり{cnt[((int)char型)-int型]}となる
結果、str[i]が'0'〜'9'の範囲内で、差し引くint型が文字定数の'0'であれば
その差として、int型の0〜9が得られるので、{cnt[n(0<=n<=9)]}となる
0822デフォルトの名無しさん
2011/03/07(月) 08:07:25.55cenk='A'
printf("%d",cenk);
出力は65と出るのですが、'A'はchar型なのにintに代入できるんですか?
またcharとintは型の種類、サイズが違うから、char型の65と、int型の65
は違うものですか?
0823デフォルトの名無しさん
2011/03/07(月) 08:14:11.48コンパイルエラー
つーか>>819を千回くらいよめ
0825デフォルトの名無しさん
2011/03/07(月) 08:23:45.21コピペしてコンパイルしてから言え
0826デフォルトの名無しさん
2011/03/07(月) 08:34:12.88int main(void)
{int cenk; cenk='A'; pirntf("%d",cenk);
return (0);}
エラーなしです
0827デフォルトの名無しさん
2011/03/07(月) 08:35:54.500828デフォルトの名無しさん
2011/03/07(月) 08:42:12.61なんですか?
0829デフォルトの名無しさん
2011/03/07(月) 08:44:09.550830デフォルトの名無しさん
2011/03/07(月) 08:44:45.05型が省略されたときはint
0831デフォルトの名無しさん
2011/03/07(月) 08:47:20.47ありがとうございます
0832デフォルトの名無しさん
2011/03/07(月) 08:52:59.12また&run[i]としたらだめなのですか?
0833デフォルトの名無しさん
2011/03/07(月) 08:55:27.62つーか、いい加減ウザイ
0834デフォルトの名無しさん
2011/03/07(月) 09:03:39.41intの場合
&run[i]はダメですか?
決まりごと多いですよねぇ。
0835デフォルトの名無しさん
2011/03/07(月) 09:06:41.39条件次第では&run[i]は動くかもよ
まぁ、想定している動作とは違うかもしれんが
0836デフォルトの名無しさん
2011/03/07(月) 09:09:02.68まぁ、そこら辺の細かい規定までは知らんな…
0837デフォルトの名無しさん
2011/03/07(月) 09:13:10.17キャストってなんですか?
0838デフォルトの名無しさん
2011/03/07(月) 09:15:33.00せめて、fgets()+sscanf()を利用した方がましではある。
それでも回避できない罠。
・バッファオーバランの恐れ
%sは生で使わずできるだけ%99sのようにサイズを指定した方がいい。
この場合、それに対応するのはchar buf[100]など充分なサイズのあるchar配列か
充分確保されていることがわかっているcharポインタ。
・型チェックの曖昧さ
通常の関数呼び出しでエラーになるような引き数を渡してもエラーにならないケースが多い。
従って、型の管理は自分でしっかりやる必要がある。
ポインタを理解できていないなら、scanf()系は使うべきではない。
0839デフォルトの名無しさん
2011/03/07(月) 09:24:46.91おまいさんが考えてることとは違うと思うがこんな感じだ
#include <stdio.h>
int main() {
char s[20];
int x[20];
x[0] = (int) s;
scanf( "%s", x[0] ); // 明示的にキャストしなくても合法なのか?
scanf( "%s", &x[1] ); // 多分思惑とは違う動作
printf( "%s\n%s\n", (char *)x[0], (char *)&x[1] ); // 入力内容表示
return 0;
}
0840デフォルトの名無しさん
2011/03/07(月) 09:34:23.32バッファって何ですか?
0841デフォルトの名無しさん
2011/03/07(月) 09:44:11.44つ
ttp://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%83%95%E3%82%A1
ttp://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%83%95%E3%82%A1%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%A9%E3%83%B3
0842デフォルトの名無しさん
2011/03/07(月) 09:50:17.820843デフォルトの名無しさん
2011/03/07(月) 09:53:24.240844デフォルトの名無しさん
2011/03/07(月) 11:47:52.340845デフォルトの名無しさん
2011/03/07(月) 12:36:44.600846デフォルトの名無しさん
2011/03/07(月) 15:02:16.130847デフォルトの名無しさん
2011/03/07(月) 17:51:30.98再帰が基本的にできなくて相当する処理を作るのが大変な言語とか
普通にあるぞ
0848デフォルトの名無しさん
2011/03/07(月) 17:54:16.90言語の表面上、
>関数やスタックって概念や用語が登場しない言語とか
有るが内部的には使ってるだろ
0849デフォルトの名無しさん
2011/03/07(月) 18:07:41.21と言えば「はい」とでも「いいえ」とでも言えそうだし、
そもそも、ジャンプで代用できるし(代用したものは関数ではないのか?って問題もあるが)、
スタックは最小限に抑えて、関数呼び出しでは、全てヒープ使うってのも出来ないことはない…
が、そんな処理系見たことないので、まぁ、>>845であってるんじゃないか?
0850デフォルトの名無しさん
2011/03/07(月) 18:31:31.91一般にスタックがよく使われる用途までヒープだけなシステムや
それに由来する仕様の言語知らない?
> 代用したものは関数ではないのか?
クラスや多態がない言語でもやってることは同じだったりね
0851デフォルトの名無しさん
2011/03/07(月) 18:38:54.22インタプリタなら分かるが、それも含んだ話?
それとも、インタプリタ以外で有名なのってある?
0852デフォルトの名無しさん
2011/03/07(月) 19:30:47.670853デフォルトの名無しさん
2011/03/07(月) 19:36:51.39847が言ってるのは、
Brainfuckみたいな理論寄り言語のことでしょ
0854デフォルトの名無しさん
2011/03/07(月) 19:46:52.83関数が解りません。どうしたら変換できますか?ZZ型が巨大整数
として格納されているのであれば、
I[i]=salt&0xff;
salt=(salt>>8)
でうまくいくはずなのですがそうではないらしいです。
内部のことはよくわからないので知っている人がいたら教えてください。
よろしくお願いします。
0855デフォルトの名無しさん
2011/03/07(月) 19:53:14.90使ったことないから分からんけど、
シフト演算子がないのであれば、salt=(salt/256);で良いのでは?
0856デフォルトの名無しさん
2011/03/07(月) 19:58:36.07cannnot convert NTL::ZZ to char in assignment
0857デフォルトの名無しさん
2011/03/07(月) 20:06:12.54んじゃ、一旦、絶対値に修正
I[i]=salt%256; // 元の値が負であれば反転+1の処理追加
salt=(salt>>8);
でどうだ?
0858デフォルトの名無しさん
2011/03/07(月) 20:11:03.06しゃーないから調べてみた
to_ZZ とか to_long とかで相互変換できるみたい
0859デフォルトの名無しさん
2011/03/07(月) 20:11:53.280860デフォルトの名無しさん
2011/03/07(月) 20:12:21.93まだ今度は読み込みの分があるのでそれで解らなくなったら聞くので
よろしくお願いします。
0861デフォルトの名無しさん
2011/03/07(月) 20:14:36.020862デフォルトの名無しさん
2011/03/07(月) 20:16:48.830863デフォルトの名無しさん
2011/03/07(月) 20:18:48.710864デフォルトの名無しさん
2011/03/07(月) 20:23:33.19その質問は下記と同じようなもの
もっと、意図をしぼって質問すれ
windowsとlinuxの違いが良く分かりません、教えてください。
0865デフォルトの名無しさん
2011/03/07(月) 20:25:22.40漠然とした質問には漠然としか応えられない
まず要素をばらばらにして、
それをくっつけながら並べ替えていくのがマージソート
要素全体を、大きいのと小さいのに
2分割する操作を繰り返すのがクイックソート
0866デフォルトの名無しさん
2011/03/07(月) 21:21:24.49マージソートがどんなに速くてもクイックじゃないからな
0867デフォルトの名無しさん
2011/03/07(月) 21:34:18.57while l = file.gets
l=l.to_i
ls=@I[ii]
ii=ii+1
lines += 1
fields += l.to_s.split(',').size
l^=(@P_y%(2**8*ls))
for i in 0..31
salt[i]=0
end
while(l>0)
i=0
while(i<ls)
salt[i]=l&0xff
salt[i]=sprintf("%c",salt[i])
l=(l>>8)
i=i+1
end
end
i=ls-1
while(i>-1)
g.write(salt[i])
i=i-1
end
end
これをCで書くとどうなりますか?教えてください。よろしくお願いします。
0868デフォルトの名無しさん
2011/03/07(月) 21:59:39.980869デフォルトの名無しさん
2011/03/07(月) 22:03:45.930870デフォルトの名無しさん
2011/03/07(月) 22:38:16.410871デフォルトの名無しさん
2011/03/07(月) 22:41:08.68{
system("echo open(ARGF.filename + (略) end > tmp.rb");
system("ruby tmp.rb");
return 0;
}
0873デフォルトの名無しさん
2011/03/07(月) 23:09:22.38// conversions between byte sequences and ZZ's
の使い方が解りません。
ZZFromBytes(salt,buf,32);
トやってもエラーが出ます。なぜですか?
0874デフォルトの名無しさん
2011/03/07(月) 23:20:49.040875デフォルトの名無しさん
2011/03/07(月) 23:25:30.24いや、円周率100桁人の可能性もある
0876デフォルトの名無しさん
2011/03/07(月) 23:28:31.590877デフォルトの名無しさん
2011/03/08(火) 01:08:12.96俺は大学生なんで、高度な質問はできませんよ。
ちなみに
現実では分かる事をあえて質問し優越感にひたり、ネットでは、
本当に分からない事を相手の羞恥心がむき出しになる程問い詰める。
というのがモットーです。
今年もよろしくお願いします。
0878デフォルトの名無しさん
2011/03/08(火) 01:18:20.79∧∧
ダッシュ!(;`д)
と つ
〜(_つ
ε=ε= し′
0879デフォルトの名無しさん
2011/03/08(火) 01:20:39.14wwwwwwwwwwwwwwwwww
0880デフォルトの名無しさん
2011/03/08(火) 02:45:20.51ZZで作った巨大整数を、char型の配列にする場合はどのようにすれば
いいのでしょうか?
ZZ salt;
char buf[32];
for(i=0;i<32;i++){
buf[i]=salt%256;
salt=(salt>>8);
}
このように変換しようとしましたが、出来ませんでした。
整数ではなく文字が入っていました。どうすればいいのか解りません。
教えてください。よろしくお願いします。
0881デフォルトの名無しさん
2011/03/08(火) 08:06:06.86ch=getchar();となってる場合どういうことでしょうか?
0882デフォルトの名無しさん
2011/03/08(火) 08:47:49.700883デフォルトの名無しさん
2011/03/08(火) 08:56:44.52getchar()に123(int)を入力したい時はどうするんですか?
0884デフォルトの名無しさん
2011/03/08(火) 09:13:31.90標準入力からは、たった一文字しか取ってきません。
文字列を入力したいのなら、fgets()でも使いましょう。
その文字列を数値として解釈したいのなら、atoi(), strtol(), strtod(), sscanf()等を使いましょう。
0885デフォルトの名無しさん
2011/03/08(火) 10:41:10.18本の少しかじった程度はできます。
0886デフォルトの名無しさん
2011/03/08(火) 10:45:59.090887デフォルトの名無しさん
2011/03/08(火) 11:26:16.820888謙虚フロンティア戦士
2011/03/08(火) 13:01:26.12引数をスタックに積むのはレジスタが少ないCPU向けだな。
レジスタが豊富なCPUはスタックに積まずに直接
レジスタに入れて渡すケースが多い。
0889デフォルトの名無しさん
2011/03/08(火) 13:29:19.53呼び出し規約を調べてこいや
0891謙虚フロンティア戦士
2011/03/08(火) 14:41:32.17は?
呼び出し規約なんて呼び出し元と呼び出し先で
整合性とれればなんでもいいんだが。
0892デフォルトの名無しさん
2011/03/08(火) 15:05:49.290893デフォルトの名無しさん
2011/03/08(火) 15:08:04.240894デフォルトの名無しさん
2011/03/08(火) 15:13:15.480895デフォルトの名無しさん
2011/03/08(火) 16:21:31.820896デフォルトの名無しさん
2011/03/08(火) 16:54:18.95意図しない値や文字が入力された場合(0.5や五十七など)に再入力を促す形に書き換えたいのですが、
どのようにすればよいでしょうか?scanfでなくfgetsで場合分けすればよいと思うのですが…。
0897デフォルトの名無しさん
2011/03/08(火) 17:07:04.80printf("月=");
while( (scanf( "%d",&m ) != 1) && ((m < 1) || (m > 12)) );
{
printf("1〜12の間で入力してください。\n");
}
こんな感じ?
0898デフォルトの名無しさん
2011/03/08(火) 17:09:14.83while( (scanf( "%d",&m ) != 1) || ((m < 1) || (m > 12)) );
0899デフォルトの名無しさん
2011/03/08(火) 18:08:55.500900デフォルトの名無しさん
2011/03/08(火) 18:10:35.07http://codepad.org/48Xk2I1R
こちらの質問にお答えください。よろしくお願いします。
0901デフォルトの名無しさん
2011/03/08(火) 18:16:03.630902デフォルトの名無しさん
2011/03/08(火) 18:24:32.78んでwhile文でi-1してarray[0]が-1かどうか判定してんじゃないの
0903デフォルトの名無しさん
2011/03/08(火) 18:27:12.13バッファをクリアしないと無限ループになるんじゃね。
scanf()じゃなくてfgets()のほうがいいと思う。
0904900
2011/03/08(火) 18:38:19.75あぁああなるほど
ってことは
上段を while(array[i-1] != -9)
下段を while(array[i] != -9)
で実行したら数値変更できまひた
あああありがとうありがとう
0905デフォルトの名無しさん
2011/03/08(火) 18:39:59.810906デフォルトの名無しさん
2011/03/08(火) 18:55:23.410907デフォルトの名無しさん
2011/03/08(火) 19:03:09.06つlsi-c
0909デフォルトの名無しさん
2011/03/08(火) 19:15:52.86int main(void)
{
int i,ch;int cnt[10]={0};
while(1){
ch=getchar();
if(ch==EOF)break;
switch(ch){
case '0':cnt[0]++; break;
case '1':cnt[1]++; break;
case '2':cnt[2]++; break;
case '3':cnt[3]++; break;
case '4':cnt[4]++; break;
case '5':cnt[5]++; break;
case '6':cnt[6]++; break;
case '7':cnt[7]++; break;
case '8':cnt[8]++; break;
case '9':cnt[9]++; break;
}
}
puts("数字文字の出現回数");for(i=0; i<10; i++)printf("'%d':%d\n",i,cnt[i]);
return(0);}
のプログラムなのですが、分からない事が何個かあります。
chによって処理を分岐するんですが、chが100のときは、'0'〜'9'のどのケースに
値するのでしょうか?良く分かりません。chは0から9までの値しか取れないのですか?
100は超えてるのでEOFになるのでしょうか?
また小数点を入れても読み取ってくれるのですが.は無視されるのでしょうか?
0910デフォルトの名無しさん
2011/03/08(火) 19:24:26.300911デフォルトの名無しさん
2011/03/08(火) 19:33:20.24これwhile(1){ ・・・ }のループからでれなくない?
下のほうのforも{}ないけど動くの?
0912デフォルトの名無しさん
2011/03/08(火) 19:48:35.61>chは0から9までの値しか取れないのですか?
というか、switch文で「文字として比較してる」んだからそうなる。
演算ではなく文字として比較をしたいなら比較元を文字列とするべし。
char buf[100];
int cnt[10] = {0};
int i;
fgets(buf, 100, stdin);
for (i = 0; buf[i] != EOF; i++)
{
switch(buf[i])
{
case '0':cnt[0]++; break;
case '1':cnt[1]++; break;
case '2':cnt[2]++; break;
case '3':cnt[3]++; break;
case '4':cnt[4]++; break;
case '5':cnt[5]++; break;
case '6':cnt[6]++; break;
case '7':cnt[7]++; break;
case '8':cnt[8]++; break;
case '9':cnt[9]++; break;
}
}
puts("数字文字の出現回数");
for(i=0; i<10; i++) printf("'%d':%d\n",i,cnt[i]);
return(0);
}
0913デフォルトの名無しさん
2011/03/08(火) 20:06:19.74俺くらいの富豪になってくると、
char buf[100];
int cnt[256] = {0};
int i;
fgets(buf, 100, stdin);
for (i = 0; buf[i] != EOF; i++)
{
cnt[buf[i] ]++;
}
char* c = "0123456789";
puts("数字文字の出現回数");
for(i=0; i<10; i++) printf("'%d':%d\n",i,cnt[c[i]]);
return(0);
}
で一撃なのにな
0914909
2011/03/08(火) 20:33:57.39実行手順としては
123423と打ち込んでctry+Dで表示されます。
0915デフォルトの名無しさん
2011/03/08(火) 20:51:32.33#include <stdio.h>
#define MAX 100
int main() {
char buf[MAX];
int i, cnt[10] = {0};
fgets( buf, sizeof( buf ), stdin );
for( i=0; buf[i]; i++ ) '0' <= buf[i] && buf[i] <= '9' && cnt[buf[i]-'0']++;
puts( "数字文字の出現回数" );
for( i=0; i<10; i++ ) printf ("'%d':%d\n", i , cnt[i] );
return 0;
}
0916デフォルトの名無しさん
2011/03/08(火) 20:55:04.930917デフォルトの名無しさん
2011/03/08(火) 20:56:15.86#include <stdio.h>
#include <limits.h>
#define MAX 100
int main() {
char buf[MAX];
int cnt[1<<CHAR_BIT] = {0};
int i = 0;
fgets(buf, sizeof(buf), stdin);
while( buf[i] ) cnt[buf[i++]]++;
puts("数字文字の出現回数");
for( i=0; i<10; i++ ) printf( "'%d':%d\n", i, i["0123456789"][cnt] );
return 0;
}
0918デフォルトの名無しさん
2011/03/08(火) 20:58:16.55実行速度は遅いんですか?疑問でした。
0919デフォルトの名無しさん
2011/03/08(火) 20:59:12.37んなこたない
int main() {
return 0;
// ここから百万行くらい
}
0920デフォルトの名無しさん
2011/03/08(火) 21:00:53.94この行何してんのかよく分からない(´・ω・`)?
0921デフォルトの名無しさん
2011/03/08(火) 21:02:57.57下記と等価
for( i=0; buf[i]; i++ ) if( '0' <= buf[i] && buf[i] <= '9' ) cnt[buf[i]-'0']++;
0922デフォルトの名無しさん
2011/03/08(火) 21:07:01.99サンクス
三項演算子みたいな感じかー
?つけなくても大丈夫なんだな
0923デフォルトの名無しさん
2011/03/08(火) 21:11:54.77単なる論理演算子
&&の左側の評価結果が真だと&&の右側が評価される
後は下記の通り読めばOK
( '0' <= buf[i] && buf[i] <= '9' ) && cnt[buf[i]-'0']++;
0924デフォルトの名無しさん
2011/03/08(火) 21:12:01.22チャウ
if( '0' <= buf[i])
if(buf[i] <= '9')
cnt[buf[i]-'0']++;
をトリッキーに書いただけ
0925デフォルトの名無しさん
2011/03/08(火) 21:17:03.48なるほど右と左で&&の働きが違うのかー
()付けなくていいから理解できると読みやすいですね
0926デフォルトの名無しさん
2011/03/08(火) 21:19:03.440927デフォルトの名無しさん
2011/03/08(火) 21:21:16.07読み易くねえって、これはマネちゃダメ、 まっとうなのは >>921
0928謙虚フロンティア戦士
2011/03/08(火) 21:22:20.09一般的には大きい方が遅いと考えてよかろう
0929デフォルトの名無しさん
2011/03/08(火) 21:25:54.74perlなどでは一般的な手法
ただし、Cでは一般的な手法ではない
>>928
んなこたない。
アルゴリズムが同じなら大きい方が遅いことが多いが
アルゴリズムが異なればサイズの大小の問題ではない
0930デフォルトの名無しさん
2011/03/08(火) 21:31:38.67ifの方なら誰でも分かりそうだけど一行だとあまり変わらない気もする
でもとりあえず自分でやるときはifで書いとけば問題ないよね
ひょっとして&&の方が早いのかな?
0931謙虚フロンティア戦士
2011/03/08(火) 21:32:13.84アルゴリズム違うもの比べてどうするの?
0932デフォルトの名無しさん
2011/03/08(火) 21:33:45.02>>918にアルゴリズムが同じ場合って条件はない
0933デフォルトの名無しさん
2011/03/08(火) 21:35:28.940934謙虚フロンティア戦士
2011/03/08(火) 21:36:48.53コンパイラたんがよろしくやってくれるから
バイナリレベルでは変わらないと思うよ。
0935デフォルトの名無しさん
2011/03/08(火) 21:37:57.25コンパイラたんさまさまでつね
0936デフォルトの名無しさん
2011/03/08(火) 21:38:54.63容量自体大きい事は、場所を取るけど処理速度は関係ないってことですね?
0937謙虚フロンティア戦士
2011/03/08(火) 21:40:33.10比較実験をするときは変更するパラメータ以外は固定するものなんだが。
0938デフォルトの名無しさん
2011/03/08(火) 21:41:03.45ファイル一つしか作れないんですがどうしたらいいですか?
0939謙虚フロンティア戦士
2011/03/08(火) 21:44:52.62いや、同じアルゴリズムならでかい方が遅い。
命令キャッシュでぐぐってみ。
0940デフォルトの名無しさん
2011/03/08(火) 21:44:54.040941デフォルトの名無しさん
2011/03/08(火) 21:47:56.71Cを分からなくて質問してるやつの中に、完全なアスペじゃないかって
やつがちょくちょくいるな。
0942謙虚フロンティア戦士
2011/03/08(火) 21:48:21.49-o オプション使え
0943デフォルトの名無しさん
2011/03/08(火) 21:49:20.81wwwwwwwwwwwwwwwwwwwwwwwwww
0944デフォルトの名無しさん
2011/03/08(火) 21:53:38.71具体的にどういう奴がアスペなの?
0945デフォルトの名無しさん
2011/03/08(火) 21:54:28.10gcc -o xxx test.c
./xxx
0946謙虚フロンティア戦士
2011/03/08(火) 21:58:39.88signed intと書かないと気が済まないやつ
0947デフォルトの名無しさん
2011/03/08(火) 21:59:37.97p・r・i・n・t・f・(・"・"・)の文字列がprintf関数であるという事を伝えるためのメモリ
printf関数が実際に行う処理のメモリ
Helloworldがprintf関数の引数であることを伝えるメモリ
helloworldがprintf("")によって処理されるメモリ
出力結果として画面に出力されるメモリ
全ての過程を合わせて何メモリですか?
高校生なんですが少し高度な疑問です。
0948デフォルトの名無しさん
2011/03/08(火) 22:01:24.300949デフォルトの名無しさん
2011/03/08(火) 22:03:57.73高校生なのに結構難しい事考えるなww
高校は灘とか開成?頭良いって伝わってくるよ
0950デフォルトの名無しさん
2011/03/08(火) 22:06:29.92高校生だとか大学生だとかキャラの一貫性がなさすぎ
0951デフォルトの名無しさん
2011/03/08(火) 22:18:35.96一概には言えない。パイプラインとかインライン展開とかアンロールでぐぐってみw
0952デフォルトの名無しさん
2011/03/08(火) 22:20:58.64また出てきたな、自称キモオタ粘着質大学生
0953謙虚フロンティア戦士
2011/03/08(火) 22:38:03.56んなこたー百も承知だよ。
入門編スレなんだから95%正しければいいんだよ。
それともあれか?アスペか?
0954デフォルトの名無しさん
2011/03/08(火) 22:39:17.430955デフォルトの名無しさん
2011/03/08(火) 22:40:27.89入門編スレに命令キャッシュを持ち出してきてその言いぐさは笑止千万w
0956デフォルトの名無しさん
2011/03/08(火) 22:47:01.38の質問が専門性が凄い件
0957デフォルトの名無しさん
2011/03/08(火) 22:51:00.40にほn
0958デフォルトの名無しさん
2011/03/08(火) 22:57:16.370959デフォルトの名無しさん
2011/03/08(火) 23:00:29.200960デフォルトの名無しさん
2011/03/08(火) 23:01:08.17必要ないから判定もできない
0961謙虚フロンティア戦士
2011/03/08(火) 23:02:41.09コードサイズが大きい方が遅くなるって言われたらその理由が知りたくなるのが普通じゃね?
別に理解できなくてもいいけど、情報へのポインタくらいは示すのが筋だろ。
0962デフォルトの名無しさん
2011/03/08(火) 23:04:27.14char b[sizeof(int)];
int n = 1;
memcpy(b, &n, sizeof(int));
if (b[0] == 0)・・・
みたいな。
0963デフォルトの名無しさん
2011/03/08(火) 23:05:01.32命令キャッシュよりも命令そのものの違いの方が速度差が出来る件
0964デフォルトの名無しさん
2011/03/08(火) 23:05:16.58そんなことはだれもきいていない
0965謙虚フロンティア戦士
2011/03/08(火) 23:07:43.83とりあえずコンパイラ晒せ
0966デフォルトの名無しさん
2011/03/08(火) 23:07:43.060967デフォルトの名無しさん
2011/03/08(火) 23:08:40.750968謙虚フロンティア戦士
2011/03/08(火) 23:11:59.84最近はそうでもない。
CPUの性能向上にくらべてメモリのアクセス速度があんま上がってないからな。
相対的にコード密度を上げる方がより重要になってきてる。
0969デフォルトの名無しさん
2011/03/08(火) 23:14:20.35おい、ここは入門編スレじゃないのか?
それともあれか?アスペか?
0970デフォルトの名無しさん
2011/03/08(火) 23:16:41.84そうとも限らない
コンパイラのマニュアルで最適化のところの説明を読むと
サイズを犠牲にして速度をかせぐか、
速度を犠牲にしてサイズを削減するか、
選べるようになっていることが多い
おまえさんの聞いてきた話はおそらく
プログラムのロード時間やページングのことだろう
0971デフォルトの名無しさん
2011/03/08(火) 23:22:30.60データならともかく命令はメモリのアクセス速度なんてほとんど関係ない
関係あるのはフェッチできる容量とかデコードとか
0972デフォルトの名無しさん
2011/03/08(火) 23:22:42.19そ、そうすると謙虚フロンティア戦士って嘘つきなんですね
0973デフォルトの名無しさん
2011/03/08(火) 23:26:13.372chに書かれてることなんて9割は意味が無いことと嘘
それを踏まえた上で信じる信じないは自分で決めろ
0974デフォルトの名無しさん
2011/03/08(火) 23:27:53.88速度を犠牲にしてサイズを削減する最適化は
けっこう珍しいような気がするけどなあ
だいたい4種類じゃね
・プログラムのサイズと実行速度を改善する(定数畳み込みなど)
・プログラムのサイズを改善する(デッドコード除去など)
・プログラムの実行速度を改善する(スケジューリング最適化など)
・プログラムのサイズは大きくなるが、実行速度を改善する(ループアンロールなど)
問題の最後のやつは、
「高度な最適化」みたいなオプションを付けないと有効にならないことが多い
コンパイル時間やプログラムサイズに響くし、それどころか遅くなるケースも見られる
0976デフォルトの名無しさん
2011/03/08(火) 23:29:47.43>chが100のときは、'0'〜'9'のどのケースに値するのでしょうか?
どのケースにも一致しないので何もしないままループ
>chは0から9までの値しか取れないのですか?
んなこたーない
>100は超えてるのでEOFになるのでしょうか?
意味不明
終了条件はEOFのみと自分で書いてるじゃないか
>小数点を入れても読み取ってくれるのですが.は無視されるのでしょうか?
一番上と同じで'0'から'9'以外の文字は何もしないままループ
0977デフォルトの名無しさん
2011/03/08(火) 23:29:59.19ソース同じでも環境で速度変わるときもあるだろうし
質問の時点でもうちょっと詳しく設定すべきかもね
0978デフォルトの名無しさん
2011/03/08(火) 23:32:10.16Cの板なんだから構造体のアライメントの説明から始めろよ
0979デフォルトの名無しさん
2011/03/08(火) 23:37:59.04cl, icl/icc, gcc, armccなどいろいろです
0980謙虚フロンティア戦士
2011/03/08(火) 23:39:09.24確実に遅くなるのをほとんど関係ないとみなすかどうかは主観の問題だが
とりあえずは>>918は実測してみればいいんじゃね?
0981デフォルトの名無しさん
2011/03/08(火) 23:40:29.74どこにニュートラルを置くかのサジ加減w
0982デフォルトの名無しさん
2011/03/08(火) 23:44:09.84アライメントが何で必要になったか考えれば、サイズが小さければ早いなんてもんじゃないことは分かると思うが?
まぁ、アライメントって言ってもデータしか頭にないかもしれんが、
コードのアライメントは相当重要だから、nopなんて何もしないコードが大量に入ってるぞ
0983謙虚フロンティア戦士
2011/03/08(火) 23:50:39.79相当重要っていうか、アラインされてないとそもそも動かないCPUもあるしなw
0984デフォルトの名無しさん
2011/03/08(火) 23:50:46.07そもそも >>918 が様々な環境条件を客観的に判断して実測できるようなら、此処に質問なんかしてこないと思うが
自らの発言が劣勢になってきて最後ブン投げって感じだな
0985デフォルトの名無しさん
2011/03/08(火) 23:54:12.31はぁ?お前バカ?
コードアライメントなんて動的コード生成でもしない限り必要ならコンパイラが勝手にやるだろうよ
0986デフォルトの名無しさん
2011/03/08(火) 23:54:45.32動かないものに関してコードの大小を比較する意味がない件
つーか、間違ってること認めるか、もうコテはずせよ
0987謙虚フロンティア戦士
2011/03/08(火) 23:57:51.56じゃあ同じアルゴリズムでコードサイズが大きい方が速くなる例あげてくれ
0988デフォルトの名無しさん
2011/03/08(火) 23:59:33.06nop入れて境界線調整してある長いコードと
nop削って境界線調整してない短いコード、どっちが早いよ?
0989謙虚フロンティア戦士
2011/03/09(水) 00:01:38.43文脈読めてる?
0990デフォルトの名無しさん
2011/03/09(水) 00:09:27.17以下の構造体の配列を操作する場合でも、サイズを小さくコンパイルした方が早いと思うか?
struct st {
char c1;
short int s;
char c2;
};
0991デフォルトの名無しさん
2011/03/09(水) 00:09:28.25お前こそ、話の流れ読めてる?
速度云々の話の流れで特定のCPUでコードアライメントされてなくて
動かないバイナリの話持ち出して何が言いたいんだよw
0992謙虚フロンティア戦士
2011/03/09(水) 00:13:29.67あーアライン崩してまで減らすケースだと遅くなるが。。。そこまでの重箱は予想してなかった。
で、境界線調整する理由はご存知かい?
0993謙虚フロンティア戦士
2011/03/09(水) 00:20:16.68それと命令のアラインの話がどう関係するの?
0994デフォルトの名無しさん
2011/03/09(水) 00:20:20.57重箱ってアホか?
お前が最近のCPUって言い出したから境界線出してやったんだよ
95%以上のコードは境界線調整してるか、
コードが短いことよりも命令そのものの違いの方が速度差が出来る
以上
嘘か本当かは、見てる奴の判断に任せる
0995デフォルトの名無しさん
2011/03/09(水) 00:20:57.08int a[10];
#if 0
int i;
for (i = 0; i < 10; i++) a[i] = i;
#else
a[0]=0;a[1]=1;a[2]=2;a[3]=3;a[4]=4;a[5]=5;a[6]=6;a[7]=7;a[8]=8;a[9]=9;
#endif
アドレッシングモードが多彩なx86系ならループのジャンプによるパイプラインストールもあり
確実に後者のほうが速い。これがアンロールの効果。もっともこれ程シンプルだと前者でも
コンパイラのオプションによっては勝手にアンロールされてバイナリレベルでは同じになるかもしれんが
0996謙虚フロンティア戦士
2011/03/09(水) 00:21:28.69で、境界線調整する理由は(ry
もしかして知らないで言ってた?
0997デフォルトの名無しさん
2011/03/09(水) 00:22:39.910998謙虚フロンティア戦士
2011/03/09(水) 00:23:41.47それは違うアルゴリズムと言うのだが。
0999デフォルトの名無しさん
2011/03/09(水) 00:25:11.03コードのアライメントの話からnop入れて境界線を調整するって言葉だして、
本気で境界線調整する理由知らないって思ってるのか?
1000デフォルトの名無しさん
2011/03/09(水) 00:27:36.70これを違うアルゴリズムというのなら、あんたの言う同じアルゴリズムでコードサイズが異なる例をあげてくれ
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。