- دانشگاه: آزاد واحد قدس
- دانشکده: اندیشه
- درس: ساختمان داده
- استاد: دکتر آرتین زمردیان
- دانشجویان:
- مهندس محمد حیدری
- مهندس امیر رضا رشتبری
- مهندس سروش بهمنی
- مهندس نیما ماهر خامنه
این پروژه شامل پیادهسازی درسهای مختلف ساختمان دادهها در زبان C++ است. هدف پروژه آموزش و تمرین مفاهیم پایه مانند پشته، صف، لیست پیوندی، عبارات پسوندی و پیشوندی، بازگشت، و کاربردهای آنها میباشد. همچنین، پروژه به گونهای طراحی شده که بتوانید با استفاده از فایلهای Compile و Test عملیات کامپایل و اجرای برنامهها را به صورت خودکار انجام دهید.
| Lesson | Chapter Readme | C++ File |
|---|---|---|
| — Chapter 1 — | ||
| Factorial | Readme | Code |
| Matrix Addition | Readme | Code |
| Bubble Sort | Readme | Code |
| Linear Search | Readme | Code |
| Max Element | Readme | Code |
| Fibonacci Sequence | Readme | Code |
| Tower of Hanoi | Readme | Code |
| — Chapter 2 — | ||
| Array Simple | Readme | Code |
| Array Addresses | Readme | Code |
| Address Formula | Readme | Code |
| Linear Search | Readme | Code |
| Binary Search | Readme | Code |
| Matrix Addresses | Readme | Code |
| Sparse Matrix | Readme | Code |
| — Chapter 3 — | ||
| Stack Array | Readme | Code |
| Stack Under Flow | Readme | Code |
| Postfix Expression | Readme | Code |
| Infix to Postfix | Readme | Code |
| Recursive Subroutines | Readme | Code |
| — Chapter 4 — | ||
| Queue (FIFO / LIFO) | Readme | Code |
| Queue Operations | Readme | Code |
| Queue Display | Readme | Code |
| Linked List | Readme | Code |
| Loops | Readme | Code |
| List Traversal | Readme | Code |
هر درس در پروژه با یک فایل C++ مستقل نوشته شده و به جای گرفتن ورودی تعاملی (cin)، ورودیها از آرگیومنتهای خط فرمان (argv) دریافت میشوند.
برای مثال:
./01_factorial 5در این حالت:
argv[0]= مسیر برنامه (./01_factorial)argv[1]=5(عدد مورد نظر برای محاسبه فاکتوریل)
-
اعداد ساده: مثل فاکتوریل یا فیبوناچی، تنها یک مقدار نیاز دارند.
-
آرایهها و لیستها: عناصر آرایه یا لیست پیوندی به صورت دنبالهای از آرگیومنتها پاس میشوند.
argv[1]= طول آرایه (5)argv[2..6]= عناصر آرایه (10, 20, 15, 30, 25)
-
صف و عملیاتها: در مثال Queue، ممکن است یک سری دستورات مثل
dequeueوpopبه عنوان آرگیومنت پاس شوند:مثال:
./04_queue 10 20 30 dequeue 40
- در برنامه C++، معمولاً مراحل زیر انجام میشود:
-
خواندن طول لیست/آرایه از
argv[1] -
ایجاد آرایه/لیست با طول مشخص
-
پر کردن عناصر از باقی آرگیومنتها (
argv[2..n])for (int i = 0; i < n; i++) arr[i] = std::atoi(argv[2 + i]);
-
عملیات موردنظر (مرتبسازی، پیمایش، نمایش، …)
-
چاپ خروجی نهایی روی
stdout(یک خط یا چند خط بسته به درس)
- بدون نیاز به ورودی تعاملی → مناسب تست خودکار با Python
- هر خروجی قابل assert مستقیم است
- مدیریت آرایهها و لیستها کاملاً سلسلهمراتبی و ساده است: طول + عناصر
مراحل 3 به بعد برای تست اختیاری میباشد.
-
ابتدا کمپایلر مربوط به سیستم عامل خود را نصب کنید: Download
-
داخل CMD از نصب آن اطمینان حاصل کنید
دستور:
g++ --version
نتیجه:
g++.exe (tdm64-1) 10.3.0 -
افزونه C++ را در vsCode نصب میکنیم.
- در این مرحله میتوانیم کد هارا از مسیر source کامپایل و اجرا کنیم
-
برای کامپایل کردن و تست دست جمعی python را نصب میکنیم.
-
با استفاده از pip کتابخانه های مورد نیاز را نصب کنید:
دستور:
pip install -r requirements.txt
-
با اجرا کردن فایل
compile.pyتمامی فایل ها کمپایل شده و در پوشهbuildقرار میگیرند.دستور:
python ./compile.py
-
حال با استفاده از دستور pytest میتوانید هر فصل را تست کنید:
python -m pytest -v
نتیجه:
test/test_chapter_1.py::test_factorial PASSED test/test_chapter_1.py::test_matrix_add PASSED test/test_chapter_1.py::test_bubble_sort PASSED test/test_chapter_1.py::test_linear_search PASSED test/test_chapter_1.py::test_max_element PASSED ...
- این فایل مسئول کامپایل کردن تمام فایلهای درسها است.
- از
g++برای تولید فایلهای اجرایی (.exe) استفاده میکند. - فایل خروجی در مسیر
build/ذخیره میشود. - در صورت بروز خطا هنگام کامپایل، فایل جزئیات خطا را چاپ میکند.
-
فایل Test مسئول اجرای خودکار برنامهها با ورودیهای مشخص و بررسی خروجی است.
-
از کتابخانه
pytestبرای دریافت نتایج تست ها به صورت یکجا استفاده شده است.- برنامه اجرا میشود
- خروجی با نتیجهی مورد انتظار مقایسه میشود
-
در صورت موفقیت تست، پیام
PASSEDو در غیر این صورت پیام خطا نمایش داده میشود.
نمونه یکی از تست ها:
def test_postfix_expression():
assert ch_3_postfix_expression.run('1', '1', '+') == '2'- در مثال بالا اسکریپت عبارت پسوندی اجرا شده و مقادیر
+11به ماشین میدهد و در انتها جواب ماشین با عدد2مقایسه شده و در صورت مقایرت خطا چاپ میشود
| Chapter | Test Files |
|---|---|
| Chapter 1 | Test File |
| Chapter 2 | Test File |
| Chapter 3 | Test File |
| Chapter 4 | Test File |
- قبل از اجرای هر درس، مطمئن شوید که مسیر build/ وجود دارد.
- از Python 3 برای اجرای
LessonScriptاستفاده کنید. - در Windows، هنگام استفاده از
*در Postfix، یا آن را quoted وارد کنید یا از جایگزین مثل'x'استفاده کنید.
