pascal

2010年11月30日 (火)

解答例参考(101130)

「PFDc2jyouhou101130.pdf」をダウンロード

2010年11月 9日 (火)

if文  case文  for文  while文  repeat文の例・練習問題のプログラム例

【if文】
【練習問題1】コンピュータとじゃんけんゲーム
コンピュータが必ず勝つプログラムを作ってください。
・人間はグー、 チョキ、 パー を1 、2 、3 とキーボードから入力する。
・画面にはコンピュータのだすグー、 チョキ、 パーを表示する。

Jyanken_syuusei_2

program janken;
var hand:integer;
begin
  write('グー=1 , チョキ=2 , パー=3 数字で入力してください');
  readln(hand);
  if hand=1 then writeln('パー')
  else
    if hand=2 then writeln('グー')
    else
      if hand=3 then writeln('チョキ')
      else writeln('グー=1 , チョキ=2 , パー=3 以外です');
end.

【練習問題2】2つの数(変数a,bに代入)を入力してどちらが大きいか調べる。同じときには同じと答える。
2tunosaidai_2

program saidai1;
var
  a,b:integer;
begin
  write('2つの正整数を入力してください ');
  readln(a,b);
  if a>b then writeln(a)
  else
    if a=b then writeln('同じ')
    else writeln(b);
end.

【発展問題】3つの数(変数a,b,cに代入)を入力して最大値を表示する。

3tunosaidaichikomoji

program saidai2;
var
  a,b,c:integer;
begin
  write('3つの正整数を入力してください ');
  readln(a,b,c);
  if a>b then
    if a>c then writeln(a) else writeln(c)
  else
    if b>c then writeln(b) else writeln(c);
end.

【case文】
【例1】case文(その1) 各月の日数を計算する。
program tukisu;
var month,days:integer;
begin
  writeln('日数を知りたい月は?');
  readln(month);
  case month of
  1,3,5,7,8,10,12:  days:=31;
    4,6,9,11       :  days:=30;
  2              :  days:=28
   else writeln('input error')
  end;
  writeln(month, '月は', days, '日です');
end.

2】case文(その2) 成績判定 プログラムを完成しよう。
program hantei1;
var
  score:integer;
  judge:char;
begin
  write('あなたの点数は?');
  readln(score);
  case score of
    80..100: judge := 'A';
    70..79 : judge := 'B';
    60..69 : judge := 'C';
      0..59 : judge := 'D';
    else     judge := '?'
  end;
  writeln('判定は、', judge, 'です。');
end.

2 その2 成績判定 プログラムを完成しよう。
program hantei2;
var
  score:integer;
  judge:string;
begin
  write('あなたの点数は?');
  readln(score);
  case score of
    80..100: judge := 'A';
    70..79 : judge := 'B';
    60..69 : judge := 'C';
     0..59 : judge := 'D';
    else     judge := '不明'
  end;
  writeln('判定は、', judge, 'です。');
end.

【for文】

【例1】実行結果に示す表示を行うプログラムをつくる。(for to do 文)

program for_rei1;
var
  i:integer;
begin
  for i:=1 to 15 do write(i);
  writeln;
  for i:=1 to 15 do write('*',i);
  writeln;
end.

【例2】2の倍数を30まで,*2*4*6...*30と表示する。
program for_rei2;
var
  i:integer;
begin
  for i:=1 to 15 do write('*',2*i);
  writeln;
end.

【例3】例1とは逆に、『15から1まで表示いする』する。for downto doを使ったできる。しかし、for downto do 文を使わなくてもできる。for to do 文でできる。作ってみよう。
program for_rei3;
var
  i:integer;
begin
  for i:=15 downto 1 do write(i,' ');
  writeln;
  for i:=1 to 15 do write(16-i,' ');
  writeln;
end.

【例4】sqr(x)の数表をつくる。0.0から1.0までxの値を0.1キザミで増やし、sqr(x)の値を表示する。sqr(x)は2乗、の標準関数

program rei4_forreal;
var
  i:integer;
  x:real;
begin
  for i:=0 to 10 do begin
    x:=i/10;
    writeln(x:7:4,'  sqr(x)=',sqr(x):5:4 );
  end;
end.

【練習問題1】例4において表示する範囲をたずねるようにせよ。

program rensyu1_for;
var
  i:integer;
  x:real;
  kaishi,owari:integer;
begin
  writeln('表示の範囲の指定');
  write('開始の指定');readln(kaishi);
  write('終了の指定');readln(owari);

  for i:=kaishi to owari do begin
    x:=i/10;
    writeln(x:7:4,'  sqr(x)=',sqr(x):5:4 );
  end;
