Acasă / Prezentare generală Windows / Prezentarea procedurilor și funcțiilor în recursiunea Pascal. Proceduri și funcții în Pascal. Recursiune. Subrutine Adesea, o sarcină vă cere să repetați o anumită secvență de instrucțiuni în diferite părți ale programului. Trecerea parametrilor. Parametri formali

Prezentarea procedurilor și funcțiilor în recursiunea Pascal. Proceduri și funcții în Pascal. Recursiune. Subrutine Adesea, o sarcină vă cere să repetați o anumită secvență de instrucțiuni în diferite părți ale programului. Trecerea parametrilor. Parametri formali

Subrutine Adesea, o sarcină necesită repetare o anumită secvență operatori din diferite părți ale programului. Pentru a descrie această secvență o dată și a o aplica de mai multe ori, limbajele de programare folosesc subrutine. Un subrutine este un bloc special conceput al unui program pentru utilizarea repetată ulterioară în programul principal. Utilizarea subrutinelor vă permite să implementați unul dintre cele mai multe metode moderne programare – programare structurată


Subrutinele rezolvă trei probleme importante care facilitează foarte mult programarea: 1. elimină necesitatea de a repeta în mod repetat fragmente similare în textul programului, adică. reduce dimensiunea programului; 2. va îmbunătăți structura programului, făcându-l mai ușor de înțeles la parsare; 3.reduceți probabilitatea erorilor, creșteți rezistența la erori de programare și consecințe neprevăzute în timpul modificării.


Proceduri și funcții Există două tipuri de subrutine în Pascal: procedură (PROCEDURE) și funcție (FUNCȚIE). Procedurile și funcțiile în Pascal sunt declarate în secțiunea de declarații din spatele secțiunii variabile. ProgramProgramName; VAR ... // secțiune pentru descrierea variabilelor programului principal; procedura ProcedureName; var ... begin ...//Procedure body end; start //corpul programului principal final.


Funcțiile și procedurile au parametri (variabile care trec o valoare). Sunt de două tipuri: 1) Formale - cele care sunt în descrierea subrutinei 2) Actuale - cele care sunt transferate din programul principal într-o funcție sau procedură. Parametrii efectivi trebuie sa corespunda celor formali ca cantitate, ordine si tip.




Proceduri Procedurile sunt utilizate atunci când o subrutină trebuie să obțină mai multe rezultate. Există două tipuri de proceduri în Pascal: proceduri cu parametri și fără parametri. O procedură este accesată de numele procedurii, care poate fi urmată de parametrii actuali. Când este apelată o procedură, se stabilește o corespondență unu-la-unu între parametrii actuali și formali, apoi controlul este transferat procedurii. După ce procedura este executată, controlul este transferat următorului operator al programului apelant după apelarea procedurii.


Exemplul 1: O procedură fără parametri care tipăriază un șir de 60 de stele. procedura pr; var i: întreg ; începe pentru i:=1 până la 60 scrie (* "); scrieln; sfârșit; începe pr; sfârșit.


Exemplul 2. Creați un program pentru schimbarea a două numere c=5 și d=7 program obmenDan; var c,d:intger; schimb de proceduri (a,b:întreg); var m:întreg; începe m:=a; a:=b; b:=m; scrieln(a,b); Sfârşit; begin writeln("Introduceți 2 numere: "); readln(c,d); schimb (c,d); scrieln(c," ",d); Sfârşit. c5 d 7 a 5 b 7 1) la apelarea procedurii obmen cu doi parametri 5 și 7, aceleași numere 5 și 7 sunt plasate în variabilele a și respectiv b: 2) apoi în procedură valorile memoriei celulele a și b sunt rearanjate: c5 d 7 a 7 b 5 3) dar în variabilele c și d datele nu s-au schimbat, deoarece sunt în alte celule de memorie


Pentru ca variabilele c și d, a și b să se refere la aceleași celule de memorie (dacă se schimbă valorile lui a și b, atunci și valorile lui c, d se vor schimba), atunci când se descriu parametrii formali, este necesar să adăugați cuvântul VAR înaintea variabilelor cerute: schimb de procedură (var a,b:întreger); с5 d 7 a b


Exemplul 3. Având în vedere 3 matrice diferite de numere întregi (dimensiunea fiecăruia nu depășește 15). În fiecare tablou, găsiți suma elementelor și media aritmetică. program proc; var i, n, sumă: întreg; sr: real; procedura de lucru (r:integer; var s:integer; var s1:real); var mas: matrice de numere întregi; j:întreg; începe s:=0; pentru j:=1 la r începe să citească (mas[j]); s:=s+mas[j]; Sfârşit; s1:=s/r; Sfârşit;


