[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/10 01:28 / Filesize : 110 KB / Number-of Response : 467
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門編)Part 61



1 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 23:27:18 ]
C言語の*入門者*向け解説スレッドです。
★前スレ
C言語なら俺に聞け(入門編)Part 60
pc12.2ch.net/test/read.cgi/tech/1264920499/
★過去スレ
makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
★初心者、初級者の方は他の質問スレのほうが良いかもしれません。
例えば
【初心者歓迎】C/C++室 Ver.72【環境依存OK】
pc12.2ch.net/test/read.cgi/tech/1267775473/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 134代目
pc12.2ch.net/test/read.cgi/tech/1263824755/
★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

75 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 13:58:16 ]
ゲームでも作りたいんじゃないの
確かやねうさんはビット演算でやっていたな

自分で紙に矩形とポイントを描いて条件を考えてみれば自ずと答えが見えてくるよ

76 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 14:20:51 ]
マウスの位置と矩形の位置を取得しておいて
矩形の上境界線と下境界線の間にマウスの縦座標があって
左境界線と右境界線の間にマウスの横座標があればいいだけじゃないの?

77 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 14:30:09 ]
left <= x && x <= rignt && bottom <= y && y <= top

78 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 14:30:29 ]
>>67

むかしBMPファイル(って予備領域とか拡張可能になってるから)に勝手にホットスポットっていうか
クリック可能位置を付け足してクリックすると話が進む紙芝居、見たいなの作った

言語も環境も書いてないからあれだけど
クリッカブルマップ、とかでググってみるとなんとかくやり方わかると思うよ
あとは環境しだいで同じ様な事を違うやり方でやれば

79 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 14:44:28 ]
様々なご回答ありがとうございます。
全て参考にさせて頂きます。

80 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 15:18:45 ]
>>68 : kdevelop (書こうとしてる字を予測して、自動補完してくれるからラクちんです)
>>71 : 三角形がいっぱいあるとおもってやるほうほうもあるみたいですよ。
double OuterProduct(
double ax, double ay, double az,
double bx, double by, double bz,
double cx, double cy, double cz
) {
double Ax=bx-ax; double Ay=by-ay; double Az=bz-az;

double Bx=cx-bx; double By=cy-by; double Bz=cz-bz;

double opx = (Ay*Bz-Az*By); double opy = (Az*Bx-Ax*Bz); double opz = (Ax*By-Ay*Bx);

return opz;
}

  B
A △ C
 3角形ABC の中に、点P が「中かな?外かな?」ってのを知りたいときは、
 「AB と P」、「BC と P」、「CA と P」 の3つについて、この関数で調べてみて、戻り値が3つとも全部プラス、または3つとも全部マイナスなら
 点Pは 3角形ABCの内側ってことらしいです。 なんでか理由はよくわかりませんがw

符号1 = OutarProduct( Aのx座標、Aのy座標, 0、  Bのx座標、Bのy座標、0、  Pのx座標、Pのy座標、0 );
符号2 = OutarProduct( Bのx座標、Bのy座標, 0、  Cのx座標、Cのy座標、0、  Pのx座標、Pのy座標、0 );
符号3 = OutarProduct( Cのx座標、Cのy座標, 0、  Aのx座標、Aのy座標、0、  Pのx座標、Pのy座標、0 );

if( 符号1と符号2と符号3が、3つともプラス。 または3つともマイナスなら){ 点Pは、さんかっけいABCのうちがわ♪ }
ってなるみたいです。 なんでか理由はよくわかりませんがw こんど算数の先生に聞いてみまーす。

81 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 15:22:25 ]
外積で左右判定してるんでしょ

82 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 16:35:50 ]
>>67 三角形の内部の点かどうか判定するプログラム
#include<stdio.h>
#include<math.h>

