2025(e)ko martxoaren 21(a), ostirala

12. jarduera (II) | Erakusleak funtzioen parametro bezala


ZER DAKIDAN:
Erakusle kontzeptua menperatzen dut.



ZER IKASIKO DUDAN:
Funtzio bati pasarazten zaizkion parametroak erakusleekin lotuta daudela ikasiko dut.

Balioak pasatzen funtzioari

Parametroak nola pasatzen zaizkion funtzioari berrikusteko bi programa idatz ditzagun. Lehen programan, bi aldagaien balioak main() programa nagusian finkatzen dira eta BiDatuPantailaratu() izeneko funtzioan pantailaratzen dira. Bigarren programan, bi aldagaien balioak BiDatuHartu() izeneko funtzioan finkatzen dira eta main() programa nagusian pantailaratzen dira.

Hau garrantzitsua da:

float *p; bitartez erakusle-aldagaia deklaratu ondoren, *p notazioari esker adierazten da p erakusleak seinalatzen duen zenbaki erreala.

float fZbk; bitartez zenbakizko aldagaia deklaratu ondoren, &fZbk notazioari esker adierazten da fZbk aldagaiaren helbidea.


Lehen programan, bi aldagaien balioak programa nagusian finkantzen direnez datu horiek BiDatuPantailaratu() funtzioan sarrerakoak dira eta balioz pasatzen dira BiDatuPantailaratu() funtzioak pantailan idatz ditzan.

/* 12b1-Erakusleak-Parametroak: funtzio baten parametroak sarrerakoak direnean */

// iZbk_1 eta iZbk_2 aldagaiek balioak main() programa nagusian hartzen dituzte
// iZbk_1 eta iZbk_2 aldagaien balioak BiDatuPantailaratu() funtzioak prozesatezn ditu

#include <stdio.h>

void BiDatuPantailaratu(int, int);

int main() 
{
	int iZbk_1 = 3;   // iZbk_1 zenbaki-aldagaiaren deklarazioa eta hasieraketa
	int iZbk_2 = 4;   // iZbk_2 zenbaki-aldagaiaren deklarazioa eta hasieraketa

	printf("\n");

    BiDatuPantailaratu(iZbk_1, iZbk_2);
    printf("\n       main() programa nagusian: Lehen kopurua %d da, eta bigarrena %d da.", iZbk_1, iZbk_2);

	printf("\n\n");
	return 0;
}

void BiDatuPantailaratu(int iZbk_1, int iZbk_2) 
{
   printf("\n BiDatuPantailaratu() funtzioan: Lehen kopurua %d da, eta bigarrena %d da.", iZbk_1, iZbk_2);
   iZbk_1 = -3;   // eraginik ez dauka main() programa nagusian
   iZbk_2 = -4;   // eraginik ez dauka main() programa nagusian
}

Gogoratu main() programa nagusiko iZbk_1 aldagaia eta BiDatuPantailaratu funtzioko iZbk_1 aldagaia desberdinak direla (biek gordetzen dute 3 balio bera baina memoriako posizio desberdinak dira). Gauza bera gertatzen da iZbk_2 aldagaiekin, hots, bat bestearen kopia dela.



Bigarren programan, bi aldagaien balioak BiDatuHartu() funtzioan finkatzen direlako irteerako parametroak izango dira. Horregatik, iZbk_1 eta iZbk_2 aldagaien erreferentziak (bakoitzaren helbidea) pasatzen zaizkio BiDatuHartu() funtzioari.

Modu beretsuan, BiDatuHanditu() funtzioan datuak aldatzen direlako sarrera/irteerako parametroak izango dira. Horregatik, iZbk_1 eta iZbk_2 aldagaien erreferentziak (bakoitzaren helbidea) pasatzen zaizkio BiDatuHanditu() funtzioari.

/* 12b2-Erakusleak-Parametroak: funtzio baten parametroak irteerakoak direnean */

// iZbk_1 eta iZbk_2 aldagaiek balioak BiDatuHartu() funtzioan hartzen dituzte
// iZbk_1 eta iZbk_2 aldagaien balioak main() programa nagusiak  prozesatzen ditu

#include <stdio.h>

void BiDatuHartu(int *, int *);

int main()
{
	int iZbk_1;   // iZbk_1 zenbaki-aldagaiaren deklarazioa
	int iZbk_2;   // iZbk_2 zenbaki-aldagaiaren deklarazioa

	printf("\n");

    BiDatuHartu(&iZbk_1, &iZbk_2);
    printf("\n       main() programa nagusian: Lehen kopurua %d da, eta bigarrena %d da.", iZbk_1, iZbk_2);

	printf("\n\n");
	return 0;
}

void BiDatuHartu(int *iZbk_1, int *iZbk_2)
{
   *iZbk_1 = 33;   // eraginik dauka main() programa nagusian
   *iZbk_2 = 44;   // eraginik dauka main() programa nagusian
   printf("\n BiDatuPantailaratu() funtzioan: Lehen kopurua %d da, eta bigarrena %d da.", *iZbk_1, *iZbk_2);
   *iZbk_1 = -3;   // eraginik dauka main() programa nagusian
   *iZbk_2 = -4;   // eraginik dauka main() programa nagusian
}




Parametroen jokamoldea funtzioetan bi motakoa izan daiteke:

  1. Sarrerakoa: iZenbat parametroa BiDatuHanditu() funtzioan
  2. Irteerakoa: iZbk_1 parametroa BiDatuHartu() funtzioan, edo, Sarrera/Irteerakoa: iZbk_1 parametroa BiDatuHanditu() funtzioan

  • 12b1-Jarduera_Erakusleak.cbp | main.c
  • 12b2-Jarduera_Erakusleak.cbp | main.c


 

iruzkinik ez:

Argitaratu iruzkina