ふらっとC#,C♯,C#( ..
[2ch|▼Menu]
116:デフォルトの名無しさん
09/03/03 04:03:43
>>115
ごめん、そりゃそうだ
エラーになると思い込んでたのでorz

117:デフォルトの名無しさん
09/03/03 04:06:18
>>113
ちなみに(int)cは出来る。
といった辺りから考えてみてくださいな。

118:デフォルトの名無しさん
09/03/03 04:27:16
あー、わかった
stringはcharの配列だけどcharは値型、stringは参照型だからキャストできないってこと?
charは16bitのUnicodeだし

119:デフォルトの名無しさん
09/03/03 08:03:13
変換演算子が定義されてないからキャストできないだけで
値型とか幅とか何も関係ない

120:デフォルトの名無しさん
09/03/03 09:25:56
うん
できたからといって別におかしいことはない
できるようにされてないだけ

121:デフォルトの名無しさん
09/03/03 09:58:26
ファイル読み込みについて質問なんですが、
拡張子ではなく中身でテキストファイルかバイナリファイルかを
判別する方法ってありますか?

122:デフォルトの名無しさん
09/03/03 10:01:33
テキストファイルだってバイナリだろ

123:デフォルトの名無しさん
09/03/03 10:04:09
IMultiLanguage2に食わせてみる

124:デフォルトの名無しさん
09/03/03 10:05:02
メソッド名抜けた。DetectInputCodepage

125:デフォルトの名無しさん
09/03/03 13:06:42
このへんかな?
まぁテキストかバイナリかを見分けると言われれば>>122が正しいんだが
ちょっとエスパーしてみた
URLリンク(dobon.net)


126:デフォルトの名無しさん
09/03/03 14:04:57
FindMimeFromData()じゃないの?

127:デフォルトの名無しさん
09/03/03 14:10:53
DBから指定したテーブルのIDフィールドとNAMEフィールドを取得して
NAMEフィールドをコンボボックスに表示したいと思っています。
その時にNAMEフィールドのデータに紐付くIDフィールドも保持して
コンボボックスを操作した際に、IDフィールドも同時に制御するような処理を作りたいのですが
どのように作ればいいのでしょうか?

コンボボックスを2つ用意して片方を非表示にして制御する方法しか思いつきませんでした
宜しくお願い致します

128:デフォルトの名無しさん
09/03/03 14:25:20
>>127
つコレクション

129:デフォルトの名無しさん
09/03/03 14:45:21
DataTable使ってねーの?

130:デフォルトの名無しさん
09/03/03 15:30:30
めんどくさいからバインドしちゃえよw

131:デフォルトの名無しさん
09/03/03 15:30:54
>127
DisplayMemberにName
ValueMemberにID

SelectedChanged(で合ってるのかな)イベントにハンドラ追加して
ComboBox.SelectedValueでIDが取得できるんじゃね?
データバインドのときに限るが。

それかEntityクラス作って ToStringメソッドをオーバーライドして
ToStringでNameを返すようにする。
Entityクラスのオブジェクトをコンボにセットすれば
ToString()したときの文字列がコンボに表示される。
あとはSelectedChangedで(Entity)キャストしてオブジェクトを取り出す。

132:デフォルトの名無しさん
09/03/03 20:07:59
List(要素数は50個)を
List1(0〜25)とList2(25〜50)に分割するにはどうやったらいいのでしょうか?

133:デフォルトの名無しさん
09/03/03 20:16:13
GetRange使えば?

134:デフォルトの名無しさん
09/03/03 20:22:03
ありがとうございます
GetRangeなら出来そうですね
やってみます

135:デフォルトの名無しさん
09/03/03 20:27:14
list.GroupBy(i => i < 25);

136:デフォルトの名無しさん
09/03/03 21:01:10
>>135
それは違うだろ。値じゃなく添え字で分けたいんだから。

137:デフォルトの名無しさん
09/03/03 21:12:14
そういえばGroupByにindexくれるFuncを使えるのが無いのは何でなんだろ

138:デフォルトの名無しさん
09/03/03 21:12:46
>>136
すまん、そのとおりだ。
長くなるけどこっちで。
list.Select((value, index) => new { value, index }).GroupBy(t => t.index <= 25, t => t.value);

139:デフォルトの名無しさん
09/03/03 22:59:25
生年月日と指定した日付を渡すと
指定した日付の時の年齢を返すようなのってどうやりますか?

140:デフォルトの名無しさん
09/03/03 23:00:25
引き算

141:デフォルトの名無しさん
09/03/03 23:08:45
DateTimeクラスなんかで年齢を返すメソッドがあってもいいような・・・
あんま需要ないのか?

142:デフォルトの名無しさん
09/03/03 23:18:03
それは需要があるとしてもTimeSpanか、あるいは年齢専用のクラス(Ageクラス?)
でやるべきじゃないのかな

143:デフォルトの名無しさん
09/03/03 23:18:56
誕生日って閏年とかあったから、単純に引き算だとへんな年齢になることなかったっけ?
正確には月を比較して、同月なら日を比較して、年の差から年齢を求めるが正しい気がする。

144:デフォルトの名無しさん
09/03/03 23:19:31
VB だったらそういうメソッドも普通に定義されてるかもな。

145:デフォルトの名無しさん
09/03/03 23:21:32
日本の法律では、誕生日の前日に年を取る

豆知識

146:デフォルトの名無しさん
09/03/03 23:23:55
>>145
法律的に年利計算は閏年の翌日?前日?

147:デフォルトの名無しさん
09/03/03 23:30:11
>閏年の翌日?前日?


148:デフォルトの名無しさん
09/03/03 23:35:42
TimeSpanに年数を示すプロパティはないんだな。考えてみれば、月数や年数はTicksから
一意に定まるものじゃないものな。
結局場合分けして引き算するしかなさそうだ。
ちなみに、年齢が変わるのは「誕生日の前日の午後12時」なので、誕生日が来たら年齢が変わると考えておk。

