Pascal でのプログラミングの基礎。 プレゼンテーション。 コンピューター サイエンスにおける Pascal に関する Pascal の基礎プレゼンテーション

スライド 1

プログラミング言語 パスカル・ボグダノフ・ウラジミール 無料プレゼンテーション http://prezentacija.biz/

スライド 3

Pascal 言語は、ALGOL-68 言語標準の開発委員会の作業に参加した後、1968 年から 1969 年にかけて Niklaus Wirth によって作成されました。 この言語は、2 つの数字を加算する世界初の機械式機械を作成したフランスの数学者、物理学者、作家、哲学者であるブレーズ パスカルにちなんで名付けられました。 この言語に関するヴィルスの最初の出版物は 1970 年に遡り、この言語を紹介しています。著者はその作成の目標として、構造化プログラミングと構造化データを使用して優れたプログラミング スタイルを促進する、小さくて効率的な言語を構築することであると述べました。 ヴィルスのその後の研究は、Pascal に基づくシステム プログラミング言語を作成すると同時に、それに基づいて専門的なプログラミングの体系的かつ総合的なコースを実施する能力を維持することを目的としていました。 この作業の結果が Modula-2 言語です。

スライド 4

UCSD Pascal 主な記事: UCSD Pascal 1978 年、カリフォルニア大学サンディエゴ校で UCSD p-System が開発されました。これには、Pascal 言語から移植可能な p コード、ソース コード エディター、ファイル システムなどのほか、モジュール、可変長文字列、変換ディレクティブ、I/O エラー処理、名前によるファイル アクセスなど、多数の Pascal 言語拡張機能も実装されています。 その後、Pascal 言語の主な実装はこの方言に基づいていました。

スライド 5

Object Pascal] 詳細記事: Object Pascal 1986 年に、Apple は Pascal 言語のオブジェクト拡張機能を開発し、その結果、Object Pascal が誕生しました。 これは、ニクラス・ヴィルトと相談したラリー・テスラーのグループによって開発されました。

スライド 6

1983 年に、同名の Pascal 実装に基づいた、Borland の Turbo Pascal 統合開発環境の最初のバージョンが登場しました。 1989 年に、オブジェクト言語拡張機能が Turbo Pascal バージョン 5.5 に追加されました。 最新バージョン (7.0) は、Borland Pascal という名前に変更されました。 オブジェクトの機能は Apple の Object Pascal から借用されたもので、Turbo Pascal 5.5 Object と Apple の Object Pascal の言語の違いはごくわずかです。 Borland とほぼ同時に、Microsoft はオブジェクト指向言語 Pascal のバージョンをリリースしましたが、このバージョンの Pascal は広く使用されませんでした。 Borland による Pascal 実装のさらなる開発により、Borland の Object Pascal バリアントが誕生し、その後、Delphi プログラミング環境の開発中に、同じ名前が付けられました。

スライド 7

