Pascal プレゼンテーションの手順。 ABC Pascal による手続き型プログラミング。 手順と機能。 パラメータを渡します。 仮パラメータ

レッスンの目的

教育的

  • 学生の間で手順と機能の概念に関連する統一された概念体系を形成する。
  • Pascal で問題を解決する際にサブルーチンを使用する方法を教え、また、特定の問題を解決するときにどのような種類のサブルーチンが必要かを理解することも教えます。
  • サブルーチンを使用するための基本的なテクニックを示します。

教育的

  • 正確さ、注意力、組織力を養います。
  • コンピューティングスキルの文化。

現像

  • 学生の論理的思考とアルゴリズム文化を発展させます。
  • Pascal でサブルーチンを作成およびデバッグするための知識とスキルを開発します。

学生は次のことを行う必要があります。

  • パラメータを使用しないプロシージャとパラメータを使用するプロシージャを作成するための規則を知っている。
  • 関数を記述するためのルールを知っている。
  • 簡単な問題を解決するために手順と関数を適用できる。

授業中

I.組織。 一瞬

II. 導入。 関連性

課題を紙に書いて配ります( 付録 1 )。 繰り返しを見つけます。

場合によっては、プログラムの異なる場所で、異なる初期データを使用して、ほぼ同じ一連のアクションを実行する必要があります。 このような一連のアクションは、いわゆる次の形式で形式化できます。 サブルーチン (英語から、 サブルーチン) –演算子をブロックにグループ化し、名前で繰り返しアクセスできるようにします。

サブルーチンはプログラムのテキストを短縮し、実行時間を大幅に短縮し、プログラムをモジュール式に作成できるプログラマの作業を容易にします。つまり、完成した単純なコンポーネントから複雑なプログラムを組み立てることができます。 これにより、プログラマーのグループが大規模なプログラムを作成したり、学童のグループがグローバル プロジェクトを開発および実装したりすることができます。

サブルーチンはプロシージャと関数に分かれています。

組み込み (標準) プロシージャと関数は次のとおりです。 一部言語と名前で呼ぶことができます 事前説明なしで。例えば , abs、sqrt、ln、sin... は関数 (結果を返す)、readln、write... はプロシージャ (結果を返さない) です。 これらの存在により、アプリケーション プログラムの開発が大幅に容易になります。 ただし、ほとんどの場合、いくつかの 特定の特定のプログラムのアクションは、Turbo Pascal ライブラリに直接の類似物が見つからないため、プログラマは独自のアクションを開発する必要があります。 規格外の手順と機能。

Ⅲ. 新素材の説明

ユーザーの手順が書かれている 私たち自身プログラマは言語の構文に従って サブルーチン説明セクション。

プロシージャの構造はプログラムの構造に従います。これは「ミニチュア プログラム」であり、ヘッダーとボディによっても表されます。

ヘッダーは予約語プロシージャ、識別子で構成されます。 (名前)手順。

VAR ... // メインプログラムの変数を記述するセクション

プロシージャ プロシージャ名;

//メインプログラムの本体

後続の実行のためのプロシージャ呼び出しが記録される メインプログラムの本体内。

例1. 面積と周囲長を計算するプログラム。

サブルーチンの利点:

  • サブルーチンを使用して書かれたプログラム テストとデバッグが容易になり、彼らにはもっと明確なことがあります 論理構造。
  • サブルーチンは独立した性質を持っているため、その作成をさまざまなプログラマに任せることができます。 このようにして、プログラミング作業が分割されるため、完了が加速されます。
  • サブルーチンを使用するとメモリが節約されます。 サブルーチンで使用される変数を格納するためのメモリは、その操作中にのみ割り当てられ、実行が終了するとすぐに解放されます。

例2。 ユーザーは 3 つの長方形の 2 辺を入力します。 それらの領域を導き出します。

この問題は次のように解決できます。

for i:=1 ~ 3 を実行します

writeln('a と b を入力してください:');

writeln('エリア=',a*b);

プロシージャを使用するのが良いプログラミング スタイルであると考えられています。 長方形の面積を計算する手順が必要です。 メインプログラムの概略図は次のとおりです。

計算

計算

計算

テキスト プロシージャはすでに存在します (例 1 を参照)。 面積を計算する 2 番目のプロシージャを作成しましょう。 ただし、S を計算するには 2 つの辺を知る必要があるため、手順ではどちらの辺を乗算するかを示す必要があります。

プロシージャ pl (c,d: 整数);