int is_inner(double ax, double ay, double bx, double by, double cx, double cy, double px, double py)
{
double Ax, Ay, Bx, By, Px, Py, alpha, beta, divisor;

Ax=ax-cx;
Ay=ay-cy;
Bx=bx-cx;
By=by-cy;
Px=px-cx;
Py=py-cy;

divisor=Ax*By-Bx*Ay;
if(fabs(divisor)<1.0e-6) return 0;

alpha=(By*Px-Bx*Py)/divisor;
beta=(-Ay*Px+Ax*Py)/divisor;

if(0.0<alpha && alpha<1.0 && 0.0<beta && beta<(1.0-alpha)) return 1;
return 0;
}

int main(void)
{
printf("%d\n", is_inner(1.0, 2.0, 2.0, 1.0, 1.0, 1.0, 0.5, 0.499));

return 0;
}

83 名前:デフォルトの名無しさん [2010/03/07(日) 21:51:15 ]
再帰的アルゴリズムの利便性がわかりません。
下手をすればスタック領域が蓄積されていってメモリ不足に陥りますよね。
再帰を使わなくても他に解決できる手段があればみなさんはどちらを選択しますか



84 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 21:54:10 ]
>>83
間違いが少ないほう

85 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 21:56:59 ]
ほらループなしで処理が書けたよ!と頭よさげにアピールできる
問題領域そのものが再帰的なら可読性と保守性があがる

C言語ではあまり利点がないので他の手段で頑張る
関数型言語とかだとまた別の話しになる

86 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:10:59 ]
>>83
利便性っていうか、再帰的な処理は再帰で書いた方がわかりやすいな。

87 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:11:17 ]
関数に状態を持たせるのがどうじゃこうじゃ
逆に再帰で書いているのを繰り返し制御などで書き直す方が頭良さげ

最近再帰使ったのはビット単位でファイルに書き込む関数の下請け関数だわ

88 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:28:25 ]
本物のプログラマは自己書き換えプログラミング・コードを記述する。
そのことにより再帰アルゴリズムを使うのに比べて20ナノ秒も実行時間が改善される


どうしても再帰なんつう場面は数年に一度
それ以外は、再帰アルゴリズムがぱっとわからないと馬鹿にされるという理由だけで使用する
プログラマってそんなもん

89 名前:デフォルトの名無しさん [2010/03/07(日) 22:52:19 ]
再帰は、数学の階乗を求めるプログラムをかじった程度です。
可読・保守性があがるという利点は納得です。
逆にプログラマが再帰プログラムを創り出すほうが大変そう。
階乗求める以外に再帰を使ったほうがいいケースは思いつきにくいですね

90 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:53:10 ]
>>89
3D オブジェクトを扱うときは必須だよ

91 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 22:54:05 ]
階乗こそ単純ループで十分で再帰にする必要なんてないんだが。

92 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 23:00:41 ]
無向グラフの経路探索とか再帰使わないと面倒でやってられんけど

93 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 23:01:26 ]
>>89
ディレクトリをおりていく処理とか、ループで書くとめんどくさいだろ。



94 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 23:12:27 ]
>>91
教材的な意味だろ

95 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 23:46:11 ]
教材としてあげるにしても、せめてユークリッドの互除法とか、フェボナチ数列(など漸化式)とかが出てこないものか

96 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 23:47:17 ]
再帰関数の教材ならハノイの塔の問題を解く奴が好き

97 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 23:56:03 ]
他人のコードで見つけるとループに書き換えられないかと難癖付けてみたくなる要素
自コードと同じスタックでライブラリ的利用させてもらう場合特に

98 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 00:55:01 ]
組み込み系だと、変数を取れるキャパが決まってたりして
「お、スタックが空いてる再帰でなんとかしろ」とかあるよ

99 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 01:18:44 ]
>>89
再帰だとシンプルに書けるものはたくさんある。
もちろんスタックオーバーフローには注意が必要だけど、
プログラマの差ってのはこういうところから来るんだと思う。

例えば、テキストファイルの行を逆順に出力する(いわゆるtacコマンド)
を作ろうとすると、再帰だとこんなにシンプル

#include <stdio.h>
void rev()
{
   char buf[1000];
   if(fgets(buf, 1000, stdin) != 0) {
       rev();
       fputs(buf,stdout);
   }
}
main() {
   rev();
}

100 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 01:21:16 ]
>>99
再帰関数で大きな自動変数の配列を使うのはナシだろ

