هوالعلیم مبانی برنامهسازی ()40151 )Fundamentals of Programming (Pascal دانشکده مهندسی کامپیوتر دانشگاه صنعتی مدرس :صادق دری نوگورانی شریف تمرین سری 4 مهلت ارسال تمرین 82 :خرداد 11 توضیحات اولیه آخرین مهلت تحویل تمرین اول ،ساعت 85:31روز 82خرداد می باشد. تمرین به صورت انفرادی میباشد. بعد از نوشتن تمرینها ،فایلهای .pasتمرین خود را در یک فولدر با نام HW4_STDIDقرار دهید. ( STDIDشماره دانشجویی شما می باشد) .این فولدر را zipکنید .فایل فشرده شده را به آدرس [email protected]ارسال نمایید( .از فرستادن جواب تمرین به گروه پستی جدا خودداری کنید) عنوان ایمیل باید به صورت HW4_STDIDباشد .که STDIDشماره دانشجویی شما می باشد. فرستادن کل یا قسمتی از برنامه تان برای افراد دیگر ،یا استفاده از کل یا قسمتی از برنامه فردی دیگر به نام خود ،تقلب محسوب میشود. در صورت مشاهده تقلب ،به میزان نمره سوال ،نمره منفی تعلق خواهد گرفت ( .یعنی اگر نمره سوال 82نمره بود ،نمره -82برای هر 8نفر منظور خواهد شد) در صورتی که در 8سوال از یک تمرین تقلب علمی مشاهده شود ،نمره تمرین هر 8نفر ،صفر خواهد شد .پس لطفا کپ نزنید! پس از اتمام زمان ارسال تمرین ،تا 4روز می توانید تمرین خود را ارسال کنید .هر روز تاخیر در ارسال برنامه %82 ،از نمره شما کسر خواهد شد. اگر هر گونه ابهام یا مشکل در مورد تمرین داشتید که فکر میکنید پاسخ آن برای همه مفید خواهد بود ،لطفا آن را به گروه پستی درس ارسال کنید .در غیر این صورت به آدرس [email protected]بفرستید. 1 تمرین های عملی 1ـ اصالح برنامه ( 02نمره) برنامهی زیر را که به کمک اشارهگرها نوشته شده است ،اصالح کنید و به طور کامل بازنویسی نمایید .دلیل هر خطا را در یک جمله توضیح دهید: ;Program Pointers Type ;PInteger = ^Integer ;PReal = ^Real Var ;A, B: PInteger ;E, F: Integer Begin ;)New(A); New(B ;A^ := 10 ;B := A }{1 ;)^Readln(B ;)New(E ;^E := A^ + B ;F := A ;)Dispose(A ;)Dispose(B ;)New(A ;A := 42 ;B := A ;F := B^ * 2 ;)Dispose(B); Dispose(E); Dispose(F End. آیا میتوانید توضیح دهید خط } {1چه مشکلی را ایجاد میکند؟ 8 0ـ مجموعهی حروف ( 02نمره) به کمک استفاده از مجموعهها در زبان پاسکال ،برنامهای بنویسید که یک رشته ،تنها شامل حروف Aتا Z (بزرگ یا کوچک) و فاصله را از ورودی دریافت کند و مجموعهی حروفی را که در این رشته حضور ندارند را در خط اول و مجموعهی حروفی که فقط یک بار در جمله ظاهر شدهاند را در خط دوم خروجی چاپ کند .دقت کنید که تمایزی بین حروف بزرگ و کوچک نمیباشد (خروجی را با حروف کوچک چاپ کنید). دقت کنید که برای این برنامه لزوماً باید از مجموعهها استفاده کنید. ورودی نمونه AabB Cc cddeeeffg hiJK lmNo خروجی نمونه ] q r s t u v w x y z ] h I j k l m n o abcdefghijklmnopqrstuvwxyz b c d e f g h i j k l m n ] q r s t u v w x y z p g ] a p [ [ [ [ o 3ـ اشارهگرها ( 32نمره) قطعه کد زیر را در نظر بگیرید: ;)New(P ;'P^.Data := 'ABC ;)New(P^.Pointer ;Q := P^.Next ;'Q^.Data = 'abc ;Q^.Pointer = nil تعاریف مربوط به TypeهاVar ،ها و Recordهای موردنیاز برای اینکه این قطعه کد به درستی اجرا شود را بنویسید. 4ـ (سوال امتیازی) لیست دوپیوندی ( 02نمره) لیستهای دوپیوندی ،همانند لیستهای پیوندی هستند ،با این تفاوت که هر گره در این لیستها ،عالوه بر اشارهگر به گره بعدی ،اشارهگری به گره قبلی نیز ذخیره میشود .در این لیستهای میتوان از هر گره به هر دو جهت حرکت نمود و تنها حرکت مانند لیست پیوندی به یک جهت محدود نیست. 5 در این تمرین باید یک لیست دوپیوندی (مشابه لیست پیوندی تدریس شده در کالس) را پیادهسازی نمایید و توابع زیر را برای آن بنویسید: ;) Procedure AppendNode(var ListHead: PNode; Value: Integer این تابع ،یک گره با مقدار Valueدر انتهای لیست اضافه میکند .دقت کنید که Valueعددی است که باید در گره ذخیره شود .در صورتی که لیست خالی باشد ListHead ،برابر با Nilبوده و باید مقدار جدید سرلیست در ListHeadقرار داده شود. ;) Procedure DeleteNode(var ListHead: PNode, Index: Integer گره با اندیس Indexرا از لیست حذف میکند .اگر Indexبرابر با -1باشد ،باید گره آخر حذف شود .در صورت خالی شدن لیست ListHead ،باید Nilشود و همواره سرلیست جدید در ListHeadحضور داشته باشد (مثالً در صورتی حذف خود سرلیست). ; Function GetNode(ListHead: PNode, Index: Integer) : Integer مقدار گرهای که با Indexمشخص شده است را بر میگرداند .اگر Indexبرابر با -1باشد ،مقدار گره آخر را باز میگرداند. ;) Procedure PrintList(ListHead: PNode عناصر لیست را با یک فاصله از هم به ترتیب چاپ میکند .این تابع را به صورت بازگشتی پیادهسازی کنید. ;) Procedure SortList(var ListHead: PNode لیست را مرتب می کند .از هر الگوریتم مرتبسازی دلخواه برای این قسمت میتوانید استفاده کنید. ; Function IsInList(ListNode: PNode, Value: Integer) : Boolean این تابع به دنبال مقدار Valueدر لیستی میگردد که یکی از گرههای آن با ListNodeمشخص شده است. دقت کنید که ListNodeلزوماً عنصر اول یا آخر لیست نمیباشد و ممکن است یکی از عناصر میانی لیست باشد .در صورتی که مقدار Valueدر این لیست وجود داشت True ،و در غیر این صورت Falseبر میگرداند. 4
© Copyright 2026 Paperzz