writeln('辺を持つ長方形の面積 ',c, ' ,d, '=',S);

パラメータは、値が割り当てられる変数です。 存在する 仮パラメータ 、サブルーチンヘッダーで定義され、 実際のパラメータ – サブルーチンにアクセスするときに特定の値を指定する式。

プロシージャを名前で呼び出し、実際のパラメータを指定すると、プロシージャが実行されます。 , カンマで区切って括弧で囲みます。

実際のパラメータは、形式と数量において形式的なパラメータと一致する必要があります。

したがって、メインプログラムは次のようになります。

for i:=1 ~ 3 を実行します

コメント。この問題を解決するときは、ユーザーが入力した数値を確認する必要があります (負の値であってはなりません。負の数値を指定しないと、プログラムが中断されます)。

検証プロシージャを作成しましょう。

プロシージャエラー (f,g:integer);

if (f<0) or (g<0) then begin

writeln('長方形の辺を負にすることはできません');

停止します。 // プログラムの中断

最終プログラム – 付録 4

したがって、プロシージャの形式は次のようになります。

手順<имя>(仮パラメータ);

<операторы>;

例 3. 2 つの数値 c=5 と d=7 を交換するプログラムを作成します。

プログラム交換ダン。

var c,d:整数;

プロシージャ交換 (a,b:整数);

m:=a; a:=b; b:=m;

writeln("数字を 2 つ入力してください: ");

writeln(c," ",d);

プログラムを開始すると、(プロシージャ内の) 仮パラメータの場所が変更されていますが、(メイン プログラムで使用される) 実際のパラメータは変更されていないことがわかります。 RAM の一部を示す図を見てみましょう。

1) 2 つのパラメータ 5 と 7 を指定して obmen プロシージャを呼び出す場合、変数 a と b にはそれぞれ数値 5 と 7 も含まれます。

3) ただし、変数 c と d ではデータは変更されていません。 それらは他のメモリセルにあります。

変数 c と d、a と b の順に 同じメモリセルを参照しました (a と b の値が変化すると、c、d の値も変化します) 仮パラメータを記述するときは、必須の変数の前に VAR という単語を追加する必要があります。

プロシージャ交換 (var a,b:integer);

obmenDan プログラムを変更します。

var によるエラー。 数値はプロシージャ内で変更できない定数です。

例4. 計算のみを行い、結果を画面に表示しない手順を使用して円の面積を求めます。

プロシージャ円(r:実数);

プロシージャは結果を返す必要があります。

プロシージャサークル (r:実数; var S:実数);

readln(a, e);

コメント:プロシージャ S の変数は、プロシージャの結果をメイン プログラムに返すために使用されます。 それが変更されると、呼び出し側プログラム内の実際のパラメータも変更されます。 変数 e.

Pascal では、多くの場合、プロシージャの代わりに関数 (何かを返すサブルーチン) が使用されます。

機能はプロシージャと似ていますが、2 つの違いがあります。

  • 関数は、その作業の結果、つまり関数の名前をキャリアとする単一の値をプログラムに送信します。
  • 関数名は式のオペランドとして使用できます。 関数は結果を呼び出し時点に返します。

たとえば、 sqr(x) – 値 x を 2 乗し、数値 x の 2 乗の計算値を呼び出しポイントに返します。 y:=sqr(x);

ユーザー定義関数は、関数ヘッダーと関数本体で構成されます。 関数の本体はプログラムと構造が似ています。 ラベル、定数、型などの説明。 この手順の範囲内でのみ有効です。

関数<имя>(仮パラメータ):<тип результата>;

<операторы>;

ステートメント セクションには、関数名に値を割り当てるステートメントが少なくとも 1 つ含まれている必要があります。 最後の割り当ての結果がコール ポイントに返されます。

例5. 円の面積の問題を解き直してみましょう.

関数円 (r:実数): 実数;

a:=circle(5); (必ず割り当ててください)

例6。 1!+2!+…+n! を見つけてください。

階乗を入力として与えて結果を取得するため、階乗を求める関数を使用します。

関数ファクト (a:integer): 整数;

for i:=1 が行うこと

行で、fact:=fact*I;

ファクトはパラメータを指定して呼び出す必要があるため、コンパイラはエラーを検出します。 したがって、通常は、結果が配置される追加の変数が導入されます。 そして、この結果がファクト変数に代入されます。

プログラム階乗;

var sum,n,j: 整数;

関数ファクト (a: 整数): 整数;

変数 i,d: 整数;

for i:=1 が行うこと

for j:=1 to n を行う

合計:=合計+事実(j);

IV. レッスンの概要