end.

【練習問題2】平方根の表をつくる。sqrt(x) 平方根を求める標準関数です。

program rensyu2_for1;
var
  i:integer;
  kaishi,owari:integer;
begin
  writeln('表示範囲の指定(平方根)');
  write('開始の指定');readln(kaishi);
  write('終了の指定');readln(owari);
    for i:=kaishi to owari do begin
    writeln('i= ',i:7,'  sqrt(i)=',sqrt(i):8:3);
  end;
end.

【練習問題31からnまでの総和を求める。nはキーボード入力する。変数は整数型

program rensyu3_souwa;
var i,n,sum:integer;
begin
  write('n= '); readln(n);
  sum:=0;
  for i:=1 to n do
    sum := sum + i;    {(第i項の一般式)}
  writeln('sum = ',sum);
end.

【発展課題 1 一般数列のm項からn項の総和

program rensyu4_souwa;
var i,n,m,sum:integer;
begin
  write('m= '); readln(m);
  write('n= '); readln(n);
  sum:=0;
  for i:=m to n do
    sum := sum + i;    {(第i項の一般式)}
  writeln('sum = ',sum);
end.

【練習問題4九九の表をつくる。

program kuku;
var
  i,j:integer;
begin
  for i := 1 to 9 do
  begin
    for j := 1 to 9 do write(i*j:3);
    writeln
  end;
end.

【練習問題5】 下のような1から始まる奇数の列のn番目までの総和をもとめる。1,3,5,... 【練習問題3】と相似の問題です。

program rensyu5_souwa;
var i,n,sum:integer;
begin
  write('n= '); readln(n);
  sum:=0;
  for i:=1 to n do
    sum := sum + (2*i-1);    {(第i項の一般式)}
  writeln('sum = ',sum);
end.

【while文とrepeat文】
【例1】 データの個数は予め分かっていないが、特別なデータ(例えば999)に出会うまで成績(百点満点)の総和と、平均値を求めて人数とともに出力する。

【while文を利用】
program rei1_while1;
var x,sum,count: integer;
begin
   sum := 0;
   write('試験点数 ? (0-100),  終了=> 999   : ');
   readln(x);
   count:=1;
   while x <> 999 do begin
     sum := sum + x;
     write('試験点数 ? (0-100),  終了=> 999   : ');
     readln(x);
     if x<> 999 then count:=count+1;
   end;
   writeln;
   writeln('人数 = ',count,'   総和 = ', sum,'   平均値 = ',sum/count:6:2);
end.

【repeat文を利用】
program rei1_repeat1;
var x,sum,count: integer;
begin
   sum := 0;
   count:=0;
   repeat
     write('試験点数 ? (0-100),  終了=> 999   : ');
     readln(x);
     if x <> 999 then begin sum := sum + x;count:=count+1 end;
   until x=999;
   writeln;
   writeln('人数 = ',count,'   総和 = ', sum,'   平均値 = ',sum/count:6:2);
end.
======1学年の復習=======
【練習 二次方程式2jihouteisiki_2 の根(解)を求める。
二次方程式(2次方程式 ax2+bx+c=0 ( a0 ))の解の公式は、

 2jihouteisiki1_1  である。3x2 の根を求めるプログラムをつくる。
Nijihouteisiki

考え方:変数a,b,cに値をキーボードから入力する。2つの根は変数x1,x2として結果を表示する。書式付出力文を利用するようにしてください。

program houteisiki;                               
var                                                            
  a,b,c:integer;
     x1,x2:real;
begin
  write('2次方程式 a*X*X+b*X+cのa,b,c を入力する');
  readln(a,b,c);
  x1:=(-b+sqrt(b*b-4*a*c))/(2*a);
  x2:=(-b-sqrt(b*b-4*a*c))/(2*a);
  writeln('x1= ',x1);
  writeln('x2= ',x2);
end.

プログラムの説明
sqrtは平方根を求める算術関数

この例にような( )を多く含む複雑な式の表現に慣れよう。

練習】入力した内容を表示するプログラム
program konnichiha;
var
name:string;

begin
  writeln('あなたのお名前は?');
  readln(name);
  writeln('こんにちは',name,'さん');
end.

練習】 Hello Worldと画面にメッセージを表示する。
program Hello;
begin
  writeln(' Hello World');
end.

練習】 2数の和を計算し、結果を表示するプログラム

program sum;
var
  a, b, c:integer;  //整数型変数
