تبليغاتX
.:: لوتوس دنیای موبایل ::.
.:: لوتوس دنیای موبایل ::.
دانلود برنامه موبایل - ترفندهای موبایل - دانلود نرم افزار کامپیوتر)نظر یادتون نره(
قال رسول الله (ص) : ايها الناس ! انه قد اقبل اليكم شهر الله بالبركة و الرحمة و المغفرة
جاوا-6 نگاهي دقيقتر به الفاظ

دسته بندی : / لینک ثابت

نگاهي دقيقتر به الفاظ

اكنون كه انواع توكار را بطور رسمي توضيح داده ايم ، نگاه دقيقتري به اين
الفاظ خواهيم داشت .

الفاظ عدد صحيح integer literals
احتمالا" اعداد صحيح رايجترين نوع استفاده شده در برنامه هاي نوع بندي شده
هستند. هر مقدار رقمي كلي يك لفظ عدد صحيح است . اعداد 1، 2،، 3، و 42 مثالهاي
روشني هستند . اين اعداد همگي مقادير دهدهي مي باشند ، بدين معني كه اين اعداد
در يك مبناي ده رقمي تعريف شده اند . دو مبناي ديگر نيز در الفاظ عدد صحيح قابل
استفاده هستند : مبناي هشت (octal) و مبناي 16(hexadecimal(). مقادير در مبناي
هشت در جاوا با يك رقم 0 پيش آيند مشخص ميشوند. ارقام دهدهي معمولي نمي توانند
رقم 0 پيش آيند داشته باشند . بنابراين مقدار بظاهر معتبر 09 خطايي را در
كامپايلر توليد مي كند، زيرا رقم 9 خارج از دامنه 0تا 7ا مبناي هشت قرار دارد.
يكي ديگر از مبناهاي رايج براي ارقام مورد استفاده برنامه نويسان ، مبناي 16
مي باشد كه با مدول اندازه هاي كلمه 8 تايي نظير 8 ، 16 ، 32 و 64 بيتي كاملا"
سازگاري دارد . يك ثابت درمبناي 16 را توسط OXيا oxا مشخص مي كنيد . دامنه يك
رقم در مبناي 16 از رقم 0 تا 15 و حروف Aتا Fا ( يا aتا fا ) بعنوان جايگزين
ارقام 10 تا 15 مي باشد .
الفاظ عدد صحيح يك مقدار int توليد مي كنند كه در جاوا يك مقدار عدد صحيح 32
بيتي است . از آنجاييكه جاوا شديدا" نوع بندي شده است ، ممكن است تعجب كنيد
كه چگونه مي توان يك لفظ عدد صحيح را به يكي ديگر از انواع عدد صحيح جاوا نظير byte
يا longا نسبت داد ، بدون اينكه خطاي عدم سازگاري انواع بوجود آيد .
خوشبختانه چنين حالتهايي بسادگي اداره مي شوند . هنگاميكه يك لفظ عدد صحيح به
يك متغير byteيا shortا منتسب مي شود، اگر مقدار لفظ داخل محدوده نوع هدف قرار
داشته باشد ، خطايي توليد نخواهد شد . همچنين همواره مي توان يك لفظ عدد صحيح
را به يك متغير long منتسب نمود . اما براي مشخص نمودن يك لفظ long بايد بطور
صريح به كامپايلر بگوييد كه مقدار لفظ از نوع long است . اينكار را با الحاق
يك حرف L بزرگ يا كوچك به لفظ انجام مي دهيم . بعنوان مثال ، ox7ffffffffffffffL 9223372036854775807L
بزرگترين Long مي باشد .

الفاظ عدد اعشاري Floating-point literals
ارقام اعشاري معرف مقادير دهدهي با اجزائ كسري مي باشند . آنها را مي توان
به شكل استاندارد يا به شكل علامتگذاري علمي بيان نمود . نشانه گذاري استاندارد
شامل يك جزئ عدد صحيح است كه بعد از آن يك نقطه و بعد از آن جزئ كسري عدد قرار
مي گيرد . بعنوان مثال 2.0 يا 3.14159 يا 0.6667 معرف نشانه گذاري استاندارد
معتبر در ارقام اعشاري هستند . نشانه گذاري علمي از يك نشانه گذاري استاندارد
نقطه مخصوص اعشاري بعلاوه يك پيوند كه مشخص كننده تواني از عدد 10 است كه
بايد در عدد ضرب شود استفاده مي كند . توان ( نما ) را توسط علامت Eيا eا كه
يك رقم دهدهي بدنبال آن مي آيد و ممكن است مثبت يا منفي باشد ، نشان مي دهيم .
مثل 6.022E23 يا 05-314159E و 2e+100 .
الفاظ عدد اعشاري در جاوا بصورت پيش فرض داراي دقت مضاعف (double) هستند .
براي مشخص نمودن يك لفظ float بايد يك حرف Fيا fا را به ثابت الحاق نماييد .
همچنين ميتوانيد بطور صريح يك لفظ double را با الحاق يك حرف Dيا dا نيز انجام
دهيد . انجام اينكار البته اضافي است . نوع double پيش فرض 64 بيت حافظه را
مصرف مي كند در حاليكه نوع كم دقت تر float مستلزم 32 بيت حافظه است .

الفاظ Boolean
الفاظ boolean بسيار ساده هستند. يك مقدار boolean فقط دو مقدار منطقي شامل true
و falseو مي تواند داشته باشد . مقادير trueو falseو هرگز به رقم تبديل
نمي شوند . در جاوا لفظ true مساوي يك نبوده ، همچنانكه لفظ false معادل صفر
نيست . در جاوا ، آنها را فقط مي توان به متغيرهاي اعلان شده بعنوان boolean
منتسب نمود و يا در عباراتي با عملگرهاي boolean استفاده نمود .

الفاظ كاراكترها Character literals
كاراكترهاي جاوا در مجموعه كاراكتر كدهاي جهاني نمايه سازي شده اند . آنها
مقادير 16 بيتي هستند كه قابل تبديل به اعداد صحيح بوده و با عملگرهاي عدد
صحيح نظير عملگرهاي اضافه و كسر نمودن اداره مي شوند . يك كاراكتر لفظي همواره
داخل يك علامت ' ' معرفي مي شود . كليه كاراكترهاي ASCII قابل رويت مي توانند
بطور مستقيم به داخل اين علامت وارد شوند ، مثل 'a'يا 'z'ايا '@'ا . براي
كاراكترهايي كه امكان ورود مستقيم را ندارند ، چندين پيش آيند وجود دارند كه
امكان ورود كاراكتر دلخواه را فراهم مينمايند، نظير '\' براي ورود خود كاراكتر
و '\n' براي كاراكتر خط جديد . همچنين مكانيسمي براي ورودي مستقيم مقدار يك
كاراكتر در مبناي هشت يا شانزده وجود دارد . براي نشانه گذاري مبناي هشت از
علامت \ كه توسط يك عدد سه رقمي دنبال ميشود، استفاده كنيد. بعنوان مثال '\141'
همان حرف 'a' است . براي مبناي شانزده از علامت (\u) استفاده كنيد و بعد از آن
دقيقا" چهار رقم مبناي شانزده . بعنوان مثال '\uoo61' كه معادل حرف 'a' در
استاندارد lso-latin-1 است چون بايت بالايي آن صفر است . '\ua432' يك كاراكتر Katakana
ژاپني است . جدول زير پيش آيندهاي كاراكترها را نشان مي دهد .

|
توصيف آن پيش آيند | |
كاراكتر مبناي هشت (ddd) \ddd | |
كاراكتر كد جهاني مبناي شانزده (xxxx) \uxxxx | |
علامت تكي نقل قول \' | |
علامت جفتي نقل قول \" | | \\ Backslash |
|
كاراكتر برگشت به سر خط \r | |
خط جديد \n | |
تغذيه فرم \f | | \t Tab |
| \b Backspace |



الفاظ String
الفاظ رشته اي در جاوا نظير ساير زبانهاي برنامه نويسي مشخص مي شوند قرار
دادن يك دنباله از كاراكترها بين يك جفت از علامات نقل قول ، در زير نمونه هايي
از الفاظ رشته اي را مشاهده مي كنيد .

"Hello world"
"tow\nlines"
"\"This is in quotes\"

پيش آيندها و نشانه گذاريهاي مبناي هشت / شانزده كه براي الفاظ كاراكترها
توصيف شد ، بهمان روش در داخل الفاظ رشته اي كار مي كنند . يك نكته مهم درباره
رشته هاي جاوا اين است كه آنها بايد روي يك خط شروع شده و پايان يابد . برخلاف
زبانهاي ديگر در جاوا ادامه خط در خطهاي ديگر مجاز نيست .
نكته : حتما" مي دانيد كه در اكثر زبانهاي ديگر شامل Cو C++و ، رشته ها بعنوان
آرايه هاي كاراكتري پياده سازي مي شوند . اما در جاوا اين حالت وجود
ندارد . رشته ها از نوع اشيائ هستند . بعدا" مي بينيد از آنجاييكه جاوا ياده سازي مي كند ، دربرگيرنده تواناييهاي


نویسنده مطلب : لوتوس   \  تاریخ درج : چهارشنبه 28 دی1384   17:56 \

جاوا-5 نواع اعداد اعشاري

دسته بندی : / لینک ثابت

انواع اعداد اعشاري

اعداد اعشاري يا همان اعداد حقيقي براي ارزش گذاري عبارتهايي كه نيازمند
دقت بيشتري هستند ، استفاده مي شوند . بعنوان نمونه ، محاسباتي نظير ريشه دوم
و محاسبات مثلثاتي نظير سينوس و كسينوس منجربه جوابهايي مي شوند كه براي تعيين
دقت آن نياز به نوع عدد اعشاري مي باشد . جاوا يك مجموعه استاندارد (IEEE-754)
از انواع عدد اعشاري و عملگرها را پياده سازي مي كند. دو نوع عدد اعشاري تعريف
شده يعني floatو doubleو هستند كه بترتيب معرف دقت معمولي و مضاعف مي باشند .
پهنا و دامنه آنها را در زير نشان داده ايم :
دامنه پهنا بر حسب تعداد بيت نام
double 64 1.7e-308 to 1.7e+308
float 32 3.4e-038 to 3.4e+038

هر يك از انواع اعشاري را متعاقبا" مورد بررسي قرار مي دهيم .
float

اين نوع مشخص كننده يك مقدار با دقت معمولي بوده كه از 32 بايت حافظه
استفاده مي كند . دقت معمول روي بعضي پردازنده ها سريعتر بوده و نسبت به دقت
مضاعف نيمي از فضا را اشغال مي كند ، اما هنگاميكه مقادير خيلي بزرگ يا خيلي
كوچك باشند ، دقت خود را از دست ميدهد . متغيرهاي نوع float براي زماني مناسب
هستند كه از يك عضو كسري استفاده مي كنيد اما نيازي به دقت خيلي زياد نداريد .
بعنوان مثال ، نوع float براي معرفي دلار و سنت بسيار مناسب است . + float hightemp/ lowtemp;

double

دقت مضاعف كه با واژه كليدي double معين مي شود براي ذخيره كردن يك مقدار 64
بيت فضا را اشغال مي كند . دقت مضاعف روي برخي پردازنده هاي جديد كه براي
محاسبات رياضي با سرعت زياد بهينه شده اند ، واقعا" سريعتر از دقت معمولي عمل
مي كند . كليه توابع مثلثاتي نظير ()sin ، ()cos و ()sqrt مقادير مضاعف را
برمي گردانند . هنگام اجراي محاسبات مكرر كه نياز به حفظ دقت داريد و يا هنگام
كار با ارقام خيلي بزرگ double بهترين انتخاب است .
در زير برنامه اي را مشاهده مي كنيد كه از double استفاده نمود تا محيط يك
دايره را محاسبه كند :

+ // Compute the area of a circle.
+ class Area {
+ public static void main(String args[] ){
+ double pi/ r/ a;
+
+ r = 10.8; // radius of circle
+ pi = 3.1416; // pi/ approximately
+ a = pi * r * r; // compute area
+
+ System.out.println("Area of circle is " + a);
+ }
+ }


كاراكترها
در جاوا از نوع داده char براي ذخيره كردن كاراكترها استفاده مي شود . اما
برنامه نويسان Cو C++و آگاه باشند كه char در جاوا مشابه char در زبانهاي C و C++
نيست . در زبانهاي Cو C++و ، نوع char يك نوع عدد صحيح با پهناي 8 بيت
است . اما جاوا متفاوت عمل مي كند . جاوا از كدهاي جهاني (unicode) براي معرفي
كاراكترها استفاده مي كند . كدهاي جهاني يك مجموعه كاملا" جهاني از كاراكترها
هستند كه مي توانند همه كاراكترها را معرفي نمايند . اين مجموعه شامل دهها
مجموعه كوچك تر كاراكتري نظير Latin، Greek،، Arabic،، Cyrillic،، Hebrew، Katakana
، Hangul، و امثال آن است .
براي اين منظور ، 16 بيت مورد نياز است . بنابراين char در جاوا يك نوع 16
بيتي است . دامنه charاز 0ز تا 65/536 مي باشد . در نوع char مقدار منفي وجود
ندارد . مجموعه استاندارد كاراكترها موسوم به ASCII همچون گذشته داراي دامنه
از 0 تا 127 و مجموعه كاراكترهاي 8 بيتي توسعه يافته موسوم به lso-Latin-1
داراي دامنه از 0 تا 255 مي باشند .
چون در جاوا امكان نوشتن ريز برنامه ها براي كاربري جهاني وجود دارد ، بنظر
مي رسد كه بهتر است جاوا از كدهاي جهاني براي معرفي كاراكترها استفاده نمايد .
البته بكار بردن كدهاي جهاني درمورد زبانهايي نظير انگليسي ،آلماني ،اسپانيايي
يا فرانسوي كه كاراكترهاي آنها را مي توان براحتي داخل 8 بيت جاي داد ، تا حدي
سبب نزول كارآيي خواهد شد . اما اين بهايي است كه براي رسيدن به قابليت حمل
جهاني در برنامه ها بايد پرداخت .
نكته : اطلاعات بيشتر درباره كدهاي جهاني را در آدرسهاي وب زير پيدا خواهيد
نمود : http://www .unicode .org
http://www .stonehand .com/unicode .html


در زير برنامه اي را مشاهده مي كنيد كه متغيرهاي char را نشان مي دهد :

+ // Demonstrate char data type.
+ class CharDemo {
+ public static void main(String args[] ){
+ char ch1/ ch2;
+
+ ch1 = 88; // code for X
+ ch2 = 'Y';
+
+ System.out.print("ch1 and ch2 :");
+ System.out.println(ch1 + " " + ch2);
+ }
+ }

اين برنامه خروجي زير را نشان خواهد داد : ch1 and ch2 :xy

دقت كنيد كه مقدار 88به ch1 نسبت داده شده ، كه مقدار متناظر با حرف x در
كد ASCII ( و كد جهاني ) است . قبلا" هم گفتيم كه مجموعه كاراكتري ASCII َ127
مقدار اوليه در مجموعه كاراكتري كدهاي جهاني را اشغال كرده است . بهمين دليل
كليه فوت و فنهاي قديمي كه قبلا" با كاراكترها پياده كرده ايد ، در جاوا نيز به
خوبي جواب مي دهند .
اگر چه انواع char عدد صحيح محسوب نمي شوند ، اما در بسياري از شرايط
مي توانيد مشابه عدد صحيح با آنها رفتار كنيد . بدين ترتيب قادريد دو كاراكتر
را با هم جمع نموده و يا اينكه مقدار يك متغير كاركتري را كاهش دهيد . بعنوان
مثال ، برنامه زير را در نظر بگيريد :

+ // char variables behave like integers.
+ class CharDemo2 {
+ public static void main(String args[] ){
+ char ch1;
+
+ ch1 = 'X';
+ System.out.println("ch1 contains " + ch1);
+
+ ch1++; // increment ch1
+ System.out.println("ch1 is now " + ch1);
+ }
+ }

خروجي اين برنامه بشرح زير خواهد بود : ch1 contains x
ch1 is now y

در برنامه ابتدا مقدار xبه ch1 داده ميشود . سپس ch1 افزايش مي يابد . اين
روال باعث مي شود تا ch1 حرف y را اختيار كند، كه كاراكتر بعدي در ترتيب ASCII
( و كدهاي جهاني ) مي باشد .
Boolean

جاوا يك نوع ساده موسوم به boolean براي مقادير منطقي دارد . اين نوع فقط
يكي از مقادير ممكن trueيا falseا را اختيار مي كند . اين نوعي است كه توسط
كليه عملگرهاي رابطه اي نظير b شرطي كه دستورهاي كنترلي نظير ifو forو را مديريت مي كنند ، استفاده مي شود .
در زير برنامه اي مشاهده مي كنيد كه نوع boolean را نشان مي دهد :

+ // Demonstrate boolean values.
+ class BoolTest {
+ public static void main(String args[] ){
+ boolean b;
+
+ b = false;
+ System.out.println("b is " + b);
+ b = true;
+ System.out.println("b is " + b);
+
+ // a boolean value can control the if statement
+ if(b )System.out.println("This is executed.");
+
+ b = false;
+ if(b )System.out.println("This is not executed.");
+
+ // outcome of a relational operator is a boolean value
+ System.out.println("10 > 9 is " +( 10 > 9));
+ }
+ }

خروجي برنامه فوق بقرار زير خواهد بود :

b is false
b is true
This is executed.
10>9 is true

درباره اين برنامه سه نكته جالب توجه وجود دارد . اول اينكه وقتي كه مقدار boolean
توسط ()println خارج مي شود ، مي بينيد كه "true"يا "false"ا بنمايش
درمي آيد . دوم اينكه يك متغير boolean بتنهايي براي كنترل دستور if كفايت
مي كند . ديگر نيازي به نوشتن يك دستور if بقرار زير نخواهد بود : + if(b == true... )

يك مقدار <سوم اينكه ، پي آمد يك عملگر رابطه اي نظير boolean است . بهمين
دليل است كه عبارت 9>َ10 مقدار true را نمايش مي دهد . علاوه بر اين ، مجموعه ي از پرانتزهايي كه عبارت 9>َ10 را محصور كرده اند ، ضروري است زيرا عملگر +


نویسنده مطلب : لوتوس   \  تاریخ درج : چهارشنبه 28 دی1384   17:52 \

ساختماني از union

دسته بندی : / لینک ثابت

قبلا" مشاهده شد كه اجزاي يك ساختمان مي توانند ، از نوع ساختمان باشند . به
طور كلي بكارگيري يك ساختمان در ساختمان ديگر ، union در يك ساختمان و برعكس و union
در unionر ديگر امكان پذير است .

مثال :

main)(
{
struct twoint {
int num1:
int num2:
} ;
union intflo {
struct twoint test ;
float flonum ;
} unex ;
printf("\n size of union is: " );
printf("%d"/sizeof(union intflo));
unex.test.num1=564 ;
unex.test.num2=-231 ;
printf("\n unex.test.num1=");
printf("%d"/unex.test.num1 );
printf("\n unex.test.num2=");
printf("%d"/unex.test.num2 );
unex.flonum=45.76 ;
printf("\n unex.flonum=");
printf("%.2f"/unex.flonum );
}

نمونه اي از خروجي برنامه مثال بالا :

size of union is: 4
unex.test.num1=564
unex.test.num2=-231
unex.flonum=45.76


نویسنده مطلب : لوتوس   \  تاریخ درج : چهارشنبه 28 دی1384   17:50 \

unions

دسته بندی : / لینک ثابت

C، union، محلي از حافظه است كه توسط دو يا چند متغير بطور اشتراكي
مورد استفاده قرار مي گيرد . اين متغيرها بطور همزمان نمي توانند از اين محل
استفاده كنند بلكه هر متغير مي تواند در زمان هاي متفاوتي اين محل را مورد
استفاده قرار دهد .
نحوه تعريف union همانند ساختمان است و شكل كلي آن بصورت زير است : {
اسم > union اجزاي union ;
اسامي متغيرها }
اسم union از قانون نامگذاري براي متغيرها تبعيت ميكند. اجزاي union همانند
اجزاي ساختمان تعريف مي شوند و چگونگي تعريف متغيرهاي union نيز مثل تعريف
متغيرهاي ساختمان است . طول يك union به اندازه مجموع طول اجزاي آن نيست بلكه
به اندازه طول عنصري است كه بيشترين طول را دارد، زيرا در واقع union ساختماني
است كه آدرس شروع كليه اجزاي آن از يك نقطه است . union زير را در نظر بگيريد:

union u_type {
int i ;
char ch ;
float y ;
} ;


در تعريف u-type، 3، عنصر به اسامي i، ch،و yو تعريف شده اند . در اين union
چون طول y از طول ساير اجزائ بيشتر است ( طول int برابر با 2 بايت ، طول char
برابر با 1 بايت و طول float برابر با 4 بايت است ) طول u-type برابر با طول y
يعني 4 در نظر گرفته مي شود ( مثال ) شكل (1) نحوه استفاده اجزاي i، chو yو را
از يك محل حافظه به طول 4 بايت نشان مي دهد .
ؤؤؤؤ >y < ؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | 0 | 1 | 2 | 3
|
شماره بايت
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch
< ؤ
ؤؤ >i < ؤؤ
شكل (1) . نحوه استفاده اجزاي union از حافظه

مثال :

main)(
{
union test {
int i ;
char ch ;
float y ;
} un ;
float x ;
printf("\n enter an integer number:");
scanf("%d"/&un.i );
printf(" the value of i is: %d/un.i);
printf("\n enter a character: " );
un.ch=getche )(;
printf("\n value of ch is:%c"/un.ch);
printf("\n enter a float number: ");
scanf("%f"/&x );
un.y=x ;
printf("the value of y is:%.2f"/un.y);
printf("\n\n the size of union is:");
printf("%d"/sizeof(union test ));
}

نمونه اي از خروجي برنامه مثال بالا :

enter an integer number:43
the value of i is:43
enter a character:f
the value of ch is:f
enter a float number:23.65
the value of y is:23.65
the size of u


نویسنده مطلب : لوتوس   \  تاریخ درج : چهارشنبه 28 دی1384   17:49 \

سلام وای نظر آخ نطر

دسته بندی : / لینک ثابت

سلام

خوبین بیمعرفتا

چزا نظر نمیذارید

برام نظر بزارید که بدونم خوب مینویسم یا نه

میخوام بدونم باید ادامه بدم یا بارو بندیل جمع کنم برم بابا نظر بزارید

نظر بزاید

با نظراتتون منو راهنامایی کنید

راستی اگه سوال یا برنامه ای درباره موبایل بخصوص نوکیا داشتین بپرسین

مرسی که سر مزنید


نویسنده مطلب : لوتوس   \  تاریخ درج : سه شنبه 13 دی1384   17:49 \

جاوا-4 اصل و نسب جاوا

دسته بندی : / لینک ثابت

جاوا به زبان C++ ( نتيجه مستقيم زبان C ) وابسته است . بسياري از خصلتهاي
جاوا بطور مستقيم از اين دو زبان گرفته شده است . دستور زبان جاوا منتج از
دستور زبان C است . بسياري از جنبه هاي oop زبان جاوا از C++ بعاريت گرفته شده
است . در حقيقت بسياري از خصلتهاي زبان جاوا از اين دو زبان مشتق شده يا با
آنها مرتبط است . علاوه بر اين ، توليد جاوا بطور عميقي متاثر از روال پالايش و
تطبيقي است كه طي سه دهه گذشته براي زبانهاي برنامه نويسي موجود پيش آمده است .
بهمين دلايل بهتر است سير مراحل و نيروهايي كه منجر به تولد جاوا شده را بررسي
نماييم . هرنوع ابتكار و فكر جديد در طراحي زبانها براساس نياز به پشت سر نهادن
يك مشكل اصلي است كه زبانهاي قبلي از حل آن عاجز مانده اند . جاوا نيز بهمين
ترتيب متولد شد .

تولد زبان برنامه نويسي جديد : C
زبان C پس از تولد ، شوك بزرگي به دنياي كامپيوتر وارد كرد . اين زبان بطور
اساسي شيوه هاي تفكر و دستيابي به برنامه نويسي كامپيوتر را دگرگون ساخت . تولد C
ناشي از نياز به يك زبان ساخت يافته ، موثر و سطح بالا بعنوان جايگزيني براي
كدهاي اسمبلي و پياده سازي برنامه نويسي سيستم بود . هنگاميكه يك زبان برنامه
نويسي جديد متولد ميشود ، مقايسه ها شروع خواهد شد . مقايسه ها براساس معيارهاي
زير انجام مي گيرند :
ؤ راحتي كاربري در مقايسه با قدرتمندي زبان برنامه نويسي
ؤ ايمني در مقايسه با سطح كارآيي
ؤ استحكام در مقايسه با توسعه پذيري
قبل از ظهور زبان C برنامه نويسان با زبانهايي كار مي كردند كه قدرت
بهينه سازي يك مجموعه خاص از خصايص را داشتند . بعنوان مثال هنگاميكه از فرترن
براي نوشتن برنامه هاي موثر در كاربردهاي علمي استفاده مي كنيم ، برنامه هاي
حاصله براي كدهاي سيستم چندان مناسب نيست . زبان بيسيك با اينكه براحتي آموخته
مي شود ، اما قدرت زيادي نداشته و عدم ساخت يافتگي آن در برنامه هاي بزرگ مشكل
آفرين خواهد شد . از زبان اسمبلي براي توليد برنامه هاي كاملا" موثر استفاده
مي شود ، اما آموزش و كار با اين زبان بسيار مشكل است . بعلاوه اشكال زدايي
كدهاي اسمبلي بسيار طاقت فرساست .
مشكل اصلي ديگر اين بود كه زبانهاي اوليه برنامه نويسي نظير بيسيك ، كوبول
و فرترن براساس اصول ساخت يافته طراحي نشده بودند . اين زبانها از Goto بعنوان
ابزارهاي اوليه كنترل برنامه استفاده مي كردند . در نتيجه ، برنامه هاي نوشته
شده با اين زبانها توليد باصطلاح " كدهاي اسپاگتي "(spaghetti code() مي كردند
منظور مجموعه اي در هم تنيده از پرشها و شاخه هاي شرطي است كه درك يك برنامه
طولاني را ناممكن مي سازد . اگر چه زبانهايي نظير پاسكال ، ساخت يافته هستند
اما فاقد كارايي لازم بوده و جنبه هاي ضروري براي كاربرد آنها در طيف وسيعي از
برنامه ها وجود ندارد . ( بخصوص ويرايش پاسكال استاندارد فاقد ابزارهاي كافي
براي استفاده در سطح كدهاي سيستم بود . )
تا قبل از ابداع زبان C ، زبان ديگري قدرت نداشت تا خصلتهاي متضادي كه در
زبانهاي قبلي مشاهده ميشد ، را يكجا گردآوري كند . نياز به وجود يك چنين زباني
شديدا" احساس ميشد. در اوايل دهه 1970 ميلادي ، انقلاب رايانه اي در حال شكل گيري
بود و تقاضا براي انواع نرم افزارها فشار زيادي روي برنامه نويسان و تواناييهاي
ايشان اعمال ميكرد. درمراكز آموزشي تلاش مضاعفي براي ايجاد يك زبان برنامه نويسي
برتر انجام مي گرفت . اما شايد از همه مهمتر توليد و عرضه انبوه سخت افزار
كامپيوتري بود كه بعنوان يك نيروي ثانويه روي زبانهاي برنامه نويسي عمل ميكرد.
ديگر رايانه ها و اسرار دروني آنها پشت درهاي بسته نگهداري نمي شد . براي اولين
بار بود كه برنامه نويسان واقعا" دسترسي نامحدودي به اسرار ماشينهاي خود پيدا
نمودند . اين امر زمينه تجربيات آزادانه را بوجود آورد . همچنين برنامه نويسان
توانستند ابزارهاي مورد نيازشان را ايجاد نمايند . با ظهور زبان C ، زمينه
جهشهاي بزرگ در زبانهاي برنامه نويسي مهيا شد .
زبان C نتيجه توسعه تحقيقاتي درباره يك زبان قديمي تر بنام Bcpl بود . زبان C
اولين بار توسط Dennis Ritchie ابداع و روي ماشينهاي DEC PDP-11 داراي سيستم
عامل يونيكس اجرا شد . زبان Bcpl توسط Martin Richards توسعه يافته بود . Bcpl
منجر به تولد زبان B شد كه توسط Ken thompson ابداع شد و سرانجام به زبان C
منتهي شد . براي ساليان متمادي ، نسخه روايت استاندارد زبان C هماني بود كه
روي سيستم عامل unix عرضه و توسط Briian Kernighanو Dennis Ritchieو در كتاب "The C programming Language"
توصيف شده بود . بعدا" در سال 1989 ميلادي زبان C
مجددا" استاندارد شد وو استاندارد ANSI براي زبان C انتخاب شد .
بسياري معتقدند كه ايجاد زبان C راهگشاي دوران جديدي در زبانهاي برنامه نويسي
بوده است . اين زبان بطور موفقيت آميزي تناقضهاي موجود در زبان هاي برنامه نويسي
قبلي را مرتفع نمود . نتيجه فرآيند ايجاد زبان C ، يك زبان قدرتمند ، كارا و
ساخت يافته بود كه براحتي قابل آموزش و فراگيري بود . اين زبان يك ويژگي غير
محسوس اما مهم داشت : زبان C ، زبان برنامه نويسان بود . قبل از ابداع زبان C
زبانهاي برنامه نويسي يا جنبه هاي آموزشي داشته يا براي كارهاي اداري طراحي
ميشد . اما زبان C چيز ديگري بود . اين زبان توسط برنامه نويسان واقعي و درگير
با كارهاي جدي ، طراحي و پياده سازي شده و توسعه يافت . جنبه هاي مختلف اين
زبان توسط افرادي كه با خود زبان سر و كار داشته و برنامه نويسي مي كردند مورد
بررسي ، آزمايش و تفكر و تفكر مجدد قرار گرفته بود . حاصل اين فرآيند هم زباني
بود كه برنامه نويسان آن را دوست داشتند . در حقيقت زبان C بسرعت مورد توجه
برنامه نويسان قرار گرفت تا جايي كه برنامه نويسان نسبت به C تعصب خاصي پيدا
نمودند . اين زبان مقبوليت و محبوبيت زيادي در بين برنامه نويسان يافت . بطور
خلاصه زبان C توسط برنامه نويسان و براي برنامه نويسان طراحي شده است . بعدا"
مي بينيد كه جاوا نيز اين ويژگي را از اجداد خود بارث برده است .

نياز به C++
طي دهه 1970 و اوايل دهه 80 ميلادي زبان C نگين انگشتري برنامه نويسان بود و
هنوز هم در سطح وسيعي مورد استفده قرار مي گيرد . از آنجاييكه C يك زبان موفق
و سودمند بوده ، ممكن است بپرسيد چه نيازي به زبانهاي جديدتر وجود داشته است .
پاسخ شما يك كلمه يعني پيچيدگي (Complexity) است . طي تاريخ كوتاه برنامه نويسي
پيچيدگي فزاينده برنامه ها نياز براي شيوه هاي بهتر مديريت پيچيدگي را بوجود
آورده است . C++ پاسخي است به اين نياز مديريت پيچيدگي برنامه ها كه زمينه اصلي
پيدايش C++ بوده است .
شيوه هاي برنامه نويسي از زمان اختراع رايانه تاكنون بطور قابل توجهي تغيير
نموده اند . بعنوان مثال ، هنگاميكه رايانه ها اختراع شدند ، برنامه نويسي با
استفاده از دستور العملهاي باينري (Binary) ماشين انجام مي گرفت .
ماداميكه برنامه ها شامل حدود چند دستور العمل بود ، اين روش كارآيي داشت .
بموازات رشد برنامه ها زبان اسمبلي ابداع شد تا برنامه نويسان بتوانند برنامه هاي
بزرگتر و پيچيده تر را با استفاده از نشانه هايي كه معرف دستورالعملهاي ماشين
بودند ، بنويسند . اما پيشرفت و رشد برنامه ها همچنان ادامه يافت و زبانهاي سطح
بالايي معرفي شدند كه ابزارهاي مناسب براي مديريت پيچيدگي روزافزون برنامه ها را
در اختيار برنامه نويسان قرار مي دادند .
اولين زبان مطرح در اين زمينه فرترن بود . اگر چه فرترن اولين گام در اين
مسير بود، اما زباني است كه توسط آن برنامه هاي تميز و سهل الادراك نوشته ميشود.
در دهه 1960 ميلادي برنامه نويسي ساخت يافته مطرح شد . با استفاده از زبانهاي
ساخت يافته ، براي اولين بار امكان راحت نوشتن برنامه هاي بسيار پيچيده بوجود
آمد . اما حتي با وجود روشهاي برنامه نويسي ساخت يافته ، هنگاميكه يك پروژه به
اندازه معيني مي رسيد ، پيچيدگي آن از توان مديريت برنامه نويس خارج مي شد . در
اوائل دهه 1980 ميلادي بسياري از پروژه هاي مديريت برنامه نويسي از مرزهاي
برنامه نويسي ساخت يافته گذشتند . براي حل اين قبيل مشكلات ، يك روش نوين
برنامه نويسي ابداع شد . اين روش را برنامه نويسي شي ئ گرا يا باختصار oop
مي نامند . oop با جزئيات بيشتري بعدا" در همين كتاب بررسي خواهد شد ، اما
توصيف مختصر اين روش عبارت است از : oop يك نوع روش شناسي برنامه نويسي است كه
امكان سازماندهي برنامه هاي پيچيده از طريق بهره گيري از سه روش : وراثت ، كپسول
سازي و چند شكلي ، را ايجاد مي كند .
در تحليل نهايي ، اگر چه C بزرگترين و مهمترين زبان برنامه نويسي جهان است
اما محدوديتهايي در مديريت پيچيدگي برنامه ها دارد . هنگاميكه يك برنامه از
محدوده 25000 تا 100000 خط از كدها تجاوز نمايد، آنچنان پيچيده مي شود كه درك
آن بعنوان يك برنامه كلي ناممكن خواهد شد . C++ اين محدوديت را از بين برده و
به برنامه نويس كمك مي كند تا برنامه هايي از اين بزرگتر را نيز درك و مديريت
نمايد . C++
در سال 1979 ميلادي توسط Bjarne stoustrup هنگاميكه در آزمايشگاه بل در Marry Hill
ايالت New jersy مشغول كار بود ، ابداع شد . او در ابتدا اين زبان
جديد را (C with classes) ناميد . اما در سال 1983 ميلادي نام اين زبان جديد به C++
تغيير يافت . C++ تداوم زبان C بود كه جنبه هاي oop نيز به آن اضافه مي شد.
از آنجايي كه زبان C++ براساس زبان C شكل گرفته ، در بر گيرنده كليه جنبه ها
خسلتها (attributes) و مزاياي زبان C مي باشد . اين عوامل دلايل قاطعي براي
موفقيت حتمي C++ بعنوان يك زبان برنامه نويسي هستند . ابداع C++ در حقيقت تلاشي
براي ايجاد يك زبان كاملا" جديد برنامه نويسي نبود. در حقيقت پروژه C++ منجر به
افزايش تواناييهاي زبان موفق C شد .
چون C++ از ابتداي تولد تاكنون داراي روايتهاي گوناگوني شده است ، در حال
حاضر در تلاش استاندارد نمودن اين زبان هستند . ( اولين روايت پيشنهادي ANSI
براي استاندارد C++ در سال 1994 ميلادي مطرح شد . ) روال استاندارد سازي اين مچنان


نویسنده مطلب : لوتوس   \  تاریخ درج : دوشنبه 12 دی1384   20:50 \

جاوا-3 integers ( اعداد صحيح )

دسته بندی : / لینک ثابت

جاوا چهار نوع عدد صحيح تعريف مي كند : byte، short،، int،، long، . كليه
اين اعداد داراي علامات مثبت و منفي هستند . جاوا از اعداد صحيح غير علامت دار و
فقط مثبت پشتيباني نمي كند . بسياري از زبانهاي برنامه نويسي شامل Cو C++و هم
از اعداد صحيح علامت دار و هم از اعداد صحيح فاقد علامت پشتيباني مي كنند . اما
طراحان جاوا احساس مي كردند كه اعداد صحيح فاقد علامت غير ضروري است . بويژه
آنها احساس كردند كه مفهوم فاقد علامت (unsigned) بيشتر براي مشخص كردن رفتار
بيت بالاتر از حد مجاز (high-order bit) استفاده مي شود كه علامت يك int را
هنگاميكه بعنوان يك رقم عنوان مي شود ، مشخص مي كند . بعدا" خواهيد ديد كه
جاوا مفهوم بيت بالاتر از حد مجاز (high-order bit) را بگونه اي متفاوت مديريت
مي كند ، يعني با اضافه كردن يك عملگر ويژه حركت به راست فاقد علامت unsigned)
(right shift . بدين ترتيب نياز به يك نوع عدد صحيح فاقد علامت منتفي شده است .
پهناي (widit) يك نوع عدد صحيح را نبايد با ميزان حافظه اي كه مصرف مي كند
اشتباه گرفت ، بلكه نشانه رفتاري است كه براي متغيرها و عبارات آن نوع تعريف
مي شود . محيط حين اجراي جاوا از هر اندازه اي كه نياز داشته باشد ، استفاده
مي كند ، البته تا آن اندازه اي كه انواع براساس اعلام قبلي شما رفتار كنند . در
حقيقت ، حداقل يك پياده سازي byte وجود دارد كه ، short را بعنوان مقادير 32
بيتي ذخيره مي كند تا عملكرد را توسعه دهد. زيرا آنچه درحال حاضر مورد استفاده
قرار مي گيرد ، اندازه كلمه (word size) اكثر كامپيوترهاست .
پهنا و دامنه اين انواع اعداد صحيح همانطوريكه در جدول زير مشاهده مي كنيد
طيف وسيعي دارند :
دامنه پهنا نام
long 64- 9/ 223/ 372/ 036/ 845/ 775/ 808 to 9/ 223/ 372
/036/ 854/ 775/ 807
int 32- 2/ 147/ 483/ 648 to 2/ 147/ 483/ 647
short 16- 32/ 768 to 32/ 767
byte 8- 128 to 127

اكنون نگاه دقيقتري به هر يك از انواع عدد صحيح خواهيم داشت .
byte

كوچكترين نوع عدد صحيح byte است . اين يك نوع علامت دار 8 بيتي است كه دامنه
آن از 128- تا 127 مي باشد . متغيرهاي نوع byte بويژه هنگاميكه با يك جريان
داده از يك شبكه يا يك فايل كار ميكنيد ، سودمند خواهند بود . همچنين هنگاميكه
با داده دودويي ( باينري ) خام مشغول كار هستيد كه ممكن است بطور مستقيم با
ساير انواع توكار جاوا سازگاري نداشته باشند ، بسيار سودمند هستند .
متغيرهاي byte را با استفاده از واژه كليدي byte اعلام مي كنيم . بعنوان
مثال ، در زير دو متغير byte با اسامي bو cو را اعلام كرده ايم : + byte b/ c;

short

يك نوع 16 بيتي علامت داراست . دامنه آن از 768 32/- تا 767 32/ است . short
در اصل كم استفاده ترين نوع در جاوا مي باشد ، چون طوري تعريف شده كه بايت بالاي
آن اول مي آيد ( آن را big-endian format ميگويند ). اين نوع براي كامپيوترهاي 16
بيتي كه بسرعت از رده خارج شده اند ، كاربري دارد .
در زير مثالهايي از چگونگي اعلان متغيرهاي short را مشاهده مي كنيد : + short s;
+ short t;

نكته : Endiannes توصيف كننده چگونگي ذخيره شدن انواع داده چند بايتي short int
و longو در حافظه است . اگر 2 بايت براي معرفي يك نوع short استفاده
شود ، آن بايتي كه ابتدا قرار مي گيرد ( مهمترين يا كم اهميت ترين ? )
مي گويد كه يك ماشين big-endian است ، بدان معني كه مهمترين بايت اول
آمده و بعد از آن بايت كم اهميت تر قرار دارد . ماشينهايي نظير SPARC و power pc
از نوع big-endian و ماشينهاي سري lntelx86نوع little-endianع
هستند .
int

رايجترين نوع عدد صحيح int است . اين يك نوع 32 بيتي علامت دار است كه دامنه
آن از 2/147/483/648- تا 2/147/483/647 گسترده است . علاوه بر كاربردهاي ديگر
متغيرهاي از نوع int براي كنترل حلقه ها و نمايه سازي آرايه ها مورد استفاده قرار
مي گيرند . هر بار كه يك عبارت عدد صحيح شامل byte، short،و intو و ارقام لفظي
(literal) داشته باشيد، كل عبارت قبل از انجام محاسبات به int ارتقائ مي يابد.
نوع int روان ترين و كاراترين نوع است و اكثر اوقات هنگاميكه ميخواهيد رقمي
را براي شمارش يا نمايه سازي آرايه ها يا انجام محاسبات عدد صحيح بوجود آوريد
بايد از آن استفاده نماييد . شايد بنظر آيد كه استفاده از انواع shortو byteو
سبب صرفه جويي در فضا شود ، اما هيچ تضميني وجود ندارد كه جاوا اين انواع را
بطرق داخلي به int ارتقائ ندهد . همواره بياد داشته باشيد كه نوع ، مشخص كننده
رفتار است نه اندازه . ( تنها استثنائ در اين مورد، آرايه است كه در آنجا byte
بصورت تضميني براي هر عضو آرايه فقط يك بايت ، short دو بايت و int از چهار
بايت استفاده مي كند . )
long

يك نوع 64 بيتي علامت دار است و براي مواردي مفيد است كه يك نوع int طول
كافي براي دربرگرفتن مقدار مورد نظر نداشته باشد. دامنه long كاملا" وسيع است .
اين نوع ، براي كار با اعداد خيلي بزرگ مناسب است . بعنوان مثال ، در زير
برنامه اي را مشاهده مي كنيد كه مسافت طي شده توسط نور در تعداد مشخص روز را بر
حسب مايل محاسبه مي كند .

+ // Compute distance light travels using long variables.
+ class Light {
+ public static void main(String args[] ){
+ int lightspeed;
+ long days;
+ long seconds;
+ long distance;
+
+ // approximate speed of light in miles per second
+ lightspeed = 86000;
+
+ days = 1000; // specify number of days here
+
+ seconds = days * 24 * 60 * 60; // convert to seconds
+
+ distance = lightspeed * seconds; // compute distance
+
+ System.out.print("In " + days);
+ System.out.print(" days light will travel about ");
+ System.out.println(distance + " miles .");
+ }
+ }

خروجي اين برنامه بقرار زير خواهد بود : ln 1000 days light will travel about 4730400000000 miles.



نویسنده مطلب : لوتوس   \  تاریخ درج : دوشنبه 12 دی1384   20:49 \

ساختمان هاي بيتي

دسته بندی : / لینک ثابت

در زبان C برخلاف ساير زبانهاي برنامه سازي ، به يك بيت خاص از يك بايت حافظه
مي توان دسترسي پيدا كرد . اين امر در زبان C به دلايل زير مفيد است : 1
اگر محدوديتي در ميزان حافظه وجود داشته باشد، ميتوان از يك بايت بعنوان
چند متغير منطقي استفاده نمود . براي اين منظور مي توان هر بيت را بعنوان يك
متغير منطقي در نظر گرفت كه مقدار صفر به معني ارزش " درستي " و مقدار يك به
معني ارزش " نادرستي " و يا برعكس باشند . 2
در حين ارتباط كامپيوتر با دستگاه هاي خارجي ، بعضي از رابط ها مي توانند
اطلاعات موجود در يك بايت را ( كه هر بيت آن ممكن است تفسير خاصي داشته باشد )
انتقال دهند . 3
بسياري از زيربرنامه هاي سيستم ( كه معمولا" از ديد ما پنهان هستند ) نياز
به دسترسي به بيت ها دارند .
اگر چه همه اعمال فوق توسط عملگرهاي بيتي قابل انجامند ، ولي ساختمان هاي
بيتي ، روش مناسب تر و بهتري براي برآوردن اين اهداف هستند . بطور كلي مي توان
گفت كه ساختمان بيتي ، مكانيزم ساختماني جهت دسترسي به بيت هاي يك بايت از
حافظه است .
روش كلي تعريف ساختمان بيتي به صورت زير است : {
نام ساختمان بيتي struct ;
طول فيلد >1نام فيلد >: <1نوع فيلد > <1 <;
طول فيلد >2نام فيلد >: <2نوع فيلد > <2 <.
.
.
;
طول فيلد >nنام فيلد >: اسامي متغيرهاي بيتي }
نام ساختمان بيتي از قانون نامگذاري براي متغيرها تبعيت مي كند . هر يك از
فيلدها در ساختمان بيتي مي توانند از نوع int، unsigned، و يا signed باشد .
فيلدي كه طول آن 1 باشد يايد از نوع unsigned انتخاب گردد . زيرا بيت با طول 1
نميتواند شامل علامت هم باشد. طول فيلدها در ساختمان بيتي به بيت سنجيده ميشود.
يعني طول فيلد مشخص مي كند كه فيلد مورد نظر چند بيتي است .
بعنوان مثال ساختمان بيتي زير را در نظر بگيريد :

struct device {
unsigned active :1 ;
unsigned ready :1 ;
unsigned xmt_error :1 ;
} dev_code ;

ساختمان 3 device فيلد كه طول هر كدام يك پيت است را تعريف مي كند و متغير dev-code
از نوع ساختمان بيتي device تعريف شده است . متغير dev-code بصورت آن
چه كه در شكل (1) مشاهده مي شود در حافظه قرار مي گيرد .
يك بايت
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
|
شماره بايت
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
< بالا استفاده ؤؤؤ<ؤؤؤ| | | | | |
dev-code/xxmt-error
ؤؤؤؤؤ | | dev-code/rready
ؤؤؤؤؤؤؤؤؤ | dev-code aactive
ؤؤؤؤؤؤؤؤؤؤؤؤؤ
شكل (1) . وضعيت متغير dev-code

همانطور كه در شكل (1) مشاهده مي گردد براي دسترسي به اجراي متغير ساختمان
بيتي از عملگر نقطه (.) استفاده مي گردد . اگر اشاره گري به ساختمان بيتي اشاره
ؤؤ به اجزاي اين >نمايد ، همانند ساختمان معمولي مي توان با استفاده از عملگر
ساختمان دسترسي پيدا كرد .
يكي از موارد كاربرد ساختمان هاي بيتي ، درتجزيه و تحليل اطلاعات اخذ شده از
يك دستگاه سخت افزاري است . بعنوان مثال ، پورت وضعيت يك تطبيق دهنده ارتباط
سري ، يك بايت وضعيت ، با ساختار زير را برمي گرداند :
شماره بيت مفهوم بيت ( وقتي كه 1 باشد )

change clear_to_send line 0
change in data_set_ready 1
trailing edge detected 2
change in recive line 3
clear_to_send 4
data_set_ready 5
telephone ringing 6
received signal 7

بايت وضعيت مربوط به تطبيق دهنده ارتباط سري را مي توان با استفاده از
ساختمان بيتي تعريف كرد :

struct stalus_type {
unsigned delta_cts :1 ;
unsigned delta_dsr :1 ;
unsigned tr_edge :1 ;
unsigned delta_rec :1 ;
unsigned cts :1 ;
unsigned dsr :1 ;
unsigned ring :1 ;
unsigned rec_line :1 ;
} status;

براي استفاده از ساختار بيتي status كافي است كه زير برنامه اي نوشته شود تا
اطلاعات فرستاده شده را بخواند و سپس آن را تجزيه و تحليل و بررسي نمايد : status=get_port_status)(;

در دستور فوق ()get_port_status تابعي است كه پورت وضعيت را خوانده و در
متغير ساختمان بيتي status قرار مي دهد .
بعضي از نكاتي كه در مورد متغيرهاي از نوع ساختمان بيتي بايد در نظر داشت
عبارتند از : 1
نمي توان به آدرس آنها مراجعه كرد 2
نمي توانند بصورت آرايه تعريف شوند 3
به حد زيادي ، وابسته به ماشين هستند، بعنوان مثال ممكن است در يك ماشين
بيت ها از چپ به راست قابل دسترسي باشند و در ماشين ديگر از راست به چپ . 4
تركيبي از ساختمان بيتي و ساختمان معمولي ، ممكن است :

struct emp {
struct addr address1 ;
float pay ;
unsigned lay-off :1 ;
unsigned hourly :1 ;
unsigned shifted :1 ;
} ;

در ساختمان emp ، فيلد address1 از نوع ساختمان address تعريف شده است كه
اين ساختمان مي تواند بصورت زير تعريف شود :

struct address {
char zip ;
char street [31] ;
char city [31] ;
} ;

نكته اي كه در مورد ساختمان emp بايد توجه داشت اين است كه از يك بايت براي
نگهداري 3 قلم اطلاعات ( اجزاي lay-off، hourly،و shiftedو ) استفاده شده است .
اگر از ساختمان بيتي استفاده نميشد حداقل به 3 بايت نياز بود ( اگر اين بايت ها
بصورت كاراكتري تعريف مي شدند ) .

مثال : برنامه اي كه چگونگي استفاده از ساختمان هاي بيتي را نشان مي دهد .

struct date
{
unsigned int day: 5 ;
unsigned int month: 4 ;
unsigned int year: 7 ;
} ;
main)(
{
struct date dateofbirth / today ;
int age ;
char p1[40] / p2[40] ;
clrscr )(;
strcpy(p1/
"enter birth date( day month year:)");
strcpy(p2/
"enter today date(day month year: )");
askfordate(p1 / &dateofbirth );
askfordate(p1 / &today );
if( today.month > dateofbirth.month ||
( today.month == dateofbirth.month &&
today.day > dateofbirth.day))
age=today.year - dateofbirth.year ;
else
age=today.year - dateofbirth.year- 1;
printf("\n the age is %d year."/age);
}
askfordate(char *prompt /
struct date *point)
{
unsigned int d/m /y ;
printf("%s"/prompt );
scanf("%d%d%d"/&d/&m/&y );
day ==d
;
ؤ>point month=m
;
ؤ>point year =y
;
ؤ>point }

نمونه اي از خروجي برنامه مثال بالا :

enter birth date(day month year:)12 12 50
enter t


نویسنده مطلب : لوتوس   \  تاریخ درج : دوشنبه 12 دی1384   20:47 \

اشاره گرهاي ساختمان

دسته بندی : / لینک ثابت

در زبان C تعريف اشاره گر از نوع ساختمان ، همانند تعريف ساير انواع اشاره گرها
امكان پذير است . اشاره گر ساختمان به دو منظور استفاده مي شود : 1
امكان فراخواني به روش ارجاع در توابعي كه داراي آرگومان از نوع ساختمان
هستند را فراهم مي كند . 2
براي ايجاد ليست هاي پيوندي و ساير ساختمان داده هايي كه با تخصيص حافظه
پويا سر و كار دارند بكار مي رود .
وقتي كه ساختمان ها از طريق فراخواني به روش ارجاع به توابع منتقل مي شوند
سرعت انجام عمليات بر روي آنها بيشتر مي گردد. لذا در حين فراخواني توابع بهتر
است بجاي ساختمان ، آدرس آن را منتقل نمود. عملگر& براي مشخص كردن آدرس ساختمان
( همانند ساير متغيرها ) مورد استفاده قرار مي گيرد .
تعريف اشاره گرهاي ساختمان همانند تعريف متغيرهاي ساختمان است . بااين تفاوت
كه در جلوي اسم متغير ، علامت * قرار مي گيرد. بعنوان مثال ، ساختمان زير را در
نظر بگيريد : struct bal {
float balance ;
char name[80] ;
} person ;
struct bal *p;

در مجموعه دستورات فوق ، person يك متغير ساختمان وp يك اشاره گر به ساختمان
تعريف شده است . لذا دستور p= &person;

آدرس متغير ساختمان person را در اشاره گر p قرار مي دهد . براي دسترسي به
محتويات اجزاي ساختمان از طريق اشاره گر، بايد اشاره گر را در داخل پرانتز محصور
نمود . بعنوان مثال دستور ( *p.)balance

موجب دسترسي به عنصر balance از ساختمان person ميشود. علت قرار دادن متغير
اشاره گر ساختمان در پرانتز ، اين است كه تقدم عملگر نقطه (.) از عملگر * بالاتر
است .
بطور كلي براي دسترسي به اجزاي ساختماني كه يك اشاره گر به آن اشاره مي كند
به دو روش مي توان عمل كرد : 1
ذكر نام اشاره گر در داخل پرانتز و سپس نام عنصر مورد نظر كه با نقطه از
هم جدا مي شوند ( مثل دسترسي به عنصر balance از ساختمان person توسط اشاره گر ( . p
2
ؤؤ كه روش مناسب تري است . اگر بخواهيم با استفاده از > استفاده از عملگر
ؤؤ به عنصر >عملگر balance از ساختمان person دسترسي داشته باشيم بايد به طريق
زير عمل كنيم : balance
ؤؤ > p

مثال 1: برنامه اي كه با استفاده از اشاره گرهاي ساختمان ، يك timer را شبيه
سازي مي كند .

struct tm
{
int hours ;
int minutes ;
int second ;
} ;
main)(
{
struct tm time ={0} ;
for( ;;)
{
update( &time );
display( &time );
}
}
update( struct tm *t)
{
( *t.)second ++ ;
if(( *t.)second == 60)
{
( *t.)second=0 ;
( *t.)minutes ++ ;
}
if(( *t.)minutes == 60)
{
( *t.)minutes=0 ;
( *t.)hours ++ ;
}
if(( *t.)hours==24)
( *t.)hours=0 ;
delay )( ;
}
display(struct tm *t)
{
gotoxy(70/2 );
printf("\n%2d:"/(*t.)hours );
printf("%2d:"/(*t.)minutes );
printf("%2d"/(*t.)second );
}
delay)(
{
long int t ;
for( t=1 ; t < 128000 ; ++t );
}

همانطور كه در مثال 1 مشاهده مي شود براي دسترسي به اجزاي ساختمان از عملگر *
ؤ ، تابع ()> استفاده شده است كه جهت آشنايي با عملگر update را با اين عملگر
بازنويسي مي كنيم :

update( struct tm *t)
{
second ++
;
ؤ> t
(َsecond == 60ؤ> t) if {
;
َsecond=0ؤ> t minutes ++
;
ؤ> t }

(َminutes == 60ؤ> t) if {
;
َminutes=0ؤ> t ;
hours ++ؤ> t }

(َhours==24ؤ> t) if ;
َhours=0ؤ> t delay )( ;
}


مثال 2: برنامه اي كه مشخصات مربوط به تعدادي از دانشجويان را خوانده و در
آرايه اي از ساختمان ها قرار مي دهد . مشخصات دانشجو عبارتند از: 1 نام دانشجو 2
شماره دانشجويي 3 تعداد درس ترم جاري 4 نمره هر درس . اين برنامه پس از
خواندن اطلاعات دانشجو معدل آنها را نيز محاسبه مي كند و در آرايه قرار مي دهد.
امكان حذف دانشجويي از آرايه ، مشاهده اطلاعات يك يا چند دانشجو ، پيدا كردن
دانشجويان مشروط ( معدل كمتر از 12 ) و دانشجويان ممتاز ( معدل بالاتر از 17 )
از جمله وظايف اين برنامه است .
قبل از مشاهده ليست كامل برنامه ، نمودار سلسله مراتبي آن را رسم كرده ( شكل
الف ) و وظايف هر يك از توابع را تشريح مي كنيم :


ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | main )(|

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |init_list)(||delete)(|| list)(||list1)(||list2)(||enter)(||menu_select)(|

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | | | |

ؤؤؤؤؤؤؤؤؤؤؤؤؤ| | ؤؤؤؤؤؤؤؤؤؤؤ |
()||find_free |ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤؤؤؤؤ| ||()| |print()|title |
|ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ | |
|
ؤؤؤؤؤؤؤؤؤؤؤ |
ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ |title)(| |print)(||
|
ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ |

ؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ |title)(| |print)(|

ؤؤؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤؤؤ

شكل الف . نمودار سلسله مراتبي برنامه مثال 2

وظيفه تابع ()main : تعريف بعضي از متغيرها و فراخواني توابع ديگر مطابق
نمودار سلسله مراتبي شكل الف .
وظيفه تابع init-list : در ابتداي تابع main فراخواني شده و با NULL كردن
اولين محل جزئ name ، آرايه را ارزش دهي مي كند .
وظيفه تابع ()enter : ورود اطلاعات به آرايه .
وظيفه تابع ()delete : اين تابع براي حذف ركوردهايي از آرايه مورد استفاده
قرار ميگيرد. براي اين منظور اولين محل جزئ name را برابر با NULL قرار ميدهد.
وظيفه تابع ()list : بررسي آرايه ، جهت انتقال كامل اطلاعات آن به خروجي با
استفاده از دو تابع ()title و ()print .
وظيفه تابع ()list1 : بررسي آرايه ، جهت پيدا كردن دانشجويان مشروط و انتقال
اطلاعات اين دانشجويان به خروجي ، توسط دو تابع ()title و ()print .
وظيفه تابع ()list2 : بررسي آرايه ، ئهت پيدا كردن دانشجويان ممتاز و انتقال
اطلاعات آنها به خروجي ، توسط دو تابع ()title و ()print .
وظيفه تابع ()menu-select : ظاهر نمودن منويي در صفحه نمايش جهت درخواست
انجام كار از برنامه .
وظيفه تابع ()find-free : پيدا كردن اولين محل خالي آرايه جهت قرار دادن
اطلاعات جديد در آن توسط تابع ()enter .
وظيفه تابع ()title : چاپ عنوان براي خروجي .
وظيفه تابع ()print : چاپ اطلاعات موجود در آرايه در صفحه نمايش .

#include "stdio.h"
#include "stdlib.h"
#define MAX 100
struct student {
char name[10] ;
float mead ;
int unit ;
int number ;
int stno;
} st_info[MAX] ;
float x ;
int r=0 ;
void init_list(void)/enter(void );
void delete(void)/list(void)/list1)(/list2)(;
int menu_select(void)/find_free(void );
float sumgrade ;
int sumunit ;
int unit1/t ;
main(void)
{
char choice ;
init_list )(;
for(;;){
choice=menu_select )(;
switch(choice)
{
case 1:
enter )(;
break ;
case 2:
delete )(;
break ;
case 3:
list )(;
break ;
case 4:
list1 )(;
break ;
case 5:
list2 )(;
break ;
case 6:
exit(0 );
}
}
}
void init_list(void)
{
register int n ;
for(t=0 ; t st_info[t].name[0]='\0' ;
}
menu_select(void)
{
char s[10] ;
int c ;
clrscr )(;
gotoxy(29/3 );
printf("1 )<< enter a name >>");
gotoxy(29/5 );
printf("2 )<< delete a name >>");
gotoxy(29/7 );
printf("3 )<< list the file >>");
gotoxy(29/9 );
printf("4 )<< list for probation >>");
gotoxy(29/11 );
printf("5 )<< list for exelent >>");
gotoxy(29/13 );
printf("6 )<< Quit >>");
do {
gotoxy(27/15 );
printf(" Please enter your " );
printf("choice(1-6 :)" );
gets(s );
c=atoi(s );
} while(c < 0 || c > 6 );
return( c );
}
void enter(void)
{
float grade ;
int slot /j ;
char s[80] ;
sumgrade=0 ;
sumunit=0 ;
slot=find_free )(;
if(slot==-1){
printf("\n list full" );
return ;
}
gotoxy(5/17 );
printf("enter name:" );
gets(st_info[slot].name );

gotoxy(5/18 );
printf("enter stno:" );
scanf("%d"/&st_info[slot].stno );

gotoxy(5/19 );
printf("enter number:" );
scanf("%d"/&st_info[slot].number );
for(j=1;j<=st_info[slot].number;j++)
{
gotoxy(40/17 );
printf(" ");
gotoxy(40/17 );
printf("enter grade number %d:"/j);
scanf("%f"/&grade );
gotoxy(40/19 );
printf(" ");
gotoxy(40/19 );
printf("enter unit of grade %d:"/j);
scanf("%d"/&unit1 );
sumgrade+=grade*unit1 ;
sumunit+=unit1 ;
}
st_info[slot].mead=sumgrade/sumunit ;
st_info[slot].unit=sumunit ;
}
find free(void)
{
register int t ;
for(t=0;st_info[t].name[0] &&
t < MAX ; ++t);
if(t==MAX )return- 1 ;
return t ;
}
void delete(void)
{
int slot ;
gotoxy(28/19 );
printf("enter record #(0 - 99:)" );
scanf("%d"/&slot );
if(slot <= 0 && slot < MAX)
st_info[slot].name[0]='\0' ;
}
void list(void)
{
char ch ;
clrscr )(;
r=0 ;
title ;
for(t=0;t if(st_info[t].name[0])
print )(;
}
gotoxy(13/6+r );
printf("******************************");
printf("*******************************" );
gotoxy(27/7+r );
printf("press any key to continue " );
getch)(;
}
void list1(void)
{
char ch ;
r=0 ;
clrscr )(;
title )(;
for(t=0;t if(st_info[t].name[0] && st_info[t].mead<12)
print)(
}
gotoxy(13/6+r );
printf("******************************");
printf("*******************************" );
gotoxy(27/7+r );
printf("press any key to continue " );
getch)(;
}
void list2(void)
char ch ;
r=0 ;
clrscr )(;
title )(;
for(t=0;t if(st_info[t].name[0] && st_info[t].mead<17)
print)(
}
gotoxy(13/6+r );
printf("******************************");
printf("*******************************" );
gotoxy(27/7+r );
printf("press any key to continue " );
getch)(;
}
title)(
{
gotoxy(25/2 );
printf(" << information in list");
printf("are :>>");
gotoxy(13/3 );
printf("*************************");
printf("****************");
printf("********************");
gotoxy(10/4 );
printf(" name mead ");
printf(" unit " );
printf(" number ");
printf(" stno " );
gotoxy(10/5);
;
(" ؤؤؤؤؤؤؤ ؤؤؤؤؤؤؤ ")printf ;
(" ؤؤؤؤؤ ")printf ;
(" ؤؤؤؤ ؤؤؤؤؤ ")printf }
print)(
{
gotoxy(14/6+r );
printf("%s "/st_info[t].name );
gotoxy(26/6+r );
printf("%.2f "/st_info[t].mead );
gotoxy(40/6+r );
printf("%d "/st_info[t].unit );
gotoxy(54/6+r );
printf("%d "/st_info[t].number );
gotoxy(70/6+r );
printf("%u "/st_info[t].stno );
r++ ;
}

نمونه اي از خروجي برنامه مثال 2 : 1 )

<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< list for probation >>
5 )<< list for exelent >>
6 )<< Quit >>

Please enter your choice(1-6:)1

enter name:ali enter grade number 1:19
enter stno:123 enter unit of grade 1:2
enter number:2 enter grade number 2:18
enter unit of grade 2:3

1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< list for probation >>
5 )<< list for exelent >>
6 )<< Quit >>

Please enter your choice(1-6:)2

enter name:reza enter grade number 1:12
enter stno:321 enter unit of grade 1:3
enter number:3 enter grade number 2:11
enter unit of grade 2:2
enter grade number 3:10
enter unit of grade 3:4

1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< list for probation >>
5 )<< list for exelent >>
6 )<< Quit >>

