web counter


https://www.amazon.it/dp/B0CT9YL557

We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Podprogram - Wikipedia, wolna encyklopedia

Podprogram

Z Wikipedii

Podprogram (inaczej funkcja lub procedura) - termin związany z programowaniem proceduralnym. Podprogram to wydzielona część programu wykonująca jakieś operacje. Podprogramy stosuje się, aby uprościć program główny i zwiększyć czytelność kodu.

Spis treści

[edytuj] Rodzaje podprogramów

W pewnych językach programowania dzieli się podprogramy na funkcje i procedury:

  • Funkcja ma wykonywać obliczenia i zwracać jakąś wartość, nie powinna natomiast mieć żadnego innego wpływu na działanie programu (np. funkcja obliczająca pierwiastek kwadratowy)
  • Procedura natomiast nie zwraca żadnej wartości, zamiast tego wykonuje pewne działania (np. procedura czyszcząca ekran)

Przez zwracanie wartości należy rozumieć możliwość użycia wywołania funkcji wewnątrz wyrażenia. Procedury często też zwracają wartości, ale poprzez odpowiednie parametry.

Podział ten występuje w językach takich jak Pascal i Ada. W pozostałych językach (m. in. w C i C++) nie ma już takiego rozróżnienia i funkcją jest każdy podprogram, niezależnie od tego czy zwraca jakieś wartości i czy ma wpływ na program.


[edytuj] Podprogramy wewnętrzne

Różne języki programowania umożliwiają także definiowanie podprogramów wewnętrznych, tzn. podprogramu w innym podprogramie nadrzędnym. Do takich języków należą między innymi Pascal, PL/1, i inne. Nie ma takich możliwości np. w języku C.

[edytuj] Terminologia dotycząca podprogramów

Twórcy języków programowania stosują różne terminologie i oznaczenia podprogramów:

  • w wielu językach programowania, a szczególnie tych, w których występuje tylko jeden rodzaj podprogramu, np. tylko funkcje, nie ma specjalnego oznaczenia (słowa kluczowego) podprogramu, przykładem jest język C i C++,
  • procedury:
    • PROCEDURE, np. Pascal, Ada, Algol, PL/1 (możliwość stosowania skrótu PROC), PROC - Comal,
    • SUBROUTINE, np. Fortran, lub w skróconej postaci SUB, np. Basic i Visual Basic,
    • PART, np. Jean, JOSS, (oznaczenie podprogramu PART stosuje się przy wywoływaniu podprogramu ale nie stosuje się do jego definiowania),
    • PERFORM, np. Cobol,
  • funkcje:

[edytuj] Współprogramy

Współprogramy to procedury wykonywane w taki sposób, że sterowanie może zostać przekazywane pomiędzy nimi wielokrotnie, przy czym wywołanie danego współprogramu powoduje wykonywanie instrukcji od miejsca ostatniego przerwania wykonania (ostatniego punktu wyjścia), a nie od początku. Współprogramy często występują parami i stanowią dwa „równorzędne” podprogramy.

[edytuj] Rodziny podprogramów

Istnieją języki programowania, w których można definiować całą rodzinę podprogramów z jednakową nazwą dla wywołania różnych podprogramów. Do takich języków należą PL/1 i Ada. Nowsze języki umożliwiają zastosowanie takiego mechanizmu poprzez dopuszczenie przeciążenia nazw.

Przykład w PL/1:

 DCL A GENERIC (PR1 WHEN(FLOAT),
                PR2 WHEN(CHAR),
                PR3 WHEN(FLOAT, CHAR),
                PR4 WHEN(LABEL));

W powyższym przykładzie wywołanie procedury A spowoduje w rzeczywistości wywołanie jednej z procedur PR1 .. PR4 w zależności od argumentów wywołania procedury A.

[edytuj] Metody wywołania podprogramu

Wartościową cechą podprogramu jest możliwość wielokrotnego jego wywołania. Wywołanie podprogramu może być:

  • funkcyjne – w wyrażeniu, do którego podprogram zwraca obliczoną wartość,
    • poprzez nazwę z listą argumentów, np. A=B+Func(C); lub
    • wielokrotne (zagłębione), np. L=Trim(Copy(Delete(‘ Ala ‘,3,1),3));

oczywiście taka forma wywołania dotyczy tylko podprogramów mających cechy funkcji, tzn. zwracających wartość,

Konkretne implementacje języków często dopuszczają wywołanie funkcji w postaci proceduralnej, tzn. poza wyrażeniami. W tym przypadku zwracana przez podprogram wartość jest ignorowana – np. jest tak w Borland Pascalu.

[edytuj] Komunikacja podprogramu z otoczeniem

Podprogram jako samodzielna, wydzielona część algorytmu, zazwyczaj (za wyjątkiem prostych operacji, np. czyszczenie ekranu) musi komunikować się z otoczeniem. Taką komunikację realizuje się za pomocą:

  • zmiennych globalnych,
  • argumentów (parametrów aktualnych), przypisywanych zdefiniowanym w podprogramie parametrom (parametrom formalnym),
  • rezultatów funkcji (wartości zwracanych do miejsca wywołania),
  • pól obiektu (dla metod danego obiektu),
  • wyjątków,
  • i innych, rzadko stosowanych i/lub nie zalecanych, jak np.:
    • obszarów wspólnych (nakładanych np. COMMON),
    • zmiennych nakładanych (np. absolute)

[edytuj] Podprogramy w językach programowania

[edytuj] Podprogram w języku Asembler

W języku Asembler podprogram to wydzielona część kodu, do którego przy wywołaniu wykonuje się skok z odłożeniem adresu powrotu na stos, ewentualnie skok bezwarunkowy, a argumenty wywołania są albo odkładane na stos albo umieszczane bezpośrednio w rejestrach. Wartość wynikowa zwracana jest najczęściej w wyznaczonym rejestrze procesora - np. eax dla procesorów zgodnych z architekturą I386.

(składnia intelowska)

call podprogram   ; wywołanie podprogramu
; ... 
podprogram:       ; instrukcje podprogramu
  mov eax, 10h
  mov ebx, 34h
  int 21h
ret               ; powrót funkcji

[edytuj] Podprogram w języku BASIC

W języku Basic (wersje wczesne na komputery 8-bitowe) podprogramem jest ciąg instrukcji rozpoczynający się od wiersza o określonym numerze i zakończony instrukcją RETURN. Wywołanie podprogramu ma formę instrukcji skoku do określonego wiersza. Innym rodzajem podprogramu w Basicu jest definicja funkcji w formie wyłącznie prostego wyrażenia zawartego w jednej linii programu. W późniejszych wersjach Basicu wprowadzono definiowanie parametryzowanych podprogramów (SUB).

 10 DEF SUM(X,Y)=X+Y
 20 GOSUB 50
 30 PRINT "WYNIK: ", A
 40 END
 50 A=SUM(1,2)
 60 RETURN

[edytuj] Podprogram w języku C

int funkcja(/* argumenty */)
{
   // instrukcje do wykonania (ciało funkcji)
   return (/* wyrażenie */);
}

[edytuj] Podprogram w języku Clipper

 [STATIC] FUNCTION identyfikator([parametry])
   [deklaracje lokalne]
   instrukcje
 RETURN wyrażenie
 [STATIC] PROCEDURE identyfikator([parametry])
   [deklaracje lokalne]
   instrukcje
 RETURN

[edytuj] Podprogram w języku Comal

 xx PROC nazwa(parametry) 
     instrukcje
 yy ENDPROC nazwa
   
 gdzie xx i yy to numery wierszy.
 
 Wywołanie: 
 zz EXEC nazwa(argumenty)

[edytuj] Podprogram w języku Forth

Również charakterystyczna składnia języka Forth wyróżnia postać podprogramu w tym języku na tle innych języków programowania. W języku Forth definiujemy słowa. Słowo może być podprogramem do którego argumenty przekazywane są za pośrednictwem stosu (ale słowo może też być zmienną, stałą, nazwą słownika itd.). W poniższym przykładzie definiowany jest trywialny przykład podprogramu POW_3 w języku Forth, który powoduje podniesienie do 3 potęgi argumentu. Jak widać argument (liczba 5) podawany jest przed wywołaniem podprogramu – umieszczony zostaje na stosie – na którym Forth wykonuje operacje: w tym przypadku dwukrotne skopiowanie argumentu i dwukrotne mnożenie. Napis w nawiasie jest komentarzem. Wynik operacji również zostaje umieszczony na stosie i może być wykorzystany do dalszych obliczeń lub zapamiętany w zmiennej.

 ( POW_3, a -- b )
 : POW_3 DUP DUP * * ;
 5 POW_3