101 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 01:25:22 ]
なにこの制限だらけのtac

102 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 01:50:03 ]
>99
これは再帰の悪い例としていつか使わせてもらう

103 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 02:14:39 ]
>>再帰
文字列の中から、正規表現によって単語検索をする場合、正規表現の文字列の並びを、配列から、一旦、順序木の構造に変換してしまって、
木のノードを順番に辿りながら、文字列を検索していくと、一連の検索を、共通の操作であつかえて簡単だとおもいます。

たとえば括弧で囲まれて1まとめになった複数条件も、あるノードの子としてまとめて、”あるノードの子というひとまとまりの単位”であつかえるので、
たとえば単純な ”A" という条件も、複雑な ”[AかBかC]”みたいな括弧で囲まれた条件も、どちらも同一の「”このノード”を使って検索する」という操作で扱えます。
これが再帰を使って得られる簡単さという恩恵だと思います。 簡単に素直にするために再帰を使うんだと思います。

たとえば括弧に囲まれた複数文字も、囲まれてない単一文字も、どちらも同じように考えて検索できるのだから、
木がどんなに複雑な形をしてても、逆にどんなに単純な形だとしても、
どちらも同じ要領で「”このノード”を使って検索する」という共通の操作だけで最後まで処理できます。

この順序木を巡っていくという操作を、単一のループだけでやろうとすると、
「さまざまな形の木を想定」して、それぞれに専用の動作を書いたりするケースが出てきやすいと思います。
(たとえば "A"の場合と "[AかBかCか]"の場合とでの動作の違いを、「わざわざ専用に用意」しないといけいない。などのメンドクササ。
これがループだけでやる場合のメンドクササだと思います。)


だけど、純粋に繰り返しの処理速度だけでみれば、やっぱり for ループみたいなモノの方が優れてるような気がします。よく知りませんが。
普通はループで十分事足りるので、たとえば「シンプルな int[1000] の配列全部に0を代入する」だけのことに、わざわざ再帰を使う必要は無いと思うし、
無理やり再帰なんか使ったら、逆に、わかりづらくなるだけだろうし、わかり辛いとミスも増えますし。

あたりまえですけど、「より簡単に、より素直に書ける方」を選んで使えばいいだけのことかとおもいます。どっちも便利だとおもいます。



104 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 04:41:46 ]
Cの場合、非再帰で記述(スタックを自前で構築ってのは
この場合反則になるんで)できる位の力量が無いのに
再帰(間接再帰を含む)を使いまくったコードを書くと
後で地獄を見る可能性も視野に...

105 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 05:08:48 ]
>>104
よく分からん縛りだけど
人に強要するのは勘弁してね

106 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 05:11:09 ]
ライブラリ、長く使うものに再帰はないな。
どこがスタック積まれるか判らないし、スタックオーバーフローもいつ起こるか特定できない。

107 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 07:41:46 ]
>>99
逆順にならない。

108 名前:107 mailto:sage [2010/03/08(月) 18:48:09 ]
失礼、行を単位に逆になるという意味だったんですね。ちゃんとうごきました。

109 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 18:51:24 ]
1行毎に1000バイトずつスタックに積むとか使えない。
手元にあるテキストは、1行当たり数キロバイトとか逆に数十万行とか普通にあるんだが。
まぁ発想方法としては、悪くないんだけどね。

110 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 18:58:51 ]
一行読んで、それを連結リストで繋いでおく方がいいな。
それでもファイルサイズが大きすぎると面倒だけど。
tacコマンドは、ファイルの末尾にseekしてから表示しているな。
seekできないストリームに対しては、テンポラリファイルにコピーしてから。
まあちゃんと読んだわけではないから詳しくは知らないけど。

111 名前:デフォルトの名無しさん [2010/03/08(月) 20:21:44 ]
Cと直接関係してる質問じゃないけど
ソースを見れる形でファイルを上げれるcodepadのようなアップローダって他にある?
なんか似たような感じで見やすいところがもう一つあった気がするんだけど

112 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 20:27:44 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
ここ?

