Ex12

From Prog0

Jump to: navigation, search

演習第12回

Contents

演習問題

主な内容

  • ニュートン法
  • 桁数の求め方
  • ある桁の値の求め方
  • エラーチェック

以下の問題を解いて期限内に解答を提出してください。

出席確認

  • 演習時間中に出席確認をLMS上の「演習出欠」で行ってください
    • 出席確認用のパスワードは演習時間のどこかのタイミングで提示されます


A問題

A-1 ニュートン法

ファイル名: ex12a1.c

f(x) = x2 - 2 = 0 の解をニュートン法を用いて求めるプログラムを作成せよ。ただし、xの初期値は2.0とし、収束条件の精度は10-6とする。なお、実行例の各列の数値の意味はハンドアウトの例題(Lec12-9参照)と同じである。

[実行例]

% ./a.out
x(k-1)		fx		dfx		x(k)		f(x,2.000000)
2.000000	2.000000	4.000000	1.500000	0.2500000000
1.500000	0.250000	3.000000	1.416667	0.0069444444
1.416667	0.006944	2.833333	1.414216	0.0000060073
1.414216	0.000006	2.828431	1.414214	0.0000000000
sqrt(2.000000): 1.4142135624
%

A-2 数値の桁数

ファイル名: ex12a2.c

以下の実行例のように、入力した正の整数の桁数を表示するプログラムを作成せよ。その際、整数の桁数を計算して返す関数 int digits(int) を作成して使用すること。なお、この問題では入力値のエラーチェックは省略してよい。

[実行例]

% ./a.out
正の整数を入力してください:12345
12345 の桁数は 5 です
%

B問題

B-1 10進数から2進数への変換

ファイル名: ex12b1.c

10進数の0から255までの数値を8ビットの符号なし2進数で表示するプログラムを作成せよ。その際、10進数を2進数へ変換して表示する関数 void d2b(int) を作成して使用すること。ただし、入力と表示は繰り返し行い、負の値が入力された場合に終了するものとする。

[実行例]

% ./a.out 
10進数を入力してください:15
00001111
10進数を入力してください:47
00101111
10進数を入力してください:256
256以上の値が入力されました
10進数を入力してください:-1
%

B-2 各桁の数値の和

ファイル名: ex12b2.c

ハンドアウト Lec12-11 〜 Lec12-16 にある関数を利用して、キーボードから入力した正の整数の各桁の数値の和を計算して表示するプログラムを作成せよ。ただし、負の値が入力された場合は「不正な値が入力されました」というメッセージを標準エラー出力で出力して強制終了すること。またその際、シェル変数「$?」へは「8」を渡すようにすること(Lec12-23参照)。

[実行例]

% ./a.out
正の整数を入力してください:12345
12345 の各桁の数値の和は 15 です
% echo $?
0
% ./a.out
正の整数を入力してください:-1
不正な値が入力されました
% echo $?
8
%

B-3 10進数を16進数で表示

ファイル名: ex12b3.c

以下の実行例のように、入力した10進数を16進数で表示するプログラムを作成せよ。ただし、負の値が入力された場合は、実行例のようにメッセージを表示して再度データ入力からやり直すこととする。

[実行例]

%./a.out
10進数を入力してください:10
10 の16進数は a です
% ./a.out
10進数を入力してください:-1
負の値が入力されました
10進数を入力してください:255
255 の16進数は ff です
%

ヒント:Lec03-20参照

B-4 四捨五入

ファイル名: ex12b4.c

キーボードから入力した正の実数を、小数点以下の指定した桁数までとなるように四捨五入して表示するプログラムを作成せよ。その際、実数を指定した桁数で四捨五入する関数 double round_to(double, int) を作成して使用すること。なお、この問題では入力値のエラーチェックは省略してよい。

[実行例]

%./a.out
正の実数を入力してください:3.14159265
小数点以下の桁数を入力してください:2
3.140000
% ./a.out
正の実数を入力してください:3.14159265
小数点以下の桁数を入力してください:4
3.141600
%

Extra問題

E-1 素数判定

ファイル名: ex12e1.c

素数かどうかを判定する関数「isprime」を作成し、2から1000までの素数を10列の表として表示するプログラムを作成しなさい。isprime関数は判定する数字を引数に取り、素数の場合は "1" を、そうでない場合は "0" を返す関数とする。なお、実行例のように列を揃えて(10個単位で改行させて)表示させること(ブラウザによっては、ずれて見える可能性がある)。

[実行例]

% ./a.out 
    2     3     5     7    11    13    17    19    23    29
   31    37    41    43    47    53    59    61    67    71
   73    79    83    89    97   101   103   107   109   113
  127   131   137   139   149   151   157   163   167   173
  179   181   191   193   197   199   211   223   227   229
  233   239   241   251   257   263   269   271   277   281
  283   293   307   311   313   317   331   337   347   349
  353   359   367   373   379   383   389   397   401   409
  419   421   431   433   439   443   449   457   461   463
  467   479   487   491   499   503   509   521   523   541
  547   557   563   569   571   577   587   593   599   601
  607   613   617   619   631   641   643   647   653   659
  661   673   677   683   691   701   709   719   727   733
  739   743   751   757   761   769   773   787   797   809
  811   821   823   827   829   839   853   857   859   863
  877   881   883   887   907   911   919   929   937   941
  947   953   967   971   977   983   991   997
%

課題提出上の注意事項

解答ファイルはmenuコマンドを使って提出してください。以下のようにmenuコマンドを実行し、表示されるメッセージに沿って操作すること。

% ~prog0/bin/menu

menuコマンドは、解答ファイルが ~/Prog0/Ex## のディレクトリに指定されたファイル名で置かれているものとして処理します。正常に提出された場合は ○ が、何らかのエラーが生じた場合は × が表示されます。

解答の提出期間は以下のとおりです。

問題提出受付開始提出〆切
A問題 演習日の6日前の午後9時演習終了時刻
B, Extra問題 演習日の6日前の午後9時演習日の6日後の午後9時

提出は〆切前であれば何度でもやり直すことができます。再提出すると、前に提出したファイルは新しい内容で上書きされます。

Personal tools