(programul principal) begin for i:=1 to 3 do begin write ("Vvedite razmer",i, "masiva: "); readln(n); munca(n, suma, sr); (apel procedura de lucru) writeln ("Summa elementov = ",sum); writeln("Srednearifmecheskoe = ",sr:4:1); Sfârşit; Sfârşit.


Rezultatul programului: Programul apelează de trei ori procedura de lucru, în care variabilele formale r, s, s1 sunt înlocuite cu n, sum, sr real. Procedura introduce elemente de matrice, calculează suma și media. Variabilele s și s1 sunt returnate programului principal, astfel încât cuvântul de serviciu var este plasat înaintea descrierii lor. Parametrii locali mas, j sunt validi numai în procedură. Global - i, n, sum, sr sunt disponibile pe tot parcursul programului.


Funcții în Pascal Setul de funcții încorporate în limbajul Pascal este destul de larg (ABS, SQR, TRUNC etc.). Dacă în program este inclusă o funcție nouă, non-standard, atunci aceasta trebuie descrisă în textul programului, după care poate fi accesată din program. O funcție este accesată în partea dreaptă a operatorului de atribuire, indicând numele funcției și parametrii actuali. O funcție poate avea propriile sale constante locale, tipuri, variabile, proceduri și funcții. Descrierea funcțiilor în Pascal este similară cu descrierea procedurilor.




Exemplul 4. Scrieți o funcție de subrutină de gradul a x, unde a, x sunt orice numere. Să folosim formula: a x = e x ln un program p2; var f, b, s, t, c, d: real; (variabile globale) function stp (a, x: real): real; var y: real; ( variabile locale) begin y:= exp (x * ln (a)) ; stp:= y;(atribuirea unui nume de funcție rezultatului calculelor subrutinei) end; (descrierea funcției completă) begin d:= stp (2.4, 5); (calcularea puterilor diferitelor numere și variabile) writeln (d, stp (5,3.5)); citiți (f, b, s, t); c:= stp (f, s)+stp (b, t); scrieln(c); Sfârşit.


Funcții O subrutină este o parte a unui program, concepută ca o structură sintactică separată și prevăzută cu un nume (un bloc de program independent), pentru rezolvarea problemelor individuale. Descrierea procedurii: procedura () (secțiunea pentru executarea numelor locale) Început (secțiunea pentru executarea operatorilor) Sfârșit; Descrierea funcției: funcția (): tip; (secțiune pentru descrierea numelor locale) Begin (secțiune pentru instrucțiunile executabile) := ; (parametru obligatoriu) Sfârșit; Apel de procedură: (); Apel de funcție: := (); 1. În partea dreaptă a operatorului de atribuire. 2. În expresia în starea operatorului de ramificare. 3. În procedura de ieșire, ca rezultat al funcției. Descrierea subrutinelor Proceduri


Procedurile de recursivitate și funcțiile din Pascal se pot numi singure, de exemplu. au proprietatea recursivității. O funcție recursivă trebuie să conțină în mod necesar o condiție pentru terminarea recursivității, astfel încât să nu provoace bucla programului. Fiecare apel recursiv creează un nou set de variabile locale. Adică, variabilele situate în afara funcției apelate nu sunt modificate.


1 functie f (n: intreg): intreg; începe dacă n = 1 atunci f:= 1 altfel f:= n * f (n -1); (funcția f se autoinvocă" title="Exemplu 5. Creați o funcție recursivă care calculează factorialul numărului n astfel: n! = 1 dacă n= 1 n!= (n -1)! · n dacă n > 1 funcția f (n: întreg): întreg începe dacă n = 1 atunci f:= 1 else f:= n * f (n -1);" class="link_thumb"> 19 !} Exemplul 5. Creați o funcție recursivă care calculează factorialul numărului n astfel: n! = 1 dacă n= 1 n!= (n -1)! · n dacă n > 1 funcţie f (n: întreg): întreg; începe dacă n = 1 atunci f:= 1 altfel f:= n * f (n -1); (funcția f se numește) sfârșit; 1 functie f (n: intreg): intreg; începe dacă n = 1 atunci f:= 1 altfel f:= n * f (n -1); (funcția f se numește pe sine"> 1 funcția f (n: întreg): întreg; începe dacă n = 1 atunci f:= 1 altfel f:= n * f (n -1); (funcția f se numește pe sine) sfârșit; " > 1 funcția f (n: întreg): întreg începe dacă n = 1 atunci f:= 1 else f:= n * f (n -1 (funcția f se numește" title="Exemplu 5). . Creați o funcție recursivă care calculează factorialul numărului n după cum urmează: n = 1 n! 1 atunci f:= 1 altfel f:= n * f (n -1);"> title="Exemplul 5. Creați o funcție recursivă care calculează factorialul numărului n astfel: n! = 1 dacă n= 1 n!= (n -1)! · n dacă n > 1 funcţie f (n: întreg): întreg; începe dacă n = 1 atunci f:= 1 altfel f:= n * f (n -1); (funcția f se numește singură"> !}




