Pascal プログラミング入門(授業資料)
コース構成
| 回 | テーマ | 主要な学習内容 |
|---|---|---|
| 第1回 | プログラミング入門 | プログラム実行の基本体験 |
| 第2回 | 計算 | 数値計算、数学関数、ライブラリの活用 |
| 第3回 | 条件分岐と場合分け | if文による条件判定、場合分け処理 |
| 第4回 | 整数データと浮動小数データ | データ型の理解、型に応じた計算処理 |
| 第5回 | 繰り返し計算 | while文、for文によるループ処理 |
| 第6回 | 配列 | 配列によるデータ管理、応用アルゴリズム |
到達目標
本コースを修了することで、Pascal言語の基本文法を理解し、条件分岐・繰り返し処理・配列を組み合わせた実用的なプログラムを作成できるようになることを目標とする。
pe-1. Pascal プログラミング入門
資料(スライド): [PDF], [パワーポイント], [HTML]
[例題1]プログラム実行の体験
練習問題: [課題のファイル]をダウンロード [ワード] [PDF]
演習パート(クリックして展開)
補足資料:三角関数とラジアン
ラジアン(弧度法)について
本教材で扱う sin 関数および cos 関数は、引数としてラジアン(弧度法)を使用する。ラジアンとは、角度を表す単位の一つであり、円の半径と弧の長さの比によって定義される。
度数法とラジアンの関係は以下のとおりである。
| 度数法 | ラジアン |
|---|---|
| 0° | 0 |
| 90° | π/2 ≈ 1.571 |
| 180° | π ≈ 3.142 |
| 360° | 2π ≈ 6.283 |
変換式は次のとおりである。ラジアン = 度数 × π / 180
例題で使用する 0.4 ラジアンは、度数法では約 22.9° に相当する。
sin関数とcos関数
sin(正弦関数)は、直角三角形において「対辺 / 斜辺」の比を表す。cos(余弦関数)は、「隣辺 / 斜辺」の比を表す。これらの関数は周期関数であり、波形の表現や物理シミュレーションなど多くの分野で使用される。
演習1:sin(0.4)の値の確認
| 項目 | 内容 |
|---|---|
| 目的 | 例題1のプログラムを実行し、キーボードからの入力値を適切に設定することで、意図した計算結果を得る方法を学ぶ。 |
手順
- ウェブブラウザを起動し、Online GDB(https://www.onlinegdb.com)を開く。
- 画面上部の「Language」で「Pascal」を選択する。
- エディタ画面にプログラムコードを入力する(既にサンプルコードがある場合は置き換える)。
- 「Run」ボタンをクリックしてプログラムを実行する。
- 実行画面に「Please Enter start_x:」と表示されたら、sin(0.4)を計算するための適切な値を入力する。
- 「Please Enter step_x:」と表示されたら、適切な値を入力する。
- 計算結果が表示されたら、sin(0.4)の値を確認する。
- 「Stop」ボタンをクリックして実行を終了する。
ヒント
プログラムの計算式は x := start_x + ( i * step_x ); である。ループ変数 i は1から20まで変化する。
sin(0.4)の値を直接得るには、start_x と step_x をどのように設定すればよいか考える。例えば、i=1 のときに x=0.4 となる組み合わせを検討する。
関数電卓やオンライン計算ツールで sin(0.4) の近似値を事前に調べておくと、結果の確認に役立つ。
補足:start_x と step_x の設定方法
プログラムの計算式 x := start_x + ( i * step_x ); において、i=1 のときに x=0.4 を得るための条件を数式で表すと以下のようになる。
0.4 = start_x + (1 × step_x)
すなわち、start_x + step_x = 0.4 を満たす任意の組み合わせで sin(0.4) を計算できる。
考え方の例として、以下のような方針がある。
- start_x を 0 に設定した場合、step_x は何になるか
- step_x を 0.1 に設定した場合、start_x は何になるか
自分で数値を決定し、計算結果を確認することで理解を深めてほしい。
演習2:構文チェック機能の確認
| 項目 | 内容 |
|---|---|
| 目的 | プログラム中の関数名を意図的に誤記し、コンパイラ(ソースコードを機械語に変換するプログラム)による構文チェック機能がエラーを検出することを確認する。 |
手順
- 演習1と同様にOnline GDBを開き、Pascalを選択する。
- エディタ画面にプログラムコードを入力する。
- プログラム中の
sin(x)の部分をson(x)に書き換える。 - 「Run」ボタンをクリックする。
- 表示されるエラーメッセージを確認する。
- エラーメッセージの内容から、コンパイラが何を検出したか考察する。
- 確認後、「Stop」をクリックして終了する。
ヒント
エラーメッセージには、エラーの種類や発生箇所(行番号)が含まれることが多い。メッセージを読み解く練習をする。
「son」という関数は Pascal の標準関数として存在しないため、「未定義の識別子」に関するエラーが表示されると予想される。
構文チェック機能は、プログラムの誤りを実行前に発見するための重要な仕組みである。
補足:エラーメッセージの読み方
コンパイラが出力するエラーメッセージは、一般的に以下の情報を含む。
| 情報 | 説明 | 例 |
|---|---|---|
| ファイル名 | エラーが発生したファイル | main.pas |
| 行番号 | エラーが検出された行 | line 10 |
| エラーの種類 | エラーの分類 | Error, Warning |
| エラーの内容 | 何が問題かの説明 | Identifier not found "son" |
エラー対処の基本手順
- エラーメッセージを最初から順に読む(複数のエラーがある場合、最初のエラーが原因で後続のエラーが発生することがある)。
- 行番号を確認し、該当箇所のコードを確認する。
- エラーの内容を理解する(英語の場合は翻訳ツールを活用する)。
- コードを修正し、再度実行する。
よくあるエラーの種類
| エラーの種類 | 原因の例 |
|---|---|
| Identifier not found | 変数名や関数名の誤記、未宣言の変数の使用 |
| Syntax error | セミコロンの欠落、括弧の対応不備 |
| Type mismatch | データ型の不一致(整数と実数の混同など) |
演習3:cos関数への書き換え
| 項目 | 内容 |
|---|---|
| 目的 | 例題1のプログラムを修正し、sin関数をcos関数(余弦関数)に変更することで、プログラムの一部を変更して異なる計算を行う方法を学ぶ。 |
手順
- 演習1と同様にOnline GDBを開き、Pascalを選択する。
- エディタ画面にプログラムコードを入力する。
- プログラム中の
y := sin(x);をy := cos(x);に書き換える。 - 画面表示の整合性を保つため、
writeln文の'sin('の部分も'cos('に変更する。 - 「Run」ボタンをクリックしてプログラムを実行する。
- 演習1と同様の考え方で、cos(0.4)の値が得られるように start_x と step_x を入力する。
- 計算結果から cos(0.4) の値を確認する。
- 「Stop」をクリックして終了する。
ヒント
y := cos(x); という修正を行う。
writeln文の表示部分を変更しなくてもプログラムは動作するが、出力結果の意味が不明確になる。コードの可読性(読みやすさ)を意識した修正を心がける。
演習1で用いた start_x と step_x の値は、cos(0.4) の計算にもそのまま適用できる。
pe-2. 計算
資料(スライド): [PDF], [パワーポイント], [HTML]
[例題1]自由落下距離, [例題2]三角形の面積, [例題3]sin 関数による三角形の面積, [例題4]ライブラリ関数
練習問題: [課題のファイル]をダウンロード [ワード] [PDF]
演習パート(クリックして展開)
例題1:自由落下距離
目的
四則演算の使い方を学び、物理の公式をプログラムとして実装する方法を習得する。
背景知識
自由落下運動において、物体を落とし始めてから時間 x 秒後の落下距離 y は、重力加速度を g とすると次の式で求められる。
y = (g / 2) × x²
本例題では g = 9.8 とする。
手順
- ウェブブラウザで Online GDB(https://www.onlinegdb.com)を開く。
- 「Language」で「Pascal」を選択する。
- プログラムをエディタ画面に入力する。
- プログラムの構造を確認する。
- キーボードからのデータ読み込み部分(start_x, step_x の入力)
- 計算の繰り返し部分(for文による20回の繰り返し)
- 画面へのデータ書き出し部分(writeln文による結果表示)
- 自由落下運動の式「y := ( 9.8 / 2.0 ) * x * x;」の意味を確認する。
- 「/」は除算(割り算)を表す
- 「*」は乗算(掛け算)を表す
- 「x * x」は x の2乗を意味する
- 「Run」ボタンをクリックしてプログラムを実行する。
- start_x に「0」、step_x に「0.5」を入力し、0.5秒刻みで落下距離がどのように変化するか確認する。
- 異なる値(例:start_x=1, step_x=0.2)を入力して、結果の変化を観察する。
ヒント
- 四則演算の演算子は、加算「+」、減算「-」、乗算「*」、除算「/」である。
- Pascalでは累乗演算子がないため、x² は「x * x」と記述する。
- 計算式の中で括弧を使うと、計算の優先順位を明示できる。
例題2:三角形の面積
目的
浮動小数点数の変数宣言、入力文(readln)、出力文(writeln)、代入文(:=)の使い方を習得する。
背景知識
三角形の面積は「底辺 × 高さ × 0.5」で求められる。本例題では、底辺(teihen)と高さ(takasa)をキーボードから読み込み、面積(menseki)を計算して表示する。
手順
- Online GDB を開き、「Pascal」を選択する。
- プログラムをエディタ画面に入力する。
- 変数宣言部分を確認する。
- 「var teihen: real;」は、浮動小数点数型(real型)の変数 teihen を宣言している
- 同様に takasa, menseki も real 型で宣言されている
- 入力文の動作を確認する。
- 「readln(teihen);」は、キーボードから入力された値を変数 teihen に格納する
- 代入文の動作を確認する。
- 「menseki := teihen * takasa * 0.5;」は、計算結果を変数 menseki に代入する
- 「:=」は代入演算子であり、「=」ではないことに注意
- 出力文の書式を確認する。
- 「menseki:8:3」は、8桁で小数点以下3桁表示という意味
- 「Run」ボタンをクリックしてプログラムを実行する。
- teihen に「2.5」、takasa に「5」を入力し、面積が「6.250」と表示されることを確認する。
- 異なる値を入力して、計算結果が正しいか検算する。
ヒント
- 変数名は自由に決められるが、意味のわかる名前を付けるとプログラムが読みやすくなる。
- write文は改行なし、writeln文は改行ありで表示する。入力プロンプトには write文を使い、結果表示には writeln文を使うのが一般的である。
- プログラム末尾の「readln」は、実行結果画面を保持するために記述する。
例題3:sin関数による三角形の面積
目的
三角関数(sin関数)をプログラムで使用する方法を習得する。また、角度の単位変換(度からラジアンへの変換)を理解する。
背景知識
三角形の2辺 a, b とその挟角 θ(theta)が与えられたとき、面積 S は次の式で求められる。
S = (1/2) × a × b × sin(θ)
Pascalの sin関数はラジアン単位で角度を受け取るため、度数法の角度をラジアンに変換する必要がある。変換式は次のとおりである。
ラジアン = 度 × π / 180
本例題では π = 3.14159 とする。
手順
- Online GDB を開き、「Pascal」を選択する。
- プログラムをエディタ画面に入力する。
- 変数宣言部分を確認する。
- a, b:三角形の2辺の長さ
- theta:2辺の挟角(度数法)
- S:面積
- 面積計算の式を確認する。
- 「S := 0.5 * a * b * sin( theta * 3.14159 / 180.0 );」
- 「theta * 3.14159 / 180.0」の部分で度からラジアンへの変換を行っている
- 「Run」ボタンをクリックしてプログラムを実行する。
- a に「10」、b に「10」、theta に「90」を入力する。
- 90度の sin は 1 であるため、面積は 0.5 × 10 × 10 × 1 = 50 となる
- 「S = 50.000」と表示されることを確認する
- theta に「30」を入力して実行する。
- 30度の sin は 0.5 であるため、面積は 0.5 × 10 × 10 × 0.5 = 25 となる
- 「S = 25.000」と表示されることを確認する
ヒント
- Pascalの三角関数はすべてラジアン単位で動作する。角度を度で入力する場合は、必ずラジアンへの変換が必要である。
- 円周率の値は、より精密な計算が必要な場合は 3.14159265358979 などの値を使用する。
- sin(90°) = 1、sin(30°) = 0.5、sin(45°) ≈ 0.707 などの値を使って、プログラムの動作を検証できる。
例題4:ライブラリ関数
目的
Pascalで使用可能な各種ライブラリ関数(指数、対数、平方根、三角関数、絶対値)の使い方を習得する。
背景知識
ライブラリ関数とは、あらかじめ用意されている数学関数である。プログラム中で「uses Math;」と記述することで、追加の数学関数を使用できるようになる。
手順
- Online GDB を開き、「Pascal」を選択する。
- プログラムをエディタ画面に入力する。
- プログラム冒頭の「uses Math;」を確認する。
- この記述により、ArcCos, ArcSin などの関数が使用可能になる
- 各ライブラリ関数の機能を確認する。
指数・対数・平方根:
- exp(x):指数関数(e の x 乗)
- Ln(x):自然対数(底を e とする対数)
- sqrt(x):平方根(√x)
- Power(x, y):べき乗(x の y 乗)
三角関数:
- sin(x), cos(x), tan(x):正弦、余弦、正接
- ArcSin(x), ArcCos(x), ArcTan(x):逆正弦、逆余弦、逆正接
その他:
- abs(x):絶対値
- 「Run」ボタンをクリックしてプログラムを実行する。
- x に「0.5」を入力し、各関数の計算結果を確認する。
- 計算結果が正しいか、電卓などを使って検算する。
- 例:sqrt(0.5) ≈ 0.707、Ln(0.5) ≈ -0.693
- 出力文で計算式を直接記述できることを確認する。
- 「writeln('sqrt(x) =', sqrt(x):8:3);」のように、計算結果を直接表示できる
ヒント
- 三角関数の引数はラジアン単位である。逆三角関数の戻り値もラジアン単位である。
- Ln関数の引数は正の数でなければならない。0以下の値を入力するとエラーになる。
- sqrt関数の引数は0以上の数でなければならない。負の数を入力するとエラーになる。
- 出力文の書式「:8:3」は、全体8桁、小数点以下3桁を意味する。
演習1:Heronの公式
目的
三角形の3辺の長さから面積を求めるHeronの公式をプログラムとして実装し、例題1〜4で学んだ変数宣言、入出力文、四則演算、およびライブラリ関数(sqrt)の使い方を総合的に活用する。
Heronの公式について
Heronの公式(ヘロンの公式)は、三角形の3辺の長さ a, b, c が与えられたとき、面積 A を次の式で求める公式である。
s = (a + b + c) / 2 (半周長)
A = √(s(s - a)(s - b)(s - c))
手順
- Online GDB を開き、「Pascal」を選択する。
- エディタ画面に新しいプログラムを記述する。以下の構成要素を順に実装する。
- プログラム名を宣言する(program文)。
- 必要な変数を宣言する。3辺の長さ a, b, c、半周長 s、面積 A の5つの浮動小数点数変数(real型)が必要である。
- begin〜end. の間にプログラム本体を記述する。
- キーボードから3辺の長さ a, b, c を読み込む処理を記述する。
- 半周長 s を計算する代入文を記述する。
- Heronの公式を用いて面積 A を計算する代入文を記述する。平方根の計算には sqrt 関数を使用する。
- 計算結果を画面に表示する出力文を記述する。書式指定(例::8:3)を用いて見やすく表示する。
- プログラム末尾に readln を記述する(実行結果画面を保持するため)。
- 「Run」ボタンをクリックしてプログラムを実行する。
- テストデータを入力して動作を確認する。
ヒント
- sqrt関数の引数には、s(s-a)(s-b)(s-c) の計算式全体を記述する。「d := sqrt( ( x * x ) + ( y * y ) );」のように、複雑な式を sqrt の引数に直接記述できる。
- 掛け算の演算子「*」を忘れないこと。数学では「s(s-a)」と書くが、Pascalでは「s * (s - a)」と記述する必要がある。
- 変数宣言で real 型を指定することを忘れないこと。小数を含む計算には浮動小数点数型が必要である。
- テストデータとして、a=3, b=4, c=5(直角三角形)を入力すると、面積は 6.000 となる。この値で動作確認ができる。
- 代入文では「=」ではなく「:=」を使用する。Pascalでは「:=」が代入演算子である。
- 正三角形(a=b=c=2)の場合、面積は √3 ≈ 1.732 となる。複数のテストケースで検証するとよい。
pe-3. 条件分岐と場合分け
資料(スライド): [PDF], [パワーポイント], [HTML]
[例題1] 平方根の計算, [例題2] 対数の計算, [例題3] 定形郵便物の計算, [例題4] 2次方程式 [例題5] 直線と原点の距離
練習問題: [課題のファイル]をダウンロード [ワード] [PDF]
演習パート(クリックして展開)
演習1(1):2次方程式の解を求めるプログラムの拡張
目的
例題4で作成した2次方程式のプログラムを改良し、係数 a が 0 の場合(1次方程式や特殊ケース)にも対応できるようにする。条件分岐の多分岐と論理演算(and, or, not)の実践的な使い方を習得する。
手順
- Online GDB(https://www.onlinegdb.com)を開き、言語として「Pascal」を選択する。
- 例題4のプログラムをエディタに入力する。
- a, b, c に様々な値を入力し、現在のプログラムの動作を確認する。特に a = 0 を入力したときの動作を観察する。
- a = 0 の場合に発生する3つのケースを整理する。
- 各ケースに対応する条件式を、論理演算(and, <>)を用いて記述する。
- if...else if...else 構文を用いて、条件分岐を追加する。
- 以下のテストケースでプログラムが正しく動作することを確認する。
- a = 1, b = -3, c = 2(通常の2次方程式)
- a = 1, b = 2, c = 1(重解)
- a = 1, b = 1, c = 1(虚数解)
- a = 0, b = 2, c = 4(1次方程式)
- a = 0, b = 0, c = 5(解なし)
- a = 0, b = 0, c = 0(すべてのxが解)
ヒント
- 条件分岐の順序に注意すること。a = 0 のケースを先に判定しないと、0による除算(ゼロ除算)が発生する可能性がある。
- 論理演算 and を使う場合、各条件を括弧で囲む必要がある。例:
( a = 0 ) and ( b = 0 ) - 「等しくない」を表す演算子は
<>である。 - よくある間違い:セミコロンの付け忘れ、begin/end の対応ミス。
演習1(2):平面と原点の距離を求めるプログラム
目的
例題5(直線と原点の距離)を3次元に拡張し、平面 ax + by + cz + d = 0 と原点の距離を求めるプログラムを作成する。数学的な公式をプログラムに変換する能力と、エラー処理のための条件分岐を実装する能力を養う。
手順
- Online GDB を開き、言語として「Pascal」を選択する。
- 例題5のプログラムを入力し、動作を確認する。
- 2次元の距離の公式を3次元に拡張した公式を導出する。平面 ax + by + cz + d = 0 と原点の距離は以下の式で求められる。
dist = |d| / √(a² + b² + c²)
- 変数宣言を修正し、c(平面の係数)と d(定数項)を追加する。距離を格納する変数名は、定数項 d と区別するため別の名前(例:dist)を使用する。
- キーボードから a, b, c, d の4つの値を読み込む処理を記述する。
- a = 0 かつ b = 0 かつ c = 0 のとき、平面が定義されないため計算を行わない。この条件分岐を論理演算 and を用いて記述する。
- 条件を満たさない場合(正常なケース)に、距離を計算して表示する処理を記述する。
- 以下のテストケースでプログラムが正しく動作することを確認する。
- a = 1, b = 0, c = 0, d = 5(YZ平面に平行、距離 = 5)
- a = 1, b = 1, c = 1, d = 3(距離 = √3 ≈ 1.732)
- a = 0, b = 0, c = 0, d = 1(エラーメッセージを表示)
ヒント
- 例題5のプログラム構造をそのまま活用できる。変数と式を3次元用に拡張するだけでよい。
- 平方根の計算には
sqrt()関数、絶対値の計算にはabs()関数を使用する。 - 変数名の衝突に注意すること。数学の公式では距離を d と書くことが多いが、定数項も d であるため、プログラム内では別の変数名を使用する。
pe-4. 整数データと浮動小数データ
資料(スライド): [PDF], [パワーポイント], [HTML]
[例題1] 単純な金種計算, [例題2] 硬貨の金種計算, [例題3] うるう年の判定, [例題4] 複利計算
練習問題: [課題のファイル]をダウンロード [ワード] [PDF]
演習パート(クリックして展開)
演習1:trunc
目的
浮動小数点数型(real)と整数型(integer)の違いを理解し、trunc関数の役割を実際のコード変更を通じて確認する。
手順
- Online GDB(https://www.onlinegdb.com)にアクセスし、言語としてPascalを選択する。
- 例題4のプログラムをエディタに入力する。
- 変更前のプログラムを実行し、元金10000円、年数10年、年利2%を入力して結果を記録する。
- 以下の3箇所を修正する。
- 変数宣言部:ganriをintegerからrealに変更
- 計算部:trunc関数を削除
- 出力部:ganriの出力書式を
:8から:8:3に変更、同様にrisokuの出力書式も変更
- 変更後のプログラムを実行し、同じ入力値で結果を記録する。
- 変更前と変更後の出力結果を比較し、小数点以下の値がどのように表示されるか確認する。
ヒント
trunc関数は浮動小数点数の小数点以下を切り捨てて整数に変換する関数である。変更前はtruncにより小数点以下が切り捨てられるが、変更後はreal型のためそのまま小数点以下が保持される。出力書式:8:3は、全体8桁、小数点以下3桁を意味する。複利計算では端数が生じるため、この違いが結果に反映される。
演習2:金種計算
目的
div演算子(割り算の商を求める演算子)とmod演算子(割り算の余りを求める演算子)を組み合わせた金種計算のアルゴリズムを、紙幣と硬貨すべてに拡張できるようになる。
手順
- Online GDBにアクセスし、言語としてPascalを選択する。
- 例題2のプログラムを入力し、動作を確認する。
- 紙幣(1万円札、5千円札、千円札)を扱うための変数を追加する。
- 例題2のアルゴリズムを参考に、高額な金種から順に枚数を計算する処理を追加する。
- 各金種の枚数を出力するwriteln文を追加する。
- テストケースとして13486円を入力し、期待される結果と一致するか確認する。
- 他の金額でも正しく動作するか確認する。
ヒント
金種計算では高額な金種から順に処理するのが基本である。例えば1万円札の枚数はkingaku div 10000で求められる。5千円札の枚数を求める際は、1万円札で処理した残額を考慮する必要がある。例題2に示されている考え方(modで余りを求めてからdivで枚数を求める)を紙幣にも適用する。変数名は金種が分かりやすいものを選ぶとよい。
演習3:時間の換算
目的
div演算子とmod演算子を使い、単位変換の計算を整数演算で実現する方法を習得する。
手順
- Online GDBにアクセスし、言語としてPascalを選択する。
- 秒数を格納する変数xと、時・分・秒を格納する変数h、m、sを整数型で宣言する。
- ユーザーから秒数xを読み込む処理を記述する。
- 時間hを計算する。1時間は3600秒である。
- 分mを計算する。時間に換算した残りの秒数から分を求める。1分は60秒である。
- 秒sを計算する。分に換算した残りの秒数がそのまま秒となる。
- 計算結果を出力する処理を記述する。
- テストケースとしてx=3723を入力し、期待される結果(1h, 2m, 3s)と一致するか確認する。
ヒント
この演習は金種計算と同じ考え方で解くことができる。金種計算では高額な金種から順に処理したように、時間の換算では大きな単位(時間)から順に計算する。3723秒の場合、3723 div 3600 で時間が求まり、3723 mod 3600 で時間に換算できなかった残りの秒数が求まる。この残りの秒数に対して同様の処理を行えば分と秒が求まる。
pe-5. 繰り返し計算
資料(スライド): [PDF], [パワーポイント], [HTML]
[例題1] 自然数の和, [例題2] 最大公約数の計算, [例題3] ベクトルの長さ, [例題4] 九九の表 [例題5] ド・モアブルの公式
練習問題: [課題のファイル]をダウンロード [ワード] [PDF]
演習パート(クリックして展開)
演習1:m から n までの和
目的
while文(特定の条件が満たされるまで処理を繰り返す制御構文)を用いて、任意の範囲の整数の総和を計算するプログラムを作成する。例題1で学んだ「1からNまでの和」を拡張し、開始値を変数で指定できるようにする。
手順
- Online GDB(https://www.onlinegdb.com)にアクセスし、言語として「Pascal」を選択する。
- 例題1のプログラムを入力し、動作を確認する。変数i、s、Nの役割を理解する。
- 例題1のプログラムを以下の観点で分析する。
- 変数iの初期値は何か
- while文の条件式は何を判定しているか
- 繰り返しのたびにiとsはどのように変化するか
- 演習1の要件を整理する。
- 入力:2つの整数M、N
- 出力:MからNまでの和
- 制約:while文を使用すること
- 例題1との違いを明確にする。
- 例題1:開始値が1(固定)
- 演習1:開始値がM(変数)
- 変更が必要な箇所を特定する。
- 変数iの初期値
- 必要に応じて条件式
- プログラムを作成し、Online GDBで実行する。
- 複数のテストケースで動作を確認する。
- M=1, N=10 の場合(例題1と同じ結果になるはず)
- M=5, N=10 の場合
- M=N の場合(Mがそのまま出力されるはず)
ヒント
考察のポイントとして、トレース表(変数の値の変化を追跡する表)を参考に、自分のプログラムでも同様の表を作成すると、ループの動作を理解しやすい。
よくある間違いとして、以下の点に注意する。まず、変数iの初期値を1のままにしてしまうケースがある。また、条件式の境界値(<=と<の違い)を誤ると、最後の値が含まれない、または余分に計算されることがある。
デバッグの方法として、writeln文を使って繰り返しの各ステップでiとsの値を表示させると、プログラムの動作を確認できる。
pe-6. 配列
資料(スライド): [PDF], [パワーポイント], [HTML]
[例題1] 月の日数, [例題2] ベクトルの内積, [例題3] 棒グラフを描く, [例題4] Horner 法による多項式の計算 [例題5] エラトステネスのふるい
練習問題: [課題のファイル]をダウンロード [ワード]
演習パート(クリックして展開)
演習1:1000までの素数
| 項目 | 内容 |
|---|---|
| 目的 | エラトステネスのふるいのアルゴリズムを理解し、配列サイズや終了条件の変更によってプログラムを拡張する方法を学ぶ。 |
| 手順 | 下記参照 |
| ヒント | 下記参照 |
手順
- 例題5プログラムを Online GDB にコピーする。
- 例題5のプログラムを実行し、100以下の素数が正しく表示されることを確認する。
- 以下の観点でプログラムを分析する。
- 配列
pの添字範囲はどこで定義されているか 100という数値がプログラム中の何箇所に現れるかsqrt(100)は何を意味しているか
- 配列
- 分析結果に基づき、1000までの素数を求めるようにプログラムを書き換える。
- 書き換えたプログラムを実行し、結果を確認する。
ヒント
考察のポイント
エラトステネスのふるいでは、n以下の素数を求める際、√n(nの平方根)までの素数の倍数を消去すれば十分である。1000の場合、√1000 ≒ 31.6 であるため、31以下の素数の倍数を消去することになる。
よくある間違いの回避
プログラム中の 100 をすべて 1000 に書き換える必要がある。書き換え漏れがあると、正しい結果が得られない。具体的には以下の箇所を確認する。
- 配列の宣言における添字範囲
- 繰り返し文の終了条件
sqrt()関数の引数