C言語なら、俺に聞け! <9>
■ このスレッドは過去ログ倉庫に格納されています
0001C言語ハッカー Kusakabe Youichi
NGNGあちこちの言語に手を出したが結局極めたのはC言語だけだった。
大体のことなら分かるからオレに聞け。
だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。
・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・前スレ C言語なら、オレに聞け! <8>
http://pc.2ch.net/test/read.cgi/tech/1005811510/l50
0552Kusakabe Youichi
NGNG> sum += a;
> と
> sum = sum + a;
> とどっちがいいの?
Cだったら前者でいいのでは?
後者のように書く意味はとくにないでしょう。
0553デフォルトの名無しさん
NGNG入力秒 : s
hour += (mim += (sec += s) / 60 + m) / 60;
min %= 60; sec %= 60;
0554defaultの名無しさん
NGNG0555デフォルトの名無しさん
NGNGよい。
糞壁が書き込むよりずっとまし。
0556Kusakabe Youchi
NGNGスレって何ですか?
0557デフォルトの名無しさん
NGNGここは祭り禁止ですよ。
0558デフォルトの名無しさん
NGNGとりあえず >>1 にある C FAQ だけは読んどけ。
0560あり
NGNGこのfpって次に使うときは、進んだままになっちゃうの?
はじめてのCって本の例題見るとそんな感じになっていました。
0561デフォルトの名無しさん
NGNG戻したければ fgetpos(), fsetpos() 使う。ftell(), fseek() でも良いけど。
0562デフォルトの名無しさん
NGNGそれはプログラマー板で聞きましょう。技術じゃないし。
0563Kusakabe Youichi
NGNG> fread()とかでファイルを読むときにfp指定するけど、
> このfpって次に使うときは、進んだままになっちゃうの?
fpで指している構造体の中の一部にそれを覚えておく箇所があるわけですね。
次にreadしたりwriteしたりfseekしたらずれますが。
0564デフォルトの名無しさん
NGNG不思議ですね。
0565デフォルトの名無しさん
NGNGを知りたいのですが、
グーグルで「c 組み合わせ アルコリズム」で出ますか?
0566デフォルトの名無しさん
NGNG0567デフォルトの名無しさん
NGNG0568Kusakabe Youichi
NGNG> 日下部先生マンセー
ビル建設中にべつの場所にあったときのほうがおいしかったですね > 黒豚のトンカツ
0569デフォルトの名無しさん
NGNGわ、わかりにくい... 一瞬考えてしまったが肉屋の方か。
0570time.h
NGNGウツダ
0571デフォルトの名無しさん
NGNG割算の答えを100桁(割り切れた場合はその桁まで)表示する方法を
教えてください。お願いします。
0572デフォルトの名無しさん
NGNG>割算の答えを100桁(割り切れた場合はその桁まで)表示する方法を
ライブラリでも用意するしかないよ。
0573デフォルトの名無しさん
NGNG> 割算の答えを100桁(割り切れた場合はその桁まで)表示する方法を
そんなに大きな桁を何に使うの?
無量大数でも68桁(88桁の説もあり)なのに...
0574デフォルトの名無しさん
NGNG演習2-9で分からないところがあるので、おしえていただきたいのです。
コードの改良は、
int bitcount (unsigned x)
{
int b;
for (b=0;(x=(x & (x-1)) != 0;b++)
;
return b;
}
でいいんじゃないかと思うのですが、
2の補数システムではなぜそうなるか、の説明がよくわかんないです。
最も右の1ビットから下位ビットが1の補数となり、&によって、0がセットされるため、
最も右の1ビットが消える。
では、ちょっと的外れのようなので、正しい理由を教えていただきたく思います。
もちろん、コードの間違いもありましたら、お願いします。
0576デフォルトの名無しさん
NGNG「多倍長整数演算」とかで、検索かけてみ。
ここで説明するのはきつい。
0577デフォルトの名無しさん
NGNGコンパイルする環境ないの?
そのコードは動いてないよ。
0578デフォルトの名無しさん
NGNG何も間違ってないぞ。
その解釈であってる。
0579デフォルトの名無しさん
NGNG101000 (x)
100111 (x-1)
100000 (x & (x-1))
0581デフォルトの名無しさん
NGNGhttp://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/index.html
リンク先の項番71から読め
0582デフォルトの名無しさん
NGNGこれだと2つの値が同じときでも後者が大きいと判断
されてしまいました。
ちゃんと等しいときに0を返してくれるのってどうすれば
いいのでしょう?
#include<stdio.h>
#include<string.h>
int main(){
char a[2],b=0;
a[1]=10;
a[2]=10;
b=strcmp(&a[1], &a[2]);
printf("a[1]: %d a[2]: %d b=%d\n",a[1],a[2],b);
if(strcmp(&a[1], &a[2])==0)
printf("等しい\n");
else if(strcmp(&a[1], &a[2])>0)
printf("a[1]が大きい\n");
else
printf("a[2]が大きい\n");
}
0583571
NGNGありがとうございます。
読んでみましたがよくわからないです。。。
C言語及びプログラム言語初心者には
難しい課題を与えられた気がします。。。
もっと簡単にできないでしょうか?
0584デフォルトの名無しさん
NGNG> srtcmpを使って数字を比較しようとしているのですが、
そもそもstrcmpは数字を比較するものではない。
> ちゃんと等しいときに0を返してくれるのってどうすれば
> いいのでしょう?
「ちゃんと等しい」をもっと「ちゃんと」定義して欲しい。
とりあえず
> if(strcmp(&a[1], &a[2])==0)
if(a[1] - a[2])
では駄目なのか?
0585デフォルトの名無しさん
NGNG>srtcmpを使って数字を比較しようとしているのですが、
もうね、アホかと。馬鹿かと。
0586デフォルトの名無しさん
NGNG割り算ってどーやるの?あれ?
まずふつーにやるだろ?余りがでんだろ?
その次どーすんの?0くっつけんだろ?それってなに?10倍ジャン?
そーやってやると小数圏に突入(乳突起きぼんぬ)すんだろ、
そんでつづけていけば最高じゃんか
そーやってやれ。余裕だ。
0587デフォルトの名無しさん
NGNG> そもそもstrcmpは数字を比較するものではない。
ごもっともです。
でも、a[1],a[2]を文字に置き換えてもstrcmpの結果が
0にはなってくれません。
とりあえずif(a[1]-a[2])でもできないこともなさそうです。
ありがとうっす。
0588デフォルトの名無しさん
NGNGすごい妄想だな!
strcmpは同じだとTRUE=1を返すんだっけ?そこが逆?
あと、数字の大きさ比較するにはなにも、引き算でいいじゃんか
0589デフォルトの名無しさん
NGNGたとえば文字(列)"4"を数字でつかえる4にしてくれるZO
0590デフォルトの名無しさん
NGNG0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNGfor (b=0; x != 0; x&=(x-1), b++)
にしないと、x=1のときゼロになる
0594デフォルトの名無しさん
NGNG> でも、a[1],a[2]を文字に置き換えてもstrcmpの結果が
> 0にはなってくれません。
残念ながらstrcmpは「文字」を比較するものでもありません。
「文字列」を比較します。
「文字」と「文字列」の違いについては入門書を良く読んでください。
0595デフォルトの名無しさん
NGNG0596デフォルトの名無しさん
NGNG文字を比較したかったら=使えばいいじゃんか
strcmpは文字も比較できるぞ。
=使ってて例えばabcdefghi(\0)からbcdなりcなりを
抽出したいときはどーする?そーゆーときstrcmpとか
シリーズを使うのだ!
0597デフォルトの名無しさん
NGNG> strcmpは文字も比較できるぞ。
できません。
できると思う人はできる例を示してください。
char a = 'a';
char b = 'a';
これをstrcmpでどう比較するの?
0598デフォルトの名無しさん
NGNGstrncmpを使えばできるね。
strcmp(&a,&b)でも比較対象a,bのそれぞれのすぐ後ろが'\0'なら
できないと言えなくも無いね。
だけど、そんなコードを俺の目の前で書いたら、氏なす。
0599デフォルトの名無しさん
NGNGそれはたまたま'\0'があったらってことだよね?
多くの場合において無いと思うから、同じ文字だったらアクセス違反になるだろうね。
ところで、なんで比較演算子を使いたがらないんだろう?
数字が昇順に並んでいない文字コードがあるの?
もしあったとしても、atoi()で変換してやればいいじゃない。
0600599
NGNG0601Kusakabe Youichi
NGNG> ところで、なんで比較演算子を使いたがらないんだろう?
> 数字が昇順に並んでいない文字コードがあるの?
けっこうありますね > そういうコードセット
0602Kusakabe Youichi
NGNG> あ、昇順に並んでいなかったらstrcmpもstrncmpも使えないか・・・・
え、それとは独立な問題ですよ。
0603デフォルトの名無しさん
NGNG馬鹿言うな
文字比較したいときは人間の手で一文字の
配列をつくるんですYO。
たとえば文字(列)検索ルーチンで
わざわざ一文字と複数文字の区別するんですか?
(ちょっとはするけどさ)基本的に文字列としてあつかうでしょ?
0604Kusakabe Youichi
NGNG> たとえば文字(列)検索ルーチンで
どっちですか? > 文字/文字列
0605デフォルトの名無しさん
NGNGCに於いて文字列とはヌルターミネートされた文字の並びを指します(例え一文字でも)
strcmpは文字列を対象に書かれてますので、文字の照合は///出来ません///
0606デフォルトの名無しさん
NGNG>>できないと言えなくも無いね。
この辺りから糞壁信者っぽい、ネタにもならんね
0607デフォルトの名無しさん
NGNGこだわる必要ねーんだよ。意味がわかったら
人間語の文字つー意味にもどれよ。
要は終記号がないとコンピューターが判断できない
つー話でしょうが。
テキスト中の文字(列)検索したいときに
いちいち一文字と複数文字の区別考えて
「えーっと、いま検索窓にaっていれたから
今は文字検索したな」やれ「あ、”あいう”っていれたから
これから文字列検索をします!」とか下らんことかんがえる
わけですか?語句検索すんのに文字も文字列もきにしないんですけど。
0608デフォルトの名無しさん
NGNGできないじゃん。
どーせちょちょっとやって、strcmp使ったって
いいんじゃんか。おんなじことだぜ?ほかの方法つかったって。
0609Kusakabe Youichi
NGNG> 糞壁が痛い人を呼んでいるので終了。
わたしのせいにしようとしても無駄ですよ:)
呼んでいるのはあたなでしょう:)
> Cに於いて文字列とはヌルターミネートされた文字の並びを指します(例え一文字でも)
なんじゃそりゃ:) > 例え
0610Kusakabe Youichi
NGNG> テキスト中の文字(列)検索したいときに
で、どっち? :) > 文字/文字列
0611デフォルトの名無しさん
NGNG===終了===
0612デフォルトの名無しさん
NGNG0613デフォルトの名無しさん
NGNG僕はヤフー検索するのに文字か文字列
なんて考えません。語句です。語ですか?句ですか?
とかいっちゃうあなたにマイナス1点
だいたいあなた、間違ってるYO.
文字列or文字、それでWholeをカバーするんですか?
絶対にどっちかだ!とか考えてんでしょ?
文字列を文字の区別はYes or Noとは違いますよ?
僕は人間言葉の文字という意味を使った。
0614574
NGNG考え出したら、ぐるぐる巡ってしまって、ちょっと解んなくなってました。
コードは、')'が足りなかったですね。
有り難うございます。
では、また、頑張ってみます。
0615デフォルトの名無しさん
NGNG再現しなくていいよ (^^;
0616Kusakabe Youichi
NGNG> うぉ!まだ言ってるんのか!
> 僕はヤフー検索するのに文字か文字列なんて考えません。
っていうかどっちですか?
1文字の文字と、
1文字の文字列は別物ですよ。
0617デフォルトの名無しさん
NGNG>>613
>僕は人間言葉の文字という意味を使った。
人間言葉の文字って何? 検索しても出てきませんが?
0618デフォルトの名無しさん
NGNG1〜6のそれぞれの目が出た回数を記録していきます。
振り終わった時に考えられる結果(1がm回、2がn回、3が…)
の総数と、一番多く出た目の数と一番少なく出た目の数の
差がB以下になる確率を出します。
Aを入力してからBを入力すると計算が始まります。
不正な数字が入力された時のチェックなどは省いています。
と、いうプログラムを気合で作りました。C初心者です。
添削希望です。
もっといい書き方などありましたら教えていただきたいです。
2回に分けてコピペします。
0619618
NGNG#include<conio.h>
void count(int *a,int margin,int *total,int *hit);
void haji(int *a,int *b);
void indec(int *a,int *b);
int zzz=0;
int main(void)
{
int eye[6]={0,0,0,0,0,0},margin,shake;
unsigned long int total=0,hit=0;
char ex;
printf("振る回数 … ");
scanf("%d",&shake);
printf("差 … ");
scanf("%d",&margin);
eye[0] = shake;
while(eye[5] != shake){
if(eye[5])haji(eye,eye+5);
else if(eye[4])indec(&eye[4],&eye[5]);
else if(eye[3])indec(&eye[3],&eye[4]);
else if(eye[2])indec(&eye[2],&eye[3]);
else if(eye[1])indec(&eye[1],&eye[2]);
else indec(&eye[0],&eye[1]);
count(eye,margin,&total,&hit);
}
count(eye,margin,&total,&hit);
printf("\n\n振る回数:%d回 差:%d以下\n",shake,margin);
printf("パターン数:%ld ヒット数:%ld ヒット率:%.15lf%\n\n",total,hit,(double)hit/(double)total*100);
printf("何かキーを押すと終了します。");
ex=getche();
if(shake>70){
printf("\n!!再確認!! 何かキーを押すと終了します。");
ex=getche();
}
return 0;
}
0620デフォルトの名無しさん
NGNGつーか下げでやれ下げで
0621618
NGNG{
(*a)--;
(*b)++;
}
void haji(int *a,int *b)
{
int i,kou=*b;
if(zzz < *b){
zzz = *b;
printf("%3d ",*b);
}
*b = 0;
for(i=4;;i--){
if(*(a+i)){
*(a+i+1) = kou;
(*(a+i+1))++;
(*(a+i))--;
break;
}
}
}
void count(int *a,int margin,int *total,int *hit)
{
int i,high,low;
high = *a;
low = *a;
for(i=0;i<6;i++){
if(high < *(a+i))high = *(a+i);
}
for(i=0;i<6;i++){
if(low > *(a+i))low = *(a+i);
}
if(high - low <= margin)(*hit)++;
(*total)++;
}
以上です。よろしくおねがいします。
0622デフォルトの名無しさん
NGNG0623あぼーん
NGNG0625デフォルトの名無しさん
NGNG> じゃぁ文字照合したいときはどーすんの?
strchr
ちなみに文字列照合の場合はstrstrを使う。
>>616も言っているが
「文字」と「文字列長が1の文字列」は別物
入門書から読み直せ
0626Kusakabe Youichi
NGNG> 入門書から読み直せ
どんな入門書がよいでしょう?
0627デフォルトの名無しさん
NGNG0628デフォルトの名無しさん
NGNG0629デフォルトの名無しさん
NGNG紙面の余白がとても多いのも良い、メモ帳にぴったりですね
次からはミシン目を入れて下さい :-D
0630Kusakabe Youichi
NGNG> 作ってわかるCプログラミング、紙質が素晴らしいね
はい、ペイジ数がとても多いのに、厚さを増さないように、
高い紙を使ったそうです。
> 紙面の余白がとても多いのも良い、メモ帳にぴったりですね
え? 余白は「少ない」ですよ。わたしはもっと余白をとってほしかった
(とくに小口側じゃなくてノドの側、ぎっしりすぎて読みにくい)
「余白が多い」とかって、ようするに実物見てないのでは? :)
(ここで誰かが書いてたデマを信じて書いたんだったら、恥かくだけですよ^^)
0631デフォルトの名無しさん
NGNGここでやるなよ。
隔離板へ逝け。
0632デフォルトの名無しさん
NGNGC言語入門書
http://www.amy.hi-ho.ne.jp/~lepton/program/prog/prog78.html
によると
> 「悪い入門書」のチェックポイント
> ・著者のイニシャルがK(あ、あとついでにMも)である :-p
だそうです。
# 例えばK下部とかかな?
0633574
NGNGあの辺りのスレ読み飛ばしていました。
0634デフォルトの名無しさん
NGNG0635デフォルトの名無しさん
NGNGhttp://www.amy.hi-ho.ne.jp/~lepton/program/mail/19990628.html
78の K西本批判は、その通りだと思います。
0636デフォルトの名無しさん
NGNGの意味だ、と言った覚えがないのだが
0637デフォルトの名無しさん
NGNG0638デフォルトの名無しさん
NGNGここは C 言語スレです。一般的な「文字」について語りたいなら、別のスレでお願いします。
(そもそも「俺」って誰だよ、番号書いてくれないと名無しさんばっかで分からん)
0639exciteさんに訊いてみました
NGNG↓
The character of human language
↓
人間の言語の特徴
0640デフォルトの名無しさん
NGNGするときにせいぜいアスキーコードでも
使って配列でもつくるんだねw
0641Kusakabe Youichi
NGNG> だから俺は明示的にC言語の「文字」
明示的っていう日本語はないですね。
0642デフォルトの名無しさん
NGNG0643仕様書無しさん
NGNG日本語語って欲しくないです。
0644デフォルトの名無しさん
NGNG京都の人間にとっちゃ、みやこは今でも京都だし、
それを聞いた東京の人間は、とっくに遷都しただろと思う。
0645デフォルトの名無しさん
NGNG0646デフォルトの名無しさん
NGNG誤植です。
0647Kusakabe Youichi
NGNG> 上京を(I☆ぢ京都に行くこと(I�C般�C洪祐屬法「
何言ってるんだかわからないですね。
0648デフォルトの名無しさん
NGNG0649デフォルトの名無しさん
NGNG> それはCとは関係あるの? 関係ないならsageでね。
sageていれば関係無いことをいくら書き込んでもいいということですか?
0650デフォルトの名無しさん
NGNG0651Kusakabe Youichi
NGNG> なんでKusakabeの引用は化けるの?
わたしのが化けているのではなくて、もとのがいけないだけでは?
0652デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています