français
interlingua
 

Uzi iteracion per for()

La retprogramo, kiun ni projektas konstrui devos desegni 216 rektangulojn. Ĉiu el ili havos specifan koloron, sed tiuj koloroj estos difinitaj per la kombino de nur 6 valoroj.
Estas do necese trovi aŭtomatan procedon (se ne, la ekzerco ne estus interesa) laŭ kiu la komputilo devos ripeti operaciojn : desegni 216 fojojn rektangulon, kombini 216 fojojn la 6 RGB-valorojn...

La instrukcio for()

La instrukcio for() ebligas peti de la programo, ke ĝi ripetu operacion laŭ la valoro de variablo. Oni donas al la instrukcio for() la komencan valoron de la variablo, ties finan valoron (= la kondiĉo, por ke la iteracio daŭru) kaj la manieron, laŭ kiu la variablo evoluas de unu iteracio al alia.
La sintakso de tiu instrukcio estas : for(komenca valoro de la variablo; kondiĉo; evoluo de la variablo)
Ekzemple, for(int i=0; i<300; i=i+1) petas, ke la programo faru 300 iteraciojn. Dum la unua iteracio, la variablo i valoras 0 [int i=0] ; kiam la valoro de i estas pli granda ol 299 [i<300], la programo ne startigas novan iteracion ; fine de ĉiu iteracio, al la variablo i estas adiciita 1 [i=i+1, kion oni skribas ankaŭ per i++ aŭ per i+=1].

Jen retprogramo, kiu 5 fojojn skribas la literon A :

import java.awt.*;
public class apleto5 extends java.applet.Applet
{
   public void paint (Graphics g)
   {
   g.setColor(Color.red);
   for (int i=0;i<5;i++)
      {
      g.drawString("A",10,10);
      }
//for i
   }
}

 

Kaj jen la rezulto :

La uzpreta kodo

Vi eble kredas, ke tiu programo ne funkcias : tute male, ĝi perfekte funkcias, sed la litero A estis 5 fojojn desegnita sur la sama loko, oni do vidas ĝin nur unu fojon
Por eviti tion, oni devas ĉiufoje iom flanken puŝi la desegnaĵon de la litero. Estas do necese uzi alian variablon por ekzemple evoluigi la valoron de la absciso.
La plej simpla solvo estas uzi specon de registrilo : je ĉiu iteracio, la absciso estos pliigita (alidire : alkrementita) je 10, ekzemple.

Jen la realigo :

import java.awt.*;
public class apleto6 extends java.applet.Applet
{
   int absciso = 10;--- variablo deklarita kaj pravalorizita
   public void paint (Graphics g)
   {
   g.setColor(Color.red);
   for (int i=0;i<5;i++)
      {
      g.drawString("A",absciso,10);
      absciso += 10;--- alkrementata valoro de la variablo
      }//for i
   }
}

 

El tio rezultiĝas :

La uzpreta kodo

Oni deklaras variablon absciso, al kiu oni donas la pravaloron 10. Poste, la unuan fojon, oni desegnas la literon A ne ĉe la punkto (10, 10) kiel antaŭe, sed ĉe la punkto (absciso, 10). Ĉar la variablo absciso valoras 10, la programo uzas tiun valoron anstataŭe kaj la komenca punkto de la desegnaĵo estas ja (10,10).
Poste oni adicias 10 al la variablo [absciso += 10;], kio rezultigas, ke, la postan iteracion, absciso valoras 20 : la programo uzas same tiun novan valoron kaj la afero estas sukceso, la dua punkto estas (20,10). Kaj tiel plu.

La variabloj

int absciso = 10;
Variablo estas speco de malplena skatolo, kiun oni poste laŭplaĉe plenigas. Por ke variablo ekzistu, sufiĉas, ke oni donu al ĝi nomon, kaj ke oni deklaru ĝian tipon.
Jen la reguloj sekvendaj por nomi variablon :
  • La unua signo de l' nomo devas esti litero inter la bazaj Askiaj signoj (A-Z, a-z), aŭ la substreka signo (_) aŭ la dolaro ($).
  • La ceteraj signoj sekvas la saman regulon, sed rajtas ankaŭ esti ciferoj (do : neniu supersignita karaktro, nek interpunkcia signo, nek spaco).
En la ĉi-supra ekzemplo, oni deklaras la variablon absciso de tipo int, t.e. entjero (inter -2147483648 kaj 2147483647, kun kodado sur 32 bitoj).
Oni povas ankaŭ, per unu sama instrukcio kiel tie ĉi, plenigi tiun skatolon per valoro. La signo = havas do la signifon : "estas plenigita per la jena valoro", "ricevas la valoron".

La komentoj

}//for i
La du oblikvaj linioj ebligas skribi komenton en la programo, indikojn por helpi la legonton. Tiuj komentoj devas esti mallongaj : ili ne rajtas esti pli longaj ol unu linio.
Pli longaj komentoj, sur pluraj linioj, devas enteniĝi inter la etikedoj /* (komenca etikedo) kaj */ (fina etikedo).
Ekzemple :
/*Tiu komento
rajtas uzi
plurajn liniojn.*/