3 tema. For, while, if, switch ...

Turinys


 Loginis operatorius for
 1 pavyzdys. Lygiagrečios atkarpos
 2 pavyzdys. Funkcijos reikšmių skaičiavimas
 Ciklo sąlygos
 Operatorius while
 3 pavyzdys. Elipsių šeima
 4 pavyzdys. Parabolės
 Sąlyginis operatorius if
 5 pavyzdys. Dviejų spalvų elipsės
 6 pavyzdys. Nutrauktas ciklas
 Operatorius switch
 7 pavyzdys. Trajektorija

Loginis operatorius for

Temos antraštėje išvardyti ciklo ir sąlyginių programos vykdymo valdymo operatorių identifikatoriai. Pradėkime nuo ciklo operatoriaus for . Jo sintaksė:
for(kintamojo inicializavimas; sąlyga; keitimas ) vykdoma komanda;

Nurodytas operatorius vykdomas tol, kol ciklo kintamasis tenkina nurodytą sąlygą, t.y. kol ją tikrinant gaunama reikšmė true . Pavyzdžiui, šitaip galime nurodyti, kad kompiuteris apskaičiuotų visų natūraliųjų skaičių, nedidesnių už 100 kvadratus:
int j;
for (int i=1; i<100; i++) j=i*i; 
Operatoriaus sąlygos gali būti ir sudėtingesnės. Pavyzdžiui, tokį ciklą valdo du kintamieji, vieno reikšmės vienetu didinamos, kito - mažinamos.
  int  i,j;
  for (i=1, j=15; i<j; i++; j--)
  {...operatoriai...}
 
Panagrinėkime kiek įdomesnį pavyzdį.

1 pavyzdys. Lygiagrečios atkarpos


Šis įskiepis nubraižo nurodytą kiekį lygiagrečių atkarpų.
	  
import java.awt.*;
import java.applet.*;

public class Paral extends Applet {
public void init() {}
public void paint(Graphics g) {
		
int j=10;
g.setColor(Color.red);
for (int i=0;i<10; i++ )
{
g.drawLine(10,j, 200, j);
j=j+10;}
}
}
 
Pažiūrėkite, kaip veikia.   
Atsisiųskite programos tekstą.
Kartais prisireikia begalinio ciklo, kurio vykdymą galima sustabdyti kitomis priemonėmis. Tokio ciklo aprašymas labai paprastas:
for (;;) vykdomas operatorius; 

Panaudodami begalinį ciklą parašykime programėlę, skaičiuojančią funkcijos reikšmes.

   Į pradžią   


2 pavyzdys. Funkcijos reikšmių skaičiavimas


Argumento reikšmė įvedama iš komandinės eilutės
import java.io.*;

public class Fr{
public static void main ( String arg[] ) throws IOException {

String xString;

double x,y;
BufferedReader br = new BufferedReader ( //  Reikšmių įvedimo 
new InputStreamReader (System.in)); // organizavimas 
        
System.out.println 
("Galiu apskaiciuoti viena funkcijos f(x)=x^3 + arcsin(x) reiksme");

for (;;){
System.out.print ("Iveskite argumento x reiksme: ");
xString = br.readLine();
x = Double.parseDouble(xString);

System.out.println ("f(x)="+(Math.pow(x,3)+Math.asin(x)));
}}}
Atsisiųskite programos tekstą.

   Į pradžią   

Ciklo sąlygos

Ciklo sąlygos gali būti gana sudėtingos. Joms užrašyti naudojame loginius operatorius. Išvardysime tik dažniausiai naudojamus:
Operatorius Matematinis atitikmuo
& Loginis ir (AND)
| Loginis arba (OR)
! Loginis neiginys
= = Lygu
!= Nelygu

Pavyzdžiui, sąlyga (i<5)|(i>7) reiškia tą patį, kaip i!=6 .

   Į pradžią   

Operatorius while

Ciklą galime aprašyti ir operatoriumi while . Jo sintaksė dar paprastesnė:
while (sąlyga ) vykdoma komanda; 
Patikrinus, ar sąlyga teisinga, t.y. ar gaunama reikšmė true , vykdomas nurodytas operatorius (ar jų grupė). Po to vėl tikrinama sąlyga. Jeigu gaunama reikšmė false ciklas nutraukiamas. Begalinis while ciklas aprašomas taip: while(true) komanda;
Jeigu ciklo sąlyga nėra patenkinta, tai komanda, ar komandų grupė nei karto neįvykdoma. Galima naudoti kitą loginio operatoriaus formą, kuri garantuoja, kad komandos bus įvykdytos nors vieną kartą. Vykdant komandas
do {
    komandos}
while (sąlyga);
pirmiausia įvykdomos skliaustuose užrašytos komandos ir tik po to tikrinama, ar ciklo sąlyga yra teisinga. Taigi ciklo komandos įvykdomos nors vieną kartą.

3 pavyzdys. Elipsių šeima

Panaudodami operatorių while nubraižysime elipsių šeimą.
import java.awt.*;
import java.applet.*;

public class Oval extends Applet {
public void init() {}
public void paint(Graphics g) {
int j=10; 
int i=0;
g.setColor(Color.red);
while(j<100)
{ if (j<50) {g.setColor(Color.green);}// Nurodome, kokia spalva braižyti.
g.drawOval(j,j, 350-i, 200-i);
j=j+10; i=i+20;}
}
}
Pažiūrėkite, kaip veikia.   
Atsisiųskite programos tekstą.

   Į pradžią   