113 名前:デフォルトの名無しさん [2010/03/08(月) 20:32:06 ]
いや、もっと企業がやってるようなオシャレな感じで掲示板では無かったんだけど。
codepadみたいにソースが表示されてdownloadボタンが付いてる感じで



114 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 20:35:20 ]
gist.github.com/
ここ?

115 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 20:44:11 ]
おおそれだ、探しても見つかんなかったんだありがとう。

116 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 20:44:29 ]
言われてから探して見つけてきたけど

117 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 20:52:01 ]
アップローダとか無駄なキーワード入れてたのが駄目っだのかな・・

118 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 20:54:14 ]
codepadの類似サービスだから一緒くたに紹介されてると思って、はてブでcodepadと検索したら出てきた

119 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 21:41:02 ]
#include <stdio.h>
void rev(void)
{
  char *buf;
  if ((buf = malloc(sizeof(char) * 1000)) == NULL) {
    fputs("memory allocate error.", stderr);
    exit(1);
  }
  if (fgets(buf, 1000, stdin) != 0) {
    rev();
    fputs(buf,stdout);
  }
  free(buf);
}

int main(void) {
  rev();
  return 0;
}

これでいいですか?

120 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 21:55:53 ]
malloc()で動的に確保しても、領域計算量が大きければ意味なし。

121 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 22:27:03 ]
最近も再起なんて使う?みたいなレスを見たなぁと思ったら図書スレでか
まぁこの手の話題は定期的にあがるもんだけど

122 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 22:28:31 ]
C言語って難しいんですか??


123 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 22:30:22 ]
難しいの定義による。



124 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 22:30:22 ]
>>122
わかれば簡単だと思うよ

125 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 22:30:56 ]
>>122
文法自体はかなり簡単な部類
ポインタで躓かなかったらな

126 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 22:32:03 ]
英語とかって、出来てたほうがいいですかね??

127 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 22:33:37 ]
>>122
難しいともいえるしやさしいともいえる。

低機能の言語なので、文法自体はシンプルで覚えることは少ない。(やさしい?)
低機能の言語なので、なんかやろうとするとめちゃくちゃ手間がかかる。(難しい?)

128 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 22:39:03 ]
>>126
出来た方がいいに決まってるが、
そんな質問するアホには必要ない。

129 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 22:39:54 ]
>>126
読みやすいプログラムはそれ自体英文として読めるプログラムだから(俺流の解釈)
読みやすいプログラムを書くためには英語は必要。

英語のできない人が書いたプログラムは大変。

CにしてもJavaにしても英語圏の産物なんだな。

130 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 22:54:34 ]
プログラミング言語は、アルファベット使うけど英語じゃなくて数学に近いな

131 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 23:24:31 ]
>読みやすいプログラムはそれ自体英文として読めるプログラムだから

こんなこというやつの変数や関数は長くてむかつく

ReadDataFromUserFileToImageBuffer()

みたいなやつ
あるいはアンダーバーでつなげてみたりして
今時補完機能があるからへいきだろう、とか言い出してさ

>読みやすいプログラムを書くためには英語は必要。英語のできない人が書いたプログラムは大変。

こういうこと言うやつは俺がnamaeみたいな変数とかyomikomi()みたいな関数作ると怒り出すよな
いいじゃん、日本人なんだから日本語にしただけで読みずらくなったりしないよ

と見ず知らずの129にすげえむかつく

132 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 23:26:24 ]
英語できないやつのプログラムは、
childs とか serch とか、ありえないスペルミスがあって、読みにくくてかなわん。

133 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 23:26:40 ]
いや読みにくいから



134 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 23:26:53 ]
>>131
日本語があやふやなお前が言っても説得力は無い


135 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 23:42:49 ]
俺が普段書くスクリプトなんて一文字変数、スペースけちって詰め詰めばっかりだよ

136 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 23:44:49 ]
SQL?

137 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 02:41:32 ]
>>131
ReadDataとToImageBufferが意味的にかぶってない?
UserFileというのもちょっと。
ReadImageFromFileじゃだめかい?

