pascal2011

2011年10月24日 (月)

【2】pascal練習問題

■pascal練習問題
7) 単位変換問題[Ⅱ]のプログラム例

program hikidashi;
var
  kingaku,amari:longint;
  syou:integer;
begin
  write('引出し金額は1円から100000円までです= ');
  readln(kingaku);
  syou := kingaku div 10000 ;writeln('10000円',syou,'枚');
  amari:= kingaku mod 10000 ;
  syou := amari div 5000 ;writeln('5000円',syou,'枚');
  amari:= amari mod 5000 ;
  syou := amari div 2000 ;writeln('2000円',syou,'枚');
  amari:= amari mod 2000 ;
  syou := amari div 1000 ;writeln('1000円',syou,'枚');
  amari:= amari mod 1000 ;
  syou := amari div 500  ;writeln('500円',syou,'枚');
  amari:= amari mod 500  ;
  syou := amari div 100  ;writeln('100円',syou,'枚');
  amari:= amari mod 100  ;
  syou := amari div 50   ;writeln('50円',syou,'枚');
  amari:= amari mod 50   ;
  syou := amari div 10   ;writeln('10円',syou,'枚');
  amari:= amari mod 10   ;
  syou := amari div 5    ;writeln('5円',syou,'枚');
  amari:= amari mod 5    ;
  syou := amari div 1    ;writeln('1円',syou,'枚');
end.

課題:繰り返し文や条件文を学習すると,よりわかりやすくコンパクトなプログラムに修正できるでしょう.
次のプログラム例は,配列(定数配列)を使用しています.

program hikidashi2;
const
  N=10;
  kahei:array[1..10]  of integer = (10000,5000,2000,1000,500,100,50,10,5,1);
var
  i:integer;
  kingaku,syou,amari:longint;
begin
  write('引出し金額を入力して下さい(上限100000円)= ');
  readln(kingaku);
  if  kingaku > 100000 then begin writeln('10万円を超えています');exit end;
  for i:=1 to N do begin
    syou:=kingaku div  kahei[i];
    if syou >0 then writeln(kahei[i]:5,'円',syou:5,'枚');
    amari:= kingaku mod  kahei[i];
    kingaku:= amari;
  end
end.

課題:上のプログラム例は学んでいない内容を含んでいますが,コピーして実行してみよう.
実行結果もすこし分かりやすくなっています.

3) 消費税の計算
a%の税金がかかる商品b円と無税の商品をc円購入したい.合計の支払い金額を求めよ.

4) 標準体重の計算
身長(bh)を入力して,標準体重(BMI,body mass index)を求める.身長の単位はmである.
BMI=身長(m)×身長(m)×22

5) 長方形の面積と周囲の長さの計算
[ヒント]長方形の辺をキーボード入力する.

6) 単位変換問題[Ⅰ]

秒単位で与えられた時間を,時間,分,秒の単位を用いて作成せよ.
[ヒント] div  mod

7) 単位変換問題[Ⅱ]
円単位で与えられたお金を,紙幣,貨幣を使い,最も紙幣や貨幣の合計数が少なくなるようにして表示する.
[ヒント] div  mod


8) 学籍番号を入力して入学年度と所属学科を判定する.
[ヒント] div  mod  case文

[コード例]
program gakuseki;
var
  gakka,bango,amari,nendo:integer;
begin
  write('学生番号を入力してください(例09512) = ');
  readln(bango);
  nendo:= bango div 1000;
  amari:= bango mod 1000;
  gakka:= amari div 100;
  write('入学年度 ',nendo,'年度  ');
  case gakka of
    1:writeln('機械工学科');
    2:writeln('電気電子工学科');
    3:writeln('電子制御工学科');
    4:writeln('情報工学科');
    5:writeln('環境都市工学科')
    else writeln('error')
  end;
end.

■freepascal関連HP
●String handling
http://www.freepascal.org/docs-html/rtl/system/stringfunctions.html
●int
http://www.freepascal.org/docs-html/rtl/system/int.html
●Index of all identifiers in package 'rtl'
http://www.freepascal.org/docs-html/rtl/index-8.html#SECTIONI



2011年10月21日 (金)

【1】数列に関するプログラム例[度とラジアン変換関数を含む](free pascal )

■free pascalによる数列に関するプログラム例の学習用メモ
(度とラジアンの変換に使用する関数も含む)
//以後行末までは注釈

program progression;
//等差級数(arithmetical progression)の一般項
//等比級数(geometrical progression)の一般項

{$I my_math.lib}  //my_math.libは自作関数, この行はuses math; で可能

var
  n,a,d,r,i,kakudo,count:integer;
  ana:longint;
  ang:real;
begin
  //等差級数(arithmetical progression)
  writeln('等差級数');
  a:=3;
  d:=4;
  for n:= 1 to 3 do begin
    ana:=a+(n-1)*d;
    write(' ',ana:5)
  end;
  writeln;

//等比級数(geometrical progression)
  writeln('等比級数');
  a:=2;
  r:=3;
  for n:=1 to 3 do begin
    ang:=a*power(r,n-1);  //r^(n-1)
    write(' ',ang:5:0)
  end;
  writeln;
 
//角度 度とラジアンの変換に使用する関数
  writeln(degtorad(180):5:3);
  writeln(radtodeg(pi):5:0);
 
//degree to radian 角度0,10,20,...180度 をラジアンに変換して表示 
  kakudo:=0;count:=0;
  for i:= 1 to 19 do begin
    write(degtorad(kakudo):5:2);
    kakudo:=kakudo+10;
    count:=count+1;
    if (count=5) then begin writeln;count:=0;end
  end; 
  writeln;
end.

■数列
教科書『新訂 基礎数学』 大日本図書 p190で復習しよう.

■角度は通常ラジアン単位
例 sin(x) 引数xはラジアン単位で設定します.

■my_math.libのファイル(学習用)
このファイル(インクルードファイルと呼ぶ)をソースファイルと同じ場所(同じフォルダ)に保存する.
「my_math.lib」をダウンロード

数学関数などを使う時には,自作関数を作成して利用することもできるが,
一般的には,free pascalで用意されているmathユニットを利用します.

・使い方
{$I my_math.lib}  //my_math.libは自作関数 
この1行を
uses math;
に変えて実行することになります.自作のインクルードファイルは必要なくなります.

ただし,インクルードファイルは役立つことがあるので,知っておくとよいでしょう.

■簡単なユニットの活用例
・物理定数を集めたユニットの例
次のコードをphysics.pasとして.ソースファイルと同じ場所(同じフォルダ)に保存.
unit physics;
  interface
    const
       g=9.8;       //  m/s^2 :重力加速度
       c=3.00e8;  //  m/s    :光速度
  implementation
end.

■ユニット(physics.pas)を利用したプログラム例
program phy_test1;
uses physics;
begin
   writeln(g);
   writeln(c);
   writeln(physics.g);
   writeln(physics.c);
end.

program phy_test2;
uses physics;
begin
   writeln(g:3:2,' m/s^2');
   writeln(c:9,' m/s');
   writeln(physics.g:3:2,' m/s^2');
   writeln(physics.c:9,' m/s');
end.

■参考にするFree PasacalのHP
http://www.freepascal.org/download.var
http://www.freepascal.org/docs.var
http://www.freepascal.org/docs-html/ref/ref.html#QQ2-187-212
http://www.freepascal.org/docs-html/ref/refli7.html#x187-19700015.2
http://www.freepascal.org/docs-html/ref/ref.html
http://www.freepascal.org/docs-html/rtl/system/index-5.html
http://www.freepascal.org/docs-html/rtl/index.html    参照
http://www.freepascal.org/docs-html/rtl/system/ln.html

■Index of all identifiers in unit 'math' 数学関数など含む
Reference for unit 'math' (#rtl) 
http://www.freepascal.org/docs-html/rtl/math/index-8.html
power,log10,degtorad,radtodegはunit 'math'に含まれている.

■Index of all identifiers in unit 'System'
Reference for unit 'System' (#rtl)
http://www.freepascal.org/docs-html/rtl/system/index-8.html
pi,sin,cos,ln,expはunit 'System'に含まれている.

■Pascalの学習環境例
・Free PasacalをDL
http://www.freepascal.org/download.var
・CPad for Free Pascal
Free Pascal用のPacal開発環境 GUIで簡単にコンパイル・実行

■整数型と実数型の表現範囲
・Integers
http://www.freepascal.org/docs-html/ref/refsu5.html#x27-270003.1.1 より

Integer_2

・Real types
http://www.freepascal.org/docs-html/ref/refsu6.html#x28-310003.1.2  より

Real

たとえば,double型の表現範囲は,次のようになります.
●表現できる負の最大値と負の最小値

Double_fu

●表現できる正の最小値と正の最大値

Double_sei

■Rによるπの計算例(群馬大学,青木先生HPより)
http://aoki2.si.gunma-u.ac.jp/R/multibyte.html

source("http://aoki2.si.gunma-u.ac.jp/R/src/multibyte.R", encoding="euc-jp")
[例]
calc.pi(len)  # πの計算 小数点以下 len 桁まで求める
calc.e(len)   # e の計算 小数点以下 len 桁まで求める




無料ブログはココログ
2017年7月
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31