2 tema. Skaičiai, kintamieji, skaičiavimai

Turinys
 1 pavyzdys. Duomenų tipai
 Skaičių tipai
 Math klasė ir jos metodai
 Funkcijos reikšmių skaičiavimo programa
 Funkcijos reikšmių skaičiavimo įskiepis
 Funkcijos grafikas
 Užduotis

Duomenų tipai

Java kalboje naudojami šeši paprastieji duomenų tipai: byte, short, int, long, float, double, boolean ir char. Pirmieji šeši tipai skirti skaičiams, boolean - loginėms reikšmėms true false , char UNICODE koduotės simboliams.
Tipas Užrašymas Automatiškai
priskiriama reikšmė
Ilgis Maksimali reikšmė
byte Sveikasis skaičius
su ženklu
0 8 bitai 127
short Sveikasis skaičius
su ženklu
0 16 bitų 32726
int Sveikasis skaičius
su ženklu
0 32 bitai 2147483647
long Sveikasis skaičius
su ženklu
0 64 bitai 1018 eilės
float Skaičius su slankiu kableliu 0 32 bitai 1038 eilės
double Skaičius su slankiu kableliu 0 64 bitai 10308 eilės
boolean Loginė reikšmė false 1 bitas
char Simbolis 'x0' 2 baitai

Užrašant float ir double skaičius sveikoji ir trupmeninė dalis atskiriama tašku. Labai maži ar labai dideli šio tipo skaičiai gali būti užrašomi E-formatu, pavyzdžiui, 0.0001=1.0E-4 ir t.t. Aprašant kintamuosius nurodoma, kokio tipo skaičiai bus jiems priskiriami. Pavyzdžiui, tokios programos eilutės
	  int a, b;
	  double c;
	  double d=1.2;
	 
nurodo, kad a ir b yra int tipo, o c ir d - double tipo kintamieji, be to - kintamajam d iškart priskiriama ir reikšmė. Skaičiuojant reiškinių, sudarytų iš skirtingo tipo skaičių, reikšmes, tipai suvienodinami automatiškai. Pavyzdžiui, jeigu reiškinyje yra ir int, ir long tipų skaičių, tai skaičiuojant int tipo skaičiai pervedami į long, o rezultatas - taip pat long tipo skaičius. Tačiau kartais tenka patiems nurodyti, į kokį tipą reikia pervesti skaičių. Be to, reikia prisiminti, kad dviejų sveikųjų skaičių dalmuo yra sveikasis skaičius. Pavyzdžiui, dalmens 3/4 reikšmė bus int tipo duomuo, kurio reikšmė lygi nuliui, tačiau jei parašysime 3./4 gautas rezultatas bus double tipo duomuo, kurio reikšmė 0.75.

   Į pradžią   

Skaičių tipai

Ši programa generuoja atsitiktinį double tipo skaičių ir perveda jį į kitus tipus. Pastebėkime, kad pervedant į žemesnį tipą kartais gauname nesąmonę.
import java.io.*;
public class Prog2_1{
public static void main ( String arg[] ) throws IOException {

double d;
int m;


BufferedReader br = new BufferedReader (
new InputStreamReader (System.in)); 

System.out.println ("Iveskite naturaluji skaiciu m");
m=Integer.parseInt(br.readLine());
System.out.println ("Programa generuoja double tipo skaiciu mazesni uz "+ m);
System.out.println("Po to  perveda ji i kito tipo skaicius");
System.out.println ("Paspauskite klavisa");
br.readLine();

d=Math.random()*m;

System.out.println ("generuotas double tipo skaicius d= "+d );
System.out.println ("byte tipas d= "+(byte)d );
System.out.println ("short tipas d= "+(short)d );
System.out.println ("int tipas d= "+(int)d );
System.out.println ("long tipas d= "+(long)d );
System.out.println ("float tipas d= "+(float)d );
System.out.println ("double tipas d= "+d );
System.out.println ("char tipas d= "+(char)d );
br.readLine();

}
}
Atsisiųskite programos tekstą.

   Į pradžią   

Math klasė ir jos metodai