4 pavyzdys. Parabolės

Panaudodami while operatorių nubraižysime keistą parabolę.
import java.awt.*;
import java.applet.*;

public class Parab extends Applet {
public void init() {}
public void paint(Graphics g) {
g.translate(110,10); //  Perkeliame koordinačių pradžios tašką. 
int j=-100; 
int i=-10;
int v;
while(j<=100) {
v=i*i;
g.drawString("p",j,v );
j=j+10; i=i+1;}
}
}
Pažiūrėkite, kaip veikia.   
Atsisiųskite programos tekstą.
Ta pati parabolė, bet su mygtuku. Pažiūrėkite, kaip veikia.    Atsisiųskite programos tekstą.

   Į pradžią   

Sąlyginis operatorius if

Šį operatorių jau ne vieną kartą naudojome. Sąlyginio perėjimo operatoriaus if sintaksė:
if (sąlyga) vykdoma komanda; 
Komanda vykdoma tik tuomet, kai sąlyga yra teisinga, t.y. ją tikrinant gaunama reikšmė true . Po to vykdoma po operatoriaus if užrašyta komanda. Kai reikia įvykdyti specialią komandą tuo atveju, kai sąlyga neteisinga, galime naudoti operatorių if su priedu else:
if (sąlyga) vykdoma I komanda; else vykdoma II komanda; 
Antra komanda vykdoma tik tuo atveju, kai sąlyga yra neteisinga.

5 pavyzdys. Dviejų spalvų elipsės.

Patobulinsime elipsių braižymo programą. Naudodami if operatorių priversime pakeisti braižomų elipsių spalvą.
import java.awt.*;
import java.applet.*;

public class Oval1 extends Applet {
public void init() {}
public void paint(Graphics g) {
setBackground(Color.white);
int j=10; 
int i=0;
while(j<100)
{if (j<50) {g.setColor(Color.green);}
else {g.setColor(Color.red); }
g.drawOval(j,j, 350-i, 200-i);
j=j+10; i=i+20;}
}
}

  
Pažiūrėkite, kaip veikia.   
Atsisiųskite programos tekstą.

   Į pradžią   

6 pavyzdys. Nutrauktas ciklas

Kai reikia sustabdyti begalinį arba anksčiau laiko nutraukti baigtinį ciklą, naudojamas operatorius break. Jau turbūt pastebėjote, kad 2 pavyzdžio programą galima baigti tik "avariniu" būdu - įvedus kokį nors simbolį vietoje skaičiaus. Pažiūrėkite, kaip galėtų atrodyti ši programėlė su "tvarkinga" pabaiga. Atkreipkite dėmesį ir į operatorių continue, leidžiantį, nebaigus vienos ciklo iteracijos, pereiti prie kitos.
import java.io.*;
public class Frif{
public static void main ( String arg[] ) throws IOException {
String x_eil;
double x,y;
BufferedReader br = new BufferedReader ( //  Reikšmių įvedimo 
new InputStreamReader (System.in)); // organizavimas 

System.out.println ("Galiu apskaiciuoti  funkcijos f(x)=x^3 + arcsin(x) reiksmes");
for (;;) {
System.out.print ("Iveskite argumento x reiksme: ");
x_eil = br.readLine();
if(x_eil.equalsIgnoreCase("Q")) break;
try{x = Double.parseDouble(x_eil);} // Tikrina ar ivestas skaicius
catch (NumberFormatException e ) {
System.out.println (xString+"  nera skaicius");continue;}
if((x<-1)|(x>1)) System.out.println ("Skaicius "+x+
" nepatenka i funkcijos apibrezimo sriti");
else System.out.println ("f(x)="+(Math.pow(x,3)+Math.asin(x)));
}}}
Atsisiųskite programos tekstą.
Prieš paleisdami šią programą, išsiaiškinkite, kaip ji stabdoma... Pabandykite padaryti taip, kad ji skaičiuotų ne daugiau kaip 10 jūsų pasirinktos funkcijos reikšmių.

   Į pradžią   

Operatorius switch

Operatoriumi if {} else {} nurodome, kokias komandas vykdyti kiekvienu iš dviejų atvejų. Kartais tų atvejų gali būti daugiau. Kiekvienam iš jų galime nurodyti savas komandas panaudodami operatorių switch . Panagrinėkime tokį programos fragmentą:
int atvejis, n;
...............
switch (atvejis)
{
case 2:
n=n*n;
break; 
case 3:
n=n*n*n;
break; 
default:
n=0;
}					
Jeigu kintamasis atvejis įgyja reikšmę 2, kintamąjį n keliame kvadratu, jei 3 - keliame kubu. Kitais atvejais kintamajam priskiriame reikšmę, lygią nuliui.

7 pavyzdys. Trajektorija

Šis įskiepis braižo periodinę laužtę. Kryptis nurodome operatoriumi switch.
import java.awt.*;
import java.applet.*;

public class Klaidz extends Applet {
public void init() {}
public void paint(Graphics g) {
setBackground(Color.pink);
int j=0; 
int i=0;
int v;

for (int n=0; n<40; n++) {
v=n%3;

switch(v)
{
case 0:
g.drawLine(i,j, i+10,j);
i=i+10; 
break;

case 1:
g.drawLine(i,j, i+10,j+10);
i=i+10; 
j=j+10;
break;	

case 2:
g.drawLine(i,j, i,j+10); 
j=j+10;
break;	
}}}}
    
Pažiūrėkite, kaip veikia.   
Atsisiųskite programos tekstą.

   Į pradžią