آموزش برنامه نویسی

آموزش زبان برنامه نویسی جاوا

تبریک سال نو

جمعه, ۱ فروردين ۱۳۹۳، ۱۲:۱۰ ق.ظ

بسم الله الرحمن الرحیم


یا مقلّب القلوب و الابصار، یا مدبّر اللّیل و النّهار، یا محوّل الحول و الاحوال، حوّل حالنا الی احسن الحال.

 

 

سال نو مبارک.

سال اقتصاد و فرهنگ با عزم ملّی و مدیریّت جهادی

  • امین بهرامی

چاپ کردن توسط ()printf

دوشنبه, ۱۴ مرداد ۱۳۹۲، ۰۳:۳۵ ب.ظ

علاوه بر متدهای ()print و ()println متد دیگری به نام ()printf نیز وجود دارد که برای چاپ کردن مورد استفاده قرار می گیرد. برای ارائه خروجی قالب بندی شده ی توالی دلخواهی از مقادیر نوع های مختلف، مورد استفاده قرار می گیرد. قالب، توسط آرگومان اول متد مشخص می شود. با استفاده از این متد می توان خروجی را توسط System.out به  command line فرستاد.

نحوه استفاده از این متد:

printf(format-string, argument-list);

قالب، چگونگی نمایش داده ها را مشخص می کند و از فرم کلی زیر پیروی می کند:

%[argument_index$][flags][width][.precision]conversion

اجزایی که درون [] قرار دارند، اختیاری می باشند.

 

گزینه های موجود برای هرکدام از اجزا...

  • امین بهرامی

بازنگری و مرور با جزییات بیشتر

يكشنبه, ۱۳ مرداد ۱۳۹۲، ۰۸:۱۸ ب.ظ

 

مراحل ایجاد یک برنامه در زبان برنامه نویسی جاوا

 

مرحله یک

ایجاد برنامه

این مرحله شامل ویرایش یک فایل توسط یک ویرایشگر می باشد. نوشتن برنامه جاوا یا به عبارتی سورس کد، توسط ویرایشگر و ذخیره آن روی هارد.

پسوند فایل با .java تمام می شود که بیانگر محتوای فایل یعنی سورس کد جاوا می باشد.

 

مرحله دو

کامپایل برنامه جاوا به bytecode

در این مرحله با استفاده از دستور javac (java compiler)برنامه را کامپایل می کنیم. به شکل زیر:

javac Welcome.java

اگر برنامه کامپایل شود، کامپایلر یک فایل با پسوند .class ایجاد می کند که نسخه ی کامپایل شده ی برنامه است.کامپایلر جاوا، سورس کد برنامه را به  bytecode ترجمه می کند که نشان دهنده ی کارهایی است که باید اجرا شوند. bytecode توسط ماشین مجازی جاوا اجرا می شود. JVM قسمتی از JDK و بنیان پلتفرم جاوا است. ماشین مجازی یک برنامه کاربردی است که یک کامپیوتر را شبیه سازی می کند و محدودیت های برنامه در مورد سخت افزار و سیستم عامل اجرایی را از پیش رو بر می دارد. بنابراین اگر ماشین مجازی روی سیستم عامل های دیگر نصب شده باشد، برنامه جاوا می تواند به راحتی بر روی آنها اجرا شود. NET. نیز یکی دیگر از ماشین های مجازی است که معماری شبیه ماشین مجازی جاوا دارد. بر خلاف زبان ماشین که وابسته به سخت افزار خاصی است، bytecode هیچ وابستگی به پلتفرم ندارد. در واقع bytecode قابل حمل است. بدون کامپایل مجدد سورس کد، یک bytecode می تواند بر روی پلتفرم های مختلف که دارای ماشین مجازی جاوایی است که برنامه توسط آن نسخه از جاوا کامپایل شده است، اجرا شود. با استفاده از دستور java می توان ماشین مجازی جاوا را برای اجرای برنامه فراخواند. به شکل زیر:

java welcome

 

مرحله ی سه

بارگذاری یک برنامه درون حافظه

در این مرحله، ماشین مجازی جاوا برنامه را برای اجرا در حافظه قرار می دهد که به عنوان مرحله loading شناخته می شود. بار کننده ی کلاس ماشین مجازی، فایل های با پسوند .class را دریافت و آنها را به حافظه منتقل می کند. بار کننده ی کلاس، تمام فایل های .class را که برنامه ی شما از آنها استفاده می کند نیز بارگیری می کند. فایل های .class بارگیری شده می توانند از روی دیسک شما یا از روی یک شبکه بارگیری شوند.

 

مرحله ی چهار

بازبینی bytecode

در این مرحله کلاس های بارگیری شده، توسط bytecode verifier برای بررسی و اطمینان از صحت کد و عدم نقض محدودیت های امنیتی جاوا آزمایش می شوند. این مرحله برای اطمینان از وارد نیامدن خسارت به فایل های شما توسط برنامه ی نوشته شده است.

 

مرحله پنج

اجرا

در این مرحله ماشین مجازی جاوا، bytecode برنامه را اجرا می کند.

  • امین بهرامی

آمیختن int و double و تبدیل نوع

شنبه, ۱۲ مرداد ۱۳۹۲، ۰۲:۱۷ ق.ظ

بارها پیش می آید که در برنامه خود نیاز به نوع int و double دارید. برای مثال نگه داری حاصل جمع اعداد 1 تا 1000 در یک متغیر int و نگه داری میانگین آنها در یک متغیر double . در این مواقع باید در مورد آمیختن نوع های مختلف با یکدیگر، به شدت دقت کرد. این نکته را هم در نظر داشته باشید که اعمال عملگرهای محاسباتی بر روی دو عدد از نوع int مقداری int را تولید می کند. در مورد اعداد double مقدار بدست آمده از نوع double است. به مثال زیر دقت کنید.

1 / 2 -> 0     ,     1.0 / 2.0 -> 0.5

همچنین اعمال عملگرهای محاسباتی بر روی دو عدد، یکی از نوع int و دیگری از نوع double به تولید نوع double می انجامد.

مثال:

1.0 / 2 -> 0.5     ,     1 / 2.0 -> 0.5

شما می توانید یک مقدار int را به یک متغیر double اختصاص دهید. مقدار int به صورت خودکار به مقدار double تبدیل می شود.

مثال:

int i = 3;
double d;
d = i;    // 3 → 3.0, d = 3.0
d = 88;   // 88 → 88.0, d = 88.0
double nought = 0;  // 0 → 0.0; there is a subtle difference between int 0 and double 0.0

اما یک مقدار double را نمی توان مستقیما به یک متغیر int اختصاص داد. به این دلیل که قسمت اعشاری مقدار double را از دست می دهید. در این حالت کامپایلر پیغامی را برای هشدار به شما نمایش می دهد.

double d = 5.5;
int i;
i = d;     // error: possible loss of precision
i = 6.6;   // error: possible loss of precision

عملگرهای تبدیل نوع

برای اختصاص یک مقدار double به یک متغیر int باید به صورت صریح عملگر تبدیل نوع را برای بریدن قسمت اعشاری فراخوانی کنید. برای این کار به شکل زیر عمل کنید.

(new-type)expression;

مثال:

double d = 5.5;
int i;
i = (int) d;        // Type-cast the value of double d, which returns an int value,
                    // assign the resultant int value to int i.
                    // The value stored in d is not affected.
i = (int) 3.1416;   // i = 3

به عنوان تمرین برنامه زیر را امتحان و صحت خروجی آن را بررسی کنید...

  • امین بهرامی

نوع double و اعداد با ممیز شناور

شنبه, ۱۲ مرداد ۱۳۹۲، ۰۱:۵۲ ق.ظ

