Alprogramok, paraméterátadás

Hasonló dokumentumok
C++ programok fordítása

C vagy C++? Programozási Nyelvek és Fordítóprogramok Tanszék. Pataki Norbert. Programozási Nyelvek I.

C programozás. 6 óra Függvények, függvényszerű makrók, globális és

Informatika terméktervezőknek

A C programozási nyelv II. Utasítások. A függvény.

Programozás C- és Matlab nyelven C programozás kurzus BMEKOKAM603 Függvények. Dr. Bécsi Tamás 6. Előadás

A szemantikus elemzés helye. A szemantikus elemzés feladatai. A szemantikus elemzés feladatai. Deklarációk és láthatósági szabályok

Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r

Programozás C++ -ban

Programozás II. 2. Dr. Iványi Péter

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 5. előadás

C++ Standard Template Library (STL)

Programozás alapjai II. (1. ea) C++

Programozás alapjai II. (1. ea) C++

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

Programozás alapjai II. (1. ea) C++

Bevezetés a programozásba Előadás: A const

PROGRAMOZÁSI NYELVEK - CPP. ELŐADÁS JEGYZET

Pénzügyi algoritmusok

2. előadás Programegység, fordítási egység, könyvtári egység, beágyazás, blokkszerkezet, alprogramok, csomagok

Programozás alapjai. 7. előadás

Az alábbi példában a Foo f(5); konstruktor hívása után mennyi lesz f.b értéke? struct Foo { int a, b; Foo(int c):a(c*2),b(c*3) {} };

1. Alapok. Programozás II

Memóriakezelés, dinamikus memóriakezelés

Programozás II. 4. Dr. Iványi Péter

Programozás II gyakorlat. 4. Öröklődés

1) Hány byte-on tárol a C++ egy karaktert (char)? implementáció-függő ( viszont lásd 79. megjegyzés ) 1 8 4

Challenge Accepted:C++ Standard Template Library

Programozás I. 5. Előadás: Függvények

Eljárások, függvények

Programozási nyelvek (ADA)

Programozás C++ -ban 2007/7

Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)

Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)

Programozás C nyelven FELÜLNÉZETBŐL elhullatott MORZSÁK. Sapientia EMTE

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

Gregorics Tibor Tanácsok modularizált programok készítéséhez 1

Bevezetés a programozásba II. 8. Előadás: Osztályok, objektumok, osztályszintű metódusok

Memóriagazdálkodás. Kódgenerálás. Kódoptimalizálás

Bevezetés, a C++ osztályok. Pere László

Programozás alapjai II. (1. ea) C++

Objektum orientált kiterjesztés A+ programozási nyelvhez

Programozás C és C++ -ban

Programozás alapjai II. (2. ea) C++

Programozás alapjai II. (2. ea) C++

Bevezetés a programozásba I.

3. Osztályok II. Programozás II

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

500. AA Megoldó Alfréd AA 500.

Programozás módszertan p.1/110

Programozási nyelvek Java

C++ referencia. Izsó Tamás február 17. A C++ nyelvben nagyon sok félreértés van a referenciával kapcsolatban. A Legyakoribb hibák:

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós március 3. Széchenyi István Egyetem, Gy r

Gregorics Tibor Modularizált programok C++ nyelvi elemei 1

Programozási Nyelvek: C++

Bevezetés a programozásba. 9. Előadás: Rekordok

Programozási Nyelvek (C++) Összefoglaló

1.1. A forrásprogramok felépítése Nevek és kulcsszavak Alapvető típusok. C programozás 3

C programozási nyelv

1. Bevezetés szeptember 9. BME Fizika Intézet. Szám. szim. labor ea. Tőke Csaba. Tudnivalók. feladat. Tematika. Moodle Házi feladatok

Programozási nyelvek a közoktatásban alapfogalmak II. előadás

C++ Gyakorlat jegyzet 8. óra

A függvények névvel rendelkező utasításcsoportok, melyeknek információkat adhatunk át, és van egy visszatérési értékük.

Programozás alapjai 8.Gy: Program struktúra

Java II. I A Java programozási nyelv alapelemei

A C programozási nyelv V. Struktúra Dinamikus memóriakezelés

Bevezetés a programozásba Előadás: Fordítási egység

