C++ Вопрос Как вычислить расстояние по координатной плоскости

Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2021
Сообщения
117
Реакции[?]
11
Поинты[?]
6K
есть карта по горизонтали от A до M и по вертикали от 1 до 13, каждый квадрат пусть будет 300 метров, через чатгпт начирикал код снизу, но загвоздка в том, что в каждом таком квадрате есть более мелкие квадраты(в данном случае каждый по 100 метров).
мне нужно например стрелять из точки A1 3 в C3 8 и узнать расстояние между этими двумя точками
вопрос собственно в том, как это реализовать?

1714830458256.png

Готовое решение:
#include <iostream>
#include <cmath>
#include <string>
#include <locale>

// Структура для хранения координат
struct Coordinate {
    char column;
    int row;
    int subSquare;
};

// Функция для вычисления расстояния между двумя квадратами
double calculateDistance(const Coordinate& coord1, const Coordinate& coord2, int largeSquareSize) {
    // Конвертация координат из формата квадратов в метры
    int coord1X = (coord1.column - 'A') * largeSquareSize + ((coord1.subSquare - 1) % 3) * (largeSquareSize / 3);
    int coord1Y = (coord1.row - 1) * largeSquareSize + ((coord1.subSquare - 1) / 3) * (largeSquareSize / 3);

    int coord2X = (coord2.column - 'A') * largeSquareSize + ((coord2.subSquare - 1) % 3) * (largeSquareSize / 3);
    int coord2Y = (coord2.row - 1) * largeSquareSize + ((coord2.subSquare - 1) / 3) * (largeSquareSize / 3);

    // Вычисление расстояния
    int deltaX = coord2X - coord1X;
    int deltaY = coord2Y - coord1Y;
    return std::sqrt(deltaX * deltaX + deltaY * deltaY);
}

// Функция для преобразования буквенно-цифровых координат в числовые координаты
Coordinate parseCoordinate(const std::string& coordinateString) {
    Coordinate result;
    result.column = coordinateString[0];
    size_t spacePos = coordinateString.find(' ');
    result.row = std::atoi(coordinateString.substr(1, spacePos - 1).c_str());
    result.subSquare = std::atoi(coordinateString.substr(spacePos + 1).c_str());
    return result;
}

int main() {
    setlocale(LC_ALL, "Russian");
    int mapSizeChoice = 0;
    int largeSquareSize = 0;
    bool mapSizeChosen = false;

    while (true) {
        // Проверка, был ли уже выбран размер карты
        if (!mapSizeChosen) {
            // Ввод выбора размера карты, если он ещё не был выбран
            std::cout << "Выберите размер карты:\n";
            std::cout << "1. 1 км (квадрат 75 метров)\n";
            std::cout << "2. 2 км (квадрат 150 метров)\n";
            std::cout << "3. 4 км (квадрат 300 метров)\n";
            std::cin >> mapSizeChoice;

            switch (mapSizeChoice) {
            case 1:
                largeSquareSize = 75;
                break;
            case 2:
                largeSquareSize = 150;
                break;
            case 3:
                largeSquareSize = 300;
                break;
            default:
                std::cerr << "Неверный выбор. Используется размер карты по умолчанию: 2 км\n";
                largeSquareSize = 150;
                break;
            }

            // Установка флага, что размер карты был выбран
            mapSizeChosen = true;

            // Очистка входного потока
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }

        // Ввод координат точек
        std::string coord1Str, coord2Str;
        std::cout << "Введите координаты первой точки (например, A1 4): ";
        std::getline(std::cin, coord1Str);
        std::cout << "Введите координаты второй точки (например, C7 8): ";
        std::getline(std::cin, coord2Str);

        Coordinate coord1 = parseCoordinate(coord1Str);
        Coordinate coord2 = parseCoordinate(coord2Str);

        double distance = calculateDistance(coord1, coord2, largeSquareSize);
        std::cout << "Расстояние между точками: " << distance << " метров" << std::endl;

        char choice;
        std::cout << "Желаете продолжить? (Y/N): ";
        std::cin >> choice;

        if (choice != 'Y' && choice != 'y') {
            break; // Выход из программы
        }

        // Очистка входного потока
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }

    return 0;
}
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
3 Май 2021
Сообщения
256
Реакции[?]
46
Поинты[?]
38K
есть карта по горизонтали от A до M и по вертикали от 1 до 13, каждый квадрат пусть будет 300 метров, через чатгпт начирикал код снизу, но загвоздка в том, что в каждом таком квадрате есть более мелкие квадраты(в данном случае каждый по 100 метров).
мне нужно например стрелять из точки A1 3 в C3 8 и узнать расстояние между этими двумя точками
вопрос собственно в том, как это реализовать?

