به نام خدا تمرین سری اول مبانی برنامه نویسی زمان تحویل ۱۶/۹/۸۸ :ساعت ۱۰صبح توضیحات: قبل از شروع موارد زير را به دقت بخوانید: o در خط اول هر يک از برنامهها شماره دانشجويي خود را به صورت زير بنويسید: // ID: your Student ID مثال: //ID: 87654321 o بعد از نوشتن همه برنامهها ،فايلهای cpp.همه آنها را در يک پوشه با نام assignment2_stdIDقييرار دهیييد ل assignment2_87654321 :و سپس اييين پوشييه را )که در آن stdIDشماره دانشجويي شما است (.مث ً فشرده کنید .فايل فشرده شده را به آدرس cpphomework881@gmail.comارسال نمايید. .شماره دانشجويي شما است stdIDباشد ،که در آن assignment2_stdIDعنوان ايمیل بايد به صورت o o اشتباه در نامگذاري فايل برنامهها و فايل فشرده شده و يا عنوان ايمیل فرستاده شده ،موجب عدم تصحیح تمريين شيما میشود. o نحوه ورودي گرفتن و خروجي دادن برنامههاي شما بايد دقیقًا به صورت گفته شده در مسئله باشد .در غیر اييين صييورت چون برنامههاي شما به صورت خودکار تصحیح میشود ،خروجي برنامهي شما با خروجي برنامهي مصحح منطبق نخواهد بود. o به هر يک از برنامههاي شما تعدادي تست داده خواهد شد .توصيیه میشيود کيه حتميًا ييک بيار تسيتهاي نميونه را بيه برنامههايتان بدهید. o استفاده از توابع در برنامهها الزامی است .از نوشتن برنامه در تابع mainاکیدًاخودداری کنید. o برای هر تابع توضیحاتی را در مورد چگونگی عملکرد آن در خطوط قبل از آغاز تابع بنويسید. o انتخاب متغیرهای با معنی الزامی و رعايت نکردن آن موجب کسر نمره خواهد شد. o توجه کنید که ممکن است که در تمرينهای سری بعدی از شما خواسته شود که امکانيياتی را بييه تمرينهييای اييين سييری اضافه کنید .بنابراين سعی کنید تمرينها را طوری پیاده سازی کنید که قابلیت استفاده مجدد داشته باشند و برای خييود documentتهیه کنید. o در صورت مشاهدهی تخلف آکادمیک نمرهی تمرين -۱۰۰در نظر گرفته خواهد شد . موفق باشید. مسئله اول :نام فایل برنامه Queue.cpp داده ساختار صف را با اشارهگرها پیادهسازی کنید .داده ساختار صف به صورت اولین عنصر ورودی ،اولین عنصر خروجی اسييت .توابييع زييير را برای آن پیادهسازی کنید. در اين برنامه شما بايد يک تابع mainداشته باشید که در آن آرايهای به عنوان صف با طول sizeتعريف شود .اين تعريف بايد به صييورت پويا انجام شود و سايز صف را از ورودی بخوانید. هدف از اين برنامه اين است که توانايی شما برای ذخیره سازی دادهها در يک داده ساختار سنجیده شود .لذا تست اين برنامه به اييين صييورت یشود که داده ساختار شما بايد به درستی کار کند یشود و يا از آن خوانده م .خواهد بود که دادههايی برای ذخیره شدن به صف شما وارد م صف ممکن است پر باشد و بخواهیم دادهای را به آن وارد کنیم .در اين صورت بايد به کاربر پیغام دهید که صف پر اسييت امييا نبايييد از برنييامه خارج شويد. صف ممکن است خالی باشد و بخواهیم دادهای را از آن خارج کنیم در اين صورت بايد به کاربر پیغام دهید که صف خالی اسييت امييا نبايييد از برنامه خارج شويد. یکند کييه پيير اسييت و برای پیادهسازی صف علوه بر آرايه بايد دو اشارهگر داشته باشید .يکی به عنوان headکه به خانهای از آرايه اشاره م یکنييد .در چنانچه کاربر بخواهد به عنصری دسترسی پیدا کند ) با تابع (dequeueبه عنصری که در اين خانه قرار دارد دسترسی پیييدا م یکند و NULLاست. واقع اين عنصر زودتر از ساير عناصر موجود وارد صف شده است .در ابتدای کار اين اشارهگر به خانهای از آرايه اشاره نم یتواند معیاری برای سنجش خالی بودن صف قرار بگیرد .اما صف تنها در صورت NULLبودن بديهی است که NULLبودن اين اشارهگر م یتوان اين اشارهگر را به آخرين خانهی پيير و يييا یکند .م اين اشارهگر خالی نیست .اشارهگر دوم اشارهگر tailاست که به انتهای صف اشاره م یرود .برای اولین خانهی خالی در انتهای آرايهی صف اشاره داد .اين اشارهگر برای وارد کردن داده به صف )صدا زدن تابع (queueبه کار م یتوان به اين اشارهگرها مراجعه کرد. چک کردن خالی يا پر بودن صف م یشييود .بييا هيير بييار اسييتفاده از هر بار استفاده از تابع queueو يا dequeueموجب حرکت کردن اين اشيارهگرها روی آرايهی صييف م یشييود .در واقييع یشود و اين خارج شدن با حرکت دادن اشييارهگر روی آرايييه نشييان داده م dequeueعنصر خوانده شده از صف خارج م ل ذخیييره شييده ولييی بييا dequeueاز صييف خييارج شييدهاند( و نها ذخیره نشييده )قب ً ممکن است خانههايی از صف باشند که دادهای در آ یکه نها عنصری ذخیره کرد که بعد از اشييارهگر tailباشييند در حييال یتوان در آ نها ذخیره کرد )چون خانههايی م یتوان در آ عنصری هم نم ی کييه قصييد اين خانهها قبل از اشارهگر headهستند( نباید در هر بار استفاده از تابع dequeueعناصر شیفت داده شوند .بلکييه زمييان یرسد صف پر شدهاست ابتدا بايد چک کرد که آيا خانهی خالی در ابتدای صف وجود دارد يييا نييه؟ داريم عنصری را وارد صف کنیم و به نظر م یکنند که اشارهگر headبه ابتدای آرايه برسد .در غیر اينصييورت پیغييام پيير بييودن اگر وجود داشت عناصر موجود به اندازهای شیفت پیدا م یشود. صف به کاربر داده م ;)void queue(int *q, int size, int data ;)int dequeue(int *q, int size Exchange.cpp نام فایل برنامه:مسئله دوم A group of students are members of a club that travels annually to different locations. Their destinations in the past have included Indianapolis, Phoenix, Nashville, Philadelphia, San Jose, and Atlanta. This spring they are planning a trip to Eindhoven. The group agrees in advance to share expenses equally, but it is not practical to share every expense as it occurs. Thus individuals in the group pay for particular things, such as meals, hotels, taxi rides, and plane tickets. After the trip, each student’s expenses are tallied and money is exchanged so that the net cost to each is the same, to within one cent. In the past, this money exchange has been tedious and time consuming. Your job is to compute, from a list of expenses, the minimum amount of money that must change hands in order to equalize (within one cent) all the students’ costs Standard input will contain the information for several trips. Each trip consists of a line containing a positive integer n denoting the number of students on the trip. This is followed by n lines of input, each containing the amount spent by a student in dollars and cents. There are no more than 1000 students and no student spent more than $10,000.00. A single line containing 0 follows the information for the last trip. Output For each trip, output a line stating the total amount of money, in dollars and cents, that must be exchanged to equalize the students’ costs. Sample Input 3 10.00 20.00 30.00 4 15.00 15.01 3.00 3.01 0 Sample Output $10.00 $11.99 ۶ دلر و نفر دوم۵.۹۹ دلر است نفر اول۰.۰۱ سنت يعنی۱ یتوانند تبادل کنند در مثال دوم با توجه به اينکه حداقل پولی که م . دلر مبادله شده است۱۱.۹۹ یپردازند و در کل دلر م مسئله سوم :نام فایل برنامه Bucket_sort.cpp مرتب کردن پیمانه ای به وسیله يک آرايه دو انديسی از اعداد صحیح شامل رديف های با انديس های 0تا 9و ستون های با انديس های 0تا ) n-1که nتعداد اعدادی است که بايد مرتب شوند( يک آرايه تک انديسی از اعداد صحیح مثبت را مرتب می کند .به هر يک از سطرهای اين آرايه يک پیمانه گفته میشود .تابعی به نام bucketSortبنويسید که يک آرايه صحیح و اندازه آن را به عنوان آرگومان بگیييرد و بييه صورت زير عمل کند: • ل عدد 97در رديف ،7عدد 3 هر يک از مقادير آرايه تک انديسی را بر اساس رقم يکان آن در رديفی از آرايه پیمانه قرار دهید .مث ً در رديف 3و عدد 100در رديف 0قرار داده میشوند .به اين کار »عبور توزيع« می گويند. • • آرايه پیمانه را رديف به رديف بپیمايید و مقادير فوق را به ترتیب به آرايه اولیه برگردانید .ترتیب جديد مقادير مثييال بييال در آرايييه تک انديسی به صورت 3 ،100و 97خواهد بود .به اين کار »عبور گردآوری« می گويند. اين عملیات را برای ارقام بعدی)دهگان ،صدگان ،هزارگان و (...نیز تکرار کنید .در عبور دوم 100 ،در رديف 3 ،0در رديف )0چون 3رقم دهگان ندارد( و 97در رديف 9قرار می گیرد .پس از عبور گردآوری ،ترتیب مقادير اولیه آرايه تک انديسی به صورت ،100 97 ،3خواهد بود .در عبور سوم 100در رديف 3 ،1در رديف 0و 97در رديف )0پس از (3قرار میگیرد و پس از عبور گردآوری، آرايه به صورت مرتب شده خواهد بود).چون بزرگترين عدد 3رقمی است به 3بار تکرار عملیات ياز داريم(. Sample Input 7 5 12 43 234 76443 234 1221 Sample Output 5 12 43 234 234 1221 76443 مسئله چهارم:نام فایل برنامه BigNumber.cpp ل نمیتوان اعداد صد رقمی را در آنها ذخیره کرد .میخواهیم عملیييات همانطور که میدانید تايپهای زبان سی پلس پلس محدوديت دارند و مث ً رياضی را برای اعداد بسیار بزرگ پیاده سازی کنیم .اعداد حداکثر صد رقمی هستند. توابعی برای جمع ،تفريق ،ضرب ،تقسیم و توان پیاده سازی کنید) .توان عدد در محدودهی اعداد صحیح است(. یباشد .ورودی ممکن است شييامل ورودی برنامه شامل يک خط از اعداد ،عملگر و فاصلههای سفید است .حداکثر سايز ورودی ۳۰۰کاراکتر م یها باشييد .اعييداد ورودی بييدون علمييت هسييتند ولييی فاصلههای سفید اضافه در ابتدا ،میان عدد اول و عملگر ،عملگر و عدد دوم و آخر ورود یآزمايی ورودی نیست .بايد بييا اسييتفاده از توابييع سييی )پلس پلس( يييک خييط از ورودی تدار باشد .نیازی به درست ممکن است حاصل علم بخوانید و دو عدد و عملگر را از آن استخراج کنید .بدون استفاده از اين روش ممکن است در ورودی خواندن دچار مشکل شويد .بييرای نشييان یکنیم و برای نشان دادن توان از ~ استفاده خواهد شد. دادن عملگرها از همان عملگرهای رياضی آشنا استفاده م ;)char* add(char *num1, char *num2 ;)char* sub(char *num1, char *num2 char* mul(char *num1, char *num2); char* div (char *num1, char *num2); char* pow(char *num1, short num2); Sample Input 9999999999 100* +2 123456789 2~ 100 20 – 100 Sample Output 10000000001 12345678900 1267650600228229401496703205376 -80
© Copyright 2025 Paperzz