Kifejezések. Kozsik Tamás. December 11, 2016

Bevezetés a Programozásba II 3. előadás. Biztonságos adattípusok megvalósítása

Bevezetés a programozásba II. 5. Előadás: Másoló konstruktor, túlterhelés, operátorok

Programozás alapjai 2. (2. ea) C++

Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek

A C programozási nyelv I. Bevezetés

A C programozási nyelv I. Bevezetés

Dinamikus csatolású függvénykönyvtár készítése és használata Plugin-szerű betöltés Egyszeű C++ osztályok készítése

Fejlett programozási nyelvek C++ Iterátorok

Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe

A programozás alapjai

503.AA Megoldo Arisztid 503.A

Programozási nyelvek (ADA)

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

C# nyelv alapjai. Krizsán Zoltán 1. Objektumorientált programozás C# alapokon tananyag. Általános Informatikai Tanszék Miskolci Egyetem

Mérnöki programozás 7. Szerkesztette: dr. Vass Péter Tamás

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

228. AA Default Konstruktor AA 228.

Stack Vezérlés szerkezet Adat 2.

Programozás 1. Dr. Iványi Péter

Objektumok inicializálása

Osztályok. 4. gyakorlat

C++ programozási nyelv

Java III. I I. Osztálydefiníció (Bevezetés)

OOP #14 (referencia-elv)

Eljárások és függvények

A C programozási nyelv III. Pointerek és tömbök.

Algoritmizálás + kódolás C++ nyelven és Pascalban

11. gyakorlat Sturktúrák használata. 1. Definiáljon dátum típust. Olvasson be két dátumot, és határozza meg melyik a régebbi.

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós október 11. Széchenyi István Egyetem, Gy r

A programozás alapjai 1 Rekurzió

Bevezetés a programozásba I.

Átírás:

ELTE Informatikai Kar, Programozási Nyelvek és Fordítóprogramok Tanszék October 24, 2016

Programozási nyelvek

Alprogramok Függvények, eljárások Metódusok Korutinok stb.

Alprogramok Alprogram: olyan nyelvi szerkezet, amelynek segítségével új nevet rendelhetünk egy kódrészlethez, hogy azt később, amikor csak akarjuk, egyszerűen végrehajthassuk. A kódrészlet végrehajtásának kezdeményezése, azaz az alprogram meghívása a kódrészlethez rendelt név (és esetleg paraméterek) megadásával történik.

Példa int max( int a, int b ) if ( a < b ) return b; else return a;... int k = 4; int l = 15; int m = 7; std::cout << max( k, max( l, m ) ) << std::endl;

Alprogramok előnyei Karbantarthatóság, újrafelhasználhatóság Olvashatóság: Azonosító - kifejezi a funkcionalitást Felhasznált változók láthatóságának csökkenése Spagetti kódok csökkentése Fordíthatóság, tesztelhetőség Könyvtárak

Alprogramok: függvények, eljárások A függvények: a paraméterekből kiszámolnak valamilyen információt (pl. max, sin) Az eljárások: a paramétereket átalakítják, nem visszaadják a megváltoztatott információt; (pl. rendezés) A C/C++ nem különbözteti meg a függvényeket és az eljárásokat, minden alprogram függvény. Ha nem akarunk semmilyen információt visszaadni: void visszatérési típust adhatunk meg. A visszatérési értéket nem kötelező eltárolni a hívó oldalon. Tisztaság, mellékhatás, eredmény, megfontolások

Példák std::cout << "Hello" << std::endl; printf( "Hello\n" ); int strlen( const char* s ) const char* p = s; while( \0!= *p ) ++p; return p - s; Max-ot tároló konténer

Bevezetés void f( int s ); // int s: formális paraméter f( 5 ); // 5: aktuális paraméter Megfeleltetés

Fajták Érték-szerint Cím-szerint Eredmény, Érték/Eredmény-szerint Név-szerint

Érték-szerinti paraméterátadás Az alprogram meghívásakor új lokális változó jön létre, ebbe másolódik bele az aktuális paraméter értéke Csak befele közvetít információt Költséges lehet Jellemző: C programozási nyelv

Példa int factorial( int n ) if ( 0 == n ) return 1; else return n * factorial( n - 1 );

