- BrainTools - https://www.braintools.ru -

Когда машины пишут лучше нас — звучит как сюжет научной фантастики, но уже сегодня нейросети стали реальностью миллионов кодеров по всему миру. Сегодня мы не просто учим алгоритмы понимать код, а доверяем им писать его за нас.
Всё чаще ИИ даёт советы, которые оказываются лучше, чем изначальная задумка. Claude, ChatGPT, Qwen — эти модели уже не просто угадывают следующее слово, а демонстрируют понимание логики, стиля и даже контекста проекта. Они объясняют свои решения, исправляют баги, пишут тесты и даже помогают новичкам (и не только) разобраться в чужом коде.
Но кто из них действительно выигрывает в скорости, точности и глубине понимания? Кто понимает код от и до, а кто путается уже в середине? И главное — можно ли доверять коду, написанному нейросетью?
Пора разобраться. Сравниваем трёх гигантов современного AI-программирования: Claude от Anthropic, ChatGPT от OpenAI и Qwen от Alibaba Cloud — в реальных сценариях, которые знакомы каждому разработчику.
Приятного прочтения!
Мы создадим простой консольный калькулятор на C++ — минималистичный, но с полным набором базовых операций: сложение, вычитание, умножение и деление. Приложение будет поддерживать ввод с клавиатуры, обработку ошибок (например, деление на ноль) и цикл выполнения, чтобы пользователь мог выполнять несколько операций подряд без перезапуска.
Код должен быть чистым, читаемым, включать комментарии и, по возможности, разделять логику [1] на функции. Эти критерии позволят нам оценить, насколько хорошо каждая модель понимает не только синтаксис, но и архитектуру, реализует безопасность и удобство кода.
Приложение не будет перегружено сложными фичами — нам важно проверить, как ИИ справляется с базовыми задачами, которые знакомы каждому программисту. Ведь именно от качества выполнения простых вещей часто зависит надёжность всей системы.
Наш промпт будет таким:
>>> Напиши простое консольное приложение на C++ — калькулятор, который выполняет четыре базовые арифметические операции: сложение, вычитание, умножение и деление. Используй С++ без сторонних библиотек.
Если вы тоже хотите попробовать какую-то модель из моего обзора, то переходите по этой ссылке [2] и пользуйтесь не только ими, но и многими другими нейросетями без использования VPN.
Самый длинный код написала нейросеть Claude Sonnet 4 — вышло 122 строки кода.
Калькулятор получился довольно удобный, не нужно запускать заново для нового вычисления (да-да, такое здесь будет), поддерживает все операции, которые описаны в промпте. Есть обработчик ошибок при делении на ноль или неверном вводе.