この言語の開発における重要なステップは、Pascal 言語 l および GNU Pascl の自由な実装の出現です。これらは、この言語の他の多くの方言の機能を吸収しただけでなく、その言語で書かれたプログラムの非常に幅広い移植性を確保しました (たとえば、GNU Pascal は 20 を超える異なるプラットフォームをサポートしており、10 を超える異なるオペレーティング システムで、Free Pascal はさまざまな共通言語方言 (Turbo Pascal (完全互換)、Delphi など) との特別な互換モードを提供します。 Delphi 2003 以降、この言語の実装は Net プラットフォーム用に作成されましたが、開発者は引き続き Delphi の以前のバージョンを使用しています。 Free Pascal、GNU Pascal、TMT Pascal の商用開発については、現時点ではほとんど知られていません。 さらに、南連邦大学は、Pascal プログラミング言語である PascalABC.NET を開発しました。これには、Delphi 言語のほとんどの機能と、独自の拡張機能が多数含まれています。 これは Microsoft.NT プラットフォームに基づいており、クラス、演算子のオーバーロード、インターフェイス、例外処理、ジェネリック クラスとサブルーチン、ガベージ コレクション、ラムダ式など、ほとんどすべての最新の言語ツールが含まれています。

スライド 8

この言語の特徴は、厳密な型指定と構造的 (手続き型) プログラミング ツールの存在です。 パスカルはそのような言語の最初のものの 1 つでした。 Wirth 氏によると、この言語は規律あるプログラミングを促進する必要があるため、Pascal では厳密な型指定とともに、構文上の曖昧さの可能性が最小限に抑えられ、作者はこの言語に初めて慣れたときでも構文自体を直感的に理解できるように努めました。

スライド 9

しかし、当初、この言語には多くの制限がありました。可変長の配列を関数に渡すことができないこと、動的メモリを操作する通常の手段がないこと、入出力ライブラリが制限されていること、他の言語で書かれた関数を接続するためのツールがないことなどです。当時の Pascal 言語の欠点の詳細な分析は、Brian Kernighan 氏の記事「なぜ Pascal が私のお気に入りのプログラミング言語ではないのか」で行われました (この記事は、 1980 年代初頭、Modula-2 言語がすでに存在していたとき、Modula-2 言語は Pascal の子孫であり、その悪徳のほとんどがなく、Pascal のより発展した方言でもありました。) Pascal の欠点の一部は 1982 ISO 標準で修正され、特に言語にオープン配列が登場し、同じ手順を使用してさまざまなサイズの 1 次元配列を処理できるようになりました。

スライド 10

ただし、この言語の多くの欠点は、プログラミングを学習する際には現れず、利点にさえなりません。 さらに、1970 年代の学界で主流だったプログラミング言語 (Fortran には、はるかに重大な欠点がありました) と比較して、Pascal は大きな前進を示しました。 1980 年代までに、Pascal は多くの教育プログラムの基礎となり、場合によってはそれに基づいて特殊な教育プログラミング言語が作成されました。たとえば、1980 年代初頭にはソ連で Andrei Ershov がアルゴロ Pascal に似た言語を開発しました。学童にコンピューターサイエンスとコンピューティングの基礎を教える「教育用アルゴリズム言語」。

スライド 11

Pascal 言語の広範な使用と開発を確実にした最も有名な実装は、Borland の Turbo Pascal です。これはその後、DOS (バージョン 5.5 以降) および Windows 用の object Pascal に成長し、さらに Delphi に成長しました。言語が導入されました。 DOS 用の Turbo Pascal および Windows 用の Delphi で使用されている Pascal 方言は、他に商用実装で成功したものがなかったため、普及しました。

スライド 12

Pascal の使用が 1970 年に始まり、加算だけでなく構文においても異なる実装が出現した後、言語の標準化の問題が提起されました。 この言語標準は、1974 年に Niklaus Wirth と Kathleen Jensen によって開発されました。 その後、ISO による国際規格と ANSI による米国規格が採用されました。 現時点では、根本的に異なる 3 つの標準があります。Unextended Pascal (オリジナル)、Extended Pascal (拡張)、Pascal のオブジェクト指向拡張 (Pascal のオブジェクト指向拡張) です。

スライド 13

スライド 14

構文と言語構造 Pascal は、元の形式では純粋な手続き型言語であり、多くの Algol のような構造と、if、then、else、while、for などの予約語構造が含まれています。ただし、Pascal には多数の機能も含まれています。型定義、レコード、ポインタ、列挙、セットなど、元の ALGOL-60 には欠けている情報と抽象化を構造化します。 これらの構造は、Niklaus Wirth AlgolW (英語) ロシア語によって作成された言語 Simula-67、Algol-64 から部分的に継承またはインスピレーションを受けています。 そしてホアが提案した。 最新の方言 (Free Pascal) では、演算子や関数のオーバーロードなどの操作が利用できます。

スライド 15

プログラムp; 始まり終わり。 プログラムはアクションを実行せず、空のステートメント ブロックが含まれています。 文字列「Hello, world!」を出力するプログラムの例:

スライド 16

begin writeln("Hello, World!"); (行出力演算子) 終了。

スライド 17

スライド 18

スライド 19

スライド 20

Pascal では、整数型 (byte、shortint、word、integer、longint、およびその範囲) に対してビット単位の演算が許可されます。 ビットの論理演算: 前述の論理演算は、not、and、or、xor の 2 つの整数オペランドのビットに対して実行できます。 ビット単位の演算と論理演算の違いは、ビット単位の演算は、(通常は) 10 進数値ではなく、オペランドの個々のビットに対して実行されることです。 順序データ型の概念が強調されています。これらには、整数型 (符号付きおよび符号なし)、論理型 (ブール型)、文字型 (char)、列挙型、および範囲型が含まれます。 順序型は整数 (コード) で指定され、 ord 関数を使用して取得できます。 順序型に対して実行されるすべての操作は、そのコードに対して実行されます。

スライド 21

スライド 22

順序型の場合、演算 inc、dec、succ、pred、ord、比較演算 (=>

スライド 23

スライド 24

スライド 25

Jensen と Virta の Pascal では、文字列は文字のパックされた配列として表現されました。 したがって、それらの長さは固定されており、通常はその長さまでスペースが埋め込まれていました。 最新の Pascal では、文字列を操作するために、連結 (+) と比較 (> =) の演算をサポートする組み込み型文字列が使用されます。

スライド 26

1970 ~ 1990 年代の言語の方言における string [n] 型、または単に string は、文字の配列として定義されていました (n のデフォルト値は、UCSD Pascal では 80、Turbo/Borland Pascal では 255 でした)。この表現のヌル文字は行の長さを設定する役割を果たし、行の最大サイズは 255 文字になります。 デフォルトでは、Delphi と FreePascal は AnsiString 型を String として使用し、そのメモリはコンパイラによって動的に割り当ておよび解放され、現在の実装における最大文字列サイズは 2 ギガバイトです。 さらに、Delphi と Free Pascal では、UCS-2 エンコーディングの文字の 16 ビット表現を使用する WideString 型を文字列として使用できますが、シングルバイト文字列からマルチバイト文字列に変換する手段はありません。バイト文字列を言語の標準ライブラリに戻します。

スライド 27

既存の型から新しい型を定義できます。 type (型宣言セクション) x = Integer; y = x;

スライド 28

さらに、複合型はプリミティブ型から構築できます。 type (型宣言セクション) a = 整数の配列。 (配列定義) b = レコード (レコード定義) x: 整数; y:文字; 終わり; c = a のファイル; (ファイル定義)

スライド 29

Pascal のファイル タイプは、型付きファイル、テキスト ファイル、および型なしファイルに分類されます。 上の例に示すように、Pascal の型付きファイルは、同じ型の要素のシーケンスです。 各ファイルには、f^ で示されるバッファ ポインタ変数があります。 get (読み取り用) および put (書き込み用) プロシージャは、ポインタを次の要素に移動します。 読み取りは、read(f, x) が get(f) と同じになるように実装されています。 x:=f^。 したがって、write(f, x) が f^ := x; と同じになるように書き込みが実装されます。 (f)を入れます。 テキスト ファイル text は、char 型のファイルの拡張子として定義され、型付きファイルに対する標準操作 (文字の読み取り、書き込み) に加えて、コンソール I と同様に、あらゆる種類のデータのファイルへのシンボリック I/O が可能になります。 /O.

スライド 30

型のないファイルは、file 型の変数として宣言されます。 これらを使用すると、バッファを介して、指定された長さの複数のバイト ブロックのバイト単位の型なし I/O 操作を実行できます。これには、特別なプロシージャ blockread および blockwrite (UCSD 拡張) が使用されます。

スライド 31

スライド 32

スライド 33

スライド 34

スライド 35

ポインター Pascal は、ポインター (型付き ^type および型なしポインター) の使用をサポートしています。 b = レコード x: 整数。 y:文字; z:a; 終わり; var pointer_to_b:a;

スライド 36

ここで、変数 pointer_to_b は、レコードであるデータ型 b へのポインターです。 型付きポインターの型は、それが参照する型を宣言する前に指定できます。 これは、何かを使用する前に宣言する必要があるというルールの例外です。 この例外の導入により、このエントリの説明にエントリへのポインタを含め、線形リスト、スタック、キューなどのデータ構造の反復定義を整理することが可能になりました (null ポインタ - nil も参照)。 型付きポインターの場合、逆参照操作が定義されます (構文は pointer^)。 新しいレコードを作成し、そのレコード内の x フィールドと y フィールドに値 10 と文字 A を割り当てるには、次のステートメントが必要です。

スライド 37

new(b へのポインタ); (ポインターへのメモリーの割り当て) pointer_to_b^.x:= 10; (ポインターの逆参照とレコード フィールドへのアクセス) pointer_to_b^.y:= "A"; b^.z へのポインタ:= nil; ... destroy(pointer_to_b); (ポインタからメモリを解放します)

スライド 38

レコードおよびオブジェクトのフィールドにアクセスする目的で、次の例に示すように with ステートメントを使用することもできます。 pointer_to_b^ では x:= 10 を開始します。 y:= "A"; z:= nil 終了; ... destroy(pointer_to_b);

スライド 39

手続き型 Pascal Jensen と Virta の元の言語では、手続き型は仮パラメータを記述する場合にのみ使用されていました。 TPにはすでに本格的な手続き型がありました。 型宣言には、プロシージャまたは関数ヘッダー (名前なし) が含まれており、通常はサブルーチンのインターフェイスを記述します。 この型の値には、型宣言に記述されているヘッダーに対応するヘッダーを持つサブルーチンへのポインターが含まれます。 変数識別子を使用して、対応するプロシージャまたは関数を呼び出すことができます。

スライド 40

Pascal は構造化プログラミング言語です。つまり、プログラムは、理想的には GOTO コマンドを使用せずに、順次実行される個々の標準ステートメントで構成されます。

スライド 41

while、for、if、case ステートメントでは、ブロックを実行可能ステートメントとして使用できます。 このような通常のステートメントまたはブロックの構造は、複合ステートメントと呼ばれます。 Turbo Pascal では、コンパイル プロセスを制御するために、コメント内にディレクティブが配置されており、コンパイラーの動作モードを切り替えることができます。たとえば、I/O 操作やオーバーフローのチェックを有効または無効にすることができます。

スライド 42

Pascal では、サブルーチンはプロシージャと関数に分割されます。構文的には、プロシージャと関数は、ヘッダー (プロシージャまたは関数のキーワード、名前の後に括弧内に渡されるパラメータの説明が続く場合があります)、で区切られた戻り値の型で構成されます。関数の場合はコロン、プロシージャの場合はセミコロン)、ヘッダーの後に本文が続き、その後に記号 ; が続きます。

スライド 43

プロシージャの本体には、プログラムと同様に、プロシージャと関数の記述を含めることができます。 したがって、プログラム本体をチェーンの最上位にして、プロシージャと関数を必要なだけ深く相互に入れ子にすることができます。 さらに、手続き/関数の記述の前にある、変数、型、定数、外部本体 (手続き、関数、プログラム) を説明するセクションの内容が内部で利用可能です。 また、ほとんどの方言では、プロシージャから外部プロシージャのパラメータにアクセスできます。 プロシージャ/関数のヘッダーの後に、本体の代わりに forward キーワードを配置できます。これは、プロシージャ/関数の記述がプログラム内でその呼び出し後に配置され、プログラムを 1 つにコンパイルする機能に関連付けられている場合に行われます。 pass、Pascal でサポートされています。 プロシージャは関数とは異なり、関数は値を返しますが、プロシージャは値を返しません。

スライド 44

最新の形式の凝集モジュールが登場する前は、一部の Pascal 実装では、C 言語の #include メカニズムに似た、ヘッダー ファイルをインクルードするメカニズムを通じてモジュール性をサポートしていました。たとえば、疑似コメントとしてフォーマットされた特別なディレクティブを使用していました。 ($INCLUDE "file")、指定されたファイルの内容は、元のテキスト形式でプログラム テキストに直接組み込まれます。 このようにして、編集を容易にするためにプログラム コードを多くの断片に分割することができましたが、コンパイル前にそれらは自動的に 1 つのプログラム ファイルに結合され、最終的にはコンパイラによって処理されました。 このモジュール方式の実装は原始的であり、多くの明らかな欠点があるため、すぐに置き換えられました。 Pascal 言語の最新の実装 (UCSD Pascal 以降) はモジュールをサポートしています。 プログラム モジュールには 2 つのタイプがあります。1 つはメイン プログラム モジュールで、通常どおりキーワード プログラムで始まり、その本体にはプログラムがメモリにロードされた後に実行されるコードが含まれます。もう 1 つは補助モジュールで、型、定数、変数が含まれます。 、メインモジュールを含む他のモジュールで使用するために設計されたプロシージャと関数。

スライド 45

Pascal プラグインの一般的な構造は次のとおりです。 インターフェース ... 実装 ... begin (存在しない場合があります - 初期化ステートメントを配置する必要がある場合に使用されます) ... end。

スライド 46

別のオプションも可能です:unit UnitName2; インターフェイス ... 実装 ... 初期化 ... ファイナライズ .... 終了。

スライド 47

メイン プログラムとは異なり、モジュール ファイルはキーワード UNIT で始まり、その後にモジュール名とセミコロンが続きます。 最近の実装では、通常、モジュール名がそのモジュールを含むソース コード ファイルの名前と同じであることが必要です。 モジュールには、インターフェイス セクション、実装セクション、モジュール本体の 3 つのセクションが含まれています。

スライド 48

インターフェイス セクションが最初にあり、INTERFACE キーワードで始まり、実装セクションまたは本体が始まるモジュール内のポイントで終わります。 インターフェイス セクションでは、モジュールの外部からアクセスできる必要があるオブジェクト (型、定数、変数、プロシージャ、関数 - ヘッダーが配置されます) を宣言します。 この場合、型の部分宣言が許可されます。構造を指定せずに、名前のみを使用して型を宣言できます。 外部プログラムでこの型を使用する場合、この型の変数とパラメーターを宣言して値を割り当てることは可能ですが、その実装の詳細にアクセスすることは不可能です。 インターフェイス セクションのプロシージャと関数は、フォワードの形式で宣言されます。ヘッダーにはパラメーターが含まれますが、本体は含まれません。 モジュールのインターフェイス セクションの構成は、このモジュールを使用するコードを生成するだけで十分です。 インターフェイス セクションで宣言された変数はグローバルです。つまり、単一のコピーに存在し、このモジュールを使用するプログラムのすべての部分で使用できます。

スライド 49

実装セクションはインターフェイス セクションに続き、IMPLEMENTATION キーワードで始まります。 これには、インターフェイス セクションで宣言されるプロシージャと関数の説明、およびインターフェイス プロシージャと関数の実装に必要な型、定数、変数、プロシージャ、関数の説明が含まれます。 インターフェイスセクションで宣言されたプロシージャまたは関数の説明には、宣言内とまったく同じタイトルが必要です。 本体では、インターフェイス部分と実装セクションの両方で宣言された、このモジュールの他のプロシージャと関数を使用できます。 実装セクションで宣言された変数は実際にはグローバルです (つまり、プログラム全体でそのような各変数のインスタンスは 1 つだけです) が、特定のモジュールの実装セクションに記述されているプロシージャと関数からのみアクセスできます。 、そしてその体からも。 インターフェイス セクションで省略された型宣言がある場合は、これらの型を実装セクションで完全に説明する必要があります。

スライド 50

モジュールの本体は、ネストの最上位にある BEGIN キーワードで始まります。 本体には、モジュールのロード時に 1 回実行されるプログラム コードが含まれています。 本体は、初期化、モジュール変数への初期値の割り当て、その操作のためのリソースの割り当てなどに使用できます。 モジュール本体が欠品している可能性があります。 Delphi などの多くの Pascal 実装では、モジュール本体の代わりに、INITIALIZATION と FINALIZATION という 2 つのセクション (これもオプション) を使用できます。 これらはモジュールの最後、対応するキーワードの後に​​あります。 最初の初期化セクションにはモジュールのロード時に実行する必要があるコードが含まれ、2 番目の終了セクションにはモジュールのアンロード時に実行されるコードが含まれます。 終了セクションでは、初期化とは逆のアクション (メモリからのオブジェクトの削除、ファイルのクローズ、割り当てられたリソースの解放) を実行できます。 モジュールは、ピリオドが続く END キーワードで終了します。

スライド 51

モジュールを使用するには、メイン プログラムまたは別のモジュールでモジュールをインポートする必要があります。つまり、モジュールの使用に関する宣言が含まれている必要があります。 この宣言は、モジュール接続ステートメントを使用して行われます。このステートメントは、USES キーワードの後に​​、接続するモジュールの名前をカンマで区切って続けたものです。 接続命令は、プログラム ヘッダーの直後、または接続がモジュール内で行われる場合は INTERFACE キーワードの後に​​置く必要があります。

スライド 52

インターフェイス セクションで接続されたモジュールは、モジュール全体 (実装セクションと本体の両方) で使用できます。 ただし、実装セクションには、インターフェイス セクションにはなく実装セクションで必要なプラグインの名前を含む独自の connect ステートメント (IMPLEMENTATION キーワードの後に​​続きます) を含めることができます。 実装セクションに別の接続リストを使用する理由の 1 つは、2 つ以上のモジュールが相互に使用する場合です。 このようなモジュールを使用するための宣言での循環参照を回避するには、少なくとも 1 つのモジュールの実装セクションにもう 1 つを含める必要があります。

スライド 53

モジュールのインターフェースセクションで宣言されたオブジェクトは、これらのモジュールが接続されているプログラムで使用できます。 接続されたモジュールからインポートされたオブジェクトの名前は同じままで、直接使用できます。 接続された 2 つ以上のモジュールに同じ名前のオブジェクトがあり、コンパイラがそれらを区別できない場合、そのようなオブジェクトを使用しようとすると、コンパイル エラー (名前の割り当てがあいまいです) がスローされます。 この場合、プログラマは名前修飾を適用する必要があります。つまり、名前を「.」形式で指定します。

スライド 54

プログラム内で同じ名前の 2 つの異なるモジュールを使用する必要がある場合、問題が発生する可能性があります。 モジュールがコンパイルされた形式でのみ利用可能な場合 (つまり、名前を変更できない場合)、モジュールを同時にインポートすることはできません。 言語レベルでのこのような衝突に対する標準的な解決策はありませんが、特定のコンパイラはそれを回避する特定の方法、特にインポートされたモジュールにエイリアスを割り当て、どのファイルからどのモジュールを取得するかを直接示す手段を提供する場合があります。

スライド 55

モジュールは個別にコンパイルできるように設計されています。コンパイラーは、インポートされたモジュールを使用するモジュールをコンパイルするために、インポートされたモジュールをコンパイルする必要はありません。 ただし、モジュールを正しくコンパイルするには、コンパイラが使用するすべてのモジュールのインターフェイス セクションにアクセスできる必要があります。 このようなアクセスを組織するには 2 つの異なるアプローチがあり、場合によってはそれらが組み合わされます。 モジュールは特別な形式のバイナリ ファイルにコンパイルされます (各コンパイラには独自の形式があります)。このファイルには、インターフェイス セクションで宣言されたオブジェクトに関する詳細情報が格納されます。モジュールのコンパイル時に作成された言語オブジェクトも含めることができますが、使用されるのはインターフェイス セクションのみです。モジュールの。 ライブラリ モジュールがコンパイルされた形式 (完全なソース コードなし) で提供される場合、バイナリ ファイルとともに、インターフェイス セクションのみを含む必要最低限​​のモジュール ソース コード ファイルが存在します。 コンパイラがモジュールを使用した呼び出しを正しく処理するには、これで十分です。プログラムをアセンブルする段階では、リンカはバイナリ ファイルをプログラムに組み込むだけです。

スライド 56

モジュールのロードとアンロード モジュールを通常に操作するには、変数の初期化、必要なファイルのオープン、メモリまたはその他のリソースの割り当てなど、モジュールを使用する前にいくつかのアクションを実行する必要がある場合があります。 これはすべて、モジュールの本体または初期化セクションで行うことができます。 初期化の逆が終了セクションで行われます。

スライド 57

モジュールの初期化と終了の順序は、uses セクションの宣言の順序によって間接的に決定されますが、静的にコンパイルされたプログラムの場合 (モジュールはメイン プログラムとともに 1 つの実行可能ファイルにコンパイルされるか、別の動的ライブラリに配置されます) 、ただし初期ロード段階でロードされる)、コンパイラは、モジュールを最初に使用する前にその初期化が完了することを常に保証します。 ファイナライズは、メイン モジュールが完了した後、プログラムが終了するときに実行されるため、使用中のモジュールは、使用中のモジュールよりも遅くファイナライズされます。

