パスカルプレゼンテーションの手順。 Pascalの手順と機能。 再帰。 サブルーチン多くの場合、タスクでは、プログラムのさまざまな部分で特定の一連のステートメントを繰り返す必要があります。 パラメータを渡す。 正式なパラメータ
プレゼンテーションのプレビューを使用するには、自分でGoogleアカウント(アカウント)を作成してログインします:https://accounts.google.com
スライドのキャプション:
Pascalの手順と機能。 情報学GBOU学校の教師によって実行される再帰1362Sanina Marina Sergeevna
サブルーチンは、特定のアルゴリズムを実行し、一般的なプログラムのさまざまな部分からそのアルゴリズムにアクセスできるようにするプログラムの自律的な部分です。 サブルーチンを使用すると、最新のプログラミング方法の1つである構造化プログラミングを実装できます。
ルーチンプロシージャ関数プロシージャ関数
Pascalのプロシージャと関数は、変数セクションの後の宣言セクションで宣言されます。
関数とプロシージャにはパラメータ(値を渡す変数)があります。 それらには2つのタイプがあります:1)正式-サブルーチンの説明にあるもの2)実際-メインプログラムから関数またはプロシージャに渡されるもの。 実際のパラメータは、数量、順序、およびタイプが正式なパラメータに対応している必要があります。
また、サブルーチンには変数があります。 彼女はさらに一緒に働きます。 それらは再び2つのタイプに分けられます:1)グローバル変数、つまりプログラム全体で機能する変数2)ローカル-プロシージャまたは関数でのみ機能する変数
手順サブルーチンで複数の結果が必要な場合に使用されます。 手順には2つのタイプがあります。パラメータ付き。 パラメータなし。
プロシージャの構造はプログラムの構造に似ており、ヘッダーとブロック(プロシージャ本体)で構成されています。 プロシージャProcedureName; var…begin…//プロシージャ本体end; begin //メインプログラム本体end。
パラメータのないプロシージャprocedurepr; var i:整数; begin for i:= 1〜60 do write( '* "); writeln;end。beginpr; endこのプログラムは、60個の星の文字列を出力します。
パラメータ手順。 = 5とd = 7の2つの数値を交換するためのプログラムを作成します。プログラムobmenDan; var c、d:整数; プロシージャobmen(a、b:整数); var m:整数; 開始m:= a; a:= b; b:= m; writeln(a、b); 終わり; writelnを開始します( "2つの数字を入力してください:"); readln(c、d); obmen(c、d); writeln(c、 ""、d); 終わり。
問題の分析1)2つのパラメーター5と7を使用してobmenプロシージャーを呼び出す場合、数値5と7もそれぞれ変数aとbに配置されます。c5d 7 a 5 b 7
変数cとd、aとbが同じメモリセルを参照するために(aとbの値が変わると、cとdの値が変わる)、正式なパラメータを記述するときに、次のように追加します必要な変数の前のVARという単語:procedure obmen(var a、b:integer); s 5 d 7 a b
関数Pascal言語の組み込み関数のセットは非常に幅広いです(ABS、SQR、TRUNCなど)。 新しい非標準の関数がプログラムに含まれている場合は、プログラムのテキストで説明する必要があります。その後、プログラムから参照できます。 関数は代入演算子の右側で呼び出され、関数名と実際のパラメーターを示します。 関数は、独自のローカル定数、型、変数、プロシージャ、および関数を持つことができます。 Pascalの関数の説明は、手順の説明と似ています。
関数の特徴:-実行結果-1つの値。関数名に割り当てられ、メインプログラムに転送されます。 -関数の名前をオペランドとして式に含めることができます。
関数の説明:関数():タイプ; (ローカル名を説明するセクション)Begin(実行可能ステートメントのセクション):=; (必須パラメーター)終了;
関数呼び出し:: =(); 1。 代入演算子の右側。 2.分岐演算子の条件での式。 3.出力手順で、関数の結果として。
Pascalの再帰プロシージャと関数は、自分自身を呼び出すことができます。 再帰性の特性を持っています。 プログラムをループさせないために、再帰関数には再帰終了条件が含まれている必要があります。 再帰呼び出しごとに、ローカル変数の新しいセットが作成されます。 つまり、呼び出された関数の外部にある変数は変更されません。
数nの階乗を計算する再帰関数を次のように記述します。n! = 1 if n = 1 n!=(N -1)! n> 1の場合はN
関数f(n:整数):整数; n = 1の場合は開始し、f:= 1の場合はf:= n * f(n -1); (関数fはそれ自体を呼び出します)end;
タスク変数a、b、cの値を変更して、降順ではない順序で配置します(a≤b≤c)。 n個の整数が与えられます。 それらの中から、桁の合計が最大値を持つ数を見つけます。
サブルーチン v Turbo Pascal
- サブルーチン – これは、プログラム内のさまざまな場所から何度でも実行のために呼び出すことができる、名前が付けられた論理的に完全なコマンドのグループです。
サブルーチンを使用する理由
- タスクをいくつかのサブタスクに分解(分割)することにより、大規模なプログラムの開発を簡素化します。
- プログラムの可視性の向上。
- メモリを節約します。
サブルーチンの種類
手順
関数
- 手順特定のアクションを実行するように設計されたプログラムの独立した名前付き部分です。
パラメータなしの手順
- 録音フォーマット :
手順 ;
終わり ;
- パラメータのないプロシージャで使用されるすべての変数は、メインプログラム(Varモジュール内)で説明されています。
例 . シリンダーの体積を見つけるためのプログラムを作成します。
プログラムシリンダー;
Var R、H、V:実数;
手順入力; (データ入力手順)
Writeln( '半径値を入力');
writeln( '高さの値を入力してください');
手順式; { 手順 計算 音量 }
V:= PI * sqr(R)* H;
手順の出力; (結果を表示する手順)
writeln( 'V ='、V);
手順 NS パラメーター
- プロシージャでは、定数、変数、およびその他のプロシージャを記述できます。
- プロシージャの説明セクションは、メインプログラムと同じ構造になっています。
- ローカル変数-これらは、プロシージャ内で記述されている変数です。
- ローカル変数は、プロシージャの外部では使用できません。
- プロシージャ内のローカル変数への変更は、同じ名前の変数の値には影響しませんが、このプロシージャの外部で説明されています。
手順 NS パラメーター
- グローバル変数
例 .
プログラムザダチャ;
変数a、b:整数;
手順lokal;
Var a、x:char; にとって 手順 ロカル:
始める 変数 NS -ローカル変数
a:= ’! '; (プログラムはその値を変更できません)
b:= b +1; 変数 NS -グローバル変数
終わり; (プロシージャ内のこの変数の値に対するすべての変更
BEGINは、プロシージャを終了した後に保存されます)
b:= 100; 変数 NS メインプログラムで – 全体のタイプ、
ロカル; プロシージャでは、文字タイプです。 変数a
writeln( 'a ='、a); 整数型は、lokalプロシージャでは使用できません。
writeln( 'b ='、b);
プログラム実行の結果:a = 0; b = 101。
); 始める; 終わり; "幅=" 640 "
パラメータをに渡す ターボ パスカル
- 1.値によるパラメーターの受け渡し
- 値パラメータ – 括弧内のプロシージャー名の後に記述されている変数。 それらの前にサービスワードVarはありません。
- 録音フォーマット :
手順 (:
変数);
終わり ;
- 正式なパラメータ .
- 実際のパラメータ .
例 .
プログラムパラメータ;
Var m、n:整数;
プロシージャの合計(a、b:整数);
writeln( 'S ='、S);
合計(m、n); またはsumma(100,10);
変数 NS と NS は正式なパラメータであり、変数は NS と NS - 実際。 実際のパラメータの値 NS = 100および NS = 10が正式なパラメータに渡されます NS と NS .
実際のパラメータへの変更は、プロシージャ内でのみ発生し、このプロシージャ外では影響しません。
; 変数変数:); 始める; 終わり; "幅=" 640 "
パラメータをに渡す ターボ パスカル
- 2.名前でパラメータを渡す
- 可変パラメータ – 括弧内のプロシージャー名の後に記述され、サービスワードVarが前に付いている変数。
- 録音フォーマット :
手順 (:
変数; Var
変数 :);
終わり ;
b次にmin:= b; min cの場合、min:= c; 終わり; BEGIN writeln( '3つの数字を入力'); readln(a1、b1、c1); writeln( '3つの数字を入力'); readln(a2、b2、c2); 最小(a1、b1、c1、min1); 最小(a2、b2、c2、min2); S:= min1 + min 2; writeln( 'S ='、S); 終わり。 例。 数の2つのトリプルが与えられた:a 1、b 1、c1とa2、b 2、c2。合計の値を見つけます:S = min(a1、b1、c1)+ min(a2、b2、c2) "幅=" 640 "
変数a1、b1、c1、a2、b2、c2、min1、min2、S:実数;
最小手順(a、b、c:実数;変数最小値:実数);
min bの場合min:= b;
min cの場合、min:= c;
writeln( '3つの数字を入力');
readln(a1、b1、c1);
writeln( '3つの数字を入力');
readln(a2、b2、c2);
最小(a1、b1、c1、min1);
最小(a2、b2、c2、min2);
S:= min1 + min 2;
writeln( 'S ='、S);
例..。 数の2つのトリプルが与えられた:a 1、b 1、c1とa2、b 2、c2。合計の値を見つけます:S = min(a1、b1、c1)+ min(a2、b2、c2)
関数サブルーチンであり、その結果は何らかの値になります。
- 録音フォーマット :
関数 (:
終わり ;
- 関数の本体では、関数の名前にその実行結果を割り当てる必要があります。
- 関数を呼び出すときは、実際のパラメーターのリストを含む名前をオペランドとして式に含める必要があります。
プログラムvyrazenie;
関数モジュラス(a:実数):実数;
writeln( '変数の値を入力してください');
y:=モジュラー(x-3)+モジュラー(x + 6);
writeln( 'y ='、y);
例 . 式の値を計算します。y= | x -3 | + | x +6 |
8年生。 ABCPascalプログラミング
情報学の教師NISUralsk FMN Zelenov Boris Aleksandrovich
- 生徒は手順と機能を使用して問題を解決します
- 生徒は大きな問題を小さな問題に分解することで解決することを学びます
- プログラミング言語でプロシージャと関数の概念を形成します。
- 学生は「手順」と「関数」の概念を知っており、正式なパラメータと実際のパラメータを定義します
期待される結果-記述子:
1.「手順」の定義を知っている
2.「機能」の定義を知っている
3.実際のパラメータと正式なパラメータを定義します
4.値パラメータと変数パラメータを区別します
5.プログラムコード内のプロシージャまたは関数への呼び出しを検索します
エルビラの標準計画
1.紙を取り除く
2.花に水をやる
3.机を洗う
4.ガラスを拭き取ります
アルゴリズムの終わり
このプロセスの構成をどのように改善できますか?
レッスントピック
サブルーチン:
Ішкіbaғdarlama
サブルーチン
手順
手順
パラメータラー
便利なフレーズ:
変数の値をプロシージャ(関数)に転送するために、実際のパラメータが使用されます...
手順を説明するために、最初に....、次に..。
サブルーチンの概念
意味
サブルーチンプログラムの独立した機能的に独立した部分です。
サブルーチン
手順
- プログラムテキストで同様のフラグメントを繰り返し繰り返す必要がなくなります。
- プログラムの構造を改善し、理解しやすくします。
- プログラムの変更中のプログラミングエラーや予期しない結果に対する耐性を高めます。
- プログラミング言語を使用してフェンスを描く
このタスクでは、1つのフラグメント(ピケットフェンス)を描画するためのアルゴリズムを実行するプロシージャを作成し、このプロシージャを常に参照して、ペンの初期位置を変更できます。
- プログラミング環境でクリスマスツリーの描画を合理的に実行する方法を説明する
- これらはプログラムの独立したフラグメントであり、特別な方法で設計され、独自の名前が付けられています。
メインプログラムとサブルーチン間の相互作用
ブロック図
- サブルーチン呼び出しブロック(手順または関数)
サブルーチン(プロシージャまたは関数)名
ブロック図
手順の説明は次のとおりです。
手順名前(正式なパラメータのリスト); 説明セクション 始める演算子 終わり ;
関数の説明は次のようになります。
関数名前(仮パラメーターのリスト):戻り値タイプ;
説明セクション 始める演算子 終わり ;
プログラム内の場所
プログラム ...;
//説明セクションUses、Const、Var、..。
手順 NS ;
始める ....... 終わり ;
手順 NS ;
始める ........ 終わり ;
関数C ;
始める ........ 終わり ;
//メインプログラム
始める ........ 終わり .
- 関数とプロシージャの違いは、関数の本体を形成する演算子の実行結果が常に単一の値であるため、関数の呼び出しを変数や定数とともに対応する式で使用できることです。
手順
関数
複数の結果が得られるか、何らかのアクションを実行する可能性があります
結果は1つだけで、そのタイプは関数の宣言時に個別に指定されます。
結果は、任意のタイプ、配列、文字列、数値などの値になります。
結果は、real、integer、またはchar型の値のみになります。
プロシージャ呼び出しコマンドは、独立して使用される別個のコマンドです。
関数呼び出しは、適切なタイプの式のコンポーネントとしてのみ使用できます。
関数の本体には、左側に関数の名前を持つ代入演算子が少なくとも1つ含まれている必要があります。
b then max:= a else max:= b; MaxNumber:= max; 終了; "幅=" 640 "
手順または機能?
MaxNumber(a、b:整数):整数;
var max:整数;
MaxNumber:= max;
b then max:= a else max:= b; 終了; "幅=" 640 "
手順または機能?
MaxNumber(a、b:整数; var max:整数);
abの場合はmax:= a else max:= b;
手順または機能?
ChangeColor(C1、C2:Word);
TextBackGround(C2)
手順または機能?
追加(X、Y:整数):整数;
実際の
- メインプログラムセクションに示されています
丁寧
- サブルーチンで示されます
- サブルーチンで示されます
プロシージャは、次の形式でオペレータによって呼び出されます。
プロシージャ名(実際のパラメータのリスト);
- 実際のパラメータのリスト-これはコンマで区切られたリストです。
- Pascal言語標準では、パラメータは値と参照の2つの方法で渡すことができます。 値によって渡されたパラメータは呼び出されます 値パラメータリンクで渡されます- 可変パラメータ..。 後者は、関数ワードvarがプロシージャ(関数)のヘッダーでそれらの前に配置されるという点で異なります。
パラメータを渡す。 正式なパラメータ
変数
その価値
値によるパラメーター
正式なパラメータ
変数
正式なパラメータ
値によるパラメーター
- 最初の方法(値を渡す)では、実際のパラメーターの値が対応する仮パラメーターにコピーされます。
手順
プロシージャ名(a、b:整数);
メインプログラム
プロシージャ(関数)の実行中にこれらの値が変更された場合、初期データ(実際のパラメータ)は変更できません。
Var c、d:整数;
- 参照渡しの場合、仮パラメーターを使用してプロシージャー(関数)の本体で発生するすべての変更は、対応する実パラメーターの即時の同様の変更につながります。
手順
プロシージャ名(a、b:整数、Var c:実数);
メインプログラム
呼び出し元ブロックの変数が変更されるため、出力パラメーターは参照によって渡されます。 呼び出されると、対応する実際のパラメーターは変数のみになります。
あなたが書く:
1.実際のパラメータ___________
手順Kvad(R:実数; var S:実数);
2.正式なパラメータ___________
3.正式なパラメータ値__________
5.手順名___________
6.プログラムの手順を参照する_____________________
インタラクティブタスク
http://www.bzfar.net/load/podprogrammy_procedury_i_funkcii_parametry/23-1-0-498
エルビラはクラスリーダーです。 彼女はクラスで一般的な掃除を行うための計画を立てる必要があります:紙を取り除き、花に水をやり、机を洗い、ガラスを拭きます。 彼女はどのようにして自分の仕事を最もうまく整理することができますか? エルビラを助けてください。
エルビラの高度な計画
サブルーチン:
Arsen-書類を削除します
ミラ-花に水をまく
ヴィタリー-机を洗う
インディラ-ガラスを拭きます
1.Arsenを実行します
2.ミラを実行します
3.Vitalyを実行します
4.Indiraを実行します
アルゴリズムの終わり
- 今日私たちが出会ったプログラミング言語の新しい構造は何ですか?
- 学習したパラメータに名前を付けます
- パラメータはどのようにプロシージャに渡されますか?
- レッスンのまとめ
- 定義を見つける:「ローカル変数」と「グローバル変数」
- プロシージャまたは関数を使用できる2つのタスクを作成します。
- レッスンのトピックをどのように定義しますか? (あなたの名前を思い付く)
- 次のレッスンで何を学ぶべきだと思いますか?
あなたに会う
次のレッスンで!
スライド1
スライド3
サブルーチン:グローバル変数とローカル変数すべてのサブルーチンは、説明セクションで説明する必要があります。 各サブルーチンには名前が必要です。 メインプログラムとサブルーチンの間の情報は、プログラムの任意の部分で有効で、メインプログラムに記述されている名前を持つグローバルパラメータ(変数)によって転送されます。 ローカルパラメーター(変数)はサブルーチン内で使用できます-それらの名前と値は、このサブルーチンの境界内でのみ意味があり、呼び出し元のプログラムでは使用できませんスライド4
仮パラメータと実パラメータサブルーチンの説明では、パラメータは名前だけで示されているため、仮パラメータと呼ばれます。 サブルーチンが呼び出されるまで、これらは意味を持ちません。 それらは実際のパラメータ用のスペースのみを予約し、それらの数とデータ型を固定します。 実際のパラメータータイプ:値パラメーターは、特定のサブルーチンパラメーターに割り当てる値を示します。 サブルーチンが終了すると、サブルーチンで変更された場合でも、以前の値に戻ります。 サブルーチン内の変数パラメーターは正式なパラメーターを置き換えます。サブルーチンの実行中に値を変更し、サブルーチンを終了するときに変更を保存できます(変数パラメーターの前にVarキーワードがあります)。スライド5
スライド6
プログラムPr1手順の説明。 Const ... Type ... Var ... Procedure(); 説明部分開始手順本体終了; 始める ... (); ... 終わり。 プロシージャが呼び出されると、仮パラメータは実際のパラメータに置き換えられます。スライド7
2つの数値の合計を計算する手順プログラムpr1; crtを使用します。 変数a、b、s:実数; プロシージャの合計(x、y:実数; var z:実数); zを開始:= x + y; 終わり; clrscrを開始します。 writeln( "a、bを入力してください"); readln(a、b); 合計(a、b、s); writeln( "数値の合計"、a:3:1、 "および"、b:3:1、 "="、s:3:1); readln; 終わり。 x、y、z-仮パラメーター、ローカル変数a、b、s-グローバル変数a、b、s-実パラメーターхyza bs値パラメーター変数パラメータースライド8
スライド9
スライド10
式aの値を評価します:=(3n!+ 2m!)/(M + n)! 階乗を見つけるには、どのタイプの変数を使用することをお勧めしますか? プログラムpr2; crtを使用します。 Var m、n、x、y、z:整数; リアル; プロシージャファクト(d:整数; var q:整数); var i:整数; 開始q:= 1; for i:= 1 to d do q:= q * i; 終わり; clrscrを開始します。 writeln( "値を入力n、m"); readln(n、m); 事実(n、x); 事実(m、y); 事実(m + n、z); a:=(3 * x + 2 * y)/ z; writeln( "m ="、m:4、 "およびn ="、n:4、 "等しい"、a:8:3での式の値); readln; 終わり。 N!= 1・2・3・…・Nスライド11
1次元配列の要素の入出力ランダム(X)関数は、整数または実数型の0からXまでの乱数を生成します(関数を呼び出す前に、Randomizeプロシージャを使用して初期化する必要があります)。 Xパラメーターが指定されていない場合、結果は0.0から1.0の範囲のReal型になります。 ランダムな範囲(BA + 1)からランダムな整数の配列を取得するには+タスク:乱数ジェネレーター(-10から20までの値の範囲)を使用して1次元配列の要素の入力を実行し、要素をプロシージャとして出力します。 A = -10の場合B = 20ランダム(20-(-10)+1)+(-10)スライド12
スライド13
スライド14
関数の説明関数は1つの値のみを計算するように設計されています。1。したがって、最初の違いは、プロシージャが複数のパラメータに対して新しい値を持つことができ、関数が持つことができるのは1つだけであるということです(これが結果になります)。 2. 2番目の違いは、関数のタイトルにあります。 これは、FUNCTIONという単語とそれに続く関数の名前で構成され、括弧内に正式なパラメーターのリストがあり、その後に関数の結果のタイプがコロンで区切られて書き込まれます。 3.関数の本体には、少なくとも1つの代入演算子が含まれている必要があります。関数の名前は左側にあり、その値は右側にあります。 関数():説明部分開始関数本体:=; 終わり;スライド15
式aの値を評価します:=(3n!+ 2m!)/(M + n)! プログラムfn2; crtを使用します。 Var m、n:整数; リアル; 関数ファクト(d:整数):longint; var i:整数; q:longint; 開始q:= 1; for i:= 1 to d do q:= q * i; 事実:= q; 終わり; clrscrを開始します。 writeln( "値を入力n、m"); readln(n、m); a:=(3 *ファクト(n)+ 2 *ファクト(m))/ファクト(m + n);; writeln( "m ="、m:4、 "およびn ="、n:4、 "等しい"、a:8:3での式の値); readln; 終わり。スライド16
キーボードから入力されたab、つまり数値Aのb乗を検出するプログラムを作成します。AとBは整数で、B> 0です。 関数をプログラムpr2プロシージャに置き換えて、プログラムを作成します。 crtを使用します。 変数a、b:整数; c:longint; 関数stepen(x、y:整数):longint; var i:整数; s:longint; 開始s:= 1; for i:= 1 to y do s:= s * x; スティーブン:= s; 終わり; clrscrを開始します。 writeln( "値a、bを入力してください"); readln(a、b); C:= stepen(a、b); writeln( "s ="、s); readln; 終わり。スライド17
スライド18
パラメータを関数とプロシージャに渡すためのメカニズムプロシージャによって何が出力され、プログラムによって何が出力されますか? グローバル変数ローカル変数ab 3 3-3アドレスca b c48アドレスcA:= b + 3 B:= 3 * a C:= a + b状態C24 58返信スライド19
レッスンの目的
教育
- 手順と機能の概念に関連する概念の統一されたシステムを学生のために形成すること。
- Pascalで問題を解決する際にサブルーチンを使用する方法を教え、特定の問題を解決するときに必要なサブルーチンの種類を理解することを教えます。
- サブルーチンを使用する基本的なテクニックを示します。
教育
- 正確さ、注意、組織を育てます。
- コンピューティングスキルの文化。
現像
- 学生の論理的思考、アルゴリズム文化を発展させる。
- Pascal言語でサブルーチンを作成およびデバッグするための知識とスキルを開発します。
学生は以下を行う必要があります:
- パラメータなしおよびパラメータありのプロシージャを作成するためのルールを知っている。
- 関数を書くためのルールを知っている;
- プロシージャと関数を使用して、単純な問題を解決できるようになります。
授業中
I.Org。 一瞬
II。 序章。 関連性
紙にタスクを発行します( 付録1 )。 リプレイを検索します。
プログラムのさまざまな場所で、異なる初期データを使用して実質的に同じ一連のアクションを実行する必要がある場合があります。 このような一連のアクションは、いわゆる形式化することができます。 サブプログラム (英語から、 サブルーチン)-ステートメントを、名前で複数回参照できるブロックにグループ化します。
サブルーチンは、プログラムのテキストを減らし、実行時間を大幅に短縮し、モジュール式でプログラムを作成できるプログラマーの生活を楽にします。つまり、より単純なコンポーネントの完全な部分から複雑なプログラムを組み立てます。 これにより、プログラマーのグループが大規模なプログラムを作成し、学童のグループがグローバルプロジェクトを開発および実装できるようになります。
サブルーチンは、プロシージャと関数に分けられます。
組み込み(標準)の手順と機能は次のとおりです。 部言語と名前で呼び出すことができます 事前の説明なし。例えば , abs、sqrt、ln、sin ...-関数(結果を返す)、readln、write ...-プロシージャ(結果を返さない)。 それらの存在は、アプリケーションプログラムの開発を大いに促進します。 ただし、ほとんどの場合、 明確なこのプログラムのアクションでは、Turbo Pascalライブラリに直接の類似物が見つからないため、プログラマーは独自のアナログを開発する必要があります。 非標準手順と機能。
III。 新素材の説明
ユーザー手順が書かれています 自分での言語の構文に従ったプログラマー サブルーチンの説明セクション。
プロシージャの構造は、プログラムの構造を繰り返します。これは「ミニチュアプログラム」であり、見出しと本文でも表されます。
ヘッダーは、プロシージャの予約語、識別子で構成されます (名前)手順。
VAR ... //メインプログラムの変数を説明するセクション
プロシージャProcedureName;
//メインプログラム本体
後続の実行のためのプロシージャコールが記録されます メインプログラムの本文にあります。
例1。 面積と周囲長を計算するためのプログラム。
サブルーチンの利点:
- サブルーチンで書かれたプログラム テストとデバッグが簡単、彼らはより明確です 論理構造。
- サブルーチンの独立した性質により、さまざまなプログラマーにそれらのコンパイルを委託することが可能になります。 これにより、プログラミング作業が分離され、完了がスピードアップします。
- サブルーチンを使用すると、メモリを節約できます。 サブルーチンで使用される変数を格納するためのメモリは、その操作の間だけ割り当てられ、実行が終了するとすぐに解放されます。
例2。 ユーザーは、3つの長方形の2つの辺を入力します。 それらの領域を表示します。
あなたはこのような問題を解決することができます:
for i:= 1〜3 do
writeln( ‘aとbを入力してください:’);
writeln( ‘Area =’、a * b);
プロシージャを使用することは、優れたプログラミングスタイルと見なされます。 長方形の面積を計算する手順が必要です。 これは、メインプログラムが概略的にどのように見えるかです。
計算
計算
計算
テキストプロシージャはすでに存在します(例1を参照)。 面積を計算する2番目のプロシージャを作成しましょう。 ただし、Sを計算するには、2つの辺を知る必要があるため、手順では、どちらの辺を乗算するかを示す必要があります。
プロシージャpl(c、d:整数);
writeln(「辺のある長方形の面積」、c、「」、d、「=」、S);
パラメータは、何らかの値が割り当てられた変数です。 存在する 正式なパラメータ サブルーチンヘッダーで定義され、 実際のパラメータ -サブルーチンを参照するときに特定の値を設定する式。
名前で呼び出して実際のパラメータを指定すると、プロシージャが実行されます , カンマで区切り、括弧で囲みます。
実際のパラメーターは、タイプと数量が正式なパラメーターと同じである必要があります。
したがって、メインプログラム:
for i:= 1〜3 do
コメント。この問題を解決するときは、ユーザーが入力した数値を確認する必要があります(負の数であってはなりません。負の数を指定しないと、プログラムが中断されます)。
検証手順を作成しましょう。
プロシージャエラー(f、g:整数);
if(f<0) or (g<0) then begin
writeln(「長方形の辺を負にすることはできません」);
停止; // プログラムの中断
最終プログラム- 付録4
したがって、手順の形式は次のとおりです。
手順<имя>(正式なパラメータ);
<операторы>;
例3。 = 5とd = 7の2つの数の場所を交換するプログラムを作成します。
プログラムobmenDan;
var c、d:整数;
プロシージャobmen(a、b:整数);
m:= a; a:= b; b:= m;
writeln( "2つの数字を入力してください:");
writeln(c、 ""、d);
プログラムを開始した後、(プロシージャ内の)仮パラメータが場所を変更し、実際のパラメータ(メインプログラムで使用される)が変更されていないことがわかります。 RAMの一部を示す画像を考えてみましょう。
1)2つのパラメーター5と7を使用してobmenプロシージャーを呼び出す場合、番号5と7もそれぞれ変数aとbに配置されます。
3)しかし、変数cとdでは、データは変更されていません。 それらは他のメモリ位置にあります。
変数cとdの場合、aとb 同じメモリ位置を参照 (aとbの値が変わると、cとdの両方の値が変わります)正式なパラメーターを説明するときは、必要な変数の前にVARという単語を追加します:
プロシージャobmen(var a、b:整数);
obmenDanプログラムを変更します。
varによるエラー。 数値は、プロシージャ内で変更できない定数です。
例4。 計算するだけで結果を画面に表示しない手順を使用して、円の面積を見つけます。
手順サークル(r:実数);
プロシージャは結果を返す必要があります。
プロシージャサークル(r:実数; var S:実数);
readln(a、e);
コメント:プロシージャSの変数は、プロシージャの結果をメインプログラムに返すために使用されます。 変更されると、呼び出し側プログラムの実際のパラメーターも変更されます。 変数e。
多くの場合、Pascalでは、プロシージャの代わりに関数(何かを返すサブルーチン)が使用されます。
機能は手順と同じですが、2つの違いがあります。
- 関数は、その作業の結果をプログラムに渡します-唯一の値であり、そのキャリアはその関数の名前です。
- 関数名は、オペランドとして式に含めることができます。 この関数は、呼び出しの時点で結果を返します。
たとえば、sqr(x)-xの値を二乗し、数値xの二乗の計算値を呼び出しポイントに返します。y:= sqr(x);
ユーザー定義関数は、ヘッダーと関数本体で構成されます。 関数本体の構造はプログラムに似ています。 ラベル、定数、タイプなどの説明。 この手順の範囲内でのみ有効です。
関数<имя>(正式なパラメータ):<тип результата>;
<операторы>;
演算子セクションには、関数名に値を割り当てる演算子が少なくとも1つ含まれている必要があります。 最後の割り当ての結果は、呼び出しポイントに返されます。
例5。 円の面積に関する問題をやり直しましょう.
関数円(r:実数):実数;
a:=円(5); (必須の割り当て)
例6。 1を見つける!+2!+…+ N!
階乗を入力に与えて結果を取得するため、階乗を見つける関数を使用します。
関数ファクト(a:整数):整数;
for i:= 1 to do
行の事実:=事実* I;
ファクトはパラメーターを使用して呼び出す必要があるため、コンパイラーはエラーを検出します。 したがって、通常、結果が配置される追加の変数が導入されます。 そして、この結果は変数factに割り当てられます。
プログラム階乗;
var sum、n、j:整数;
関数ファクト(a:整数):整数;
var i、d:整数;
for i:= 1 to do
jの場合:= 1からndo
合計:=合計+事実(j);
IV。 レッスンのまとめ
このとき、プログラミングプロセスは次のようになります。 産業用ソフトウェアの生産ベース プログラミング技術..。 ほとんどの専門家は、 トップダウンプログラム設計方式複雑な問題を解決するのに最も便利です。 最初に、タスクは一般的な用語で定義され、次にその構造が徐々に改良されます。 次のステップでは、各サブタスクが他のいくつかのサブタスクに分割されます。 複雑な問題の個別のフラグメントの解決策は、独立したプログラムブロック(サブルーチン)です。
V.宿題
タスクを解決する(書面で):
- 入力した文字列内のすべての文字aを*に置き換えるプロシージャを記述します。
- 2つの文が与えられます。 それらの中の文字「n」の総数を見つけます。 (文中の「n」文字の数を計算する関数を定義します。)