Informatika2-2014/Gyakorlat10

A MathWikiből
(Változatok közti eltérés)
(Új oldal, tartalma: „== Elmélet == * Mivel az előadás előtt járunk, itt a múlt év előadásának anyaga: http://wiki.math.bme.hu/view/Informatika2-2013/Eloadas <c> void f(int a[2])…”)
 
1. sor: 1. sor:
 
== Elmélet ==
 
== Elmélet ==
 +
=== 2013 előadás ===
 
* Mivel az előadás előtt járunk, itt a múlt év előadásának anyaga: http://wiki.math.bme.hu/view/Informatika2-2013/Eloadas
 
* Mivel az előadás előtt járunk, itt a múlt év előadásának anyaga: http://wiki.math.bme.hu/view/Informatika2-2013/Eloadas
 +
=== Függvények ===
  
 +
=== Tömbök ===
 +
* Tömbök esetén "tömbösítve" foglaljuk le a változók helyét a memóriában.
 +
* Példa deklarációra:
 +
<C>
 +
int a[10];
 +
</C>
 +
* Példa inicializálásra:
 +
<C>
 +
int t[10]={6,8,-2,6,123,-8,3,4,2,1};
 +
</C>
 +
* A tömb elemei 0-tól indexelődnek.
 +
* Deklaráláskor tehát '''le kell rögzítenünk egy konstanssal a tömb méretét'''
 +
* Fontos, hogy a méretet csak konstanssal adhatjuk meg. Néhány fordító támogatja a tömb méretének változóval való megadását, de ezt általánosan nem alkalmazhatjuk.
 +
* Ha fordítási időben nem ismert, mekkora tömbre lesz szükség, használjuk dinamikus tömböt. (lsd. később)
 +
* Mindig kötelező a tömbnek méretet adni.
 +
* A tömb nem másolható az = operátorral, végig kell iterálnunk elemenként a két tömbön  másoláskor:
 +
* Lehetőségünk van többdimenziós tömbök deklarálására.
 +
* Többdimenziós tömbök sorfolytonosan tárolódnak a memóriában, tehát a következő két inicializálás (mely egyben példa is) ekvivalens:
 +
<C>
 +
int t[3][4][2]={34,-5,3,20,12,5,-1,0,4,77,12,-3,-14,3,1,23,75,2,10,24,78,1,2,7};
 +
</C>
 +
<C>
 +
int t[3][4][2]={{{34,-5},{3,20},{12,5},{-1,0}},{{4,77},{12,-3},{-14,3},{1,23}},{{75,2},{10,24},{78,1},{2,7}}};
 +
</C>
 +
 +
=== Függvények ===
 +
* Programozásban a '''függvény''' egy nagyobb program forráskódjának része, mely adott feladatot hajt végre, és többször felhasználható anélkül, hogy a program kódjának több példányban is tartalmaznia kellene.
 +
* Függvények használatával
 +
** a többször használt programrészeket csak egyszer kell lekódolni,
 +
** valamint a bonyolult algoritmusok kis részekre bontva áttekinthetővé, kezelhetővé válnak.
 +
* Egy függvény mindig bemenő paraméterek egy értékhalmazát kapja meg és futása után valamilyen visszatérési értéket ad vissza. Itt most a hangsúly az '''értéken''' van mindkét esetben.
 +
* C nyelvben egy függvénynek mindig '''tetszőleges számú és típusú argumentuma, és egyetlen visszatérési értéke van'''.
 +
* A C nyelvben maga a főprogram is függvénybe  kerül, ez a main függvény.
 +
* Az általános felépítés mindig a következő:
 +
<C>
 +
visszatérési-típus függvénynév (argumentumdeklarációk){
 +
  deklarációk és utasítások
 +
}
 +
</C>
 +
* A függvény '''függvényfejből''' és '''függvénytörzsből''' épül fel.
 +
* A '''függvényfej''' megadja a függvény '''típusát''' (milyen típusú adatot ad vissza), a függvény '''nevét''', valamint '''paramétereinek típusát és nevét'''.
 +
<C>
 +
int hatvanyozo(int alap, int kitevo)
 +
</C>
 +
* A '''függvénytörzs''' tartalmazza a függvényt felépítő utasítássorozatot.
 +
<C>
 +
{
 +
  int i;
 +
  for( ... )
 +
  ...
 +
  return ... ;
 +
}
 +
</C>
 +
* A '''függvénydefiníció''' maga a függvény, azaz a függvényfej és a függvénytörzs együtt.
 +
<C>
 +
int hatvanyozo(int alap, int kitevo){
 +
  int i;
 +
  for( ... )
 +
  ...
 +
  return ... ;
 +
}
 +
</C>
 +
 +
* A függvény '''prototípusa''' a függvényfej pontosvesszővel lezárva, paraméternevek nélkül.
 +
<C>
 +
int hatvanyozo(int,int);
 +
</C>
 +
 +
* A '''függvénydeklaráció''' a függvény prototípusa paraméterek nélkül. Csak a függvény típusát és nevét tartalmazza.
 +
<C>
 +
int hatvanyozo();
 +
</C>
 +
* A '''prototípus''' és '''deklaráció''' jelentősége, hogy egy C program csak olyan függvényt tud meghívni, amelynek deklarációja megelőzi a kódban a függvényhívást.
 +
* A C szabvány azt ajánlja, hogy '''ne a deklaráció, hanem az annál több információval bíró prototípus előzze meg a hívás helyét'''.
 +
* '''Nem kell deklaráció vagy  prototípus abban az esetben, ha a hívott függvény definíciója megelőzi a hívás helyét'''.
 +
* Az alábbi két példa mutatja be prototípus használatával és használata nélkül a programkód felépítését:
 +
<C>
 +
#include <stdio.h>
 +
...
 +
 +
int hatvanyozo(int,int);
 +
 +
int main(){
 +
  int a,b,c;
 +
  ...
 +
  c=hatvanyozo(a,b);
 +
  ...
 +
}
 +
 +
int hatvanyozo(int alap, int kitevo){
 +
  ...
 +
}
 +
</C>
 +
 +
<C>
 +
#include <stdio.h>
 +
...
 +
 +
int hatvanyozo(int alap, int kitevo){
 +
  ...
 +
}
 +
 +
int main(){
 +
  int a,b,c;
 +
  ...
 +
  c=hatvanyozo(a,b);
 +
  ...
 +
}
 +
</C>
  
 
<c>
 
<c>

A lap 2014. április 15., 10:01-kori változata

Tartalomjegyzék

Elmélet

2013 előadás

Függvények

Tömbök

  • Tömbök esetén "tömbösítve" foglaljuk le a változók helyét a memóriában.
  • Példa deklarációra:
int a[10];
  • Példa inicializálásra:
int t[10]={6,8,-2,6,123,-8,3,4,2,1};
  • A tömb elemei 0-tól indexelődnek.
  • Deklaráláskor tehát le kell rögzítenünk egy konstanssal a tömb méretét
  • Fontos, hogy a méretet csak konstanssal adhatjuk meg. Néhány fordító támogatja a tömb méretének változóval való megadását, de ezt általánosan nem alkalmazhatjuk.
  • Ha fordítási időben nem ismert, mekkora tömbre lesz szükség, használjuk dinamikus tömböt. (lsd. később)
  • Mindig kötelező a tömbnek méretet adni.
  • A tömb nem másolható az = operátorral, végig kell iterálnunk elemenként a két tömbön másoláskor:
  • Lehetőségünk van többdimenziós tömbök deklarálására.
  • Többdimenziós tömbök sorfolytonosan tárolódnak a memóriában, tehát a következő két inicializálás (mely egyben példa is) ekvivalens:
int t[3][4][2]={34,-5,3,20,12,5,-1,0,4,77,12,-3,-14,3,1,23,75,2,10,24,78,1,2,7};
int t[3][4][2]={{{34,-5},{3,20},{12,5},{-1,0}},{{4,77},{12,-3},{-14,3},{1,23}},{{75,2},{10,24},{78,1},{2,7}}};

Függvények

  • Programozásban a függvény egy nagyobb program forráskódjának része, mely adott feladatot hajt végre, és többször felhasználható anélkül, hogy a program kódjának több példányban is tartalmaznia kellene.
  • Függvények használatával
    • a többször használt programrészeket csak egyszer kell lekódolni,
    • valamint a bonyolult algoritmusok kis részekre bontva áttekinthetővé, kezelhetővé válnak.
  • Egy függvény mindig bemenő paraméterek egy értékhalmazát kapja meg és futása után valamilyen visszatérési értéket ad vissza. Itt most a hangsúly az értéken van mindkét esetben.
  • C nyelvben egy függvénynek mindig tetszőleges számú és típusú argumentuma, és egyetlen visszatérési értéke van.
  • A C nyelvben maga a főprogram is függvénybe kerül, ez a main függvény.
  • Az általános felépítés mindig a következő:
visszatérési-típus függvénynév (argumentumdeklarációk){
   deklarációk és utasítások
}
  • A függvény függvényfejből és függvénytörzsből épül fel.
  • A függvényfej megadja a függvény típusát (milyen típusú adatot ad vissza), a függvény nevét, valamint paramétereinek típusát és nevét.
int hatvanyozo(int alap, int kitevo)
  • A függvénytörzs tartalmazza a függvényt felépítő utasítássorozatot.
{
  int i;
  for( ... )
  ...
  return ... ; 
}
  • A függvénydefiníció maga a függvény, azaz a függvényfej és a függvénytörzs együtt.
int hatvanyozo(int alap, int kitevo){
  int i;
  for( ... )
  ...
  return ... ; 
}
  • A függvény prototípusa a függvényfej pontosvesszővel lezárva, paraméternevek nélkül.
int hatvanyozo(int,int);
  • A függvénydeklaráció a függvény prototípusa paraméterek nélkül. Csak a függvény típusát és nevét tartalmazza.
int hatvanyozo();
  • A prototípus és deklaráció jelentősége, hogy egy C program csak olyan függvényt tud meghívni, amelynek deklarációja megelőzi a kódban a függvényhívást.
  • A C szabvány azt ajánlja, hogy ne a deklaráció, hanem az annál több információval bíró prototípus előzze meg a hívás helyét.
  • Nem kell deklaráció vagy prototípus abban az esetben, ha a hívott függvény definíciója megelőzi a hívás helyét.
  • Az alábbi két példa mutatja be prototípus használatával és használata nélkül a programkód felépítését:
#include <stdio.h>
...
 
int hatvanyozo(int,int);
 
int main(){
  int a,b,c;
  ...
  c=hatvanyozo(a,b);
  ...
}
 
int hatvanyozo(int alap, int kitevo){
  ...
}
#include <stdio.h>
...
 
int hatvanyozo(int alap, int kitevo){
  ...
}
 
int main(){
  int a,b,c;
  ...
  c=hatvanyozo(a,b);
  ...
}
void f(int a[2]){
  int i = 0;
  for( i =0; i<2; i++){
    printf("%d ",a[i]);
  } 
  printf("\n");
}
 
int main(void) {
  int a[2] = {1,2};
  f(a);
  return 0;
}

Feladatok

Személyes eszközök