۶۰ پروژه کوچک و کاربردی برای C++
در این بخش ۶۰ پروژه کوچک و کاربردی برای C++ قرار داده ایم، این ۶۰ تمرین به شما کمک می کند تسلط زیادی را نسبت به زبان برنامه نویسی سی پلاس پلاس پیدا کنید.
ادامه این محتوا مخفی شده است...
۱. برنامه ای بنویسید که میانگین اعداد را محاسبه کند.
- در ابتدا تعداد اعدادی که کاربر میخواهد وارد کند گرفته میشود.
- با استفاده از یک حلقه `for`، برنامه از کاربر `n` عدد میگیرد و آنها را در متغیر `sum` جمع میزند.
- در نهایت با تقسیم مجموع بر تعداد، میانگین محاسبه شده و نمایش داده میشود.
- چک میکنیم که تعداد ورودی معتبر باشد (بزرگتر از صفر).
۲. برنامه ای بنویسید که فاکتوریل یک عدد را محاسبه کند.
- فاکتوریل یک عدد n یعنی حاصلضرب تمام اعداد از ۱ تا n (مثلاً 5! = 5 × 4 × 3 × 2 × 1).
- برای ذخیره عدد فاکتوریل از نوع unsigned long long استفاده کردیم چون فاکتوریل خیلی سریع بزرگ میشه.
- اگر کاربر عدد منفی وارد کنه، پیام خطا نشون داده میشه چون فاکتوریل برای اعداد منفی تعریف نشده.
- با استفاده از یک حلقه for، عدد فاکتوریل محاسبه میشه.
۳. برنامه ای بنویسید که یک متن را معکوس کند.
- از نوع داده string استفاده کردیم تا متن دلخواه (شامل فاصله یا کلمات مختلف) رو بگیریم.
- getline(cin, text) باعث میشه کل خط از ورودی خونده بشه، نه فقط اولین کلمه.
- تابع reverse(text.begin(), text.end()) از کتابخونه algorithm برای معکوس کردن متن استفاده میشه.
- در نهایت، متن معکوسشده چاپ میشه.
۴. برنامه ای بنویسید که اعداد زوج و فرد در یک لیست را پیدا کند.
- از vector استفاده کردیم تا بتونیم تعداد دلخواهی عدد رو در لیست ذخیره کنیم.
- با گرفتن تعداد ورودی از کاربر (n)، در یک حلقه for اعداد رو دریافت میکنیم.
- اگر عدد بر ۲ بخشپذیر باشه (number % 2 == 0) میره تو لیست اعداد زوج.
- در غیر این صورت میره تو لیست اعداد فرد.
- در پایان، اعداد زوج و فرد رو جداگانه نمایش میدیم.
۵. برنامه ای بنویسید که تعداد حروف و اعداد در یک رشته را مشخص کند.
- با استفاده از تابع getline کل رشته رو از ورودی میگیریم (بر خلاف cin که فقط تا اولین فاصله میخونه).
- در حلقه for، تمام کاراکترهای رشته بررسی میشن.
- تابع isalpha() بررسی میکنه که آیا کاراکتر موردنظر حرف هست یا نه.
- تابع isdigit() بررسی میکنه که آیا عدد هست یا نه.
- در پایان، تعداد حروف و اعداد چاپ میشن.
۶. برنامه ای بنویسید که مجموع اعداد در یک لیست را محاسبه کند.
- از
vectorبرای ذخیره لیست اعداد استفاده شده (نیازی به تعیین اندازه ثابت نیست). - کاربر تعداد عدد دلخواه وارد میکنه و در یک حلقه
forاعداد رو وارد میکنه. - هر عدد واردشده هم به
vectorاضافه میشه و هم به متغیرsumجمع زده میشه. - در پایان مجموع همه اعداد چاپ میشه.
۷. برنامه ای بنویسید که یک لیست را مرتب کند.
- از
vectorبرای ذخیره لیست اعداد استفاده شده. - تابع
sortاز کتابخونهalgorithm، کل لیست رو به ترتیب صعودی (کوچک به بزرگ) مرتب میکنه. - ورودیها توسط کاربر انجام میشن و در انتها لیست مرتبشده چاپ میشه.
اگه بخوای لیست رو به صورت نزولی مرتب کنیم هم میتونیم از greater<int>() استفاده کنیم:
sort(numbers.begin(), numbers.end(), greater<int>());۸. برنامه ای بنویسید که بررسی کند یک عدد اول هست یا خیر.
- ابتدا بررسی میکنیم که اگر عدد کمتر از یا مساوی ۱ بود، قطعاً اول نیست.
- در غیر این صورت، با یک حلقه
forاز ۲ تاnumber / 2چک میکنیم که آیا عدد بر چیزی بخشپذیر هست یا نه. - اگه هیچ عددی اون رو بخشپذیر نکرد، اون عدد اول محسوب میشه.
- اگه فقط یک مقسومعلیه داشته باشه (۱ و خودش)، عدد اول هست.
Input: 7 → Output: Prime
Input: 9 → Output: Not Prime
Input: 1 → Output: Not Prime۹. برنامه ای بنویسید که تعداد تکرار یک عدد را مشخص کند.
- ابتدا تعداد عناصر لیست از کاربر گرفته میشه.
- سپس در یک حلقه
for، لیست اعداد رو پر میکنیم. - بعد، عددی که کاربر میخواد بررسی کنه (مثلاً ببینه چند بار ۳ اومده) ازش میگیریم.
- با یک حلقه ساده، مقادیر لیست رو با اون عدد مقایسه میکنیم و هر بار که یکی برابر بود، متغیر
countرو زیاد میکنیم. - در آخر، تعداد دفعات تکرار نمایش داده میشه.
Input:
5
1 3 5 3 3
Target: 3
→ Output: 3 appears 3 times۱۰. برنامه ای بنویسید که اعداد مثبت را به باینری تبدیل کند.
- ابتدا از کاربر یک عدد صحیح مثبت دریافت میکنیم.
- اگه عدد منفی بود، خطا میدیم.
- اگه عدد صفر بود، خروجی 0 چاپ میکنیم.
- با استفاده از mod (باقیمانده تقسیم بر ۲) و to_string()، رقمهای باینری عدد رو بهدست میاریم و از پایین به بالا کنار هم میچینیم (با اضافهکردن در ابتدای رشته).
- در نهایت، رشتهی باینری کامل شده و چاپ میشه.
Input: 5 → Output: 101
Input: 13 → Output: 1101
Input: 0 → Output: 0
Input: -4 → Output: Only positive integers are allowed.۱۱. برنامهای بنویسید که یک فایل متنی را باز کند و محتوای آن را به صورت متنی چاپ کند.
- ابتدا اسم فایل متنی از کاربر گرفته میشه (مثلاً example.txt).
- از کلاس ifstream برای باز کردن فایل استفاده میکنیم.
- بررسی میکنیم که آیا فایل با موفقیت باز شده یا نه. اگه باز نشه، پیغام خطا میدیم.
- با استفاده از حلقه while و تابع getline، خطبهخط محتوای فایل خونده میشه و چاپ میشه.
- در نهایت فایل بسته میشه.
Enter the file name (with extension): notes.txt
--- File Content ---
Hello!
This is a simple file.
C++ is great!
۱۲. برنامهای بنویسید که یک فایل متنی را باز کند و تعداد کلمات، تعداد خطوط و تعداد حروف در فایل را محاسبه کند.
- خواندن فایل: ابتدا اسم فایل از کاربر گرفته میشود و با استفاده از ifstream فایل باز میشود.
- محاسبه تعداد خطوط: هر بار که یک خط از فایل خوانده میشود، شمارش خطوط افزایش مییابد.
- محاسبه تعداد حروف: با استفاده از تابع isalpha، بررسی میکنیم که هر کاراکتر یک حرف است یا نه، و اگر حروف باشد، شمارش حروف افزایش پیدا میکند.
- محاسبه تعداد کلمات: کلمات با فاصلهها از هم جدا شدهاند. بنابراین با استفاده از find، محل هر فاصله (space) را پیدا کرده و تعداد کلمات را محاسبه میکنیم. همچنین آخرین کلمه را بررسی میکنیم که بعد از آخرین فاصله میآید.
Enter the file name (with extension): example.txt
Number of lines: 4
Number of words: 6
Number of characters: 28
۱۳. برنامهای بنویسید که از کاربر دو ماتریس دو بعدی را با اندازه یکسان دریافت کند و ماتریس جمع و ماتریس ضرب آنها را محاسبه کند و چاپ کند.
- گرفتن ابعاد ماتریسها: ابتدا از کاربر ابعاد ماتریسها (تعداد ردیفها و ستونها) گرفته میشود.
- دریافت مقادیر ماتریسها: با استفاده از حلقههای تو در تو، مقادیر ماتریسها از کاربر گرفته میشود.
- محاسبه ماتریس جمع: برای محاسبه ماتریس جمع، هر عنصر از ماتریس اول با همان عنصر از ماتریس دوم جمع میشود.
- محاسبه ماتریس ضرب: برای ضرب دو ماتریس، از فرمول ضرب ماتریسها استفاده میشود که در آن هر عنصر از ماتریس حاصل، حاصل ضرب سطرها و ستونها است.
- چاپ ماتریسها: در نهایت، ماتریس جمع و ضرب به صورت جداگانه چاپ میشوند.
Enter number of rows: 2
Enter number of columns: 2
Enter elements of first matrix:
Enter element at [0][0]: 1
Enter element at [0][1]: 2
Enter element at [1][0]: 3
Enter element at [1][1]: 4
Enter elements of second matrix:
Enter element at [0][0]: 5
Enter element at [0][1]: 6
Enter element at [1][0]: 7
Enter element at [1][1]: 8
Matrix Sum:
6 8
10 12
Matrix Product:
19 22
43 50
۱۴. برنامهای بنویسید که از کاربر یک ماتریس دو بعدی را با اندازه دلخواه دریافت کند و اعداد آن را به صورت تصادفی پر کند و سپس ماتریس را به صورت جایگزینی سطر و ستونهایش با همین عدد بزرگتر در صورتی که بزرگتر باشد، تغییر دهد.
- گرفتن ابعاد ماتریس: ابتدا تعداد ردیفها و ستونهای ماتریس از کاربر دریافت میشود.
- تولید اعداد تصادفی: برای تولید اعداد تصادفی، از rand() استفاده میکنیم که بین 1 تا 100 عدد تولید میکند. بذر این اعداد تصادفی با srand(time(0)) تنظیم میشود تا اعداد هر بار متفاوت باشند.
- نمایش ماتریس اولیه: بعد از پر کردن ماتریس با اعداد تصادفی، آن را به کاربر نمایش میدهیم.
- جایگزینی سطر و ستونها: برای هر عنصر در ماتریس، بررسی میکنیم که آیا مقدار سطر بزرگتر از ستون است یا خیر. در صورتی که مقدار سطر بزرگتر باشد، آن را نگه میداریم و اگر مقدار ستون بزرگتر باشد، مقدار ستون را جایگزین میکنیم.
- نمایش ماتریس تغییر یافته: بعد از انجام تغییرات، ماتریس جدید (تغییر یافته) به کاربر نمایش داده میشود.
Enter number of rows: 3
Enter number of columns: 3
Original Matrix:
14 73 53
51 38 29
91 87 72
Modified Matrix:
91 73 53
51 38 72
91 87 72
۱۵. برنامهای بنویسید که یک رشته را از ورودی بگیرد و مشخص کند که آیا این رشته پالیندروم است یا نه.
- دریافت رشته از کاربر: از کاربر یک رشته دریافت میشود که ممکن است شامل فضاهای خالی هم باشد.
- معکوس کردن رشته: با استفاده از تابع reverse که از کتابخانه algorithm آمده است، رشته معکوس میشود.
- مقایسه رشتهها: رشته اصلی با رشته معکوس شده مقایسه میشود. اگر برابر بودند، یعنی رشته پالیندروم است و در غیر این صورت، رشته پالیندروم نیست.
- نمایش نتیجه: برنامه در نهایت به کاربر اعلام میکند که آیا رشته وارد شده پالیندروم است یا خیر.
Enter a string: madam
The string is a palindrome.و در صورتی که رشته پالیندروم نباشد:
Enter a string: hello
The string is not a palindrome.
نکات:
- در این برنامه، فرض شده که کاربر دقیقا رشته را بدون فضای اضافی وارد میکند.
- در صورت نیاز میتوان فضای اضافی یا تفاوت حروف بزرگ و کوچک را نادیده گرفت.
۱۶. برنامهای بنویسید که دو رشته را از ورودی بگیرد و مشخص کند که آیا این دو رشته یک جفت آناگرام هستند یا نه.
- دریافت دو رشته از کاربر: از کاربر دو رشته ورودی گرفته میشود.
- بررسی طول رشتهها: قبل از اینکه بخواهیم بررسی کنیم که آیا دو رشته آناگرام هستند یا نه، ابتدا باید بررسی کنیم که طول دو رشته برابر باشد. اگر طول آنها برابر نباشد، نیازی به بررسی بیشتر نیست و رشتهها نمیتوانند آناگرام باشند.
- مرتب کردن حروف رشتهها: برای بررسی اینکه دو رشته حروف یکسان دارند، ما از تابع sort() استفاده میکنیم تا حروف هر دو رشته به ترتیب مرتب شوند.
- مقایسه رشتهها: پس از مرتب شدن حروف، دو رشته مرتب شده را مقایسه میکنیم. اگر برابر بودند، رشتهها آناگرام هستند؛ در غیر این صورت، آناگرام نیستند.
- نمایش نتیجه: در نهایت نتیجه به کاربر نمایش داده میشود.
Enter the first string: listen
Enter the second string: silent
The strings are anagrams.و اگر رشتهها آناگرام نباشند:
Enter the first string: hello
Enter the second string: world
The strings are not anagrams.
نکات:
- در این برنامه، فرض شده که حروف بزرگ و کوچک یکسان هستند. در صورتی که نیاز دارید تفاوت حروف بزرگ و کوچک نادیده گرفته شود، میتوانید به راحتی قبل از مقایسه رشتهها، همه حروف را به یک شکل (مثلاً به حروف کوچک) تبدیل کنید.
۱۷. برنامهای بنویسید که یک لیست از اعداد را از ورودی بگیرد و اعداد زوج را از اعداد فرد جدا کرده و دو لیست جداگانه از آنها بسازد و چاپ کند.
- دریافت تعداد اعداد: ابتدا از کاربر خواسته میشود که تعداد اعدادی که قرار است وارد کند را وارد کند.
- دریافت اعداد از کاربر: سپس از کاربر خواسته میشود که اعداد خود را وارد کند و این اعداد در یک آرایه (یا لیست) ذخیره میشوند.
- جدا کردن اعداد زوج و فرد: سپس با استفاده از عملگر باقیمانده (%)، اعداد زوج از فرد جدا میشوند و هر کدام در یک لیست جداگانه ذخیره میشوند.
- چاپ اعداد زوج و فرد: در نهایت لیست اعداد زوج و فرد به ترتیب چاپ میشود.
Enter the number of elements: 5
Enter the elements: 12 7 8 5 10
Even numbers: 12 8 10
Odd numbers: 7 5
نکات:
- از آرایهها یا vector برای ذخیره کردن اعداد استفاده شده است. vector به شما این امکان را میدهد که اندازه لیست را به راحتی تغییر دهید.
- در صورت نیاز میتوان تغییرات جزئی در ظاهر یا عملکرد برنامه انجام داد.
۱۸. برنامهای بنویسید که یک فایل JSON را بخواند، محتویات آن را پردازش کند و نمایش دهد.
این برنامه به یک کتابخانه برای پردازش JSON نیاز دارد که میتوان از nlohmann/json استفاده کرد. این کتابخانه برای کار با JSON در C++ بسیار محبوب است.
- ابتدا باید کتابخانه nlohmann/json را به پروژه خود اضافه کنید.
- سپس از این کتابخانه برای خواندن و پردازش فایل JSON استفاده خواهید کرد.
نصب کتابخانه:
اگر از vcpkg برای مدیریت پکیجها استفاده میکنید، میتوانید به راحتی این کتابخانه را نصب کنید:
vcpkg install nlohmann-jsonیا از طریق CMake:
در فایل CMakeLists.txt:
find_package(nlohmann_json 3.2.0 REQUIRED)- دریافت نام فایل از کاربر: از کاربر خواسته میشود که نام فایل JSON را وارد کند.
- خواندن فایل JSON: فایل با استفاده از ifstream باز میشود و محتویات آن به یک شیء JSON (json jsonData) خوانده میشود.
- نمایش محتویات فایل JSON: محتویات فایل JSON به صورت فرمت شده با فاصلههای ۴ نمایش داده میشود تا خوانایی بهتری داشته باشد.
فرض کنید یک فایل JSON به نام data.json با محتوای زیر دارید:
{
"name": "John",
"age": 30,
"city": "New York",
"isStudent": false
}اجرای برنامه به شکل زیر خواهد بود:
Enter the JSON file name: data.json
Content of the JSON file:
{
"name": "John",
"age": 30,
"city": "New York",
"isStudent": false
}نکات:
- برای پردازش دادههای JSON در این برنامه، از کتابخانه nlohmann/json استفاده شده است که یکی از بهترین و سادهترین کتابخانهها برای کار با JSON در C++ است.
- شما میتوانید دادهها را از فایل JSON استخراج کرده و بر اساس نیاز خود پردازش کنید.
۱۹. برنامهای بنویسید که از API شهرهای جهان (مثلاً از سایت OpenWeatherMap) استفاده کند و برای شهری که کاربر وارد میکند، اطلاعات آب و هوای آن شهر را دریافت کند و چاپ کند.
هدف برنامه:
- دریافت نام یک شهر از کاربر
- استفاده از API برای دریافت اطلاعات آب و هوای آن شهر (از OpenWeatherMap)
- نمایش وضعیت آب و هوای شهر وارد شده
برای استفاده از API به یک کلید API (API Key) نیاز دارید که باید از سایت OpenWeatherMap دریافت کنید.
مراحل:
- ثبتنام در سایت OpenWeatherMap برای دریافت API Key.
- نصب کتابخانههای لازم برای ارسال درخواست HTTP (مثل cURL یا libcurl).
- ارسال درخواست به API و پردازش پاسخ.
مراحل لازم برای نصب:
- نصب cURL (برای ارسال درخواست HTTP):
- در اوبونتو: sudo apt install libcurl4-openssl-dev
- در ویندوز میتوانید فایلهای کتابخانه libcurl را از سایت آن دانلود کنید.
- درخواست API Key از سایت OpenWeatherMap و ثبتنام.
- دریافت نام شهر از کاربر: ابتدا از کاربر خواسته میشود که نام شهر را وارد کند.
- ساخت URL درخواست: با استفاده از نام شهر و API Key که از OpenWeatherMap دریافت کردهاید، یک URL درخواست به صورت داینامیک ساخته میشود.
- ارسال درخواست HTTP: از کتابخانه libcurl برای ارسال درخواست HTTP به API استفاده میشود.
- پردازش پاسخ JSON: پس از دریافت پاسخ از API، دادههای JSON پردازش شده و اطلاعات آب و هوا مثل دما، وضعیت آب و هوا، رطوبت و سرعت باد استخراج و چاپ میشود.
- نمایش اطلاعات: در نهایت، اطلاعات آب و هوا به صورت خوانا به کاربر نمایش داده میشود.
Enter the city name: London
Weather Information for London:
Temperature: 14.5°C
Weather: light rain
Humidity: 77%
Wind Speed: 4.12 m/sنکات:
- API Key: حتماً در قسمت YOUR_API_KEY کلید خود را وارد کنید.
- برای استفاده از libcurl در برنامههای C++، ابتدا باید کتابخانه را نصب کنید. این کتابخانه امکان ارسال درخواستهای HTTP را برای شما فراهم میکند.
- دادههای دریافتشده از API به فرمت JSON هستند و با استفاده از کتابخانه jsoncpp پردازش میشوند.
- شما میتوانید با تغییر پارامترهای URL درخواست، اطلاعات دیگری مانند دما در واحد فارنهایت یا میزان فشار هوا را دریافت کنید.
۲۰. برنامه ای بنویسید که دمای هوا را بر حسب سانتیگراد محاسبه کند.
نوشتن برنامهای به زبان C++ که یک دمای ورودی (مثلاً بر حسب فارنهایت یا کلوین) را دریافت کرده و آن را به سانتیگراد (Celsius) تبدیل کند.
- ابتدا برنامه یک منو نمایش میدهد و از کاربر میپرسد که میخواهد دما را از فارنهایت یا کلوین به سانتیگراد تبدیل کند.
- بر اساس انتخاب کاربر، ورودی مربوط به آن واحد دریافت میشود.
- با استفاده از فرمول مناسب، مقدار دما به Celsius تبدیل شده و نمایش داده میشود.
- در صورتی که گزینهی نامعتبری وارد شود، پیام خطا نمایش داده میشود.
Temperature Converter to Celsius
1. Fahrenheit to Celsius
2. Kelvin to Celsius
Enter your choice (1 or 2): 1
Enter temperature in Fahrenheit: 98.6
Temperature in Celsius: 37 °Cادامه این محتوا مخفی شده است...
آیا این مطلب برای شما مفید بود ؟