この時点で、プログラミングのプロセスは次のようになります。 産業用ソフトウェアの制作ベースの プログラミング技術。 ほとんどの専門家は次のような意見を持っています。 トップダウンのプログラム設計手法複雑な問題を解決するのに最適です。 まず、タスクが一般的な用語で定義され、次にその構造が徐々に明確になります。 次のステップでは、各サブタスクが他のいくつかのサブタスクに分割されます。 複雑な問題の別の部分に対する解決策は、独立したプログラム ブロック、つまりサブルーチンです。

V. 宿題

問題を解決する (書面で):

  1. 入力された文字列内のすべての文字 a を * に置き換えるプロシージャを作成します。
  2. 2つの提案が与えられる。 それらに含まれる文字「n」の合計数を求めます。 (文中の文字「n」の数を計算する関数を定義します。)


サブルーチン V ターボ パスカル


  • サブルーチン これは、名前が付けられ、論理的に完全なコマンドのグループであり、プログラム内のさまざまな場所から何度でも呼び出して実行できます。

ルーチンを使用する理由

  • タスクをいくつかのサブタスクに分解 (分割) することで、大規模なプログラムの開発を簡素化します。
  • プログラムの可視性が向上します。
  • メモリを節約します。

サブルーチンの種類

手順

機能

  • 手順は、特定のアクションを実行するように設計されたプログラムの独立した名前付き部分です。

パラメータのないプロシージャ

  • 記録フォーマット :

手順 ;

終わり ;

  • パラメータのないプロシージャで使用されるすべての変数は、メイン プログラム (Var モジュール内) に記述されます。

. 円柱の体積を求めるプログラムを作成してください。

プログラムシリンダー;

変数 R、H、V: 実数。

プロシージャ入力 ; (データ入力手順)

Writeln('半径値を入力');

writeln('高さの値を入力');

手順式; { 手順 計算 音量 }

V: =PI*sqr(R)*H;

プロシージャの出力 ; (結果出力手順)

writeln('V=',V);


手順 c パラメーター

  • プロシージャでは、定数、変数、およびその他のプロシージャを記述することができます。
  • プロシージャ内の記述部分はプログラム本体と同じ構造になっています。
  • ローカル変数– これらはプロシージャ内で説明されている変数です。
  • ローカル変数には、プロシージャの外部からはアクセスできません。
  • プロシージャ内のローカル変数に発生する変更は、このプロシージャの外に記述されている同じ名前の変数の値には影響しません。

手順 c パラメーター

  • グローバル変数

.

プログラムザダチャ。

変数 a、b: 整数。

ローカルのプロシージャ。

変数 a、x: 文字; のために 手順 地元:

始める 変数 バツ – ローカル変数

あ:=’! '; (プログラムはその値を変更できません)

b:= b +1; 変数 b – グローバル変数

終わり ; (プロシージャ内のこの変数の値に対するすべての変更は、

BEGINは手順終了後も保存されます)

b:=100; 変数 ある メインプログラムで 全体のタイプ

地元 ; そしてプロシージャ内では - シンボリックタイプ。 変数a

writeln('a =', a); 整数型はローカル プロシージャでは使用できません。

writeln('b=',b);

プログラムの実行結果: a=0; b = 101。


); 始める ; 終わり ; "幅=640"

パラメータを渡す ターボ パスカル

  • 1. パラメータを値で渡す
  • パラメータ値 プロシージャ名の後に括弧内に変数を記述します。 それらの前に機能語 Var はありません。
  • 記録フォーマット :

手順 (:

変数);

終わり ;


  • 仮パラメータ .
  • 実際のパラメータ .

.

プログラムパラメータ。

変数 m、n: 整数。

手続きの合計 (a, b: 整数);

writeln('S=',S);

合計(m,n); または summa(100,10);

変数 ある そして b 仮パラメータと変数です メートル そして n - 事実です。 実際のパラメータ値 メートル =100と n =10 が仮パラメータに渡されます ある そして b .

実際のパラメータへの変更はプロシージャ内でのみ発生し、プロシージャの外部には影響しません。


; 変数変数:); 始める ; 終わり ; "幅=640"

パラメータを渡す ターボ パスカル

  • 2. パラメータを名前で渡す
  • 可変パラメータ 変数は、括弧内のプロシージャ名の後に記述され、その前にサービス語 Var が続きます。
  • 記録フォーマット :

手順 (:

変数; ヴァール

変数:);

終わり ;



