آموزش الگوریتم معکوس یک عدد – به زبان ساده + کد
در این مطلب از مجله فرادرس روش بدست آوردن معکوس اعداد را به صورت سیستمی با استفاده از دو روش توابع بازگشتی و حلقهها در برنامه نویسی میآموزیم. الگوریتم معکوس یک عدد به رفتارهایی میگویند که به صورت مرحلهبهمرحله اجرا شده و در نهایت شکل معکوس عدد داده شده را به بیرون برمیگردانند. در دنیای برنامه نویسی، با روشها و مفاهیم مختلفی آشنا میشویم که بهتر است در کار با آنها مسلط شویم. معکوس کردن اعداد هم یکی از این مفاهیم است. وقتی درباره معکوس اعداد صحبت میکنیم به معنی برعکس کردن ترتیب چیدمان ارقام آن است. به این معنا که اگر عددی را به صورت ۱۲۳۴۵ به الگوریتم تحویل دهیم، معکوس آن را که برابر با ۵۴۳۲۱ است در خروجی برگرداند.
در این مطلب به آموزش کامل پیادهسازی الگوریتم معکوس یک عدد با دو راهکار اصلی استفاده از حلقه و توابع بازگشتی پرداختهایم. در ابتدا الگوریتم این عملیات را با جزئیات شرح داده و سپس با استفاده از زبان C به کدنویسی الگوریتم پرداختهایم. درباره مشکل مربوط به منفی بودن عدد ورودی صحبت کرده و راه حل آن مشکل را نیز بیان کردیم. در نهایت هم این راه حل را با کد نویسی نمایش دادیم.
الگوریتم معکوس یک عدد یعنی چه؟
الگوریتم معکوس کردن یک عدد به معنای این است که عددی را از انتها به ابتدا بنویسیم. یعنی ترتیب ارقام عدد را برعکس کنیم. برای مثال، اگر عدد ۳۴۸۹ را به عنوان ورودی به این الگوریتم بدهیم باید عدد معکوس شده ۹۸۴۳ را در خروجی الگوریتم ببینیم. برای معکوس کردن اعداد لازم است که مراحلی را به ترتیب زیر طی کنیم.
- متغیری را برای ذخیرهسازی عدد معکوس شده مقداردهی کنیم.
- از عملگر خاصی مانند عملگر محاسبه باقیمانده تقسیم برای استخراج آخرین رقم عدد اصلی استفاده کنیم.
- عدد معکوس شده را ضرب در ۱۰ کرده و سپس رقم استخراج شده را به آن اضافه کنیم.
- عدد اصلی را بر ۱۰ تقسیم کنیم تا آخریم رقم آن حذف شود.
- سه مرحله قبل را تکرار کنیم. این تکرار را باید تا زمانی انجام دهیم که همه ارقام عدد اصلی، مورد پردازش قرار گرفته باشند.
- در نهایت نتیجه مطلوبی که تولید شده همان مقدار معکوس عدد اصلی است.
در ادامه این مطلب الگوریتم معکوس یک عدد را که در بالا به صورت قدم به قدم به شکل الگوریتمی سطح بالا توضیح داده شده، با زبان برنامه نویسی C پیادهسازی میکنیم. البته توجه کنید که مهمترین فایده نوشتن الگوریتم سطح بالا، سادهسازی قابلیت پیادهسازی آن در همه زبانهای برنامه نویسی است.
آموزش رشته طراحی الگوریتم با فرادرس
طراحی الگوریتم یکی از مباحث بسیار پایه در علوم کامپیوتری است. البته این رشته علمی، حوزه وسیعتری از علوم کامپیوتری را شامل میشود. اما در فرادرس با تاکید بر بخش مدرن و تکنولوژیک این علم به تولید فیلمهای آموزشی مناسب کار مهندسان کامپیوتر و حتی آمادگی جهت شرکت در آزمونهای دانشگاهی پرداخته شده است. این شاخه از دانش در علوم کامپیوتر رابطهای تنگاتنگ با برنامهنویسی و ساختمان داده دارد. به همین منظور در فرادرس با نگرش برنامهنویسی به تهیه فیلمهای آموزشی مربوط به مبحث طراحی الگوریتمها و ساختمان داده پرداختهایم.
در بخش زیر، چند فیلم آموزشی در ارتباط با طراحی الگوریتم و ساختمان داده را معرفی کردهایم. تسلط به این مباحث یکی از تخصصهای برجسته برنامهنویسان و مهندسان نرم افزار حرفهای است. در صورت نیاز با کلیک بر روی تصویر بالا میتوانید وارد صفحه اصلی این مجموعه آموزشی شده و از فیلمهای بیشتری دیدن کنید.
- فیلم آموزش طراحی الگوریتم به صورت جامع و با مفاهیم کلیدی در فرادرس
- فیلم آموزش طراحی الگوریتم همراه با حل مثال های عملی در فرادرس
- فیلم آموزش حل سوالات آزمون های استخدامی طراحی الگوریتم با فرادرس
- فیلم آموزش رابطه های بازگشتی در طراحی الگوریتم و ساختمان گسسته با فرادرس
تشریح این الگوریتم برای پیاده سازی در زبان برنامه نویسی
برای اینکه بتوانیم به بهترین شکل ممکن الگوریتمهای خود را طراحی و پیادهسازی کنیم اصول خاصی وجود دارند که باید رعایت شوند. بهترین روش فراگیری این اصول مشاهده پروژههای کاربردی و مثالهای عملی است. به همین منظور پیشنهاد میکنیم که فیلم آموزش طراحی الگوریتم همراه با حل مثال های عملی را از فرادرس مشاهده کنید. لینک مربوط به این فیلم در ادامه نیز قرار داده شده است.
در این قسمت از مطلب، شکل کوچک و ساده الگوریتم معکوس یک عدد را در زبان برنامهنویسی C پیادهسازی میکنیم. قبل از کدنویسی این الگوریتم باید که آن را از سطح بالا به سطحی نزدیکتر به قواعد زبان C تبدیل کنیم.
- شروع عملیات
- عدد ورودی از کاربر خوانده شود.
- متغیری را به نامreversedNumber با مقدار اولیه 0 تعریف میکنیم. این متغیر برای ذخیره جواب الگوریتم استفاده خواهد شد.
- تا وقتی که عدد ورودی برابر با 0نشده، مراحل ۵ تا ۸ را پشت سر هم تکرار میکنیم.
- آخرین رقم عدد ورودی را با استفاده از عملگر % استخراج میکنیم. سپس باید رقم استخراج شده را در متغیری به نام lastDigit ذخیره کنیم.
- مقدار درون متغیر reversedNumber را ضرب در 10 میکنیم.
- مقدار درون متغیر lastDigit را به مقدار reversedNumber اضافه میکنیم.
- عدد ورودی را تقسیم بر 10 میکنیم. این کار باعث حذف آخرین رقم از عدد میشود.
- حلقه را به پایان میرسانیم.
- مقدار درون متغیر reversedNumber را در خروجی برای نمایش به کاربر چاپ میکنیم.
- پایان عملیات
الگوریتم بالا تضمین میکند که همه ارقام عدد ورودی استخراج شده و عدد معکوس به صورت مرحلهبهمرحله با ضرب مقدار آن در 10 و سپس افزودن مقدار متغیر lastDigit ساخته شود. حلقه طراحی شده تا زمانی که همه ارقام موجود در عدد اصلی پردازش شوند پیمایش میشود. در نهایت هم معکوس عدد ورودی را بدست آورده و در خروجی نمایش میدهد.
کد نویسی الگوریتم معکوس یک عدد در زبان C
در این بخش از مطلب، کدهای مربوط به برنامهای را برای پیادهسازی الگوریتم معکوس یک عدد در زبان C نمایش دادهایم. زبان برنامهنویسی C تقریبا مادر بیشتر زبانهای برنامهنویسی حال حاضر در دنیا است. این زبان دارای امتیازات و تواناییهایی است که شاید حتی زبانهای نشئت گرفته از آن هم نداشته باشند. برای اینکه کدهای پیادهسازی شده در این مطلب را به خوبی درک کنید لازم است که قبلا با این زبان آشنا شده باشید. در صورت عدم شناخت کافی نسبت به زبان C پیشنهاد میکنیم که فیلم آموزش برنامه نویسی C به صورت جامع و با نکات کاربردی از فرادرس را مشاهده کنید. برای راحتی کار شما لینک مربوط به فیلم را در ادامه قرار دادهایم.
کدهای پایین را از روی الگوریتم بیان شده در بخش قبل پیادهسازی کردهایم.
کد نویسی الگوریتم معکوس عدد در زبان C با استفاده از حلقه
با روشهای مختلفی میتوان الگوریتم مربوط به بدست آوردن معکوس اعداد را پیادهسازی کرد. استفاده از حلقهها یکی از بهینهترین روشهای ممکن برای پیادهسازی این الگوریتم است. در کادر زیر از ابزار حلقه برای بدست آوردن معکوس عدد استفاده کردهایم.
1#include <stdio.h>
2int main() {
3 int number, reversedNumber = 0, remainder;
4 printf("Enter a number: ");
5 scanf("%d", &number);
6 while (number != 0) {
7 remainder = number % 10;
8 reversedNumber = reversedNumber * 10 + remainder;
9 number /= 10;
10 }
11 printf("Reversed number: %d\n", reversedNumber);
12 return 0;
13}
در کدهای بالا متغیرهایی را به نامها number و reversedNumber تعریف کردهایم. از متغیر number برای ذخیرهسازی عدد اصلی و از متغیر reversedNumber برای ذخیرهسازی عدد معکوس شده استفاده میکنیم. در ابتدای کار مقدار reversedNumber را برابر با 0قرار میدهیم. در ادامه با استفاده از عملگر تقسیم باقیمانده % یا همان عملگر Modulo و متغیر remainder آخرین رقم را در عدد اصلی شناسایی و از آن خارج میکنیم.
درون حلقه while با محاسبه کد number % 10 آخرین رقم مربوط به عدد درون متغیر number را استخراج کرده و number در متغیر remainder ذخیره میکنیم. سپس مقدار مربوط به متغیر reversedNumber را بهروزرسانی میکنیم. بهروزرسانی این مقدار با ضرب آن در عدد 10 و سپس افزودن مقدار متغیر remainder انجام میشود. در نهایت هم برای حذف آخرین رقم از عدد اصلی متغیر number را بر عدد ۱۰ تقسیم میکنیم.
در زبانی مانند زبان برنامه نویسی پایتون باید از تقسیم صحیح // استفاده کنیم اما در زبان C که در ابتدا مشخص شده متغیر number برای نگهداری اعداد صحیح استفاده خواهد شد، همین انجام عمل ساده تقسیم کفایت میکند.
این پردازش تا زمانی که عدد number برابر با 0 شودادامه خواهد داشت. اَدای این شرط نشانگر آن است که همه ارقام عدد اصلی به درستی پردازش شده و عدد معکوس آن ساخته شده است. در این برنامه عدد معکوس یا جواب در متغیر reversedNumber ذخیره خواهد شد.
تقسیم در پایتون
در صورتی که با زبان برنامهنویسی پایتون کار میکنید و نیازتان به پیادهسازی این الگوریتم با آن زبان، باید نسبت به روشهای انجام عملیات تقسیم در این زبان آشنا باشید. از این رو، پیشنهاد میکنیم که مطلب تقسیم در پایتون به زبان ساده از مجله فرادرس را مطالعه کنید.
کد نویسی بازگشتی الگوریتم معکوس یک عدد در زبان C
پیادهسازی بازگشتی الگوریتم معکوس یک عدد به معنای استفاده از تکنیکها و توابع بازگشتی برای محاسبه معکوس اعداد است. در چنین موردی، برای حل نسخه کوچکتری از مسئله اصلی تابع خود را فراخوانی میکند. رویداد فراخوانی خود تا زمانی اتفاق میافتد که تابع به پایهایترین حالت مسئله برخورد کند. در این جا اجرای عملیات بازگشت متوقف و فرایند حل مسئله شروع میشود.
در کادر زیر مثال کوچکی را از روش پیادهسازی حالت بازگشتی الگوریتم معکوس یک عدد نمایش دادهایم. با بررسی این کد بهتر میتوانید روش کار تکنیک بازگشتی را درک کنید.
1#include <stdio.h>
2int reverseNumber(int number, int reversedNumber) {
3 if (number == 0) {
4 return reversedNumber;
5 }
6
7 int lastDigit = number % 10;
8 reversedNumber = reversedNumber * 10 + lastDigit;
9
10 return reverseNumber(number / 10, reversedNumber);
11}
12int main() {
13 int number, reversedNumber;
14
15 printf("Enter a number: ");
16 scanf("%d", &number);
17
18 reversedNumber = reverseNumber(number, 0);
19
20 printf("Reversed number: %d\n", reversedNumber);
21
22 return 0;
23}
مشکلات مربوط به ورودی از جنس عدد منفی
یکی از مشکلاتی که در زمان پیادهساز ی الگوریتم معکوس یک عدد با روش بازگشتی با آن روبهرو میشویم مربوط به زمانی است که داده ورودی از نوع اعداد منفی باشد. شکل بازگشتی این الگوریتم، اعداد منفی را بهدرستی مدیریت نمیکند. یعنی با توجه به اینکه پروسه بازگشتی تا زمان صفر شدن عدد اصلی ادامه خواهد داشت، معکوس عدد ورودی منفی به صورت صحیح محاسبه نمیشود.
برای غلبه بر این چالش با موفقیت، باید کد را با هدف بدست آوردن مقدار قدر مطلق عدد اصلی تغییر دهیم. لازم است که قدر مطلق عدد اصلی را قبل از اولین اجرای عملیات استخراج آخرین رقم عدد محاسبه کنیم. اینکار تضمین میکند که مقدار remainder همیشه مثبت بوده و محاسبهگر مقدار معکوس عدد به درستی کار کند.
پیاده سازی الگوریتم محاسبه معکوس عدد منفی
در کد زیر مثال کوچکی از تغییر الگوریتم برای بدست آوردن مقدار معکوس اعداد منفی را پیادهسازی کردهایم. این مثال نیز مانند مثالهای قبل با زبان C نوشته شده است.
1#include <stdio.h>
2#include <stdlib.h>
3int reverseNumber(int number, int reversedNumber) {
4 if (number == 0) {
5 return reversedNumber;
6 }
7
8 int lastDigit = abs(number) % 10;
9 reversedNumber = reversedNumber * 10 + lastDigit;
10
11 return reverseNumber(number / 10, reversedNumber);
12}
13int main() {
14 int number, reversedNumber;
15
16 printf("Enter a number: ");
17 scanf("%d", &number);
18
19 reversedNumber = reverseNumber(number, 0);
20
21 printf("Reversed number: %d\n", reversedNumber);
22
23 return 0;
24}
همینطور که کاملا قابل مشاهده است، برای دسترسی به تابع abs() در سربرگ فایل مربوط به کدها ماژول stdlib.h راInclude کردهایم. این تابع برای محاسبه مقدار قدر مطلق اعداد بهکار برده میشود. در کد بالا مقدار قدر مطلق number نقش بسیار مهمی را بازی میکند. زیرا با کمک کد abs(number) % 10 میتوانیم از اجرای صحیح عملیات Modulo مطمئن شویم. بدون توجه به اینکه عدد ورودی مثبت است یا منفی، در نهایت کد مربوط به الگوریتم به صورت دقیق کار میکند.
بنابراین، الگوریتم پیادهسازی شده اکنون میتواند به درستی اعداد منفی را هم مدیریت کند و عدد معکوس مرتبط با آنها را به صورت صحیح بسازد.
آموزش الگوریتم ها و ساختمان داده در فرادرس
توانایی طراحی و نوشتن الگوریتم در کامپیوتر فقط در کنار داشتن علم مربوط به ساختمان داده است که میتواند باعث تولید برنامههایی با عملکرد عالی و مصرف منابع بهینه شود. این دو حوزه از علوم کامپیوتری به ظاهر جدا از هم هستند اما برای گذاشتن بیشترین تاثیر خود به روی برنامهها نیاز جدی به همکاری با یکدیگر دارند.
فرادرس به عنوان تولید کننده فیلمها و مطالب آموزشی، همیشه تلاش کرده تا بهترین محتوی آموزشی را به صورت چکیده و در عین حال بسیار کامل در اختیار کاربران خود قرار دهد. تماشای فیلمهای آموزشی تولید شده در فرادرس باعث کاهش هزینهها، افزایش راندمان و یادگیری بهتر علاقهمندان در حوزههای مختلف علمی و هنری میشود. به همین دلیل است که به صورت روزانه کاربران بسیار زیادی از خدمات فرادرس استفاده میکنند.
درباره طراحی الگوریتم و ساختمان دادهها هم فرادرس اقدام به تولید فیلمهای کاملی کرده است. البته تلاش کردیم که هر دو جنبه علمی و آکادمیک این مباحث را در کنار یکدیگر پوشش دهیم. به همین دلیل در ادامه فیلمهایی را معرفی کردیم که هم حالت کمک درسی برای آزمونهای آکادمیک دارند و هم دارای مطالب بسیار کاربردی در پروژههای روز دنیا هستند. در صورت تمایل برای آشنا شدن با مباحث بیشتر بر روی تصویر بالا کلیک کنید.
- فیلم آموزش ساختمان داده ها به صورت جامع و با نکات مهم در فراردس
- فیلم آموزش طراحی الگوریتم به شکل جامع و با مفاهیم کلیدی در فراردس
- فیلم آموزش طراحی الگوریتم همراه با مرور و تست کنکور ارشد در فراردس
- فیلم آموزش ساختمان داده ها و پیاده سازی در C++ در فراردس
- فیلم آموزش مروری بر پیچیدگی محاسبات Computational Complexity با فرادرس
جمع بندی
راههای بسیار زیادی برای بدست آوردن مقدار معکوس اعداد وجود دارد. فرقی نمیکند برای اجرای این عملیات از حلقه استفاده کنیم یا تابع، در نهایت منطق کدها به صورت ثابتی باقی خواهد ماند. معکوس کردن اعداد یکی از مفاهیم پایه در تمرینات برنامهنویسی است. با تمرین برروی طراحی الگوریتمهای سادهای مانند این مورد برنامه نویسان تازه کار و دانشجویان آموختههای خود را به چالش میکشند.
در این مطلب از مجله فرادرس، درباره الگوریتم معکوس کردن یک عدد و روشهای پیادهسازی آن صحبت کردهایم. الگوریتم مورد نظر را با دو روش اصلی استفاده از حلقهها و توابع بازگشتی پیادهسازی کرده و کدهای مربوط به هر دو مورد را با زبان برنامهنویسی C نمایش دادیم. در نهایت هم به رایجترین مشکل مربوط به این الگوریتم، یعنی کار با اعداد منفی رسیدگی کردیم. در ابتدا این مشکل را توضیح داده و سپس راه حل متناسب با آن را به مخاطبان خود ارائه و کدنویسی مربوط به آن را نیز نمایش دادیم.