در مطالب قبل گفتیم متغیرها دارای نام و نوع می باشند و می توانند مقادیری از همان نوع را ذخیره کنند. یک متغیر int فقط مقادیر صحیح را ذخیره می کند مقادیری مثل 123 و -163 . یک متغیر int نمی تواند اعداد حقیقی را نگه دارد. در برنامه نویسی، اعداد حقیقی مثل 3.14 و 2.7- را اعداد با ممیز شناور می نامند و متعلق به نوعی هستند که double نامیده می شود. مثال زیر کاربرد نوع double و اعداد با ممیز شناور است و برنامه ای را نشان می دهد که تبدیل دمای Celsius و Fahrenheit به یکدیگر را انجام می دهد.

 

/*
 * Convert temperature between Celsius and Fahrenheit
 */
public class ConvertTemperature {  // Save as "ConvertTemperature.java"
   public static void main(String[] args) {
      double celsius, fahrenheit;
      celsius = 37.5;
      fahrenheit = celsius * 9.0 / 5.0 + 32.0;
      System.out.println(celsius + " degree C is " + fahrenheit + " degree F.");
      fahrenheit = 100.0;
      celsius =  (fahrenheit - 32.0) * 5.0 / 9.0;
      System.out.println(fahrenheit + " degree F is " + celsius + " degree C.");
   }
}

 

  • امین بهرامی

ترکیب کردن شرط های ساده

جمعه, ۱۱ مرداد ۱۳۹۲، ۰۳:۴۹ ق.ظ

فرض کنید می خواهید بررسی کنید که عدد x بین 1 و 100 هست یا نه. در اینجا دو شرط ساده داریم:

(x >= 1) AND (x <= 100)

در برنامه نویسی شما نمی توانید بنویسید 1 <= x <= 100  بلکه باید به شکل زیر شرط ها را ترکیب کنید.

(x >= 1) && (x <= 100)

به عنوان تمرین خودتان برنامه را یک بار با استفاده از 1 <= x <= 100 و یک بار با استفاده از (x >= 1) && (x <= 100) بنویسید و نتایج حاصله را بررسی کنید.

 

یا به عنوان مثال برای بررسی بخش پذیر بودن عدد x بر 2 یا 3 باید به شکل زیر عمل کرد:

(x % 2 == 0) || (x % 3 == 0)

  • امین بهرامی

عملگرهای منطقی

جمعه, ۱۱ مرداد ۱۳۹۲، ۰۳:۱۳ ق.ظ

 

3 نوع عملگر منطقی وجود دارد:

 عملگر 

معنی

مثال

&&

  AND منطقی   

  (x >= 1) && (x <= 100)  

||

OR منطقی 

(x < 1) || (x > 100)

!

NOT منطقی 

(x == 8)!

 

مثال:

 
// Return true if x is between 0 and 100 (inclusive)
(x >= 0) && (x <= 100)  // AND (&&)
// Incorrect to use 0 <= x <= 100

// Return true if x is outside 0 and 100 (inclusive)
(x < 0) || (x > 100)       // OR (||)
!((x >= 0) && (x <= 100))  // NOT (!), AND (&&)