b の場合、最小:= b; 最小 c の場合、最小:= c; 終わり ; BEGIN writeln('3 つの数字を入力'); readln(a1, b1, c1); writeln('3 つの数字を入力してください'); readln(a2,b2,c2); 最小(a1,b1,c1, min1); 最小(a2,b2,c2,min2); S:= 最小 1 + 最小 2; writeln('S=', S); 終わり。 例。 2 つの数値のトリプル: a 1、b 1、c 1 および a 2、b 2、c 2 が与えられます。合計の値を求めます: S=min (a1, b1, c1) + min (a2, b2, c2) 「幅= 640」

変数 a1、b1、c1、a2、b2、c2、min1、min2、S: 実数。

手続きの最小値 (a、b、c: 実数、Var min: 実数);

最小 b の場合、最小:= b;

最小 c の場合、最小:= c;

writeln('3 つの数字を入力してください');

readln(a1, b1, c1);

writeln('3 つの数字を入力してください');

readln(a2,b2,c2);

最小(a1,b1,c1, min1);

最小(a2,b2,c2,min2);

S:= 最小 1 + 最小 2;

writeln('S=', S);

。 与えられた 2 つの数値のトリプル: a 1、b 1、c 1 および a 2、b 2、c 2。合計の値を求めます: S=min (a1, b1, c1) + min (a2, b2, c2)


関数結果が特定の値になるサブルーチンです。

  • 記録フォーマット :

関数 (:

終わり ;

  • 関数の本体では、関数名をその実行結果に割り当てる必要があります。
  • 関数を呼び出すときは、その名前と実際のパラメータのリストをオペランドとして式に含める必要があります。

プログラム vyrazenie;

関数 modul (a: 実数) : 実数;

writeln('変数値を入力');

y:= modul(x-3) + modul(x+6);

writeln('y=', y);

. 式の値を計算します: y = | x -3 | + | x +6 |

サブルーチン 多くの場合、タスクでは、プログラムのさまざまな部分で特定の一連のステートメントを繰り返す必要があります。 このシーケンスを一度記述して何度も適用するために、プログラミング言語ではサブルーチンが使用されます。 サブルーチンは、メイン プログラムで繰り返し使用するために特別に設計されたプログラムのブロックです。サブルーチンを使用すると、最も最新のプログラミング手法の 1 つである構造化プログラミングを実装できます。


サブルーチンは、プログラミングを大幅に容易にする 3 つの重要な問題を解決します。 1. プログラム テキスト内で同様のフラグメントを繰り返し繰り返す必要がなくなります。 プログラムのサイズを削減します。 2. プログラムの構造が改善され、解析時に理解しやすくなります。 3.エラーの可能性を減らし、プログラミングエラーや変更中の予期せぬ結果に対する耐性を高めます。


プロシージャと関数 Pascal には、プロシージャ (PROCEDURE) と関数 (FUNCTION) の 2 種類のサブルーチンがあります。 Pascal のプロシージャと関数は、変数セクションの後ろの宣言セクションで宣言されます。 プログラムプログラム名; VAR ... // メインプログラムの変数を記述するセクション。 プロシージャ プロシージャ名; var ... begin ...//プロシージャ本体の終了; begin //メインプログラムの本体終了。


関数とプロシージャにはパラメータ (値を渡す変数) があります。 これらには 2 つのタイプがあります: 1) 形式的 - サブルーチンの記述にあるもの 2) 実際的 - メイン プログラムから関数またはプロシージャに転送されるもの。 実際のパラメータは、量、順序、タイプの点で正式なパラメータに対応している必要があります。




プロシージャ プロシージャは、サブルーチン内で複数の結果を取得する必要がある場合に使用されます。 Pascal には、パラメータ付きのプロシージャとパラメータなしのプロシージャの 2 種類のプロシージャがあります。 プロシージャにはプロシージャ名によってアクセスし、その後に実際のパラメータを続けることができます。 プロシージャが呼び出されると、実際のパラメータと仮パラメータの間に 1 対 1 の対応が確立され、制御がプロシージャに移されます。 プロシージャの実行後、プロシージャが呼び出された後、制御は呼び出し側プログラムの次のオペレータに移されます。


