Delphi演習−1
Delphiのコンソールアプリケーションでプログラミングの演習をします Delphiを起動したら、新規作成→その他→コンソールアプリケーションで作成します。 1) 入力した文字を16進数で表示しなさい。 program G16henkan2; {$APPTYPE CONSOLE} uses SysUtils; var m,n,h:integer; s,st:string; function hex1(h:integer):char; var c:char; begin if (h<10)then c:=chr(ord('0')+h) else c:=chr(ord('A')-10+h); hex1:=c end; begin write('アスキー文字を1文字入力してください'); readln(st); h:=ord(st[1]); m:=h div 16; n:=h mod 16; setlength(s,2); s[1]:=hex1(m); s[2]:=hex1(n); writeln(s); readln; end. 2) 入力した文字列を16進数で表示しなさい。 program G16henkan3; {$APPTYPE CONSOLE} uses SysUtils; var m,n,h,i,l:integer; s,st:string; function hex1(h:integer):char; var c:char; begin if (h<10)then c:=chr(ord('0')+h) else c:=chr(ord('A')-10+h); hex1:=c end; begin write('アスキー文字列を入力してください'); readln(st); l:=Length(st); for i:=1 to l do begin h:=ord(st[i]); m:=h div 16; n:=h mod 16; setlength(s,2); s[1]:=hex1(m); s[2]:=hex1(n); write(s,' '); if i mod 16=0 then writeln; end; writeln; readln; end. 3) 入力した文字列を16進数で表示しなさい。 program G16henkan; {$APPTYPE CONSOLE} uses SysUtils; var b,i,l,x,y:Integer; a,r:String; begin a:='0123456789ABCDEF'; //10進数を16進数に変換するための文字列 write('文字列入力='); readln(r); //文字列の読み込み l:=Length(r); //文字列の長さを得る for i:=1 to l do //長さ分だけ繰り返す begin b:=Ord(r[i]); //文字を10進数に変換 x:=b div 16; //16進数の上位決定 y:=b mod 16; //16進数の下位決定 write(a[x+1],a[y+1],' '); //16進数として表示 if i mod 16=0 then writeln; //16個表示したら改行する end; writeln; readln; end. 4) 入力した文字列を16進数で表示しなさい。ただし、16進数にする部分を関数にすること。 program G16henkan4; {$APPTYPE CONSOLE} uses SysUtils; var m,n,h,i,l:integer; s,st:string; function hex1(h:integer):char; var c:char; begin if (h<10)then c:=chr(ord('0')+h) else c:=chr(ord('A')-10+h); hex1:=c end; function hex2(h:integer):string; var m,n:integer; s:string; begin m:=h div 16; n:=h mod 16; setlength(s,2); s[1]:=hex1(m); s[2]:=hex1(n); hex2:=s; end; begin write('アスキー文字列を入力してください'); readln(st); l:=Length(st); for i:=1 to l do begin h:=ord(st[i]); write(hex2(h),' '); if i mod 16=0 then writeln; end; writeln; readln; end. 5) テキストファイルを読み込み、その内容を16進数で表示しなさい。ただし、16進数にする部分を関数にすること。 program G16henkan5; {$APPTYPE CONSOLE} uses SysUtils; var m,n,h,i,l:integer; //変数を整数として宣言 filename,S:string; //変数を文字列として宣言 F:TextFile; //テキストファイル名の宣言 function hex1(h:integer):char; //入力値(整数)を文字として出力する関数 var c:char; //文字として宣言 begin if (h<10)then //条件分岐 c:=chr(ord('0')+h) //hが10未満の時の処理 else c:=chr(ord('A')-10+h); //hが10以上の時の処理 hex1:=c //cをhex1の返値とする end; function hex2(h:integer):string; //入力値(整数)を文字列として出力する関数 var m,n:integer; //m,nを整数として宣言 s:string; //sを文字列として宣言 begin m:=h div 16; //入力されたhを16で割った時の整数値をmとする n:=h mod 16; //入力されたhを16で割った時の余りをnとする setlength(s,2); //文字列sの長さを2とする s[1]:=hex1(m); //mの値を関数hex1で計算した返値をs[1]に入れる s[2]:=hex1(n); //nの値を関数hex1で計算した返値をs[2]に入れる hex2:=s; //sをhex2の返値とする end; //*****メイン***** begin filename:='text.txt'; //ファイル名text.txtをfilenameに代入 AssignFile(F,filename); //変数Fとファイル名を結びつける Reset(F); //ファイルをオープンする while not EOF(F) do //エンドオブファイルになるまで以下の処理を行う begin Readln(F,S); //1行読み込む l:=Length(S); //読み込んだ1行の長さを調べる for i:=1 to l do //1行の長さだけ繰り返す begin h:=ord(S[i]); //行の先頭から1文字ずつ取り出す write(hex2(h),' '); //取り出した文字を関数hex2で16進数にして表示 if i mod 16=0 then writeln; //16個表示したら改行 end; writeln; //1行の終わりで改行 end; close(F); //ファイルをクローズする readln; //コンソールを消さずにおく end. 6) テキストファイルを読み込み、その内容を16進数で表示しなさい。ただし、16進数にする部分はprocedure hex2(c:char)にすること。 program G16henkan6; {$APPTYPE CONSOLE} uses SysUtils; var i,l:integer; {変数を整数として宣言} filename,S:string; {変数を文字列として宣言} F:TextFile; {テキストファイル名の宣言} procedure hex2(c:char); {入力値を16進数の文字列として出力する} var h,m,n:integer; {h,m,nを整数として宣言} a:string; {a,sを文字列として宣言} begin a:='0123456789ABCDEF'; {16進数の文字列} h:=ord(c); {cとして受け取った値を数値化する} m:=h div 16; {入力されたhを16で割った時の整数値をmとする} n:=h mod 16; {入力されたhを16で割った時の余りをnとする} write(a[m+1],a[n+1],' '); {m,nの値によりaから取り出し16進数として表示} end; //*****メイン***** begin filename:='text.txt'; {ファイル名text.txtをfilenameに代入} AssignFile(F,filename); {変数Fとファイル名を結びつける} Reset(F); {ファイルをオープンする} while not EOF(F) do {エンドオブファイルになるまで以下の処理を行う} begin Readln(F,S); {1行読み込む} l:=Length(S); {読み込んだ1行の長さを調べる} for i:=1 to l do {1行の長さだけ繰り返す} begin hex2(S[i]); {取り出した1文字を16進数にして表示} if i mod 16=0 then writeln; {16個表示したら改行} end; writeln; {1行の終わりで改行} end; close(F); {ファイルをクローズする} readln; {コンソールを消さずにおく} end. 7) 10進数を入力し、それを16進数で表示しなさい。ただし、16進数にする部分はprocedure hex2(h:integer)にし、 再帰呼び出し(リカーシブルコール)を用いること program G16henkan10to16; {$APPTYPE CONSOLE} uses SysUtils; var r:integer; {変数を整数として宣言} procedure hex2(h:integer); {入力値を16進数の文字列として出力する} var a:string; {aを文字列として宣言} begin a:='0123456789ABCDEF'; {16進数変換用の文字列} if h=0 then exit; hex2(h div 16); {hex2を再帰呼び出し} write(a[(h mod 16)+1]); {cの値によりaから取り出し16進数として表示} end; //*****メイン***** begin write('10進数入力='); readln(r); {10進数を入力} hex2(r); {procedure hex2に渡す} writeln; {改行} readln; {コンソールを消さずにおく} end. 8) テキストファイルを読み込み、その内容を16進数で表示しなさい。ただし、16進数にする部分はprocedure hex2(c:char)にし、 再帰呼び出し(リカーシブルコール)を用いること program G16henkan7; {$APPTYPE CONSOLE} uses SysUtils; var i,l:integer; {変数を整数として宣言} filename,S:string; {変数を文字列として宣言} F:TextFile; {テキストファイル名の宣言} procedure hex2(c:char); {入力値を16進数の文字列として出力する} var a:string; {aを文字列として宣言} h:integer; {hを整数として宣言} begin a:='0123456789ABCDEF'; {16進数変換用の文字列} h:=ord(c); {受け取った値を10進数にする} if h=0 then exit; {h=0の時は何もしないで戻る} hex2(char(h div 16)); {hex2を再帰呼び出しして、上位の桁を出力} write(a[(h mod 16)+1]); {hの値によりaから取り出し16進数として表示} {再帰呼び出しの時は16進数の上位を表示} {再帰で呼び出さない時は16進数の下位を表示} end; //*****メイン***** begin filename:='text.txt'; {ファイル名text.txtをfilenameに代入} AssignFile(F,filename); {変数Fとファイル名を結びつける} Reset(F); {ファイルをオープンする} while not EOF(F) do {エンドオブファイルになるまで以下の処理を行う} begin Readln(F,S); {1行読み込む} l:=Length(S); {読み込んだ1行の長さを調べる} for i:=1 to l do {1行の長さだけ繰り返す} begin hex2(S[i]); {取り出した1文字を16進数にして表示} write(' '); {16進数を1つ出力したら、空白を1つ表示} if i mod 16=0 then writeln; {16個表示したら改行} end; writeln; {1行の終わりで改行} end; close(F); {ファイルをクローズする} readln; {コンソールを消さずにおく} end.