برنامه نویسی C (جلسه ۱۱) آرایه ها
اسلاید 1: 1بسم الله الرّحمن الرّحيم برنامه نويسي C – جلسه 11دانشگاه قمنيم سال اول 85-84
اسلاید 2: 2خلاصه جلسه قبلمثال از توابع بازگشتیبرج های هانوی مزایا و معایب نوشتن برنامه به صورت بازگشتی:مزایا: ساده شدن برنامه نویسی و خوانا تر شدن برنامهمعایب: مصرف حافظه و سرعت اجرای کمترمحل قرار گرفتن توابعهر تابع قبل از احضار می بایست یا تعریف شده باشد و یا اعلانمزایای استفاده از توابع: قابل فهم کردن و امکان برنامه نویسی سریعتر و ساده تر نوشتن برنامه های خوانا: استفاده از توابع، اسامی مناسب برای متغیرها و توابع، دندانه ای کردن برنامه، نوشتن comment
اسلاید 3: 3در این جلسهآرایه ها ضرورت وجود آرایه ها تعریف آرایهمثال هایی از کاربرد آرایه ها آرایه ها به عنوان ورودی و برگشتی تابعثابت (constant)
اسلاید 4: 4ضرورت وجود آرایه ها مثال: برنامه ای بنویسید که 5 عدد را بگیرد و میانگین و واریانس آنها را محاسبه کند.نکته: میانگین و واریانس n نقطه ، و....و از روابط زیر به دست می آیند:اگر تنها هدف به دست آوردن میانگین بود به راحتی می توانستیم آن را انجام دهیم:float x;sum=0;for (i=0;i<5;++i){ scanf(“%f”,&x); sum+=x;}ave=sum/5;
اسلاید 5: 5در اینجا برای به دست آوردن واریانس نیاز به همه xi ها داریم. اما در کد نوشته شده قبل تنها آخرین عدد را داریم و بقیه مقادیر از بین رفته اند.در نتیجه ناچاریم کد خود را به صورتی مثل این بنویسیم:float x0,x1,x2,x3,x4;float ave,var;scanf(“%f%f%f%f%f”,&x0,&x1,&x2,&x3,&x4);ave=(x0+x1+x2+x3+x4)/5;var=(pow(x0-ave,2)+pow(x1-ave,2)+pow(x2-ave,2)+pow(x3-ave,2)+pow(x4-ave,2))/5;
اسلاید 6: 6به این ترتیب کد نامناسبی خواهیم داشت. این موضوع به ازای داده های زیادتر (مثلا 1000 عدد) بیشتر نمود پیدا می کند.در این جلسه نشان می دهیم با تعریف آرایه ها مي توان چنين برنامه هايي را خيلي ساده و خلاصه پياده كرد.به طور كلي آرايه ها در مواردي به كار برده مي شوند كه با مجموعه اي از داده هاي هم نوع سروكار داشته باشيم.
اسلاید 7: 7تعريف آرايهيادآوري: با دستور تعريف متغير مثل int x; مكاني در حافظه به نام x به برنامه تخصيص داده مي شد.در زبان C اگر بنويسيم int x[5]; ، پنج مكان مجاور هم در حافظه به برنامه تخصيص داده مي شود. اين مكان ها به صورت x[0]، x[1]، x[2] و x[4] ناميده مي شوند.اصطلاحا مي گوييم آرايه اي به نام x ، از نوع int و با 5 عنصر تعريف كرده ايم.به 0، 1 ،2، 3 و 4 اصطلاحا انديس آرايه گفته مي شود.به همين ترتيب مي توان آرايه هايي ازانواع ديگر مثل float، char، short و ....داشت.
اسلاید 8: 8مثال 1Void main( ){ float num[3];num[0]=1.2; num [1]=2;num[2]=3.4; printf(“%f”,num[1])}Void main( ){ char c[3]; c[2]=‘A’; c[0]=‘d’; c[1]=‘D’;}
اسلاید 9: 9مثال 2#include <stdio.h>Void main( ){ int I; int x[4]; for (i=0;i<4;++i) scanf(“%f”,x[i]); for (i=0;i<4;++i) printf(“t%f”,x[i]);}حلقه اول مقادیر را دریافت می کند و در آرایه x قرار می دهد و حلقه دوم این مقادیر را چاپ می کند.
اسلاید 10: 10مثال 3 ) محاسبه ميانگين و واريانس 5 عددVoid main( ){ float x[5]; float sum=0 , ave; int I; for (i=0;i<5;++i) { scanf(“%f”,&x[i]); sum+=x[i]; }Ave=sum/5;Var=0;For (i=0;i<5;++i) Var+=pow (x[i]-ave,2)/5; Printf(“The average=%f”,ave);Printf(“The variance=%f”,var) }
اسلاید 11: 11مثال 4) برنامه ای بنویسید که 40 مقدار را از کاربر دریافت کرده و آنها در یک آرایه بریزد و سپس ماکزیمم مقادیر و اندیس عنصر ماکزیمم را محاسبه کند.#include <stdio.h>void main(){int i;float x[40];float max;int max_index;for (i=0;i<40;++i){ printf(Enter number %dth:,(i+1));scanf(%f,&x[i]);}max=x[0];max_index=0;for (i=1;i<40;++i)if (x[i]>max){max=x[i];max_index=i;}printf(nThe maximum=%f,max);printf(nAnd its index=%d,max_index);}
اسلاید 12: 12مثال 5) برنامه ای بنویسید که 10 عدد از کاربر بگیرد آنها را به صورت صعودی مرتب کرده و چاپ کند.برنامه از دو بخش تشکیل شده است:دریافت اعداد مرتب کردن آنها دریافت اعداد را می توان با تعریف یک آرایه و نوشتن قطعه برنامه ای به صورت زیر انجام داد:int x[10];int i;for (i=0;i<10;++i) scanf(“%f”,&x[i]);
اسلاید 13: 132. به مسئله مرتب سازی اصطلاحا sorting گفته می شود. برای مرتب سازی روش های متعددی وجود دارد. مانند :bubble sort( مرتب سازی حبابی)، quick sort، merge sort و.....در این مثال از bubble sort که یکی از ساده ترین آنهاست استفاده می شود.
اسلاید 14: 14 برای مرتب سازی صعودیBubble sortابتدا دو عنصر اول و دوم آرایه با هم مقایسه می شوند.اگر عنصر اول از دوم بزرگتر بود جای دو عنصر عوض می شود. سپس عناصر دوم و سوم مقایسه می شوند و مشابه قبل تعویض مکان در صورت لزوم انجام می گیرد. همین کارها برای عناصر 3 و 4، 4 و 5، و....انجام می شود تا به انتهای آرایه برسیم. زمانی که به انتهای آرایه برسیم ماکزیمم مقادیر در آخرین مکان آرایه قرار گرفته است و به عبارت دیگرزمانی که یک باراز ابتدا تا انتهای آرایه پیمایش شود عنصر آخر می شود. در مرحله بعد این پیمایش و اعمال گفته شده روی عناصر اول تا یکی مانده به آخر انجام می شود و در نتیجه :با دو بار پیمایش 2 عنصر مرتب می شوند. در مرحله بعد پیمایش از ابتدا تا عنصر دوتا مانده به آخر آرایه انجام می شود و در نتیجه:با سه بار پیمایش سه عنصر مرتب می شود. به این ترتیب اگر آرایه ، n عنصری باشد با n-1 پیمایش ، کل آرایه مرتب می شود.
اسلاید 15: 15تعویض دو مقدارفرض کنید دو متغیر x=23 و y=34 داشته باشیم و بخواهیم مقدار آنها را با هم تعویض کنیم.با تعریف متغیری به نام temp و نوشتن قطعه کد زیر می توان این کار را انجام داد:float temp;temp=x;x=y;y=temp;
اسلاید 16: 16برنامه مثال 5#include <stdio.h>void main(){int i,j;float A[10];float temp;for (i=0;i<10;++i)scanf(%f,&A[i]);for (i=9;i>1;--i)for (j=0;j<i;++j)if (A[j]>A[j+1]){temp=A[j];A[j]=A[j+1];A[j+1]=temp;}for (i=0;i<10;++i)printf(n%f,A[i]);}نکته: حلقه for دوم تعداد پیمایش ها (n-1 تا) را کنترل می کند.
اسلاید 17: 17مقدار دهی به آرایه ها سه روش برای مقدار دهی به آرایه ها وجود دارد:با دستورات ورودی مثل scanf یا getche:ch[0]=getche();scanf(“%d”,&x[2]);مقدار دهی مستقیم:ch[0]=‘a’;x[2]=23;مقداردهی هنگام تعریف: (صفحه بعد)
اسلاید 18: 18مقداردهی هنگام تعریف می توان آرایه ها را (تنها)هنگام تعریف به صورت زیر مقداردهی کرد:int x[3]={2,3,-5};در اینجا 2 در x[0]، 3 در x[1] و 5- در x[3] قرار می گیرد. مثال های دیگر:float f[2]={0.34,4.33};char ch[4]={‘a’,’d’,’x’,’v’};
اسلاید 19: 19چند سوال اگر در مقداردهی هنگام تعریف، تعداد مقادیر نوشته شده داخل { } از اندازه مشخص شده برای آرایه بیشتر باشد خطا اعلام می شود.int x[2]={3,4,6,7,8}اگر تعداد مقادیر کمتر باشد، بقیه صفر در نظر گرفته می شوند:int x[3]={3,4}در اینجا x[2]=0 می شود. مثال دیگر:int x[100]={0}همه مقادیر صفر می شوند. (این روشی برای صفر کردن همه عناصر آرایه است).اگر بنویسیم: int x[ ]={2,3} اندازه آرایه 2 در نظر گرفته می شود.
اسلاید 20: 20آرایه ها به عنوان ورودی و برگشتی توابعآرایه ها مانند سایر متغیرها می توانند ورودی یا برگشتی تابع باشند.
اسلاید 21: 21آرایه به عنوان ورودی تابعمثال 6: تابعی بنویسید که یک آرایه را بگیرد و ماکزیمم آن را برگرداند:ورودی: آرایه برگشتی: یک عددfloat max(float x[10]){int i;float max=x[0];for (i=1;i<10;++i)if (x[i]>max)max=x[i];return max;}
اسلاید 22: 22برنامه کامل مثال 6#include <stdio.h>float max(float x[10]){int i;float max=x[0];for (i=1;i<10;++i)if (x[i]>max)max=x[i];return max;}void main(){int i;float A[10];for (i=0;i<10;++i)scanf(%f,&A[i]);printf(nThe maximum=%f,max(A));}
اسلاید 23: 23ثابت (Constant)در بسیاری مواقع نیاز به کار با مقادیر ثابت در برنامه، پیش می آید و این مقادیر ممکن است چند بار در برنامه تکرار شوند. مانند عدد 10 در مثال قبل اگر در مثال قبل بخواهیم ماکزیمم فرضا 20 عدد را حساب کنیم باید تمام اعداد 10 را به 20 تبدیل کنیم. این امر دو مشکل دارد: وقت گیر بودن و فراموش کردن تعویض همه مقادیر.دستور define در زبان C این مشکل را مرتفع می سازد.
اسلاید 24: 24دستور defineمثال 7: همان مثال قبل با تغییرات جزئی: (با رنگ قرمز)#include <stdio.h>#define SIZE 10float max(float x[SIZE]){int i;float max=x[0];for (i=1;i<SIZE;++i)if (x[i]>max) max=x[i];return max;}void main(){int i;float A[SIZE];for (i=0;i<SIZE;++i)scanf(%f,&A[i]);printf(nThe maximum=%f,max(A));}دستور define، مانند include یک دستور راهنمای پیش پردازندهاست. کامپایلر در هر جای برنامه که با SIZE مواجه شود به جای آن عدد 10 قرار می دهد.SIZE اصطلاحا یک ثابت (constant) خوانده می شود.اسم ثابت، دلخواه است. معمولا ثابت ها را با نام های با حروف بزرگ تعریف می کنند. مقدار ثابت در برنامه غیرقابل تغییر است. مثلا اگر دستوری مثل SIZE=23 در برنامه بنویسیم خطا داده می شود.اگر مثلا خواستیم با 20 عدد کار کنیم تنها کافی است عدد 10 را در define به 20 تبدیل کنیم.محل دستور define در بخش include هاست. (ترتیب نوشتنinclude ها و define مهم نیست و می توانند قبل یا بعد هم قرار گیرند)
اسلاید 25: 25تابع به عنوان برگشتی تابعخارج از مباحث درس می باشد و نیاز به آشنایی با مفهومی به نام اشاره گرها دارد.
نقد و بررسی ها
هیچ نظری برای این پاورپوینت نوشته نشده است.