Tuesday, December 11, 2012

Java: Առաջին ծրագիրը

Արդեն դարերի ավանդույթ է դարձել որևէ ծրագրավորման լեզվի հնարավորությունները ցուցադրելիս որպես առաջին ծրագրի օրինակ մատուցել ստանդարտ արտածման հոսքի վրա "Hello, World!" տեքստն արտծող ծրագիրը։ Մի կողմ թողնենք այն և որպես առաջին ծրագիր դիտարկենք տրված դրական ամբողջ թվի ֆակտորիալը հաշվող և արտածող ծրագիրը։ Այն, կարծում եմ, և՛ ավելի հետաքրքիր է, և՛ ավելի խոսուն։

Եվ այսպես. տրված n դրական ամբողջ թվի ֆակտորիալը դա 1-ից n ամբողջ թվերի արտադրյալն է։ Այն հաշվելու համար պարզապես պետք է կազմակերպել մի ցիկլ՝ կրկնություն, որն անցնում է 1..n թվերով և կուտակում է դրանց արտադրյալը։ Փսևդոկոդով գրելու դեպքում, օրինակ 12 թվի ֆակտորիալը հաշվելու համար, կունենանք ահա այսպիսի ծրագիր.
n = 12
prod = 1
WHILE n > 0 DO
  prod = prod * n
  n = n - 1
END
PRINT prod
Java ծրագրի կատարումը սկսվում է գլխավոր դասի main անունով ստատիկ մեթոդից։ Դասը սահմանվում է class ծառայողական բառով, որին հետևում է դասի անունը, ապա մեթոդների ու դաշտերի սահմանումները։ Օրինակ, Factorial անունով դասը կարող ենք սահմանել հետևյալ կերպ.
public class Factorial {
...
}
Որտեղ public բառն ասում է, որ տվյալ դասը կարող են օգտագորվծել այլ փաթեթներում (փաթեթների մասին քիչ ավելի ուշ)։
Factorial դասի համար սահմանենք main ստատիկ մեթոդը.
public class Factorial {
  public static void main(String[] args)
  {
    ...
  }
}
Նորից public ծառայողական բառն ասում է, որ main մեթոդը տեսանելի է Factorial դասից դուրս։ static բառն ասում է, որ այս մեթոդն ընդհանուր է Factorial դասի մոլոր նմուշների համար (սրանք էլ մանրամասնորեն կքննարկենք ավելոի ուշ)։ void բառն ասում է, որ main մեթոդը որևէ արժեք չի վերադարձում։ main մեթոդի արգումենտների ցուցակում գրված "String[] args" արտահայտությունը նշում է, որ այս մեթոդը սպասում է (ընդունում է, ակնկալում է) մեկ արգումենտ՝ տողերի միաչափ զանգված (վեկտոր)։ main մեթոդի կատարման ժամանակ նրա արգումենտն արժեքավորվում է հրամանային տողի պարունակությամբ (այս մասին էլ ավելի ուշ)։
Հիմա սկսենք ֆակտորիալի հաշվարկը։ Ասացինք, որ աշխատելու ենք ամբողջ թվերի հետ։ Հայտարարենք n և prod ամբողջ թվերը՝ առաջինն արժեքավորելով 12 արժեքով, իսկ երկրորդը՝ 1 արժեքով։
int n = 12, prod = 1;
Կազմակերպենք ցիկլ, որը կատարվում է քանի դեռ ճշմարիտ է n > 0 պայմանը։ Իսկ ցիկլի մարմնում հաշվարկվում է prod = prod * n արտադրյալը, և մեկով նվազեցվում է n փոփոխականի արձեքը։
Պայմանով ցիկլերը կազմակերպվում են while կառուցվածքով։ Այն կատարում է իր մարմնում գրված հրամաններն այնքան ժամանակ, քանի դեռ ճշմարիտ է կրկնման պայմանը։
while( n > 0 ) {
  prod = prod * n;
  n = n - 1;
}
Տվյալ դեպքում ցիկլն անպայման կավարտվի, քանի որ կրկնությունների ընթացքում n դրական թվի արժեքը շարունակ նվազում է։ Եվ երբ ավարտվի ցիկլը, prod փոփոխականում կուտակված կլինի 1..n թվերի արտադրյալը։
Եվ վերջապես, ինչպե՞ս արտածել հաշվարկման արդյուքները։ Java լեզվի ստանդարտ գրադարանի System դասի out դաշտի println մեթոդը ստանդարտ արտածման հոսքի վրա դուրս է բերում իր արգումենտում տրված արժեքը։ prod փոփոխականի արժեքը արտածելու համար պետք է գրել.
System.out.println(prod);
* * *
Ի մի բերելով շարադրվածը կազմենք ամբողջական ծրագիրը և կատարենք այն։ Նախ՝ որևէ տեքտային խմբագրիչոով ստեղծենք Factorial.java անունով ֆայլ և նրա մեջ գրենք հետևյալը.
/*
  First program in java
*/
public class Factorial {
  public static void main(String[] args)
  {
    int n = 12, prod = 1;
    while( n > 0 ) {
      prod = prod * n;
      n = n - 1;
    }
    System.out.println(prod);
  }
}
Պահպանենք ֆայլը պրոյեկտների համար նախատեսված մի պանակում՝ նախապես այս օրինակի ֆայլերի համար ստեղծելով factorial ենթապանակը (այն ինձ մոտ home-ում ստեղծված Project/java-examples պանակում է)։ cd հրամանով փոխենք աշխատանքային պանակն այնտեղ, որտեղ պահպանված է Factorial.java ֆայլը, և, ենթադրելով, որ համակարգում արդեն տեղադրված է Java լեզվի կոմպիլյատորն (javac) ու վիրտուալ մեքենան (java), թարգմանենք մեր գրած ծրագիրը բայթ-կոդի։
$ javac Factorial.java
Եթե թարգմանության՝ կոմպիլյացիայի պրոցեսում սխալներ չեն հայտնաբերվել, ապա հենց նույն պանակում ստեղծվում է Factorial.class անունով ֆայլ։ Սա մեր ծրագիրն է՝ Java ծրագրավորման լեզվից թարգմանած Java վիրտուալ մեքենայի բայթ-կոդերի։ Այն կատարելու համար պետք է կանչել Java վիրտուալ մեքենան՝ նրա արգումենտում տալով այն դասի անունը, որում սահմանված է main մեթոդը։ Մեր դեպքում դա միակ Factorial դասն է։
$ java Factorial
Տերմինալին արտածվում է 479001600, որը, կարող ենք ստուգել և համոզվել, հենց 12 թվի ֆակտորիալն է։
* * *
Սա առաջին ծրագիրն էր՝ գրված Java ծրագրավորման լեզվով։ Այս պահին դեռ ամեն ինչ չէ, որ պարզ ու հասկանալի է։ Մենք կարողացանք ծանոթանալ պարզագույն Java ծրագրի կառուցվածքին։ Տեսանք, թե ինչպես պետք է թարգմանել ու կատարել ծրագիրը հրամանային տողից։ Չնայած, որ ստացանք աշխատող ծրագիր, բայց բազմաթիվ հարցեր, թե՛ աշխատանքի տեխնիկայի, թե՛ խնդրի լուծման հետ կապված, դեռ մնում են չպարզաբանված։ Այս բլոգի հաջորդ գրառման մեջ ես կփորձեմ ընդգծել այս առաջին օրինակի թերություններն ու բացթողումները և առաջարկել դրանց լուծումները։

No comments:

Post a Comment