Programazioan **for** **begizta** aldez aurretik aginduak exekutatuko diren aldi minimo kopurua zehazten duen kontrol-egitura bat da. Aginduen bidezko programazio lengoai ia guztietan aurkitzen da.

Begiztaren elementuak
---------------------

* '***Kontrol-Aldagaia'***: Aldagai honek begiztaren errepikapenaren kontrola du. Ohikoa da **i** hizkia erabiltzea aldagai gisa, edo hurrengoak (j,k,...) begiztak habiratuta egonez gero. Lehenengo hurbilketa batean arraroa egin daiteke hizki honen aukeraketa, baina beste aldetik, behin ohituta, hain erabilia delarik kodea irakurtzeen errazten du.

* **Kontrol aldagaiaren hasieratzea**: sasikodean esplizitu egitea eskatzen da (:= *HasierakoBaliotik* atala), beste hizkuntza batzuetan aldiz ez da derrigorrezkoa. Edozein kasutan kodean hasiarazten ez diren kontrol aldagaiak erabiltzea ez da aholkatzen, kodearen irakurketa zailtzen baitu.

* **Kontrol baldintza**: sasikodean aldagaiak har dezakeen bukaerako baliorekin adierazten da (*BukaerakoBaliora* atala).

* **Handitzea**: sasikodean, kontrakoa esaten ez bada, 1 balioa hartzen da. Nahi izanez gero URRATSA = *UrratsarenBalioa*ren bidez edozein zenbaki oso (positiboa edo negatiboa) erabil daiteke.

* **Gorputza**: errepikapen bakoitzean egingo diren agindua(k) d(ir)a. Askotan kontrol aldagairen balioa erabiltzen da aginduetan (adibidez, zerrenda baten **i**. elementua hartzeko).

Erabilerak
----------

Bere erabilera nagusia Bektoreetara bideratuta dago, indizearen arabera kokatuta dauden datuak aldatu, gehitu, ezabatu edo ikus daitezkeelarik.

FORen adibidea sasikodean
-------------------------

```
KontrolAldagia := HasierakoBaliotik BukaerakoBaliora, URRATSA = Gehikuntza 
   Gorputza
BUKATU
```

non *KontrolAldagia, HasierakoBalioa*  eta Urratsa zenbaki osoak dira. Gorputzeko agindua(k) (BukaerakoBalioa - HasierakoBalioa + 1) aldiz exekutatuko dira urratsa 1 izanez gero. Hau da, HasierakoBaliotik BukaerakoBaliora barne aldatzen da KontrolAldagaia.

C++en adibidea
--------------

1. #include <iostream>
2. #include <conio.h>
3. using namespace std;

```
int main() {  

   int bektorea[10], i;  

   for(i=0; i<10; i++){
      bektorea[i] = i;
      cout<< i<<endl;
   } 
   getch(); 
  

   return 0;   

}  

```

*for*aren definizioan *i* kontrol aldagaia 0 balioarekin hasiarazten da, gero kontrol baldintza jartzen da, zikloa bete arte egiazkoa izan behar dena, eta bukatzeko unitate bateko gehikuntza adierazten da.

Adibidez, kontrol baldintza gisa i < 11 jarriz gero, begizta [0...10] tartean exekutatuko da, eta bektore[10]era sartzen saiatzean errore bat sortuko du, bektorea definizioz 0tik (n-1)era doalako, kasu honetan 0tik 9ra, osotara n elementu dituelarik.

Parentesiko edozein osagai kendu daiteke, baina puntu eta koma bereizleak beti agertu behar dira. Honen ondorioa amaigabeko begizta izango litzateke.

Bakoitzeko Begizta (For Each)
-----------------------------

Begizta hau lengoai batzuetan ematen den aurreko begiztaren garapena da. Datu egitura errepikakorrak (zerrendak, adibidez) modu sinple eta arinago batean zeharkatzeko erabiltzen da.

Sasikodean honela adieraz daiteke:

```
multzoKO motaKO elementu BAKOITZEKO EGIN
   Gorputza
BUKAERA BAKOITZEKO
```

* **Elementua**: begiztaren gorputzean une bakoitzean multzoko hautatutako elementua biltzen duen aldagaiaren izena da.
* **Datu-mota**: elementuaren aldagaiaren datu mota da.
* **Multzoa**: zeharkatu nahi den datu egitura da. Erabilera ohikoena bektoreak dira edo -objektuetara bideratutako programazioan - bilduma motako klaseak.
* **Gorputza**: errepikapen bakoitzean egingo diren agindua(k) d(ir)a. Ezinbestekoa ez bada ere, ohikoena gorputzean hautatutako elementuaren gaineko eragiketaren bat egitea da.

#### Kontrol egitura berri baten beharra

Egitura hau lengoai batzuetan *for* begiztaren erabilera ohikoenen kodearen idazkera eta irakurketa arinagoa lortzeko berrikuntza gisa sortu zen. Hau da, bektore baten elementu guztien gainean eragiketa bera egitea eta beharrezkoa ez izatea bektorearen barruan hauen posizioa jakitea.

*bakoitzerako* begiztan honela laburtzen da:

```
multzoKO motaKO x BAKOITZEKO EGIN
x = EragiketaBat(x)
BUKAERA BAKOITZEKO
```

BAKOITZEKO egitura erabiltzearen abantailak honako hauek dira:

1. Bektorearen tamaina eskuratzeko funtzio bat deitzea ez da beharrezkoa.
2. Uneko balio adierazteko azpi-indize idazkera deseroso bat erabiltzea ez da beharrezkoa, batez ere, kontuan hartzen badugu egitura hau erabiltzen badugu balioaren indizea behar ez dugulako dela.
3. Konpilazio unean elementuaren datu motaren gaineko egiaztapena egiten uzten du.

BAKOITZEKO begizta ez da FOR begiztaren ordezko bat, bakarrik aurreko ohiko kasuan erabiltzeko hobekuntza bat. Desberdintasun nagusia FOR eta BAKOITZEKOren artean lehenengoak bere errepikapenak balio bat arte aldatzen den aldagai batek kontrolatzen duela eta bigarrenak bektore baten elementu guztien zeharkatzeak kontrolatzen duela da.

Erreferentziak
--------------

Kanpo estekak
-------------

|  |  |
| --- | --- |
| Autoritate kontrola | 
* **Wikimedia proiektuak**
* Wd Datuak: Q838119
* Commonscat Multimedia: For loops

---

 |

* Wd Datuak: Q838119
* Commonscat Multimedia: For loops