begin
  write('Enter two integers:');
  readln(a,b);
  c := a + b;
  writeln('sum = ', c);
end.

プログラムの説明
var  a, b, c:integer    変数宣言 変数の型は整数型とする
    a、b、cと名前が付いた3つの箱、メモ用紙を準備する。
    -2,147,483,648 ~ 2,147,483,647 の整数が入る箱

write('Enter two integers:');
    メッセージ(Enter two integers)を画面に書け。

readln(a, b)    入力文
    キーボードからデータを読み込んで a、bの箱へ保存する。

c := a + b    代入文
    変数a、bの中身を調べ、和を求めてcの箱に入れる。

writeln('sum = ', c)    出力文
    メッセージ(sum=)と変数cの中身を画面に書け。

練習】 例2で和のところを差、積、商などに変えて、算術演算子の機能を学ぶ。

program warizan_div_mod;
var
  a, b, c1,c2:integer;  //整数型変数
begin
  write('Enter two integers:');
  readln(a,b);
  c1 := a div b;    // 商を求める
  c2 := a mod b;  // 余り求める
  writeln('a div b =  ', c1);
  writeln('a mod b =  ', c2);
end.

プログラムの説明
c1 := a  div  b;  // aをbで割った商をc1に代入する。 例 5 div 3
c2 := a  mod  b;  //  aをbで割った余りをc2に代入する。 例 5 mod 3

program warizan_real;
var
  a, b, c:real;  //実数型変数
begin
  write('Enter two integers:');
  readln(a,b);
  c := a / b; 
  writeln('a / b =  ', c);
end.

プログラムの説明
c := a / b;     // aをbで割った値をcに代入する。答えは実数 。例 5 / 3
実数の表示は小数点以下の表示桁数指定することができます。書式付出力文を利用します。
writeln('a  /  b =  ', c:8:3);  ではcの値を、全体の幅8桁:小数部3桁小数点のドットも1桁と数えます)で表示します。次の図は全体の幅8桁を示している。右づめで表示される。
7.5/3.5とした場合の表示結果を記入してください。
Keta1_2

練習】 身長(m)を入力して、標準体重(kg)を求める。標準体重(kg)=身長(m)×身長(m)×22を利用します。プログラム例を実行した後、標準体重を小数点以下2桁で表示するようにしてください。

program taijyu;
var
  height,weight:real;
begin
  write('身長を入力(m)= ');
  readln(height);
  weight:=height*height*22;
  writeln('標準体重(kg)= ',weight);
end.

練習】長方形の周囲の長さと面積をもとめる。単位も考慮する。縦(cm)、横(cm)の長さはキーボードから入力します。プログラム例を完成しよう。表示は書式付出力文を利用します。

program cyouhoukei;
var
  tate,yoko:real;
  syuui_nagasa,menseki:real;
begin
  write('長方形の縦を入力(cm)= ');readln(tate);
  write('長方形の横を入力(cm)= ');readln(yoko);
  syuui_nagasa:=                 ;
  menseki:=                      ;
  writeln('周囲の長さ(cm)= ',syuui_nagasa);
  writeln('面積(cm^2)= ',menseki);
end.

算術演算子( + - * / div mod)の使い方に慣れよう

算術演算子 + - */ div mod と使い方と書式付出力文の利用法

program example1;
begin
  writeln(5+7);
  writeln(7-3);
  writeln(5*2);
  writeln(10/2);
  writeln(10/2:0:2);
  writeln(10/2:5:2);
  writeln(100/3:0:2);
  writeln(10/3);
  writeln;
end.
-----------------
program example1_1;
begin
  writeln('5+7 =',5+7);//5+7 =12
  writeln('7-3 =',7-3);//7-3 =4
  writeln('5*2 =',5*2);//5*2 =10
  writeln('10/2 =',10/2);//        10/2 = 5.0000000000000000E+0000
  writeln('10/2 =',10/2:0:2);//    10/2 =5.00
  writeln('10/2 =',10/2:5:2);//    10/2 = 5.00
  writeln('100/3 =',100/3:0:2);// 100/3 =33.33
  writeln('5-2+3 =',5-2+3);//       5-2+3 =6
  writeln('(5-2)+3 =',(5-2)+3);// (5-2)+3 =6
  writeln('5-(2+3) =',5-(2+3));// 5-(2+3) =0
  writeln;
end.
----------------
program example2;
begin
  writeln('10 div 2= ',10 div 2);
  writeln('10 mod 2= ',10 mod 2);
  writeln('10 div 3 =',10 div 3);
  writeln('10 mod 3 =',10 mod 3);
  writeln;