スライド 58

プログラマ自身によって制御されるモジュールの動的ロードの場合、イニシャライザはロード中に実行されます。つまり、モジュール ロード コマンドが制御を返した時点で、そのイニシャライザはすでに実行されています。 ファイナライザーはアンロード後、通常は module unload コマンドが実行されるときに実行されます。 このコマンドが呼び出されない場合、動的にロードされたモジュールは、プログラムの終了時に他のすべてのモジュールと同じ方法で終了されます。

スライド 59

オブジェクト指向プログラミング (OOP) は、プログラムをオブジェクトのコレクションとして表現することに基づいた複雑なソフトウェアを作成するためのテクノロジです。各オブジェクトは特定のクラスのインスタンスであり、クラスはプロパティの継承による階層を形成します。

スライド 60

OOP の主な利点は、モジュール間呼び出しの数が減少し、モジュール間で転送される情報量が減少することです。 これは、より完全なデータのローカリゼーションと処理ルーチンとの統合によって実現されます。

スライド 61

OOP の主な欠点は、ソフトウェア システムの構成がより複雑になるため、パフォーマンスがわずかに低下することと、一般にバイナリ コードの量が顕著に増加することです (特に小さなプログラムで標準クラス ライブラリを使用する場合)。これは、ほとんどの最新のコンパイラーとリンカーが、未使用のクラス、仮想メソッド、およびその他の OOP 要素に関連付けられたすべてのコードを識別して削除できないという事実によるものです。

スライド 62

Object Pascal では、クラスはレコードと同様のオブジェクト タイプを使用して定義され、データ フィールドに加えて、プロシージャと関数のヘッダー (これらはメソッドと呼ばれます) を含めることができます。 説明されているメソッドの名前は、ドットで区切られたクラス名の後に続きます。

スライド 63

コンストラクタとデストラクタは通常のプロシージャとして指定されますが、プロシージャ識別子の代わりにコンストラクタとデストラクタのキーワードが指定されます。 したがって、C++ のような言語とは異なり、クラス名とは異なる名前があり、複数のデストラクターが存在し、パラメーターを持つことができます (実際には、この機能はほとんど使用されません。通常、クラスには 1 つのデストラクター Destroy があり、これは親クラスの仮想デストラクターをオーバーライドします)。

スライド 64

単一継承、クラスポリモーフィズム、および仮想メソッドのメカニズムがサポートされています (クラスメソッドヘッダーの後の仮想という単語)。 動的メソッドもあります (TP では、これらは virtual という単語の後に整数を追加することで記述され、主にメッセージの処理に使用されます。Delphi と FreePascal では、message という単語がこの目的に使用され、dynamic という単語は作成に使用されます)通常の動的メソッド)、子孫の VMT に祖先の動的メソッドの重複がないため、メモリ使用量が少なく、呼び出し速度が遅いという特徴があります(ただし、FreePascal は仮想メソッドと動的メソッドを区別しません)。 Delphi では、FPC、演算子のオーバーロード、抽象メソッド、private、protected、public、published ディレクティブが実装されています (クラス メンバーはデフォルトで public です)。

スライド 65

Delphi 方言では、ワード クラスを使用してクラスを構築することもでき (オブジェクト クラスとの相互継承は許可されません)、インターフェイスが導入されます。すべてのメソッドは抽象メソッドであり、データ フィールドを含めることはできません。 すべてのクラス (class を使用して作成された) は TObject の子孫であり、すべてのインターフェイスは IUnknown からのものです。 class で作成されたクラスは複数のインターフェイスを実装できます。

スライド 66

Delphi では、Microsoft の COM テクノロジをサポートするインターフェイスが導入されました。 クラス (Class) は、通常のクラス (Object) とは異なり、メモリを明示的に割り当てたり割り当て解除したりする必要はありません。それらのメモリは、Create という名前のコンストラクターによって動的に割り当てられ、クラス名で呼び出され、Destroy という名前のデストラクターが呼び出されるときに解放されます。と呼ばれます(他の名前がある場合があります)。 このようなクラスの変数は、オブジェクト クラスとは異なり、クラス インスタンスのアドレスをメモリに格納します。nil 値は空の参照を示すために使用されます。したがって、オブジェクトを解放するには、TObject で特別な解放メソッドが定義され、チェックが行われます。 nil の参照と仮想デストラクター Destroy の呼び出し。 このようなクラスを使用したコードは次のようになります。

スライド 67

レッスンのトピック: プログラミング言語「PASCAL」言語のテキストエディター。

IT教師

GBOUスクールNo.293にちなんで名付けられました。 で。 トヴァルドフスキー、モスクワ

バフティノワ ナタリア ヴァレリエヴナ


レッスンの目的 :

  • Pascal 言語に関する最初の情報を生成します。 Pascal 言語のテキスト エディターで作業するスキルを身につける .

Pascal 言語に関する歴史情報

  • パスカル プログラミング言語は、1642 年にフランスの偉大な数学者で物理学者のブレーズ パスカルに敬意を表してその名前が付けられました。 いわゆる「パスカルホイール」という算術演算用の計算機を発明しました。 1968 年末、チューリッヒのスイス連邦工科大学のヴィルト教授とその共同研究者は、Pascal 言語の最初のバージョンを開発しました。 2 年後、コンパイラの最初のバージョンが完成しました。 1971 年に、ヴィルトは自分の言語に関する説明を発表しました。

ブレーズ・パスカル - フランスの数学者、機械学、物理学者、作家、哲学者


Pascal を作成する際、ヴィルスは次の 2 つの目標を追求しました。

  • まず、体系的な学問としてプログラミングを教えるのに適した言語を開発すること。
  • 次に、言語の実装は効率的で信頼性が高くなければなりません。
  • Pascal 言語の利点の 1 つは、構造化プログラミングの考え方を完全に体現していることです。その本質は、いくつかの構造の助けを借りて、原則として任意のアルゴリズムを表現できることです。

