Courses Archives - VittorOmeo https://vittorioromeo.info/category/courses/ Program in C++ from basic to expert! Wed, 19 Feb 2025 09:44:27 +0000 en-US hourly 1 https://wordpress.org/?v=6.7.2 https://vittorioromeo.info/wp-content/uploads/2025/02/logo-106x106.jpg Courses Archives - VittorOmeo https://vittorioromeo.info/category/courses/ 32 32 Advanced Course: “Algorithms and Optimization in C++” https://vittorioromeo.info/advanced-course-algorithms-and-optimization-in-c/ Sat, 31 Mar 2018 04:40:00 +0000 https://vittorioromeo.info/?p=34 This course is designed for experienced programmers who want to deepen their knowledge of complex algorithms and optimization techniques in C++. You will learn how …

The post Advanced Course: “Algorithms and Optimization in C++” appeared first on VittorOmeo.

]]>
This course is designed for experienced programmers who want to deepen their knowledge of complex algorithms and optimization techniques in C++. You will learn how to efficiently implement sorting and search algorithms, analyze their complexity, as well as how to work with memory and use multitasking to speed up computation. We’ll also look at ways to optimize code to improve performance in real-world projects.

Course Topics:

Sorting and Search Algorithms

  • Sorting: Learn basic sorting algorithms: bubble sort, insertion sort, quick sort, merge sort.
  • Search: Search algorithms: linear search, binary search, graph search (depth and width search).

Example of sorting by merge:

void merge(vector<int>& arr, int left, int mid, int right) {
    int n1 = mid - left + 1;
    int n2 = right - mid;

    vector<int> leftArr(n1), rightArr(n2);

    for (int i = 0; i < n1; i++)
        leftArr[i] = arr[left + i];
    for (int i = 0; i < n2; i++)
        rightArr[i] = arr[mid + 1 + i];

    int i = 0, j = 0, k = left;
    while (i < n1 && j < n2) {
        if (leftArr[i] <= rightArr[j])
            arr[k++] = leftArr[i++];
        else
            arr[k++] = rightArr[j++];
    }

    while (i < n1) arr[k++] = leftArr[i++];
    while (j < n2) arr[k++] = rightArr[j++];
}

Analyzing the complexity of algorithms

  • Complexity Theory: Fundamentals of analyzing the complexity of algorithms (O-notation, worst case, best case, and average case).
  • How to analyze the execution time of algorithms and use this information to select the most efficient methods.

Example of complexity analysis:

  • Bubble sort – O(n^2)
  • Fast sorting – O(n log n) in the average case.

Memory management

  • Dynamic memory allocation: Using new, delete, and standard containers such as vector and map.
  • Memory leaks: How to avoid memory leaks and manage dynamic resources.
  • Smart pointers: Using shared_ptr, unique_ptr for memory management and automatic resource release.

Example of using smart pointers:

#include <memory>
class Example {
Public:
    void show() { cout << “Hello, world!” << endl; }
};

int main() {
    unique_ptr<Example> ptr = make_unique<Example>();
    ptr->show();
    return 0; // The smart pointer will automatically free memory
}

Multitasking and Parallel Computing

  • Multitasking: Basics of working with threads, using library.
  • Parallel computing: Using multithreading to speed up calculations, working with asynchronous tasks, error handling in multitasking mode.
  • Parallel Algorithms: Using algorithms to speed up processing of big data.

Multitasking example:

    #include <iostream>
    #include <thread>

    void printHello() {
        std::cout << “Hello from thread!” << std::endl;
    }

    int main() {
        std::thread t(printHello);
        t.join(); // Waiting for thread completion
        return 0;
    }

Code and performance optimization

  • Speeding up execution: Using efficient algorithms and data structures to reduce program execution time.
  • Profiling Tools: How to analyze program performance using tools such as Valgrind or the gprof profiler.
  • Memory caching and optimization: How to minimize memory accesses and use caching to improve performance.

Optimization example:

Replacing nested loops with more efficient algorithms (e.g., using hash tables to search in O(1) instead of O(n)).

What you’ll get after completing the course:

  • An understanding and application of complex sorting and searching algorithms, including algorithms for big data.
  • Skills in analyzing and optimizing the complexity of algorithms, understanding the importance of choosing the right data structures.
  • Experience in working with dynamic memory, preventing memory leaks, using smart pointers.
  • Knowledge and practical skills in multitasking and parallel computing to accelerate computation in real-world projects.
  • Know how to profile and optimize code to achieve maximum performance.

Course fee: $400

The post Advanced Course: “Algorithms and Optimization in C++” appeared first on VittorOmeo.

]]>
Intermediate Level Course: “Object Oriented Programming (OOP) in C++” https://vittorioromeo.info/intermediate-level-course-object-oriented-programming-oop-in-c/ Fri, 16 Mar 2018 18:31:00 +0000 https://vittorioromeo.info/?p=31 This course will teach you how to use the principles of OOP to develop efficient and scalable C++ programs. You will learn how to design …

The post Intermediate Level Course: “Object Oriented Programming (OOP) in C++” appeared first on VittorOmeo.

]]>
This course will teach you how to use the principles of OOP to develop efficient and scalable C++ programs. You will learn how to design classes and objects, use inheritance and polymorphism to create flexible systems, and how to overload operators to improve code readability. In addition, the course will cover the use of pointers and the Standard Template Library (STL) to help you work with data collections and improve program performance.

Course Topics:

Classes and Objects

  • Classes: How to create and define classes in C++, using the constructor and destructor to initialize and clean up objects.
  • Objects: Creating instances of classes and working with them.

Example:

