C言語って… (278レス)
上下前次1-新
86: 85 02/08/04 18:06 ID:??? AAS
あー、ごめん、ちょっと補足。
85のコードはx,yに値が代入された後、場合わけを含めて計算する。
0を入力されても止める必要は無いし、1の場合の場合わけも不要。
考慮していないのは乗数<0の場合。
0で計算される。
87(1): 02/08/04 18:50 ID:??? AAS
x, y の値を計算の途中で変えちゃってイイならば
while(--y) x*=x; とか。x が答えになる。
ただしこれは y<1 のときにかなり最悪なことになる。
ところで >>84 は一応ループつかってるんじゃないのか? > 85
88: 85 02/08/04 19:03 ID:??? AAS
>>87
えへっ、(省略されました・・全てを読むにはここを押してください)を読まなかったの v
私めんどうくさがりだもん。
…ごめんね。
89: 02/08/04 19:06 ID:??? AAS
>x*=x
ここは困った事になると思う。
90: 85 02/08/04 19:22 ID:??? AAS
そだね。
87さんのだと最終的な結果がx^(2^y)になるかな?
swapと一緒でtmpが一個いるよ。
tmp無しで書こうと思ったら、church数みたいに
int func(int xx,int yy){return (n==0)?1:xx*func(yy-1);}
とかあらかじめ関数を作っておいて、
printf("%d ^ %d = %d\n",x,y,func(y));
でOK。
しかし再帰でバグ出すと最悪数時間が消えるので、
他にいい方法があったり、あるいは急ぐときにはあんまりお勧めしないです。
91: 85 02/08/04 19:23 ID:??? AAS
ああっ、やってしまった…。
訂正です。
int func(int xx,int yy){return (yy==0)?1:(xx*func(xx,yy-1));}
これならうまくいくはず…。たぶん…。
92: 85 02/08/04 19:34 ID:??? AAS
やっぱりダメだぁ…。
訂正が面倒だから今回はちゃんとコンパイラ通した。
//再帰を使った階乗計算
#include<stdlib.h>
#include<stdio.h>
int func(int xx,int yy){return (yy==0)?1:(xx*func(xx,yy-1));}
void main(void){
int x,y;
printf("x?");scanf("%d", &x);//xを入力
printf("y?");scanf("%d", &y);//yを入力
printf("%d ^ %d = %d\n",x,y,func(x,y));//計算&結果表示
}
93(1): 02/08/04 20:04 ID:??? AAS
>84
pow()でいいじゃん。
94: g [0] 02/08/04 21:18 ID:??? AAS
外部リンク:www.kokorode.com
95: 02/08/04 21:27 ID:??? AAS
>93
ツェペリさんを思い出すのでいやです。
96: 84 02/08/04 22:34 ID:??? AAS
>>85 さんご意見ありがとう!
97(1): 02/08/04 23:14 ID:l10.DAfI(1/4) AAS
ところでx*=xって未定義だったっけ?
x*=xはx=(x*x)と等価だったと思ったけど
98: 02/08/04 23:21 ID:??? AAS
0
99(1): 02/08/04 23:25 ID:??? AAS
>>97
そんなことないよ。
xの内容をレジスタに入れてから演算、
その結果をxとして格納する、の順番に処理される(と思う)ので
何ら問題なくxにはx^2が格納されます。
100: 02/08/04 23:30 ID:l10.DAfI(2/4) AAS
>>99
「x*=xって未定義」に対してそんなこと無いよ
といっておられるのですか?
それとも「x*=xはx=(x*x)と等価」に対してですか?
話の内容から前者だと思いますが、ただ
>xの内容をレジスタに入れてから演算、
>その結果をxとして格納する、の順番に処理される(と思う)ので
a++=a;
とかがあるから、そういう言い方は出来ないと思うんだけど
101(1): 02/08/04 23:32 ID:??? AAS
未定義になるのは副作用完了点と副作用完了点の間で、変数の値が
2回以上変更されているようなケースです。x*=x; は式の先頭から、
副作用完了点である;の位置までに x の値は1度しか変更されて
いませんので未定義には当たりません。
102(1): 02/08/04 23:36 ID:??? AAS
> a++=a;
> とかがあるから、
ありません。
確認しましたがVCではエラー吐きますね。
103: 02/08/04 23:44 ID:l10.DAfI(3/4) AAS
>>102
書き込みミスです
104: 02/08/04 23:45 ID:l10.DAfI(4/4) AAS
>>101
やっぱりそうですか、
一応、あってたか・・・
どうもすみません
105: 02/08/04 23:46 ID:??? AAS
なんだかすごいことになってきたね。(笑)
106: 02/08/05 00:10 ID:??? AAS
知識のなさをひけらかす場になってきたな(笑)
107: 02/08/05 01:35 ID:??? AAS
C++も無名関数とクロージャがあればなぁ。
108: 02/08/05 02:00 ID:??? AA×

109: 02/08/06 17:58 ID:RPPDYFAM(1) AAS
z
110: 02/08/15 16:07 ID:??? AAS
行番号をいちいち書かずに例えば、
「現在1203行目を実行しました。
「現在1452行目を実行しました。
みたいに表示させいってて実行時の処理経路を明確にして行きたい
んだくぅえども、いちいち行番号を書くのが面倒くさい。
なんかちゃちな置換アプーリ作っておくしかない?
ちなみに環境はbcc+Terapad・・・
111: 02/08/15 17:23 ID:??? AAS
組み込みマクロ __LINE__ と __FILE__ を使う?
全部の行でなくブロック単位にトレース情報を埋め込むツールがあったような気がする・・・
112: 02/08/15 18:36 ID:??? AAS
>111
おぉ、それかも。
さんくす
113: 02/08/17 00:42 ID:??? AAS
C99で新しく採用された__FUNCTION_だったっけ?
関数名埋め込み機能が激しくホスィ。ログ取り楽だろうなぁ…
114(1): 02/08/17 16:49 ID:??? AAS
>113
BCCの__FUNC__と同じ?
やばひ、全然使ってないよ・・・勿体無い。
__DATE__、__TIME__こんなのもあった。鬱
115: 02/08/19 00:04 ID:??? AAS
>114
__DATE__や__TIME__は(当然)コンパイル時点の時刻だから
あまり役には立たないよ。せいぜいobjにコメント埋め込むくらいか。
上下前次1-新書関写板覧索設栞歴
あと 163 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.018s