りょうとのITブログ

りょうとのITブログ

Windows 10 Pro 64bit 始めました。

Will you be my Sounding Board ?

こうなってるのを


こうしたい。
(空白は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つだけならともかくいくつもとなると更に面倒になりますし。

以上です。
フレのYoutubeが更新されてました。この場を借りて宣伝。

← 以前のエントリはこちら

色々勉強して、以前scanf()でどん詰まった箇所が分かりました。 まず、最初のプログラム、
#include int main(void){ char c; scanf("%c", &c); printf("%c\n", c); scanf("%c", &c); printf("%c\n", c); return 0; }
で、'A', '\n', 'B' と入力すると

$ ./test A A $

と表示されるのは何でか、という点。 これは、↑の入力列から明らかなように、'A'と'\n'しか読み込まれていない、というのが答えです。1行目の'A'は入力、2行目の'A'はそのエコー、3行目の'\n'はprintf()による改行、4行目の'\n'は入力列の2つ目'\n'のエコー、そして最後の'\n'は同じくprintf()内の改行によるもの、という仕組みでした。 では当初の目的、'A', '\n', 'B' という入力列で、'A', '\n', 'B' という出力を得るにはどうすれば良いか。単純です。2回のscanf()を3回にすれば良いだけです。 以下、ソース:
#include int 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; }
結果:

$ ./test A A B B $

但し、これはあまりスマートなやり方ではありません。n回入力があるなら、n回scanf() とprintf() を記述しなければいけないからです。 そこで、もちっと改良。の前に仕様を決めます。 1. 文字が入力されたら、その文字と改行を出力する。 2. 2文字以上入力されたら、都度その文字と改行を出力する。 3. '0'が入力されたら終了する。 以下、ソース:
#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クラスを使いました。
まあやってる事は精度上げてゴリ押しなんですけどね。
百聞は一見に如かず、ソースです:
import java.util.Scanner; import java.lang.String; import java.math.*; class ToBinFractionD{ public static void main(String args[]){ Scanner sc = new Scanner(System.in); System.out.println("Input a fraction number: "); BigDecimal bd = sc.nextBigDecimal(); String bin = "0."; int c = 0; while(c < 64){ // 残骸w while(bd.compareTo(BigDecimal.ZERO) != 0){ bd = bd.multiply(BigDecimal.valueOf(2), MathContext.DECIMAL32); if(bd.compareTo(BigDecimal.ONE) >= 0){ bin = bin.concat("1"); } else { bin = bin.concat("0"); } bd = bd.remainder(BigDecimal.ONE, MathContext.DECIMAL32); c++; } System.out.println("Output binary: "); System.out.println(bin); } }
前回と同じく検証します。
まずは優しい数:

$ 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

第一版であった誤差が無くなりました。
綺麗な小数に変換されています。

という訳で、今回の目的はひとまず達成。