2012/03/02

C言語でのファイルの読み書き

よく使うのに忘れてしまうのでテンプレートをここにメモ

ここを参考に
http://www9.plala.or.jp/sgwr-t/c/sec17.html
#include 


FILE *fp; //ファイルポインタ

if ((fp = fopen("test.txt", "r")) == NULL) { //ファイルオープン
  printf("file open error!!\n");
  exit(EXIT_FAILURE); //エラー出力
 }
 
fclose(fp); //ファイルクローズ

2012/01/22

calcで範囲指定するときのセルの固定

具体的な名前はわからないけれどセルに式を打ち込んで右下を押して下にビーッとするとその下もセルを1個下げて横は同じようにして計算してくれるけど

定数などで行ごとに値が変化しないのに下に値がないと計算できないから仕方なくビーッとしていたけど,しなくてもできるんだよね,きっと.

調べたらやっぱりあった.
http://uenomemo.blog31.fc2.com/blog-entry-413.html

cのprintf関数

javaのprintfを見つけて書式も同じで「これいいな」と思ったんですが,

c++でもcoutではなくprintfを使っているのに書式はそんなに覚えていない.
良い感じにまとめられているところがあったのでメモっておこう

http://www9.plala.or.jp/sgwr-t/c/sec05.html
http://www.mm2d.net/c/c-01.shtml

javaのprintf関数

前の記事で処理時間の計測(java)をして,フォーマットの方が勉強になったのですが,
NumberFormatを使っていて思ったよりも処理が多いと思って,javaでcのprintfのようなものはないのかと調べてみたところ思いっきり
System.out.printf("値は%d", 10);

あった.ずっとSystem.out.println()をつかってきたので,こっちも使ってみよう.
書式もほとんど同じだし.(cの改行の\nが%nになっているっぽいけど)

ここにかなり詳しく書いてある.


BloggerでSyntax Highlighterを使う

プログラムをこのブログにたくさん書いているので他のブログでやってる「Highlighter」を使ってみる.

 1.
  http://www.way2blogging.org/2011/03/how-to-add-syntax-highlighterv3-to.htmlの「HOW TO INSTALL SYNTAX HIGHLIGHTER IN BLOGGER?」の「GENERATE SCRIPTS」をクリック

 「Select a Theme」は今回はdefault.
 「Select Brushes」は今回は c#,c++,css,javascript,java,python,Xml xHtml xslt Html を選んだ.
 進むとスクリプトが出てくる. 

2.
bloggerのデザインの編集のところで右上の「バックアップ」をする. 

3.
エディタでバックアップのxmlファイルを編集.( </head> の直前にスクリプトをコピー)

 4.
さっきバックアップをしたところで今度は「復元」

 5.
ブログを見てみてきちんとなっているようならok

コードの書き方
//コードを記述
ここを参考に
http://blog.37to.net/2007/06/syntax_highlighter/
http://act-yoshiken.blogspot.com/2011/08/bloggersyntax-highlighter-30.html
http://net-3.blogspot.com/2011/05/blogger.html
http://alexgorbatchev.com/SyntaxHighlighter/manual/themes/

Syntax Highlighterのテスト ver2

 

import java.text.*;

long nanostart = System.nanoTime();

  //計測したい処理

long nanostop = System.nanoTime();
NumberFormat nanoformat = NumberFormat.getNumberInstance();
nanoformat.setMaximumFractionDigits(3);// 小数点以下の桁を3桁に設定
nanoformat.setMinimumFractionDigits(3);
System.out.println("処理時間は" + nanoformat.format((double)(nanostop-nanostart)/1000/1000) + "ms <- nanoTime()");

Syntax Highlighterのテスト

 
import time
  time.sleep(t[s]) 

2012/01/21

処理時間の計測(java)

javaの時間の測定はSystem.currentTimeMillis()とSystem.nanoTime()の2種類がある.

currentTimeMillis()

  • ms単位で処理時間が分かるが,CPU,OSなどの環境で10ms~15msの誤差あり.


