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

2010年10月 3日 (日)

タイピングの練習ソフト 2種類あります

タイピングの練習ソフト 2種類あります

1  タイピング練習の文章をユーザで用意します.
エディタで作成.練習用文章のサンプルを以下に示す.
一行目はコメントです.(1234567890123456789012345678901234567890//1行に40行文字,改行マークは41桁目)

二行目はタイトルを#をつけて書きます.(#This little piggy went to market)

三行目から練習の文章を書く.
この順で文章を書いて保存します.(サンプルではmothergoose.txt)
ファイル名は英数字とし,拡張子はtxtとします.スペース,記号は使えません.

二行目以降は,1行に半角で,40文字以内とする.(日本語は使えません)
サンプルを参考に作成してください.

1234567890123456789012345678901234567890//1行に40行文字,改行マークは41桁目
#This little piggy went to market
This little piggy went to market,
This little piggy stayed home,
This little piggy had roast beef,
This little piggy had none,
And this little piggy cried,
Wee, wee, wee, all the way home.
#Where is thumbkin?
Where is thumbkin?;
Where is thumbkin?.
Here I am!
Here I am!
How are you this morning?
How are you this morning?
Very well, thank you!
Very well, thank you!
Runaway,Run away

2 他に用意するテキストファイル(テキストファイル2個)
●myid.txt
以下の二行を書かれたテキストファイルをファイル名myid.txt で作成保存する.
c1-10-501
Tkc1-10-501.txt

このファイルはユーザの識別ファイルで,
一行目は,たとえば,学籍番号などを書いてください.
二行目は,学習履歴を保存するファイル名を記入しておきます.このファイル名で予め,空のテキストファイルを作成保存しておく(ファイルは何も書かないで保存します).

●Tkc1-10-501.txt
上記に従ってテキストファイ名を作成保存.空のテキストファイル.

3 実行ファイル
typekun2_2_1.exe

4 使い方
●1~3ファイルを同じフォルダにおく.
●typekun2_2_1.exeをダブルクリック
●練習用にテキストファイル名を入力する.
●タイトルメニュー番号を入力する.
●typingの途中で終了する場合は,ESCキーを押し,メニューで0を選択する.

Ref0_2

Ref1

Ref2

Ref3
レッスンメニューは32個まで 8行4列で表示のため
レッスンメニューは11文字で表示.
練習用テキストファイルは500行まで対応していますが,
ここまで利用しないでください.

5 ファイルのDL 下記の4つのファイルを同じフォルダにおく
「Typekun2_2_1.exe」をダウンロード
「myid.txt」をダウンロード

「Tkc1-10-501.txt」をダウンロード
「mothergoose.txt」をダウンロード

「Tkc1-10-501.txt」には1行メモが書かれていますが
このままでも利用できます.

6 自作文章ファイルを使用しないもの
使い方はほぼ同じです.以下の3個のファイルを同じフォルダにおく.
1) 「Typekun.exe」をダウンロード
2) 「myid.txt」をダウンロード
3) 「Tkc1-10-501.txt」をダウンロード

2,3は上記5のファイルと同じ内容です.
Typekun.exeをダブルクリックして実行.

■テキストファイルはTeraPadなどで作成

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