英文として読めるように、というのはよくある指針だね。

138 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 03:58:43 ]
RiyousyaFileKaraGazouBufferHeYomikomi()
とか書かれたらキレそう

139 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 05:21:39 ]
プログラムが正しく動作して、開発スタート時に決めた関数の命名規約
(※腐ったルールだとしても)を遵守しているなら、あまり気にしないレベル

140 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 07:16:23 ]
>>137

そうそう、こういう人
上記のやうは例じゃん、適当に作ったさ
それにたいしてまで、こんな事言ってくる
そういう点がむかつくんだって事

ReadImageFromFileじゃだめじゃん
長々と英文を関数名にしてるやつが居るよねって例としては短すぎる
ここは多少英語としておかしくても長くして置かないと駄目

141 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 07:17:31 ]
JISYO のように複数のローマ字方式をミックスしたり、
JYOHO のような適当ローマ字で書かれているのを見るとためいきが出る。

142 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 07:32:31 ]
readdata
readdata2
readdata3
readdataEX
readdataEX2

みたいにされるのもむかつく、混在してたりするとさらに

143 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 08:15:36 ]
とりあえず読みにくいのはお断り

関数名は英語とローマ字のどちらかに統一されていれば気にしない
混在してるとイラッとくるが



144 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 08:17:50 ]
>>140
シンプルだが単語のせいで長くなる場合は仕方ない
i18nのようにごまかすのもいいけど、やりすぎはよくない
複数の意味を含めた名前になるのならそれは関数化が足りない

145 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 10:05:36 ]
つかもともとCは単語を略す文化だよね

intもcharもbufだってそう
memcmpとかやっちゃうし

昔の本とかのソース見るとインデントもあって目を細めると螺旋模様のように見える
今のソースはBASICのようにブロック並べたみたい

146 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 10:09:31 ]
スパゲティコードより読みにくいという説もあるいわゆるうねりコードですね

147 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 10:35:16 ]
文化じゃなくて制限。creatとか今思えばひどいもんだよね
端末に表示できる文字数の問題もあったし、環境に合わせてその辺は変化していってもいいと思うんだ

148 名前:デフォルトの名無しさん [2010/03/09(火) 11:45:10 ]
Visual C++ 2008 Expressで1から勉強を始めたいのですが
ソリュージョンのディレクトリの作成はオンにするのとオフにするのはどちらがよろしいのでしょうか?

参考に2つのサイトを見て勉強したいと思います
苦C 9cguide.appspot.com/p_vc2005.html
猫  homepage2.nifty.com/c_lang/net2005/project.htm

苦Cでは特にオフにしろとは書かれてなく、猫のほうはオフにしろと書かれてましてオンとオフどちらにしたらいいのか分かりません

149 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 11:58:44 ]
すべてローマ字で書くことに決めたとしても、簡単なカタカナ語をどうするか悩む
どうしてもrisutoと書かなきゃいけないのか、listにしちゃいけないのか
そして無意識のうちにlistと書いちゃってコンパイルエラー

150 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:00:28 ]
>>148
両方やってみて違和感が少なかったほうにすればいいよ

151 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:01:36 ]
あ、気に入らなかったらフォルダごと捨てれば大丈夫だから、神経質にならずにためせばいいよって意味も含んでるよ
最初は確かにいろいろそわそわしたなぁと思い出したので追記

152 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 12:25:15 ]
ありがとうございます
オフにしてやってみます

153 名前:デフォルトの名無しさん [2010/03/09(火) 12:26:20 ]
> 読みやすいプログラムはそれ自体英文として読めるプログラムだから

COBOL 屋かてめーわ



154 名前:デフォルトの名無しさん [2010/03/09(火) 13:52:42 ]
他人のコードを改造しているんですが
コードの量が大きいので一つの変数の型を変更するとそれに関連するものを変更する作業が大変です。
例えばint型だったものを制度をよくしたいのでdouble型に変えたとします。
それに関連する関数の戻り値や引数、代入される変数等、膨大な数になってしまいます。
なにか自動で型を変換する方法ってありませんか?

155 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:09:54 ]
typedefしておけばいい