例 1: 60 個の星の文字列を出力するパラメーターのないプロシージャ。 手順pr; 変数 i: 整数 ; begin for i:=1 to 60 do write (* "); writeln; end; begin pr; end。


例 2. 2 つの数値 c=5 と d=7 を交換するプログラムを作成します。 var c,d:整数; プロシージャ交換 (a,b:整数); 変数 m:整数; m:=a を開始します。 a:=b; b:=m; writeln(a,b); 終わり; begin writeln("2 つの数字を入力してください: "); readln(c,d); 交換(c,d); writeln(c," ",d); 終わり。 c5 d 7 a 5 b 7 1) 2 つのパラメータ 5 と 7 を指定して obmen プロシージャを呼び出すと、同じ数字 5 と 7 が変数 a と b にそれぞれ配置されます。 2) 次にプロシージャ内のメモリ セルの値a と b は再配置されます: c5 d 7 a 7 b 5 3) しかし、変数 c と d ではデータは変更されていません。 それらは他のメモリセルにあります


変数 c と d、a と b が同じメモリ セルを参照するようにするには (a と b の値が変化すると、c、d の値も変化します)、仮パラメータを記述するときは、必要な変数の前に VAR という単語を追加する必要があります:procedureexchange (var a,b:integer); с5 d 7 a b


例 3. 3 つの異なる整数配列を指定します (それぞれのサイズは 15 を超えません)。 各配列で、要素の合計と算術平均を見つけます。 プログラムプロシージャ; var i、n、sum: 整数; sr: 本物。 プロシージャ作業 (r:integer; var s:integer; var s1:real); var mas: 整数の配列; j:整数; 開始 s:=0; for j:=1 to r do begin read (mas[j]); s:=s+mas [j]; 終わり; s1:=s/r; 終わり;


(メインプログラム) begin for i:=1 to 3 do begin write ("Vvedite razmer",i, "masiva: "); readln(n); work(n, sum, sr); (プロシージャの呼び出し作業) writeln ("Summa elementov = ",sum); writeln("Srednearifmeticeskoe = ",sr:4:1); 終わり; 終わり。


プログラムの結果: プログラムは作業プロシージャを 3 回呼び出します。この際、仮変数 r、s、s1 は実際の n、sum、sr に置き換えられます。 このプロシージャでは、配列要素を入力し、合計と平均を計算します。 変数 s と s1 はメイン プログラムに返されるため、サービス ワード var がそれらの説明の前に置かれます。 ローカルパラメータ mas、j はプロシージャ内でのみ有効です。 グローバル - i、n、sum、sr はプログラム全体で使用できます。


Pascal の関数 Pascal 言語の組み込み関数のセットは非常に多岐にわたります (ABS、SQR、TRUNC など)。 新しい非標準関数がプログラムに含まれる場合は、それをプログラムテキストに記述し、その後プログラムからアクセスできるようにする必要があります。 関数には、関数名と実際のパラメータを示す代入演算子の右側でアクセスします。 関数は、独自のローカル定数、型、変数、プロシージャ、および関数を持つことができます。 Pascal での関数の記述は、プロシージャの記述と似ています。




例 4. 次数 a x のサブルーチン関数を作成します。ここで、a、x は任意の数値です。 次の式を使用してみましょう。 a x = e x ln a プログラム p2; var f、b、s、t、c、d: 実数。 (グローバル変数) 関数 stp (a, x: 実数) : 実数; 変数y: 実数; (ローカル変数) begin y:= exp (x * ln (a)) ; stp:= y;(サブルーチンの計算結果に関数名を付ける) end; (関数の説明完了) begin d:= stp (2.4, 5); (さまざまな数値と変数のべき乗を計算する) writeln (d, stp (5,3.5)); read(f, b, s, t); c:= stp (f, s)+stp (b, t); writeln(c); 終わり。


関数 サブルーチンは、個別の問題を解決するために、別個の構文構造として設計され、名前 (独立したプログラム ブロック) が付けられたプログラムの一部です。 プロシージャの説明:procedure () (ローカル名を実行するセクション) Begin (演算子を実行するセクション) End; 関数の説明: 関数 (): タイプ; (ローカル名を記述するセクション) Begin (実行可能ステートメントのセクション) := ; (必須パラメータ) 終了; プロシージャ呼び出し: (); 関数呼び出し: := (); 1. 代入演算子の右側。 2. 分岐演算子の条件式内。 3. 出力プロシージャ内で、関数の結果として。 サブルーチンの説明 手順


Pascal の再帰プロシージャと関数は、それ自体を呼び出すことができます。 再帰性という性質を持っています。 再帰関数には、プログラムがループしないように、再帰を終了するための条件が必ず含まれている必要があります。 再帰呼び出しごとに、ローカル変数の新しいセットが作成されます。 つまり、呼び出された関数の外側にある変数は変更されません。


