يمكن رسم قلب بالنجوم في C++ عن طريق اختبار نقاط شبكة إحداثيات، ثم طباعة نجمة داخل الشكل ومسافة خارجه. يبني المثال كل صف داخل string ويحتفظ بفاصل سطر صحيح بين الصفوف. كل التضمينات قياسية، ولا يحتاج إلى ملفات خاصة بنظام تشغيل معين.
الكود الكامل باستخدام C++17
#include <iostream>
#include <string>
#include <vector>
std::vector<std::string> heartRows() {
std::vector<std::string> rows;
for (int y = 15; y >= -15; --y) {
std::string row;
for (int x = -30; x <= 30; ++x) {
double a = x * 0.05, b = y * 0.1;
double base = a * a + b * b - 1;
bool inside = base * base * base - a * a * b * b * b <= 0;
row += inside ? '*' : ' ';
}
rows.push_back(row);
}
return rows;
}
int main() {
for (const auto& row : heartRows()) std::cout << row << '\n';
}فكرة الإحداثيات
تتحرك الحلقة الخارجية على الصفوف من أعلى إلى أسفل، والداخلية على الأعمدة. تحوّل معاملات المقياس x وy إلى مجال عددي صغير، ثم تختبر معادلة شكل القلب. يحتوي الناتج على 31 صفًا، وكل صف 61 محرفًا قبل نهاية السطر. المقياس الأفقي مختلف لأن خلية الطرفية ليست مربعة في أغلب الخطوط.
الحفاظ على شكل الرسم
استخدم خطًا ثابت العرض، ولا تحذف المسافات التي تسبق النجوم. طباعة الحرف n لا تنشئ سطرًا جديدًا؛ يستخدم المثال محرف نهاية السطر \n. كذلك يجب كتابة أسماء التضمينات بين أقواس زاوية داخل كود HTML مُهَرّب حتى لا تختفي من المقال أثناء العرض.
تمارين على الكود
استبدل النجمة بمحرف واحد آخر، أو غيّر حدود الشبكة والمقياس معًا. لا تستبدلها مباشرة برمز تعبيري وتتوقع العرض نفسه، لأن الرمز قد يشغل أكثر من خلية. يمكن اختبار أن الرسم يحتوي نجومًا ومسافات، وأن جميع الصفوف متساوية العرض، ثم الانتقال إلى تمارين الشجرة والفانوس.
ترجمة المثال وتشغيله
احفظ المثال في ملف main.cpp واختر معيار C++17 في محررك. مع GCC أو Clang يمكنك الترجمة بالأمر g++ -std=c++17 -Wall -Wextra -pedantic main.cpp -o main ثم تشغيل الملف الناتج. ترجم كل مثال كبرنامج مستقل؛ لا تجمع دوال main من دروس مختلفة في ملف واحد.
الصور والفيديو من الشرح السابق
الكود النصي أعلاه هو النسخة المصححة؛ قد تختلف المواد المرئية السابقة في أسماء المتغيرات أو طريقة التشغيل.






