こうなってるのを
こうしたい。
(空白は1秒(今回のケースでは24フレーム)とします)
方法:
1. 空白の素となるFusion Compositionを作成
エディットページにて、メディアプール内の空欄箇所で右クリックして「新規Fusionコンポジション」を選択。ここでは、長さを1秒に変更します。
2. F9で挿入×4
そのままエディットページのままで、1. で作成したFusion Compositionをクリックしてから、挿入したい箇所に再生ヘッド(赤の縦線です)を合わせてF9ボタンを押下(「クリップを挿入」をクリックでもOK)。それを4箇所分。
3. 念のため挿入したFusion Compositionを削除
Ctrlを押しながら、挿入したFusion Compositionを4つ選択して、その状態でBackSpaceを押下(右クリックのち「選択を削除」をクリックでもOK)。
以上の手順で、こうなりました!
まあ空白の挿入は、
・Yキーで再生ヘッドより後ろのクリップを全て選択
・.(ドット)キーで選択されたクリップを後ろにずらす
というのでも出来ますが、24フレームちょうどとなるとちょっと面倒なので、前述の方法の方が良いかと。空白も、1つだけならともかくいくつもとなると更に面倒になりますし。
以上です。
で、'A', '\n', 'B' と入力すると#includeint main(void){ char c; scanf("%c", &c); printf("%c\n", c); scanf("%c", &c); printf("%c\n", c); return 0; }
と表示されるのは何でか、という点。 これは、↑の入力列から明らかなように、'A'と'\n'しか読み込まれていない、というのが答えです。1行目の'A'は入力、2行目の'A'はそのエコー、3行目の'\n'はprintf()による改行、4行目の'\n'は入力列の2つ目'\n'のエコー、そして最後の'\n'は同じくprintf()内の改行によるもの、という仕組みでした。 では当初の目的、'A', '\n', 'B' という入力列で、'A', '\n', 'B' という出力を得るにはどうすれば良いか。単純です。2回のscanf()を3回にすれば良いだけです。 以下、ソース:$ ./test A A $
結果:#includeint main(void){ char c; scanf("%c", &c); printf("%c", c); scanf("%c", &c); printf("%c", c); scanf("%c", &c); printf("%c", c); printf("\n"); return 0; }
但し、これはあまりスマートなやり方ではありません。n回入力があるなら、n回scanf() とprintf() を記述しなければいけないからです。 そこで、もちっと改良。の前に仕様を決めます。 1. 文字が入力されたら、その文字と改行を出力する。 2. 2文字以上入力されたら、都度その文字と改行を出力する。 3. '0'が入力されたら終了する。 以下、ソース:$ ./test A A B B $
結果:#include/* 80文字以上は入力しない事!それとマルチバイト文字には対応してません */ int main(void){ char str[80]; int i; int loop; for(loop = 1; loop; ){ printf("> "); scanf("%s", &str[0]); for(i = 0; str[i] != '\0'; i++){ printf("%c\n", str[i]); } if(str[0] == '0') loop = 0; } return 0; }
以上!$ ./scanTest2 > A A > AB A B > aAb a A b > 0 0 $
さて、続きです。 前回の予告通り、BigDecimalクラスを使いました。 まあやってる事は精度上げてゴリ押しなんですけどね。 百聞は一見に如かず、ソースです:
前回と同じく検証します。 まずは優しい数:
$ java ToBinFractionD Input a fraction number: 0.875 Output binary: 0.1110000000000000000000000000000000000000000000000000000000000000
まあ、ここまでは良いでしょう。 さて問題の、優しくない数:
$ java ToBinFractionD Input a fraction number: 0.1 Output binary: 0.0001100110011001100110011001100110011001100110011001100110011001
合ってるかどうか分かりませんね。 検証プログラムで検証してみます(第一版の方にも載せてますが微調整したので再掲)。
結果です:import java.util.Scanner; class ToDec{ public static void main(String args[]){ Scanner sc = new Scanner(System.in); System.out.println("Input a fraction number: "); String inputNum = sc.next(); inputNum = inputNum.substring(2); double f = 0.0; double fracNum = 0.5; while(!inputNum.isEmpty()){ if(inputNum.charAt(0) == '1'){ f = f + fracNum; } inputNum = inputNum.substring(1); fracNum = fracNum / 2.0; } System.out.println("Output decimal: "); System.out.println(f); } }
$ java ToDec Input a fraction number: 0.0001100110011001100110011001100110011001100110011001100110011001 Output decimal: 0.1
第一版であった誤差が無くなりました。 綺麗な小数に変換されています。 という訳で、今回の目的はひとまず達成。