1 名前:デフォルトの名無しさん mailto:sage [2013/06/03(月) 19:28:25.11 ] あなたが解けないC言語/C++言語の宿題を片付けもらうスレッドです。 気に入らない質問やその他の発言はスルーの方向で。 「著作」「違法」「Qz」はNGワード推奨。 【質問者へ】 回答者の便宜のため、質問の際は以下を行うことを推奨します。 ・質問は【質問テンプレ】を利用してください。 >>2 以降にあります。 ・問題文は、出題されたまま全文を書いてください。 ・問題文やコードをリンクするときは、一言内容にについて説明をつけましょう。 ・計算問題は数式をあげ、どのような計算をするのか詳しく説明してください。 ・エラーは、その詳細と発生した行を書きましょう。エラーメッセージはコピペしてください。 ・後から問題に付け足しするのはコラー!!です。付け足しは作業を無駄にしがちです。 ・なりすましを防ぐため、トリップを使ってください。名前欄に、「#」に続けて任意の文字列を 入力して投稿すると、その文字列を知らない他人に騙られることを防ぐことができます。
152 名前:片山博文MZパンク ◆0lBZNi.Q7evd [2013/06/15(土) 19:31:14.39 ] >>119 #include <stdio.h> int f(int n) { int m, s; if (n < 10) return n == 1; for (s = 0; n; n /= 10) { m = n % 10; s += m * m; } return f(s); } int main(void) { int n; for (n = 1; n <= 10000; n++) if (f(n)) printf("%d ", n); printf("\n"); return 0; }
153 名前:デフォルトの名無しさん [2013/06/15(土) 19:36:13.02 ] ヨンシバは公開できないようです。何を恐れているのでしょうか。
154 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 19:36:48.29 ] >>152 評価 C 評価の理由は期限切れ後に教えてやる。WWWW
155 名前:デフォルトの名無しさん [2013/06/15(土) 19:38:35.43 ] >>154 じゃあヨンシバを評価してやるからさっさと書け。 出してないのはお前だけだぞ。
156 名前:デフォルトの名無しさん [2013/06/15(土) 19:56:33.13 ] >>153 期限内の回答はカンニングへの協力になるだろ。 バカ学生にエサはやらない。 WWWW >>155 お前のはどれだよ。WWWW
157 名前:デフォルトの名無しさん [2013/06/15(土) 20:02:15.15 ] ヨンシバさんは他の人のコードをカンニングしました。
158 名前:デフォルトの名無しさん [2013/06/15(土) 20:02:19.45 ] >>154 てめー、騙るんじゃねー。ねっ殺すぞ 評価は一緒だが WWWW
159 名前:デフォルトの名無しさん [2013/06/15(土) 20:17:35.31 ] [1] 授業単元:タンシバへの挑戦状 [2] 問題文:入力された正の整数をローマ数字に変換するプログラムを作れ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C/C++どちらでも可 [4] 期限:2013/06/18 [5] その他の制限:なし
160 名前:デフォルトの名無しさん [2013/06/15(土) 20:22:36.52 ] [1] 授業単元:サンシバへの挑戦状 [2] 問題文:入力された正の整数を漢数字に変換するプログラムを作れ(123→百二十三)。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C/C++どちらでも可 [4] 期限:2013/06/18 [5] その他の制限:なし
161 名前:デフォルトの名無しさん [2013/06/15(土) 20:25:24.07 ] [1] 授業単元:ヨンシバへの挑戦状 [2] 問題文:「こんにちは世界」と表示するプログラムを作れ。 [3] 環境 [3.1] OS:Windows [3.2] コンパイラ名とバージョン: gcc [3.3] 言語:C/C++どちらでも可 [4] 期限:2013/06/18 [5] その他の制限:なし
162 名前:デフォルトの名無しさん [2013/06/15(土) 20:32:09.41 ] >>155 おいチンカス、提出しないとDだぞ。WWWW
163 名前:デフォルトの名無しさん [2013/06/15(土) 20:36:49.81 ] >>162 ヨンシバさん、挑戦状が届いてます。>>161 これなら ヨンシバさんでも答えられるんじゃないでしょうか。 問題設定が非常にいいと思います。ヨンシバさんのためになると思います。
164 名前:デフォルトの名無しさん [2013/06/15(土) 20:47:33.56 ] >>150 sqだけなら >>163 提出期限 遅れないようにな。チンカス WWWW
165 名前:デフォルトの名無しさん [2013/06/15(土) 20:50:00.28 ] ヨンシバさんがまたもや逃亡しました。
166 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 21:00:07.90 ] ヨンシバハ、カスデアリマス。 ロクデモナイ、ニンゲンデアリマス。
167 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 21:17:34.55 ] やらないか?
168 名前: ◆QZaw55cn4c mailto:sage [2013/06/15(土) 22:11:20.56 ] >>119 toro.2ch.net/test/read.cgi/tech/1313183984/738 >>>147 , >>151 >>154 評価およびオナニー指数評価の両方をお願いいたします。
169 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 22:29:04.93 ] Qは老害だから射精したら心臓止まりそうになるんじゃねw
170 名前: ◆QZaw55cn4c mailto:sage [2013/06/15(土) 22:41:58.17 ] >>119 設題「1 <= n <= 10000 とした時の全ての Happy number を列挙せよ。」にあわせて置きます toro.2ch.net/test/read.cgi/tech/1313183984/739 >>147 >>151 >>154 評価よろしく
171 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 22:42:56.50 ] >>169 止まらなければ問題ない
172 名前:デフォルトの名無しさん [2013/06/15(土) 22:43:55.42 ] >>168 評価 片山MZより出来が悪いからC-
173 名前:デフォルトの名無しさん [2013/06/15(土) 22:46:59.88 ] >>164 騙るんじゃねー。殺すぞ >>166 ふざけんじゃねー 雑魚がWWWW >>170 評価はもう終わってんだよWWWW
174 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 22:51:49.43 ] 俺はおっぱい好きWWWW おっぱいおっぱいWWWW それも大きなおっぱいWWWW おまえらおっぱい写真貼れよWWWW
175 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 22:56:34.78 ] おい、おま、貼れよ いろいろ持ってるんだろWWWW
176 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 23:30:04.73 ] おまいらそんなにV8が好きか
177 名前:デフォルトの名無しさん mailto:sage [2013/06/15(土) 23:58:13.60 ] >>119 ideone.com/a6ZQAK
178 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 00:12:22.46 ] QZ発狂しすぎて発作起こすなよおい
179 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 00:48:24.45 ] QZって何のために糞コード回答してるの?
180 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 01:29:02.05 ] ポインタのポインタを引数とする関数が全く分からないんだけど、なんか参考になるコードとかないかな?
181 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 01:55:50.94 ] int main(int argc,char **argv)←コレ メモリ空間上にはアドレスが振られてて、有るアドレスに有る値を別のアドレスとして解釈するのがポインタ。 ポインタ自体は只の値に過ぎない。アドレス値という値をどう解釈してアクセスしたいかを考えればそれで良い。 mainの中で、 argvと書くと「「「どこかに有るcharな値」が連続する場所の頭を指すchar*な値」が連続する場所の頭を指すchar**な値」。 *argvと書くと「「どこかに有るcharな値」が連続する場所の頭を指すchar*な値」。 **argvと書くと「どこかに有るcharな値」。 argv=〜とか*argv=〜とか**argv=〜とかで書き換えるのもその値。 argv[N]だと「頭を指す」が「頭からN番目を指す」に変わるだけ。
182 名前:片山博文MZパンク ◆0lBZNi.Q7evd [2013/06/16(日) 01:58:47.80 ] >>180 2次元配列のように、マップデータや画像データを保持するためにポインタのポインタが使われることがある。 または、ポインタを書き換えるためのポインタとして使うことがある。
183 名前:片山博文MZパンク ◆0lBZNi.Q7evd mailto:sage [2013/06/16(日) 02:18:18.63 ] Cの文字列は、ゼロ終端の文字の並びの先頭アドレスでchar*型またはconst char*型だ。constを無視すると、文字列配列はchar**型に互換となる。
184 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 03:06:23.50 ] 多次元配列の罠にかかった人がここにも一人。 これだから多次元配列は…「char a[16*16];a[x+16*y]」でもつかっとけ。 >>182 > 2次元配列のように ポインタ配列は兎も角、二次元配列はポインタのポインタ(配列)のような記法でアクセスできるだけでポインタのポインタ(配列)ではないぞ。 「char a[16][16];char **b=a;」はコンパイル通らないだろ。 メモリ消費量も16*16バイトピッタリで、16*16+sizeof(char*)*16バイトではない。 エラーに出てるかもしれんが、各配列長を型として保持して、先頭から位置を求めてるんだよ **argvのメモリアクセスは二度だが、**aのメモリアクセスは一度だけだ。 >>183 > 文字列配列はchar**型に互換 「char a[16][16];」はナル終端文字列の配列だが互換性はないぞ。
185 名前:片山博文MZパンク ◆0lBZNi.Q7evd mailto:sage [2013/06/16(日) 03:16:33.11 ] くっ、なかなかやるな 今日はこの辺にしといてやるが、次はこうはいかないぜぇ あばよ
186 名前:デフォルトの名無しさん [2013/06/16(日) 03:19:06.33 ] 上で書いたものだけど、 function(int n,int *a,int **b)を宣言して、この関数で配列a[]の各要素のアドレスを 配列に入れて返したいんだけど**bの使い方が全く分からなくて困ってるって話からこの質問をさせてもらったんだ。 ちょっと抽象的な質問になっちゃったから聞き直したいんだけど、上記の関数ってどういう感じで考えてコードを書いていくか教えてほしい。 答えじゃなくてもヒントでも構わないんでどなたかよろしくお願いします。
187 名前:しったかぶり mailto:sage [2013/06/16(日) 03:55:54.57 ] >>186 返答返してから書くのもアレだけど、出来ればC++相談室向けの話題かもな。 で、片山クンが自爆したおかげでサンプル出てきたけど、ポインタと配列の絡みは型が重要になってくることもあるから宣言も一緒にね。 181ではさらっと"「どこかに有るcharな値」が連続する場所"と書いたが、配列でない時は"「どこかに有るcharな値」の場所"となる。 結論から行くと、おそらく「int aA[N]=...;int *aB[N]=...;f(N,aA,aB);」としているとして「int i;for(i=0;i<n;i++)b[i]=a+i;/*&(a[i])でも可*/」となる。 考え方だが… まず、aBはポインタの配列で、bもまたポインタの配列(の先頭)を指している。aAはintの配列で、aもまたintの配列(の先頭)を指している。 値を代入したい先はポインタの配列上のi番目のポインタ値であり、bの指す配列のi番目を更新することになる、ので「b[i]=〜」だ。 代入したい値はintの配列上のi番目の値"への"ポインタ値であり、aから数えてi番目の位置を欲しい、ので「a+i;」か「&(a[i])」だ。 入れ子になる順序やそれらが指す場所の意味を意識すると良い。 int **Pがあるとして、 「int{へのポインタ/の配列}(←甲とする){へのポインタ/の配列}(←乙とする)」を確認して、 「P[甲としての何番目か、ポインタなら0][乙としての何番目か、ポインタなら0]」とアクセスする。 PやP[〜]やP[〜][〜]はそれぞれが値なので&()で括ってそのアドレスを取り出す。 多次元配列は片山くんみたいなミスにつながるので、「char a[16*16];a[x+16*y]」でやったほうが確実。 Typoの危険は増えるけど、メモリ上での配置順とかが分かりやすくなるし、ああいうミスも減る…と思う。
188 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 04:21:26.24 ] 長えよ
189 名前:187 mailto:sage [2013/06/16(日) 05:08:46.64 ] しったかさんですもの
190 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 06:38:02.91 ] >>180 int main(int argc, char **argv);
191 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 06:49:27.00 ] >>186 ごめんね今まで例を都度ごとに書いていたんだけれど今日はあんまりやる気が起きないんだ、これでどうでしょうか? codepad.org/WbYjbaN5
192 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 07:17:13.81 ] C言語初心者です。 年利r、元金A,元利a,年数iのとき元金が倍になるまでの年数を求めるプログラムを作成せよ というプログラムですが #include<stdio.h> void main() { float a; int A,r,i; printf("年利(%)="); scanf("%d",&r); printf("元金="); scanf("%d",&A); i=0; a=A; while(a<A*2){a=a*(1+(r*0.01)); i++;} printf("i=%d年後,元金=%d円,元利合計=%5f円",i,a0,a); } とすると表示はされるのですが、解答の方ではfloat r;、int A,a,i、元利合計の部分が=%dとなっておりこの通りにするとエラーはないのですが 年利、元金入力後動かなくなります。
193 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 07:39:45.02 ] > 解答の方ではfloat r;、int A,a,i、元利合計の部分が=%dとなっており 解答が間違っている。%f が正しい。
194 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 07:41:17.45 ] >>192 > printf("i=%d年後,元金=%d円,元利合計=%5f円",i,a0,a); printf("i=%d年後, 元金=%d円, 元利合計=%d円\n",i,A,(int)a); とするのが綺麗
195 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 07:52:50.45 ] すみません最後a0ではなくAでした >>193 >>194 ありがとうございました。
196 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 09:30:48.36 ] おカネの計算に安易にfloatを使わせるのは教育上問題がある
197 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 09:35:26.61 ] そんなこと言い出したらCでやること自体が間違いだし
198 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 10:16:37.55 ] そういう意味じゃないと思うぞ
199 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 10:29:54.78 ] >>172 オナニー指数評価もお願いします
200 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 11:01:10.08 ] >>191 うーん、逆によく分からなくなってきた
201 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 11:50:30.38 ] >>200 ideone.com/QskKIo もしかしてこういう事がしたいの? Cだとポインタのポインタの参照がないからよく間違えるんだけど、ポインタ配列のアドレスを返すには ポインタのポインタのポインタにしなければならないので結構最初はとまどう
202 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 13:21:31.63 ] >>200-201 こういうときは C++ の参照がいいなっって思います. codepad.org/zX53XG8v >>201 × if ((*b = (int **)malloc(sizeof(int **) * n)) == NULL) ○ if ((*b = (int **)malloc(sizeof(int *) * n)) == NULL) × for (i = 0; i < N; i++) (*b)[i] = &a[i]; ○ for (i = 0; i < n; i++) (*b)[i] = &a[i]; あと free()‥‥.
203 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 13:53:49.90 ] >>202 free()はC++じゃないとついつい忘れる
204 名前:デフォルトの名無しさん [2013/06/16(日) 13:58:22.58 ] 特に呼び出した関数でmalloc()なんかしてると、小さなプログラムならいいけど、 大きくなると管理しきれないよね
205 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 14:16:05.03 ] >>203 >>204 javaのデコレーションの味を知ってしまったら‥‥GCもやむをえない、GCなんてlispな人だけのマイナーな存在だとばかりおもってたのにいつのまにか
206 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 14:35:16.45 ] >>205 俺は、プログラミングはC言語から入ってC++→JAVA(基本)→C#って 感じで勉強してきて、今、再度JAVAをちゃんと勉強してるけど あ〜・・配列返せるってなんて楽なんだろうとか、メンバ変数は初期化しなければ 勝手に0やnullやfalseにしてくれてるし、そのほかもろもろ楽だ〜・・・って思う。 が、反面、Cやってたせいか、いくらGCでもメモリまわりはいつも気になる。
207 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 15:22:50.56 ] >>180 さっきひさしぶりにC言語のコード書いた。これ参考になるかな?freeは自分でしてね。 #include <stdio.h> #include <string.h>#include <stdlib.h> typedef struct Hito Hito; struct Hito{char * name;int age;Hito * next;}; Hito* getNewInstance(char * name,int age){ Hito * temp = malloc(sizeof(Hito));temp->name = malloc(sizeof(char*)*(strlen(name)+1));strcpy(temp->name,name); temp->age = age;return temp;} void toAlist(Hito **top){char buff[256] = {'\0'},name[128] = {'\0'};int age = 0,i;char *p;Hito *temp; for(i = 0; i < 3; i++){if(*top == NULL){puts("名前と年齢を一つスペースを空けて入力"); fgets(buff,256,stdin); if(p =strchr(buff,'\n')) *p = '\0';sscanf(buff,"%s %d",name,&age); *top = getNewInstance(name,age); (*top)->next = NULL; }else{puts("名前と年齢を一つスペースを空けて入力"); fgets(buff,256,stdin); if(p =strchr(buff,'\n')) *p = '\0'; sscanf(buff,"%s %d",name,&age); temp = getNewInstance(name,age); temp->next= NULL; temp->next = *top; *top = temp;}}} void ShowAll(Hito *top) {Hito *temp; for(temp = top; temp != NULL;temp = temp->next){ printf("%s %d\n",temp->name,temp->age);}} int main(int argc, char *argv[]){Hito *top = NULL;toAlist(&top);ShowAll(top);}
208 名前:デフォルトの名無しさん mailto:sage [2013/06/16(日) 16:19:16.14 ] >>206 c# ってどんな感じ? java は言語仕様自体よりも豊富なライブラリ群に感心しているのだが c# に classpath がのっかるとかそんな話はないの?
209 名前:デフォルトの名無しさん [2013/06/16(日) 16:35:56.35 ] >>208 どんな感じって、例えばハーバート・シルトの「独習C#」でいいから打ち込んでみれば C#がどんな言語かは自分で分かる。Javaと似ているようでもあるし、全然違う部分も ある。特にGUIは超簡単。Javaにないプロパティも便利。 方向性がJavaとC#では違うんだよな
210 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 00:01:30.48 ] >>151 さて、>>119 の期限が切れたわけなんですが
211 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 01:00:39.35 ] ヨンシバさん、居たら返事してよ
212 名前:デフォルトの名無しさん [2013/06/17(月) 07:44:11.08 ] >>210 お前だけ未提出なわけだが、その上で煽る強靭なメンタルにはビックリだよ。WWWW ideone.com/VMs8to
213 名前:デフォルトの名無しさん [2013/06/17(月) 08:38:24.84 ] この数列は a 1, ... b 4, 16, 37, 58, 89, 145, 42, 20, ... のどちらとなり、aがhappy number 採点基準は問題から1)収束条件を読み取り、2)happy numberを出力する誤りの無いプログラムを作成する事。 A: 1,2を満たす B: 1,2の一方が不完全 C: 1,2の両方とも不完全 D: 未提出 >>140 は収束条件に配列サイズの制限ありなのでB とした 未提出はチンカス1人だけ WWWW
214 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 08:40:36.99 ] 大口たたいてこの程度とかw
215 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 08:41:30.94 ] >>213 配列サイズの制限について詳しく
216 名前:デフォルトの名無しさん [2013/06/17(月) 09:01:53.36 ] >>214 未提出のチンカスがなにかほえてるなWWWW >>215 整数全域の検査できないだろ 10以下と配列使ったチェックの組み合わせなら別解としてAでも良いが
217 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 09:03:32.80 ] nの範囲が限定されてるのに、整数全域の検査ができないことに何の問題が?
218 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 09:17:49.64 ] 無駄な計算を気にしない点ではクズと同レベルだったなw
219 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 09:24:22.78 ] 構ってちゃんなだけだった アホだろ
220 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 09:29:23.06 ] 140
221 名前:デフォルトの名無しさん [2013/06/17(月) 09:29:52.71 ] >>217 20世紀の伝説の恥晒しKKCに匹敵する「末尾再起を知らなかったチンカス」にしては全然ダメ 前回以上の爆笑レス期待してるぞ WWWW
222 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 09:38:33.55 ] ミス 140をちょっと改良 #include <stdio.h> int sq[10] = {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}; char chk[9 * 9 * 4 + 1] = {0, 1}; int calc(int n) { int ret = 0; while(n) ret += sq[n % 10], n /= 10; return ret; } int f(int n) { if(chk[n]) return chk[n]; chk[n] = -1; return chk[n] = f(calc(n)); } int main(void) { int i, j, k; for(i = 1; i <= 9 * 9 * 4; i++) if(f(i) == 1) printf("%5d", i); for( ; i <= 10000; i++) if(chk[calc(i)] == 1) printf("%5d", i); return 0; }
223 名前:デフォルトの名無しさん [2013/06/17(月) 09:49:01.57 ] なんかあれだよな、ヨンシバのネタってあたし何歳だと思う?に近いよな。 やりとりがくだらねえし、答え言われてもああそうで終わる。
224 名前:デフォルトの名無しさん [2013/06/17(月) 09:51:28.97 ] 一番提出が遅かったヨンシバ、効率が劇悪なコードを披露してしまってあえなく大敗北。 評価はFで。
225 名前:デフォルトの名無しさん [2013/06/17(月) 09:59:47.71 ] だって頭が悪いのに虚栄心だけは人一倍なんですもの
226 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 10:30:50.78 ] 最強麻雀スレを焼け野原にしたクソコテに似てる
227 名前:桃白白 ◆9Jro6YFwm650 [2013/06/17(月) 12:58:12.48 ] >>160 ideone.com/QVVdEq
228 名前:片山博文MZパンク ◆0lBZNi.Q7evd mailto:sage [2013/06/17(月) 13:56:01.67 ] 桃白白、C言語もできるんだw
229 名前:桃白白 ◆9Jro6YFwm650 [2013/06/17(月) 14:00:13.29 ] >>228 笑うな!黙れ!!黙れ!!
230 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 14:44:34.81 ] >>227 0
231 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 16:23:43.64 ] >>221 例の末尾再起コードは末尾で再起してるけど、そのへんのコンパイラでは最適化掛からず普通に再帰してスタック食いつぶして死ぬ。 元の発言者が末尾再起を知らなかった可能性は否定しないが、煽ってた馬鹿も末尾再起を理解していなかったオチだぞ。
232 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 16:55:31.84 ] 末尾最適化をアテにしたコードを書くなよ
233 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 17:05:51.73 ] >>231 再帰
234 名前:デフォルトの名無しさん [2013/06/17(月) 18:05:01.51 ] >>231 ごまかすなよ WWWW Qzが「再起ダセー」とうるせーから、これなら文句ねーだろと末尾再起の形に書き変えた後の大爆笑。ほらよログだ。 WWWW toro.2ch.net/test/read.cgi/tech/1352812333 874 :デフォルトの名無しさん:2013/01/29(火) 12:37:44.50 バカがうるさいので書き直してやるよ。www void free_l(struct l * restrict p) { struct l *next = p->next; free(p); if (next) free_l(next); } バカのいいがかりなんて所詮この程度の事。 バカには意味わからないだろうけどな。www 875 :デフォルトの名無しさん:2013/01/29(火) 12:50:52.54 いくつ連結されるかわからないリスト構造を再帰で解放するのは キチガイのやることです 876 :デフォルトの名無しさん:2013/01/29(火) 12:58:33.48 ここでwwwさんに問題です 天才には簡単な問題ですので必ず逃げないで答えてください スタックサイズが8MBのとき、このfree_l関数で解放可能な連結リストは 最大何個連結可能でしょうか? アーキテクチャは好きに選んでいいですよ
235 名前:デフォルトの名無しさん [2013/06/17(月) 18:08:26.41 ] あー、今見てもハラ痛てー しかも、とうのQzは渾身のオナニーに末尾再起を使うようになりましたとさ。WWWW
236 名前:デフォルトの名無しさん [2013/06/17(月) 18:47:27.36 ] >>231 >例の末尾再起コードは末尾で再起してるけど、そのへんのコンパイラでは最適化掛からず普通に再帰してスタック食いつぶして死ぬ。 ちなみに、末尾呼び出しを最適化しない「そのへんのコンパイラ」ってどれだよ。 後学のために名前とバージョン教えてくれや。WWWW
237 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 18:52:22.86 ] BCC32.EXE
238 名前: ◆QZaw55cn4c mailto:sage [2013/06/17(月) 19:20:15.48 ] >>231 はい!末尾再帰の本質を理解していませんでした! でも今なら(一方向の再帰ならば)末尾再帰に書き直すことができるまでに成長しました!誉めてください :−)
239 名前: ◆QZaw55cn4c mailto:sage [2013/06/17(月) 19:41:58.46 ] >>231 >煽ってた馬鹿も末尾再起を理解していなかったオチだぞ。 懇切丁寧に末尾再帰を教えていただいた彼の名誉のために敢えて申し上げておきますと、彼は一言で末尾再帰の本質を言い当てており、私もその一言で救われました。 >ジャンプ最適化
240 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 19:49:37.62 ] >>239 Schemeの継続が参考になるかもね。 ttp://practical-scheme.net/docs/cont-j.html
241 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 19:50:17.79 ] しかしやべえなQZってコテ 絶句
242 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 20:05:10.01 ] 再起ねえ。 ハングルで書くと、区別出来ないらしいが。
243 名前: ◆QZaw55cn4c mailto:sage [2013/06/17(月) 20:48:37.76 ] >>240 setjmp()/longjmp() は実装も含めておなじみなんですけれども、いまいち call/cc は‥‥‥ practical-scheme.net/wiliki/wiliki.cgi?Scheme%3AScheme%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%81%AE%E3%83%AC%E3%83%99%E3%83%AB10 >SICPも買ってはみたけれど、ちょっと読んでまだ難しそうなのでお休み。
244 名前:デフォルトの名無しさん [2013/06/17(月) 20:57:33.23 ] #include<stdio.h> #define SIZE 9 void function(int n,int *a,int **b); int main(void){ int i; int *b; int a[SIZE] = {1,2,3,4,5,6,7,8,9 }; function(SIZE, a, &b); for(i = 0; i < SIZE; i++){ printf("%d %d %p\n",i,a[i],&b); } return 0; } void function(int n,int *a, int **b){ int i; for(i = 0; i < n; i++){ b[i] = &a[i]; } } 自分で書いたらこんな感じになったんだけど、コンパイルして実行してみるといまいち思い通りの結果にならない…。 どなたか修正点をしてきしていただけるとありがたいです。 ちなみに>>186 です。
245 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 21:03:50.43 ] >>244 b の領域が無い
246 名前:デフォルトの名無しさん [2013/06/17(月) 21:07:56.11 ] >>245 ありがとうございます。領域確保はどのようにすればいいのでしょうか…?
247 名前:デフォルトの名無しさん [2013/06/17(月) 21:16:15.41 ] >>241 toro.2ch.net/test/read.cgi/tech/1352812333/876 はQzじゃない。>>223-224 がそのチンカス そのスレはまだ続きがあるんだ。末尾再帰を知らずに恥を晒し続けるチンカス(884,889) WWWW これに懲りたか、具体的な煽りは避けるようにしたらしい。WWWW
248 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 21:29:56.84 ] この性犯罪者、まだ言ってるのか どんだけ根に持ってるんだよwww
249 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 21:32:01.45 ] >>236 toro.2ch.net/test/read.cgi/tech/1359585842/55 バージョンは知らん。 >>239 「コンパイラがそれ検知して最適化しない限り」意味が無い。 コンパイラ+最適化オプションに依存してクラッシュするコードとかどうすんだよ。
250 名前:デフォルトの名無しさん mailto:sage [2013/06/17(月) 21:50:20.72 ] >>212 なにやら偉そうなことを言ってるけどお前も間違ってるじゃないか
251 名前:デフォルトの名無しさん [2013/06/17(月) 22:01:42.13 ] >>249 pastebin.com/hdLkPJ0G gcc-4.2.1/x86 pastebin.com/qdBuvre7 gcc-4.2.1/x64 pastebin.com/pbQWWVL5 vc++2010/x86 pastebin.com/Mgd4Bpgm vc++2010/x64 問題のfree_lは最適化できてるけど WWWW アセンブリ読めない? WWWW
252 名前:デフォルトの名無しさん [2013/06/17(月) 22:04:16.24 ] >>250 前回以上の爆笑レスを期待してるぞ。 チンカス WWWW