آرايه ها.

Slides:



Advertisements
Similar presentations
مهدی آذرنوش مبحث ششم : آرایه ها و رشته ها حسابگری الگوریتمی.
Advertisements

سازگاري فرايندهاي يادگيري Consistency of Learning Processes ارائه دهنده : الهام باوفای حقیقی استاد درس : آقای دکتر شيري دانشگاه امير كبير دانشكده ‌ مهندسي.
دستور العمل نحوه محاسبه امتیاز مقالات ISI اعضای هیأت علمی دانشگاه صنعتی اصفهان بر اساس تعداد استنادات در پايگاه اسكاپوس شهریور ماه 1388 نفیسه دهقان.
ارائه روشي براي شناسايي کاراکترهاي دستنويس، برپايه شبکه LVQ.
نام و نام خانوادگي : فريد ملازم 1 آزمايشکاه سيستم هاي هوشمند ( موضوع ارائه Process and Deployment Design.
مديريت پروژه‌هاي فناوري اطلاعات فرآيند مديريت پروژه-مرحله برنامه‌ريزي تخصيص منابع.
مراحل مختلف اجرای يک برنامه
فایل پردازی در C File based Programming in C. انواع فایل متنی –سرعت بالا –حجم کمتر –امکان دسترسی تصادفی –حفظ امنیت داده ها دودویی (باینری) –امکان باز.
1 Binary storage & registers. CS 151 Binary Variables Recall that the two binary values have different names: –True/False –On/Off –Yes/No –1/0 We use.
1 بنام خدا زبان برنامه نویسی C (21814( Lecture 14 Structures.
به نام خدا برنامه سازی سمت سرور (php)
1 بنام خدا زبان برنامه نویسی C (21814( Lecture 8 Chapters 8 & 9.
آرايه Array آرايه مجموعه اى از متغيرهاى از يك نوع است كه با يك نام مشترك تحت استفاده قرار مى گيرند. يك عنصر بخصوص در يك آرايه با يك index (انديس ) مورد.
روابط مجموعه ها سلیمی. دکتر سلیمانی. نظریه فازی در سال 1965 بوسیله یک دانشمند ایرانی بنام پروفسور لطفی زاده معرفی گردید. گرچه این نظریه در ابتدا با.
اسامي شناسه ها (Identifier names) اسامي متغيرها ، توابع ، برچسب ها (labels) وبقيه اشياء تعريف شده توسط كاربر در C ، شناسه ( identifier ) ناميده مي شود.
1 فصل دوم تبديلات. 2 فصل دوم سرفصل مطالب مقدمه ضرب بردارها دستگاه ‌ هاي مختصات دوران ‌ ها مختصات همگن دوران ‌ ها و انتقال ‌ ها تبديلات تركيبي همگن تبديل.
شرط و تصميم اصول كامپيوتر 1. 2 الگوريتم اقليدس E1: [find remainder] Divide m by n and let r be the remainder. Clearly, 0
1/19 Informed search algorithms Chapter 4 Modified by Vali Derhami.
Department of Computer Eng. & IT Amirkabir University of Technology (Tehran Polytechnic) Data Structures Lecturer: Abbas Sarraf Order.
1 فصل سوم سينماتيك مستقيم. 2 محتواي فصل   تعريف مجموعه فازي   تابع عضويت   نمايش مجموعه هاي فازي   برش آلفا   متغيرهاي زباني   ساخت مجموعه.
الف) تابع y = f(x) = X >= 0x -2 < x < 0 x3x3 X
آشنايي با سيستم اعداد.
فایل ها.
به نام خدا.
Cost- Effectiveness Analysis
[c.
مدارهای منطقی فصل چهارم و پنجم - مدارهاي منطقي تركيبي ماجولي
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
فصل ششم روال ها.
تهیه و تنظیم: فاطمه قاسمی دانشگاه صنعتی شریف – پاییز 86
بنام خدا زبان برنامه نویسی C (21814( Lecture 2 Chapter 3
بنام خدا زبان برنامه نویسی C (21814( Lecture 12 Selected Topics
مبانی کامپیوتر و برنامه سازی
مرتب سازي مقايسه اي مرتب سازي خطي
آرايه ها و ساختارها.
ANOVA: Analysis Of Variance
ساختمان داده ها جداول درهم سازی
فصل سوم : صف وپشته اهداف آشنايي با پشته آشنايي با صف ارزشيابي عبارات 1.
ANOVA: Analysis Of Variance
نمايش معادلات فضاي حالت توسط فرمهاي كانوليكال
روش حریصانه در طراحی الگوریتم
وحید حقيقت دوست دانشکده فنی و مهندسی دانشگاه شاهد
واحد های مختلف برنامه عباسپور
Quick Sort مرتب سازي سريع.
لغت نامه و جدول درهم سازي Dictionaries and Hash Tables
بسم الله الرحمن الرحيم.
آشنايي با برنامه نويسي به زبان C++
فصل دوم جبر بول.
به نام حق مبحث: ارث بری Inheritance.
تکنیک دیماتل DEMATEL: decision making trial and evaluation laboratory.
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
دکتر حسين بلندي/ دکتر سید مجید اسماعیل زاده / دکتر بهمن قربانی واقعی
تبدیل فوریه (Fourier Transform)
نمايش اعداد در کامپيوتر چهار عمل اصلي
Similarity transformation
به نام خدا برنامه ارزيابي خارجي کيفيت (هماتولوژی- سرولوژی)
سميرا قانوني زهرا معدني
هیدرولیک جریان در کانالهای باز
بنام خدا زبان برنامه نویسی C (21814( Lecture 7 Chapter 7
بنام خدا زبان برنامه نویسی C (21814( Lecture 3 Chapter 4
عباس طبیبی-دانشگاه صنعتی اصفهان
به نام خدا برنامه ارزيابي خارجي کيفيت (هماتولوژی- سرولوژی)
با تشکر از دکتر جواد سلیمی
اشياء و کلاس ها.
فصل ششم مدارهای ترتیبی.
مثال : فلوچارتي رسم كنيد كه دو عدد از ورودي دريافت كرده بزرگترين عدد
بسم الله الرحمن الرحيم.
kbkjlj/m/lkiubljj'pl;
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
مباني كامپيوتر و برنامه سازي Basics of Computer and Programming
Presentation transcript:

آرايه ها

آرايه ها آرايه مجموعه اي از عناصر همنوع است. هر آرايه داراي نامي است كه مانند متغيرهاي معمولي نامگذاري ميشود آرایه یک مجموعه از محلهای متوالی حافظه است هر محل یک عنصر آرایه به شمار می رود. براي دسترسي به عناصر آرايه از متغيري بنام انديس (index) استفاده ميگردد. به همين دليل، آرايه را متغير انديس دار ميگويند. برای دسترسی به هر عنصر آرایه باید محل آنرا در آرایه بدانیم یعنی یک انديس به محل آن داشته باشیم.

تعريف آرايه يك بعدي نوع آرايه نام آرايه [طول آرايه]; در آرايه يك بعدي كه نام ديگر آن ليست است ميتوان با يك انديس به عناصر آن دست يافت. آرايه هاي يك بعدي در c++ به شكل زير تعريف ميشوند: نوع آرايه نام آرايه [طول آرايه]; نوع آرايه (element type) می تواند یکی از انواع داده اي قابل استفاده در زبان C++ باشد. نام آرايه (array name) براي دسترسي به عناصر آرايه مورد استفاده قرار ميگيرد و از قوانین اسم گذاری متغییرها پیروی می کند.. طول آرايه (number of elements) كه يك عدد ثابت صحيح مثبت است، تعداد عناصر آرايه را تعيين مينمايد. Example code available in code/arrays/arraydecls.cpp

تعريف متغير آرايه اي از نوع int با 6 عنصر 2 bytes Each int is 2 bytes arr[0] arr[1] arr[5] int arr[6];

دسترسي به عناصر آرايه در c++ عنصر اول هر آرایه با انديس صفر مشخص ميشود. توجه داشته باشيد كه عناصر آرايه در خانه هاي متوالي حافظه قرار دارند. پس، آخرین عنصر یک آرایه n عنصری در محل n-1 ام قرار دارد. لذا، اگر سعی کنید عنصر n ام را بخوانید با خطای اجرا مواجه خواهید شد. براي دسترسي به هر عنصر از انديس آن استفاده ميشود مثلاً x[2] = 5 عنصر دوم را برابر با 5 قرار ميدهد. x X[5] X[4] X[3] X[2] X[1] X[0]

ميزان حافظه و آدرس عناصر ميزان حافظه اي كه به آرايه اختصاص داده ميشود به طريق زير محاسبه ميگردد: ميزان حافظه آرايه = (تعداد عناصر آرايه) × (طول نوع داده آرايه) اگر عنصر اول آرايه در آدرس A قرار داشته باشد و نوع داده‌‌ آرايه n بايت باشد. آدرس عنصر i ام از رابطه زير محاسبه ميشود: آدرس عنصر iام = A + n × i برای مشخص کردن انديس هر عنصر می توان از عبارات طبیعی زبان C++ استفاده کرد. x[17] , x[i+3] , x[a+b+c]

مثال: برنامه اي که با تعريف آرايه اي بطول 10 مقدار هر عنصر آرايه را برابر با انديس آن عنصر قرار دهد و سپس مجموع مربعات عناصر آرايه را محاسبه کرده و به خروجي ببرد

sum += array[i] * array[i]; void main() { int array[10] , i , sum = 0 ; for (i=0 ; i < 10 ; i++) array[i] = i; sum += array[i] * array[i]; printf(“ the sum square of array: %d “ , sum); getch(); } the sum square of array: 285

مثال: برنامه اي که معدل 5 دانشجو را از ورودي گرفته، در آرايه اي قرار دهد و بيشترين معدل و محل وجود آن را پيدا کرده و به خروجي ميبرد

void main() { const int n=5; float ave[n]; int i , p ; for (i=0 ; i < n ; i++) printf( “Enter an average:”); scanf( “%f” , &ave[i]); } p = 0; for (i=1 ; i < n ; i++) if (ave[i] > ave[p] ) p = i; printf(“\n max = %5.2f, position = %d” , ave[p] , p+1); getch(); Enter an average: 12 Enter an average: 15 Enter an average: 17 Enter an average: 16 max = 17.00 , position = 4

جهت تسلط به بحث آرايه ها بايد موارد زير مورد توجه قرار گيرند: الف) تعريف يك آرايه ب) نحوه دستيابي به يك المان از آرايه ج) نحوه مقداردهي اوليه آرايه د) نحوه ارسال آرايه به تابع ه) چند كاربرد از آرايه ها

مقدار دهي اوليه به آرايه ها می توان آرایه ها را هنگام تعریف آنها مقدار دهی اولیه نیز کرد. int iArray[5] = { 1,8,3,6,12}; double dArray[2] = { 0.707, 0.707}; char s[] = { 'R', 'P', 'I' }; اگر آرایه را مقدار دهی اولیه کنید نیازی به مشخص کردن سایز آرایه نیست. در مثال فوق طول آرايه s برابر با 3 در نظر گرفته ميشود

آرايه يک بعدي بعنوان آرگومان تابع اگر آرايه بعنوان آرگومان تابع باشد، پارامتر معادل آن به سه صورت زير تعريف ميشود: 1- آرايه اي با طول مشخص 2- آرايه اي با طول نامشخص که در اينصورت بهتر است طول آرايه نيز بعنوان آرگوماني ديگر منتقل شود 3- استفاده از اشاره گر که مشابه به آرايه با طول نامشخص است

مثال: چاپ يك آرايه در خروجي می توان آرایه را به این صورت به تابع فرستاد و نیازی به مشخص کردن سایز آرایه نیست void print_array (int arr[], int len) { for (int i=0;i<len;i++) printf( " Arr[%d] = %d\n" , i , arr[i] ); } void main() int test[4]={1,5,7,4}; print_array (test , 4); Arr[0]= 1 Arr[1]= 5 Arr[2]= 7 Arr[3]= 4 On the course home page in code/arrays/printarray.cpp

تمرين برنامه اي که تعداد 10 عدد صحيح را از ورودي ميخواند و ابتدا اعداد منفي و سپس اعداد مثبت را به خروجي ميبرد تعداد اعداد مثبت و منفي را نيز مشخص ميکند برنامه اي بنويسيد که تعداد 5 عدد از ورودي خوانده و سپس آنها را به ترتيب معکوس درون آرايه ديگري کپي کند نتيجه را نيز در خروجي نمايش دهد

مرتب سازي آرايه ها اعمال مرتب سازي و جستجو، عمومي ترين اعمالي هستند كه در برنامه نويسي انجام ميشوند. اگر يك ليست مرتب باشد در اينصورت عمليات جستجو سريعتر انجام ميگيرد مرتب سازي آرايه ها به دو صورت صعودي و نزولي انجام ميگيرد. مرتب سازي صعودي: x[0] < x[1] < x[2] <…<x[n] مرتب سازي نزولي: x[0] > x[1] > x[2] >…>x[n]

مرتب سازي حبابي اين روش مرتب سازي بسيار ساده و قابل درك ميباشد در اين روش، بايد چندين مرتبه در طول آرايه حركت نمود و دوبه دوي عناصر با هم مقايسه ميشوند و در صورت لزوم جاي عناصر با هم عوض ميشود.

مرتب سازي حبابي يك آرايه void bubble (int arr[] , int len) { int i,j,tmp; for (i=0 ; i<len-1 ; i++) for (j=i+1 ; j < len ; j++) if (arr[i]>arr[j]) tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } void main() int test[4]={1,5,7,4}; bubble (test , 4); print_array (test , 4); 1 4 5 7 On the course home page in code/arrays/printarray.cpp

جستجوي يك مقدار در آرايه جستجوي ترتيبي اين تابع در آرايه حركت كرده اگر به مولفه مساوي با مورد جستجو برسد انديس آن و در غير اينصورت عدد منفي برميگرداند. int lsearch (int arr[] , int len, int val) { for (int i=0;i<len;i++) if (arr[i] == val) return i; return -1; } On the course home page in code/arrays/printarray.cpp

50 4 5 8 30 12 20 11 3 9 x[9] x[8] x[7] x[6] x[5] x[4] x[3] x[2] x[1] x[0] x lsearch(x , 10 , 5) int lsearch (int arr[] , int len, int val) { for (int i=0;i<len;i++) if (arr[i] == val) return i; return -1; }

جستجوي يك مقدار در آرايه (ادامه...) جستجوي دودويي اين جستجو در آرايه مرتب انجام ميشود int bsearch (int arr[] , int len, int val) { int mid , low = 0 , high = len -1; while (low<=high) mid = (low+high)/2; if (arr[mid] == val) return mid; else if (arr[mid] > val) high = mid-1; else low = mid+1; } return -1; On the course home page in code/arrays/printarray.cpp

50 4 9 8 30 12 20 11 3 5 x[9] x[8] x[7] x[6] x[5] x[4] x[3] x[2] x[1] x[0] x 50 30 20 12 11 9 8 5 4 3 low mid high bsearch(x , 10 , 4)

آرايه هاي چند بعدي می توان آرایه ای از آرایه ها درست کرد در c++ آرايه هايي با بيش از يك بعد ميتوان درست كرد ولي اغلب برنامه نويسان از آرايه هاي 2 بعدي استفاده ميكنند. تعريف يك آرايه 2 بعدي به شكل زير انجام ميگيرد نوع آرايه نام آرايه [تعداد سطرها][تعداد ستونها]; يك آرايه n بعدي به شكل زير تعريف ميگردد. نوع آرايه نام آرايه [بعد 1] [بعد 2]…[nبعد ];

موقعيت عناصر آرايه در يك آرايه 2 بعدي int A[4][3] Col 0 Col 1 Col 2 Row 0 A[0][0] A[0][1] A[0][2] Row 1 A[1][0] A[1][1] A[1][2] Row 2 A[2][0] A[2][1] A[2][2] Row 3 A[3][0] A[3][1] A[3][2]

موقعيت عناصر آرايه دو بعدي در حافظه A[0][0] A[0][1] A[0][2] A[1][0] A[1][1] A[1][2] A[2][0] A[2][1] A[2][2] A[3][0] A[3][1] A[3][2] A[0] A[1] A[2] A[3] char A[4][3]; اگر A[0][0] در آدرس M حافظه باشد، آنگاه A[i][j] در آدرس زير خواهد بود: M+(i*3+j)*sizeof(char)

مثال: جدول ضرب با استفاده از آرايه دوبعدي void main () { int table[10][10] , i , j; for ( i=0 ; i<10 ; i++) for( j=0 ; j<10 ; j++) table[i][j] = (i+1) * (j+1); printf("%5d" , table[i][j] ); printf("\n" ); } getch(); Available via the course home page in code/arrays/2darray.cpp

آرايه دو بعدي بعنوان آرگومان تابع ارسال آرايه دو بعدي همانند آرايه يك بعدي است با اين تفاوت كه شما ميتوانيد تعداد سطرها را ذكر نكنيد void f1(int x[][10],int len); void f2(int x[5][10]); Available via the course home page in code/arrays/2darray.cpp

مثال: برنامه‌اي كه عناصر ماتريس 2×3 را از ورودي خوانده، بزرگترين عنصر هر سطر را پيدا كند و به خروجي ببرد. void minput (int [][2],int); void mcal (int mat[][2],int); void main () { int mat[3][2]; clrscr(); minput ( mat , 3); mcal ( mat , 3); getch(); }

void minput (int m[][2],int r) { for (int i=0 ; i < r ; i++) for(int j=0 ; j < 2 ; j++) printf(“Enter mat[%d][%d]: ”, i , j); scanf(“%d” , &m[i][j] ); } void mcal (int mat[][2],int r) int i , j , rmax; printf(“\nROW \t\t MAX”); printf(“\n---------------------------”); for ( i=0 ; i< r ; i++) rmax = mat[i][0]; for( j=1 ; j< 2 ; j++) if (mat[i][j] > rmax) rmax = mat[i][j]; printf(“\n%3d \t\t %3d:”, i+1 , rmax); Available via the course home page in code/arrays/2darray.cpp

خروجي Enter mat[0][0]: 3 Enter mat[0][1]: 4 Enter mat[1][0]: 5 ROW MAX --------------------- 1 4 2 6 3 8

ارسال آرايه ها به توابع بصورت فراخواني با مرجع ميباشد. نكته مهم ارسال آرايه ها به توابع بصورت فراخواني با مرجع ميباشد. يعني هر تغييري كه در تابع روي آرايه انجام پذيرد در مرجع اوليه آن اعمال ميشود.

مقداردهي اوليه به آرايه هاي دو بعدي آرايه هاي دو بعدي همانند آرايه هاي يك بعدي ميتوانند مقداردهي اوليه شوند. int y[2][3] ={1,3,4,7,6,15}; int y[2][3] ={{1,3,4},{7,6,15}}; int y [3] ={1}; اگر تعداد عناصري كه مقدار دهي اوليه شده اند از تعداد عناصر مشخص شده كمتر باشند در اينصورت مابقي عناصر مقدار صفر ميگيرند.

مثال: برنامه اي بنويسيد كه كه دو ماتريس را از ورودي خوانده و ماتريس حاصلضرب را در خروجي نمايش دهد.

void Read_Mat1 (int m[][3] , int len); void main () { int mat1[2][3] , mat2[3][4] , mat3[2][4]={0}; Read_Mat1 ( mat1 , 2); Read_Mat2 ( mat2 , 3); int i , j , k; for ( i=0 ; i < 2 ; i++) for( j=0 ; j < 4 ; j++) mat3[i][j]=0; for( k=0 ; k < 3 ; k++) mat3[i][j] += mat1[i][k] * mat2[k][j]; } printf( “\n”); printf( “%5d” , mat3[i][j] ); getch(); Available via the course home page in code/arrays/2darray.cpp

خروجي Enter mat1[0][0]: 1 Enter mat1[0][1]: 2 Enter mat1[0][2]: 3 28 24 56 86 80 24 136 208 خروجي

نكته اگر تعداد عناصر آرايه مشخص نباشد، بايد حداكثر تعداد مورد انتظار را در نظر گرفت.

تمرين برنامه ضرب ماتريسها را به گونه اي اصلاح كنيد كه بتواند هر دو ماتريس مجاز را كه ابعاد آنها كمتر از 6×6 است را در هم ضرب كند. توجه: ابعاد و درايه‌هاي هر ماتريس از كاربر گرفته شود.