1 / 45

آرايه ها يا رشته ها Arrays

آرايه ها يا رشته ها Arrays. ارايه ها برای کميتهايي مورد استفاده قرار می گيرند که قرار است بر روی انها عمليات يکسانی انجام گيرد اينگونه کميتها معمولاً به صورت متغيرهای انديس دار نشان داده می شوند

fraley
Download Presentation

آرايه ها يا رشته ها Arrays

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. آرايه ها يا رشته ها Arrays • ارايه ها برای کميتهايي مورد استفاده قرار می گيرند که قرار است بر روی انها عمليات يکسانی انجام گيرد • اينگونه کميتها معمولاً به صورت متغيرهای انديس دار نشان داده می شوند • در زبان های برنامه نويسی جهت انجام عمليات مختلف بر روی چنين متغيرهايي تسهيلاتی خاص در نظر گرفته شده است ارايه ها در برنامه نويسی فرترن، عباسپور

  2. تعريف رشته Array • عبارتست از مجموعه ای از اطلاعات (Data) به صورت اسکالر که همگی از يک نوع باشند بطوريکه کليه اعضای آن با يک الگوی منظم به ترتيب چيده شده باشند • هر آرايه با يک اسم مشخص می گردد • يک بعدی (سطری يا ستونی) در رياضی به آن Vector می گويند • دو بعدی ( دسته ای از کميتها که عناصر آن به صورت سطر و ستون مرتب می شوند و به آن ماتريس Matrix می گويند) • چند بعدی (با مرتبه های بالاتر) ارايه ها در برنامه نويسی فرترن، عباسپور

  3. مزايای استفاده از آرايه • اعلان ساده تر (اعلان يک متغيير بجای ده ها و هزاران) • سادگی کار با آنها ( عمليات رياضی يکسانی بر روی آنها انجام می گيرد) • انعطاف پذيری بيشتر (به روشهای مختلف می توان آنها را پردازش نمود) • سهولت فهم برنامه • کاهش اندازه برنامه نوشته شده ارايه ها در برنامه نويسی فرترن، عباسپور

  4. مثال آرايه يک بعدی : نمرات درسی دانشجويان با نام Grade: 88, 84, 93, 25, 47, 62, 95, 38, 82, 58 هر عنصر با يک انديس Index مشخص می شود که نشان دهنده محل عنصر در آرايه است: Grade1=88 Grade6=62 ارايه ها در برنامه نويسی فرترن، عباسپور

  5. مثال آرايه دو بعدی: • تعداد کالاهای فروخته شده در شرکتی در شهرهای مختلف را به صورت يک ارايه دو بعدی با نام Sold_items نشان می دهيم: ارايه ها در برنامه نويسی فرترن، عباسپور

  6. ادامه.... هر عنصر با انديسی دو رقمی نشان داده می شود Sold_itemsi,j رقم اول (i) شماره رديف و رقم دوم (j) شماره ستون محل هر عنصر است Sold_items1,2=800 Sold_items4,3=1300 اندازه ارايه حاصل ضرب ارقام حداکثر انديس است ارايه ها در برنامه نويسی فرترن، عباسپور

  7. کاربرد آرايه ها در مهندسی • جريان يک سيال نسبت به زمان مثل Flow(I) و Time(I) و يا هر فرايند مشابه ديگر • رسم نمودار (گرافيک) هر مقدار (به صورت عدد و ياکاراکتر) می تواند در مختصاتی مثل i و j ذخيره گردد • ايجاد پايگاه های اطلاعاتی (database Management) مثل ليست کارکنان، نتيجه ارزشيابی و غيره • عمليات ماتريسی مثل جمع، تفريق و ضرب ماتريس ها • بايد تعداد ستون های اولی با تعداد رديفهای دومی برابر بوده انگاه نتيجه دارای تعداد رديف اولی و تعداد ستون دومی خواهد بود ارايه ها در برنامه نويسی فرترن، عباسپور

  8. انواع آرايه در فرترن • آرايه استاتيکی (Static Arrays) : • اندازه آن در زمان اعلان و در طول برنامه ثابت است • در زمان اعلان اندازه Dimension آن بايد به گونه ای تعيين شود که تمام اطلاعات در ان جا داده شود • آرايه های نيمه ديناميکی (Semi- Dynamic Arrays) : • اين نوع ارايه ها پس از اينکه وارد يک ساب روتين می شوند اندازه آنها متناسب با نياز آن ساب روتين است. به اين نوع ارايه، ارايه اتوماتيک در فرترن گفته می شود • آرايه های ديناميکی (Dynamic Arrays) : • اندازه آنها در طی اجرای برنامه ممکن است بر حسب نياز تغيير کند. • سبب انعطاف پذيری برنامه می شوند • سبب افزايش زمان اجرای برنامه می گردند • به آنها Allocatable Arrays هم گفته می شود ارايه ها در برنامه نويسی فرترن، عباسپور

  9. خصوصيات آرايه ها • قيود آرايه درهربعد (Bounds): • حد بالا Lower و حد پايين Upper • اندازه بعد ارايه( (Extent: تعداد المان در هر بعد • شکل ارايه (Shape) : مشخص کننده نوع (مرتبه) و اندازه ارايه است مثال: [8] و [2,4] به ترتيب ارايه يک بعدی با 8 عضو و ارايه دو بعدی با دو سطر و 4 ستون (8عضو) را نشان می دهند. • اندازه آرايه (Size) : حاصل ضرب اندازه ابعاد ارايه • مطابقت ((Conformance : به مجموعه ای از ارايه های هم شکل گفته می شود ارايه ها در برنامه نويسی فرترن، عباسپور

  10. مشخصه های ارايه Specification هر ارايه با مشخصه های زير معلوم می گردد • نام آرايه: حداکثر 31 کاراکتر با همان محدوديتهای نام برای متغير های معمولی • نوع آرايه (Type): منظور Real, Integer, Character, Logical • ابعاد (مرتبهRank) : حداکثر می تواند 7 باشد ارايه ها در برنامه نويسی فرترن، عباسپور

  11. قيود ابعاد آرايهLower & Upper bounds for each dimension • لزومی ندارد شماره ابعاد ارايه ها ( حد پايين) از 1 شروع شود • اگر حد پايين مشخص نشود فرترن آن را 1 در نظر می گيرد. • فرم کلی اعلان آرايه: برای مواقعی که بخواهيم چندين آرايه را با قيود و نوع يکسان اعلان کنيم TYPE, DIMENSION (bound) :: name اگر آرايه ها نوع و قيود مختلف داشته باشند TYPE :: name (bound) ارايه ها در برنامه نويسی فرترن، عباسپور

  12. مثال • حالت اول: • INTEGER, DIMENSION(6) :: a دارای 6 عضو • REAL, DIMENSION(0:9) :: bدارای 10 عضو • LOGICAL, DIMENSION(2,2) :: yes_no • حالت دوم: • INTEGER :: a(6) • REAL :: b(0:9) • LOGICAL :: yes_no(2,2) • REAL:: zero_band (0:2,0:3) ارايه ها در برنامه نويسی فرترن، عباسپور

  13. ترکيب دو نوع اعلان در يک برنامه امکان پذير است INTEGER, DIMENSION(8) :: x,y REAL:: alpha(1:3), beta(4:9) REAL, DIMENSION(0:5,12:45,6) :: data CHARACTER(len=10) :: names(25( ارايه ها در برنامه نويسی فرترن، عباسپور

  14. المان های مجزا در آرايه هاIndividual Elements • برای دسترسی به يک عنصر مشخص در يک ارايه بايد از نام آرايه و از يک يا چند عدد صحيح درداخل پرانتزکه همان انديس متناظر با محل عنصر است استفاده شود. • فرم کلی: array (index) مثال: REAL, DIMENSION(8) ::a INTEGER, DIMENSION(5,4) ::b a(4)المان چهارم b(4,2) المان واقع در تقاطع رديف4 و ستون 2 ارايه ها در برنامه نويسی فرترن، عباسپور

  15. مقاطع در ارايه ها Sections • برای نشان دادن مقطع ( محدوده ای) از يک آرايه از دو عدد صحيح در داخل پرانتز که توسط “ : “ از هم جدا شده باشد استفاده می شود. فرم کلی: array ([lower]:[upper]:[step]( ِDefault حد پايين و بالا چيزی است که در مرحله اعلان مشخص می گردد ُStep گام يا نمو است که به صورت Default برابر 1 است ارايه ها در برنامه نويسی فرترن، عباسپور

  16. مقاطع در ارايه • مثال: a(3:5)المانهای 3، 4 و 5 a(1:5:2) المانهای 1؛ 3 و 5 ! Step=2 b(1:3, 2:4) المانهای رديف 1 تا 3 و ستون 2 تا 4 Beta (3,1:7:2) المانهای1 ، 3، 5 و 7 روی سطر سوم Beta (1,2:11:2) المانهای 2، 4، 6، 8 و 10 روی رديف اول • استفاده از “ : “ ما را قادر می سازد که به بخشی و يا تمامی المانها در يک ستون و يا سطر دسترسی پيدا کنيم B (:,4) تمام المانها در ستون 4 • برای تعيين مقاطع می توان از عبارات محاسباتی در مود صحيح هم استفاده کرد Alpha (2*k) 2*k المان موجود در نقطه ای با موقعيت ارايه ها در برنامه نويسی فرترن، عباسپور

  17. زير نويس های برداری Vector Subscripts • روشی ساده و کوتاه جهت دسترسی به المانهايي خاص از يک ارايه • زير نويس های برداری نوعی INTEGER هستند که به صورت زير بيان می شوند: /List/ مثال: REAL, DIMENSION(9) :: a INTEGER, DIMENSION(3) :: random random=(/6,3,8/) مقادير 6، 3و 8 به المان های ارايه a(random)=0.0 المانهای 6، 3 و 8 از اين ارايه به صفر تبديل می گردد a((/7,8,9/))=1.2نوعی ديگر از زيرنويس برداری که المانهای 7، 8و 9 برابر 2/1 می گردند در دستور شماره 3 مقادير جديد جايگزين مقادير قبلی ارايه random می شود random(1)=6و random(2)=3 و random(3)=8 ارايه ها در برنامه نويسی فرترن، عباسپور

  18. نکته مهم در زيرنويس های برداری بايد دقت شود که از دوبله شدن مقادير در زير نويس ها جلوگيری شود REAL, DIMENSION(5) :: a INTEGER, DIMENSION(3) :: list list=(/2,3,2/) a(list)=(/1.1, 1.2, 1.3/) !illegal element 2 set twice ارايه ها در برنامه نويسی فرترن، عباسپور

  19. تخصيص مقدار به ارايه هاَArray assignment • تخصيص کامل آرايه Whole Array assignment • موقعی که بخواهيم به تمام المان ها مقدار يکسانی اختصاص دهيم. • مواقعی که بخواهيم از آرايه ديگری کپی شود REAL, DIMENSION(100) :: a, b, c REAL :: d(10,10) = 0.0 b=2*a+4 a=2.0 c=b*a c=d ! Illegal statement دستورات سوم، چهارم و پنجم قابل قبول هستند چون a ، b و c با هم مطابقت دارند. دستور آخر قابل قبول نيست چون دو آرايه هم مرتبه نيستند. ارايه ها در برنامه نويسی فرترن، عباسپور

  20. تخصيص مقطعی آرايه هاArray Section Assignment • در مواقعی که به بخشی از آرايه بخواهيم مقاديری اختصاص دهيم. REAL, DIMENSION(10) :: alpha, beta REAL :: gamma(20) alpha(1:5)=2.0 alpha(1:10:2)=beta(1:5)/6. alpha(2:10)=alpha(1:9) gamma(11:20)=beta در دستور اول مقدار2 به 5 المان اول alpha اختصاص داده شده است در دستور دوم دو بخش قابل انطباق از دو ارايه مورد نظر است لذا دستور درست است. alpha(1)=beta(1)/6; alpha(3)=beta(2)/6; alpha(5)=beta(3)/6; alpha(7)=beta(4)/6; alpha(9)=beta(5)/6 دستور شماره 3 يک عمل قدرتمند است. بدون نياز به عمليات تکرار Do به طور اتوماتيک جابجا می شوند. بطوريکه در اين مثال 9 المان از اين آرايه با شروع از دومين المان، مقادير 9 المان اول را بخود می گيرند .يعنی دو المان اول مقادير يکسانی خواهند داشت دستور 4 ويژگی مهم ديگری را نشان می دهد اگر چه دو ارايه با هم قابل انطباق نيستند ولی چون بخشهای مورد نظر انطباق دارند دستور درستی است ارايه ها در برنامه نويسی فرترن، عباسپور

  21. مقدار دهی اوليه به آرايه ها • سازند ها (Constructors) • اين نوع برای ارايه های يک بعدی مفيد است که نياز است المان ها مقادير مختلف بگيرند array = (/ list /) ليست می تواند شامل موارد زير باشد: • ليستی از مقادير مختلف INTEGER :: a(6)=(/1,2,3,6,7,8/) • ليستی از متغير های مختلف REAL::b(2)= (/sin(x), cos(x)/) • بخشی از يک آرايه INTEGER :: c(5)=(/0,a(1:3),4/) • استفاده از حلقه Do ضمنی Implied DO loop REAL:: d(100) = (/REAL(i), I=1,100/) ارايه ها در برنامه نويسی فرترن، عباسپور

  22. 3 5 • 4 6 تابع تغيير شکل Reshape • جهت مقدار دهی اوليه به آرايه هايي با مرتبه بيشتر از يک • برای مقدار دهی يک آرايه با شکل مشخص از روی المانهای يک آرايه معين • فرم کلی RESHAPE (list,shape) List عبارت است از مقادير يک آرايه به صورت يک بعدی يا يک سازند Constructor که حاوی Data است Shapeعبارتست از يک آرايه يک بعدی که شامل ابعاد جديد آرايه است • INTEGER, DIMENSION(2,3) :: a • a=RESHAPE((/)i,i=0,5(/),(/2,3/)) • با دستور آخر شکل آرايه تغيير می کند RESHAPE((/ 1, 2, 3, 4, 5, 6 /), (/ 2, 3 /)) as the value ارايه ها در برنامه نويسی فرترن، عباسپور

  23. دستور Data • موقعی استفاده می شود که روشهای ديگر خسته کننده باشند • فرم کلی DATA variable / list / ... مثال: INTEGER :: a(4), b(2,2), c(10) DATA a/4,3,2,1/ مقدار هر يک از الما نها را مشخص می کند DATA a/4*0/ 4 بار مقدار صفر تکرار شده و هر بار به يک المان نسبت داده می شود (با ضرب اشتباه نشود) DATA b(1,:)/0,0/ ; DATA b(2,:)/1,1/ دو المان رديف اول صفر و دو رديف دوم 1 می شود DATA (c(i),i=1,10,2)/5*1/ ); DATA (c(i),i=2,10,2)/5*2/ ( استفاده از Implied DO به صورتيکه المان های فرد مقدار 1 و المانهای زوج مقدار 2 می گيرند (با ضرب اشتباه نشود) ارايه ها در برنامه نويسی فرترن، عباسپور

  24. دستور WHERE • موقعی که بخواهيم يک المان يا تعدادی از المانها تحت برآورده شدن شرايطی مقدار خاصی بگيرند • فرم کلی WHERE (condition) statement • INTEGER :: a(2,3,4) • WHERE(a< 0) a=0 • WHERE(a*3>10) a=999 • بايد Condition به صورت TRUE باشد ارايه ها در برنامه نويسی فرترن، عباسپور

  25. دستور WHERE(ادامه.... ) WHERE (condition) block1 [ELSEWHERE block2] ENDWHERE مثال INTEGER :: b(8,8) WHERE (b<=0) b=0 ELSEWHERE b=1/b ENDWHERE ارايه ها در برنامه نويسی فرترن، عباسپور

  26. توابع آماده مربوط به آرايه هاArray Intrinsic Functions • ALL (condition, [DIM]) • مشخص می کند که آيا تمام المان ها در امتداد يک بعد شرط ارائه شده در Condition را دارند يا خير؟ DIM شماره هر بعد است (DIM ستون 2 است) • خروجی اين تابع يک اسکالر (مقدار واحد) منطقی است اگر DIM حذف شود. در اين حالت اگر اولين المان شرط ارائه شده در Condition را داشته باشد، خروجی تابع .TRUE. است • اگر DIM در آرگومان باشد خروجی آرايه منطقی است LOGICAL :: test, test2(3), test3(2) REAL, DIMENSION(3,2) :: a a = (/5,9,6,10,8,12/) ... test=All(a>5) !false چون اولين المان ارايه بزرگتر از پنج نيست test2=All(a>5, DIM=1) !false, true, true بر اساس اولين المان هر رديف test3=All(a>5, DIM=2) !false, true بر اساس اولين المان هر ستون ارايه ها در برنامه نويسی فرترن، عباسپور

  27. توابع آماده مربوط به آرايه هاArray Intrinsic Functions • SIZE (array, [DIM]) تعداد کل المان های ارايه (اندازه) را می دهد اگر DIM آورده شود اندازه همان بعد را می دهد (تعداد سطر يا ستون) REAL, DIMENSION(3,2) :: a num=Size(a) !num=6 num=Size(a,DIM=1) !num=3 num=Size(a,DIM=2) !num=2 ارايه ها در برنامه نويسی فرترن، عباسپور

  28. توابع آماده مربوط به آرايه هاArray Intrinsic Functions • SPREAD (array, DIM, ncopies) بعد DIM از ارايه داخل ارگومان را به تعداد ncopies تکرار می کند. خروجی ارايه است REAL, DIMENSION(3) :: a=(/2,3,4/) REAL, DIMENSION(3,3) :: b REAL, DIMENSION(3,2) :: c b=SPREAD(a, DIM=1, NCOPIES=3) c=SPREAD(a, DIM=2, NCOPIES=2) ارايه ها در برنامه نويسی فرترن، عباسپور

  29. توابع آماده مربوط به آرايه هاArray Intrinsic Functions • MAXLOC(array, [DIM],mask]) موقعيت بزرگترين المان از ارايه (يابعدی DIM از آرايه )داخل ارگومان را به عنوان خروجی INTEGER ارائه می کند اگر mask باشد شرط مورد نظر را نيز در نظر می گيرد REAL :: a(5); a=(/2,8,5,3,4/) num = MAXLOC( a ) !num=2 num = MAXLOC( a, MASK=a<5 ) !num=5 num = MAXLOC( a(2:4) ) !num=1 ارايه ها در برنامه نويسی فرترن، عباسپور

  30. توابع آماده مربوط به آرايه هاArray Intrinsic Functions • LBOUND (Array) • UBOUND (Array) قيود پايين و بالای يک آرايه و يا زير نويسی از آرايه را به صورت يک INTEGER و يا آرايه ای INTEGER ارائه می کنند LOGICAL:: c(0:2,0:2,0:2,0:3) INTEGER:: numarray(4) REAL:: a(21:30), b(10) NUM= LBOUND (a) !num=21 NUM= UBOUND (a) !num=30 NUM= LBOUND (b) !num=1 NUM= UBOUND (b) !num=10 Numarray=LBOUND (c) !numarray=(/0,0,0,0/) Numarray=UBOUND (c) !numarray=(/2,2,2,3/) ارايه ها در برنامه نويسی فرترن، عباسپور

  31. آرايه ها در زبان C • فرم کلی اعلان ارايه <type> <variableName> [size]; • مثال Int A[10]; • اندیس نشان دهنده دسترسی به المان خاص • مثلاً =8;A[3] • اولین اندیس از صفر شروع میشود A[0] (در فرترن پیش فرض 1 است) • هر نوع عملیاتی که بر روی متغیر های معمولی قابل انجام باشد بر روی المان های ارایه قابل انجام است ارايه ها در برنامه نويسی فرترن، عباسپور

  32. پردازش ارایه ها از طریق حلقه های تکرار • مثل چاپ، خواندن، مقدار دهی و محاسبات مختلف • مثال: int i; for (i=0; i<10; i++) scanf(“%d”, &a[i]); ارايه ها در برنامه نويسی فرترن، عباسپور

  33. نکات مهم در ارتباط با آرایه ها در C • اندازه ارایه ها در برنامه ثابت بوده و باید توسط یک مقدار ثابت صحیح بیان شود int n; n= 100; int A[n]; // compiler error • اندیس ارایه از0 شروع می شود که گاهی سبب اشتباه می شود A[0] یعنی عنصر اول ارایه و A[3] یعنی چهارمین آرایه • در C مرز آرایه ها بررسی نمی شود یعنی اگر شماره اندیسی خارج از محدوده تعیین شده باشد خطای کامپایلری بروز نمی کند ولی مسلماً برنامه را دچار خطای منطقی می کند Int A[10]; A[12]= 20; // not a syntax but a logical error ارايه ها در برنامه نويسی فرترن، عباسپور

  34. مقدار دهی اولیه ارایه های یک بعدی • مثال int A[3]={5,2,8}; • می توان فقط به تعدادی از المان ها مقدار اولیه داد بقیه المان ها بطور خود کار مقدار صفر می گیرند Int B[10]={5,8} ; از المان B[2] به بعد صفر خواهد بود • در صورت مقدار دهي اوليه ارايه ميتوان تعداد عناصر آن راذكر نكرد Int C[ ] = {10,15,20} // يعني ارايه با سه عضو ارايه ها در برنامه نويسی فرترن، عباسپور

  35. استفاده از متغير هاي ثابت جهت تعيين اندازه آرايه • بجاي عدد صحيح (ثابت صحيح) مي توان از متغير ثابت استفاده كرد • اول اعلان و مقدار دهي متغير بعد استفاده براي تعيين اندازه ارايه • باعث خوانايي برنامه مي شود • تنها با تغيير مقدار متغير در برنامه اندازه ارايه تغيير مي كند ارايه ها در برنامه نويسی فرترن، عباسپور

  36. مثال: دانشكده داراي ده رشته با ده كد عددي (1 تا 10) است برنامه اي بنويسيد كه كد رشته را دريافت و سپس تعداد دانشجويان را چاپ كند # include <stdio.h> const int majorno=10; تعیین اندازه متغیر ثابت void main() { int count [majorno] // ارايه حاوي شمارنده هر رشته int code, // كد رشته دانشجو i,n; printf(“enter number of students:”); scanf(“%d”&n); //در يافت تعداد دانشجويان // حلقه دريافت كد دانشجويان for (i=0; i<n; i++){ printf(“enter major code:”); scanf(“%d”, &code); if (code>=1 && code<=majorno) count [code-1]++; } // حلقه چاپ تعداد دانشجويان هر رشته for (i=0; i<majorno; i++) printf(“major code= %d count= %d \n “, i+1, count[i]; } ارايه ها در برنامه نويسی فرترن، عباسپور

  37. برنامه اي بنويسيد كه واريانس تعدادي عدد اعشاري را محاسبه كند • # include <stdio.h> • const int size=100; • void main() { • float data [size] ; // ارايه نگهداري داده ها • float difference; • float average=0.0, variance=0.0; • int i, n; • printf(“enter n: ”); • scanf(“%d”, &n); • // حلقه دريافت داده ها و محاسبه ميانگين آنها • for (i=0; i<n; i++){ • printf( “enter number:”); • scanf(“%f”, &data [i]); • average+= data[i]; • } • average/=n; • /// حلقه محاسبه واريانس • for (i=0; i<n; i++){ • difference= data[i] – average • variance = difference * difference • } • variance/=n; • printf(“variance =%f”, variance); • } ارايه ها در برنامه نويسی فرترن، عباسپور

  38. آرايههاي چند بعدي در C • فرم كلي اعلان <type> <var-name> [<size 1>] [<size 2>]… [<size n>]; • مثال اعلان ارايه دو بعدي int A[5] [8]; ارايه اي با 5 رديف و 8 ستون • براي دسترسي به هر عنصر بايد از انديس انها استفاده كرد (از صفر) A[3][1] = 24; 0 1 2 3 4 5 6 7 0 A[1][6] 1 2 3 4 A[2][3] ارايه ها در برنامه نويسی فرترن، عباسپور

  39. ارايه هاي چند بعدي • ارايه با ابعاد بالا تر Int B [3][4][6]; // ستون، سطر عمق مثال: مقدار در عمق صفر، سطر2 و ستون3B[0][2][3] =12; • براي پرداز ش روي تمام عناصر بايد به تعداد ابعاد حلقه تكرار متداخل استفاده شود ( براي دو بعدي دو حلقه متداخل) • مثال دريافت مقاديراز كاربر int i,j; int a[5][8]; for (i=0; i<5; i++) for (j<0; j<8; j++) scanf(“%d”, &a[i][j]); ارايه ها در برنامه نويسی فرترن، عباسپور

  40. مقدار دهي اوليه به ارايه هاي چند بعدي • استفاده از {} براي كل ارايه و براي هر رديف • مثال ارايه دو بعدي Int A[3][4]={{12,5,3,8},{-3,7,-9,2},{4,22,18,6}}; • مثال ارايه 3 بعدي Int A[2][3][4]={{{12,5,3,8},{-3,7,-9,2},{4,22,18,6}}, {{8,1,-3,4},{-2,8,11,21},{7,3,-15,-8}}}; • بصورت دو ارايه 3Χ4 در نظر گرفته شده است • مثل ارايه يك بعدي اگر هر رديف ناقص مقدار دهي شود عناصر بعد صفر مي شود ارايه ها در برنامه نويسی فرترن، عباسپور

  41. مثال • مدير يك شركت توليد قطعات يدكي تراكتور مي خواهد از مشتريان خود در مورد كيفيت محصولات توليدي خود نظر سنجي نمايد. تعداد محصولات 20 عدد با كد از يك تا 20 و كد اعمال نظر بصورت زير مي باشد 1- عالي؛ 2- متوسط ؛ 3- ضعيف ؛ 4- نخريده ام. بر نامه اي بنويسيد كه براي محصولات 20 گانه براي هر يك از محصولات به تفكيك اراء مشتريان چاپ شود ارايه ها در برنامه نويسی فرترن، عباسپور

  42. عالي بد خريد نشده متوسط محصول اول محصول دوم محصول بيستم #include <stdio.h> const int productNo=20; void main(){ int votes[productNo][4]={{0}}; int voteCode; int i,j,n; printf(“enter number of customers:”); scanf(“%d”,&n); for (i=0; i<n; i++){ // حلقه دريافت اراء مشتريان printf(“ customer no %d:” i+1); // حلقه دريافت نظر مشتري براي هر محصول for (j=0; j<productNo; j++) { printf(“ enter vote for product no %d:” j+1); scanf(“%d”,&voteCode); if(voteCode>=1 && voteCode<=4) votes [j][voteCode-1]++; } } // حلقه چاپ اراي مشتريان for (i=0; i<productNo; i++) { printf (product no %d:”, i+1); printf( “ecllent=%d intermediate= %d bad= %d no purchase=%d\n”, votes{i][0], votes{i][1], votes{i][2], votes{i][3]); } } ارايه ها در برنامه نويسی فرترن، عباسپور

  43. ارایه های نویسه ای در C • برای این کار از یک آرایه دو بعدی استفاده می کنیم • مثال: char nameList [5][10]={“ali”, “reza”,”ahmad”,”babak”,”hamid”}; • یعنی ارایه ای 5 عضوی هر کدام با 10 کاراکتر • شماره عضو ها از صفر شروع می شود • nameList[0]مقدار ali را بخود گرفته است • دسترسی به اعضا از طریق دو اندیس • nameList[0][0] برابر ‘a’ است • برای کل رشته هم باید از اندیس اول استفاده نمود. • nameList[4] مقدار “hamid” را در خود جای داده است • می توان از روش فوق برای ارگومان توابع هم استفاده نمود Gets (nameList[2]) دستور فوق مقدار سومین رشته را از کاربر دریافت می کند ارايه ها در برنامه نويسی فرترن، عباسپور

  44. مثال: برنامه ای بنویسید که شماره دانشجویی، نام و معدل تعدادی دانشجو را دریافت و با دریافت شماره دانشجویی هر فرد اطلاعات او را جستجو و در صورت پیدا شدن چاپ نماید برنامه با شماره دانشجویی صفر خاتمه می یابد # include<stdio.h> Const int maxStudent=100; // حداکثر تعداد دانشجو Const int maxNameLen=20; // حداکثر طول نام هر دانشجو Void main () { Long int idList[maxStudent]; //ارایه حاوی شماره دانشجویی Float averageList[maxStudent]; // ارایه حاوی معدل دانشجویان Char nameList[maxStudent][maxNameLen]; // ارایه حاوی نام دانشجویان Long int searchId; Int i,n; Printf(“please enter number of students:’); Scanf(“%d”,&n); // در یافت اطلاعات دانشجویان For (i=0; I<n; i++) { printf(“student #%d:\n”,i+1); printf(“enter id:”); scanf(“%ld”, &idlist[i]); printf(“enter name:”); scanf(“%s”, nameList[i]; /// gets (nameList[i]) مشابه هم printf(“enter average:”); scanf(“%f”, &averageList[i]); } ارايه ها در برنامه نويسی فرترن، عباسپور

  45. // حلقه جستجوی دانشجو While (1) { // حلقه ای بدون انتها Prinf(“enter student id (0 to exit):”); Scanf(“%ld”, &searchId); If (!searchId)break; For (i=0; i<n; i++) if (idList[i]==searchId) break; If(i<n) { printf(“student specification:\n); printf( “id=%ld name= %s average =%f\n”, idList[i], nameList[i], averageList[i]); } else printf (“student not found”); } } ارايه ها در برنامه نويسی فرترن، عباسپور

More Related