Subrutine V Turbo Pascal


  • Subrutină Acesta este un grup de comenzi numit, complet logic, care poate fi apelat pentru execuție de orice număr de ori din diferite locuri din program.

Motive pentru a folosi rutine

  • simplificarea dezvoltării de programe mari prin descompunerea (împărțirea) unei sarcini în mai multe subsarcini;
  • o mai mare vizibilitate a programului;
  • salvarea memoriei.

Tipuri de subrutine

proceduri

funcții

  • Procedură este o parte independentă numită a unui program conceput pentru a efectua acțiuni specifice.

Proceduri fără parametri

  • Format de înregistrare :

procedură ;

Sfârşit ;

  • Toate variabilele care sunt utilizate în procedurile fără parametri sunt descrise în programul principal (în modulul Var).

Exemplu . Scrieți un program pentru a afla volumul unui cilindru.

Cilindru de program;

Var R, H, V: real;

Intrare procedura ; (procedura de introducere a datelor)

Writeln('introduceți valoarea razei');

writeln('introduceți valoarea înălțimii');

Formula procedurii; { procedură calcule volum }

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

Ieșirea procedurii; (procedura de ieșire a rezultatului)

writeln('V=',V);


Proceduri c parametrii

  • Procedurile pot descrie constante, variabile și alte proceduri.
  • Secțiunea de descriere din proceduri are aceeași structură ca în programul principal.
  • Variabile locale– acestea sunt variabilele descrise în cadrul procedurii.
  • Variabilele locale nu sunt accesibile în afara procedurii.
  • Modificările care apar variabilelor locale în interiorul unei proceduri nu afectează valorile variabilelor cu aceleași nume, dar descrise în afara acestei proceduri.

Proceduri c parametrii

  • Variabile globale

Exemplu .

Program zadacha;

Var a, b: întreg;

Procedura locala;

Var a, x: char; Pentru proceduri local:

ÎNCEPE variabilă x – variabilă locală

a:=’! '; (programul nu își poate schimba valoarea)

b:= b +1; variabilă b – variabilă globală

Sfârşit ; (toate modificările aduse valorii acestei variabile în procedură

BEGIN sunt salvate chiar și după părăsirea procedurii)

b:=100; variabilă o în programul principal un întreg tip

local ; iar într-o procedură – un tip simbolic. Variabila a

writeln('a =', a); tipul întreg nu este disponibil în procedura lokală.

writeln('b=',b);

Rezultatul executiei programului: a=0; b =101.


); ÎNCEPE ; Sfârşit ; "width="640"

Transmiterea parametrilor către Turbo Pascal

  • 1. Transmiterea parametrilor după valoare
  • Parametri-valori variabilele descrise după numele procedurii din paranteze. Nu există niciun cuvânt funcție Var în fața lor.
  • Format de înregistrare :

procedură (:

variabilă);

Sfârşit ;


  • parametri formali .
  • parametrii efectivi .

Exemplu .

Parametrii programului;

Var m, n: întreg;

Procedura suma (a, b: întreg);

writeln('S=',S);

suma(m,n); sau summa(100,10);

Variabile o Şi b sunt parametri formali și variabile m Şi n - faptice. Valorile reale ale parametrilor m =100 și n =10 sunt transmise parametrilor formali o Şi b .

Modificările parametrilor reali apar numai în cadrul unei proceduri și nu le afectează în afara procedurii.


; Variabila Var:); ÎNCEPE ; Sfârşit ; "width="640"

Transmiterea parametrilor către Turbo Pascal

  • 2. Transmiterea parametrilor după nume
  • Parametri variabili variabile descrise după numele procedurii din paranteze și precedate de cuvântul de serviciu Var.
  • Format de înregistrare :

procedură (:

variabilă; Var

variabila:);

Sfârşit ;



b apoi min:= b; dacă min c atunci min:= c; Sfârşit ; BEGIN writeln('introduceți trei numere'); readln(a1, b1, c1); writeln('introduceți trei numere'); readln(a2,b2,c2); minim(a1,b1,c1, min1); minim(a2,b2,c2, min2); S:= min1 + min2; writeln('S=', S); SFÂRŞIT. Exemplu. Având în vedere două triple de numere: a 1, b 1, c 1 și a 2, b 2, c 2. Aflați valoarea sumei: S=min (a1, b1, c1) + min (a2, b2, c2) " width=" 640"

Var a1,b1,c1,a2,b2,c2, min1, min2, S: real;

Minimum de procedură (a,b,c: real; Var min: real);

dacă min b atunci min:= b;

dacă min c atunci min:= c;

writeln('introduceți trei numere');

readln(a1, b1, c1);

writeln('introduceți trei numere');

readln(a2,b2,c2);

minim(a1,b1,c1, min1);

minim(a2,b2,c2, min2);

S:= min1 + min2;

writeln('S=', S);

Exemplu. Având în vedere două triple de numere: a 1, b 1, c 1 și a 2, b 2, c 2. Aflați valoarea sumei: S=min (a1, b1, c1) + min (a2, b2, c2)


Funcţie este o subrutină al cărei rezultat este o anumită valoare.

  • Format de înregistrare :

funcţie (:

Sfârşit ;

  • În corpul funcției, numele funcției trebuie să fie atribuit rezultatului execuției acesteia.
  • La apelarea unei funcții, numele acesteia, împreună cu lista parametrilor actuali, trebuie incluse în expresie ca operand.

Programul vyrazenie;

function modul (a: real): real;

writeln('introduceți valoarea variabilei');

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

writeln('y=', y);

Exemplu . Calculați valoarea expresiei: y = | x -3 | + | x +6 |

Slide 1

Slide 3

Subrutine: variabile globale și locale Toate subrutinele trebuie descrise în secțiunea de descriere. Fiecare subrutină trebuie să aibă un nume. Informațiile dintre programul principal și subrutine sunt transmise prin parametri globali (variabile) care operează în orice parte a programului și au un nume descris în programul principal. Parametrii locali (variabilele) pot fi utilizați în interiorul unei subrutine - numele și valorile lor au semnificație numai în limitele unei anumite subrutine și nu sunt disponibili pentru programul apelant

Slide 4

Parametri formali și actuali În descrierea subrutinelor, parametrii sunt indicați doar prin nume, deci sunt numiți formali. Ele nu au nicio semnificație până când nu este apelată subrutina. Ei rezervă spațiu doar pentru parametrii efectivi, fixându-le numărul și tipul de date. Tipuri de parametri actuali: Parametrii de valoare indică ce valoare trebuie alocată unui parametru de subrutină specific. După terminarea subrutinei, aceștia își preiau valorile anterioare, chiar dacă au fost modificate în subrutină. Parametrii variabili dintr-un subprogram iau locul celor formali, își pot modifica valoarea în timpul execuției subrutinei și pot salva modificările la ieșirea din subprogram (parametrii variabili sunt precedați de cuvântul cheie Var).

Slide 5

Slide 6

Descrierea procedurii Programul Pr1; Const...Type...Var...Procedure(); Partea descriptivă Început Corpul procedurii Sfârșit; ÎNCEPE...(); ... Sfârşit. Când este apelată o procedură, parametrii formali sunt înlocuiți cu cei reali.

Slide 7

Procedura de calcul a sumei a două numere program pr1; Useescrt; Var a,b,s:real; procedura summa(x,y:real;var z:real); începe z:=x+y; Sfârşit; începe clrscr; writeln("introduceți a,b"); readln(a,b); suma(a,b,s); writeln(" suma numerelor ",a:3:1," și ",b:3:1," = ",s:3:1); readln; Sfârşit. x,y,z – parametri formali, variabile locale a,b,s – variabile globale a,b,s – parametri actuali x y z a b s Parametri de valoare Variabila parametru

Slide 8

Slide 9

Slide 10

Calculați valoarea expresiei a:=(3n!+2m!)/(m+n)! Pentru a găsi factorialul, ce tip de variabile este potrivit de utilizat? program pr2; Useescrt; Var m,n,x,y,z:întreg; a:real; procedura fapt (d:intger;var q:intger); var i:intger; începe q:=1; pentru i:=1 la d face q:=q*i; Sfârşit; începe clrscr; writeln("introduceți valorile n, m"); readln(n,m); fapt(n,x); fapt (m,y); fapt (m+n,z); a:=(3*x+2*y)/z; writeln("valoarea expresiei cu m= ",m:4," și n= ",n:4,"este egală cu",a:8:3); readln; Sfârşit. N!=1·2·3·…· N

Slide 11

Ieșirea de intrare a elementelor unui tablou unidimensional Funcția Random(X) generează un număr aleator de la 0 la X de un întreg sau de tip real (înainte de a apela funcția, aceasta trebuie inițializată folosind procedura Randomize). Dacă parametrul X nu este specificat, rezultatul va fi de tip Real în intervalul de la 0,0 la 1,0. Pentru a obține o matrice de numere întregi aleatoare din intervalul aleator(B-A+1)+A Sarcină: Formulați intrarea elementelor unei matrice unidimensionale folosind un generator de numere aleatoare (interval de valori de la -10 la 20) și ieșirea elementelor ca procedură. Pentru A=-10 B=20 aleatoriu(20-(-10)+1)+(-10)

Slide 12

Slide 13

Slide 14

Descrierea funcției Funcțiile sunt concepute pentru a calcula o singură valoare, 1. Prin urmare, prima sa diferență este că procedura poate avea valori noi pentru mai mulți parametri, dar funcția are doar unul (va fi rezultatul). 2. A doua diferență este în titlul funcției. Constă din cuvântul FUNCȚIE, urmat de numele funcției, apoi o listă de parametri formali între paranteze, urmată de tipul rezultatului funcției, despărțiți de două puncte. 3. Corpul funcției trebuie să conțină cel puțin un operator de atribuire, unde partea stângă conține numele funcției, iar partea dreaptă conține valoarea acesteia. Funcție (): Descriptiv Început Funcție body:=; Sfârşit;

Slide 15

Calculați valoarea expresiei a:=(3n!+2m!)/(m+n)! programul fn2; Useescrt; Var m,n:intger; a:real; function fact(d:intger) :longint; var i:intger; q:longint; începe q:=1; pentru i:=1 la d face q:=q*i; fapt:=q; Sfârşit; începe clrscr; writeln("introduceți valorile n, m"); readln(n,m); a:=(3*fapt(n)+2*fapt(m))/fapt(m+n);; writeln("valoarea expresiei cu m= ",m:4," și n= ",n:4,"este egală cu",a:8:3); readln; Sfârşit.

Slide 16

Scrieți un program care va găsi ab, adică gradul bth numerele A, unde A și B sunt numere întregi și B>0, introduse de la tastatură. Compuneți un program prin înlocuirea funcției cu programul de procedură pr2; Useescrt; Var a,b:intger; c:longint; Funcția stepen(x,y:integer):longint; var i:intger; s:lung; începe s:=1; pentru i:=1 la y face s:=s*x; Pasul:=s; Sfârşit; începe clrscr; writeln("introduceți valorile a, b"); readln(a,b); C:=etapa(a,b); writeln("s=",s); readln; Sfârşit.

Slide 17

Slide 18

Mecanism de transmitere a parametrilor la funcții și proceduri Ce se va imprima prin procedură și ce prin program? Variabile globale Variabile locale a b 3 3 -3 Adresa c a b c 48 Adresa c A:=b+3 B:=3*a C:=a+b Starea C 24 5 8 Răspuns

Slide 19

Recursiune în Pascal Profesor: Tlekhurai Yu.V. Instituția municipală de învățământ „Liceul Nr. 8” Ce vedeți în tablouri? Acest fenomen în artă se numește recursiunea „Pentru a înțelege recursiunea, trebuie mai întâi să înțelegeți recursiunea.” recursivitate - definirea parțială a unui obiect prin el însuși, definirea unui obiect folosind cele definite anterior.

Din punct de vedere științific:

Recursiune

- o metodă de definire a unei clase de obiecte sau metode prin specificarea mai întâi a unuia sau mai multor (de obicei simple) dintre cazurile sau metodele sale de bază și apoi specificarea pe baza acestora a regulilor de construcție a clasei care se definește. Recursiune în limbă și literatură Un exemplu clasic de recursivitate infinită este două oglinzi aşezate una vizavi de cealaltă: în ele se formează două coridoare din reflexiile estompate ale oglinzilor. Un alt exemplu de recursivitate infinită este efect de autoexcitare (feedback pozitiv) în circuitele electronice de amplificare , când semnalul de la ieșire ajunge la intrare, este amplificat, ajunge din nou la intrarea circuitului și este din nou amplificat. Amplificatoarele pentru care acest mod de operare este standard se numesc auto-oscilatoare. Un exemplu de intrare din dicționar recursiv: „Preotul avea un câine...” - recursivitate tipică Mai multe povestiri de Stanislaw Lem sunt dedicate incidentelor cu recursivitate infinită: O poveste despre morminte („Jurnalele stelelor lui John the Quiet”), în care eroul trece succesiv de la un articol despre morminte la un articol despre sepulcare, de acolo la un articol despre sepulcarie, care conține din nou o referire la articolul „sepulcaria”. O poveste despre o mașină inteligentă care avea suficientă inteligență și lene pentru a construi una similară pentru a rezolva o anumită problemă și a-i încredința soluția (rezultatul a fost o recursivitate infinită, când fiecare masina noua

a construit unul asemănător ei și i-a predat sarcina).

Recursiunea în programare este o modalitate de organizare a unui proces de calcul în care o procedură sau o funcție se referă la sine în timpul execuției operatorilor săi constitutivi.

Pentru ca un astfel de apel să nu fie nesfârșit, textul subrutinei trebuie să conțină o condiție la atingere, la care nu mai are loc niciun apel. astfel, un apel recursiv poate fi inclus doar într-una din ramurile subrutinei. Descrierea variabilelor: n – numărul de elemente ale seriei; a, b – valorile ultimelor două elemente ale seriei; c – variabilă buffer (“de rezervă”); i – contor. Algoritm pentru rezolvarea problemei: 1. Obțineți valoarea lui n. 2. Atribuiți a și b valorile 0 și respectiv 1 (acestea sunt primele numere ale seriei Fibonacci). Afișează-le pe ecran. 3. Începând de la al 3-lea element până la n: a) afișați suma lui a și b, b) stocați valoarea variabilei b în c, c) scrieți suma lui a și b la b, d) atribuiți lui a valoarea din c. Programul Pascal folosind iterația: programul Fibonacci; var a,b,c,i,n: întreg; ÎNCEPE scrie ("n = "); readln(n); a:= 0; scrie(a," "); b:= 1; scrie(b," "); pentru i:=3 până la n începe scrie (a+b," "); c:= b;<= 1 Then f:= n else f:= f(n– 1) + f(n - 2); end; Program chislaFibonacci; var n,i: integer; a: longint; function fib (n: integer): longint; begin If n <= 1 Then fib:= n else fib:= fib(n– 1) + fib(n - 2); End; begin write(‘n=’); readln(n); for i:=0 to n do begin A:= fib (n); write (‘ ’,a); end; readln; end. Домашнее задание Написать программу нахождения НОД двух натуральных чисел, используя алгоритм Евклида и рекурсию Даны два натуральных числа b:= a + b; a:=c; Sfârşit; readln; b:= a + b;= Sfârşit. Programul Pascal folosind recursiunea: b:= a + b;,Definiția recursivă pentru calcularea numerelor Fibonacci este următoarea: Această definiție a numerelor Fibonacci poate fi ușor convertită într-o funcție recursivă: function f(n: Integer) : longint; readln; b:= a + b;>Sfârşit. Programul Pascal folosind recursiunea: b:= a + b;,începe Dacă n O Şi,b. readln; b:= a + b;< Sfârşit. Programul Pascal folosind recursiunea: b:= a + b;,începe Dacă n O b:= a + b;,Dacă b,

  • apoi nodul (
  • b)=a.
  • b)=
  • nod (

a -b

Sarcină. Creați un program recursiv care să rezolve problema pusă mai sus despre Turnurile din Hanoi cu numărul de discuri egal cu n (n = 1, 2, ...). Soluţie. Să introducem nume pentru turle: a, b, c . Lasă hanoi(n,a,b,c) o- funcția necesară care returnează succesiunea mișcărilor discurilor cu b pe c folosind o- funcția necesară care returnează succesiunea mișcărilor discurilor cu b conform regulilor descrise mai sus. Când n=1 știm cum să rezolvăm problema. Trebuie doar să efectuați operația de „mutare”. o- funcția necesară care returnează succesiunea mișcărilor discurilor cu " Să presupunem că putem rezolva această problemă pentru n – 1 discuri. Mutați n–1 discuri de pe Cu o- funcția necesară care returnează succesiunea mișcărilor discurilor cu b. Apoi, mutați singurul disc de pe care rămâne cși în cele din urmă mutați n–1 discuri din b. pe Date de intrare : numărul de discuri de pe piciorul a; Imprima : succesiunea acțiunilor; Pasul 0:(definiți tipul variabilei); Pasul 1: (descrierea procedurii hanoi, care afișează secvența acțiunilor); Pasul 1.1:(mutați (n-1) discuri de pe piciorul a în pilonul b);

  • Pasul 1.2: (mută al n-lea disc de la a la c);
  • Pasul 1.3:(mutați (n-1) disc de la b la c);
  • (pașii 1.2-1.3 se efectuează recursiv);
  • Pasul 2:(programul principal);
  • Pasul 2.1:(introduceți numărul de discuri);
  • Pasul 2.2: (apelarea procedurii hanoi).
  • Rezolvarea problemei în programul Pascal bahnya; var n: întreg; a,b,c: char;
  • procedura hanoi(n: integer;a,b,c: char); începe dacă n>0 atunci începe hanoi(n-1,a,c,b); writeln ("Peremestit disc so sterzhnya ",a," na sterzhen" ",b); hanoi(n-1,c,b,a); sfârșit; sfârșit; Începe scrierea ("Vvedite naturalnoe chislo n"); readln ( n); a:="a"; b:="c";
  • X
  • Aflați numărul de numere pozitive dintre patru A, B, C, D
Răspunsuri pentru munca independentă Nr. 2 Program simplu;<>var n, m, s: întreg;

funcția prost(m, n:întreg): boolean;

începe Dacă n = m Atunci prost:= adevărat altfel prost:= (n mod m

0) și prost (m+1, n);

Sfârşit; începe scrierea('n=');

Readln(n);

M:=2;


  • Dacă prost(m,n) atunci scrieți (n,’prostoechislo’) Altfel scrieți (n,’sostavnoe’);
  • readln;

  • Sfârşit.

  • traducere de programe;

procedura dvd(n:longint);

Dacă n >1 Atunci dvd (n div 2);

scrie (n mod 2);

clasa a VIII-a. Programare în ABC Pascal

Profesor de informatică la NIS din Uralsk Fizică și Matematică Zelenov Boris Aleksandrovich

Elevii folosesc proceduri și funcții pentru a rezolva probleme



Elevii învață să rezolve probleme mari, împărțindu-le în altele mai mici

Dezvoltați un concept de proceduri și funcții într-un limbaj de programare.

Elevii cunosc conceptele de „proceduri” și „funcții”, determină parametrii formali și actuali

Rezultate așteptate - Descriptori:

1. Cunoaște definiția „procedură”

2. Cunoaște definiția „funcției”

3.Determină parametrii actuali și formali




4. Diferențiază între parametrii valorici și variabili

5. Găsește un apel către o procedură sau o funcție în codul programului


Planul standard al Elvirei

1. Îndepărtați hârtiile

2. Udă florile

2. Udă florile

3. Spălați birourile

4. Ștergeți sticla

Sfârșitul algoritmului

Cum să îmbunătățim organizarea acestui proces?


Subiectul lecției

Subrutine:

Subrutină Ishki bagdarlama

Subrutină

Procedură


  • Parametrul
  • Expresii utile:
  • Pentru a transmite valori variabile unei proceduri (funcție), se folosesc parametrii actuali...

  • Pentru a descrie procedura, trebuie mai întâi..., apoi...

Conceptul de subrutină


  • Definiţie

  • - Aceasta este o parte separată independentă din punct de vedere funcțional a programului.

Subrutine



Proceduri

  • eliminați necesitatea de a repeta în mod repetat fragmente similare în textul programului;

îmbunătățirea structurii programului, făcându-l mai ușor de înțeles;


Proceduri


Descrierea procedurii este următoarea:

procedură nume(lista parametrilor formali); secțiunea descrieri Algoritm pentru rezolvarea problemei: 1. Obțineți valoarea lui n. operatori Sfârşit ;


Descrierea funcției arată astfel:

funcţie nume(lista parametrilor formali): tipul de returnare;

secțiunea descrieri Algoritm pentru rezolvarea problemei: 1. Obțineți valoarea lui n. operatori Sfârşit ;


Locația în program

Program ...;

//Secțiunea Descriere Utilizări, Const, Var, ...

procedură O ;

Algoritm pentru rezolvarea problemei: 1. Obțineți valoarea lui n. ....... Sfârşit ;

procedură B ;

Algoritm pentru rezolvarea problemei: 1. Obțineți valoarea lui n. ........ Sfârşit ;

Funcția C ;

Algoritm pentru rezolvarea problemei: 1. Obțineți valoarea lui n. ........ Sfârşit ;

//Programul principal

Algoritm pentru rezolvarea problemei: 1. Obțineți valoarea lui n. ........ Sfârşit .


  • Diferența dintre o funcție și o procedură este că rezultatul executării operatorilor care formează corpul funcției este întotdeauna o singură valoare, astfel încât apelarea unei funcții poate fi folosită în expresii adecvate împreună cu variabile și constante.

Proceduri

Funcții

Poate avea mai multe rezultate sau poate efectua anumite acțiuni

Are un singur rezultat, al cărui tip este specificat separat la declararea funcției.

Rezultatele pot fi valori de orice tip - matrice, șiruri, numere etc.

Rezultatul poate fi doar o valoare de tip real, întreg sau char.

Comanda de apel de procedură este o comandă separată care poate fi utilizată independent

Un apel de funcție poate fi folosit doar ca o componentă a unei expresii de tipul adecvat.

Corpul funcției trebuie să conțină cel puțin un operator de atribuire cu numele funcției în partea stângă.


b atunci max:=a altfel max:=b; MaxNumber:= max; end;" width="640"

Procedura sau functie?

MaxNumber(a,b: întreg): întreg;

var max: întreg;

MaxNumber:= max;


b atunci max:=a altfel max:=b; end;" width="640"

Procedura sau functie?

MaxNumber(a,b: întreg; var max: întreg);

dacă ab atunci max:=a altfel max:=b;


Procedura sau functie?

ChangeColor(C1, C2: Word);

TextBackGround (C2)


Procedura sau functie?

Adaugă (X, Y: Întreger): Întregul;


Real

  • Indicat în secțiunea principală a programului

Formal

  • Specificat în subrutină
  • Specificat în subrutină

Procedura este apelată de un operator având următorul format:

numele procedurii (lista parametrilor actuali);

  • Lista parametrilor actuali- aceasta este o listă a acestora, separate prin virgule.

  • În standardul limbajului Pascal, parametrii pot fi transmiși în două moduri - prin valoare și prin referință. Parametrii transmiși după valoare sunt apelați parametri-valori, transmis prin referință - parametri-variabile. Acestea din urmă diferă prin aceea că în antetul procedurii (funcției) sunt precedate de cuvântul de serviciu var.

Trecerea parametrilor. Parametri formali

Variabile

Valori

Parametri după valoare

Parametri formali

Variabile


Parametri formali

Parametri după valoare

  • În prima metodă (trecerea după valoare), valorile parametrilor actuali sunt copiate în parametrii formali corespunzători.

2. Udă florile

Numele procedurii (a, b: întreg);

Programul principal

La modificarea acestor valori în timpul executării unei proceduri (funcție), datele originale (parametrii actuali) nu se pot modifica


Var c, d: întreg;

  • La trecerea prin referință, toate modificările care apar în corpul unei proceduri (funcție) cu parametri formali duc la modificări similare imediate ale parametrilor actuali corespunzători.

2. Udă florile

Numele procedurii (a, b: întreg, Var c: real);

Programul principal

La variabilele blocului apelant apar modificări, astfel încât parametrii de ieșire sunt transmisi prin referință. Când sunt apelați, parametrii actuali corespunzători pot fi doar variabile.


Scrieți:

1.Parametrii actuali___________

Procedura Kvad(R: real; var S: real);

2. Parametri formali ___________

3. Parametri-valori formali __________

5. Denumirea procedurii ___________

6. Accesarea unei proceduri din program _____________________


Sarcină interactivă

http://www.bzfar.net/load/podprogrammy_procedury_i_funkcii_parametry/23-1-0-498


Elvira este liderul clasei. Ea va trebui să facă un plan pentru curățenia generală în clasă: îndepărtați hârtiile, udați florile, spălați birourile, ștergeți sticla. Cum își poate organiza mai bine munca? Ajut-o pe Elvira.


Planul avansat al Elvirei

5. Găsește un apel către o procedură sau o funcție în codul programului

Arsen - pune deoparte hârtiile

Mila - udarea florilor

Vitaly – spală birouri

Indira – ștergând paharul

1. Execută-l pe Arsen

2. Fugi Mila

3. Executați Vitaly

4. Rulați Indira

2. Cunoaște definiția „funcției”


  • Ce structuri noi de limbaj de programare am întâlnit astăzi?
  • Denumiți parametrii studiați
  • Cum sunt transferați parametrii unei proceduri?

  • Rezumatul lecției
  • Găsiți definiții: „Variabile locale” și „Variabile globale”
  • Compune două sarcini în care poți folosi proceduri sau funcții.

  • Cum ați determina tema lecției? (vino cu propriul nume)
  • Ce crezi că ar trebui să înveți în lecția următoare?

Să ne întâlnim

următoarea lecție!