# **Course Objectives**

The C++ Basic Programming Course introduces students to the foundations of programming through a practical and example-driven approach. With an emphasis on hands-on learning, this course helps students develop algorithmic thinking, write clean and correct C++ programs, and build confidence through structured practice.

---
## **Key Elements**

- **Ten Core Sessions:** Each session (approx. 3 hours) builds on the previous one, covering essential C++ programming topics in a structured, accessible way.
- **Optional Enrichment Sessions:** Extra workshops on topics such as AI literacy for programmers, debugging techniques, tools, and practical tips for becoming a better developer.
- **Hands-on Learning:** Students write and run code throughout every session, supported by live examples, mini-challenges, and TA feedback.
- **Fundamental Concepts:** Variables, data types, conditionals, loops, functions, arrays, pointers, and an introduction to basic object-oriented thinking.
- **Algorithmic Thinking:** Problem decomposition, tracing, and designing solutions step by step.
- **Debugging Skills:** Understanding compiler errors, runtime issues, and basic debugging tools and strategies.
- **Clean Coding Practices:** Naming, structure, modularity, and writing readable code.
- **Student-Centered Instruction:** Clear explanations, practical exercises, and real-time assistance to address common misunderstandings.

---
## **Upon successful completion of this course, the student will be able to:**

- Write simple and correct C++ programs using fundamental constructs.
- Use loops, conditionals, and functions to solve computational problems.
- Work with arrays and pointer basics to store and manipulate data.
- Trace and debug code effectively.
- Apply algorithmic reasoning to break down and implement solutions.
- Structure programs cleanly and write readable, maintainable C++ code.
- Use the C++ standard library for basic input/output and utility operations.
- Build a small terminal-based application that integrates multiple concepts.

---
## **Assignments & Workshops**
Each week, students will complete **hands-on programming assignments** based on the topics covered in that week’s workshop(s). These topics include problem solving, data types, control structures, functions, and other fundamental programming concepts.

All assignments will be uploaded to **Quera.org**, and every student must have an active account.  
The assessment process includes:

- **Automatic evaluation** by Quera’s online judge
- **Manual review** by the student’s mentor to ensure
    - Clean and readable code
    - Absence of AI-generated or AI-misused content
    - Proper problem-solving approach
    - Adherence to course standards

Students will be informed of their scores after review.  
Some assignments may include **optional bonus problems**, which are more challenging and provide extra credit but are not required.

### **In-Workshop Problems**

During each workshop, students will be given approximately **three hands-on coding questions**.  
These will be:
1. Uploaded to Quera during the workshop
2. Attempted in class while TAs are available for help
3. Submitted by the end of the day if not finished during class

These in-workshop tasks help students reinforce the material immediately and get real-time feedback from TAs.

---

## **Final Exam**

The final exam evaluates the student’s understanding of the fundamental concepts taught throughout the semester.  
It will include questions on:
- Algorithms 
- Data types
- Control structures
- Functions
- Arrays
- Pointers
- Files
- Structs
- Material covered in the professor’s lectures and slides

Students are expected to demonstrate a clear understanding of how these concepts work and provide correct, well-reasoned solutions to the exam questions.

---

## **Final Project**

The course culminates in the creation of a **terminal-based game**, optionally using **Unicode characters** to enhance the visual experience. Students work **in groups of two**, applying the full range of skills they’ve learned to design and implement a playable, interactive project.

Previous final projects have included:
- **Pacman**
- **Tetris**
- **Space Invaders**

**Requirements typically include:**

- Clear input/output and user interaction
- Use of loops, conditionals, and functions
- Arrays and/or pointers for game state management
- Modular and well-structured code
- Consistent gameplay logic and proper handling of game rules

**Students submit:**
- The complete source code
- A short project description
- Sample runs or screenshots
## **Grading**
The course grade will be based on three components:
- **10 points** — Assignments & Workshops (combined)
- **5 points** — Final Project
- **5 points** — Final Exam

---

## **Required Tools and Accounts**

To fully participate in the course, students must have access to the following:
- **A C++ compiler** — preferably **g++** from the GNU Compiler Collection
- **A code editor or IDE** — VS Code with the official _C/C++_ extension is recommended
- **A Quera.org account** — required for submitting and completing programming assignments and workshop problems
- **A Telegram account** — students must join the course’s official Telegram group for announcements, coordination, and Q&A