1 関数 f (n: 整数): 整数; begin if n = 1 then f:= 1 else f:= n * f (n -1); (関数 f はそれ自体を呼び出します" title="例 5. 次のように数値 n の階乗を計算する再帰関数を作成します。 n! = 1 if n= 1 n!= (n -1)! · n if n > 1 function f (n: integer): integer; begin if n = 1 then f:= 1 else f:= n * f (n -1);" class="link_thumb"> 19 !}例 5. 次のように、数値 n の階乗を計算する再帰関数を作成します。 = 1 n= 1 の場合 n!= (n -1)! · n if n > 1 関数 f (n: 整数): 整数; begin if n = 1 then f:= 1 else f:= n * f (n -1); (関数 f 自体が呼び出されます) end; 1 関数 f (n: 整数): 整数; begin if n = 1 then f:= 1 else f:= n * f (n -1); (関数 f は自分自身を呼び出します"> 1 関数 f (n: 整数): 整数; begin if n = 1 then f:= 1 else f:= n * f (n -1); (関数 f は自分自身を呼び出します) end; " > 1 関数 f (n: 整数): 整数; begin if n = 1 then f:= 1 else f:= n * f (n -1); (関数 f はそれ自体を呼び出します" title="例 5)次のように数値 n の階乗を計算する再帰関数を作成します。 n! = 1 if n= 1 n!= (n -1)! n if n > 1 function f (n: integer): n = 1 の場合 f:= 1 そうでない場合 f:= n * f (n -1);"> title="例 5. 次のように、数値 n の階乗を計算する再帰関数を作成します。 = 1 n= 1 の場合 n!= (n -1)! · n if n > 1 関数 f (n: 整数): 整数; begin if n = 1 then f:= 1 else f:= n * f (n -1); (関数 f は自分自身を呼び出します"> !}



8年生。 ABC Pascal でのプログラミング

ウラリスクNISの情報学教師 物理学および数学ゼレノフ・ボリス・アレクサンドロヴィッチ


  • 学生は手順と関数を使用して問題を解決します
  • 学生は大きな問題を小さな問題に分割して解決することを学びます

  • プログラミング言語でプロシージャと関数の概念を開発します。

  • 学生は「手続き」と「関数」の概念を理解し、形式的パラメータと実際のパラメータを決定します。

期待される結果 - 記述子:

1.「手続き」の定義を知る

2.「機能」の定義を知る

3.実際のパラメータと形式的なパラメータを決定する

4.値パラメータと変数パラメータの区別

5. プログラム コード内のプロシージャまたは関数の呼び出しを検索します。



エルビラのスタンダードプラン

1. 紙類を取り除きます

2. 花に水をやる

3. 机を洗う

4. ガラスを拭きます

アルゴリズムの終わり

このプロセスの組織を改善するにはどうすればよいでしょうか?




レッスンのテーマ

サブルーチン:


イシュキ・バグダルラマ

サブルーチン

手順

手順

パラメータラー

便利なフレーズ:

プロシージャ(関数)に変数の値を渡すには、実際のパラメータが使用されます...

手順を説明するには、まず...、次に...


サブルーチンの概念

意味

サブルーチン- これは、プログラムの機能的に独立した別個の部分です。

サブルーチン

手順


  • プログラムテキスト内で同様の断片を繰り返し繰り返す必要がなくなります。
  • プログラムの構造を改善して理解しやすくします。
  • プログラミングエラーやプログラム変更時の予期せぬ結果に対する耐性が高まります。

  • プログラミング言語を使用してフェンスを描画する

このタスクでは、1 つのフラグメント (ピケット フェンス) を描画するアルゴリズムを実行するプロシージャを作成し、このプロシージャを常に参照してペンの初期位置を変更できます。


  • プログラミング環境で効率的にクリスマス ツリーを描画する方法を説明する

  • これらはプログラムの独立した断片であり、特別な方法で設計され、独自の名前を持っています。

メインプログラムとサブルーチン間の相互作用



ブロック図

  • サブルーチン (プロシージャまたは関数) 呼び出しブロック

サブルーチン(プロシージャまたは関数)名


ブロック図


手順の説明は次のとおりです。

手順 name(仮パラメータのリスト); 説明セクション 始める演算子 終わり ;


関数の説明は次のようになります。

関数名前(仮パラメータのリスト): 戻り値の型;

説明セクション 始める演算子 終わり ;


番組内でのロケ地

プログラム ...;

//説明セクション Uses、Const、Var、...

手順 ;

始める ....... 終わり ;

手順 B ;

始める ........ 終わり ;

機能C ;

始める ........ 終わり ;

