約 694,927 件
https://w.atwiki.jp/steelwind/pages/28.html
可変引数 printfのように可変個引数のデータに書式を付ける方法は下記のとおり。 #include stdio.h /* vprintf */ #include stdarg.h /* va_list, va_start, va_end */ void func(char *format, ...) { char buf[1024]; va_list p; va_start(p, format); vsprintf(buf, format, p); va_end(p); }
https://w.atwiki.jp/suffix/pages/1300.html
省略可能引数 省略可能な引数を使いたい場合は以下のようにOptionalを変数の前につける。 Sub xxx (value As String, Optional value2 As String = "デフォルト値", Optional value3 As String="フォルト値") End Sub 該当の関数を呼び出す時に特定の変数のみ値をセットしたい場合には、 Call xxx(arg1, value3 =arg2)のような書き方となる。 可変引数 Sub xxx(ParamArray args()) を使うと良い。
https://w.atwiki.jp/suffix/pages/815.html
ここでは、マクロも含む。 関数名 役割 fpclassify 浮動小数点の値を分類する isfinite 有限の値かどうか調べる isinf 無限大かどうか調べる isnan NaNかどうか調べる isnormal 正規化数かどうか調べる signbit 符号を調べる cos 余弦を計算 sin 正弦を計算 tan 正接を計算 acos 逆余弦を計算 asin 逆正弦を計算 atan,atan2 逆正接を計算 cosh 双曲線余弦を計算 sinh 双曲線正弦を計算 tanh 双曲線正接を計算 acosh 双曲線逆余弦を計算 asinh 双曲線逆正弦を計算 atanh 双曲線逆正接を計算 exp eの引数乗を計算 exp2 2の引数乗を計算 expm1 eの引数乗-1を計算 frexp 浮動小数点実数を小数成分と整数成分に変換 ldexp 浮動小数点と2の整数のべき乗を計算 log eを底とする対数を計算 log2 2を底とする対数を計算 log10 10を底とする対数を計算 log1p 引数に1を加えた値に対してeを底とする対数を計算 logb 浮動小数点の符号付指数を計算 ilogb 指数をint型として抽出 modf 整数部と少数部に分割 scalbn 引数*基数(FLT_LADIX)^nを計算 cbrt 立方根を計算 fabs 絶対値を計算 hypot ユークリッド距離関数。つまり pow 乗を計算 sqrt 平方根を計算 erf 誤差関数 erfc 余誤差関数 lgamma ガンマ関数の絶対値の対数を計算 tgamma ガンマ関数を計算 ceil 引数以上の最小の整数値 floor 引数以下の最大の整数値 fdim 2つの引数の正の差 fmax 2つの引数の大きい方 fmin 2つの引数の小さい方 fma 浮動小数点の乗算加算を行う nearbyint,rint,lrint 最も近い整数に丸める round,lround 丸め方向に関係なく、中間値を基準に最も近い整数に丸める trunc 引数よりも大きくならない値に丸める。つまり切り捨て。 fmod 浮動小数点剰余を計算 remainder,remquo 浮動小数点剰余関数 copysign 絶対値が第一引数、符号ビットが第二引数に等しい値を返す nan 文字列をNaNに変換 nextafter,nexttoward 実軸上で第一引数が第二引数の方向にある表現可能な次の浮動少数点を得る isgreater 第一引数が第二引数よりも大きいかどうか isgreaterequal 第一引数が第二引数より大きいまたは等しい isless 第一引数が第二引数よりも小さいかどうか islessequal 第一引数が第二引数より小さいまたは等しい islessgreater 第一引数が第二引数より大きいまたは小さい isunordered 引数が順序付けられていないかどうか
https://w.atwiki.jp/dotcom/pages/404.html
SQLServerのdateのMAXとか? http //bluestick.jp/tech/?p=45 ちなみにOpenJPA使ってSQLServerからdateを取得すると、なぜか設定した時のと同じ値がひろってこれねーですよなんでですか???って事態発生。 http //bluewatersoft.cocolog-nifty.com/blog/2008/11/net-fw-sql-serv.html むう。そんなとこで丸めるなー!!! 「こんなこといまさら聞けないよう」の巻。 Javaでlong値をダイレクトに入れるときって最後に「L」を付けるのね。 シリアルIDとかによくついてたことを思い出した。 付けないで「1234567890123」とか入れるとintではこれはいかんですよーとかいわれちゃう。 なのでやるならば「long l = 1234567890123L」って代入してあげなくちゃです。 なんでこんな話になったかってと、Timestamp型のコンストラクタの引数にlong値を直打ちしていれよーとしたらLついてなくて怒られたから。 EclipseさんはlongならLつけろなんて教えてくれません(そりゃそうだ?)なので最初、思いっきり悩んだ私。 だっていつも直接入れるなんてことないもーんだ。 System.out.pringln(new Timestamp(1233190324031L)); って入れると 2009-01-29 09 52 04.031 って返ってきます。ロケールによるけど。 これってSQLServerのdatetime型がlong値で表示されてたときに変換させるときに使ってたですよ。 Management Studioがまだいまいち使いこなせてない私。。。
https://w.atwiki.jp/sevenlives/pages/2169.html
可変長引数?
https://w.atwiki.jp/fieds_labo3/pages/59.html
基本 引数 クラス、メソッドに渡す引数は値が入る。(いわゆる値渡し) JFrame1からJFrame2を表示し、JFrame2で設定・変更した内容をJFrame1で参照する場合は 以下のようにする。 public class fm1 extends javax.swing.JFrame { class Global { int val1; Global { val1 = 0; } void setval1(int i){ val1 = i; } int getval1(){ return val1; } } Global g = new Global(); ...略... private void botton1MouseClicked(java.awt.event.MouseEvent evt) { new fm2(g).setVisible(true); } } public class fm2 extends javax.swing.JFrame { private fm1.Global g2; public fm2() { initComponents(); } public fm2(fm1.Global g1) { g2 = g1; } ...略... private void buttonclosedMouseClicked(java.awt.event.MouseEvent evt) { g2.setval1(99); this.dispose(); } }
https://w.atwiki.jp/thaladabar/pages/22.html
複数行の文字列 文字列の置換 文字列の分割 文字列の埋め 文字列とバイト列 繰り返しの文字列を生成する 大文字小文字に揃える 文字列の部分取り出し 文字列から1文字ずつ取り出す 文字列の長さを調べる場合len関数を使用する 任意の文字列が含まれているか調べる場合str.startswith関数を使用する 文字列から任意文字列の位置を求める場合str.find関数を使用する 先頭と末尾から指定文字列を削除する 複数行の文字列 test_str = """jfkla;ewj fa;weifj f iasjef fwa;oiejfl;waejnf fwaoief""" print( test_str ) 文字列の置換 文字列の置換をしたい場合はstr.replace関数を使用する replaceStr = "python_str_replace" replaceResult = replaceStr.replace( "replace", "result" ) print( replaceStr ) print( replaceResult) 文字列の分割 文字列の分割はstr.split関数で行うことができる split関数は分割した文字列をタプルで返す splitStr = "python_str_split" splitResult = splitStr.split( "_" ) print( splitResult ) 文字列の埋め 文字列の左に指定した文字を埋め込みたい場合はstr.rjust関数を使用する 第一引数に文字列を埋めたあとの文字数を指定、第二引数が埋め込みたい文字となる rjustStr = "1234" rjustStr2 = "bcde" print( rjustStr.rjust( 10, "0" ) ) print( rjustStr2.rjust( 20, "a" ) ) 埋め込む文字が0限定であればstr.zfill関数を使用する手もある print( rjustStr.zfill( 10 ) ) 文字列とバイト列 文字列をバイト列に変換する場合str.encode関数を使用する import sys encodeStr = "pythonの世界へようこそ" print( encodeStr ) #sys .getdefaultencoding関数で端末のデフォルトの文字コードを取得する byteStr = encodeStr.encode( sys.getdefaultencoding() ) print( byteStr ) バイト列を文字列に変換する場合str.decode関数を使用する print( byteStr.decode( sys.getdefaultencoding() ) ) 繰り返しの文字列を生成する forStr = "python," print( forStr * 3 ) 大文字小文字に揃える 文字列を大文字に揃える場合str.upper関数を使用する upperStr = "Python" print( upperStr.upper() ) 小文字に揃える場合はstr.lower関数を使用する lowerStr = "pYTHON" print( lowerStr.lower() ) 文字列の部分取り出し tmp_str = "abcdefghi" print( tmp_str[3] ) #指定文字を取り出す print( tmp_str[3 5] ) #指定範囲の文字を取り出す4文字目〜6文字目 print( tmp_str[ 5] ) #指定文字までの範囲を取り出す print( tmp_str[-1] ) #マイナスで指定した場合は末尾からカウントする 文字列から1文字ずつ取り出す tmp_str = "abcdefghi" for i in tmp_str print( i ) 文字列の長さを調べる場合len関数を使用する tmp_str = "abcdefghi" print( len( tmp_str ) ) 任意の文字列が含まれているか調べる場合str.startswith関数を使用する tmp_str = "abcdefghi" print( tmp_str.startswith("abcd" ) ) 文字列から任意文字列の位置を求める場合str.find関数を使用する tmp_str = "abcdefghi" print( tmp_str.find( "cd" ) ) print( tmp_str.find( "dc" ) ) #文字列が発見できない場合は-1を返す 先頭と末尾から指定文字列を削除する tmp_str = "aaaaapython_testaaaa" 先頭から削除する場合はstr.lstrip関数を使用する print( tmp_str.lstrip( "a" ) ) 末尾から削除する場合はstr.rstrip関数を使用する print( tmp_str.rstrip( "a" ) ) 先頭・末尾両方から削除する場合はstr.strip関数を使用する print( tmp_str.strip("a" ) ) lstrip, rstrip, strip関数の引数を指定しなかった場合は空白文字と認識される
https://w.atwiki.jp/genshiken/pages/22.html
080121 2008年第一発。 フィボナッチ数を返す関数 フィボナッチ数を返す関数を書いて下さい。 また、以下の仕様を満たすことを条件とします。 unsigned long(unsigned long int)型の引数を一つ受け取り、unsiged long型の整数を返す。 関数名を仮に fib とすると、fib(0) は 0、fib(1) は 1とする。 出力例 出力はありません 提出 niha28(atmark)gmail.com 回答例 unsigned long fib(unsigned long n){ if (n == 0){ return 0; } else if(n == 1) { return 1; } else { return fib(n-1) + fib(n-2); } } 説明 今回のキモは、渡された引数による条件分岐と、関数の再帰です。 if 文と関数の再帰呼び出しさえ理解できていれば解けたと思います。 ちなみにループを使っても解けますが、できれば出題者の意図を汲んで欲しいところです。 さて、例えばfib(3)を呼び出したとき、関数fibは全部で何回呼ばれるでしょうか。 fib(3)と、fib(3)からよばれるfib(1)と、fib(3)からよばれるfib(2)から呼ばれるfib… ややこしいので図で説明すると fib(3) | fib(2) - fib(1) | fib(1) - fib(0) 5回ですね。これがfib(30)ならどうでしょう。 fib(30) | fib(29) - fib(28) ---- | | fib(28) - fib(27) fib(27) - fib(26) | | | | 以降も延々と増えつづけます。 つまり、渡された引数をNとすると、大体2^Nだけ関数が呼ばれるわけです。 関数の呼び出しはノーコストでは行えません。それ自体に計算が必要になるため、 Nがある程度大きくなると関数呼び出しにかかるコストも馬鹿になりません。 具体的には、回答例のコードでは、fib(30)はfib関数が実に2692537回(!)も呼び出されます。 回答例のコードの問題点は、同じフィボナッチ数を何度も計算してしまっている点にあります。 それなら、計算結果をとっておいて、既に計算している結果に関してはとっておいた値を返すようにすれば、 関数の呼び出し回数は格段に少なくなるはずです。 unsigned long fib_memoize(unsigned long n){ static unsigned long memo[100] = {0}; /* 関数ローカルな静的変数 */ if (memo[n]){ return memo[n]; } else if (n == 0){ return 0; } else if (n == 1){ return memo[1] = 1; } else { return memo[n] = fib_memoize(n-1) + fib_memoize(n-2); } } ということでそれを実装したのが上のコードです。 fib_memoize(30)におけるfib_memoizeの呼び出し回数は、たったの59回です。勿論計算速度も早いです。 このように同じ問題を解くにしても、実装方法によって全く計算量が違ってくることがあります。 ハードが進歩したとはいえ、非効率的な実装は当然避けるべきです。 ゲームプログラミングは、そういったテクニックをそれなりに必要とするため、一般にレベルは決して低くありません。 みんながんばれ -) ちなみに、今回のように計算結果を記憶しておく手法を、「関数のメモ化(memoize)」と呼びます。 純粋述語関数(引数によってのみ結果が決まる関数)にしか使えないという制限はありますが、 関数の呼び出し回数が多かったり、一回の計算量が多い場合などは非常に有効な手法です。 採点 タチコマ main関数とは分けて実装して欲しかったんですが… イクラ これだと引数の大小に係わらず毎回fib(MXNUM)を計算してしまいますね。 タケ 問題なし。 ウヒト 問題なし。
https://w.atwiki.jp/ninjatrader/pages/41.html
関数とメソッドはひとまとまりの命令文をカプセル化するために使用される。それらには名前と、任意選択で入力パラメーター(引数)を与えられる。それらはNinjaScript中の任意の場所で呼び出すことができる。一度記述したら、その関数やメソッドが何を行うかだけを気にすれば良い。関数とメソッドの違いは、一般的に関数は呼び出し元のルーチンに値を返すということである。C#では関数という用語を廃止していて、メソッドという用語のみを使用する。メソッドは値を返すようにも、返さないようにもできる。 メソッドの宣言 メソッドは、スクリプト中でそれを使用する前に、宣言しておかなければならない。 [Method Access] [Return Data Type] [Name] (Optional parameters) Method Access - メソッドへのアクセス方法を指定する。この項目は話が少し複雑になるので、すべての人に必要となるであろうアクセス・レベル"private"を単純に使用することにする。 Return Data Type - メソッドが返す戻り値の型を指定する。もしメソッドが値を返さないのであれば、戻り値の型として"void"を指定する。 Name - メソッドの名前、ユーザーが定義する Option Parameters - メソッドに渡す引数、任意選択で 値を返さない形式のメソッド // このメソッドは日付と時刻を出力する private void PrintDateTime() { Print(DateTime.Now.ToString()); } 上のメソッドはキーワード"void"を使用しているので戻り値を持たず、ユーザー定義のメソッド名としてPrintDateTimeを与え、宣言を"()"で完結させているので引数は無い。メソッドのコード自体は、その後の波括弧内にカプセル化されている。 値を返す形式のメソッド // このメソッドは計算を実行し、double型の値を返す private double Multiply(double input) { return input * 10; } 上のメソッドはキーワードdouble"を使用しているのでdobule型の値を返し、ユーザー定義のメソッド名として"Multiply"を与え、"input"という名前のdouble型の引数を取るように宣言している。このメソッドは値を返すので、呼び出し元のルーチンに(input * 10)の値を返すために"return"キーワードを使用している。 メソッド内でのメソッドの呼び出し // このメソッドは計算を実行し、double型の値を返す private double Multiply(double input) { PrintDateTime(); return input * 10; } 上の例では、我々のMultiplyメソッドの中にPrintDataTime()メソッドの呼び出しを付け加えている。 メソッドを使用できるところ メソッドの利用はコードのブロックを論理的に構造化するのに良い方法である。もしスクリプトの異なる部分で同一の計算を実行するところを見つけたなら、その反復的なコードをメソッドにカプセル化することは理にかなっている。 例: 複数の箇所で、過去の3つのバー(Bar)の平均レンジを計算する必要があるスクリプトがあるとする。これはレンジを計算するロジックを1つのメソッドにカプセル化するのに役立つ場面である。 最初にdobule型の戻り値を返す、メソッド名AverageRangeというメソッドを宣言する。何らかの引数を渡す必要は無い。その後に過去の3つのバーの平均レンジを計算・返却する命令を記述する。仕上がったメソッドは下のようになる。 // 過去の3つのバーの平均レンジを計算する private double AverageRange() { return ((High[1] - Low[1]) + (High[2] - Low[2]) + (High[3] - Low[3])) / 3 ; } 下の例に示すように、その後、スクリプト中のどこからでもAverageRangeメソッドを参照することができる。 // AverageRange()メソッドを2回呼び出すメソッドの例 private void ExampleMethod() { if (High[0] - Low[0] AverageRange()) { Print("The current bar range is greater than the 3 bar average range of " + AverageRange().ToString()); } } メソッド内での変数宣言 メソッド内で変数を宣言することができる。これらの変数はスコープがローカルであり、それはそのメソッドの内部でのみアクセスすることができ、メイン・スクリプトのような外部からはアクセスできない、ということを意味する。 // 変数を使用するメソッドの例 private double MyMethod() { double myDouble = 100.25 return myDouble * 10; }
https://w.atwiki.jp/bokuyo/pages/94.html
可変長引数 いま読み返すと、この記事の適当さ加減がやばい。 Cでの実装 #include iostream #include stdarg.h int unco(int renton, ...) { va_list list;//va_list型は stdarg.h で定義されてる va_start(list, renton);//可変長引数の要素を扱い始めるためのva_start()マクロ int eureka = va_arg(list, int);//リストの次の要素を取り出す。popとかdequeueみたいな感じ。 while(eureka != 0) { renton += eureka; eureka = va_arg(list, int); } va_end(list);//可変長引数の要素を扱い終わるためのva_endマクロ return renton; } int main() { std cout unco(1, 5, 6, 0, 7, 7, 8, -4, 9, 156) std endl; return 0; } なんか上手く使った気がしないけど…。1+5+6を足して、0を引数に取るとループを抜ける。 0を引数に取らないと無限ループしかねないソース。 マクロの中身を見てみたけど吐き気したからもう当分見る気ない。 ちなみにC++だと cstdarg をインクルードすればおっけー。 va_start(), va_arg(), va_end()マクロの中身をC++っぽく置き換えると template typename T void vaStart(va_list ap, T v) { ap = (va_list)( reinterpret_cast const char (v)) + ((sizeof(v) + sizeof(int) - 1) ~(sizeof(int) - 1)); } template typename T T vaArg(va_list ap)//使い方は vaArg int (list)みたいな。 { return ( *(T *)((ap += ((sizeof(T) + sizeof(int) - 1) ~(sizeof(int) - 1))) - ((sizeof(T) + sizeof(int) - 1) ~(sizeof(int) - 1))) ); } void vaEnd(va_list ap) { ap = (va_list)0; } VC++2010の環境だとこんな感じ。そのままマクロを置き換えただけだけど…。 CにはC++みたくジェネリックプログラミングができないから仕方なしにマクロで書いてる部分もあるだろうと…。マクロを書き直したからってそれがC++に通用するとは思えないから このCライクな stdarg.h の可変長引数を使うのなら、マクロのままでいいかなーって思う。 そもそもC++だったらもっとかっこいい可変長引数をとる関数がかける…はず。きっとね。 やってることはリスト操作。 もし注目するなら、「reinterpret_cast」かな。あんまり見かけないからこの際知っとくのもいいかなって。