end.

2010年10月27日 (水)

datetimer1;//日付と時間を表示するプログラム

program datetimer1;//日付と時間を表示するプログラム

Uses SysUtils,DateUtils,crt;

Var
  StarTime: TDateTime;
begin
  clrscr;         //スクリーンを消す
  cursoroff;      //カーソルを消す CursorOn カーソルを表示する
  StarTime:=Time; //Time:時間取得関数
  textcolor(yellow); // textの色指定
  Write(' Date_Time: ',DateTimeToStr(Now)); //Now 現時の日付と時間を取得する関数
  repeat
    if SecondsBetween(StarTime,Time)>=1 then begin  //経過時間を取得する関数SecondSpan端を含む
       StarTime:=time;
       clrscr;
       Writeln(' Date_Time: ',DateTimeToStr(Now)); //DateTimeToStr 時間を文字列する関数
    end;
  until keypressed  //キーが押されるまではrepeat until間をくりかえす。
end. //keypressedはキーが押されるとTRUEを、押されなければFALSEを返す関数

#######################

program example8;//誕生日の曜日を知る
{ This program demonstrates the DayOfWeek function }

uses sysutils;

begin
  writeln ('Today''s day is ', LongDayNames[DayOfWeek(Date)]);      //今日の曜日を表示
  writeln ('Birthday''s day is ', LongDayNames[DayOfWeek(StrToDateTime('1980/10/16'))]);
end.

★実行結果の例を以下に示します。
C:\100909pascal>DayOfWeek_test
Today's day is 月曜日
Birthday's day is 木曜日
-- Press any key to exit (Input "c" to continue) -


#######################

【練習問題】現在の時間が午後であったら、PM、そうでなかったらAMと表示する。
日にちと時間の関数の利用  (uses  sysutils,dateutils;)

DateTimeToStr(Now);//現在の日付と時間
TimeToStr(Time);//現在の時間
isPM(Time));//現在の時間が午後の時にTRUEをそうでないときにはFALSEを返す関数

ソースコード例
program example8;

uses  sysutils,dateutils;

begin
  writeln('Today is : ',DateTimeToStr(Now));  //現在の日付と時間
  writeln(TimeToStr(Time));  //現在の時間を表示
  writeln(isPM(time));//現在の時間が午後の時:TRUEをそうでないときにはFALSEを返す関数
end.

timer5min.pp //5分間タイマー

■コード例1(参考)
program datetimer5min;

Uses SysUtils,DateUtils,crt;

Var
  StarTime,StarTime0: TDateTime;
begin
  cursoroff;
  clrscr;
  StarTime0:=Time;
  StarTime:=Time;
  textcolor(yellow);
  Write(' Date_Time: ',DateTimeToStr(Now));
  repeat
    if SecondsBetween(StarTime,Time)>=1 then begin
      StarTime:=time ;
      clrscr;
      Writeln(' Date_Time: ',DateTimeToStr(Now));
    end;
    if (SecondsBetween(StarTime0,Time)>=60*5) then begin //5分間隔で音がなる
      StarTime0:=Time;
      beep;
    end;
  until keypressed ;
end.

■コード例2(参考)111014作成
program datetimer5min;

Uses SysUtils,DateUtils,crt;

Var
  StarTime,StarTime0: TDateTime;
begin
  cursoroff;
  clrscr;
  StarTime0:=Time;
  StarTime:=Time;
  textcolor(yellow);
  Writeln('Start_Time: ',DateTimeToStr(Now));
  repeat
    if SecondsBetween(StarTime,Time)>=1 then begin
       gotoxy(1,2);
       Write('Now_Time  : ',DateTimeToStr(Now));//1秒間隔で時間を表示する
       Write('  Elapsed Time : ',SecondsBetween(StarTime,Time),' sec');//経過時間(sec)を表示する
       Writeln( '   ',MinutesBetween(StarTime,Time),' min');//経過時間(min)を表示する
       if SecondsBetween(StarTime0,Time)>=60*5 then begin //5分間隔で音がなる
          StarTime0:=Time;beep;
       end;
    end;
  until keypressed ;//キー入力で終了
end.

■Free Pascalの時間関数などに関するサイト
http://www.freepascal.org/docs-html/rtl/dateutils/secondsbetween.html
http://www.freepascal.org/docs-html/rtl/dateutils/index-8.html
http://www.freepascal.org/docs-html/rtl/dateutils/index-5.html

無料ブログはココログ
2018年10月
  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