Посмотреть вложение 276093

C++:
#include <iostream>
#include <cmath>

// Структура для хранения координат
struct Coordinate {
    char column;
    int row;
};

// Функция для вычисления расстояния между двумя квадратами
double calculateDistance(const Coordinate& square1, const Coordinate& square2) {
    int deltaX = abs(square2.column - square1.column);
    int deltaY = abs(square2.row - square1.row);
    return std::sqrt(deltaX * deltaX + deltaY * deltaY) * 300.0; // Умножаем на 300 метров
}

// Функция для преобразования буквенно-цифровых координат в числовые координаты
Coordinate parseCoordinate(const std::string& coordinateString) {
    Coordinate result;
    result.column = coordinateString[0];
    result.row = std::atoi(coordinateString.substr(1).c_str());
    return result;
}

int main() {
    std::string square1Str, square2Str;
    std::cout << "Введите координаты первого квадрата (например, A1): ";
    std::cin >> square1Str;
    std::cout << "Введите координаты второго квадрата (например, F9): ";
    std::cin >> square2Str;

    Coordinate square1 = parseCoordinate(square1Str);
    Coordinate square2 = parseCoordinate(square2Str);

    double distance = calculateDistance(square1, square2);
    std::cout << "Расстояние между квадратами: " << distance << " метров" << std::endl;

    return 0;
}
Ваш код уже хорошо работает для больших квадратов размером 300 метров. Однако, если вы хотите учесть более мелкие квадраты внутри каждого большого квадрата, вам потребуется немного модифицировать ваш код.
Во-первых, вам нужно будет добавить дополнительные координаты для мелких квадратов. Это можно сделать, добавив еще два поля в вашу структуру Coordinate:
struct Coordinate {
char column;
int row;
int subColumn; // Добавлено
int subRow; // Добавлено
};

Во-вторых, вам нужно будет адаптировать функцию calculateDistance, чтобы она учитывала эти дополнительные координаты. Вот как это может выглядеть:
double calculateDistance(const Coordinate& square1, const Coordinate& square2) {
int deltaX = abs(square2.column - square1.column) * 3 + abs(square2.subColumn - square1.subColumn);
int deltaY = abs(square2.row - square1.row) * 3 + abs(square2.subRow - square1.subRow);
return std::sqrt(deltaX * deltaX + deltaY * deltaY) * 100.0; // Умножаем на 100 метров
}

Обратите внимание, что мы умножаем разницу между большими координатами на 3, чтобы учесть то, что каждый большой квадрат состоит из 3 мелких квадратов. Затем мы добавляем разницу между мелкими координатами. В конце мы умножаем результат на 100 метров, так как каждый мелкий квадрат имеет размер 100 метров.
Наконец, вам нужно будет модифицировать функцию parseCoordinate, чтобы она могла разбирать дополнительные координаты из входной строки. Вот пример того, как это может быть реализовано:
Coordinate parseCoordinate(const std::string& coordinateString) {
Coordinate result;
result.column = coordinateString[0];
result.row = std::atoi(coordinateString.substr(1, coordinateString.find(' ') - 1).c_str());
result.subColumn = std::atoi(coordinateString.substr(coordinateString.find(' ') + 1, coordinateString.find(' ', coordinateString.find(' ') + 1) - coordinateString.find(' ') - 1).c_str());
result.subRow = std::atoi(coordinateString.substr(coordinateString.find(' ', coordinateString.find(' ') + 1) + 1).c_str());
return result;
}