nanoTime()
  • ns単位で処理時間が分かるが,1μs単位以下は誤差やこの処理そのものの時間も大きく関わってしまうので安全のために10μs以上では正確だろう
この両方についてcurrentTimeMillis()はms単位,nanoTime()はms単位で小数点3桁(μs)まで表示するプログラムを作成.



 1. currentTimeMillis()
 
import java.text.*;

long currentstart = System.currentTimeMillis();

//計測したい処理

long currentstop = System.currentTimeMillis();
NumberFormat currentformat = NumberFormat.getNumberInstance();
System.out.println("処理時間は" + currentformat.format((currentstop-currentstart)) + "ms <- currentTimeMillis()");

 2. nanoTime()
 
import java.text.*;

long nanostart = System.nanoTime();

  //計測したい処理

long nanostop = System.nanoTime();
NumberFormat nanoformat = NumberFormat.getNumberInstance();
nanoformat.setMaximumFractionDigits(3);// 小数点以下の桁を3桁に設定
nanoformat.setMinimumFractionDigits(3);
System.out.println("処理時間は" + nanoformat.format((double)(nanostop-nanostart)/1000/1000) + "ms <- nanoTime()");

今回は時間を計測するのがメインだったが,それよりも有効桁などを調節するフォーマットの方が勉強になったかも.
別記事でフォーマットも書こうかな
cだとprintfで色々できるが,javaはformatをつくってそれを自分の好きなように調節して引数に数字を入れるということか,


ここを参考に




    2012/01/20

    時間の計測 (c/c++)



    プログラムの特定箇所のかかる時間を調べるには
    #include 
    
    clock_t start,end;
    start = clock();
    
    //時間計測したい処理
    
    end = clock();
    printf("%.2f秒かかりました\n",(double)(end-start)/CLOCKS_PER_SEC);
    

    ここの丸々コピーですいません。http://www.mm2d.net/c/c-02.shtml

    2012/01/19

    usbメモリのベンチマーク

    ubuntuのusbブートをusb3.0でやればもっと快適にできるんじゃないかなと思っていて.正月の初売で「usb3.0」のモノが1980円だったのでつい買ってしまった.

    買ったのはコレ
    RUF3-C16G-BK

    でもよくよく見てみると
    対応OS
    linuxが書いてないのはいつもの事だけど,macがusb3.0対応していない.
    ということはlinuxもusb3.0対応していなくて,windowsのソフト側でusb3.0用のドライバなどがあってハード面だけでなくソフト面もきちんと整備されていないとこのusbは3.0では使えないのだろうか.

    まず表面に書いてある「usb3.0&2.0」というのがおかしい気がする.3.0は下位互換をもってるんじゃないのか?

    まあ,買ってしまったのでちょっと2.0としてつかったときと3.0として使った時をベンチマークして早くなっていたらきちんと3.0として認識してるんじゃないかなと思ってやってみた.

    ubuntuでusbのベンチマークができないかなとおもって調べてみたら,標準でコマンドがあるらしい.さすがlinux!!
    $ sudo hdparm -t /dev/sdb
    元々コレはhddのパラメーターを確認したりいじったりするものらしいのでコマンドも覚えやすい.

    実験として直付けのusb2.0,usb3.0とついでにフロントのポートのusb2.0もデータをとってみた.

    結果

    直付けusb2.0
    Timing buffered disk reads:  104 MB in  3.05 seconds =  34.09 MB/sec

    フロントポートusb2.0
    Timing buffered disk reads:  104 MB in  3.05 seconds =  34.09 MB/sec

    直付けusb3.0
    Timing buffered disk reads:  230 MB in  3.02 seconds =  76.28 MB/sec

    おお!
    きちんとusb3.0になってる.しかもメーカーで言ってる70MB/sを超えてる.きちんとusb3.0として使えるんじゃないか.
    あとついでにフロントではかっても直付けにしても速度は変わらないんだね.直付けの方が安定だろうけど.

    コレがlinuxのusbブートとしても効果を発揮できるかはわからないが,少し期待が持ててきた.

    色々実験ができて面白かったな.

    ここを参考にしました.