Cím-szerinti paraméterátadás Az alprogram a hívó által megadott változóval dolgozik Nincs másolat Információ iránya: kétirányú

Referencia Álnév egy már létező tárterülethez Nem változhat meg, hogy minek az álneve C++-ban nincs null referencia Referencia, konstans referencia const int& kahdeksan = 8;

Példa void swap( int& a, int& b ) int tmp = a; a = b; b = tmp; void swap( int a, int b ) int tmp = a; a = b; b = tmp;

Példa std::vector<int> read() std::vector<int> v; int i; while( std::cin >> i ) v.push_back( i ); return v;

Példa void read( std::vector<int>& v) int i; while( std::cin >> i ) v.push_back( i );

Példa void f( int i ); void g( const int& r ); //... int y = 2; f( 3 ); f( y ); f( y + 4 ); g( 5 ); g( y ); g( y * 2 );

C vs. C++ void swap( int* a, int * b ) int tmp = *a; *a = *b; // a = b; *b = tmp; int k = 4; int r = 7; swap( &r, &k );

Tömbök void reverse( int* p, int n ) for( int i = 0; i < n / 2; ++i ) swap( &p[i], &p[n - 1 - i] );

Eredmény-szerint Új lokális változó jön létre Az alprogram a lokális változót használja Aktuális paraméter egy változó Függvényhívás végén visszamásolja a lokális változó értékét az aktuális paraméterbe Érték/Eredmény-szerint: függvényhívás elején bemásolja az aktuális paraméter értékét az új lokális változóba

Példa Ada példa: procedure swap( a, b : in out Integer ) is tmp : Integer := a; begin a := b; b := tmp; end swap;

Név-szerint paraméterátadás Bonyolult Literál/konstans kifejezés: érték-szerint Skalár változó: cím-szerint Kifejezés: kiértékelődik Fortran, Perl, Preprocesszor

Preprocesszor makrók Nincs paraméterátadás... #define INC(i) ++i #define MAX(a,b) (((a)<(b))?(b):(a)) #define PRINT(x, n) for( int i = 0; i < n; ++i )\ std::cout << (x) << std::endl; //... int i = 4; PRINT( i, 7 );

Deklarációk, definíciók Több fordítási egység Egy fordítási egységen belül Egy definíció, sok deklaráció, One Definition Rule Deklaráció: minimális információ, ami alapján a fordítóprogram a deklarált programegység típusozását kezelni tudja az aktuális fordítási egységben Definíció: pontos megadása a programegységnek

Deklarációk extern int x; void f( int, double ); class Complex;

Definíciók és definíciók int x; void f( int i, double d ) //...

Definíciók és definíciók class Complex private: double re, im; public: double abs(); //... ;

Definíciók / definíciók class Foo private: // csak deklaráció: static int cnt; ; // ford. egysegben, def: int Foo::cnt = 0;

Példák int* p[5]; int (*q)[5]; int *r(int); int (*s)(int);

Példák void fv( int (*p)[ 6 ] ) //... int t[ 4 ][ 6 ]; fv( t );

Azonosítók a lefordított tárgykódban r.cpp: int f() int f( int ) int f( double ) nm r.o 000000000000000f T _Z1fd 0000000000000006 T _Z1fi 0000000000000000 T _Z1fv g++ -c r.cpp

Azonosítók a lefordított tárgykódban r.cpp: int f() double f( void* ) namespace nspace int f( double ) nm r.o 0000000000000006 T _Z1fPv 0000000000000000 T _Z1fv 0000000000000019 T _ZN6nspace1fEd g++ -c r.cpp

Azonosítók a lefordított tárgykódban r.cpp: namespace int f( double ) inline int f() double f( void*, char* ) nm r.o 00...0011 T _Z1fPvPc 00...0000 t _ZN12_GLOBAL N_11fEd g++ -c r.cpp

Azonosítók a lefordított tárgykódban r.cpp: class Class public: int f(void*); ; int Class::f(void*) nm r.o 00...000 T _ZN5Class1fEPv g++ -c r.cpp

Azonosítók a lefordított tárgykódban r.cpp: int x; namespace A int x; class Class static int c; ; nm r.o 000...004 B _ZN1A1xE 000...008 B _ZN5Class1cE 000...000 B x int Class::c; g++ -c r.cpp