Разбор кода
Claude подключил две библиотеки: iostream и limits.
<iostream> — стандартная библиотека для ввода/вывода (cin, cout);
<limits> — нужна для доступа к numeric_limits, чтобы очистить буфер ввода.
void clearInputBuffer() {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), 'n');
}
Если пользователь ввёл что-то не то (например, буквы вместо числа), cin «ломается» — устанавливается флаг ошибки [3].
double getNumber(const string& prompt) {
double number;
while (true) {
cout << prompt;
if (cin >> number) {
break;
}
else {
cout << "Ошибка: введите корректное число!" << endl;
clearInputBuffer();
}
}
return number;
}
Данная функция запрашивает у пользователя число до тех пор, пока ввод не станет корректным, иначе — выводит ошибку.
char getOperation() {
char operation;
while (true) {
cout << "Введите операцию (+, -, *, /): ";
cin >> operation;
if (operation == '+' || operation == '-' ||
operation == '*' || operation == '/') {
break;
}
else {
cout << "Ошибка: введите корректную операцию (+, -, *, /)!" << endl;
clearInputBuffer();
}
}
return operation;
}
Здесь вводится одна из четырёх операций, проверяется, что символ допустимый, и возвращается правильный символ операции.
double calculate(double num1, double num2, char operation) {
switch (operation) {
case '+':
return num1 + num2;
case '-':
return num1 - num2;
case '*':
return num1 * num2;
case '/':
if (num2 != 0) {
return num1 / num2;
}
else {
cout << "Ошибка: деление на ноль!" << endl;
return 0;
}
default:
cout << "Ошибка: неизвестная операция!" << endl;
return 0;
}
}
Функция 1) выполняет арифметическую операцию в зависимости от символа, 2) проверяет, не делится ли на ноль, 3) при неизвестной операции выводит ошибку и 4) возвращает результат.
int main() {
cout << "=== Простой калькулятор ===" << endl;
cout << "Поддерживаемые операции: +, -, *, /" << endl;
cout << "Для выхода введите 'q' в любой момент" << endl << endl;
Вначале нас информируют о всех функциях калькулятора, НО… калькулятор предлагает ввести q для выхода из него, а данной команды нет в коде — она обрабатывается как ошибка.

char continueChoice;
do {
// Ввод первого числа
double num1 = getNumber("Введите первое число: ");
// Ввод операции
char operation = getOperation();
// Ввод второго числа
double num2 = getNumber("Введите второе число: ");
// Выполнение вычисления
if (operation == '/' && num2 == 0) {
cout << "Результат: Невозможно выполнить деление на ноль!" << endl;
}
else {
double result = calculate(num1, num2, operation);
cout << "Результат: " << num1 << " " << operation << " "
<< num2 << " = " << result << endl;
}
Здесь происходит ввод двух чисел и ещё одна проверка деления на ноль до вызова функции calculate(). Она лишняя, так как calculate() уже этим занимается.
while (true) {
cout << "Хотите выполнить еще одно вычисление? (y/n): ";
cin >> continueChoice;
if (continueChoice == 'y' continueChoice == 'Y'
continueChoice == 'n' || continueChoice == 'N') {
break;
}
else {
cout << "Введите 'y' для продолжения или 'n' для выхода." << endl;
clearInputBuffer();
}
}
cout << endl;
} while (continueChoice == 'y' || continueChoice == 'Y');
cout << "Спасибо за использование калькулятора!" << endl;
return 0;
Калькулятор спрашивает, хочет ли пользователь продолжить пользоваться калькулятором, принимает Y/N и либо продолжает цикл, либо завершает программу.
После самого длинного кода идёт самый короткий, написанный ChatGPT 5.
Получилось так себе из-за того, что после каждого вычисления приложение завершало свою работу, поэтому приходилось для всех операций открывать приложение заново.
Здесь можно сразу ввести нужное выражение, без отдельного выбора первого/второго числа и математического знака. Насколько оно удобно — решает каждый сам для себя, но мне больше нравится вариант ввода, который предоставили Claude Sonnet 4 и Qwen3 Coder.



Разбор кода
Начинается всё с приветствия и небольшой инструкции к приложению:
int main() {
std::cout << "Простой калькулятор (+, -, *, /)n";
std::cout << "Введите выражение в формате: a op bn";
std::cout << "Пример: 12.5 * 3n";
Объявляет переменные, пытается считать с консоли верный ввод, иначе выдаёт ошибку.
double a, b;
char op;
if (!(std::cin >> a >> op >> b)) {
std::cerr << "Ошибка ввода.n";
return 1;
}
Появляется переменная результата и начинается switch, который проверяет, что за операция была введена.
double result;
switch (op) {
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;
case '*':
result = a * b;
break;
При делении появляется проверка второй переменной — не является ли она нулём.
case '/':
if (b == 0.0) {
std::cerr << "Ошибка: деление на ноль.n";
return 1;
}
result = a / b;
break;
Если никакая операция не подошла, то выводит ошибку.
default:
std::cerr << "Неизвестная операция: " << op << "n";
return 1;
}
Вывод результата.
std::cout << "Результат: " << result << "n";
return 0;
}
И последняя нейросеть на рассмотрении у нас — Qwen3 Coder.
Имеет 62 строки кода. Так же как и калькулятор от ChatGPT 5, приходится запускать заново для новой операции.



Разбор кода
Qwen начинает писать код с объявления переменных: два дробных числа для операций, одно для результата и символ самой операции.
int main() {
double num1, num2, result;
char operation;
Выводится текст и запрашивается первое число через оператор cin.
cout << "Простой калькуляторn";
cout << "Введите первое число: ";
cin >> num1;
cin.fail [4]() — проверяет, был ли ввод корректным (например, если пользователь вместо числа ввёл букву).
Если ввод некорректен, выводится ошибка и программа завершается с кодом 1 (стандартный код ошибки).
// Проверка на корректность ввода числа
if (cin.fail()) {
cout << "Ошибка: Введено некорректное значение.n";
return 1;
}
Дальше идёт то же самое, но с вводом операции и вторым числом.
При вводе операции, если пользователь введёт несколько символов для операции (например, ++), будет обработан только первый символ (+), остальные останутся в буфере. Однако это некритично, так как следующий ввод (num2) пропустит лишние пробелы/символы.
cout << "Введите операцию (+, -, *, /): ";
cin >> operation;
cout << "Введите второе число: ";
cin >> num2;
// Проверка на корректность ввода числа
if (cin.fail()) {
cout << "Ошибка: Введено некорректное значение.n";
return 1;
}
И последний штрих — switch. Здесь происходят все вычисления, а также запрещается делить на ноль.
switch (operation) {
case '+':
result = num1 + num2;
cout << "Результат: " << num1 << " + " << num2 << " = " << result << endl;
break;
case '-':
result = num1 - num2;
cout << "Результат: " << num1 << " - " << num2 << " = " << result << endl;
break;
case '*':
result = num1 * num2;
cout << "Результат: " << num1 << " * " << num2 << " = " << result << endl;
break;
case '/':
if (num2 != 0) {
result = num1 / num2;
cout << "Результат: " << num1 << " / " << num2 << " = " << result << endl;
}
else {
cout << "Ошибка: Деление на ноль невозможно.n";
}
break;
default:
cout << "Ошибка: Неверная операция. Пожалуйста, используйте +, -, * или /.n";
break;
}
Когда мы просим разные ИИ-модели написать один и тот же код, мы получаем не просто разные реализации — мы видим разные идеи программирования, заложенные в их обучении [5]. Давайте глубже погрузимся в то, как Claude, ChatGPT и Qwen подходят к созданию кода, анализируя не только функциональность, но и качество написания.
Стиль программирования и структурные различия
Claude Sonnet 4 демонстрирует академический подход к коду с четким соблюдением принципов чистого кода и разделением ответственностей. Модель создает функции вроде getNumber и clearInputBuffer, но добавляет избыточные проверки вроде двойной обработки деления на ноль.
Такой подход идеален для образовательных проектов, где важна максимальная надежность и понятность кода, но может быть избыточным для простых утилит.
Claude Sonnet 4 создает полноценное приложение с архитектурой:
четкое разделение на функции;
обработка состояния приложения;
поддержка пользовательского сеанса;
цикл событий с возможностью выхода.
Это решение, которое можно смело включать в учебные материалы как пример хорошей структуры консольного приложения.
Вот как Sonnet 4 описал сгенерированный код:

ChatGPT 5 выбирает «трушный» C++-стиль, с использованием std::-префиксов и строгим следованием стандартам языка.
Модель генерирует компактный код без цикла выполнения, обрабатывающий только единичные операции без поддержки пользовательского сеанса.
ChatGPT предлагает алгоритмическую реализацию:
весь код в одной функции;
нет поддержки сеанса;
линейная обработка.
Решение скорее подходит как фрагмент кода для встраивания в другое приложение, чем как самостоятельный инструмент.
Qwen3 Coder использует «практичный» стиль программирования, объединяя всю логику в одной функции main() без излишней модульности, и обработка ввода и логика приложения переплетены в одном блоке.
Такой подход эффективен для быстрого прототипирования и простых утилит, но не подходит для сложных проектов, требующих поддержки и расширения.
Qwen занимает промежуточную позицию:
простая структура без дополнительных функций;
базовая обработка ошибок;
отсутствие поддержки сеанса.
Такой код напоминает тестовый проект, который написан для проверки работоспособности своей идеи.

Анализируя все три подхода, можно сделать несколько практических выводов:
Для образовательных целей — Claude вне конкуренции: его код можно давать новичкам как пример правильной структуры и обработки ошибок. Но естественно, могут быть ошибки, как в нашем примере — избыточность проверок.
Для быстрого прототипирования — Qwen идеален. Его код функционален, так как использует привычный интерфейс ввода (число, операция, число).
Для встраивания в другие проекты — ChatGPT выигрывает, благодаря своей лаконичности и чистому C++-стилю, без глобальных using.
Для production-ready-решений — Claude снова в лидерах, благодаря многоуровневой обработке ошибок и поддержке пользовательского сеанса.
Важно понимать: ни одна модель не «лучше» другой в абсолютном смысле: Claude перестраховывается, ChatGPT слишком минималистичен, Qwen слишком прост. Но именно эти различия делают их полезными в разных сценариях.
В мире, где ИИ становится нашим парным программистом, понимание этих различий поможет вам выбирать правильного «ассистента» для каждой конкретной задачи. Ведь иногда лучше иметь избыточный, но надежный код, а иногда критична скорость и минимализм.
Таблица для тех, кто не любит читать

Сравнив три ведущие модели для генерации кода в реальной задаче, мы обнаружили не просто технические различия, а принципиально разные идеи программирования, заложенные в их архитектуру. Нейросети хорошо справляются со своей задачей, на сегодняшний день они незаменимые помощники в области генерации кода и не только.
Тех, кто сегодня игнорирует ИИ-помощников, через год будут обгонять те, кто научился превращать запросы в готовые решения за минуты.
Если Вы считаете по-другому, или знаете более действенный способ генерации кода, то пишите в комментарии!
Спасибо за прочтение!
Автор: Morgothraw
Источник [6]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/18348
URLs in this post:
[1] логику: http://www.braintools.ru/article/7640
[2] по этой ссылке: https://bothub.chat/?invitedBy=m_aGCkuyTgqllHCK0dUc7
[3] ошибки: http://www.braintools.ru/article/4192
[4] cin.fail: http://cin.fail
[5] обучении: http://www.braintools.ru/article/5125
[6] Источник: https://habr.com/ru/companies/bothub/articles/937314/?utm_source=habrahabr&utm_medium=rss&utm_campaign=937314
Нажмите здесь для печати.