مبانی کامپیوتر و برنامه سازی فصل چهارم : آرایه ها مدرس : نگین معروفی 4 متغیرهای اندیسدار یا آرایه ها    در مثالهایی که در.

Download Report

Transcript مبانی کامپیوتر و برنامه سازی فصل چهارم : آرایه ها مدرس : نگین معروفی 4 متغیرهای اندیسدار یا آرایه ها    در مثالهایی که در.

Slide 1

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 2

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 3

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 4

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 5

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 6

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 7

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 8

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 9

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 10

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 11

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 12

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 13

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 14

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 15

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 16

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 17

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 18

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 19

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 20

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 21

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 22

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 23

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬


Slide 24

‫مبانی کامپیوتر و برنامه سازی‬
‫فصل چهارم ‪ :‬آرایه ها‬
‫مدرس ‪ :‬نگین معروفی‬

‫‪ 4‬متغیرهای اندیسدار یا آرایه ها‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫در مثالهایی که در فصل قبل بیان گردید‪ ،‬از متغیرهای معمولی استفاده گردید‪.‬‬
‫اما گاهی نیاز به تعداد زیادی متغیر برای نگاهداری داده ها داریم‪ .‬درچنین‬
‫مواردی نه تنها برای نامگذاری این متغیرها دچار مشکل می شویم‪ ،‬بلکه‬
‫دسترسی به تک تک آنها نیز مشکل است‪.‬‬
‫مثال ) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو‬
‫را بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس‬
‫بیشتر است را چاپ کند‪.‬‬
‫برای حل این مثال ابتدا باید مشخصات و معدل کلیه دانشجویان دریافت شود تا‬
‫بتوانیم میانگین معدل های آنان را محاسبه کنیم‪ .‬سپس باید معدل تک تک‬
‫دانشجویان با میانگین کالس مقایسه گردد‪ .‬مسلما نمی توانیم مجددا از کاربر‬
‫بخواهیم که همان اطالعات قبلی را مجددا وارد کند‪ ،‬بلکه باید از قبل آنها را در‬
‫درون متغیرهایی ذخیره کرده باشیم تا اکنون بتوانیم مقایسه را انجام دهیم‪.‬‬
‫برای اینکار نیاز به تعدادی متغیر (به تعداد دانشجویان مثال ‪ 100‬عدد) داریم که‬
‫ما را دچار ‪ 2‬مشکل اساسی می کند ‪:‬‬
‫‪‬‬
‫‪‬‬

‫این متغیرها را چگونه نامگذاری کنیم ؟‬
‫بر فرض نامگذاری متغیرها برطبق یک روش خاص‪ ،‬چگونه تک تک آنها را با میانگین‬
‫کل مقایسه کنیم؟ آیا باید برای مقایسه هر کدام یک دستور مجزا بنویسیم ؟‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬
‫‪‬‬

‫‪‬‬

‫‪‬‬

‫تعریف آرایه ‪ :‬مجموعه ای از داده های همنوع است که تحت یک نام‬
‫مشترک ذخیره می گردند‪.‬‬
‫برای دسترسی به هریک از اعضا یا عناصر آرایه از نام آرایه بعالوه یک‬
‫اندیس استفاده می شود‪ .‬بنابراین هر عنصر آرایه درحقیقت یک متغیر‬
‫مستقل از همان نوع مورد نظر است‪.‬‬
‫یک آرایه پیش از آنکه استفاده گردد باید اعالن شود‪ .‬اعالن آرایه شامل نام‬
‫آرایه و اندازه آن است‪ .‬عناصر آرایه برای سهولت در دسترسی (معموال) در‬
‫خانه های پشت سرهم حافظه ذخیره می گردند‪.‬‬
‫مثال) آرایه ‪ A‬را با ‪ 100‬عضو درنظر بگیر‬

‫‪.....‬‬

‫‪.....‬‬
‫)‪A(100‬‬

‫)‪A(i‬‬

‫)‪A(1) A(2) A(3) A(4‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬

‫مثال) الگوریتمی بنویسید که شماره دانشجویی‪ ،‬نام و معدل تعدادی دانشجو را‬
‫بخواند و مشخصات دانشجویانی را که معدل آنها از میانگین معدل کالس بیشتر‬
‫است را چاپ کند‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ idList‬و ‪ nameList‬و ‪ aveList‬را با ‪ n‬عنصر درنظر بگیر‪.‬‬
‫‪ i ← 1‬و ‪sum ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 8‬را تکرار کن‬
‫چاپ کن "مشخصات دانشجوی " ‪" ، i ،‬را وارد کنید"‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را بخوان‬
‫)‪sum ← sum + aveList(i‬‬
‫‪i←i+1‬‬
‫‪totalAve ← sum / n‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 12‬تا ‪ 13‬را تکرار کن‬
‫اگر (‪ ) aveList)i( ≥ totalAve‬آنگاه‬
‫)‪ idList(i‬و )‪ nameList(i‬و )‪ aveList(i‬را چا پ کن‬
‫‪i ← i +1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬

‫الگوریتمی بنویسید که تعدادی عدد را دریافت و سپس ابتدا اعداد مثبت و سپس اعداد منفی را بطور جداگانه چاپ‬
‫کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه های ‪ positive‬و ‪ negative‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ i ← 1‬و ‪ posCount ← 0‬و ‪negCount ← 0‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫‪ adad‬را بخوان‬
‫اگر ) ‪ ) adad ≥ 0‬آنگاه‬
‫‪ posCount ← posCount + 1‬و ‪positive(posCount) ← adad‬‬
‫در غیراینصورت ‪ negCount ← negCount + 1‬و ‪negative(negCount) ← adad‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد مثبت"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ posCount‬دستورات ‪ 11‬تا ‪ 12‬را تکرار کن‬
‫چاپ کن )‪positive(i‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست اعداد منفی"‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ negCount‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫چاپ کن )‪negative(i‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که دو مجموعه از اعداد را خوانده و در دو آرایه قرار دهد‪ .‬سپس اشتراک آن دو را محاسبه و در‬
‫یک آرایه دیگر قرار دهد‪ .‬در پایان اشتراک حاصل را چاپ کند‪.‬‬
‫‪ n (1‬و ‪ m‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫‪ (3‬آرایه ‪ C‬را با )‪ min(n,m‬عنصر درنظر بگیر‬
‫‪ (4‬آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪ aCount ← 1 (5‬و ‪cCount ← 0‬‬
‫‪ (6‬تا زمانیکه (‪ ) aCount ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪ bCount ← 1 (7‬و ‪sw ← 1‬‬
‫‪ (8‬تازمانیکه )‪ ) bCount ≤ m and sw = 1‬دستورات ‪ 9‬تا ‪ 10‬را تکرار کن‬
‫‪ (9‬اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪ C(cCount) ← A(aCount‬و ‪sw ← 0‬‬
‫‪bCount ← bCount + 1 (10‬‬
‫‪aCount ← aCount + 1 (11‬‬
‫‪ (12‬چاپ کن "اشتراک دو مجموعه برابر است با ‪":‬‬
‫‪i ← 1 (13‬‬
‫‪ (14‬تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫‪ C(i) (15‬را چاپ کن‬
‫‪i ← i + 1 (16‬‬
‫‪ (17‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم اشتراک‬

‫‪C‬‬
‫‪23‬‬
‫‪10‬‬
‫‪35‬‬
‫‪17‬‬

‫‪A‬‬

‫‪B‬‬
‫‪cCount‬‬

‫‪19‬‬
‫‪35‬‬
‫‪23‬‬
‫‪33‬‬
‫‪17‬‬
‫‪21‬‬
‫‪10‬‬

‫‪bCount‬‬

‫‪23‬‬
‫‪45‬‬
‫‪10‬‬
‫‪35‬‬
‫‪8‬‬
‫‪17‬‬
‫‪26‬‬
‫‪12‬‬

‫‪aCount‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬

‫الگوریتمی مثال قبل را برای اجتماع دو مجموعه تکرار کنید‪.‬‬
‫‪ n‬و ‪ m‬را بخوان‬
‫آرایه ‪ A‬را با ‪ n‬عنصر و آرایه ‪ B‬را با ‪ m‬عنصر در نظر بگیر‪.‬‬
‫آرایه ‪ C‬را با ‪ n+m‬عنصر درنظر بگیر‬
‫آرایه های ‪ A‬با ‪ n‬عنصر و ‪ B‬با ‪ m‬عنصر را بخوان (البته نیاز به حلقه دارد)‬
‫‪i←1‬‬
‫تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫)‪C(i) ← A(i‬‬
‫‪i←i+1‬‬
‫‪ bCount ← 1‬و ‪cCount ← n‬‬
‫تا زمانیکه (‪ ) bCount ≤ m‬دستورات ‪ 11‬تا ‪ 16‬را تکرار کن‬
‫‪ aCount ← 1‬و ‪sw ← 1‬‬
‫تازمانیکه )‪ ) aCount ≤ n and sw = 1‬دستورات ‪ 13‬تا ‪ 14‬را تکرار کن‬
‫اگر ) )‪ ( A(aCount) = B(bCount‬آنگاه ‪sw ← 0‬‬
‫‪aCount ← aCount + 1‬‬
‫اگر )‪ (sw = 1‬آنگاه‬
‫‪ cCount ← cCount + 1‬و )‪C(cCount) ← B(bCount‬‬
‫‪bCount ← bCount + 1‬‬
‫چاپ کن "اجتماع دو مجموعه برابر است با ‪":‬‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ cCount‬دستورات ‪ 15‬تا ‪ 16‬را تکرار کن‬
‫)‪ C(i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست را گرفته و پس از حذف اعداد تکراری آن‪ ،‬حاصل را‬
‫در یک لیست دیگر قرار دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬و ‪ B‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان‬
‫‪B(1) ← A(1) (4‬‬
‫‪ i ← 2 (5‬و ‪k ← 1‬‬
‫‪ (6‬تا زمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 11‬را تکرار کن‬
‫‪j ← 1 (7‬‬
‫‪ (8‬تازمانیکه ( (‪ ) j ≤ k and A)i( ≠ B)j‬دستور ‪ 9‬را تکرار کن‬
‫‪j ← j + 1 (9‬‬
‫‪(10‬اگر )‪ ( j > k‬آنگاه‬
‫‪ k ← k + 1‬و )‪B(k) ← A(i‬‬
‫‪i ← i + 1(11‬‬
‫‪(12‬لیست ‪ B‬را با ‪ k‬عضو چاپ کن (نیاز به حلقه دارد)‬
‫‪ (13‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتم مثال قبل را بگونه ای تغییر دهید که عملیات حذف داده های تکراری را درخود آرایه‬
‫اصلی (بدون کمک آرایه دیگر) انجام دهد‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬لیست ‪ A‬را با ‪ n‬عنصر در نظر بگیر‬
‫‪ (3‬لیست ‪ A‬را با ‪ n‬عنصر بخوان (نیاز به حلقه دارد)‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪j ← i + 1 (6‬‬
‫‪ (7‬تازمانیکه ( ‪ ) j ≤ n‬دستور ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫)‪ A(j) ← A(n‬و ‪n ← n - 1‬‬
‫‪i ← i + 1 (9‬‬
‫‪(10‬لیست ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد و یک عدد را از‬
‫کاربر دریافت و سپس بدنبال داده در لیست جستجو کند و آن را حذف نماید‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← 1 (5‬‬
‫‪ (6‬تازمانیکه ( (‪ ) i ≤ n and x≠A)i‬دستور ‪ 7‬را تکرار کن‬
‫‪i ← i + 1 (7‬‬
‫‪ (8‬اگر ) ‪ ( i > n‬چاپ کن "عدد پیدا نشد" و توقف کن‬
‫‪ (9‬تازمانیکه ) ‪ ( i < n‬دستورات ‪ 10‬تا ‪ 11‬را تکرار کن‬
‫‪A(i) ← A(i + 1) (10‬‬
‫‪i ← i + 1(11‬‬
‫‪n ← n -1(12‬‬
‫‪(13‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪(14‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم حذف از لیست مرتب‬

‫‪A‬‬
‫‪n=9‬‬
‫‪10‬‬
‫‪x = 38‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک لیست مرتب بصورت صعودی از اعداد را از کاربر‬
‫دریافت و سپس با دریافت یک عدد جدید از کاربر آن را درمکان مناسب لیست‬
‫درج کند بطوریکه ترتیب حفظ شود‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه ‪ A‬را با ‪ n + 1‬عنصر درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عنصر بخوان (بصورت مرتب شده)‬
‫‪ x (4‬را بخوان‬
‫‪i ← n (5‬‬
‫‪ (6‬تازمانیکه ) )‪ ) i ≥ 1 and x < A(i‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪A(i + 1) ← A(i) (7‬‬
‫‪i ← i – 1 (8‬‬
‫‪A(i + 1) ← x (9‬‬
‫‪n ← n + 1(10‬‬
‫‪ (11‬آرایه ‪ A‬را با ‪ n‬عضو چاپ کن‬
‫‪ (12‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪‬‬

‫آزمایش الگوریتم درج در لیست مرتب‬

‫‪A‬‬
‫‪n = 10‬‬
‫‪11‬‬
‫‪x = 39‬‬

‫‪12‬‬
‫‪18‬‬
‫‪21‬‬
‫‪35‬‬
‫‪38‬‬
‫‪39‬‬
‫‪42‬‬
‫‪44‬‬
‫‪48‬‬
‫‪52‬‬
‫‪58‬‬

‫‪i‬‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که یک عدد را دریافت و عددی که بیشترین تکرار را دارد چاپ کند‪.‬‬
‫‪ n (1‬را بخوان‬
‫‪ (2‬آرایه های ‪ A‬و ‪ sw‬را با ‪ n‬عضو درنظر بگیر‬
‫‪ (3‬آرایه ‪ A‬را با ‪ n‬عضو بخوان‬
‫‪ (4‬تمام عناصر آرایه ‪ sw‬را برابر ‪ 0‬قرار بده‬
‫‪ mod ← 0 (5‬و ‪modNo ← 0‬‬
‫‪i ← 1 (6‬‬
‫‪ (7‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 7‬تا ‪ 8‬را تکرار کن‬
‫‪ (8‬اگر ) ‪ ( sw(i) = 0‬آنگاه‬
‫‪sw(i) ← 1 .a‬‬
‫‪ j ← i + 1 .b‬و ‪sum ← 0‬‬
‫‪ .c‬تازمانیکه ( ‪ ) j ≤ n‬دستورات ‪ d‬تا ‪ e‬را تکرار کن‬
‫‪ .d‬اگر ) )‪ ( A(i) = A(j‬آنگاه‬
‫‪ sum ← sum + 1‬و ‪sw(j) ← 1‬‬
‫‪j ← j + 1 .e‬‬
‫‪ .f‬اگر )‪ ( sum > modNo‬آنگاه‬
‫)‪ mod ← A(i‬و ‪modNo ← sum‬‬
‫‪i ← i + 1 (9‬‬
‫‪ mod (10‬و ‪ modNo‬را چاپ کن‬
‫‪ (11‬توقف کن‬

‫‪ 4-1‬آرایه های یک بعدی‬
‫‪ ‬الگوریتمی بنویسید که برای تعداد دانشجو‪ ،‬کد رشته (از ‪ 1‬تا ‪ )15‬را خوانده‬
‫و سپس تعداد دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ (1‬آرایه ‪ count‬را با ‪ 15‬عضو درنظر بگیر‬
‫‪ (2‬تمام عناصر آرایه ‪count‬را برابر ‪ 0‬قرار بده‬
‫‪ n (3‬را بخوان‬
‫‪i ← 1 (4‬‬
‫‪ (5‬تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪ code (6‬را بخوان‬
‫‪count(code) ← count(code) + 1 (7‬‬
‫‪i ← i + 1 (8‬‬
‫‪ (9‬آرایه ‪ count‬را با ‪ 15‬عضو چاپ کن‬
‫‪ (10‬توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫مسائلی که تاکنون حل شدند نیاز به آرایه های یک بعدی داشتند‪ .‬هر‬
‫عنصر از این آرایه ها تنها با یک اندیس مشخص می گردد‪.‬‬
‫اما گاهی در مسائل پیچیده تر نیاز به آرایه هایی است که هر عضو آنها نیاز‬
‫به بیش از یک اندیس دارد‪ ،‬که به آنها آرایه های چند بعدی گفته می شود‪.‬‬
‫چنانچه هر عنصر آرایه به ‪ 2‬اندیس نیاز داشته باشد‪ ،‬به آن آرایه دو بعدی‬
‫می گوییم‪.‬‬
‫برای تعریف یک آرایه دوبعدی باید تعداد سطرها و ستونهای آن را مشخص‬
‫کنیم‪ .‬معموال یک آرایه دو بعدی بصورت ‪ m × n‬اعالن می گردد که ‪ m‬تعداد‬
‫سطرها و ‪ n‬تعداد ستونها است‪.‬‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫بعنوان مثال چنانچه آرایه ‪ A‬را بعنوان یک آرایه دوبعدی به ابعاد ‪ 5 × 8‬تعریف‬
‫کنیم‪ ،‬آنگاه داریم ‪:‬‬

‫ستون‬
‫‪8‬‬

‫‪7‬‬

‫‪6‬‬

‫‪5‬‬

‫‪4‬‬

‫‪3‬‬

‫‪2‬‬

‫‪1‬‬
‫‪1‬‬

‫)‪A(2,7‬‬

‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫)‪A(3,4‬‬

‫سطر‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫الگوریتمی بنویسید که برای تعدادی دانشجو‪ ،‬شماره دانشجویی و کد رشته (از ‪ 1‬تا ‪ )15‬را‬
‫خوانده و سپس دانشجویان هررشته را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫آرایه دوبعدی ‪ student‬را به ابعاد ‪ 15 × n‬در نظر بگیر‬
‫آرایه ‪ count‬را با ‪ 15‬عنصر در نظر بگیر و تمام عناصر آن را برابر ‪ 0‬قرار بده‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات ‪ 6‬تا ‪ 9‬را تکرار کن‬
‫‪ id‬و ‪ code‬را بخوان‬
‫‪count(code) ← count(code) + 1‬‬
‫‪student( code , count(code) ) ← id‬‬
‫‪i←i+1‬‬
‫چاپ کن "لیست دانشجویان"‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 15‬دستورات ‪ 13‬تا ‪ 18‬را تکرار کن‬
‫چاپ کن "رشته "‪i ،‬‬
‫‪j←1‬‬
‫تازمانیکه ( (‪ ) j ≤ count)i‬دستورات ‪ 16‬تا ‪ 17‬را تکرار کن‬
‫) ‪ student( i , j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬

‫‪‬‬
‫‪‬‬

‫‪ 50‬موضوع مختلف را به رای گذاشته ایم و هرکس می تواند آرای خود را‬
‫بشرح زیر اعالم کند‪:‬‬
‫‪ -3‬ممتنع ‪ -4‬بی اطالع‬
‫‪ -2‬مخالف‬
‫‪ -1‬موافق‬
‫الگوریتمی بنویسید که تعداد افراد رای دهنده را دریافت و سپس پس از‬
‫دریافت آرای هریک از آنان برای هر ‪ 50‬موضوع‪ ،‬تعداد آرای مختلف هر موضوع‬
‫را به تفکیک چاپ کند‪.‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه ( ‪ ) i ≤ n‬دستورات را ‪ 5‬تا ‪ 11‬تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه ) ‪ ) j ≤ 50‬دستورات ‪ 7‬تا ‪ 10‬را تکرار کن‬
‫چاپ کن "موضوع " ‪j ،‬‬
‫‪ vote‬را بخوان‬
‫‪count(j , vote) ← count(j , vote) + 1‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ count‬را به ابعاد ‪ 50 × 4‬چاپ کن (نیاز به حلقه دارد)‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که عناصر آرایه ‪ 4×5‬را خوانده‪ ،‬بزرگترین عنصر هر‬
‫سطر را پیدا کرده‪ ،‬به همراه شماره سطر در خروجی چاپ می کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬
‫‪.11‬‬
‫‪.12‬‬

‫آرایه ‪ A‬را به ابعاد ‪ 4×5‬در نظر بگیر‬
‫آرایه ‪ A‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 4‬دستورات ‪ 5‬تا ‪ 12‬را تکرار کن‬
‫)‪M ← A(i,j‬‬
‫‪j←2‬‬
‫تازمانیکه )‪ )j ≤ 5‬دستورات ‪ 8‬تا ‪ 9‬را تکرار کن‬
‫اگر )‪ M > A(i,1‬آنگاه )‪M ← A(i,j‬‬
‫‪j←j+1‬‬
‫‪ M‬و ‪ i‬را چاپ کن‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫الگوریتمی بنویسید که جدول ضرب اعداد ‪ 1‬تا ‪ 10‬را تولید کرده‪ ،‬در جدولی‬
‫قرار دهد وآنها را چاپ کند‪.‬‬
‫‪.1‬‬
‫‪.2‬‬
‫‪.3‬‬
‫‪.4‬‬
‫‪.5‬‬
‫‪.6‬‬
‫‪.7‬‬
‫‪.8‬‬
‫‪.9‬‬
‫‪.10‬‬

‫آرایه ‪ A‬را با ابعاد ‪ 10 × 10‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ ) i ≤ 10‬دستورات ‪ 3‬تا ‪ 10‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه )‪ )j ≤ 10‬دستورات ‪ 6‬تا ‪ 8‬را تکرار کن‬
‫‪M(i,j) ← i * j‬‬
‫)‪ M(i,j‬را چاپ کن‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬
‫‪(20‬‬

‫الگوریتمی بنویسید که دو ماتریس را از کاربر دریافت و حاصلضرب آن دو را محاسبه و چاپ کند‪.‬‬
‫‪ m‬و ‪ n‬را بخوان (ابعاد ماتریس اول ‪)m × n‬‬
‫‪ p‬و ‪ q‬را بخوان (ابعاد ماتریس دوم ‪)p × q‬‬
‫اگر ( ‪ ) n ≠ p‬آنگاه‬
‫چاپ کن "ماتریسها قابل ضرب نیستند" و توقف کن‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬و آرایه ‪ B‬را به ابعاد ‪ p × q‬درنظر بگیر‬
‫آرایه ‪ C‬را به ابعاد ‪ m × q‬درنظر بگیر‬
‫آرایه ‪ A‬را به ابعاد ‪ m × n‬بخوان‬
‫آرایه ‪ B‬را به ابعاد ‪ p × q‬بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ m‬دستورات ‪ 10‬تا ‪ 18‬را تکرار کن‬
‫‪j←1‬‬
‫تازمانیکه (‪ ) j ≤ q‬دستورات ‪ 12‬تا ‪ 17‬را تکرار کن‬
‫‪ sum ← 0‬و ‪k ← 1‬‬
‫تازمانیکه (‪ )k ≤ n‬دستورات ‪ 14‬تا ‪ 15‬را تکرار کن‬
‫)‪sum ← sum + A(i,k) × B(k,j‬‬
‫‪k←k+1‬‬
‫‪C(i,j) ← sum‬‬
‫‪j←j+1‬‬
‫‪i←i+1‬‬
‫آرایه ‪ C‬را به ابعاد ‪m × q‬چاپ کن‬
‫توقف کن‬

‫‪ 4-2‬آرایه های چندبعدی‬
‫‪‬‬

‫دریک آزمون دانشجویان باید به ‪ 20‬سوال ‪ 4‬گزینه ای جواب بدهند‪ .‬الگوریتمی بنویسید که ابتدا جواب درست سواالت را دریافت و‬
‫سپس برای تعدادی دانشجو برگه پاسخنامه را دریافت و نمره آنها را محاسبه و چاپ کند‪ .‬پاسخنامه ها در یک آرایه دوبعدی ‪20‬‬
‫‪ × 4‬است که در جاهایی که دانشجو عالمت زده است کاراکتر ‪ X‬قرار گرفته است و سایر مکانها خالی است‪ .‬هر پاسخ غلط ⅓ نمره‬
‫منفی دارد‪.‬‬

‫‪(1‬‬
‫‪(2‬‬
‫‪(3‬‬
‫‪(4‬‬
‫‪(5‬‬
‫‪(6‬‬
‫‪(7‬‬
‫‪(8‬‬
‫‪(9‬‬
‫‪(10‬‬
‫‪(11‬‬
‫‪(12‬‬
‫‪(13‬‬
‫‪(14‬‬
‫‪(15‬‬
‫‪(16‬‬
‫‪(17‬‬
‫‪(18‬‬
‫‪(19‬‬

‫آرایه ‪ correct‬را با ‪ 20‬عضو درنظر بگیر‬
‫آرایه ‪ answers‬را به ابعاد ‪ 20 × 4‬در نظر بگیر‬
‫‪i←1‬‬
‫تازمانیکه )‪ )i ≤ 20‬دستورات ‪ 5‬تا ‪ 7‬را تکرار کن‬
‫چاپ کن "پاسخ درست سوال"‪i ،‬‬
‫)‪ correct(i‬را بخوان‬
‫‪i←i+1‬‬
‫‪ n‬را بخوان‬
‫‪i←1‬‬
‫تازمانیکه (‪ ) i ≤ n‬دستورات ‪ 11‬تا ‪ 22‬را تکرار کن‬
‫آرایه ‪ answers‬را بخوان (از داخل فایل یا ورودی صفحه کلید)‬
‫‪grade ← 0‬‬
‫‪j←1‬‬
‫تازمانیکه )‪ ) j ≤ 20‬دستورات ‪ 15‬تا ‪ 20‬را تکرار کن‬
‫‪ k ← 1‬و ‪count ← 0‬‬
‫تازمانیکه )‪ )k ≤ 4‬دستورات ‪ 17‬تا ‪ 18‬را تکرار کن‬
‫اگر ( ’‪ ) answers)j , k( = ‘X‬آنگاه ‪count ← count + 1‬‬
‫‪k←k+1‬‬
‫اگر )‪ ( count > 1‬آنگاه ‪grade ← grade – 1/3‬‬
‫درغیراینصورت اگر )‪ (count = 1‬آنگاه‬
‫اگر (’‪) answers)j , correct)j( ( = ‘X‬‬
‫درغیراینصورت ‪grade ← grade – 1/3‬‬
‫‪j←j+1‬‬
‫چاپ کن "نمره این دانشجو برابر است با "‪grade ،‬‬
‫‪i←i+1‬‬
‫توقف کن‬

‫‪(20‬‬
‫‪(21‬‬
‫‪(22‬‬
‫‪(23‬‬

‫‪grade ← grade + 1‬‬