ニクラス・ヴィルト (ドイツ語: Niklaus Wirth、1934 年 2 月 15 日生まれ) はスイスの科学者であり、プログラミング言語開発の分野で最も有名な理論家の 1 人です。 プログラミング言語 Pascal、Modula-2、Oberon の主要な開発者および作成者。


Pascal言語の開始

Pascal 言語を起動するには、PASCAL.EXE ファイルをロードする必要があります。このファイルは通常、PASCAL ディレクトリにあります。

例: D:\PASCAL\PASCAL.EXE



  • 青色の背景にプログラムを書いていきます。
  • ヒント線は灰色の背景に書かれています。
  • 一番上の行にはドロップダウン メニューが含まれています。 Fアイル、 T内線、 実行、 編集、 Rモード、 についてトラドカ、 N観察。
  • トップメニューに移動するには、F10 キーを押します。 alt キーを押しながら、トップ メニューのいずれかの単語の最初の文字を押すと、ウィンドウが開きます。 (例 alt + B)

  • コンピュータにプログラムを入力することは、コンピュータにテキストを入力することです。 以下に、Turbo Pascal テキスト エディターで最も一般的に使用されるコマンドを示します。

  • PgUp - ページアップ。
  • PgDn - ページダウン。
  • ホーム - 行の先頭へ。
  • End - 行の終わりまで。
  • Ctrl-PgUp - テキストの先頭へ。
  • Ctrl-PgDn - テキストの最後まで。

  • バックスペース (←) - カーソルの左側の文字を消去します。
  • Del - カーソルが指している文字を (カーソルの右側に) 消去します。
  • Ctrl-Y - カーソルが置かれている行を消去します。
  • Enter - 新しい行を挿入し、古い行を切り取ります。
  • Ctrl-Q L - 現在の行を復元します (カーソルが変更された行から離れなかった場合に有効です)。

  • Ctrl-K B - ブロックの先頭をマークします。
  • Ctrl-K K - ブロックの終わりをマークします。
  • Ctrl-K Y - ブロックを消去します。
  • Ctrl-K C - ブロックをコピーします。
  • Ctrl-K V - ブロックを移動します。
  • Ctrl-K W - ブロックをディスク ファイルに書き込みます。
  • Ctrl-K R - ディスク ファイルからブロックを読み取ります。
  • Ctrl-K P - ブロックを印刷します。
  • Ctrl-K H - ブロック選択を削除します。

  • Pascal プログラミング言語の最初のバージョンが登場したのは何年ですか?
  • パスカルの利点は何ですか?
  • プログラム内でカーソルを画面の左上隅から右下隅まで素早く移動するには、どのキーを使用すると便利ですか? (逆の場合はどうなりますか?)
  • プログラムの一部をコピーするには何をする必要がありますか?
  • プログラムテキストに加えた変更を元に戻すことはできますか?

  1. 1.パスカル
  2. 2. パスカル パスカルはスイスの科学者ニクラウス・ヴィルトによって開発されました。 Pascal は、構造化プログラミング手法を教えるための最も重要なツールと考えられており、1983 年からコンピューター サイエンスを専門とする学生向けの学校のコースに導入されています。 その後、Pascal 言語は改良され、作者のバージョンとは異なる新しい特性を獲得しました。
  3. 3. Pascal 言語は比較的習得が簡単で、非常に明確かつ論理的であり、最初に学習するプログラミング言語であるため、適切なスタイルを教えてくれます。
  4. 4. 自然言語と同様、各プログラミング言語には独自のスタイルとルールがあります。 プログラミング言語の構文は、アルファベット文字から正しいプログラムを構築する方法を決定する一連の規則です。
  5. 5. パスカル言語のアルファベット 26 のラテン文字と 26 のラテン大文字: a B C D E F G I j k l m n m n m n m n m n m n m n m n m n m n m n o v w x y z a b h i j k l m n m n m n m n m n m n m n m n m n m n m nm v w x y z、強調 _ 10 桁: 0 1 2 3 4 5 6 7 8 9 演算の記号: + - * / = = = = =======================================<> < > <= >= := @ 区切り文字 (区切り文字): . , " () (. .) ( ) (* *).. : ; 指定子: ^ # $
  6. 6. プログラム構造 (1. プログラムヘッダ) プログラム Program_Name; (2. 使用するモジュールを指定するセクション) List_of_used_Modules を使用します。 (3. 説明セクション) label Label_descriptions; const 定数の説明; タイプ TypeDescriptions; var 変数の説明; プロシージャのプロシージャと機能の説明。 関数エクスポートの説明_of_Exported_Names; (4. ステートメントセクション) ステートメントの開始 ステートメントの終了。
  7. 7. 簡略化されたプログラム構造 (1. プログラムヘッダ) プログラム Program_Name; (2. 使用するモジュールを指定するセクション) List_of_used_Modules を使用します。 (3. 説明セクション) const Constant_Descriptions; var 変数の説明; (4. ステートメントセクション) begin プログラムステートメントが終了します。
  8. 8. プログラミング言語のコマンドは演算子と呼ばれます。Pascal の演算子区切り文字は次のとおりです。 (セミコロン)
  9. 9. コメントは、文字 ( ) で区切られたプログラムテキストの断片です。 プログラム内のコメントは情報提供の機能を果たします。 (私の最初のプログラム)最初のプログラム。 begin writeln('Hello, World!') end。
  10. 10. 例: 長方形の周囲長プログラム perimetr; (プログラムタイトル) crt を使用します。 (crt – 画面をクリアするために必要) var a,b:integer; (変数の宣言) P:整数; Begin (プログラムの開始) clrscr; (画面クリア) a:=12; (変数 a に値 12 を割り当てます) b:=7; (変数 b に値 7 を代入) P:=2*(a+b); (式の値を P に代入します) write("P = ",P); (P値表示)終了。 (番組終了)
  11. 11. プログラムは作業中にデータを扱います。 一部のデータはプログラムの実行開始前に設定され、プログラムの実行開始後、その値はプログラムの動作全体を通じて変更されません。 これらは定数です。 他のデータはプログラムの実行中に変更される可能性があります。 それらは変数と呼ばれます。
  12. 12. 変数と定数の違いは明らかです。プログラムの実行中に、変数の値は変更できますが、定数の値は変更できません。 変数変数定数定数データデータ
  13. 13. 変数とは、コンピュータがデータを書き込む (「追加」) できるセル (「ボックス」) を意味します。 細胞とは実際には、情報が保存されている「記憶の一部」を意味します。 セルに保存された情報を使用するには、各セルに独自の名前、またはよく言われるように識別子が必要です。 a b 合計 5 3 8
  14. 14. 識別子。 名前(識別子)は定数、ラベル、型、変数、手続き、関数、モジュール、オブジェクトなど言語の要素です。 識別子は、文字、数字、およびアンダースコアで始まり、スペースを含まない一連の文字です。
  15. 15. 名前には任意の数の文字を含めることができますが、63 文字が重要です。 PASCAL 言語では、標準の定数、型、手続き、関数、ファイルなどを名称とする機能語や標準名を使用することはできません。 PASCAL 言語名の例: A b12 r1m SIGMA gamma I80_86
  16. 16. Pascal では、小文字と大文字の違いは無視されるため、NaMe と name は同じです。
  17. 17. 機能語とは、PASCAL 言語において変更できない特定の意味を持つ単語です。 キーワードと呼ばれることもあります。
  18. 18. サービス (予約) ワード: ABSOLUTE EXPORTS LIBRARY SET ASSEMBLER EXTERNAL MOD SHL および FAR NAME SHR ARRAY FILE NEAR STRING ASM FOR NEAR THEN ASSEMBler FORWARD NOT TO BIGIN 関数オブジェクト タイプ CASE goto of Unit Const if or until コンストラクター 実装 パックされたデストラクター in PRIVATE VAR DIV インデックス手順 仮想 DO 継承されたプログラム DOWNTO INLINE PUBLIC WITH ELSE INTERFACE RECORD XOR END INTERRUPT REPEAT EXPORT LABEL RESIDENT
  19. 19. 二重文字または予約語内にスペースを使用することはできません。 スタンダードと呼ばれるものがあります。 sin cos real true 機能語とは異なり、標準名の意味はプログラマによって再定義できます。
  20. 20. これは、プログラムの変数用にどのくらいのメモリを予約する必要があるかをコンパイラに指示します。 コンパイルされたプログラムでは、メモリ空間がすべての変数に割り当てられ、すべての変数にゼロ値が割り当てられます。 プログラムで使用されるすべての変数は、予約語 var の後の変数説明セクションで宣言する必要があります。 変数の宣言
  21. 21. データにはさまざまな種類があります...
  22. 22. データ型 標準型の名前は事前定義された識別子であり、プログラム内のどこでも有効です。 これらは標準のシステム モジュールで説明されており、デフォルトで使用されるモジュールのリストに含まれています。 ユーザー定義型は、ユーザーによって定義される追加の型 (単純および構造化) です。
  23. 23. 標準データ型 1. 整数型のグループ (Shortint、Integer、Longint、Byte、Word)。 2. 実数型のグループ (Single、Real、Double、Extended、Comp)。 3. 論理型 (ブール型)(Boolean、ByteBool、WordBool、LongBool); 4. 文字(Char); 5.文字列(文字列); 6. インデックス (ポインタ); 7. テキストタイプ(テキスト)。
  24. 24. 整数型のグループ 型名 型値の範囲 必要なメモリ 符号付き short integer Shortint -128 .. 127 1 byte Signed integer Integer -32768 .. 32767 2 bytes Signed long integer Longint -2147483648 .. 2147483647 4 bytes Unsigned short integer signed Byte 0 ~ 255 1 バイト 符号なし整数 ワード 0 ~ 65535 2 バイト
  25. 25. 変数 b: バイト; 合計、カウント: 整数; 整数型の変数の宣言 summa:= -365; 使用
  26. 26. PASCAL 言語の数値は通常、10 進数法で書かれます。 数値の正符号は省略できます。 整数は、小数点のない形式で記述されます。例: 217 -45 8954 +483
  27. 27. 実数型のグループは、実数のサブセットによって実現されるデータを定義します。 変数 A: 実数。 開始 ... A:=0.65; ...終わり。
  28. 28. 型名 型 値の範囲 仮数部桁数 サイズ(バイト) 単精度実数 実数 2.9e-39 .. 1.7e+38 11 6 単精度実数 1.5e-45 .. 3.4e+38 7 4 倍精度実数 Double 5.0e-324 .. 1.7e+308 15 8 高精度実数 Extended 3.4e-4932 .. 1.1e+4932 19 10 実数整数 Comp -9.2e+18 .. 9.2e+18 19 8
  29. 29. 実数は、小数点を含む形式、または文字 E で表される 10 進数の順序を使用した形式で記述されます。 28.6 0.65 -0.018 4.0 5E12 -1.72E9 73.1E-16
  30. 30. ブールデータ型はブール識別子に対応します。 ブール変数のサイズは 1 バイトで、TRUE または FALSE 値を含めることができます。 値 FALSE は 0 に対応し、0 以外の数値は TRUE とみなされます。 Var ボタン、フラグ: ブール値; 開始ボタン:=true;
  31. 31. 標準識別子 Char は文字タイプに対応します。 文字型の変数と定数は、さまざまな ASCII 文字から値を取得できます。 Var simvol、bukva、z: char; シンボリック変数の宣言
  32. 32. 文字列型は標準識別子 String に対応します。 変数 S: 文字列。 (0 ~ 255 文字の文字列) S2: 文字列。 (ストックは5キャラクター)
  33. 33. 文字列は、一重引用符で囲まれた ASCII 文字セットの一連の文字です。 パスカル言語の行は、アポストロフィの間に書かれた一連の文字です。 アポストロフィそのものを行内で意味のある文字として使用する必要がある場合は、アポストロフィを 2 つ書く必要があります。 文字列の例:「STRING」「STRING」「AD」「YUTANT」
  34. 文字型は、整数型やブール型と同様に、いわゆる順序型に分類されます。  任意の序数型の有効な値のセットは順序付けされたシーケンスであり、その各要素には独自の序数 (0 から始まる) があります。
  35. 35. Ord 関数は、型宣言内のこの値の序数を返します。 Ord(2)=2、Ord(‘0’)=48 Writeln(ord(‘e’)); Writeln(ord('9'));
  36. 36. ASCII エンコーディング テーブル ASCII (American Standard Code for Information Interchange、「アスク」と発音) は、ラテン文字、アラビア数字、いくつかの句読点、および制御文字を表すためのコンピューター エンコーディングです。 これは、米国規格協会 ANSI によって導入されました。