Trumpai aptarkime programavimo Java kalba (objektinio programavimo) ideologiją. Programoje aprašomos klasės, jų metodai (pavyzdžiui, dviračių klasė: kiekvienas dviratis turi turėti vairą, ratus, ir t.t., turi būti kokia nors spalva nudažytas, su juo galime atlikti tam tikrus veiksmus, t.y. naudotis jo metodais - važiuoti, stabdyti, skambinti skambučiu ir kt.). Aprašę klasę galime pagal jos projektą sukurti vieną ar kelis objektus ir naudotis jų metodais.
Norime, kad mūsų Java programos atliktų įvairius skaičiavimus. Taigi mums reikia įvairių funkcijų skaičiavimo metodų. Daugelis jų sutelkti Math klasėje. Mums nereikia rūpintis, kad ši klasė būtų prieš vykdant programą iškviesta, tai įvyksta automatiškai. Ir dar vienas šių metodų skirtumas nuo, tarkime, važiavimo dviračiu metodo. Važiavimo dviračiu metodu negalima naudotis neturint paties dviračio (nesukūrus dviračių klasės objekto), o Math klasės metodais galime naudotis, nesukūrus objekto. Tokie metodai vadinami statiniais. Lentelėje išvardyti Math klasės metodai, nurodant, kokio tipo duomenis galima šiems metodams perduoti ir kokio tipo duomenys yra grąžinami.
Metodas Ką metodas veikia
static double abs(double a)
static float abs(float a)
static int abs(int a)
static long abs(long a)
Gražina skaičiaus a modulį
static double acos (double a) Gražina skaičiaus a arkkosinusą
static double asin (double a) Gražina skaičiaus a arksinusą
static double atan (double a) Gražina skaičiaus a arktangentą
static double ceil (double a) Gražina skaičiaus a ,,lubas" - artimiausiąjį didesnį už a sveiką skaičių.
static double floor (double a) Gražina skaičiaus a ,,grindis" - skaičiaus a sveikąją dalį.
static double cos (double a) Gražina skaičiaus a kosinusą.
static double sin (double a) Gražina skaičiaus a sinusą.
static double tan (double a) Gražina skaičiaus a tangentą.
static double exp (double a) Gražina eksponentinės funkcijos reikšmę.
static double log(double a) Gražina logaritminės funkcijos reikšmę.
static double sqrt(double a) Gražina kvadratinės šaknies reikšmę.
static double pow(double a, double b) Gražina a laispnio su rodikliu b reikšmę.
static double max(double a, double b)
static float max(float a, float b)
static int max(int a, int b)
static long max(long a, long b)
Gražina didesnįjį iš dviejų skaičių.
static double min(double a, double b)
static float min(float a, float b)
static int min(int a, int b)
static long min(long a, long b)
Gražina mažesnįjį iš dviejų skaičių.
static double random() Generuoja atsitiktinį intervalo (0,1) skaičių.
static double toDegrees(double a) Paverčia kampo a didumą laipsniais į radianus.
static double toRadians(double a) Paverčia kampo a didumą radianais į laipsnius..

Be to Math klasėje yra apibrėžtos konstantos, kurias galime naudoti vietoje skaičių pi ir e. Jos ,,iškviečiamos" taip: Math.PI ir Math.E.

   Į pradžią   

Funkcijos reikšmių skaičiavimo programa

Išbandysime Math klasės metodus. Parašysime programėlę bei įskiepį, kurie skaičiuos ir išves kvadratinės funkcijos
f(x)=x2
reikšmes, kai x kinta žingsniu h=0.2 nuo nurodytos reikšmės x=a iki x=b.
import java.io.*;
public class Prog2_2{
public static void main ( String arg[] ) throws IOException {

double a,b,x,y;

BufferedReader br = new BufferedReader (
new InputStreamReader (System.in)); 

System.out.println ("Iveskite skaiciu a");
a=new Double(br.readLine()).doubleValue();

System.out.println ("Iveskite skaiciu b");
b=new Double(br.readLine()).doubleValue();

System.out.println ("Funkcijos f(x)=x^2 reiksmes");
x=a;

while (x<=b){
y=x*x;	
System.out.println ("f("+x+")= "+y);
x=x+0.2;
}	
br.readLine();
}
}
Atsisiųskite programos tekstą.

   Į pradžią   

