بهنام خالق خِرد مبانی برنامه سازی F UNDAMENTALS OF P ROGRAMMING مدرس : بینظیر بیگلری جلسه :11 لیستها نیمسال دوم 1392-1393 مبانی برنامهسازی - دانشگاه صنعتی شریف عناوین 2  آدرسدهی.

Download Report

Transcript بهنام خالق خِرد مبانی برنامه سازی F UNDAMENTALS OF P ROGRAMMING مدرس : بینظیر بیگلری جلسه :11 لیستها نیمسال دوم 1392-1393 مبانی برنامهسازی - دانشگاه صنعتی شریف عناوین 2  آدرسدهی.

‫بهنام خالق خِرد‬
‫مبانی برنامه سازی‬
‫‪F UNDAMENTALS OF P ROGRAMMING‬‬
‫مدرس‪ :‬بینظیر بیگلری‬
‫جلسه ‪ :11‬لیستها‬
‫نیمسال دوم ‪1392-1393‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی‬
‫شریف‬
‫عناوین‬
‫‪2‬‬
‫‪ ‬آدرسدهی و برش لیستها‬
‫‪ ‬تغییر لیستها‬
‫‪ ‬توابع و متدهای لیستی‬
‫‪ ‬لیستهای تودرتو‬
‫‪ ‬ماتریسها‬
‫‪ ‬چندتاییها (فصل ‪)9‬‬
‫(فصل ‪ 9‬و ‪ 11‬از کتاب اصلی)‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫لیست ها‬
‫‪3‬‬
‫‪ ‬یک لیست مجموعهای از مقادیر مرتب است به این مقادیر‪ ،‬اعضا (‪ )element‬یا آیتمها‬
‫میگویند‪ .‬لیستها مانند رشتهها هستند به جز اینکه اعضای لیست میتوانند هر نوعی‬
‫باشند؛ به لیستها و رشتهها دنباله (‪ )sequence‬میگویند‪.‬‬
‫‪ ‬راههای مختلفی برای ایجاد یک لیست جدید وجود دارد و آسانترین راه‪ ،‬ذکر هر عضو‬
‫در بین یک جفت کروشه است‪.‬‬
‫‪ ‬به لیستی که عضوی از یک لیست است تودرتو میگویند‪.‬‬
‫‪ ‬یک لیست بدون عضو‪ ،‬یک لیست خالی است ][‪.‬‬
‫‪ ‬یک لیست را میتوان به متغیر تخصیص داد یا به عنوان پارامتر به تابع فرستاد‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫دسترسی به اعضا‬
‫‪4‬‬
‫‪ ‬گرامر دستیابی به اعضای یک لیست مثل دستیابی به کاراکترهای یک رشته توسط‬
‫عملگر اندیس است که با یک عدد صحیح مشخص میشود‪.‬‬
‫‪‬‬
‫به انتخاب تکتک اعضای لیست و انجام عمل مشخصی روی آنها در یک حلقه‪loop ،‬‬
‫‪ teraversal‬میگویند‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫طول لیست‬
‫‪5‬‬
‫‪ ‬تابع ‪ len‬طول یک لیست را برمیگرداند که برابر است با تعداد اعضای لیست‪ .‬وقتی در‬
‫یک حلقه میخواهید توسط اندیس به اعضای آن دسترسی داشته باشید خوب است این‬
‫تابع را به عنوان حد باالی تکرار حلقه‪ ،‬به جای استفاده از یک عدد ثابت بهکار گیرید‬
‫که اگر اندازه لیست تغییر کرد الزم نباشد حلقه را تغییر دهید‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫عضویت در لیست‬
‫‪6‬‬
‫‪ ‬عملگرهای بولی ‪ in‬و ‪ not in‬عضویت را در دنباله کنترل میکنند‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫عملگرهای لیست‬
‫‪7‬‬
‫‪ ‬عملگر ‪ +‬دو یا چند لیست را به هم میچسباند (الحاق میکند)‬
‫‪ ‬به طور مشابه عملگر * اعضای یک لیست را به تعداد عدد مشخص شده در یک لیست‬
‫جدید تکرار میکند‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫برش های لیست‬
‫‪8‬‬
‫‪ ‬همانطور که قبلا در مورد رشتهها دیدید با استفاده از برشها میتوان با زیررشتهها‬
‫کار کرد‪:‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫تغییرپذیری لیست ها‬
‫‪9‬‬
‫‪ ‬برخلف رشتهها‪ ،‬لیستها قابل تغییراند؛ به عبارت دقیقتر میتوان اعضای آنها را به‬
‫کمک عملگر اندیس و دستور مقداردهی تغییر داد‪.‬‬
‫‪ ‬اگر عملگر کروشه در سمت چپ مقداردهی بود به معنای تغییر یکی از اعضای لیست‬
‫است‪ .‬به یک مقداردهی یک عنصر لیست ‪ item assignment‬میگویند که برای رشتهها‬
‫کار نمیکرد‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫تغییرپذیری لیست ها‬
‫( ادامه )‬
‫‪10‬‬
‫‪ ‬عملگر برش میتواند قسمتی از لیست را تغییر دهد‪:‬‬
‫‪ ‬میتوانیم اعضای لیست را با کمک یک لیست خالی حذف کنیم‪:‬‬
‫‪ ‬به کمک یک برش خالی میتوانیم اعضای جدیدی را در نقطه دلخواه لیست درج کنیم‪:‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫حذف اعضای لیست‬
‫‪11‬‬
‫‪ ‬پایتون یک روش خواناتر برای عضو یک عنصر لیست یا یک زیرلیست فراهم‬
‫کردهاست‪( .‬دستور ‪)del‬‬
‫‪ ‬امّا این دستور اگر اندیسی خارج از بازه به آن دادهشود خطای زمان اجرا تولید میکند‪.‬‬
‫‪ ‬دقت کنید که طبق معمول‪ ،‬عدد انتهای بازه را شامل نمیشود!‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫اشیاء و ارجاعات‬
‫‪12‬‬
‫‪ ‬بعد از اجرای دستور زیر میدانیم ‪ a‬و ‪ b‬به یک شیء رشته با مقدار ”‪“banana‬‬
‫برمیگردند امّا آیا هر دوی آنها به یک شیء اشاره میکنند یا خیر؟‬
‫‪ ‬دو راه برای سازماندهی این حافظه‪ ،‬برای مترجم پایتون وجود دارد‪:‬‬
‫‪ ‬میتوانیم به کمک عملگر ‪ is‬چک کنیم که آیا دو نام به یک شیء اشاره میکنند‪:‬‬
‫‪ ‬از آنجایی که رشته تغییر ناپذیر بود پایتون از منابع به طور بهینه استفاده میکند پس هر‬
‫دو نام به یک رشته اشاره دارند ولی در مورد لیستها اینگونه نیست‪:‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫نام مستعار‬
‫( ‪) ALIASING‬‬
‫‪13‬‬
‫‪ ‬چون متغیرها به اشیاء اشاره دارند‪ ،‬اگر یک متغیر را به دیگری نسبت دهیم (‪)assign‬‬
‫هر دو متغیر به یک شیء واحد برمیگردند‪:‬‬
‫‪ ‬این موضوع باعث میشود که اگر در یک متغیر تغییری ایجاد شود متغیر دوم نیز تأثیر‬
‫میپذیرد‪:‬‬
‫‪ ‬اگرچه این رفتار میتواند مفید باشد امّا گاهی به اتفاقات ناخواسته و نامناسب منجر‬
‫میشود‪ .‬بهتر است وقتی با اشیاء تغییرپذیر کار میکنید از نام مستعار پرهیز نمایید‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫‪ CLONE‬کردن لیست ها‬
‫‪14‬‬
‫‪ ‬اگر بخواهیم یک لیست را تغییر دهیم درحالیکه یک کپی از نسخه اصلی آن داشته‬
‫باشیم و نه فقط یک ارجاع به آن‪ ،‬به این فرایند ‪ cloning‬میگویند تا با ‪ copy‬اشتباه‬
‫گرفته نشود‪.‬‬
‫‪ ‬آسانترین روش آن استفاده از برش است‪:‬‬
‫‪ ‬حاال میتوان هر تغییری به ‪ b‬اعمال کرد بدون آنکه نگران تغییر ناخواسته ‪ a‬باشیم‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫لیست ها و حلقه های‬
‫‪FOR‬‬
‫‪15‬‬
‫‪ ‬گرامر تعمیمیافته حلقه ‪ for‬به صورت زیر است‪:‬‬
‫‪ ‬لیستها تغییرپذیرند؛ میخواهیم درحین پیمایش یک لیست اعضای آن را نیز تغییر‬
‫دهیم‪.‬‬
‫یک راه‬
‫خواناتر و‬
‫سادهتر‬
‫‪ enumerate‬دوتاییهای (مقدار و اندیس) در پیمایش‬
‫لیست ایجاد میکند‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫لیست در نقش پارامتر‬
‫‪16‬‬
‫‪ ‬ارسال یک لیست به عنوان آرگومان در حقیقت یک ارجاع به لیست را به تابع ارسال‬
‫میکند و نه یک کپی یا ‪ clone‬از آن را!‬
‫در این کد‪ ،‬متغیرهای ‪ things‬و ‪ a_list‬به یک‬
‫شیء اشاره دارند پس اگر تابع‪ ،‬شیء لیست را‬
‫تغییر اعمالشده را‬
‫تغییر دهد آنگاه فراخوانندة تابع‪،‬‬
‫ِ‬
‫میبیند‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫متدهای لیست‬
‫‪17‬‬
‫‪ ‬عملگر ‪ .‬که برای استفاده از متدها بهکار میرود در اینجا نیز کاربرد دارد‪.‬‬
‫‪ ‬اضافه کردن عضو جدید به انتهای لیست (‪:)append‬‬
‫‪ ‬اضافه کردن عضو جدید به یک نقطه دلخواه از لیست (‪:)insert‬‬
‫‪ ‬چند عضو با مقدار تعیین شده در لیست وجود دارد (‪:)count‬‬
‫‪ ‬اضافه کردن یک لیست به انتهای یک لیست دیگر (‪:)extend‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫متدهای لیست‬
‫( ادامه )‬
‫‪18‬‬
‫‪ ‬اولین اندیسی که مقدار تعیینشده در آن قرار دارد (‪:)index‬‬
‫‪ ‬معکوس کردن ترتیب قرارگیری اعضای لیست (‪:)reverse‬‬
‫‪ ‬مرتبکردن اعضای لیست براساس مقدار آنها (‪:)sort‬‬
‫‪ ‬حذف اولین عنصر با مقدار تعیینشده (‪:)remove‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫تغییردهنده ها و توابع خالص‬
‫‪19‬‬
‫‪ ‬توابعی که آرگومانهایی از نوع لیست دریافت میکنند و در حین اجرا‪ ،‬آنها را تغییر‬
‫میدهند تغییردهنده (‪ )modifier‬نام دارند و به تغییر ایجاد شده اثرجانبی (‪)side effect‬‬
‫میگویند‪.‬‬
‫‪ ‬یک تابع خالص (‪ )pure function‬اثرجانبی ایجاد نمیکند یعنی آنچه که به عنوان‬
‫ورودی دریافت میکند را تغییر نمیدهد بلکه مقدار خروجی تابع به کمک یک متغیر‬
‫محلی تولید شدهاست‪.‬‬
‫تمام کارهایی را که میتوان با ‪modifier‬ها انجام داد با توابع خاص نیز قابل انجام‬
‫است‪ .‬شواهدی وجود دارد که نشان میدهد برنامههایی که از توابع خالص استفاده‬
‫میکنند سریعتر تولید شده و کمتر مستعد خطا هستند ولی به لحاظ زمان اجرا و‬
‫کارایی ‪modifier‬ها بهتر هستند‪ .‬پس هر وقت مجبور بودید از ‪modifier‬ها استفاده‬
‫کنید‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫توابعی که لیست می سازند‬
‫‪20‬‬
‫‪ ‬وقتی به تابعی نیازدارید که یک لیست بسازد و آن را برگرداند معموالا از این الگو‬
‫استفاده میشود‪:‬‬
‫‪ ‬مثال‪ :‬فرض کنید تابع )‪ is_prime(x‬را دارید میخواهیم تابعی بنویسیم که لیست تمام‬
‫اعداد اول کوچکتر از ‪ n‬را برگرداند‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫رشته ها و لیست ها‬
‫‪21‬‬
‫‪ ‬دو متد مفید روی رشتهها‪ ،‬رشته را به لیست یا زیررشته تبدیل میکرد‪ :‬متد ‪ split‬رشته‬
‫را به لیستی از کلمات تقسیم میکرد؛ به طور پیشفرض هر تعداد کاراکتر سفید محدودة‬
‫کلمات را مشخص میکنند‪.‬‬
‫‪ ‬آرگومان اختیاری این متد‪ ،‬حائل (‪ )delimiter‬است که رشتهای را که تعیینکننده‬
‫محدوده زیررشتههاست مشخص میکند‪:‬‬
‫‪ ‬واضح است که حائل‪ ،‬در نتیجه تابع نمیآید‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫رشته ها و لیست ها‬
‫( ادامه )‬
‫‪22‬‬
‫‪ ‬عکس متد ‪ ،split‬متد ‪ join‬است‪ .‬شما رشته تفکیککننده (‪ )separator‬که گاهی به آن‬
‫چسب میگویند را انتخاب میکنید و بعد اعضای یک لیست را با چسب که بین هر دو‬
‫عضو متوالی میآید به هم متصل میکنید‪.‬‬
‫‪ ‬توجه داشته باشید که لیستی که شما اعضایش را به هم متصل کردهاید تغییر نکردهاست‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫لیست و‬
‫‪RANGE‬‬
‫‪23‬‬
‫‪ ‬پایتون یک تابع تغییر گونه ‪ built-in‬دارد که هر چه به آن بدهید تبدیل به لیست میکند‪:‬‬
‫‪ ‬در پایتون‪ 3‬به بعد‪ ،‬تابع ‪ range‬در اصطلح تنبل است یعنی تمام مقادیر را از ابتدا‬
‫تولید نمیکند بلکه قول میدهد که هروقت الزم شد آن را ایجاد کند‪ .‬اگر تعداد اعضای‬
‫تولید شده خیلی زیاد باشد با مشکل کمبود حافظه روبهرو خواهیم بود‪.‬‬
‫برای آنکه پایتون را مجبور کنیم که ‪ range‬تنبل نباشد و لیست را کامل ایجاد کند‪:‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫لیست های تودرتو‬
‫‪24‬‬
‫‪ ‬لیست تودرتو لیستی است که خودش عضوی از یک لیست دیگر است؛ در کد زیر‬
‫عضو موجود در اندیس ‪ ،3‬یک لیست تودرتو است‪.‬‬
‫‪ ‬برای نمایش این لیست تودرتو‪:‬‬
‫‪ ‬برای دستیابی به اعضای لیست تودرتو‪:‬‬
‫‪ ‬یا میتوان آنها را ترکیب کرد‪:‬‬
‫‪ ‬عملگر کروشه‪ ،‬از چپ به راست ارزیابی میشود پس این عبارت‪ ،‬عنصر اندیس سوم‬
‫از ‪ nested‬را انتخاب کرده و بعد عنصر اندیس یکم را برمیگرداند‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫ماتریس ها‬
‫‪25‬‬
‫‪ ‬لیستهای تودرتو گاهی نمایانگر ماتریسها هستند‪:‬‬
‫‪‬‬
‫‪ mx‬یک لیست با سه عضو است که هر عضو‪ ،‬یک سطر از ماتریس خواهد بود و‬
‫میتوانیم یک سطر از ماتریس را به صورت زیر انتخاب کنیم‪:‬‬
‫‪ ‬برای دستیابی به یک درایه از ماتریس دو اندیس بهکار میبریم‪:‬‬
‫‪ ‬پس اندیس اول سطر را انتخاب میکند و اندیس دوم ستون را؛ با این حال این تنها راه‬
‫نمایش ماتریس نیست مثلا دیکشنریها‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫چندتایی ها ( رکوردها )‬
‫‪26‬‬
‫‪ ‬چندتاییها (‪ )tuples‬برای دستهبندی دادهها به کار میروند‪ .‬این کار برای سادهسازی‬
‫استفاده از دادههاست (نوعی ساختمان داده = ‪)data structure‬‬
‫‪ ‬عمومیسازی آن به این معنا است که هر تعداد قلم دادهای را در یک چندتایی بتوان‬
‫قرار داد‪( .‬پرانتز اجباری نیست اما کاما اجباری است)‬
‫‪ ‬به کمک عملگر اندیس به هر قلم دادهای از یک چندتایی میتوان دسترسی داشت‪:‬‬
‫‪ ‬اما چندتاییها تغییرناپذیراند پس‪:‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫مقداردهی چندتایی ها‬
‫‪27‬‬
‫‪ ‬مقداردهی در این گونه دادهای بسیار قدرتمند است چون یک چندتایی از متغیرها در‬
‫سمت چپ عملگر انتساب را با مقادیر موجود در یک چندتایی در سمت راست عملگر‪،‬‬
‫مقداردهی میکند‪:‬‬
‫‪ ‬هفت مقداردهی در یک خط انجام شدهاست‪.‬‬
‫‪‬‬
‫عملگر= مثل باز و بسته کردن چندتایی رفتار میکند (‪)packing/ unpacking‬‬
‫‪ ‬مهم است که تعداد مقادیر با تعداد متغیرهای سمت چپ انتساب برابر باشد‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫چندتایی ها در نقش خروجی تاب ع‬
‫‪28‬‬
‫‪ ‬تا به حال دیدید که توابع یک مقدار را به عنوان خروجی برمیگردانند اما اگر خروجی‬
‫تابع چند مقدار باشد میتوانیم آنها را در قالب یک چندتایی برگردانیم‪.‬‬
‫‪ ‬محیط و مساحت دایره را با هم در یک تابع برمیگردانیم‪:‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫قابلیت ترکیب ساختارداده ها‬
‫‪29‬‬
‫‪ ‬همانطور که قبلا هم دیدیم میتوانیم لیستی از چندتاییها داشته باشیم که یکی از اجزای‬
‫چندتایی هم یک لیست باشد‪:‬‬
‫‪ ‬یا هر جزء یک چندتایی میتواند خودش چندتایی باشد‪:‬‬
‫به این خاصیت ناهمگن‬
‫بودن(‪)heterogenous‬‬
‫میگویند یعنی اجزاء‬
‫میتوانند انواع مختلف‬
‫داشته باشند‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫عملگرهای چندتایی ها‬
‫‪30‬‬
‫‪ ‬اصوالا روی دنبالهها سه عملگر اصلی وجود دارد ‪ + :‬و * و ][‬
‫‪ + ‬عملگر الحاق است که دو یا چند چندتایی را به هم میچسباند‪.‬‬
‫‪ * ‬عملگر تکرار است که چندتایی را به تعداد ضربشده در آن در یک چندتایی جدید‬
‫تکرار میکند‪.‬‬
‫‪ [] ‬عملگر اندیس یا برش است‪.‬‬
‫‪ ‬همچنین عملگرهای مقایسهای روی چندتاییها همان معنی را که برای رشتهها داشت را‬
‫دارد‪.‬‬
‫‪ None ‬میتواند یکی از اعضای دنباله باشد ولی دو کامای پشتسرهم برابر با دنباله‬
‫نیست‪.‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬
‫تمرین‬
‫‪31‬‬
‫‪ ‬صفحه ‪ 161‬تمرین ‪5‬‬
‫‪ ‬صفحه ‪ 161‬تمرین ‪10‬‬
‫نیمسال دوم ‪1392-1393‬‬
‫جلسه ‪11‬‬
‫مبانی برنامهسازی ‪ -‬دانشگاه صنعتی شریف‬