Эта функция теперь ожидает, что входная строка будет иметь формат “A1 3”, где “A1” - это координаты большого квадрата, а “3” - это координаты мелкого квадрата внутри большого квадрата.
Надеюсь, это поможет! Если у вас есть еще вопросы, не стесняйтесь задавать.
 
Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2021
Сообщения
117
Реакции[?]
11
Поинты[?]
6K
Ваш код уже хорошо работает для больших квадратов размером 300 метров. Однако, если вы хотите учесть более мелкие квадраты внутри каждого большого квадрата, вам потребуется немного модифицировать ваш код.
Во-первых, вам нужно будет добавить дополнительные координаты для мелких квадратов. Это можно сделать, добавив еще два поля в вашу структуру Coordinate:
struct Coordinate {
char column;
int row;
int subColumn; // Добавлено
int subRow; // Добавлено
};

Во-вторых, вам нужно будет адаптировать функцию calculateDistance, чтобы она учитывала эти дополнительные координаты. Вот как это может выглядеть:
double calculateDistance(const Coordinate& square1, const Coordinate& square2) {
int deltaX = abs(square2.column - square1.column) * 3 + abs(square2.subColumn - square1.subColumn);
int deltaY = abs(square2.row - square1.row) * 3 + abs(square2.subRow - square1.subRow);
return std::sqrt(deltaX * deltaX + deltaY * deltaY) * 100.0; // Умножаем на 100 метров
}

Обратите внимание, что мы умножаем разницу между большими координатами на 3, чтобы учесть то, что каждый большой квадрат состоит из 3 мелких квадратов. Затем мы добавляем разницу между мелкими координатами. В конце мы умножаем результат на 100 метров, так как каждый мелкий квадрат имеет размер 100 метров.
Наконец, вам нужно будет модифицировать функцию parseCoordinate, чтобы она могла разбирать дополнительные координаты из входной строки. Вот пример того, как это может быть реализовано:
Coordinate parseCoordinate(const std::string& coordinateString) {
Coordinate result;
result.column = coordinateString[0];
result.row = std::atoi(coordinateString.substr(1, coordinateString.find(' ') - 1).c_str());
result.subColumn = std::atoi(coordinateString.substr(coordinateString.find(' ') + 1, coordinateString.find(' ', coordinateString.find(' ') + 1) - coordinateString.find(' ') - 1).c_str());
result.subRow = std::atoi(coordinateString.substr(coordinateString.find(' ', coordinateString.find(' ') + 1) + 1).c_str());
return result;
}

Эта функция теперь ожидает, что входная строка будет иметь формат “A1 3”, где “A1” - это координаты большого квадрата, а “3” - это координаты мелкого квадрата внутри большого квадрата.
Надеюсь, это поможет! Если у вас есть еще вопросы, не стесняйтесь задавать.
кто мне чатгпт в югейм засунул
Ваш код уже хорошо работает для больших квадратов размером 300 метров. Однако, если вы хотите учесть более мелкие квадраты внутри каждого большого квадрата, вам потребуется немного модифицировать ваш код.
Во-первых, вам нужно будет добавить дополнительные координаты для мелких квадратов. Это можно сделать, добавив еще два поля в вашу структуру Coordinate:
struct Coordinate {
char column;
int row;
int subColumn; // Добавлено
int subRow; // Добавлено
};

Во-вторых, вам нужно будет адаптировать функцию calculateDistance, чтобы она учитывала эти дополнительные координаты. Вот как это может выглядеть:
double calculateDistance(const Coordinate& square1, const Coordinate& square2) {
int deltaX = abs(square2.column - square1.column) * 3 + abs(square2.subColumn - square1.subColumn);
int deltaY = abs(square2.row - square1.row) * 3 + abs(square2.subRow - square1.subRow);
return std::sqrt(deltaX * deltaX + deltaY * deltaY) * 100.0; // Умножаем на 100 метров
}

