Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Hernyák Zoltán Magasszintű Programozási Nyelvek I.

Hasonló előadás


Az előadások a következő témára: "Hernyák Zoltán Magasszintű Programozási Nyelvek I."— Előadás másolata:

1 Hernyák Zoltán Magasszintű Programozási Nyelvek I.
Alprogramok Hernyák Zoltán Web: Magasszintű Programozási Nyelvek I. Eszterházy Károly Főiskola Számítástudományi tsz 1

2 Alprogramok Paraméterek típusai:
Bemenő paraméter: az értéket az alprogram felhasználja Átmenő paraméter: az érték helyén egy egyező típusú változót kell megadni, az alprogram felhasználja a benne lévő értéket, és meg is változtatja Kimenő paraméter: az érték helyén egy egyező típusú változót kell megadni, az alprogram nem használja fel a benne levő értéket, de megváltoztatja 2

3 Alprogramok Bemenő paraméter: static int Osszege( int[] tomb ) {
int sum=0; foreach(int x in tomb) sum+=x; return sum; } static void Main() { int[] a = new int[300]; … feltöltés elemekkel … int x = Osszege(a); int[] b = new int[15]; int z = Osszege(b); } 3

4 Alprogramok Átmenő paraméter: static void Rendezes( int[] tomb ) {
for(int i=0;i<tomb.Length-1;i++) for(int j=i+1;j<tomb.Length;j++) if( tomb[i]>tomb[j]) int z=tomb[i]; tomb[i] = tomb[j]; tomb[j]=z; } static void Main() { int[] a = new int[300]; … feltöltés elemekkel … Rendezes (a); } 4

5 Alprogramok Kimenő paraméter: static void Feltoltes( int[] tomb ) {
Random rnd = new Random(); for(int i=0;i<tomb.Length;i++) tomb[i] = rnd.Next(10,100); } static void Main() { int[] a = new int[300]; Feltoltes (a); } 5

6 Alprogramok Paraméterek típusai:
Bemenő paraméter: az értéket az alprogram felhasználja Alapértelmezett paraméterátadás, nem kell semmilyen extra jelölést használni A hívás helyén egyszerű adattípus esetén akár kifejezést is lehet írni 6

7 Alprogramok Bemenő paraméter: static int Osszead( int a, int b ) {
return a+b; } static void Main() { int x = 13; int f = Osszead( 3, x ); int g = Osszead( f-1, f*2 ); int h = Osszead( Szoroz(2,8)+1 ,f*2 ); } 7

8 Alprogramok Kimenő paraméter:
static void ElsoUtolso( int[] t, int elso, int utolso ) { elso=-1; utolso=-1; for(int i=0;i<t.Length;i++) if (t[i]==0 && elso==-1) elso=i; if (t[i]==0) utolso=i; } static void Main() { int[] h = new int[30]; int a,b; ElsoUtolso(h, a, b); Console.WriteLine(”{0},{1}”,a,b); } 8

9 Alprogramok Kimenő paraméter:
static void ElsoUtolso( int[] t, int elso, int utolso ) { } int a=0,b=0; ElsoUtolso(h, a, b); a b elso utolso elso = a; utolso = b; elindul az alprogram nincs ilyen a = elso ; b = utolso; 9

10 Az ‘out’ kulcsszót mindkét helyen alkalmazni kell!
Alprogramok Kimenő paraméter: static void ElsoUtolso( int[] t, out int elso, out int utolso ) { } int a,b; ElsoUtolso(h, out a, out b); elso utolso Az ‘out’ kulcsszót mindkét helyen alkalmazni kell! a b 10

11 Alprogramok Kimenő paraméter:
static void ElsoUtolso( int[] t, out int elso, out int utolso ) { … } A formális paraméterlistában az ‘out’ azt jelenti, hogy ezen változót nem akárhol kell a memóriában létrehozni, hanem pontosan azon a helyen, ahol az aktuális paraméterlistában megadott változó is van A két változó egy helyen szerepel a memóriában! 11

12 Alprogramok Kimenő paraméter: int a,b; ElsoUtolso(h, out a, out b);
Az aktuális paraméterlistában az ‘out’ azt jelenti, hogy ezen változóknak nem szükséges megelőzően értéket adni, mivel a bennük lévő értékeket az alprogram nem kívánja felhasználni majd Ezen változók értékét az al-program kötelezően meg kell változtassa! 12

13 Az ‘out’ paramétereknek kötelező értéket adni!
Alprogramok Kimenő paraméter: static void ElsoUtolso( int[] t, out int elso, out int utolso ) { for(int i=0;i<t.Length;i++) if (t[i]==0 && elso==-1) elso=i; if (t[i]==0) utolso=i; } The out parameter ‘elso’ must be assigned to before control leaves the current method. Az ‘out’ paramétereknek kötelező értéket adni! A C# fordító nem biztos benne, hogy ez bekövetkezik ebben az esetben (pl ha a t tömb 0 elemszámú, vagy nincs nulla a tömbön belül)! 13

14 Alprogramok Referencia típusú paraméter: 1 1 eletkor | nev | ferfi
static void Oregedes( Hallgato akarki ) { akarki.eletkor++; } Hallgato h = new Hallgato(); h.Eletkor = 20; Oregedes(h); Console.WriteLine(h.eletkor); akarki = h; 1 1 eletkor | nev | ferfi h akarki 1 14

15 Alprogramok Referencia típusú paraméter:
static void Oregedes( Hallgato akarki ) { akarki.eletkor++; } Oregedes(h); A referencia-típusú paraméter-változókra is ugyanaz a szabály, de… A híváskor a kezdőérték beállításakor a memóriacímet veszik át Így rajtuk keresztül elérhető a másodlagos memóriaterület, és meg is változtatható 15

16 Alprogramok Referencia típusú paraméter:
static void Feltoltes( int[] t ) { for(int i=0;i<t.Length;i++) t[i] = i+1; } int[] a = new int[20]; Feltoltes(a); 16

17 Alprogramok Referencia típusú paraméter:
static void Feltoltes( int[] t ) { t = new int[20]; for(int i=0;i<t.Length;i++) t[i] = i+1; } int[] a=null; Feltoltes(a); int[] b=new int[30]; Feltoltes(b); 17

18 Alprogramok Referencia típusú paraméter:
static void Feltoltes( out int[] t ) { t = new int[20]; for(int i=0;i<t.Length;i++) t[i] = i+1; } int[] a; Feltoltes( out a ); int[] b=new int[30]; Feltoltes( out b ); 18

19 Alprogramok Átmenő paraméter:
static void Csere( ref int a, ref int b ) { int z = a; a = b; b = z; } int x=2, y=3; Csere( ref x, ref y ); A referencia-típusú paraméterátadás gyakorlatilag megegyezik a kimenő paraméterek kezelésével De a fordítóprogram megköveteli, hogy hívás előtt már legyen értéke az adott változónak, akit átadunk az eljárásnak! 19

20 Alprogramok Átmenő paraméter:
static void Csere( ref int a, ref int b ) { if (a!=b) int z = a; a = b; b = z; } int x=2, y=3; Csere( ref x, ref y ); Az átmenő paramétereket az eljárás nem kötelezően kell megváltoztatnia! (ellentétben a kimenő paraméterekkel) 20


Letölteni ppt "Hernyák Zoltán Magasszintű Programozási Nyelvek I."

Hasonló előadás


Google Hirdetések