Please enter your choice(1-6:)3

<< information in list are :>>
***************************************
name mead unit number stno
----- ------ ---- ---- ------
ali 18:00 5 2 123
reza 10:00 9 3 321
***************************************
press any key to continue

1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< list for probation >>
5 )<< list for exelent >>
6 )<< Quit >>

Please enter your choice(1-6:)5

<< information in list are :>>
***************************************
name mead unit number stno
----- ------ ---- ---- ------
ali 18:00 5 2 123
***************************************
press any key to continue

1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< list for probation >>
5 )<< list for exelent >>
6 )<< Quit >>

Please enter your choice(1-6:)4

<< information in list are :>>
***************************************
reza 10:00 9 3 321
***************************************
press any key to continue

1 )<< enter a name >>
2 )<< delete a name >>
3 )<< list the file >>
4 )<< list for probation >>
5 )<< list for exelent >>
6 )<< Quit >>


نویسنده مطلب : لوتوس   \  تاریخ درج : دوشنبه 12 دی1384   20:46 \

انتقال ساختمان ها به توابع

دسته بندی : / لینک ثابت

ساختمانها و يا آرايه اي ازساختمان كه تاكنون در برنامه ها بكار گرفته شده اند
يا بصورت عمومي تعريف شدند و يا درتابعي كه مورداستفاده قرار مي گرفتند، تعريف
شدند . ساختمانها و يا اجزاي آنها مي توانند به عنوان آرگومان ، به تابع منتقل
شده و يا اطلاعاتي را به تابع فراخواننده برگردانند .
براي انتقال اجزاي ساختمان به تابع ، همانند يك متغير معمولي عمل مي شود .
با اين تفاوت كه نام متغير ساختمان را بايد به همراه جزئ مورد نظر، در آرگومان
تابع ذكر كرد و بايد توجه داشت كه پارامتر تابع نيز بايد همنوع با آرگومان
متناظر با آن تعريف گردد . بعنوان مثال ، ساختمان زير را در نظر بگيريد : struct student {
char x;
int ston;
char name[31];
} st1;