Обратите внимание, что мы умножаем разницу между большими координатами на 3, чтобы учесть то, что каждый большой квадрат состоит из 3 мелких квадратов. Затем мы добавляем разницу между мелкими координатами. В конце мы умножаем результат на 100 метров, так как каждый мелкий квадрат имеет размер 100 метров.
Наконец, вам нужно будет модифицировать функцию parseCoordinate, чтобы она могла разбирать дополнительные координаты из входной строки. Вот пример того, как это может быть реализовано:
Coordinate parseCoordinate(const std::string& coordinateString) {
Coordinate result;
result.column = coordinateString[0];
result.row = std::atoi(coordinateString.substr(1, coordinateString.find(' ') - 1).c_str());
result.subColumn = std::atoi(coordinateString.substr(coordinateString.find(' ') + 1, coordinateString.find(' ', coordinateString.find(' ') + 1) - coordinateString.find(' ') - 1).c_str());
result.subRow = std::atoi(coordinateString.substr(coordinateString.find(' ', coordinateString.find(' ') + 1) + 1).c_str());
return result;
}

Эта функция теперь ожидает, что входная строка будет иметь формат “A1 3”, где “A1” - это координаты большого квадрата, а “3” - это координаты мелкого квадрата внутри большого квадрата.
Надеюсь, это поможет! Если у вас есть еще вопросы, не стесняйтесь задавать.
не работает
 
Начинающий
Статус
Онлайн
Регистрация
13 Май 2023
Сообщения
144
Реакции[?]
26
Поинты[?]
26K
есть карта по горизонтали от A до M и по вертикали от 1 до 13, каждый квадрат пусть будет 300 метров, через чатгпт начирикал код снизу, но загвоздка в том, что в каждом таком квадрате есть более мелкие квадраты(в данном случае каждый по 100 метров).
мне нужно например стрелять из точки A1 3 в C3 8 и узнать расстояние между этими двумя точками
вопрос собственно в том, как это реализовать?

Посмотреть вложение 276093

C++:
#include <iostream>
#include <cmath>

// Структура для хранения координат
struct Coordinate {
    char column;
    int row;
};

// Функция для вычисления расстояния между двумя квадратами
double calculateDistance(const Coordinate& square1, const Coordinate& square2) {
    int deltaX = abs(square2.column - square1.column);
    int deltaY = abs(square2.row - square1.row);
    return std::sqrt(deltaX * deltaX + deltaY * deltaY) * 300.0; // Умножаем на 300 метров
}

// Функция для преобразования буквенно-цифровых координат в числовые координаты
Coordinate parseCoordinate(const std::string& coordinateString) {
    Coordinate result;
    result.column = coordinateString[0];
    result.row = std::atoi(coordinateString.substr(1).c_str());
    return result;
}

int main() {
    std::string square1Str, square2Str;
    std::cout << "Введите координаты первого квадрата (например, A1): ";
    std::cin >> square1Str;
    std::cout << "Введите координаты второго квадрата (например, F9): ";
    std::cin >> square2Str;

    Coordinate square1 = parseCoordinate(square1Str);
    Coordinate square2 = parseCoordinate(square2Str);

    double distance = calculateDistance(square1, square2);
    std::cout << "Расстояние между квадратами: " << distance << " метров" << std::endl;

    return 0;
}
Я одного не пойму, для чего узнавать по квадратам?
ГПТ дал по сути готовое решение.
Какой должен быть итоговый результат?
 
Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2021
Сообщения
117
Реакции[?]
11
Поинты[?]
6K
Я одного не пойму, для чего узнавать по квадратам?
ГПТ дал по сути готовое решение.
Какой должен быть итоговый результат?
мне нужно узнать расстояние не только от больших квадратов, т.к. например я нахожусь в A1 3 и если стрелять в C3 8, то расстояние получится не точным. например: если стрелять из A1 2 в D7 2, то ответ будет верный, но если будет A1 2 до D7 8, то ответ уже не будет таким точным
из чего следует вывод: нужно учитывать мелкие квадраты внутри больших чтобы узнать точное расстояние
 
Эксперт
Статус
Оффлайн
Регистрация
29 Мар 2021
Сообщения
1,584
Реакции[?]
600
Поинты[?]
39K
есть карта по горизонтали от A до M и по вертикали от 1 до 13, каждый квадрат пусть будет 300 метров, через чатгпт начирикал код снизу, но загвоздка в том, что в каждом таком квадрате есть более мелкие квадраты(в данном случае каждый по 100 метров).
мне нужно например стрелять из точки A1 3 в C3 8 и узнать расстояние между этими двумя точками
вопрос собственно в том, как это реализовать?