// Return true if "year" is a leap year
// A year is a leap year if it is divisible by 4 but not by 100, or it is divisible by 400.
((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)
  • امین بهرامی

عملگرهای مقایسه ای

جمعه, ۱۱ مرداد ۱۳۹۲، ۰۲:۵۰ ق.ظ

 

6 نوع عملگر مقایسه ای وجود دارد:

عملگر

معنی

مثال

==

مساوی است با

x == y

=!

مساوی نیست با

x != y

< 

بزرگتر از

x > y

=<

بزرگتر یا مساوی از

x >= y

کوچکتر از

x < y

=>

    کوچکتر یا مساوی با    

x <= y

 
عملگر == را با عملگر = اشتباه نگیرید. عملگر = برای مقدار دهی است.
  • امین بهرامی

شرط (یا تصمیم)

جمعه, ۱۱ مرداد ۱۳۹۲، ۰۱:۲۰ ق.ظ

فرض کنید می خواهید حاصل جمع اعداد فرد و همچنین حاصل جمع اعداد زوج بین 1 تا 1000 را بدست آورید. برای انجام این کار چه راه حلی را پیشنهاد می کنید؟ راه حل های متعددی برای انجام این کار وجود دارد. برای مثال می توان دو متغیر اعلان کرد: sumOdd و sumEven . بعد می توان از یک دستور شرطی برای بررسی فرد یا زوج بودن اعداد استفاده و اعداد فرد و زوج را از یکدیگر جدا کرد. این مراحل به صورت برنامه زیر قابل اجرا است.

/*
 * Sum the odd numbers and the even numbers from a lowerbound to an upperbound
 */

public class OddEvenSum {  // Save as "OddEvenSum.java"
   public static void main(String[] args) {
      int lowerbound = 1, upperbound = 1000;  // lowerbound and upperbound
      int sumOdd  = 0;    // For accumulating odd numbers, init to 0
      int sumEven = 0;    // For accumulating even numbers, init to 0
      int number = lowerbound;
      while (number <= upperbound) {
         if (number % 2 == 0) {  // Even
            sumEven += number;   // Same as sumEven = sumEven + number
         } else {                // Odd
            sumOdd += number;    // Same as sumOdd = sumOdd + number
         }
         ++number;  // Next number
      }
      // Print the result
      System.out.println("The sum of odd numbers from " + lowerbound + " to " + upperbound + " is " + sumOdd);

      System.out.println("The sum of even numbers from " + lowerbound + " to " + upperbound + "  is " + sumEven);

      System.out.println("The difference between the two sums is " + (sumOdd - sumEven));
   }
}
if (number % 2 == 0) {
   sumEven = sumEven + number;
} else {
   sumOdd = sumOdd + number;
}

قطعه کد بالا یک دستور شرطی است. دستور شرطی را می توان به یکی از دو شکل زیر نوشت:

  • امین بهرامی

حلقه (Loop)

پنجشنبه, ۱۰ مرداد ۱۳۹۲، ۰۷:۲۴ ب.ظ

فرض کنید می خواهید اعداد 1 تا 1000 را با یکدیگر جمع کنید. اگر بخواهید مانند مثال پست قبل عمل کنید، به یک برنامه هزار خطی نیاز است. برای اضافه کردن اعداد به یکدیگر، نیاز به انجام عمل تکراری جمع می باشد. شما می توانید برای انجام این عمل تکراری از یک حلقه در برنامه خود استفاده کنید.

 

مثال زیر برنامه ای را نشان می دهد که اعداد صحیح 1 تا 1000 را با یکدیگر جمع می کند.

/*
 * Sum from a lowerbound to an upperbound using a while-loop
 */

public class RunningNumberSum {  // Save as "RunningNumberSum.java"
   public static void main(String[] args) {
      int lowerbound = 1;      // Store the lowerbound
      int upperbound = 1000;   // Store the upperbound
      int sum = 0;   // Declare an int variable "sum" to accumulate the numbers
                     // Set the initial sum to 0
      // Use a while-loop to repeatitively sum from the lowerbound to the upperbound
      int number = lowerbound;
      while (number <= upperbound) {
         sum = sum + number;  // Accumulate number into sum
         ++number;            // Next number
      }
      // Print the result
      System.out.println("The sum from " + lowerbound + " to " + upperbound + " is " + sum);
   }
}

 

دو متغیر صحیح lowerbound و upperbound را برای نگه داری حد پایین و بالای اعداد اعلان کرده ایم. متغیر sum که به صورت صحیح اعلان و با صفر مقدار دهی اولیه شده است را نیز برای نگه داری حاصل جمع استفاده می کنیم. حلقه ی مورد استفاده در این برنامه while-loop نامیده می شود. حلقه ها، فرم های دیگری نیز دارند که در ادامه مسیر آموزش با آنها آشنا خواهید شد.

گرامر while-loop به شکل زیر است ...

  • امین بهرامی