//メインプログラム

始める ........ 終わり .


  • 関数とプロシージャの違いは、関数の本体を形成する演算子の実行結果が常に単一の値であるため、関数の呼び出しを変数や定数とともに適切な式で使用できることです。

手順

機能

複数の結果を取得したり、何らかのアクションを実行したりできます

結果は 1 つだけあり、その型は関数の宣言時に個別に指定されます。

結果は、配列、文​​字列、数値など、あらゆるタイプの値になります。

結果は、実数、整数、または文字型の値のみになります。

プロシージャ呼び出しコマンドは、独立して使用できる別個のコマンドです。

関数呼び出しは、適切なタイプの式のコンポーネントとしてのみ使用できます。

関数本体には、左側に関数名を持つ代入演算子が少なくとも 1 つ含まれている必要があります。


b の場合は max:=a、それ以外の場合は max:=b; MaxNumber:= 最大; 終わり;" 幅="640"

手順または機能?

MaxNumber(a,b: 整数): 整数;

var max: 整数;

MaxNumber:= 最大;


b の場合は max:=a、それ以外の場合は max:=b; 終わり;" 幅="640"

手順または機能?

MaxNumber(a,b: 整数; var max: 整数);

ab の場合は max:=a、それ以外の場合は max:=b;


手順または機能?

ChangeColor(C1, C2: Word);

テキストバックグラウンド(C2)


手順または機能?

Add(X, Y: 整数): 整数;


実際の

  • メインプログラムセクションに表示されます

フォーマル

  • サブルーチンで指定
  • サブルーチンで指定

このプロシージャは、次の形式のオペレータによって呼び出されます。

プロシージャ名(実際のパラメータのリスト);

  • 実パラメータ一覧- これはカンマで区切られたリストです。

  • Pascal 言語標準では、パラメータは値渡しと参照渡しの 2 つの方法で渡すことができます。 値によって渡されたパラメータが呼び出されます パラメータ値、参照により送信 - パラメータ変数。 後者は、プロシージャ (関数) ヘッダー内でサービス ワード var が前に付けられる点が異なります。

パラメータを渡します。 仮パラメータ

変数

価値観

値によるパラメータ

仮パラメータ

変数


仮パラメータ

値によるパラメータ

  • 最初の方法 (値渡し) では、実パラメータの値が対応する仮パラメータにコピーされます。

手順

プロシージャ名 (a, b: 整数);

メインプログラム

プロシージャ(関数)の実行中にこれらの値を変更する場合、元のデータ(実際のパラメータ)は変更できません


変数 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


エルヴィラはクラスのリーダーです。 彼女は教室内の一般的な掃除の計画を立てる必要があります。紙を取り除く、花に水をかける、机を洗う、ガラスを拭くなどです。 どうすれば仕事をうまく整理できるでしょうか? エルヴィラを助けて。


エルヴィラの高度な計画

サブルーチン:

アーセン - 書類を片付ける

ミラ - 花に水をやる

ヴィタリー – 机を洗う

インディラ – ガラスを拭く

1. アーセンを処刑する

2. ミラを走らせます

3. ヴィタリーを処刑する

4. インディラを実行する

アルゴリズムの終わり


  • 今日、私たちはどのような新しいプログラミング言語構造に出会ったでしょうか?
  • 調査したパラメータに名前を付けます
  • パラメータはどのようにプロシージャに渡されるのでしょうか?

  • レッスンの概要
  • 定義の検索: 「ローカル変数」と「グローバル変数」
  • プロシージャまたは関数を使用できる 2 つのタスクを構成します。

  • レッスンのテーマはどのように決めますか? (自分の名前を考えてください)
  • 次のレッスンでは何を学ぶべきだと思いますか?

会いましょう

次のレッスン!

スライド 1

スライド 3

サブルーチン: グローバル変数とローカル変数 すべてのサブルーチンは説明セクションで説明する必要があります。 各サブルーチンには名前が必要です。 メインプログラムとサブルーチン間の情報は、プログラムの任意の部分で動作する、メインプログラム内に記述された名前を持つグローバルパラメータ(変数)によって伝達されます。 ローカルパラメータ(変数)はサブルーチン内で使用できます。その名前と値は特定のサブルーチンの境界内でのみ意味を持ち、呼び出し側プログラムでは使用できません。

スライド 4