Посмотреть вложение 276093

C++:
#include <iostream>
#include <cmath>

// Структура для хранения координат
struct Coordinate {
    char column;
    int row;
};

// Функция для вычисления расстояния между двумя квадратами
double calculateDistance(const Coordinate& square1, const Coordinate& square2) {
    int deltaX = abs(square2.column - square1.column);
    int deltaY = abs(square2.row - square1.row);
    return std::sqrt(deltaX * deltaX + deltaY * deltaY) * 300.0; // Умножаем на 300 метров
}

// Функция для преобразования буквенно-цифровых координат в числовые координаты
Coordinate parseCoordinate(const std::string& coordinateString) {
    Coordinate result;
    result.column = coordinateString[0];
    result.row = std::atoi(coordinateString.substr(1).c_str());
    return result;
}

int main() {
    std::string square1Str, square2Str;
    std::cout << "Введите координаты первого квадрата (например, A1): ";
    std::cin >> square1Str;
    std::cout << "Введите координаты второго квадрата (например, F9): ";
    std::cin >> square2Str;

    Coordinate square1 = parseCoordinate(square1Str);
    Coordinate square2 = parseCoordinate(square2Str);

    double distance = calculateDistance(square1, square2);
    std::cout << "Расстояние между квадратами: " << distance << " метров" << std::endl;

    return 0;
}
естественно ёпта, atoi не для того придуман
 
Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2021
Сообщения
117
Реакции[?]
11
Поинты[?]
6K
просто забей на точность 100% немного не точности сойдет какая разница
стреляю с миномёта на 800 метров, вместо 950, как тут не будет разницы?
естественно ёпта, atoi не для того придуман
нуэтоинеяписал, этот код рабочий но только большие квадраты правильно считает, а как точнее писать (с использованием маленьких квадратов) я хз

могу скинуть что получилось с маленькими квадратами, там формулы разные, по разному пробовал, но все не правильно
 
На самом деле я Zodiak
Участник
Статус
Оффлайн
Регистрация
22 Дек 2020
Сообщения
1,005
Реакции[?]
181
Поинты[?]
68K
позицию получи свою и цели и посчитай нахуй ты квадраты мучаешь
 
Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2021
Сообщения
117
Реакции[?]
11
Поинты[?]
6K
позицию получи свою и цели и посчитай нахуй ты квадраты мучаешь
ну и как посчитать то? я это и хочу узнать и через консоль узнавать расстояния автоматом, зная свою позицию и врага
 
На самом деле я Zodiak
Участник
Статус
Оффлайн
Регистрация
22 Дек 2020
Сообщения
1,005
Реакции[?]
181
Поинты[?]
68K
ну и как посчитать то? я это и хочу узнать и через консоль узнавать расстояния автоматом, зная свою позицию и врага

C++:
struct vec3
{
float x,y,z;
float distance(vec3 v)
{
return sqrtf( (v.x - x)*(v.x - x) + (v.y - y)*(v.y - y) + (v.z - z)*(v.z - z));
}
};
 
Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2021
Сообщения
117
Реакции[?]
11
Поинты[?]
6K
C++:
struct vec3
{
float x,y,z;
float distance(vec3 v)
{
return sqrtf( (v.x - x)*(v.x - x) + (v.y - y)*(v.y - y) + (v.z - z)*(v.z - z));
}
};
извини но я хз как это сделать через формат который я буду вводить по типу: из A1 3 в C7 4
я додумался только через веб сайт это сделать, типа x и y позиции куда я буду кликать мышкой ( по карте ) и так высчитывать расстояние, но это только теория, на практике не смогу сделатб
не подумай что гоню на тебя и заставляю помочь, просто говорю как естб
C++:
struct vec3
{
float x,y,z;
float distance(vec3 v)
{
return sqrtf( (v.x - x)*(v.x - x) + (v.y - y)*(v.y - y) + (v.z - z)*(v.z - z));
}
};
есть кстати такой калькулятор чей-то, но он почему-то только по горизонтали вправо абсолютно верно высчитывает расстояние, в других направлениях всё плохо
Пожалуйста, авторизуйтесь для просмотра ссылки.
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
3 Май 2021
Сообщения
256
Реакции[?]
46
Поинты[?]
38K
Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2021
Сообщения
117
Реакции[?]
11
Поинты[?]
6K
больше снаряд засунь и вопрос решен пусть сносит все в ближайшие 200 метров
куда ещё больше снаряд, я такие ещё истратил в 45г. на зачистку логова урбанички
 
Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2021
Сообщения
117
Реакции[?]
11
Поинты[?]
6K
Недавно же вышла вот gpt4omi, через неё 1 раз пробил и всё заработало, спасибо за ответы