هر يك از دستورات زير موجب انتقال مقادير اجزاي متغير ساختمان st1 به تابعي
بنام ()func مي شوند . func( st1.x);
func( st1.ston);
func( st1.name[5]);

براي انتقال آدرس هاي اجزاي متغير ساختمان به توابع بايد از عملگر& استفاده
نمود . براي توضيح بيشتر به مجموعه زير توجه نماييد : func( &st1.x);
func( &st1.ston);
func( &st1.name[5]);
func( st1.name);

همانطور كه در مجموعه دستورات فوق مشاهده مي گردد عملگر & بايد قبل از نام
متغير ساختمان ظاهر گردد ولي در آخرين دستور ، چون name يك آرايه است ، براي
انتقال آن نيازي به عملگر & نيست .

مثال 1:

#include "stdio.h"
main)(
{
struct ss{
char name[20] ;
int x ;
} s ;
scanf("%s"/s.name );
scanf("%d"/&s.x );
test(s.name );
}
test(char *s)
{
while(*s)
{
printf("%c"/*s );
s++ ;
}
}

براي انتقال كامل متغيرهاي ساختمان به توابع بايد توجه داشت كه اين انتقال
از طريق فراخواني با ارزش ، صورت مي گيرد .
به هنگام انتقال كامل متغيرهاي ساختمان ، همنوع بودن آرگومان و پارامتر مهم
است و برنامه نويس بايد اين مطلب را در نظر داشته باشد ( مثال 2 ) .

مثال 2: برنامه اي كه چگونگي تعريف پارامتر و آرگومان هاي ساختمان را نشان
مي دهد .

main)(
{
struct {
int a/b ;
char ch ;
} arg ;
arg.a=1000 ;
func(arg );
}
func(parm)
struct {
int x/y ;
char ch ;
} parm ;
{
printf("%d"/parm.x );
}

خروجي حاصل از اجراي برنامه مثال 2 عدد 1000 است . اگر چه تعريف پارامترها
و آرگومان هاي توابع جهت انتقال ساختمان ها بصورتي است كه در مثال 2 آمده است
صحيح مي باشند . اين روش موجب طولاني شدن دستورات برنامه شده ، وقت بيشتري را
نيز مي طلبد . براي انتقال ساختمان ها به توابع بهتر است كه ساختمان ها بصورت
عمومي تعريف شوند و سپس بااستفاده از اين تعريف ، پارامترها ومتغيرهاي ساختمان
تعريف گردند . با توجه به مطالبي كه گفته شد ، مثال 2 را مي توان بصورتي كه در
مثال 3 آمده است نوشت .


مثال 3: struct struct_type {
int a/b ;
char ch ;
} ;
main)(
{
struct struct_type arg ;
arg.a=1000 ;
func(arg );
}
func(parm)
struct struct_type parm ;
{
printf("\n %d"/parm.a );
}

پارامتر parm را در تابع ()func علاوه بر آنچه كه در مثال 3 آمده است ، به
طريق زير نيز مي توان تعريف كرد : func( struct struct_type parm)


مثال 4: برنامه اي كه چگونگي انتقال كامل يك ساختمان را به تابع و انتقال
اطلاعات از طريق ساختمان به تابع فراخواننده را نشان مي دهد .

struct personel
{
char name[30] ;
int agnumb ;
} ;
main)(
{
struct personel agent1 / agent2 ;
struct personel newname )(;
agent1=newname )(;
agent2=newname )(;
list(agent1 );
list(agent2 );
}
struct personel newname)(
{
char numstr[80] ;
struct personel agent ;
printf("\n\t << New agent >> \n");
printf("Enter name: " );
gets(agent.name );
printf("\n agent number(3 digit)");
gets(numstr );
agent.agnumb=atoi(numstr );
return(agent );
}
list(age)
struct personel age ;
{
printf("\n\t<< agent: >>\n" );
printf("\n Name : %s \n"/age.name);
printf("\n agent number: ");
printf(" %3d\n"/age.agnumb );
}

نمونه اي از خروجي برنامه مثال 4 :

<< New agent >>
Enter name:reza

agent number(3 digit )213

<< New agent >>
Enter name:mohammad

agent number(3 digit )123

<< agent : >>

Name:reza

agent number: 213

<< agent : >>

Name:mohammad

a


نویسنده مطلب : لوتوس   \  تاریخ درج : دوشنبه 12 دی1384   20:44 \

:: گشت و گذار مخفیانه در اینترنت با Invisible Browsing 4.0.41 ::

دسته بندی : / لینک ثابت

یکی از راههای حفظ و تامین امنیت در اینترنت ناشناس بود , جلوگیری از لو رفتن IP Address شماست که به نوعی هویت شما در اینترنت می باشد .

Invisible Browsing نرم افزاری از شرکت AmplusNet , به کاربر امکان مخفی نمودن IP Adress ویا تغییر آن را می دهد تا بتواند به طور ناشناس به گشت و گذار در اینترنت بپردازد و از لو رفتن اطلاعات شما جلوگیری نماید . توسط پروکس سرورهای قدرتمند و سریع و ناشناس , به سرعت می تواند هویت شما را در اینترنت تغییر دهد .

سایر توانایی های امنیتی نرم افزار Invisible Browsing :

توانایی مسدود کردن Popup , Popunder ها , IP های پیغام های Spam و ActiveX ها و JavaScript های مخرب .

پاک کردن تمامی رد پاها و اطلاعات ناشی از کشت و گذار شما در اینترنت مانند  Browser Cookies, Internet URL History, Typed URL history, Auto Complete Forms و Password History, Internet Explore Favorites و Temporary Files.

ویژگی های دیگر نرم افزار ....

Invisible Browsing را میتوانید از اینجا :

دانلود کنید نسخه ی 4.0.41 را با حجم 994 کیلوبایت


نویسنده مطلب : لوتوس   \  تاریخ درج : شنبه 3 دی1384   22:7 \

انواع ساده The simple Types

دسته بندی : / لینک ثابت

جاوا هشت نوع ساده ( يا ابتدايي ) از داده را تعريف مي كند : short bbyte int
، long،، char،، float،، double،، boolean، اين انواع را مي توان در چهار
گروه بشرح زير دسته بندي نمود :
ؤ integers ( اعداد صحيح ) : اين گروه دربرگيرنده byte، short،، int،و longو
ميباشد كه مختص ارقام علامتدار مقدار كل (whole-valued signed numbers) ميباشد.
ؤ floating-point numbers ( اعداد اعشاري ) : اين گروه دربرگيرنده float و double
است كه معرف اعدادي است با دقت زياد .
ؤ characters ( كاراكترها ) : اين گروه فقط شامل char بوده كه نشانه هايي
نظير حروف و ارقام را در يك مجموعه خاص از كاراكترها معرفي مي كند .
ؤ Boolean ( بولي ) : اين گروه فقط شامل boolean است . كه نوع خاصي ازمعرفي
و بيان مقادير صحيح / ناصحيح مي باشد .
شما مي توانيد از اين انواع همانطوريكه هستند استفاده كرده ، يا آرايه ها و
انواع كلاسهاي خود را بسازيد .
انواع اتمي معرف مقادير تكي و نه اشيائ پيچيده هستند . اگر چه جاوا
همواره شي ئ گرا است ، اما انواع ساده اينطور نيستند . اين انواع ، مشابه انواع
ساده اي هستند كه در اكثر زبانهاي غير شي ئ گرا مشاهده مي شود . دليل اين امر
كارايي است . ساختن انواع ساده در اشيائ سبب افت بيش از حد كارايي و عملكرد
مي شود .
انواع ساده بگونه اي تعريف شده اند تا يك دامنه روشن و رفتاري رياضي داشته
باشند . و زبانهايي نظير Cو C++و امكان مي دهند تا اندازه يك عدد صحيح براساس
ملاحظات مربوط به محيط اجرايي تغيير يابد . اما جاوا متفاوت عمل مي كند . بدليل
نيازهاي موجود براي قابليت حمل جاوا ، كليه انواع داده در اين زبان داراي يك
دامنه كاملا" تعريف شده هستند . بعنوان مثال يك int هميشه 32 بيتي است ، صرفنظر
از اينكه زير بناي خاص محيطي آن چگونه باشد . اين حالت به برنامه هاي نوشته شده
اجازه مي دهد تا با اطمينان و بدون در نظر گرفتن معماري خاص يك ماشين اجرا
شوند. در حاليكه مشخص كردن دقيق اندازه يك عدد صحيح ممكن است در برخي محيط ها
سبب افت عملكرد شود ، اما براي رسيدن به خاصيت قابليت حمل پرداخت چنين تاواني


نویسنده مطلب : لوتوس   \  تاریخ درج : شنبه 3 دی1384   21:56 \