// DateTime d1 = 指定日付, d2 = 誕生日
int age;
if (d1 < d2)
{
  // 何かしらエラー処理する
}
else if (d1.Month > d2.Month || (d1.Month == d2.Month && d1.Day >= d2.Day))
{
  age = d1.Year - d2.Year;
}
else
{
  age = d1.Year - d2.Year - 1;
}

149:デフォルトの名無しさん
09/03/03 23:36:04
税金関係は1年=365日で定数だった気が

誕生日の前日に年取るのは閏日生まれの為だし

150:デフォルトの名無しさん
09/03/03 23:42:56
>>106
詳しく!
ヘルプミー
今日で約1週間!俺はアホなのかー♪;;

151:デフォルトの名無しさん
09/03/03 23:48:42
>誕生日の前日に年取る
これじゃ不正確
民法の試験じゃ×になる

152:デフォルトの名無しさん
09/03/03 23:50:26
だからなんだよ。司法関係者にでもなるのか?

153:デフォルトの名無しさん
09/03/03 23:52:06
うん
応援してね

154:デフォルトの名無しさん
09/03/03 23:54:27
                  .∧__,,∧
                 (´・ω・`)
                  (つ夢と)
                  `u―u´

          あなたの後ろに落ちてたこれを、






        ∧__,,∧                         ∧__,,∧
      (`・ω・ ) ミ                   (`・ω・´)
        (     つ  ⌒ヽ               と   ,u、つ
      `u―u'     夢               `u´夢
                YY⌒Y
         こうして、                   こうして、



                    ∧__,,∧
            _     (ω・´ )
         夢 三ニ ☆ __,(    )つ
              ̄    `ー―‐u'

                 こうだ !


155:デフォルトの名無しさん
09/03/04 00:01:14
>>150
Data Source=***.***.***.***,????;Initial Catalog=++++;Persist Security Info=True;User ID=--;Password=\\\\

***.***.***.*** ipaddress
+++ データベース名
-- 接続するユーザ名
\\\\ 接続するユーザ名のパスワード

で接続できた。インスタンスは規定のインスタンスだから指定なし

156:デフォルトの名無しさん
09/03/04 00:02:31
>>151
んでシステム上ではどうするのが正解なんだい

157:デフォルトの名無しさん
09/03/04 00:03:39
すまん
????はポート

158:デフォルトの名無しさん
09/03/04 00:18:44
                  .∧__,,∧
                 (´・ω・`)
                  (つ夢と)
                  `u―u´

                  回収!!


159:デフォルトの名無しさん
09/03/04 00:20:33
ポート・・・?うーん勉強してきます・・・
ありがとう

160:デフォルトの名無しさん
09/03/04 00:20:54
  ∧_∧
  ( ・∀・)
 と    )シュッ
   Y しノ彡    -=ニ三      夢
  ヽ  )



161:デフォルトの名無しさん
09/03/04 00:29:25
                  .∧__,,∧
                 (´・ω・`)
                  (つ夢と)
                  `u―u´

                もう離すものか!!
                だれにも渡さない!



162:デフォルトの名無しさん
09/03/04 00:31:26
      ∧_∧
   ∧_(∀゚ ; )
  ( ・∀・)   つ
  (っ夢⊂≡て ヽ よこせ
  して_)_ノw (_)

  ∧_∧
  ( ・∀・)
 と    )       シュッ
   Y しノ彡    -=ニ三      夢
  ヽ  )



163:デフォルトの名無しさん
09/03/04 00:35:28
いつも思うんだが、お絵かきできてうれしくなっちゃう奴って
精神年齢が幼稚園時代で止まってるのか?

本気で理解できんよ。

164:デフォルトの名無しさん
09/03/04 00:37:57
コピペネタにマジレスかよw

165:デフォルトの名無しさん
09/03/04 00:40:47
                  .∧__,,∧
                 (´・ω・`)
                  (つポート
                  `u―u´
ポートとは何ぞや!

166:デフォルトの名無しさん
09/03/04 00:41:35
コピペだろうが何だろうがマジレスしてもらえるだけありがたいだろ

167:デフォルトの名無しさん
09/03/04 00:42:42
わりい間違えた 
×マジレス
○キチガイレス
だわ

168:デフォルトの名無しさん
09/03/04 00:44:22
>>132
25が重複してるが、当分割と仮定して、

var list1 = list.Take(25).ToList();
var list2 = list.Skip(25).Take(25).ToList();

>>139
int age = target.Year - birth.Year;
if(target < birth.AddYears(age)) age--;

169:デフォルトの名無しさん
09/03/04 00:45:07
>>163
お絵かき楽しいだろ。
素直になれよ。

170:デフォルトの名無しさん
09/03/04 09:49:54
>>159
特別な事情がない限りSQL Serverのポート番号はデフォルトの1433なので省略可能。
ので接続先のマシンがたとえば192.168.1.1でインスタンス名がSQLEXPRESSなら
Data Source=192.168.1.1\SQLEXPRESS
だし、既定のインスタンスに接続するならインスタンス名も省略できて
Data Source=192.168.1.1
で、特別な事情(SQL Server 2000/2005/2008を共存させてるとか)があって別のポート(たとえば11433)を使っているなら
Data Source=192.168.1.1,11433\OTHERINSTANCE
それでもつなげないなら接続先のファイアウォールが邪魔してると思われる。

171:デフォルトの名無しさん
09/03/04 10:12:34
そもそもManageMentStudioExpressとかで繋げてるのかな…・?

172:デフォルトの名無しさん
09/03/04 10:46:18
>>159
>>171も言ってるように、SSMSとかサーバーエクスプローラとかで接続してみるのが先だな。
てか、TCP接続ってデフォルトでOFFじゃなかったか?

それにしても斬新な区切り方だな>>171

173:デフォルトの名無しさん
09/03/04 11:39:32
C#でアッカーマン関数を計算させようとしていますが、スタックオーバーフローが
起きます。C#でスタック領域を広げるにはどうすればいいのですか?

174:デフォルトの名無しさん
09/03/04 11:55:25
多倍長計算させて、それでスタックが足りなくなってるの?
それとも、普通にInt32なりInt64なりを使っていて、再帰が
深くなりすぎてスタックが足りなくなってるの?

後者だとしたら、どうせ計算可能な部分はめちゃめちゃ限られているので、
アッカーマン関数の値を計算していく順序を工夫すべきだと思う。

URLリンク(www.google.co.jp)アッカーマン関数&lr=lang_ja&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ja:official&client=firefox-a
これ見ると分かるけど、m=3以降に関しては、頑張っても報われないよ?


175:デフォルトの名無しさん
09/03/04 11:59:52
>>173
>>174で答えが出てるけど、どうしてもスタック領域を広げたいという話であれば
Threadクラスのコンストラクタで指定できるらしい。試してないけど。
URLリンク(msdn.microsoft.com)


176:デフォルトの名無しさん
09/03/04 12:01:22
>>174
再帰が深くなりすぎます

>>175
具体的にはどのようなコードを書けば良いのでしょうか?さっぱりわかりません

177:デフォルトの名無しさん
09/03/04 12:02:40
例えば大きな配列を確保する時など、後学のためにスタックサイズを
広げる方法を知っておきたいのです。C/C++ならリンカオプションで
簡単に出来るのですがC#では何かよくわかりません

178:デフォルトの名無しさん
09/03/04 12:06:58
Threadクラスの(ThreadStart, Int32)のコンストラクタ

179:デフォルトの名無しさん
09/03/04 12:07:08
.NETの配列はヒープに領域を取るのでスタック関係なし
再帰はスタックサイズの変更よりループに展開することを考えた方がいい

180:デフォルトの名無しさん
09/03/04 12:07:47
>>178
それはヘルプを見て確認していますが、使い方がわからないのです
短いコードで良いので具体的な使い方を教えていただきたいのです

181:デフォルトの名無しさん
09/03/04 12:09:45
別のスレッドを作ってそっちで動かすってこと
C# スレッド でググれ

182:デフォルトの名無しさん
09/03/04 12:10:34
>>181
もちろん既にぐぐっていますがよくわからないのです

183:デフォルトの名無しさん
09/03/04 12:12:09
スレッドが分からないくらいだったら
スタックサイズとか変なこと考える前に基礎をやれとしか

184:デフォルトの名無しさん
09/03/04 12:17:16
using System;
using System.Threading;

class Program
{
static void Main()
{
int maxStackSize = 1 * 1024 * 1024 * 1024;
Thread th = new Thread(DoWork, maxStackSize);
th.Start();
}

static void DoWork()
{
//...
}
}


185:デフォルトの名無しさん
09/03/04 12:27:24
>>184
ありがとうございます
助かりました
これを参考に作り直してみます

186:デフォルトの名無しさん
09/03/04 12:31:13
Stack<T>でも使って引数だけでもヒープに置くようにしたらだいぶマシなんじゃない
>このコンストラクタのオーバーロードを使用しないでください。
だし

187:デフォルトの名無しさん
09/03/04 12:53:12
遅そうだけど素直に展開したらこんな感じか
Stack<long> stack = new Stack<long>();
stack.Push(m); stack.Push(n);
while (1 < stack.Count) {
n = stack.Pop(); m = stack.Pop();
if (m == 0) { stack.Push(n + 1); }
else if (n == 0) { stack.Push(m - 1); stack.Push(1); }
else { stack.Push(m - 1); stack.Push(m); stack.Push(n - 1); }
}
return stack.Pop();

188:デフォルトの名無しさん
09/03/04 14:12:06
>>139-143

20090304 - 19870305 = 219999

これを10000で割った商が年齢になる。
別にうるう年とか全然関係ない。
このスレは算数もできない文系プログラマばっかりなのか?


189:デフォルトの名無しさん
09/03/04 14:20:49
算数や数学の問題じゃないだろうw
ともかくそれで正確な答えが出るんだったら便利だな

190:デフォルトの名無しさん
09/03/04 14:41:44
>>188
すげーw
おまえ天才だなw

191:デフォルトの名無しさん
09/03/04 15:04:33
結局、月を比較して同月なら日を比較してるだけじゃん

192:デフォルトの名無しさん
09/03/04 15:11:11
>>191
何を言っているんだ?

193:デフォルトの名無しさん
09/03/04 15:13:56
さすがC#スレ
レベルが低すぎる
日曜プログラマならぬなんちゃってぷry

194:デフォルトの名無しさん
09/03/04 15:23:20

int ydiff = dt1.Year - dt2.Year;
if (dt1.AddYears(-ydiff).CompareTo(dt2) < 0) { ydiff--; }



195:デフォルトの名無しさん
09/03/04 15:24:52
どうみても算数や数学の問題だろう。
極論を言えば、
1+2+4+8+16+32+.................+1024を求めるときに、
思考を放棄している人間はそのまま足していくか諦める。
思考する人間は、
S=1+2+..........+1024とおいて、
2*S = 2+4+........+2048との差を求めることで和を得る。
これは別に学校で等比級数の公式を習ったかどうかという問題ではない。

>>140で答えが出ているのに、>>143みたいな思考を放棄したプログラマは考えもせずただ

>正確には月を比較して、同月なら日を比較して、年の差から年齢を求めるが正しい気がする。
こんなことを言い出す始末。
これは上の問題で言えばそのまま足していく人間だと言うことだよ。

プログラマだったら便利なメソッドが用意されてなかったら自分で考えて作るくらいのアタマが欲しいところだ。

196:174
09/03/04 15:42:06
アッカーマン関数の話だけど、
・同じ行では左側(nが小さい方)しかか参照しない
・上(mが小さい方)の列程計算可能な行(n)は多い
なので、再帰を使わずに、表の参照と捉えた方が良い。
そうしないと、同じ枡を何度も無駄に計算する事になる。

List<List<int>> Ack = new List<List<int>>();
とか作って、
            const int maxN = 100000;
            int m = 0, n = 0;
            while (true) {
                Ack.Add(new List<int>());
                n = 0;
                while (true) {
                    try {
                        if (n > maxN) throw new Exception();
                        if (m == 0) {
                            Ack[m].Add(n + 1);
                        } else if (n == 0) {
                            Ack[m].Add(Ack[m - 1][1]);
                        } else {
                            Ack[m].Add(Ack[m - 1][Ack[m][n - 1]]);
                        }
                        n++;

197:デフォルトの名無しさん
09/03/04 15:42:47
                    } catch {
                        Console.WriteLine("for m=" + m.ToString("0")+ " calculation is terminated at n=" + n.ToString("0") + ".");
                        break;
                    }
                }
                if (Ack[m].Count == 0) break;
                m++;
            }
ってやれば、再帰は必要ない。再帰ではなく、表の参照だと考えて、
各枡の値を計算するにはどの枡の情報が必要かを考える。

環境によってmaxNを色々変えるとベンチマークにもなるかも。

198:デフォルトの名無しさん
09/03/04 16:06:39
>>192
構造上、比較の優先順構造が桁の上下に投射されているだけだという話だろ

199:デフォルトの名無しさん
09/03/04 16:14:13
ASP.NET でC#使ってます。VS2008。
Default.aspxが呼ばれたときに
それがWebClientからの要求かブラウザからの要求かを
見極める方法はありますか?
WebClientからの要求がTrueでその他はFalseと判断したいです。
ブラウザプロパティを見てみると
WebCleintの場合は"Unknown"と出るんですが、
新しいブラウザが開発されたらUnknownになるかなと思ったんです。
QueryStringによる判断は不可です。
ブラウザで直打ちされたらtrueになるので。
どなたかよろしくお願いします。

200:デフォルトの名無しさん
09/03/04 16:33:00
HTTPリクエストヘッダなんかいくらでも詐称できる

201:デフォルトの名無しさん
09/03/04 16:36:26
>>188
言ってることはわかるし、凄いとも思うんだが、C#のコードで表現すると
さほどシンプルでもないんじゃね。
int age = ((today.Year * 10000 + today.Month * 100 + today.Day)
  - (birthday.Year * 10000 + birthday.Month * 100 + birthday.Day)) / 10000;



202:デフォルトの名無しさん
09/03/04 16:41:10
>>195
「引き算」と書かれてそれを鵜呑みに信じることこそが、真の思考を放棄していないプログラマなんだな。
楽だな。

203:デフォルトの名無しさん
09/03/04 16:44:54
>>201 引き算だってC#で書けるだろ。
>>188はyyyyMMddを引き算すればいいじゃんってことを言っているわけで
わざわざ>>201みたいなコード書く必要ないよ、ってことだよ。
どう考えても>>188がシンプルで >>188の勝ちであることは否めない。
君の負け。

204:デフォルトの名無しさん
09/03/04 16:46:16
>>201
年未満の線形性を切り捨てる代わり、うるう年を考えなくてもいいというのが利点

205:デフォルトの名無しさん
09/03/04 16:48:17
勝ちとか負けとかガキかよw

206:デフォルトの名無しさん
09/03/04 16:48:46
>>203
yyyyMMddをどこから持ってくるかという話でしょ。
intで定義されてるなら>201みたいな操作が必要だし、
Stringでとるならそれでもいいし。

207:デフォルトの名無しさん
09/03/04 16:53:17
>>202
そんな悪態ついてないで素直になれよ。
最も合理的な解決策を見つけるのもプログラマの仕事ってことを言ってるんだろ。
それが積もってパフォーマンスに影響してくるんだからさ。
悔しいのは分かるけど、プライドでプログラムやるもんじゃない。


208:デフォルトの名無しさん
09/03/04 16:57:00
>>206 どこから持ってくるも何も
int.Parse(DateTime.ToString("yyyyMMdd"))
とかでいいじゃん。Convert.ToInt32でもいいよ。


209:デフォルトの名無しさん
09/03/04 16:57:31
>>203
で、コードは?

210:188
09/03/04 16:57:41
>>201
なんだその糞コードは・・・

int nToday = int.Parse(today.ToString("yyyyMMdd"));
int nBirthday = int.Parse(birthday.ToString("yyyyMMdd"));

int age = nToday - nBirthday;

どうみてもシンプルだと思うが。。。
スレ住人のセンスを疑うな・・・

211:デフォルトの名無しさん
09/03/04 16:59:50
日付→文字列→数値と変換するオーバーヘッドを気にする俺は古い人間なのか?

212:デフォルトの名無しさん
09/03/04 16:59:51
>>209
そんなコードも考えられないようなお前の脳みそを疑うよ・・・

213:デフォルトの名無しさん
09/03/04 17:00:21
>>207
「引き算」と言われて何も疑わず信じることが思考停止でなくてなんなんだ?

214:デフォルトの名無しさん
09/03/04 17:01:59
>>210
完全にトドネト脳だな

215:デフォルトの名無しさん
09/03/04 17:02:07
int.Parse(DateTime.ToString("yyyyMMdd"))
これだけの操作の裏で、どれだけ複雑な操作が行われているか想像できない方が
プログラマとして不適格だろ。

216:デフォルトの名無しさん
09/03/04 17:04:18
>>213
必死だなお前w
「引き算」と言われて、>>143みたいに
「引き算だとうるう年とかあるからダメだぜ?分かってねぇなあ。俺みたいにきちんとやるのが正しいんだよ!」
というような、
自分のやり方が一番正しいとして他人の意見をくみ取りもしないことが思考停止って言ってんの。

217:デフォルトの名無しさん
09/03/04 17:06:43
>>207
>正確には月を比較して、同月なら日を比較して、年の差から年齢を求めるが正しい気がする。

>20090304 - 19870305 = 219999
はやり方が違うだけで言ってることは同じ。

下4桁の引き算がif (d1.Month > d2.Month || (d1.Month == d2.Month && d1.Day >= d2.Day)) にあたり、
その結果、単に引くだけか、-1するかの違いだからな。

218:デフォルトの名無しさん
09/03/04 17:07:49
雑談はよそでやれよ

219:デフォルトの名無しさん
09/03/04 17:08:04
>>211
気になったら後でリファクタリングすればいい
まあある程度の規模になるなら、線形性がないという問題を抱え込んだままにしておくのは怖いが。

220:デフォルトの名無しさん
09/03/04 17:08:10
>>213 お前プライドの塊だな。めんどくさいやつだな。

221:デフォルトの名無しさん
09/03/04 17:09:45
>>216
だからその結果が正しいかどうかを疑わず信じろというのは思考停止だろ?
本当にそれで可能かどうか検討もせず受け入れるのが思考停止でなくてなんなんだ?

222:デフォルトの名無しさん
09/03/04 17:11:12
>>216 結果が正しいかどうかはデバッグすればわかるだろ・・・
頭悪すぎるぞこいつ・・・。

223:222
09/03/04 17:12:02
間違えた
×>>216
>>221


224:デフォルトの名無しさん
09/03/04 17:13:12
>>223
>結果が正しいかどうかはデバッグすればわかるだろ・・・
この時点で正しいかどうか疑ってるからデバッグするわけだろ?
思考停止じゃないじゃん。


225:デフォルトの名無しさん
09/03/04 17:14:51
年齢計算で、閏年はどうなるんだ?と考えるのは当然だよな。
盲目的に受け入れるほうがおかしい。

226:デフォルトの名無しさん
09/03/04 17:15:30
>>210
>>194のほうがシンプルじゃないかい?
そのままだと2月29日と2月28日を比較したときに、
2月29日の時刻が比較対象より前だと間違いになるので、
(そもそも時刻成分を考慮する必要がない気がするけど念のため)
ちょっと修正して:

int ydiff = dt1.Year - dt2.Year;
if (dt1.AddYears(-ydiff).Date.CompareTo(dt2.Date) <
0) { ydiff--; }



227:デフォルトの名無しさん
09/03/04 17:18:32
馬鹿にされた文系プログラマがわんさか湧いててワロスwww

>年齢計算で、閏年はどうなるんだ?と考えるのは当然だよな。
うん

>盲目的に受け入れるほうがおかしい。
うん、だから「閏年を考慮したら引き算ではつじつまが合わなくなる」という
自分の意見が正しいという意見を盲目的に信じるのはおかしいよな?

228:デフォルトの名無しさん
09/03/04 17:20:16
Func<DateTime, int> hoge = (x) => int.Parse(x.ToString("yyyyMMdd"));
return (hoge(to) - hoge(from)) / 10000;

Func<DateTime, int> hoge = (x) => x.Year * 1000 + x.Month * 100 + x.Day;
return (hoge(to) - hoge(from)) / 10000;


たいしてかわらん。

229:デフォルトの名無しさん
09/03/04 17:21:18
>>227
そこから検算してああ正しいんだなと理解すれば問題ないじゃんw
言われてはいそうですかじゃアホだろ

230:デフォルトの名無しさん
09/03/04 17:23:29
おいおい、なんでこんな厨臭くなってるんだw
初心者スレで言い合いすんなよガキだな

231:デフォルトの名無しさん
09/03/04 17:24:57
エレガントな解を示したつもりが、あまり賞賛されなかったので拗ねているんです。

232:デフォルトの名無しさん
09/03/04 17:27:15
結局>>217が真理
計算方法が違うだけで意味はどちらも同じ

233:デフォルトの名無しさん
09/03/04 17:34:10
意味がどちらも同じなのはみんな分かってるよ。
今話題になっているのはコードの美しさと可読性だろ?
俺は少なくとも>>148>>228みたいなコードを見比べたら、
>>228の方がデキるプログラマって感じがするけどな。

234:デフォルトの名無しさん
09/03/04 17:36:56
>>233

>>148が文系プログラマ、>>228が理系プログラマですね、わかります。

235:デフォルトの名無しさん
09/03/04 17:38:55
ラムダ式って美しいんですか?(スマートな解という意味で)
美しいなら勉強するよ!

236:228
09/03/04 17:40:31
× x.Year * 1000
○ x.Year * 10000

プギャー(AAry

237:デフォルトの名無しさん
09/03/04 17:46:46
>>235
ぼちぼち美しい

238:デフォルトの名無しさん
09/03/04 17:54:00
動的に処理を差し替えるような必要があればラムダ式は有効だけど
>>228のケースでは意味がないな。違いはメソッドより効率が悪いこと。
長くなるのを避けてるだけだと思う。

239:デフォルトの名無しさん
09/03/04 18:06:02
>>235
まあ>228レベルならC的関数定義の別の書式に等しい。
マ的には現代的関数型言語みたいに、ラムダ計算後にインライン化とか末尾最適化が言語で保障されているなら嬉しいけど。

240:デフォルトの名無しさん
09/03/04 18:18:54
知識はあってもかしこくない
だめだこりゃ
関数がいやならC#やるな

241:デフォルトの名無しさん
09/03/04 18:31:11
どこをどう読んだら誰が関数が嫌なんて言ってるように見えるんだろう

242:デフォルトの名無しさん
09/03/04 18:48:32
ラムダ式は超美しい。

243:デフォルトの名無しさん
09/03/04 18:54:43
どうでもいいよ

244:174
09/03/04 18:56:15
みんなー、アッカーマン関数の話しようぜー。
>>174のコードだと、m=0, n=int.MaxValue-1みたいなケースが計算できない
のが嫌だ。ていうかそもそもの問題は多分アッカーマン関数の表を一気に計算する
コードじゃなくって、与えられたm,nに対してアッカーマン関数の値を計算するコード。

なので、>>187のスタック使ってヒープを使って再帰する方法と、ハッシュ使って
計算済みの値を再利用する方法を組み合わせたアプローチにしてみた。値を再利用
するので、表を生成する用途でも有効。

うちの環境(メモリ1GB)では
m=0でn=int.MaxValue-1まで
m=1でn=10000000くらいまで
m=2でn=5000000くらいまで
m=3でn=20まで
m=4でn=1まで
計算できた。

スレの空気読まずにコードアップするぜ!
        static Dictionary<int, Dictionary<int, int>> Ack
          = new Dictionary<int Dictionary<int, int>>();
        static Stack<int> argM = new Stack<int>();
        static Stack<int> argN = new Stack<int>();
        static int Ackermann(int m, int n)
        {
            argM.Clear();
            argN.Clear();
            argM.Push(m);
            argN.Push(n);
            while (argM.Count>0) {

245:174
09/03/04 18:57:14
                if (!Ack.ContainsKey(argM.Peek())) Ack[argM.Peek()] = new Dictionary<int, int>();
                if (Ack[argM.Peek()].ContainsKey(argN.Peek())) {
                    argM.Pop();
                    argN.Pop();
                    continue;
                } else {
                    int value;
                    if (argM.Peek() == 0) {
                        value = checked(argN.Peek() + 1);
                    } else if (argN.Peek() == 0) {
                        if (Ack.ContainsKey(argM.Peek() - 1) && Ack[argM.Peek() - 1].ContainsKey(1)) {
                            value = Ack[argM.Peek() - 1][1];
                        } else {
                            argM.Push(argM.Peek() - 1);
                            argN.Push(1);
                            continue;
                        }
                    } else {

246:デフォルトの名無しさん
09/03/04 18:58:25
アッカーマン関数なんて使わないし

247:174
09/03/04 19:00:46
                        int n_;
                        if (Ack.ContainsKey(argM.Peek()) && Ack[argM.Peek()].ContainsKey(argN.Peek() - 1)) {
                            n_ = Ack[argM.Peek()][argN.Peek() - 1];
                        } else {
                            argM.Push(argM.Peek());
                            argN.Push(argN.Peek() - 1);
                            continue;
                        }
                        if (Ack.ContainsKey(argM.Peek() - 1) && Ack[argM.Peek() - 1].ContainsKey(n_)) {
                            value = Ack[argM.Peek() - 1][ n_];
                        } else {
                            argM.Push(argM.Peek() - 1);
                            argN.Push(n_);
                            continue;
                        }
                    }

248:デフォルトの名無しさん
09/03/04 19:01:34
                    Ack[argM.Pop()][argN.Pop()] = value;
                    continue;
                }
            }
            return Ack[m][n];
        }
終わり。Ackermann(3,20);あたりで速さが実感できるぜ!。
あと、>>244の「>>174のコード」ってところ、アンカーミスで>>196のコードね。

>>246
>>173を思い出してあげてください。

249:デフォルトの名無しさん
09/03/04 19:08:28
Dictionary<int, Dictionary<int, int>>は効率悪いな
struct Key { public int M; public int N; public override int GetHashCode() { return M ^ N } }
こういうのをキーにしたらDictionary<Key, int>で済むのに

250:デフォルトの名無しさん
09/03/04 19:15:09
>>249
一般にはそうだろうけど、そもそも話題がアッカーマン関数だから、
mはどうせ0から5くらいまでしかとらないんだよね。だから別に
これでかまわないんじゃないかな。

あと、ハッシュ値の衝突って詳しくないんだけど、そういう衝突しまくる
ハッシュ関数って効率はどうなっているの?

251:デフォルトの名無しさん
09/03/04 20:49:39
ファイルを選択して、それを別のコンソールプログラムに読み込ませて
その結果の出力(文字列)を別ウィンドウに表示したいのですが、どうやればいいですか?
ファイル選択まではいいのですが、別のプログラムを起動してそいつに引数を
渡すにはどうすればよいですか?



252:デフォルトの名無しさん
09/03/04 20:51:32
Process

253:デフォルトの名無しさん
09/03/04 20:52:30
>>251
Process のヘルプをじっくり見る。

254:デフォルトの名無しさん
09/03/04 21:12:30
>>228はマイナスの年齢が出るから間違いだろそもそも

255:デフォルトの名無しさん
09/03/04 21:22:08
>>238
別にメソッドと比べて効率悪くならないよ。

モノホンのラムダ式であるリスト構造に基づく関数定義から
実行時に動的にメソッドを生成する、なんて事は行われていない。

匿名メソッドの名前どおり、コンパイル時にコンパイラが勝手な
メソッド名を割り当ててメソッドを作る。自分でメソッド定義する
のと何も違いはない。


256:デフォルトの名無しさん
09/03/04 21:27:19
デリゲート呼び出しが入る
最適化もできなくなるから使い方にもよるけど多かれ少なかれ確実に遅くはなる
その小さい差の意味は置いといて

257:デフォルトの名無しさん
09/03/04 21:31:18
まじ?>>228のhoge(ほにゃらら)みたいなのって、匿名メソッドの呼び出し
として最適化されるんじゃなくて.Invokeされちゃうの?

ちょっとリフレクタで確かめてみる。

258:デフォルトの名無しさん
09/03/04 21:39:14
ほんとだ。C時代のプリプロセッサマクロに代わる、スコープがあって上位スコープ
にアクセスできる素性の良いマクロとして利用する事がたびたびあったから、
ちょっとショック。

259:デフォルトの名無しさん
09/03/04 21:52:18
>>251
P/Invokeを駆使して共有メモリ経由でやりとりする。
{Tcp,Http,Ipc}Channelクラスを使って通信する。
特定の位置にファイル作って監視させる。
アプリケーション構成ファイルを動的に書き換えて起動する。
ProcessStartInfo.Argumentsを設定してProcessオブジェクトのStartを呼ぶ。
Process.Start(string,string)を呼ぶ。

260:デフォルトの名無しさん
09/03/04 23:01:02
>>259
何故難しい順に書く・・・

261:デフォルトの名無しさん
09/03/04 23:06:21
理系プログラマだからさ

262:デフォルトの名無しさん
09/03/04 23:10:49
かっこいい

263:デフォルトの名無しさん
09/03/04 23:15:38
VS2005を使っているのですが2008にすると
C#3.0とかになっちゃうの?
今まで2005で作ったプログラムって2008でも修正可能なんでしょうか?
.NET2.0用で作ってたのが.NET3.5になっても無問題?

264:デフォルトの名無しさん
09/03/04 23:18:25
>>263
> VS2005を使っているのですが2008にすると
> C#3.0とかになっちゃうの?

も、使える

> 今まで2005で作ったプログラムって2008でも修正可能なんでしょうか?

可能

> .NET2.0用で作ってたのが.NET3.5になっても無問題?

没問題

というか、.NET 3.5 って、.NET 2.0 上で動作する拡張なだけだから。

265:デフォルトの名無しさん
09/03/04 23:19:44
>>263
C# 3.0 になる。
2005 → 2008 へのプロジェクトのアップグレードで失敗したって話は見たことも聞いたこともない。
.NET 2.0 が 3.5 になっても問題ない。

266:デフォルトの名無しさん
09/03/04 23:34:30
170-172
今夜も試行錯誤:
Windows認証で
環境(Vista アルティメット) <=  (ヴァーチャルPC Xp home)

Data Source=192.168.1.1\SQLEXPRESS
これでも
11433\OTHERINSTANCE
これでもダメでしたが
SQL Server 2005 に接続しているときときにこのエラーが発生した場合は、
SQL Server の既定の設定がリモート接続を許可しないようになっていることが
エラーの原因である可能性があります。
(provider: TCP プロバイダ, error: 0 - 対象のコンピュータによって拒否されたため、接続できませんでした。)

セキュリティー構成は、サービスと接続のセキュリティ構成−リモート接続−ローカル及びリモート接続

●TCP/IP および名前付きパイプ・・・
にチェックは言っているんですけどねー

まだまだ頑張る・・・応援よろしく


267:デフォルトの名無しさん
09/03/04 23:49:24
>>263
ただ、Windows2000は.Net2.0までしか入らないから
その辺のサポートするならVS2008にしても.Net2.0で作り続ける必要がある。

プロパティ打つのがたるいし型推論も使えない。。orz

268:デフォルトの名無しさん
09/03/04 23:53:50
>>266
まず、MSSQLSMSEで、IPアドレスで接続できるかどうか試してみれよ
サーバ名にIPアドレス、認証はSQL認証で、設定したアカウントを設定しれ。

269:デフォルトの名無しさん
09/03/05 00:03:50
MSSQLSMSE<<とりあえず ぐぐってみる・・・・
まだまだ ど素人だな俺って・・・


270:デフォルトの名無しさん
09/03/05 00:06:21
やっぱりC#使う場合はDBをSQLServerにすることが多い?

271:デフォルトの名無しさん
09/03/05 00:15:47
269だけど
Accessとかもありじゃないでしょうか
おいらはAccess買えない貧乏仕様
定額給付でSqlServer2008でも買うか…

272:デフォルトの名無しさん
09/03/05 00:18:02
実行後に実行プログラム自身を削除するのってどうすればいいですか?

273:デフォルトの名無しさん
09/03/05 00:22:44
SQL Server 2008 Expressでいいんじゃないの?
無料だし、商用にも使えるし

274:デフォルトの名無しさん
09/03/05 00:23:51
実行プログラムを実行して削除するプログラムを作る

275:デフォルトの名無しさん
09/03/05 00:25:34
>>267
.NETとC#のバージョンがごっちゃになってないか?

276:デフォルトの名無しさん
09/03/05 00:29:01
>>267
varはコンパイラの機能だから.NET Framework 2.0対象でも使えるはずだよ。

277:デフォルトの名無しさん
09/03/05 00:33:50
>>268
なんかちょっとわかった!^^進展してないけど明日チャレンジします
ね・・・ねむけが

278:267
09/03/05 00:38:45
あ!そうかも。
LINQが参照できなくて色々できないあたりから
色々思考停止してる。さんくす!

279:デフォルトの名無しさん
09/03/05 00:42:06
ILのレベルでは何も代わっていないのだから、3.5で追加されたクラスライブラリを
使っているかどうかだけが問題なのだと思う。

Linq to ObjectはSystem.Linq.Enumerableクラスの拡張メソッドだから
.NET3.5専用。

でも、拡張メソッド機能自体は、.NET2.0でも使える(多分)、など。
型推論も自動プロパティも匿名メソッドも全部.NET2.0で使えるんじゃないかな(未確認)。

280:デフォルトの名無しさん
09/03/05 00:46:27
>>279
ラムちゃんは?

281:デフォルトの名無しさん
09/03/05 00:50:26
>>279
拡張メソッドは構文糖じゃないし、専用のアトリビュートが必要なのでダメでせう

282:デフォルトの名無しさん
09/03/05 00:55:11
拡張メソッドは構文糖だよ。

283:デフォルトの名無しさん
09/03/05 00:58:43
今日日何が糖衣構文とそうでないものの境界もあいまいな気もする。
糖衣というより、コンパイラが提供する機能と言った方が適切じゃないのか

284:デフォルトの名無しさん
09/03/05 00:58:56
>>252-253
ありがとうございます。出来たのですが、コマンドプロンプト内に表示される出力内容を
取得できません。どうやればいいですか?


285:デフォルトの名無しさん
09/03/05 00:59:02
>>280
        delegate int delTest(int i);
        static void Main(string[] args)
        {
            delTest a = i => i + 1;
            Console.WriteLine(a(3).ToString());
        }
は2.0で通った。
あと、Func<T>(というかSystem.Core.dll)は3.5だけどAction<T>は2.0かららしい。


286:267
09/03/05 01:02:19
やあ。期待に膨らんだ胸がしぼみつつあるよ。

×var
×配列の暗黙的な初期化
○自動プロパティ
○コレクションの初期化

ラムダは試すまでもなく。
それでも.Net2.0のまま短縮できる表記が増えた!感謝!

287:285
09/03/05 01:03:39
なるほど、
foo(this IEnumerable boo){
}

foo([System.Runtime.CompilerServices.ExtensionAttribute] IEnumerable boo){
}
と等価で、System.Runtime.CompilerServices.ExtensionAttributeは
3.5からなんだね。


288:デフォルトの名無しさん
09/03/05 01:07:03
varって何が原因でいけないの?

289:デフォルトの名無しさん
09/03/05 01:07:55
いないいない

290:285
09/03/05 01:07:58
>>286
        static void Main(string[] args)
        {
            List<int> a=new List<int>(){1,2,3,4,5};
            foreach (var i in a) {
                Console.WriteLine(i.ToString());
            }
        }
は通ったけど。

自分、279ですが、やっぱ基本的な基準は>>279でしょう。

291:267
09/03/05 01:18:45
スマソ。今まで1度も使ったことなかったので、
そもそもvarがローカル変数のみに有効ということを知らなかった。
メンバで試してエラーが出たのでダメと判断してた。
色々勉強になった、ありがとう。

292:デフォルトの名無しさん
09/03/05 01:21:36
varはVBのvariantと違うんだ。他の変数同様に厳密な型付けはされる。

型推論によって型を明示しなくてもコンパイラがわかってくれるという
場合にだけ有効。

293:デフォルトの名無しさん
09/03/05 01:25:05
IDEが優秀であれば問題ないかもしれんが、
紙で見てる分にはvarじゃ何の変数だかわからんので困らんのかな

294:デフォルトの名無しさん
09/03/05 01:30:49
紙で見るとかw

295:デフォルトの名無しさん
09/03/05 01:31:12
>>293
まあ、var にして型が何か分かりにくくなるようならやっぱ使わない方がいいと思う。


296:デフォルトの名無しさん
09/03/05 01:35:32
少なくともwebや解説本、MSDNのサンプルプログラムで書かれてたらえらい迷惑

297:デフォルトの名無しさん
09/03/05 01:41:08
.NET2.0の範囲で使えるC#3.0
推論型、匿名型, 暗黙型付け配列
コレクションのイニシャライザ、オブジェクトのイニシャライザ
パーシャルクラス、パーシャルメソッド
自動プロパティ、ラムダ式

.NET3.xが必要になる機能
ラムダ式でFunc<>, Expression<>を使用
LINQクエリ式他
拡張メソッド

>>281
拡張メソッドが使えないのはExtensionAttributeが3.5に含まれるから。
という事で、System.Runtime.CompilerServices.ExtensionAttributeを自分で定義してやれば2.0でも使える。
インテリセンスにゃ出ないけど、まぁそのくらいは我慢できるだろう。

298:デフォルトの名無しさん
09/03/05 01:45:39
>>拡張メソッド、Func<>
ぶっちゃけSystem.Core.dllをローカルコピー=trueにして参照しちゃえば良いんじゃ・・・


299:デフォルトの名無しさん
09/03/05 02:01:05
>>297
なんで必死なのかわからない

300:デフォルトの名無しさん
09/03/05 02:10:52
>>299
なんで必死なのかわからない

301:デフォルトの名無しさん
09/03/05 02:16:06
>>299
>>300
これだから文系は

302:デフォルトの名無しさん
09/03/05 02:22:34
>>301
なんで必死なのかわからない

303:デフォルトの名無しさん
09/03/05 02:34:48
ど、ど、ど童貞ちゃうわ!

304:デフォルトの名無しさん
09/03/05 02:36:07
>299-303の話の流れがさぱりわからないんだが・・・

305:デフォルトの名無しさん
09/03/05 02:41:10
触るな危険。放っておけ

306:デフォルトの名無しさん
09/03/05 02:41:58
>>305
なんで必死なのかわからない

307:デフォルトの名無しさん
09/03/05 02:51:15
>>306
これだから文系は

308:デフォルトの名無しさん
09/03/05 02:51:58
>>307
なんで必死なのかわからない

309:デフォルトの名無しさん
09/03/05 02:53:10
>>308
↓文系

310:デフォルトの名無しさん
09/03/05 02:59:54
>>309
なんで必死なのかわからない

311:デフォルトの名無しさん
09/03/05 03:00:42
OpenFileDialogでファイルを選択して、コンソールプログラムの引数に与えて実行しようとしています。
ファイルのパス名に空白が含まれるときは、どうすればいいですか?



次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5382日前に更新/246 KB
担当:undef