C++:
#include <iostream>
#include <cmath>
#include <string>
#include <locale>

// Структура для хранения координат
struct Coordinate {
    char column;
    int row;
    int subSquare;
};

// Функция для вычисления расстояния между двумя квадратами
double calculateDistance(const Coordinate& coord1, const Coordinate& coord2, int largeSquareSize) {
    // Конвертация координат из формата квадратов в метры
    int coord1X = (coord1.column - 'A') * largeSquareSize + ((coord1.subSquare - 1) % 3) * (largeSquareSize / 3);
    int coord1Y = (coord1.row - 1) * largeSquareSize + ((coord1.subSquare - 1) / 3) * (largeSquareSize / 3);

    int coord2X = (coord2.column - 'A') * largeSquareSize + ((coord2.subSquare - 1) % 3) * (largeSquareSize / 3);
    int coord2Y = (coord2.row - 1) * largeSquareSize + ((coord2.subSquare - 1) / 3) * (largeSquareSize / 3);

    // Вычисление расстояния
    int deltaX = coord2X - coord1X;
    int deltaY = coord2Y - coord1Y;
    return std::sqrt(deltaX * deltaX + deltaY * deltaY);
}

// Функция для преобразования буквенно-цифровых координат в числовые координаты
Coordinate parseCoordinate(const std::string& coordinateString) {
    Coordinate result;
    result.column = coordinateString[0];
    size_t spacePos = coordinateString.find(' ');
    result.row = std::atoi(coordinateString.substr(1, spacePos - 1).c_str());
    result.subSquare = std::atoi(coordinateString.substr(spacePos + 1).c_str());
    return result;
}

int main() {
    setlocale(LC_ALL, "Russian");
    int mapSizeChoice = 0;
    int largeSquareSize = 0;
    bool mapSizeChosen = false;

    while (true) {
        // Проверка, был ли уже выбран размер карты
        if (!mapSizeChosen) {
            // Ввод выбора размера карты, если он ещё не был выбран
            std::cout << "Выберите размер карты:\n";
            std::cout << "1. 1 км (квадрат 75 метров)\n";
            std::cout << "2. 2 км (квадрат 150 метров)\n";
            std::cout << "3. 4 км (квадрат 300 метров)\n";
            std::cin >> mapSizeChoice;

            switch (mapSizeChoice) {
            case 1:
                largeSquareSize = 75;
                break;
            case 2:
                largeSquareSize = 150;
                break;
            case 3:
                largeSquareSize = 300;
                break;
            default:
                std::cerr << "Неверный выбор. Используется размер карты по умолчанию: 2 км\n";
                largeSquareSize = 150;
                break;
            }

            // Установка флага, что размер карты был выбран
            mapSizeChosen = true;

            // Очистка входного потока
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
        }

        // Ввод координат точек
        std::string coord1Str, coord2Str;
        std::cout << "Введите координаты первой точки (например, A1 4): ";
        std::getline(std::cin, coord1Str);
        std::cout << "Введите координаты второй точки (например, C7 8): ";
        std::getline(std::cin, coord2Str);

        Coordinate coord1 = parseCoordinate(coord1Str);
        Coordinate coord2 = parseCoordinate(coord2Str);

        double distance = calculateDistance(coord1, coord2, largeSquareSize);
        std::cout << "Расстояние между точками: " << distance << " метров" << std::endl;

        char choice;
        std::cout << "Желаете продолжить? (Y/N): ";
        std::cin >> choice;

        if (choice != 'Y' && choice != 'y') {
            break; // Выход из программы
        }

        // Очистка входного потока
        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    }

    return 0;
}
 
Последнее редактирование:
Сверху Снизу