180 likes | 283 Views
情報科学1( G1) # 9. 演算と型 文字列の演算 英語の名詞を読み、その複数形を出力する. 変数(および定数)の型 (Type) と演算. 異なる型の間の演算は定義されていないこともある 同じ 演算子でも異なる演算を行なうことが ある ‘+’ 整数 同士なら加算,文字列同士なら 連結. 2つの文字列を 読み取り連結 して出力するプログラム. 2つの整数を 読み取り加算 して出力するプログラム. program Add; var x,y,z : integer; begin readln (x); readln (y);
E N D
情報科学1(G1) #9 • 演算と型 • 文字列の演算 • 英語の名詞を読み、その複数形を出力する
変数(および定数)の型(Type)と演算 • 異なる型の間の演算は定義されていないこともある • 同じ演算子でも異なる演算を行なうことがある ‘+’ 整数同士なら加算,文字列同士なら連結
2つの文字列を読み取り連結して出力するプログラム2つの文字列を読み取り連結して出力するプログラム 2つの整数を読み取り加算して出力するプログラム program Add; var x,y,z : integer; begin readln(x); readln(y); z := x+y; writeln('z is ',z); end. program Concat; var x,y,z : string[255]; begin readln(x); readln(y); z := x+y; writeln('z is ',z); end.
2つの文字列を読み取り連結して出力するプログラム2つの文字列を読み取り連結して出力するプログラム 2つの整数を読み取り加算して出力するプログラム program Concat; var x,y,z : string[255]; begin readln(x); readln(y); z := x+y; writeln('z is ',z); end. program Add; var x,y,z : integer; begin readln(x); readln(y); z := x+y; writeln('z is ',z); end.
整数と文字列を読み取り (連結/加算)して出力するプログラム program Adderror; var y,z : string[255]; x : integer; begin readln(x); readln(y); z := x+y; writeln('z is ',z); end. 整数の加算: (integer) + (integer) = (integer) 文字列の連結: (string) + (string)= (string) 整数と文字列の演算は定義されていない. (integer) + (string)= ?
adderr.pas: In main program: adderr.pas:8: error: invalid operands to `+’ 演算子 + のoperand(演算される値)がおかしい
値の比較 • 数値は大小関係がある • 文字列の比較はいわゆる辞書順 a<b a>b a>=b a<=b a=b a<>b
文字列の比較 数値の比較 program SmallerStringFirst; var x,y : string[255]; begin writeln('Type two string.'); readln(x); readln(y); writeln('In order, they are'); if x > y then writeln(y,' ',x) else writeln(x,' ',y); end. program SmallerIntegerFirst; var x,y : integer; begin writeln('Type two integers.'); readln(x); readln(y); writeln('In order, they are'); if x > y then writeln(y,' ',x) else writeln(x,' ',y); end.
整数の演算 +加算 ー減算 *乗算 div 除算(余りは切り捨て) mod 剰余 / 除算(結果は実数型)
文字列の演算 + 文字列の連結 copy(str, start, nchar) 文字列strのstart番目からnchar文字 length(str) 文字列strの長さ pos(x,y) 文字列yの中の文字列xの位置
copy(str,start,nchar) 文字列strのstart番目からnchar文字を取り出す x = 'abcdefgh'である時 y := copy(x,3,4) y = 'cdef' y := copy(x,1,1) y = 'a' y := copy(x,6,1) y = 'f' y := copy(x,9,2) y = ‘’ (長さ0の文字列)
length(str) 文字列strの長さ 以下のプログラムは4を出力する program FindLength; var x : string[255]; y : integer; begin x := 'abcd'; y := length(x); writeln(y); end.
length(str)文字列strの長さ 出力される値は? program FindIt; var x,y : string[255]; begin readln(x); y := copy(x,length(x),1); writeln(y); end.
copyとlengthを組み合わせる copy(x,length(x)-1,1) xの最後から2番目の文字 copy(x,length(x)-2,1) xの最後から3番目の文字 copy(x,length(x)-1,2) xの最後の2文字 copy(x,1,1) xの最初の1文字 copy(x,1,2) xの最初の2文字 copy(x,1,length(x)-1) xの最後の1文字を除いた文字列 copy(x,2,length(x)-1) xの最初の1文字を除いた文字列 copy(x,2,length(x)-2) xの最初と最後の1文字を除いた文字列 copy(c,1,length(x) div 2) xの前半分の文字列
pos(x,y)文字列yの中の文字列xの位置 x = 'cde’y = 'abcdef’ pos(x,y) = 3 x = 'de’ y = 'abcdef’ pos(x,y) = 4 x = 'def’ y = 'abcdef’ pos(x,y) = 4 x = 'aa’ y = 'abcdef’ pos(x,y) = 0 x = 'bc’ y = 'abcbcbc’ pos(x,y) = 2 x = 'cbc’ y = 'abcbcbc’ pos(x,y) = 3 x = 'a’ y = 'abcdef’ pos(x,y) = 1 x = 'abcd’ y = 'abc' pos(x,y) = 0 xがyの中にないならば,0となる
英語の名詞を読み取り,その複数形を書き出すプログラム英語の名詞を読み取り,その複数形を書き出すプログラム bird birds whale whales cow cows pony ponies bunny bunnies sheep sheep mouse mice
英語の名詞を読み取り,その複数形を書き出すプログラム英語の名詞を読み取り,その複数形を書き出すプログラム 基本的な考え方: 入力される名詞が特殊なら,その複数形を出力,そうでないなら,規則を適用
アルゴリズム 1.名詞を入力する 2.それが,既知の特殊なケースかどうかを調べる 3.特殊ならその複数形を選択し作業終了の印を付ける 4.特殊でない場合名詞が‘y’で終わっているかを調べる (a)‘y’で終わっていたら,‘y’を削除して,‘ies’をつける (b)それ以外は‘s’をつける 5.複数形を書き出す