چند مثال از آرایه ها
مثال : برنامه ای بنويسيد که 10 عدد صحيح را ورودی دريافت کرده و در آرايه ای قرار داده سپس مجموع عناصر آرايه را محاسبه کرده و درخروجی چاپ نمايد .
#include void main(){ const int arraySize = 10; int total = 0,i; int a[ arraySize ]; for (i = 0; i < arraySize; i++) { cout << "Enter number " << i << " : "; cin >> a[ i ]; } for (i = 0; i < arraySize; i++ ) total += a[ i ]; cout << "Total of array element values is " << total << endl; }خروجی برنامه به صورت زير می باشد :
Enter number 0 : 12Enter number 1 : 3Enter number 2 : 4Enter number 3 : 654Enter number 4 : 34Enter number 5 : 2Enter number 6 : 123Enter number 7 : 794Enter number 8 : 365Enter number 9 : 23Total of array element values is 2014مثال : برنامه ای بنويسيد که توسط آرايه ، نمودار ميله ای افقی برای اعداد {1 و17 و5 و13 و9 و11 و7 و15 و3 و19 } رسم کند .
#include int main(){ const int arraySize = 10; int n[ arraySize ] = { 19, 3, 15, 7, 11, 9, 13, 5, 17, 1 }; cout << "Element" << " Value" << endl; for ( int i = 0; i < arraySize; i++ ) { cout << i << "\t " << n[ i ] << "\t"; for ( int j = 0; j < n[ i ]; j++ ) cout << '*'; cout << endl; } return 0; } خروجی برنامه به صورت زير می باشد :
Element Value0 19 *******************1 3 ***2 15 ***************3 7 *******4 11 ***********5 9 *********6 13 *************7 5 *****8 17 *****************9 1 *مثال : برنامه ای بنويسيد که يک تاس را 6000 بار پرتاب کرده و توسط آرايه ای تعداد دفعات آمدن هر وجه را حساب کند .( تعداد دفعات آمدن هر وجه را يک عنصر آرايه ای در نظر بگيريد )
#include #include #include void main(){ const int arraySize = 7; int frequency[ arraySize ] = { 0 }; srand( time( 0 ) ); for ( int roll = 1; roll <= 6000; roll++ ) ++frequency[ 1 + rand() % 6 ]; cout << "Face Frequency" << endl; for ( int face = 1; face < arraySize; face++ ) cout << face << "\t" << frequency[face] << endl; }خروجی برنامه به صورت زير می باشد :
Face Frequency1 10232 9903 10084 9715 10256 983دستور ++frequency [rand()%6 + 1]; ، مقدار عنصر مربوط به هر وجه را يک واحد اضافه می کند ، زيرا rand()%6 + 1 عددی بين 1 تا 6 توليد می کند ، پس هر بار به طور تصادفی تنها مقدار عنصر مربوط به يکی از وجوه افزايش می يابد .
يکی از کار برد های آرايه ها ، استفاده از آنها برای ذخيره رشته ای از حروف می باشد . تا به حال متغيرهايی که از ورودی دريافت می کرديم و يا آرايه هايی که تا به اينجا ديديد تنها شامل اعداد می شدند در اينجا به عنوان مثال نحوه دريافت يک نام از ورودی و چاپ آن در خروجی را بررسی می کنيم .(در فصل بعد يعنی اشاره گرها و رشته ها ، به طور مفصل تر راجع به رشته ها صحبت خواهم کرد )
يک عبارت رشته ای مانند: "hello" در واقع آرايه ای از حروف می باشد.
char string1[]="hello";دستور فوق آرايه ای به نام string1 را با کلمه hello مقدار دهی می کند. طول آرايه فوق برابر است با طول کلمه hello يعنی 5 بعلاوه يک واحد که مربوط است به کاراکتر پوچ که انتهای رشته را مشخص می کند. لذا آرايه string1 دارای طول 6 می باشد. کاراکتر پوچ در زبان ++C توسط '\0'مشخص می گردد. انتهای کليه عبارات رشته ای با اين کاراکتر مشخص می شود.
char string1[]={'h','e','l','l','o','\0'}دستور فوق عناصر آرايه string1 را جداگانه مقدار دهی می کند. توجه داشته باشيد که عناصر آرايه در دستور فوق داخل (') قرار گرفتند و نيز انتهای رشته با '\0' تعيين شد. نتيجه همانند دستور char string1[]="hello"; می باشد.
چون عبارت رشته ای، آرايه ای از حروف می باشند، لذا به هر يک از حروف رشته، توسط انديس عنصری که شامل آن حرف می باشد، می توان دسترسی پيدا کرد. به عنوان مثال string1[0]شامل 'h' و string1[3] شامل 'l' و string1[5] شامل '\0' می باشد.
توسط دستور cin نيز می توان به طور مستقيم کلمه وارد شده از صفحه کليد را در آرايه ای رشته ای قرار داد.
char string2[20];دستور فوق يک آرايه رشته ای که قابليت دريافت کلمه ای با طول 19 به همراه کاراکتر پوچ را دارا می باشد.
cin >> string2;دستور فوق رشته ای از حروف را از صفحه کليد خوانده و در string2 قرار می دهدو کاراکتر پوچ را به انتهای رشته وارد شده توسط کاربر اضافه می کند. به طور پيش فرض دستور cin کاراکتر ها را از صفحه کليد تا رسيدن به اولين فضای خالی در يافت می کند. به عنوان مثال اگر هنگام اجرای دستورcin >> string2; کاربر عبارت "hello there" را وارد کند، تنها کلمه hello در string2 قرار می گيرد. چون عبارت وارد شده شامل کاراکتر فاصله است. برنامه زير نحوه به کار گيری آرايه های رشته ای را نشان می دهد.
#include void main(){ char name[ 20 ]; cout << "Please Enter your name : "; cin >> name; cout << "Welcome, " << name << " to this program. \n" ; cout << "Your separated name is\n"; for ( int i = 0; name[ i ] != '\0'; i++ ) cout << name[ i ] << ' '; }خروجی برنامه به صورت زير می باشد :
Please Enter your name : MohammadWelcome, Mohammad to this program.Your separated name isM o h a m m a dدر برنامه فوق حلقه for ، حروف نام وارد شده توسط کاربر را جدا جدا در خروجی چاپ می کند. ضمنا شرط حلقه name[ i ] != '\0' می باشد و تا وقتی اين شرط برقرار است که حلقه به انتهای رشته نرسيده باشد.
در مبحث قوانين حوزه ديديد که اگر بخواهيم يک متغير محلی تابع، مقدار خود را حفظ کرده و برای دفعات بعدی فراخوانی تابع نيز نگه دارد، از کلمه static استفاده کرديم. نوع static را برای آرايه ها نيز می توان به کار برد و از همان قوانين گفته شده در مبحث مذکور پيروی می کند. به برنامه زير و خروجی آن توجه کنيد.
#include void staticArrayInit( void );void automaticArrayInit( void ); int main(){ cout << "First call to each function:\n"; staticArrayInit(); automaticArrayInit(); cout << "\n\nSecond call to each function:\n"; staticArrayInit(); automaticArrayInit(); cout << endl; return 0; } // function to demonstrate a static local arrayvoid staticArrayInit( void ){ // initializes elements to 0 // first time function is called static int array1[ 3 ]={0}; cout << "\nValues on entering staticArrayInit:\n"; // output contents of array1 for ( int i = 0; i < 3; i++ ) cout << "array1[" << i << "] = " << array1[ i ] << " "; cout << "\nValues on exiting staticArrayInit:\n"; // modify and output contents of array1 for ( int j = 0; j < 3; j++ ) cout << "array1[" << j << "] = " << ( array1[ j ] += 5 ) << " "; } // end function staticArrayInit // function to demonstrate an automatic local arrayvoid automaticArrayInit( void ){ // initializes elements each time function is called int array2[ 3 ] = { 1, 2, 3 }; cout << endl << endl; cout << "Values on entering automaticArrayInit:\n"; // output contents of array2 for ( int i = 0; i < 3; i++ ) cout << "array2[" << i << "] = " << array2[ i ] << " "; cout << "\nValues on exiting automaticArrayInit:\n"; // modify and output contents of array2 for ( int j = 0; j < 3; j++ ) cout << "array2[" << j << "] = " << ( array2[ j ] += 5 ) << " "; }خروجی برنامه به صورت زير می باشد :
First call to each function: Values on entering staticArrayInit:array1[0] = 0 array1[1] = 0 array1[2] = 0Values on exiting staticArrayInit:array1[0] = 5 array1[1] = 5 array1[2] = 5 Values on entering automaticArrayInit:array2[0] = 1 array2[1] = 2 array2[2] = 3Values on exiting automaticArrayInit:array2[0] = 6 array2[1] = 7 array2[2] = 8 Second call to each function: Values on entering staticArrayInit:array1[0] = 5 array1[1] = 5 array1[2] = 5Values on exiting staticArrayInit:array1[0] = 10 array1[1] = 10 array1[2] = 10 Values on entering automaticArrayInit:array2[0] = 1 array2[1] = 2 array2[2] = 3Values on exiting automaticArrayInit:array2[0] = 6 array2[1] = 7 array2[2] = 8در برنامه فوق عناصر آرايه array1 در اولين بار فراخوانی تابع staticArrayInit مقدار صفر را می گيرند ولی در دفعات بعدی فراخوانی اين تابع، آخرين مقدار قبلی خود را حفظ می کنند . اما آرايهarray2 در هر بار فراخوانی تابع automaticArrayInit مقدار دهی اوليه می شود و با خروج از تابع مقدار خود را از دست می دهد.