仮引数と実引数 サブルーチンの記述において、引数を名前のみで表すため、仮引数と呼びます。 サブルーチンが呼び出されるまでは意味がありません。 実際のパラメータ用のスペースのみを予約し、パラメータの数とデータ型を固定します。 実パラメータのタイプ: 値パラメータは、特定のサブルーチン パラメータにどのような値を割り当てる必要があるかを示します。 サブルーチンが終了すると、サブルーチン内で変更された場合でも、前の値が引き継がれます。 サブルーチン内の変数パラメータは正式なパラメータの代わりに使用され、サブルーチンの実行中に値を変更し、サブルーチンを終了するときに変更を保存できます (変数パラメータの前にはキーワード Var が付きます)。

スライド 5

スライド 6

手順の説明 プログラム Pr1; Const...Type...Var...Procedure(); 説明部分 開始手順本体 終了。 始める...(); ... 終わり。 プロシージャが呼び出されると、仮パラメータは実際のパラメータに置き換えられます。

スライド 7

2 つの数値の合計を計算する手順はプログラム pr1; 使用scrt; 変数 a、b、s:実数; プロシージャ summa(x,y:real;var z:real); z:=x+y を開始します。 終わり; clrscr を開始します。 writeln("a,b を入力"); readln(a,b); summa(a,b,s); writeln(" 数値の合計 ",a:3:1" および ",b:3:1," = ",s:3:1); 読み取り; 終わり。 x、y、z – 仮パラメータ、ローカル変数 a、b、s – グローバル変数 a、b、s – 実パラメータ x y z a b s 値パラメータ パラメータ変数

スライド 8

スライド 9

スライド 10

式の値を計算します:=(3n!+2m!)/(m+n)! 階乗を見つけるには、どのタイプの変数を使用するのが適切ですか? プログラムpr2; 使用scrt; 変数 m,n,x,y,z:整数; リアル; プロシージャact(d:integer;var q:integer); 変数 i: 整数; q:=1 を開始します。 i:=1 から d に対して 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); 読み取り; 終わり。 N!=1・2・3・…・N

スライド 11

1 次元配列の要素の入力出力 Random(X) 関数は、整数または実数型の 0 から X までの乱数を生成します (関数を呼び出す前に、Randomize プロシージャを使用して初期化する必要があります)。 X パラメータが指定されていない場合、結果は 0.0 ~ 1.0 の範囲の実数型になります。 範囲ランダム(B-A+1)+A からランダムな整数の配列を取得するには タスク: 乱数発生器 (値の範囲は -10 ~ 20) を使用して、1 次元配列の要素の入力を定式化します。要素をプロシージャとして出力します。 A=-10 B=20 の場合、ランダム(20-(-10)+1)+(-10)

スライド 12

スライド 13

スライド 14

関数の説明 関数は、1 つの値 1 だけを計算するように設計されています。 したがって、最初の違いは、プロシージャでは複数のパラメーターの新しい値を持つことができますが、関数では 1 つだけ (結果になります) を持つことです。 2. 2 番目の違いは、関数のタイトルです。 これは、単語 FUNCTION、その後に関数の名前、その後に括弧内の仮パラメータのリスト、その後にコロンで区切られた関数の結果の型で構成されます。 3. 関数本体には、少なくとも 1 つの代入演算子が含まれている必要があります。関数名が左側に、その値が右側にあります。 関数 (): 説明的な開始関数本体:=; 終わり;

スライド 15

式の値を計算します:=(3n!+2m!)/(m+n)! プログラム fn2; 使用scrt; 変数 m,n:整数; リアル; 関数fact(d:integer) :longint; 変数 i: 整数; q:倍長整数; q:=1 を開始します。 i:=1 から d に対して 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); 読み取り; 終わり。

スライド 16

キーボードから入力された ab、つまり数値 A の b 乗を求めるプログラムを作成します。ここで、A と B は整数、B>0 です。 関数を手続きプログラムpr2に置き換えてプログラムを作成します。 使用scrt; 変数 a,b:整数; c:倍長整数; 関数 stepen(x,y:integer):longint; 変数 i: 整数; s:長い; 開始 s:=1; for i:=1 to y do s:=s*x; ステップ:=s; 終わり; clrscr を開始します。 writeln("値a、bを入力してください"); readln(a,b); C:=ステップ(a,b); writeln("s=",s); 読み取り; 終わり。

スライド 17

スライド 18

パラメータを関数やプロシージャに渡すメカニズム プロシージャによって何が出力され、プログラムによって何が出力されるのでしょうか? グローバル変数 ローカル変数 a b 3 3 -3 アドレス c a b c 48 アドレス c A:=b+3 B:=3*a C:=a+b 状態 C 24 5 8 応答

スライド 19