180 likes | 280 Views
情報科学1( G1) # 1 1. テキスト編集のプログラミング エディタ プログラムの 作成 (続き). エディタ. コンピュータ との対話 Computer : Command: User : i ( 文字列を挿入せよ) Computer : Insert What? User : abcdaefgh Computer : *abcdaefgh (ポインタの位置を*で表す) Computer : Command: User : p ( ポインタの位置を合わせよ)
E N D
情報科学1(G1)#11 • テキスト編集のプログラミング • エディタ プログラムの作成(続き)
エディタ コンピュータとの対話 Computer : Command: User : i (文字列を挿入せよ) Computer : Insert What? User : abcdaefgh Computer : *abcdaefgh (ポインタの位置を*で表す) Computer : Command: User : p (ポインタの位置を合わせよ) Computer : Point to What? User : aef Computer : abcd*aefgh
ポインタ:変更が行なわれる位置を示す目印 2番目のaにポインタをあわせる. abcdaefgh | ポインタの直前に'bbb'を挿入する. abcdbbbaefgh | ポインタの場所から4文字を削除する. abcdefgh |
繰り返し while文 • while条件 do文 • (「条件」が成立する時,「文」を実行)を繰り返し行なう. • 成立しない場合は,次の文へ
エディタプログラムの作成 繰り返しコマンドを受け付けるようにする. 0.‘Enter Editor.’と出力する. 1.単語‘Command:’を出力する. 2.ユーザのコマンドを入力する. 3.もしコマンドが ‘q‘ ならエディタを終了する. 4.もしコマンドが ‘i’ ならば,挿入を実行する. 5.もしコマンドが ‘p’ ならば,ポインタの移動を実行する. 6.もしコマンドが.... (以下省略) ……… N. 1.へもどる.
エディタプログラムの作成 writeln('Enter Editor.'); text := ''; ptr := 0; command := ''; while command <>'q' do begin writeln('Command:'); readln(command); if command = 'i' then begin 挿入を実行する end; ....... end; writeln('Exit Editor');
エディタプログラムの作成 writeln('Enter Editor.'); text := ''; ptr := 1; command := ''; while command <>'q' do begin writeln('Command:'); readln(command); if command = 'i' then begin 挿入を実行する end; ....... end; writeln('Exit Editor'); textの初期値は長さ0の文字列 pointerの初期値は文字列の先頭 commandの初期値は長さ0の文字列
コマンド • iコマンド文字を挿入する • pコマンド ポインタの移動 • dコマンド 削除する • cコマンド 変更する • sコマンド 空白を挿入する • hコマンド • plコマンド
i コマンド(改訂版) begin writeln('Insert what?'); readln(new); text := copy(text,1,ptr-1)+new +copy(text,ptr,length(text)-ptr+1); writeln(text); end; このアルゴリズム/コードではポインタ*が出力に含まれない. 出力する文字列をpformとする.
i コマンド(改訂版) • 'Insert What?'と表示する • 文字列を入力し,それを new に記憶する. • text内のポインタの左側までの文字列,newの文字列,text内の残りの文字列が続く文字列を構成し,textにコピーする. • ポインタを合わせた文字のすぐ左に'*'を含んだ文字列を作成し,pformに記憶する. • pformを出力する.
i コマンド(改訂版) begin writeln('Insert what?'); readln(new); text := copy(text,1,ptr-1)+new +copy(text,ptr,length(text)-ptr+1); pform := copy(text,1,ptr-1)+’*’+ +copy(text,ptr,length(text)-ptr+1); writeln(pform); end;
p コマンド ポインタの移動 • Point to what? と出力する. • 文字列を入力し target に記憶する. • targetが文字列text内に現れた最初の位置をptrに記憶する. • ポインタをあわせた文字の直前に*のついた文字列を作成し表示する.
d コマンド 削除する • Delete how many characters. と出力する. • 削除する文字数を入力する.(nchar) • textのポインタの位置から入力した文字数を削除する. • ポインタをあわせた文字の直前に*のついた文字列を作成し表示する.
c コマンド 変更する • Change how many characters. と出力する. • 文字数を入力する.(nchar) • To what? と出力する. • 変更する文字列(new)を入力する. • textのポインタの位置からnchar文字をnewに変更した文字列を新たなtextとする. • ポインタをあわせた文字の直前に*のついた文字列を作成し表示する.
s コマンド 空白を挿入する • How many SPACEs? と出力する. • 文字数を入力する.(nchar) • textのポインタの位置にnchar文字の空白を追加する. • ポインタをあわせた文字の直前に*のついた文字列を作成し表示する.
h コマンド • コマンドの説明を表示. plコマンド • 文字列の最後にポインタを合わせる
新たなコマンドをつくる. • コマンドのアルゴリズムを考える. • 入力した値が適切なものでない場合,動作がおかしくならないか,を考える. • 必要に応じて,アルゴリズムを変更する. • プログラムを書く.
入力した値が適切なものでない場合? • 例)整数の値を入力 • 0または正の値を想定 • 負の値が入力されたらどうする? • 負の値が入力されたらどうする?