156 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:33:17 ]
理解力がなくてすみませんがtypedefでどう解決するのでしょうか?

157 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:42:44 ]
全部変えてしまうのは、まずいだろ
見ながら1こ1こかえるしかねーべ、そういうものとあきらめて

158 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 15:47:01 ]
mozillaではパーザで構文木作ってそれを木の変換技法を使って自在に書き換えするっていうのを
javascriptで作って、それをコードメンテに使ってるみたい
dehydraとかいうやつだっけか

159 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:08:52 ]
検討の例えで整数変数を実数に入れ替えにしてるのは

釣りかい?

160 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:14:02 ]
んだなぁ
(x == y)みたいなのは、型を変えただけじゃだめだしなぁ
結局>>157しかないな

161 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:21:18 ]
たとえばビット演算を使っていたりしたらアルゴリズムから検討する必要が出てくるので
自動でやるのはとても不可能だろうなあ。

162 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:22:10 ]
   , -‐−-、  ヽ∧∧∧ //  |
.  /////_ハ ヽ< 釣れた!> ハ
  レ//j け ,fjlリ / ∨∨V ヽ  h. ゚l;
 ハイイト、"ヮノハ     //   |::: j  。
  /⌒ヽヾ'リ、     //     ヾ、≦ '
. {   j`ー' ハ      // ヽ∧∧∧∧∧∧∨/
  k〜'l   レヘ.   ,r'ス < 初めてなのに >
  | ヽ \ ト、 ヽ-kヾソ < 釣れちゃった!>
.  l  \ `ー‐ゝ-〈/´   / ∨∨∨∨∨∨ヽ
  l     `ー-、___ノ
  ハ   ´ ̄` 〈/‐-、

163 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:32:51 ]
すいません、苦Cの事を一通り覚えた後は何をしたらいいでしょうか?



164 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:35:48 ]
>>163
アルゴリズムとデータ構造が少ない希ガス

165 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 16:41:12 ]
コマンドラインで動作する素数判定プログラムprimeを作っているのですがうまくいきません。
コマンドラインオプションでの整数取得・切り分けがうまくいかないです。
助言お願いします。

166 名前:154 mailto:sage [2010/03/09(火) 16:59:15 ]
多くのレスありがとうございます。
全intをfloat(double)に変換するとか強引な方法をとってはダメでしょうか?

167 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 17:04:35 ]
駄目かもしれないしOKかもしれない
なんでそんなことわかるの?

でもきっとコンパイルエラーがわんさか出るだろうな

sprintfとかの辺とかビット演算の辺とかまずそう
switch文とかもまずそう
サイズをsize_tじゃなくてintでやってるところとかあればまずそう
戻り値をintでエラーで分岐してたらまずそう

168 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 17:04:56 ]
ダメだって書いてあんだろーが

169 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 18:19:45 ]
#include <stdio.h>
void hack(void){
printf("実行可能\n");
exit(0);
}
void func(void){
int iArray[2];
iArray[4] = (int)hack;
}
void main(void){
func();
}

VC++のDebugで、
どうしてこれが実行できてしまうのでしょうか?

170 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 18:42:09 ]
そういう風にできてるから

171 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 18:44:52 ]
>>165
つ codepad
瞬殺でアドバイスが得られると思います。

172 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 19:15:01 ]
運がいいから

173 名前:165 mailto:sage [2010/03/09(火) 19:53:43 ]
素数判定ではなく素因数分解factorでした
ttp://codepad.org/ESKYLo9R

うまい具合に引数を整数にしたいです。
例えば、
factor 123451234512345
のときも動いてほしいです。

OSはwindows vistaでコンパイラはgcc、バージョンは
gcc version 3.4.5 (mingw-vista special r3) です。
その時のint型(4bytes)の上限は +2,147,483,647 (10桁)です




174 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 20:23:07 ]
>>173
gmp みたいな多倍長整数ライブラリを使う

175 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 20:40:07 ]
引数は整数になってると思うけど桁数を増やしたいって話?
20桁未満ならgccはlonglong使えるんじゃないか






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<110KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef