لرسم فانوس رمضان بالنجوم في C++ نقسم الشكل إلى علاقة وسقف مثلث وجسم مفرغ وقاعدة. ينتج المثال رسمًا نصيًا، ويستخدم \n لنهاية السطر بدل الحرف n الذي يفسد محاذاة الشكل. يمكن تغيير size داخل الحدود الموضحة لتكبير الرسم أو تصغيره.
الكود الكامل باستخدام C++17
#include <iostream>
#include <string>
#include <vector>
std::vector<std::string> lanternRows(int size) {
std::vector<std::string> rows;
if (size < 2 || size > 20) return rows;
rows.push_back(std::string(size - 1, ' ') + "|");
for (int row = 1; row <= size; ++row)
rows.push_back(std::string(size - row, ' ') + std::string(2 * row - 1, '*'));
for (int row = 0; row < size; ++row)
rows.push_back("*" + std::string(2 * size - 3, ' ') + "*");
rows.push_back(std::string(2 * size - 1, '*'));
rows.push_back(std::string(size - 2, ' ') + "***");
return rows;
}
int main() {
for (const auto& row : lanternRows(6)) std::cout << row << '\n';
std::cout << "Ramadan Kareem\n";
}تكوين السقف والجسم
يزداد عرض السقف بمقدار نجمتين في كل صف، مع تقليل المسافات من اليسار تدريجيًا. يبلغ عرضه الأخير 2 * size – 1. يبقى جسم الفانوس بعرض ثابت، ونطبع نجمة عند كل طرف مع فراغ بينهما حتى يبدو مفرغًا. تضاف قاعدة وعلاقة لإكمال الشكل.
التحقق من الحجم
تعيد lanternRows قائمة فارغة للحجم خارج 2 إلى 20، لتجنب عدد سالب يتحول إلى حجم ضخم عند إنشاء string. القيمة الافتراضية 6 تنتج 15 صفًا للرسم قبل التهنئة. يظل أقصى عرض 11 محرفًا، ويمكن اختباره دون الاعتماد على لقطة شاشة.
كيف تحافظ على التنسيق؟
استخدم خطًا ثابت العرض، واحتفظ بالمسافات داخل النصوص. علامة \t تعتمد على مواضع التبويب في الطرفية؛ لذلك لم نعتمد عليها لتوسيط الشكل. يمكن تغيير محرف الحدود أو إضافة زخرفة، مع اختبار كل صف بعد التعديل حتى لا تنكسر الأطراف.
ترجمة المثال وتشغيله
احفظ المثال في ملف main.cpp واختر معيار C++17 في محررك. مع GCC أو Clang يمكنك الترجمة بالأمر g++ -std=c++17 -Wall -Wextra -pedantic main.cpp -o main ثم تشغيل الملف الناتج. ترجم كل مثال كبرنامج مستقل؛ لا تجمع دوال main من دروس مختلفة في ملف واحد.
الصور والفيديو من الشرح السابق
الكود النصي أعلاه هو النسخة المصححة؛ قد تختلف المواد المرئية السابقة في أسماء المتغيرات أو طريقة التشغيل.