PASCAL プログラミング言語入門 2006 コース構造インターフェイスと基本定義。 プログラム構造。 画面上にテキスト情報を表示する。 キーボードからデータを入力する。 システムモジュールの接続と使用。 基本的なデータ型 (整数、実数、文字列、配列、ファイル) を扱う。 サブルーチン (プロシージャと関数) の使用。 モジュールを使用します。 2 PASCAL 環境インターフェイス Turbo Pascal 7.0 プログラミング言語は、インストルメンタル シェルに組み込まれています。 これには以下が含まれます: マルチウィンドウのテキストエディタ。 プログラムリンカー。 プログラムデバッガ。 ヘルプシステム。 コンパイラ。 3 PASCAL 4 環境インターフェイス 開いているファイルのリスト: Alt + 0 開いているファイルへのクイック アクセス: Alt +<№ окна> 基本定義 予約語は、プログラムの論理領域を区切るためにプログラミング言語によって使用される特別な語です。 演算子は、何らかのアクション (条件のチェック、ループの編成など) を実行する言語コマンドです。識別子は、プログラム要素に対してプログラマが自由に選択した名前です。 データ型は、識別子の特性であり、それが受け取ることができる値のセット (整数または小数、文字列、論理式など) を決定します。 5 一般的なプログラム構造 プログラム Program_name; プラグインの「uses」セクション。 ラベルの説明については「ラベル」セクション。 定数については Const セクションで説明します。 独自のデータ型を説明するための型セクション。 Var 変数の説明セクション。 開始 プログラムの本体。 終わり。 最小コード: 6 SCREEN OUTPUT 画面に情報を表示するには、Write または Writeln 演算子を使用します。 F9 – コンパイル + 検証 Ctrl+F9 – 実行 F9 → Ctrl+F9 – エラーの回避 プログラムの実行結果の表示 7 DISPLAY 演算子の使用結果: WRITE "Empty" 演算子 WRITELN 空行を追加 WRITELN 8 EXERCISE 情報を表示以下のような画面が表示されます こんにちは! 会えてうれしい! コンピューターと呼んでください。 使用した資料: 出力ステートメント: Write、WriteLn 「Empty」WriteLn ステートメント。 空行を挿入します。 9 追加モジュールの接続 追加モジュールは、追加の演算子を導入することでプログラムの機能を拡張します。 モジュールは「Uses」セクションで接続されます。 プログラムマイ; Module1、Module2 を使用します。 ___________________________________ ___________________________________ ________________________ ________________________ MODULE 1 リソースのセット 1 ... MODULE N モジュール: システム独自のリソースのセット N テキスト画面をクリア中 キーが押されるのを待機中 CRT という名前の接続されたモジュール 10 画面の任意の場所に出力 GotoXY (X 、Y: 整数) ここで、X、Y – 画面上のよく知られた場所の座標。 X には 1 ~ 80、Y には 1 ~ 25 の値を指定できます。例: Program My_program; (モジュール接続) Crtを使用します。 開始 (画面クリア) ClrScr; (データ出力) GotoXY(1, 1); write("▒"); GotoXY(80, 1); write("▒"); GotoXY(1, 25); write("▒"); GotoXY(80, 25); write("▒"); (画面遅延) ReadKey; 終わり。 プログラムは、画面の隅に「▒」記号 (コード 177) を表示します。 11 カラーで出力 TextColor (カラー); 文字の色を定義します。 TextBackground(色); 身近な場所の色を定義します。 プログラムマイプログラム; Crt を使用します。 TextColor(赤)を開始します; TextBackGround(青); Write("庭で"); テキストの色(白); Write("草, "); テキストカラー(緑); TextBackGround(黄); Write(「草の上」); TextBackGround(マゼンタ); Write(「薪。 "); 終了。 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 色 ブラック ブルー グリーン シアン レッド マゼンタ ブラウン ライトグレー ダークグレー ライトブルー ライトグリーン ライトシアン ライトレッド ライトマゼンタ イエロー ホワイト 12 – 黒 – ブルー – グリーン – シアン – レッド –ライラック – ブラウン – ライト グレー – ダーク グレー – ブルー – ライト グリーン – ライト シアン – ピンク – ライト ライラック – イエロー – ホワイト データの操作 データの操作 識別子の宣言 14 データ タイプの設定 データの識別 データに対する操作の明確さ タスク値 データ操作 識別子 用語「識別子」は、定数、変数、関数、プロシージャ、コンポーネント、およびその他のユーザー定義オブジェクトに適用されます。 制限事項: 数字で始めることはできません。複数の単語で構成されており、どのキーワードにも一致することはありません。識別子は大文字と小文字が区別されません。 間違った識別子: データ 私の名前 2Array Var ( ( ( (ロシア語の文字が使用されています) スペースがあります ) 数字で始まります ) キーワードに一致します ) 15 データ型 データ型は、値のセットを決定する識別子の特性です。 (整数または小数、文字列、論理式など) を受け取ることができます。 16 INTEGER DATA TYPE 17 可能な値の有限セット type byte shortint word integer longint range 0..255 -128..127 0..65535 -32768..32767 -2147483648..2147483647 ! 範囲を超えるとエラーになります。 size 変数の宣言 変数は、任意の値 (数値、文字列など) を格納し、プログラムの実行中に変更できる識別子です。 構文: 変数<имя переменной> : <тип переменной>; プログラム プログラム名; プラグインの「uses」セクション。 Var 変数の説明セクション。 開始 プログラムの本体。 終わり。 コンピュータのメモリには 3 つの変数用のスペースが確保されています。 18 変数への値の設定 変数の値を設定するには、代入演算子:= を使用する必要があります。 記録構文:<Переменная> := <Значение>; 値 3 は、A という名前の変数 (整数) に入力されます。 19 整数変数を使用した演算 20 算術演算: + - * / 標準演算: div | モッド | sqr 整数型では使用できません S という名前の変数には、変数 X と Y に格納された値の合計が格納されます S という名前の変数に格納された値が画面に表示されます 演習 21 1. 結果を表示するプログラムを作成します2. x=11、y=3 のときの関数 f 2 x 3 y の値を表示するプログラムを作成します。 使用する材料: 変数は Var セクションで宣言されます。 整数型は Integer と呼ばれます。変数に値を割り当てるための構文は次のとおりです。<Переменная> := <Значение> ; 各演算子の後に記号があります。 (begin と last end を除く) REAL DATA TYPE 値のセット √ √ 順序型 実数型 一方向互換性: Real Integer Integer Real! 範囲を超え、互換性ルールに準拠していない場合は、エラーが発生します。 22 実変数を使用した演算 23 標準演算: pi | 平方メートル | 罪 | コス | 腹筋 | 経験 | Ln ラウンド | Trunc (実数 → 整数) 例 (X, S – 実数型): X:= pi/3; S:= Sin(X) * 100; Write(ラウンド(S)); S という名前の変数には、変数 X と Y に格納されている値の比率が含まれています。数値の位置と数値の小数部分の文字数 E - は、数値のべき乗を示します。 5.6E-5 = 5.6・10-5 文字列データ型 24 文字列 - 順序付けられた文字セット。 行はアポストロフィで囲まれます。 文字列は、整数型および実数型と互換性がありません。 タイプ範囲 文字列 255 文字 (文字列の基本演算子) + (連結) 長さ(S); (文字列の長さ) 例: X:= 'Vasya'; Write('あなたの名前で', 長さ(X), 'lit.'); S:=X; X:= S; 演習 数値 12.89 と 0.22 を除算した結果を、小数点以下の有効数字 3 桁だけを表示して、次の形式で表示するプログラムを作成します。 最初の数値を 2 番目の数値で除算 = 結果 Write (X:1:3, ' razdelit na ', y:1 :3, ' = ' z:1:3) 使用される材料: 文字列型は String と呼ばれます 文字列はオポストロフィで囲まれます 文字列の連結は + 記号によって行われます 表示演算子では、異なる型はカンマで区切られます25 キーボードからのデータ入力 26 キーボードから情報を入力するには、入力演算子 Read または ReadLn を使用する必要があります。 構文: Read (N1, N2, ... Nn); ここで、N1、N2、...Nn は変数 (整数、実数、文字列) です。キーボードから入力された値は、変数 X に入力されます。値を入力した後、Enter キーを押す必要があります。 Enter 演習 27 1. キーボードから入力された 2 つの数値の合計を計算するミニ電卓プログラムを作成します。 2. あなたの名前を尋ねるプログラムを作成し、名前を書いた後に挨拶を表示します。 たとえば、Vanya という名前を入力すると、プログラムは「こんにちは、Vanya!!!」というフレーズを表示します。 使用される材料: 入力演算子: Read、ReadLn 演算子 条件演算子 29 条件演算子は「分岐」を実装します。つまり、条件の真偽に応じて演算子の実行順序を変更します。 条件を確認しています いいえ アクション 1 ビーチに行きます 雨が降っています はい アクション 2 傘を持っていきます アクション 3 映画館に行きます 条件を確認しています 比較演算: > - 詳細< - меньше = - равно >= - 以上<= - меньше или равно <>- 30 に等しくない 論理演算: Not And Or - Not -And - Or 例: 私の身長 > Petya の身長の場合、私の身長は Petya よりも高いです (雨が降っている) または (雪が降っている) 場合、私は家にいてください If Not ((雨が降っている ) And (風))、その後、散歩に行きます 論理演算を使用する場合、条件は括弧で囲まれます 条件演算子の構文 短い形式: If<условие>それから<оператор>; たとえば、変数 X の値が 0 より小さい場合、値 1 が同じ変数に書き込まれます。<0 Then X:= 1; Полная форма: If <условие>それから<оператор_1>それ以外<оператор_2>; 例: If X>5 then X:= X - 1 Else X:= X + 1; Then と Else という単語の後、Else という単語の前に使用できる演算子は 1 つだけです。 不足しています 31 演習 32 1. ドルでの金額とユーロでの金額を入力として受け取り、どちらの通貨で金額が大きいかを表示するプログラムを作成します (1 ドル = 28 ルーブル、1 ユーロ = 35 ルーブル)。 Program は 3 つの数値を入力として受け取り、それらの最大値を表示します。 使用される資料: 条件演算子の記録形式: If<условие>それから<оператор>; もし<условие>それから<оператор_1>それ以外<оператор_2>; Else 記号の前。 含まれない比較演算: >< = <> >= <= Логические операции: Not Or And ОПЕРАТОРНЫЕ СКОБКИ Если после слов Then или Else необходимо записать несколько операторов, то их заключают в операторные скобки (составной оператор). Операторные скобки начинаются словом Begin, а заканчиваются словом End; Например: If Z >0 次に X を開始します:= 1; Y:= -1; WriteLn('情報を受け付けました'); End Else WriteLn('エラー'); 33 選択演算子の場合 選択演算子は、ネストされた条件文の構成を置換するために使用されます。 大文字と小文字の構文<порядковая_переменная>の<значение_1> : <оператор_1> ; <значение_2> : <оператор_2> ; ……… <значение_N> : <оператор_N>それ以外<оператор_N+1>; 終わり; 選択ステートメントでは演算子括弧を使用できます。 オプション行 34 SELECTION OPERATOR CASE Case 学生の身長 16..30: あなたは小学生です。 31、32、33: あなたは 5 年生か 6 年生です。 34..50: あなたは高校生です。カンマは値のリストに使用され、コロンは範囲の選択に使用されます。それ以外の場合、あなたは明らかに学生ではありません。 終わり; -128..-1 のケース x: writeln(‘Negative’); 0: writeln('ゼロ'); 1..127: writeln('正') Else WriteLn('範囲外'); 終わり; 35 演習 数値を指定して、対応する曜日を表示するプログラムを作成してください。 たとえば、数値 2 を入力した場合、プログラムは「火曜日」を出力するはずです。 数値が 1..7 を超える場合は、そのような日は存在しないというメッセージが表示されます。 使用素材:選択演算子:ケース<порядковая_переменная>の<значение_1> : <оператор_1> ; ……… <значение_N> : <оператор_N>; それ以外<оператор_N+1>; 終わり; 36 サイクル 37 循環アルゴリズムは、同じ変更されたデータを使用して特定の演算子が繰り返し実行されるアルゴリズムです (たとえば、加算を繰り返して数値を乗算する手順)。 Pascal 言語には 3 つのループ演算子があります。 For (パラメータ付きのループ、または指定された繰り返し回数のループ) While (ループ BYE) 繰り返し (ループ TO) 繰り返しの回数がわかっている場合は、ループを使用することをお勧めします。パラメータを持つ演算子。 LOOP WITH PARAMETER 38 パラメータの値を増減させて、指定した回数だけループします。 For (パラメータ) := (開始値) To (終了値) Do (演算子) ; ループ本体 注 パラメータ – 整数型。 ループ内で括弧を使用できます。 ループ本体のループ パラメーターを変更することはできません。 ループパラメータが 1 つ増加します。 初期値 > 最終値、それ以外の場合、ループ本体は無視されます。 パラメータを減らすには、To の代わりに DownTo を使用します。 LOOP WITH PARAMETER 39 整数 (a、b)、および a を要求するプログラムを作成します。 := <нач_зн>に<кон_зн>する<оператор>; パラメータ – 整数型 (通常は整数)。 ループ内で括弧を使用できます。 ループ パラメータは 1 つずつ増加します。 40 WHILE LOOP While ループは最初に条件をチェックし、それが真の場合にのみループの本体を実行します。 While (条件) do (演算子); 以下に記述されたコード本体では、ループは 1 回も実行されません。 x>1 の場合は x:=x-1 を実行します。 無限ループが発生する可能性があります。 例: x:=1 x>0 の場合、x:=x+1 を実行します。 41 WHILE LOOP (“WHILE”) a から b までの数値の合計を表示するプログラム。 キーが押されていない間は、Delay(2000) を開始します。 終わり; このサイクルは、変化する変数 f が値 b より大きくなるまで機能します。 42 練習問題 43 1. 宇宙飛行士は月に白樺を植えることを決定し、最初の年は毎年 3 本の白樺の数を 2 倍に増やしました。 何年後には白樺の木の数が 10,000 本を超えるかを画面に表示します。 2. キーボードから入力された数値の最大値を決定するプログラムを作成します (入力された数値は数値 0 で終わります)。 以下は推奨される画面ビューです: 数字を入力してください。 入力を完了するには、0 を入力してください。 89 15 0 最大数は 89 です。 使用した内容: While ループ ステートメント: While<условие>する<оператор>; While ループは最初に条件をチェックし、それが true の場合にのみループの本体を実行します。 REPEAT LOOP 44 繰り返しループは、最初にループの本体を実行し、その後で条件をチェックします。 繰り返しループでは複合演算子を使用する必要はありません。 この構造には、Repeat と until という単語で囲まれた 1 つではなく、複数の演算子の実行が含まれます。 REPEAT LOOP a から b までの数値の合計を表示するプログラム。 ループは、変化する変数 f が値 b より大きくなるまで実行されます。 45 While 反復のサイクルの比較 46 ループ モデルの選択は、特定の状況での使用の利便性にのみ依存します。 ほとんどの場合、1 つのタイプのサイクルの代わりに別のサイクルを使用できます。 演習 関数 y x 3 x 2 16 x 43 の値を、-4 から 4 までの範囲で 0.5 ずつ変化させて計算します。 使用素材:Repeatループオペレーター:Repeat<тело_цикла>それまで<условие>繰り返しループは最初にループの本体を実行し、その後で条件をチェックします。 47 サイクルの中断 48 循環演算子の柔軟な制御のために、次の手順が使用されます。 続行 - サイクルの次のパスの完了。 例: 1 から i までの数値の合計が 100 を超える最小の数値 i を見つけます。 s (1 から i までの数値の合計) が 100 を超えるとすぐに、break ステートメントがトリガーされ、ループが終了します。出ました。 s:=0; for I:= 1 to 100 は、s>100 の場合に開始され、その後中断されます。 s:= s + i; 終わり; Writeln('(1+2+..+i)>100 が等しいような最小数 i ',i); キーボードから 10 個の数値を入力し、ループ内で正の値のみの合計が計算されます。 数値が負の場合は、Continue ステートメントが実行され、ループの次のパスが開始されます。 s:=0; for I:= 1 ~ 10 do begin Readln(k); もしkなら<0 then Сontinue; s:= s + k; end; Writeln (‘Сумма положительных чисел равна ’,s); МАССИВЫ МАССИВЫ 50 Простые типы: одна переменная – одно значение Структурированные типы: одна переменная – несколько значений Массив – это фиксированное количество значений одного типа. Доступ к конкретному значению осуществляется через индекс. Переменная массива Структура массива: A= Доступ к массиву: 0 1 2 3 Индекс 9 7 0 0 Значения <Имя массива> [ <Индекс>] A := 7; 配列 配列は Var セクションで宣言されます。 (Name) : Array [ (start_value) .. (end_value) ] of (type) ; 配列宣言の例: Var A: 文字列の配列。 B: 実数の配列。 C: 整数の配列。 配列に値を入力する例: A:=‘Vasya’; A:=「ペチャ」; A:=「マーシャ」; A:=「オレシア」; 書き込み(A); f:=1 ~ 10 の場合、 C[f] := f*2; を実行します。 f:=1 ~ 10 の場合、WriteLn (C[f]); を実行します。 51 演習 52 ユーザーに 7 つの整数を要求し、それらを配列に格納するプログラムを作成します。 最大の要素が配列内で検出され、画面に表示されます。 例: 1 番目の数値を入力: 4 2 番目の数値を入力: 8 3 番目の数値を入力: 9 4 番目の数値を入力: 2 5 番目の数値を入力: 4 6 番目の数値を入力: 5 7 番目の数値を入力: 0 最大数値: 9 使用するマテリアル: 配列宣言:<Имя>:配列[<нач_зн> … <кон_зн>] の<тип>; 配列アクセス:<Имя массива> [ <Индекс>] 乱数ジェネレーター (RNG) プログラムで乱数を生成するには、次の演算子を使用します。 Randomize – RNG 初期化。 プログラムの最初にのみ発表されます。 Random – 0 から 1 (実数型) までの乱数を生成します。 ランダム (N) – 0 から N-1 までの乱数を生成します (整数型)。 53 多次元配列 54 各配列次元の間隔のリスト (名前): Array [ (start_value) .. (end_value) , (start_value) .. (end_value) , (etc) ] of (type) ; 4 行 6 列の 2 次元配列 (行列、テーブル) を宣言する例: Var A: Array of Integer; 配列を埋める例: For i:=1 to 4 do For j:=1 to 6 do A := i+j; Ai , j 2 3 4 5 3 4 5 6 4 5 6 7 5 6 7 8 6 7 8 9 7 8 9 10 演習 2 次元配列に -10 から 20 までの乱数を入力し、その合計を表示するプログラムを作成してください。テーブルの斜めに配置された要素の数。 使用したマテリアル: RNG 初期化: Randomize 0 から N-1 までの乱数: ランダム (N) 55 ファイルの操作 ファイルの操作 57 ファイル: ファイルの先頭 Index)a@$ku⌂|"Hd9v*9(L*M= БYGRMxduВ █ 8e*ВOtCDrTVzHGJ1aBD>@Б\(r8sE) █ :wcJvAmRa"v/.Wai;$`SWI=y2]suB █ ?Hq>vF(LmBcV^Adz4P4.6b]o(QkВ8 █ cu<6`8Z":M^1;:8ANwak;,b2-4…u5 █ 2]suB?Hq>vF(LmBcAdz4wcP]o(QkВ █ 8c8df]e"v,su>+),VAEFБjFV,W$Q- █ y0G1GjN$-eБ|sqZ0`QnВ%\БD%y █ █ █ - ラインターミネータ █ - ターミネータファイル 変数ファイルの作成、読み取り、書き込み、終了 ファイルを操作するときの一連の操作: 1. ファイル変数 (FP) の宣言 2. FP とファイルの関連付け 3. 読み取り/書き込み用にファイルを開きます。 ; ファイルを閉じる (ファイルと FP 間の接続も切断されます)。<Имя>:ファイル<тип> ; <Имя>:文章; 変数 f:テキスト; h: 整数のファイル。 2. FP と割り当てファイルの関連付け (<ФП>, <имя файла>); Assign (f, ‘c:\my\Data.ghm’) 58 ファイルの操作 3. 読み取り/書き込みのためにファイルを開く Reset (<ФП>); - 読み取り用にファイルを開きます Rewrite (<ФП>); - 書き込み用にファイルを開きます。 4. ファイル操作 読み取り (<ФП>, <П1> , <П2>、…); - 変数に読み込みます<П1>, <П2>等 ポインターの位置から一度に 1 要素ずつ移動します。 書く(<ФП> , <П1> , <П2>、…); - 変数値をファイルに書き込みます<П1>, <П2>等 ポインタの位置から一度に 1 要素ずつ移動します。 エオルン (<ФП>); - 行末に到達すると True を返します。 EoF (<ФП>); - ファイルの終わりに達した場合は True を返します。 5. ファイルを閉じる Close (<ФП>); 59 ファイルの操作 行列のサイズが 5x5 であることがわかっている場合は、プログラムを簡略化します (For ループを使用します) 60 演習 61 プログラム「HOUSE-3」を作成します。 最初のファイルには、主格の参加者の名前が含まれています。 2番目では、同じ名前ですが対格です。 3 番目には、感情または何らかの行動の表現 (好き、嫌い、キス、噛みたい、崇拝、尊敬、嫌い、会いたい、ハグ) のリストが含まれています。 プログラムはこれらのファイルから情報をランダムに取得し、次の原則に従って新しいファイルを作成する必要があります。<имя в им. пад> <чувство/действие> <имя в вин. пад> オルガはセルゲイを愛している オレグはローマンを見たい カティアはナスティアを尊敬している などなど。 使用される資料: オペレーター名: Assign、Rewrite、Reset、Write、Read、Close。 グラフィック Pascal でグラフィックを操作するには、graph.tpu モジュールと egavga.bgi グラフィック アダプター ドライバーという 2 つのファイルが必要です。 1 つ目は \UNITS ディレクトリにあり、2 つ目は \BGI ディレクトリにあります。 ! ドライバー egavga.bgi。 exeファイルを扱う場合に必要です。 描画するには、次の操作を行う必要があります。 1. GRAPH モジュールを接続します (「Uses」セクション内)。 2. グラフィックスを初期化します (InitGraph)。 3. 何かを描きます。 4. グラフィックモードを閉じる(CloseGraph) 63 GRAPHICS グラフィックモードの初期化 線を描きます。 羽根は点 (0,0) から点 (639, 479) に移動します。 プログラム入門_1; グラフ、crt を使用します。 Var Gd,Gm: 整数; 開始 Gd:=0; InitGraph (Gd,Gm,'d:\BP\bgi"); Line (0,0,639,479); ReadKey; CloseGraph; END. 639 px. 座標系 479 px. 64 グラフィックス モードを閉じる 演習 65 1. 長方形を描画します。画面の中心に三角形を置きます。 2. 画面の中央に、画面の対応する辺の半分のサイズの辺を持つ長方形を描きます。 使用するマテリアル: グラフィックス モジュール: Graph グラフィックスの初期化: InitGraph グラフィックス モードを閉じる: CloseGraph + COLOR SetColor(Color : word); ペンの色を設定します。 GetColor: word; ペンの色を返します。 SetBkColor(color: word); 背景色を設定します。 – グリーン – シアン – レッド – ライラック – ブラウン – ライト グレー – ダーク グレー – ブルー – ライト グリーン – ライト シアン – ピンク – ライト ライラック – イエロー – ホワイト グラフィック プリミティブ ライン座標 (x,y)。 MoveTo(x, y); ペンを座標 (x,y) に設定します。 PutPixel(x, y, Color); Color で座標 (x,y) の点を描画します。 GetPixel(x, y): ワード; 座標 (x,y) の点の色を返します。 長方形(x1, y1, x2, y2); 長方形の輪郭を作成します。 円(x, y, r); 中心が (x,y)、半径が r の円を描きます。 SetLineStyle (Ln, 0, T) アウトラインのパラメータを変更します。 Ln - 線のスタイル (0..3): 67 x1、y1 T - 線の太さ: 1 = 通常。 3 = 厚い。 FillEllipse(x, y, Xr, Yr); (x,y) を中心とし、半径 Xr および Yr を持つ塗りつぶされた楕円を描画します。 SetFillStyle(タイプ, カラー); 閉じた ClearDevice 図形のハッチングのタイプ (0..11) と色を設定します。 グラフィック画面を現在の背景色 x2、y2 でペイントしてクリアします。 グラフィック プリミティブ 68 演習 69 1. モニター画面に家を描くプログラムを作成します。 2. ランダムな半径 (1 ~ 5 ピクセル) とランダムな位置の星でモニター画面に星空を描画するプログラムを作成します。 色もランダムです (白、ライトグレー、ダークグレー)。 使用素材: SetColor(Color: word); - 描画色を設定します SetBkColor (color: word); - 現在の背景色を設定します。 ライン(x, y); - 現在のペン座標から (x,y) 座標まで線を描きます。 MoveTo(x, y); - ペンを座標 (x,y) に設定します。 PutPixel(x, y, Color); - Color で座標 (x,y) の点を描画します。 長方形(x1, y1, x2, y2); - 現在の色の線から長方形の輪郭を構築します。 円(x, y, r); - 中心が (x,y)、半径が r の円を描きます。 FillEllipse(x, y, Xr, Yr); - (x,y) を中心とし、半径 Xr および Yr を持つ塗りつぶされた楕円を描画します。 グラフィック + アニメーション ミリ秒単位で一時停止します。 70 サブルーチン サブルーチンを使用すると、コードの繰り返し部分を個別のフラグメントに分離し、プログラム内の適切な場所に挿入できます。 プロシージャとは異なり、関数は呼び出しの結果を返します。 プロシージャ 関数 サブルーチン: Begin End キーワードの間に記述されます。 識別子を指定するための規則に従って記述された名前によって識別されます。 入力パラメータと出力パラメータがある場合があります。 メインプログラムの構造を完全に繰り返します。 72 プログラムマイ; サブルーチン 1 [サブルーチン 1 のコード] サブルーチン 2 [サブルーチン 2 のコード] Begin サブルーチン 2 サブルーチン 1 システムサブルーチンの例: Write(“Ok”); ClrScr; 長さ (S); ランダム; // // // // パラメータが 1 つあるプロシージャ パラメータが無いプロシージャ パラメータが 1 つある関数 パラメータが無い関数 サブルーチン 2 終了。 サブルーチン (SPR) サブルーチンのネスト プログラム サブルーチン 1 サブルーチン 3 サブルーチン 4 サブルーチン 2 73 変数利用可能領域 特定の SPR に記述された変数は、ネストされたすべての SPR を含め、その本体内で既知です (SPR1 に記述された変数は SPR3、4 で利用可能になります) 。 PPR に記述されている変数の名前は、他の PPR の変数の名前と一致する場合があります (同じ変数を各 PPR で宣言できます)。 PPR に記述されている変数名は、これを囲む PPR からの同じ名前の変数を選別します (同じ変数が PPR1 と PPR3 で宣言されている場合、各 PPR でこれらの変数は一意になります)。 プログラム変数はグローバル、サブルーチン変数はローカルと呼ばれます。 パラメータのないプロシージャ 記録構文: Procedure (プロシージャ名); (変数、定数、型、ラベル、モジュールのセクション) Begin (プロシージャ本体); 終わり; パラメーターなしでプロシージャを使用する例: 74 PROCEDURES WITHOUT PARAMETERS 同じ名前の変数をエスケープする例: Program My_program; Crt を使用します。 変数A:文字列; // プロシージャの説明 Procedure My_Procedure; 変数A:文字列; 開始 A:= "サブルーチン"; Writeln(A); 終わり; 開始 A:= "本体"; Writeln(A); 私の手順; Writeln(A); 終わり。 // プロシージャの呼び出し 75 パラメータ付きプロシージャ 76 サブルーチンをより汎用的にするために、プログラムとそのサブルーチン間のデータ交換に特別なメカニズムが使用されます。 パラメータを含むシステム プロシージャ: SetColor (Red); ( Rectangle (0, 0, 639, 479) のプロシージャ; ( InitGraph (Gd,Gm,'d:\BP\bgi") のプロシージャ; ( ( パラメータ 1 つのパラメータ ) 複数のパラメータ ) いくつかの異なるタイプのプロシージャ ) )パラメーターを含む構文プロシージャ Procedure (名前) ((入力変数の領域) Var (出力変数の領域 (各変数には独自の Var))); 領域の構造: Variable_1、Variable_2、...: Type 。 ....................... Variable_N-1, Variable_N, … : Type; いずれかの領域が欠落している可能性があります パラメータを使用した手順 入力パラメータの使用 長方形を描画する手順画面の境界線、指定された色 パラメータなし パラメータあり プロシージャ SetColor(i)(0, 0, 639, 479);プログラム内でプロシージャを呼び出す: i:=6; Cir(6, 12); 77 パラメータを使用したプロシージャ 出力パラメータの使用 度単位ラジアンから角度を変換する手順 プログラムEX_26_3; VAR x,a: 実数。 手順 Rad(alfa: 実数; var betta: 実数); (出力変数) BEGIN Betta:= pi*alfa/180; 終わり; BEGIN Write("角度を度単位で入力してください: "); Readln(x); Rad(x, a); (プロシージャ呼び出し) Writeln("ラジアン単位の角度に等しい = ",a:6:4); 終わり。 78 練習問題 79 1. 三角形を描く手順を以下の形式で書きます。 Triangle(x1,y1, x2,y2, x3,y3, Color) 2. 長方形の面積を計算する手順を以下のように書きます形式: SRect (a, b, S) ここで、S はプロシージャの出力パラメータです。 使用したマテリアル: プロシージャ (名前) ((入力変数領域) Var (出力変数領域)); 領域構造: 変数_1、変数_2、...: タイプ; ................... 変数_N-1、変数_N、…: タイプ; 関数 80 関数を記述するための構文 Function ((入力変数領域) Var (出力変数領域)): (型) ; プロシージャのフォーマット 関数のフォーマット プロシージャ S(a,b:real; var s:real); s:= a+b を開始します。 終わり; 関数 Sum (a,b: 実数): 実数; 合計の開始:= a+b; 終わり; プロシージャの呼び出し 関数の呼び出し S(10, 20, A); 書き込み(A); A:= S(10, 20); WriteLN(A); WriteLN(S(20, 30)); 特定のサブルーチンは、その操作の結果が期待される場合にのみ関数として設計することをお勧めします。 サブルーチンが特定の一連のアクション (表示、描画など) の実行のみに焦点を当てている場合は、プロシージャとして設計する方が適切です。 演習 長方形の面積を計算する関数を次の形式で記述します。 SRect (a, b) 使用する材料: Function (名前) ((入力変数の面積) Var (出力変数の面積)): (型) ; 領域構造: 変数_1、変数_2、...: タイプ; ................... 変数_N-1、変数_N、…: タイプ; 81 モジュール モジュール 83 モジュール (UNIT) は独立したプログラム単位であり、そのリソース (プロシージャと関数) は他のプログラムから使用できます。 プログラムMy1; Module1、Module2 を使用します。 __________________________ _____________________________________ _____________________________________ ________________________________ モジュール 1 リソース セット 1 … プログラム My2; Module1、Module2 を使用します。 __________________________ __________________________ __________________________ __________________ MODULE N リソースのセット N モジュールは、USES MODULES セクションを通じてプログラムに接続されます。 構造 84 モジュールは次の部分で構成されます。 1. モジュールヘッダー。 2.インターフェース部分。 (可視オブジェクトの説明) 3. 実装部分。 (隠しオブジェクトの説明) 4. 初期化部分 (オプション)。 ユニット (モジュール名); インターフェイス (グローバル変数、定数、型のセクション) (モジュール) (手続きと関数のヘッダーのリスト) 実装 (ローカル変数、定数、型のセクション) (手続きと関数の実装) 開始 (初期化部分) 終了。 ! モジュールヘッダー名はモジュールファイル名と一致する必要があります。 モジュール モジュール例: Unit My_Unit; インターフェイス変数 ms: 実数の配列。 ( グローバル配列 ) 関数 Cub(x:integer):Integer; (関数 Cub = x^3 ) 関数 ext4(x:integer):Integer; ( Function ext4 = x^4 ) 実装関数 Cub(x:integer):Integer; (Cub 関数の実装) Begin Cub:= x*x*x; 終わり; 関数 Ext4(x:integer):Integer; ( ext4 関数の実装) Begin Ext4:= x*x*x*x; 終わり; 終わり。 85 演習 86 1 つの関数と 1 つのプロシージャを含むモジュールを作成します。 ( 関数計算 X1=1/x ) X1(a:real):real; ( 単語 S を画面上の X, Y の位置に出力する手順 WriteXY(S:String; X,Y:Iteger); 使用する材料 (モジュール構造): ユニット (モジュール名); インターフェイス (グローバル変数、定数のセクション) 、タイプ)(モジュール)(手続きと関数のヘッダーのリスト)実装(ローカル変数、定数、型のセクション)(手続きと関数の実装)開始(初期化部分)終了。