Funkcijos reikšmių skaičiavimas

Turbūt bus kiek įdomiau, jeigu programa skaičiuos tiek funkcijos reikšmių, kiek panorėsime. Parašykime iš naršyklės lango vykdomą programėlę, t.y. įskiepį. Argumento reikšmes įvesime pasinaudoję įvedimo langu, į tą patį lauką įvesime ir skaičiavimo rezultatą.
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Appl2_1 extends Applet implements ActionListener{

Label antr;	
Button mygt, mygt1;
TextField txt;

public void init() {
setLayout(new GridLayout(4,1));
antr = new Label("Funkcijos f(x)=x^2 reiksmės",Label.CENTER);
add(antr);
txt= new TextField(); 
add(txt);

mygt = new Button("Įvedę x reikšmę, paspauskite!");
mygt.addActionListener(this);
add(mygt);

mygt1 = new Button("Isvalyti ivedimo lauka");
mygt1.addActionListener(this);
add(mygt1);
}
	
public void actionPerformed(ActionEvent iv)
{
if (iv.getSource()==mygt) 
fnk();
if (iv.getSource()==mygt1) 
txt.setText("");
}
	
public void fnk()
{
double x,fx;
x=Double.valueOf(txt.getText()).doubleValue();	
txt.setText("f("+x+")="+x*x);
} 
}
Pažiūrėkite, kaip veikia.   
Atsisiųskite programos tekstą.

   Į pradžią   

Funkcijos grafikas

Laikas pasimokyti braižyti grafikus. Kad programos kodą būtų lengviau skaityti, nenaudosime jokių įvedimo laukų, mygtukų ir t.t. Intervalo, kuriame brėšime funkcijos grafiką rėžius a, b ir argumento kitimo žingsnį h nurodysime pačioje programoje.
import java.awt.*;
import java.applet.*;

public class Appl2_2 extends Applet 
{
double a=0;
double b=2;
double h=0.1;
int pl, au;
double fmax =4;
double fmin =0;

public void init()
{
pl = getSize().width;
au=getSize().height; 	
}		

double f(double x)
{return x*x;}

public void paint(Graphics g)
{
double x=a;
int prx,pry;
int glx = (int) (pl*(x-a)/(b-a));
int gly = (int) (au*(fmax-f(x))/(fmax-fmin));

while (x<b)
{x+=h;
prx = glx;
pry=gly;
glx = (int) (pl*(x-a)/(b-a));
gly = (int) (au*(fmax-f(x))/(fmax-fmin));
g.drawLine(prx,pry,glx,gly);}
}	
}
Pažiūrėkite, kaip veikia.   
Atsisiųskite programos tekstą.

   Į pradžią   

Užduotis

Pasirinkite funkciją iš sąrašo ir parašykite programą, kuri pareikalautų įvesti reikiamus parametrus, o taip pat pradinę, galutinę argumento reikšmę ir žingsnį, o juos įvedus apskaičiuotų ir išvestų funkcijos reikšmes.
Po to sukurkite įskiepį, kuriame šios funkcijos reikšmės būtų skaičiuojamos įvedant parametrų reikšmes ir argumento reikšmes įvedimo laukeliuose.
Taip pat sukurkite įskiepį, kuriame būtų braižomas jūsų funkcijos grafikas.
  1. f(x)=ax3+bsin(x);
  2. f(x)=asin(bx)+bcos(ax);
  3. f(x)=aln(x)+bsin(x);
  4. f(x)=e ax+bx2;
  5. f(x)=max(asin(x), bcos(x));
  6. f(x)=min(asinx, bx);
  7. f(x)=tg(ax)-bex;
  8. f(x)=barcsin(x)-barccos(x);
  9. f(x)=min(asin(x), 1/(1+x2));
  10. f(x)=arctg(ax)-arctg(bx);
  
Į pradžią