Class Car {
public:
    string model;
    int year;

    // Class constructor
    Car(string m, int y) {
        model = m;
        year = y;
    }

    void displayInfo() {
        cout << “Model: ‘ << model << ’, Year: ” << year << year << endl;
    }
};

int main() {
    Car myCar(“Toyota”, 2020);
    myCar.displayInfo();
    return 0;
}

Inheritance and polymorphism

  • Inheritance: Creating new classes based on existing classes (derived classes).
  • Polymorphism: Using virtual functions to implement dynamic binding, allowing child classes to override methods of parent classes.

Example:

Class Animal {
Public:
    virtual void sound() { cout << “Some sound” << endl; }
};

class Dog : public Animal {
Public:
    void sound() override { cout << “Bark” << endl; }
};

int main() {
    Animal* animal = new Dog();
    animal->sound(); // Output “Bark” (dynamic binding)
    delete animal;
    return 0;
}

Operator overloading

Use operator overloading to create more intuitive classes. For example, overloading the + operator to add two objects.

Example:

class Point {
Public:
    int x, y;

    Point(int a, int b) : x(a), y(b) {}

    // Overload operator +
    Point operator+(const Point& other) {
        return Point(x + other.x, y + other.y);
    }
};

int main() {
    Point p1(1, 2), p2(3, 4);
    Point p3 = p1 + p2; // Overloaded operator + is used
    cout << “Sum of points: (” << p3.x << ”, ‘ << p3.y << ’)” << endl;
    return 0;
}

Working with pointers

  • How to use pointers to work with dynamic memory.
  • Advantages and risks of working with pointers: working with arrays, passing objects by reference and pointers, dynamic memory allocation.

Example:

int main() {
    int* ptr = new int(10); // Memory allocation
    cout << “Value: ” << *ptr << endl; // Pointer dereferencing
    delete ptr; // Memory freeing
    return 0;
}

Standard Template Library (STL)

  • Exploring standard containers and algorithms in C++ for working with data collections.
  • Introduction to containers such as vectors (vector), sets (set), lists (list), maps (map).

Example:

    #include <iostream>
    #include <vector>
    using namespace std;

    int main() {
        vector<int> numbers = {1, 2, 3, 4, 5};
        for (int num : numbers) {
            cout << num << “ ”;
        }
        cout << endl;
        return 0;
    }

What you will get after completing the course:

  • Ability to work with classes and objects, design data structures using OOP.
  • A deep understanding of inheritance and polymorphism, which allow you to create flexible and extensible programs.
  • Skills in operator overloading to improve code readability and functionality.
  • Experience with pointers and dynamic memory allocation.
  • Knowledge of using STL to work efficiently with data in real projects.

Course fee: 250 $.

The post Intermediate Level Course: “Object Oriented Programming (OOP) in C++” appeared first on VittorOmeo.

]]>
A Course for Beginners: “C++ Fundamentals”. https://vittorioromeo.info/a-course-for-beginners-c-fundamentals/ Fri, 09 Mar 2018 18:21:00 +0000 https://vittorioromeo.info/?p=29 This course is intended for those who are just starting to learn C++ programming. You will get acquainted with the basics of C++ syntax, learn …

The post A Course for Beginners: “C++ Fundamentals”. appeared first on VittorOmeo.

]]>
This course is intended for those who are just starting to learn C++ programming. You will get acquainted with the basics of C++ syntax, learn to work with variables, data types, operators, loops and functions. The course program includes many practical assignments so that you can immediately apply what you’ve learned in real-world situations.

Course topics:

Introduction to C++

  • Getting acquainted with C++ language: history, peculiarities and spheres of application.
  • Installing and customizing a development environment (e.g. Visual Studio, Code::Blocks, or CLion).
  • C++ program structure: how a basic program looks like and how to compile code.

Example code:

#include <iostream>
using namespace std;

int main() {
    cout << “Hello, World!” << endl;
    return 0;
}

Variables and data types

  • Basic data types in C++: int, double, char, bool, string.
  • Declaration and initialization of variables.

Example:

int age = 25; // Variable of integer type
double price = 19.99; // Floating-point variable
char grade = 'A'; // Character variable
bool is_student = true; // Boolean variable
string name = “John”; // String variable

Conditional operators and loops

  • Using the if statement to make decisions.
  • Switch operator for choosing between several options.
  • For, while, do-while cycles for repeating actions.
  • Example with if-else and for loop:
int number = 10;
if (number > 0) {
    cout << “Positive number” << endl;
} else {
    cout << “Negative number or zero” << endl;
}

for (int i = 1; i <= 5; ++i) {
    cout << “Iteration ” << i << endl;
}

I/O Basics

  • How to get data from the user using cin.
  • How to display data on the screen using cout.

Example:

int number;
cout << “Enter a number: ”;
cin >> number;
cout << “You entered: ” << number << endl;

Simple C++ programs

  • Writing small programs to consolidate theoretical knowledge.

Examples:

A program to calculate the sum of two numbers:

int num1, num2;
cout << “Enter first number: ”; cin >> num1;
cout << “Enter second number: ”; cin >> num2;
cout << “The sum is: ” << (num1 + num2) << endl;

Program to determine the parity of a number:

        int number;
        cout << “Enter a number: ”;
        cin >> number;
        if (number % 2 == 0) {
            cout << “Even number” << endl;
        } else {
            cout << “Odd number” << endl;
        }

What you will get after completing the course:

  • An understanding of C++ program syntax and structure.
  • Ability to write simple programs that solve basic problems.
  • Experience in working with data input/output, conditional operators and loops.
  • Fundamentals of development using C++ for subsequent more advanced courses.

Cost of the course: $100

The post A Course for Beginners: “C++ Fundamentals”. appeared first on VittorOmeo.

]]>