[edytuj] Podprogram w języku Fortran 77

Rodzaje podprogramów:

  • funkcje wewnętrzne (wbudowane)
  • funkcje lokalne, zdefiniowane w jednej instrukcji
 identyfikator([parametry])=wyrażenie
  • podprogramy zewnętrzne
    • procedury
 SUBROUTINE  identyfikator(parametry)
   deklaracje
   instrukcje
 END
    • funkcje
 typ FUNCTION identyfikator([parametry])
   [deklaracje]
   instrukcje
 END

[edytuj] Podprogram w języku Jean (oraz JOSS)

W języku Jean (oraz JOSS) każda instrukcja poprzedzona jest etykietą składającą się z dwóch części (liczby całkowite): PART.STEP. Wszystkie instrukcja poprzedzone jednakową etykietą PART tworzą bezparametrową procedurę.

1.1 DEMAND N
1.2 DEMAND A(I) FOR I=1(1)N
1.3 SET T=0
1.4 LET SUM(A,B)=A+B
1.5 DO PART 2 FOR I=1(1)N
1.6 TYPE T
2.1 SET T=SUM(T,A(I)) IF A(I)>0
2.2 SET T=T+1
DO PART 1

Tak jak podprogram można również użyć pojedynczej instrukcji poprzez wywołanie o postaci:

1.7 DO STEP 1.1

Ponadto w języku Jean można definiować funkcje w postaci prostych wyrażeń (podobnie jak w języku Basic):

4.1 LET SINX(X,A)=X+SIN(A)

[edytuj] Podprogram w języku Logo

  • Procedura:
 to square :side
 repeat 4 [fd :side rt 90]
 end
  • Zmienna z listą poleceń:
 make "inst [fd 40 rt 90]
 run :inst

[edytuj] Podprogram w języku MCPL

 FUN name
   : [P, …, Pn] => Clist
  [: …
   : P, …, Pxn => Clist-x]
 .
 MATH | EVERY [(args)]
    : P, …, Pn => Clist
   [: …
    : P, …, Pxn => Clist-x]
 .

Język posiada także mechanizmy umożliwiające definiowanie korutyn.

[edytuj] Podprogram w języku Modula 2

 PROCEDURE nazwa([lista_paramertów])
   deklaracje lokalne
 BEGIN
   instrukcje
 END
 PROCEDURE nazwa([lista_paramertów]): typ;
   deklaracje lokalne
 BEGIN
   instrukcje
   RETURN wyrażenie
 END

[edytuj] Podprogram w języku Pascal

Jako procedura:

procedure Procedura( {argumenty} );
begin
   { instrukcje do wykonania }
end;

Jako funkcja:

function Funkcja( {argumenty} ) : integer; { typ wartości funkcji }
begin
   { instrukcje do wykonania (ciało funkcji) }
end;

[edytuj] Podprogram w języku PHP

// definicja podprogramu, w PHP5 możliwe określenie klasy bazowej zmiennej $wejscie
function nazwapodprogramu($wejscie) { 
 
// zawartość podprogramu

return $wyjscie; // zwrócenie wartości
} // koniec podprogramu

[edytuj] Podprogram w języku PL/1

W języku PL/1 podprogram definiowany jest w postaci procedury. Podobnie jak danym, procedurom nadaję się różne atrybuty, wśród których można użyć frazy RETURNS(typ), która nadaje procedurze właściwości funkcji określając równocześnie typ zwracanej wartości.

