Funcții în C, programare de predare

Subprogramul este un grup numit de operatori rezolvarea oricarei probleme special, este o rutină, puteți începe prin apel în numele, orice număr de ori din diferite locuri ale programului. Rutinele eliberat dezvoltatorii de repetarea de rutină de același tip de cod.







De exemplu, puteți crea o rutină care va imprima toate elementele din matrice și pe ecran. Acum, pentru a obține matrice, destul de o echipa (apel subrutina). În acest caz, matrice și trebuie să fie disponibil în zone ale programului, pe care le numim o subrutină (de exemplu, o matrice poate fi la nivel mondial).

Pentru a putea efectua rutina, nu numai identice, dar, de asemenea, același tip de acțiune (același algoritm, dar cu diferiți parametri), a fost inventat de parametrii mecanismului de transmisie a programului principal la o subrutină. Subrutina folosește unele variabile abstracte (numite argumente sau parametri), valorile specifice sunt definite numai în timpul unui apel subrutină.

De exemplu, folosind o subrutină poate crea parametri care nu numai elementele de imprimare ale matrice a. dar orice altă dimensiune și al cărui nume ne va da de rutină atunci când este numit de parametrii.

apel subrutina se numește o trimitere la acesta, în numele scopul utilizării sale. Challenge - este de a rula subrutina.

Ca o rutină poate pur și simplu efectua o acțiune (de exemplu, prin afișarea unei matrice a ecranului) și returnează un rezultat specific, sub forma de o anumită valoare (de exemplu, pentru a calcula media aritmetică a unei matrice și returnează numărul rezultat). Subrutine se numesc primele proceduri de tip. iar al doilea - funcțiile (arată ca o funcție în matematică, în care o singură valoare este calculată, de asemenea, pentru un număr de argumente). În C ++, toate rutine numite funcții, dar ele pot fi de două tipuri: sau nu să se întoarcă o valoare.

Așa că am concretizării conceptul de funcție:

Funcția - este un anumit grup de operațiuni cu un nume unic, care poate fi:

  1. Numit după nume oriunde în program.
  2. Primiți un anumit set de valori ale programului extern la momentul apelului.
  3. Întoarcere valoare ca urmare a unor tip predeterminat.

funcție poate fi, de asemenea, considerată ca fiind o operațiune care a fost creat de către dezvoltator.

Un exemplu binecunoscut al unei funcții este principala. Este numit în mod automat atunci când începe programul.

Crearea unei funcții

Înainte de o funcție este numit, aceasta trebuie declarată.

  • Tip_rezultata - unele existente (de exemplu, înglobate) tipul de date sau vidul de cuvinte cheie, indicând faptul că funcția de orice semnificație nu se va întoarce.
  • Nume_functie - unic pentru un identificator de spațiu de nume dat.
  • Tip_parN - unele existente (de exemplu, înglobată) tipul de date pentru argumentul N-oro.

Dacă funcția nu returnează nici un rezultat atât. E. este declarată nulă, apelul nu poate fi folosit ca un operand al unei expresii mai complexe (de exemplu, valoarea unei astfel de funcții nu poate atribui ceva).

Determinarea (descriere) a funcției

Definirea sau descrierea funcției conține o listă a operațiunilor care urmează să fie efectuate în cadrul funcției.

definition funcția Block este, de asemenea, numit corpul său.

O funcție nu este declarată sau definită într-un alt (adică, nu se poate declara și de a defini funcții în interiorul principal).

Este evident că toate informațiile disponibile în prototipul funcției se repetă în definiția sa, astfel încât în ​​cazul în care funcția este definită înainte, primul apel, apoi un prototip separat, nu este necesară.

Dar punctul prototip în afară, în cazurile în care funcția va fi descrisă mai târziu în utilizarea lor. De exemplu, puteți declara funcția de a principală, cauza principala, dar descrie doar după principal.

Această caracteristică vă permite să creați programe modulare, codul sursă, care pot fi stocate chiar și în fișiere diferite.

Parametrii formale și reale

Parametrii formale există în stadiul tehnicii și corpul definiției funcției. Acestea sunt date nume și unele caracteristici unice sunt disponibile în variabile locale.

Parametrii reale există în programul principal. Acestea sunt specificate în apelul la funcție în locul formale.

La momentul apelului valorii parametrilor efectivi ai funcției atribuite formale. În consecință, numele parametrilor formale și reale pot fi la fel, acesta nu va provoca un conflict.







variabile locale Suprapunerea și parametrii de obiecte la nivel mondial - unul dintre motivele pentru care nu ar trebui să creeze funcții accesarea obiectelor globale (nu se știe ce va fi numele în următorul, sau programul unei alte persoane care utilizează funcția).

Apeluri prioritare și recursivitate

O funcție poate fi numit într-un alt.

În special, în interiorul corpului funcției dumneavoastră se poate apela. Aceasta se numește recursivitate.

Există, de asemenea, un complex (nested) recursivitate atunci când, de exemplu, funcția A apelează funcția B, și funcția de B - funcția A.

EXEMPLUL recursie simplu (funcția se numește):

Principalul dezavantaj al recursiei - recalcula aceleași valori.

Exemplu: Pentru a calcula cincilea număr Fibonacci de algoritm recursiv, este necesar să se calculeze al patrulea și al treilea numerele lui Fibonacci. Pentru a calcula al patrulea - este necesar să se calculeze a doua și a treia, dar a treia, am luat în considerare pentru calculul a cincea.