パスカル言語は 1971 年に開発され、機械式コンピューターを発明したフランスの科学者ブレーズ パスカルにちなんで命名されました。

パスカル さまざまな情報処理の問題を解決できる汎用プログラミング言語です。



言語のアルファベット

すべてのラテン文字の大文字と小文字 (A ~ Z、a ~ z)。

アラビア数字 (0 ~ 9);

記号 +、-、*、/、…。

機能的な言葉。


F1 – ヘルプまたはヘルプ デスク (ヘルプ)。

F2 – 編集したテキストをディスク ファイルに書き込みます ( 保存) .

F5 – アクティブなウィンドウを全画面で開きます。

F6 – 次のウィンドウをアクティブにします。

F9 – プログラムをコンパイルしますが、実行はしません。

F10 – メインメニューに移動します。


基本的なファンクションキー

Alt-X – ソフトウェア環境を終了します。

Ctrl-F9 – プログラムの実行: エディターにあるプログラムをコンパイルし、RAM にロードして実行します。

Alt-F5 – エディタウィンドウをプログラムの結果を出力するウィンドウに変更します。

タブ – ウィンドウ要素間の切り替え。


メインメニューからモード選択状態から編集状態に移行するには、 キーを押す必要があります。 ESC .

プログラムテキストを作成するには、「通常の入力」と同様に、キーボードを使用してこのテキストを入力する必要があります。 次の行を入力したら、 キーを押します。 入力 , カーソルを次の行に移動します。


プログラム構成

プログラムは 3 つの主要な部分で構成されます。

番組タイトル。

説明セクション (契約)。

実行可能部分 (オペレーター)。


機能語

プログラム ;

ラベル ;

定数 ;

タイプ ;

手順 ,

関数


Pascal プログラムには次の「句読点」が含まれています。

  • セミコロン;
  • ドット。

セミコロン演算子を互いに分離する。 ドットプログラムの最後に置かれます。

サービスワード BEGIN および END はセミコロンで演算子と区切られていません。




変数はプログラムの実行中に変更される可能性のある値です。

特定の型の変数または定数を宣言すると、その値が格納されるメモリ内の場所が割り当てられます。

型によって、変数のメモリのサイズと構造が決まります。


データ型は以下を定義します。

  • メモリ内のデータを表す形式。
  • 有効な値のセット。
  • 有効な操作のセット。

変数の説明

変数の説明は、サービスワード VAR (「変数」と訳されます) で始まります。

VAR の後に、プログラム内で見つかったすべての変数の名前が書かれ、各変数が受け入れる権利を持つ値のタイプをコロンで区切って示します。


単純

構造化された

参照

手続き的

物体


単純

種類

序数

本物


単純

順序型

整数型

ブール型

文字の種類


整数型

可能な値の範囲

2147483648... 2147483647


例えば:

a、f、m、n: 整数。


実数型

範囲

2.9*10 -39 ... 1.7*10 38

5.0*10 -45 ... 3.4*10 38

5.0*10 -324 ... 1.7*10 308

3.4*10 -4932 ... 1.1*10 4932


例えば:

a、f、m、n: 実数。


ブール型

ブール データ型は、パラメーター (変数) が True と False の 2 つの値を取ることができるデータ型を表します。


例えば:


文字の種類

記号値とは、キーボードに表示されないものも含め、多くの ASCII コードに含まれる値を意味します。

このタイプの値は、a = ‘d’、r= ‘g’ のようにアポストロフィで書かれます。


列挙型

この型は、パラメータ (変数) の値が一致する一連の識別子によって定義されます。 識別子のリストは括弧内に示され、カンマで区切られます。 型宣言は宣言セクションで行う必要があり、その前にコードワードを置く必要があります。 タイプ .


例えば:

カラー=(黒、白、青、緑、赤)



算術演算

追加

引き算

乗算

実数除算

整数の除算

整数を割ったときの余りを求める


入力演算子

  • 読む;

読み取り (変数名)、

例えば:

(a、b、c) を読み取ります。

この演算子を使用すると、変数値を入力した後、カーソルは同じ期間に留まります。


入力演算子

  • リードリン

Readln (変数名)、

例えば:

Readln (a、b、c)

この演算子を使用すると、データを入力した後、カーソルが新しい行に移動します。


推論演算子

書き込み (「テキスト」、変数名: m、n)

Writeln(‘テキスト’, 変数名: m, n)

例えば:

書き込み (' 合計, C= ', c)

変数値の順次出力。

Writeln 演算子を使用すると、新しい行が入力されます。