Charakterystyczną cechę podprogramu w PL/1 jest to, że oprócz – występującej w większości języków programowania – możliwości zdefiniowania wielu punktów wyjść podprogramu (instrukcja RETURN i END), istnieje możliwość wyspecyfikowania wielu punktów wejść (zwanych w nomenklaturze PL/1 ingresjami) do podprogramu i to z różnymi parametrami i atrybutami (podobne możliwości wprowadzono w Fortranie IV).

 /* ingresja główna – początek procedury */
 nazwa: PROC (parametry) opcje i atrybuty;
        deklaracje
        instrukcje
        …
        /* ingresja poboczna – kolejny punkt wejścia do procedury */
        nazwa_1: ENTRY (parametry) opcje i atrybuty;
        deklaracje
        instrukcje
        …
        /* ingresja poboczna – kolejny punkt wejścia do procedury */
        nazwa_n: ENTRY (parametry) opcje i atrybuty;
        deklaracje
        instrukcje
        …
 END [nazwa];

[edytuj] Podprogram w języku Prolog

Podprogram w języku Prolog (Turbo Prolog) ma charakterystyczną postać, wynikającą z właściwości tego języka logiki. Nagłówek podprogramu deklarowany jest w sekcji PREDICATES, natomiast definicja podprogramu znajduje się w sekcji CLAUSES i może składać się z wielu faktów i reguł. Podprogram w tym języku jest więc zawsze predykatem, nawet jeśli ma on charakter czysto operacyjny (np. instrukcje wejścia-wyjścia, graficzne itp.).

Przykład:

 PREDICATES
   rodzic(symbol, symbol)
   ojciec(symbol, symbol)
   …
 CLAUSES
   rodzic(Adam, Janusz).
   rodzic(Adam, Katarzyna).
   rodzic(Anna, Piotr).
   …
   ojciec(Przodek, Potomek) :- rodzic(Przodek, Potomek), mężczyzna(Przodek).
   …

[edytuj] Podprogram w języku Python

Podprogram w Pythonie nazywany jest funkcją. Przykład (wcięcia, ze względu na specyfikę składni języka sa istotne!):

def funkcja(parametr_pozycyjny,*nienazwane_parametry,**nazwane_parametry):
      "Łańcuch dokumentacji opisujący działania funkcji" 
      print nienazwane_parametry
      print nazwane_parametry
      return parametr_pozycyjny

Możliwe wywołanie (argumenty nienazwane muszą się znaleźć przed nazwanymi):

print funkcja("Hello World!",123,None,argument="wartosc")

...i jego rezultat:

(123,None)
{'argument': 'wartosc'}
Hello World!

Gdy funkcja jest definiowana jako metoda obiektu, pierwszym parametrem zawsze jest ten obiekt (tradycyjnie nazywany self, jednak język tego nie wymaga).

[edytuj] Podprogram w języku S

  • procedura:
 Sub nazwa(parametry) 
 deklaracje
 Enter
   instrukcje
 Leave
  • funkcja:
 Def nazwa(parametry) as typ
 deklaracje
 Enter
   instrukcje
 Leave

[edytuj] Podprogram w języku Snobol

 * FUNCKJA ODWRACAJĄCA KOLEJNOŚĆ
 * ZNAKÓW W NAPISIE
       DEFINE('REV(X)C') :(K.REV)
 REV   X LEN(1).C=       :F(RETURN)
       REV=REV(X) C      :(RETURN)
 K.REV

[edytuj] Podprogram w języku Visual Basic

 [Public | Private] [Static] Function nazwa([lista_parametrów]) [As typ]
 instrukcje 
 …
 [nazwa=wyrażenie]
 … 
 [Exit Function]
 …
 End Function
 [Public | Private] [Static] Sub nazwa([lista_parametrów])
 instrukcje 
 …
 [Exit Sub]
 …
 End Sub

[edytuj] Zobacz też

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2006 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Sub-domains

CDRoms - Magnatune - Librivox - Liber Liber - Encyclopaedia Britannica - Project Gutenberg - Wikipedia 2008 - Wikipedia 2007 - Wikipedia 2006 -

Other Domains

https://www.classicistranieri.it - https://www.ebooksgratis.com - https://www.gutenbergaustralia.com - https://www.englishwikipedia.com - https://www.wikipediazim.com - https://www.wikisourcezim.com - https://www.projectgutenberg.net - https://www.projectgutenberg.es - https://www.radioascolto.com - https://www.debitoformtivo.it - https://www.wikipediaforschools.org - https://www.projectgutenbergzim.com