Mai mult decât atât, în general, la un moment dat, doar o singură funcție poate fi efectuată până când se întoarce rezultatul - nu începe executarea funcției următoare. Gestionarea programului principal este transferat la funcția, până când funcția finalizează lucrările, de control nu va reveni la programul principal. În special: un bug în funcția se va opri intregul program.

Metode pentru transferarea parametrilor funcției

Anterior, am considerat doar o situație în care funcția se numește valoarea reală a parametrului este copiat într-o variabilă locală, disponibil ca parametru oficial în funcție.

O astfel de metodă de transmitere prin valoarea parametrului are următoarele limitări:

este posibil să se transfere parametrul link pentru eliminarea unor astfel de restricții.

Parametrul a trecut prin referință, este suficient pentru a pune un prototip funcție de semn după tipul de parametru.

În acest caz, chiar dacă numele parametrului formal și meciul real apare nici o problemă:

În cazul în care există o nevoie de a proteja obiectul transmis de modificări în funcție, este descrisă ca un parametru constant.

Funcția poate fi trecut, și indicii.

Matricea poate fi trecut la funcția într-un mod diferit. Prototip Exemplu:

Parametrii corecți conform cărora va fi transmis un pointer la primul element al matrice, a declarat ca o constantă:

Apoi, în cadrul funcției nu am putut muta cursorul la frate.

parametrii default (parametrii opționali)

Seria Pentru parametrii funcției pe creaturi etapă, pot fi specificate valori implicite valoarea substituite în mod automat în cazul în care de asteptare atunci când nu este definit în mod explicit parametrii actuali au fost.

Opțiunea implicită este utilă atunci când funcția este clar în prealabil cu unii dintre parametrii săi vor declanșa mai des.

Cel mai adesea, această funcție va fi utilizată pentru a calcula pătrat. Când trebuie să scrie un apel de genul:

Dar am putea declara o funcție cu parametrii standard după cum urmează:

Acum puteți apela funcția fără a specifica ultimul parametru:

Ceea ce este echivalent cu apelul:

Sau arătând:

Funcția poate avea mai multe valori implicite. De exemplu, ia în considerare prototipul functiei, care ar putea fi copiate de la un rând la altul, deoarece caracterul i-lea și terminând cu n-lea:

Această funcție poate fi apelată cu două, trei sau patru parametri. Dacă apelul este de la 2 parametri, primele 100 de caractere sunt copiate.

Dacă vom specifica 3 parametri în apel, primele două valori vor fi atribuite parametri obligatorii, iar al treilea - la primul opțional. Valorile parametrilor opționali sunt atribuite în ordinea în care apar, de la stânga la dreapta. Nu există nici o oportunitate de a salva valoarea implicită a treilea parametru, cum ar fi valoarea de transfer a acestuia din urmă.

funcţia supraîncărcării

Unicitatea funcția este determinată nu numai de numele ei, ci, de asemenea, setați parametrii și tipul său de retur. C ++ vă permite să creați o funcție cu numele unei pre-existente, cu condiția ca noua caracteristică va fi un set diferit de parametri.

Tipul de întoarcere, deci, poate varia atât, și același lucru (dar nu pot crea funcții cu nume și seturi de valori care diferă numai în tipul de valoare returnată identice).

Supraîncărcarea Funcția este convenabil să se efectueze acțiuni similare pentru diferitele tipuri de valori:

Ce fel de funcție este numit, programul determină pe baza tipurilor de parametrii trecut.

Dar o astfel de apel va cauza o eroare de compilare:

Deși există avtoprivedenie, compilatorul nu poate da seama ce versiune a funcției, vom utiliza.

Dacă vom defini în continuare funcția cu setarea implicită este supraîncărcat, este, de asemenea, să respecte unicitatea în apelul.

Această funcție, deși nu poate fi utilizată o funcție regulată Frac de suprasarcină, pentru că în cazul unui apel Frac (4,3) - nu este clar ce opțiune de a utiliza: prima sau a treia.

template-uri de funcții

Șabloane - limbajul C ++ înseamnă pentru codificarea algoritmilor generalizate, fără referire la unii parametri (de exemplu, tipul de date).

Acum puteți apela funcția după cum urmează:

Tipul va fi determinat automat în funcție de tipul parametrilor actuali. Și puteți specifica în mod explicit ce valoare ar trebui să aibă un tip generic între paranteze unghiulare:

Tipare, după cum se va discuta mai jos, se aplică nu numai funcția, ci și la clase. Cu toate acestea, utilizarea lor pentru clasele nu diferă de utilizarea funcției.

  1. Creați o funcție care va avea parametrii doi întregi a și b. și ca valoare returnează un număr întreg aleator din intervalul [a, b]. C Această funcție este utilizată pentru a umple matrice de 20 întregi și afișa.
  2. Creați o funcție care va spus matrice de lungime a declarat pe ecran în linia de ieșire. Cu funcțiile de prima și a doua programe umple matrici de 10 5 elemnetov fiecare numere aleatoare și pentru a aduce toate cele 5 matrice de pe ecran, fiecare pe o linie separată.
  3. Creați un program care utilizează recursivitate pentru a calcula factorialul unui număr introdus de la tastatura de către utilizator.
  4. Creați funcție care va spune sortare matrice specificat vă lungime prin orice metodă cunoscută.
  5. Intrările de utilizator de la tastatura 7 linii de până la 100 de caractere în lungime. Creați un program care va sorta și linia de afișare pe ecran, în ordine alfabetică. De exemplu, utilizatorul a introdus:

Programul ar trebui să afișeze: