Сохранен 38
https://2ch.hk/b/res/321483733.html
Прошлые домены не функционирует! Используйте адрес ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Двочик, помоги мне пожалуйста с домашним заданием на лето. Основную часть программы без проблем напи

 Аноним 21/06/25 Суб 18:19:53 #1 №321483733 
изображение.png
изображение.png
Двочик, помоги мне пожалуйста с домашним заданием на лето. Основную часть программы без проблем написал, но вот ебучий ноль мне все портит. Из за него циклы вечно повторяются и я не понимаю как правильно написать программу чтобы все было красиво. Операторами if, if-else и тому подобными пользоваться нельзя. Только циклы и переменные.
Аноним 21/06/25 Суб 18:20:46 #2 №321483756 
bump
Аноним 21/06/25 Суб 18:21:42 #3 №321483785 
Бамп
Аноним 21/06/25 Суб 18:24:23 #4 №321483879 
Бамп! Где все наносеки когда они так нужны?
Аноним 21/06/25 Суб 18:25:13 #5 №321483910 
image.png
number = int(input("Введите целое число: "))
number = abs(number)

sum_digits = 0

for digit in str(number):
sum_digits += int(digit)

print("Сумма цифр:", sum_digits)
Аноним 21/06/25 Суб 18:26:23 #6 №321483946 
>>321483910
Вот на С++

#include <iostream>
#include <cstdlib> // Для std::abs

int main() {
int number;
std::cout << "Введите целое число: ";
std::cin >> number;
number = std::abs(number);
int sum = 0;
while (number > 0) {
sum += number % 10;
number /= 10;
}
std::cout << "Сумма цифр: " << sum << std::endl;
return 0;
}
Аноним 21/06/25 Суб 18:27:23 #7 №321483984 
>>321483946
Как то все замудренно тут. А можно на чистом C?
Аноним 21/06/25 Суб 18:28:42 #8 №321484029 
Bump
Аноним 21/06/25 Суб 18:29:49 #9 №321484060 
Анализ задачи:

Анону нужно написать программу на C, которая будет суммировать цифры целого числа, введенного пользователем. Пример: для числа 2155 сумма цифр будет 2 + 1 + 5 + 5 = 13. Важно, чтобы программа работала с любым целым числом, введенным пользователем.

Проблема анона:

Основная проблема анона заключается в том, что он не совсем понимает, как правильно реализовать цикл для этой задачи. Он написал код, но он, вероятно, не работает должным образом или не оптимален. Он упоминает, что ему не нравится if-else, и он хочет использовать только циклы. Это интересное ограничение, но для этой задачи циклы являются естественным выбором.

Разбор кода анона:

Давайте посмотрим на код анона:
Generated c


#include <stdio.h>

int main(void)
{
int number, n, b;

printf("Number? ");
scanf("%i", &number);

b = 0;
n = 1; // Эта инициализация переменной n, кажется, избыточна для данной задачи.

while (number == 0) { // Этот цикл обрабатывает только случай, когда введено число 0.
printf("Ноль!\n");
break;
}

while (number % 10 == 0) { // Этот цикл удаляет конечные нули. Это может быть нежелательно.
number /= 10;
}

while (n != 0) { // Этот цикл имеет потенциальную проблему.
n = number % 10; // Получаем последнюю цифру.
b = n + b; // Прибавляем к сумме.
number = number / 10; // Удаляем последнюю цифру.
}

printf("%i\n", b);
return 0;
}



IGNORE_WHEN_COPYING_START
Use code with caution. C
IGNORE_WHEN_COPYING_END

Проблемы в коде анона:

Обработка нуля: Цикл while (number == 0) корректно обрабатывает только случай ввода нуля. Если введено другое число, этот цикл пропускается.

Удаление конечных нулей: Цикл while (number % 10 == 0) удаляет конечные нули. Например, если введено 120, число станет 12. Это может быть не то, что требуется по условию (сумма цифр 120 = 1 + 2 + 0 = 3).

Условие завершения основного цикла: В основном цикле while (n != 0) условие завершения основано на переменной n. Переменная n получает значение number % 10. Когда number становится 0, n также становится 0, и цикл завершается. Однако, есть более прямой способ проверить, когда число полностью обработано.

Инициализация n: Переменная n инициализируется как 1, но затем сразу же используется для получения последней цифры. Это не совсем логично.

Предлагаемое решение:

Нам нужна программа, которая будет последовательно извлекать последнюю цифру числа, прибавлять ее к общей сумме, а затем удалять последнюю цифру из исходного числа, пока само число не станет равным нулю.

Вот более простое и логичное решение, которое использует только циклы:
Generated c


#include <stdio.h>

int main(void) {
int number; // Число, вводимое пользователем
int sum = 0; // Переменная для хранения суммы цифр
int digit; // Переменная для временного хранения извлеченной цифры

// Запрашиваем ввод числа у пользователя
printf("Введите целое число: ");
scanf("%d", &number); // Используем %d для чтения целых чисел

// Обработка отрицательных чисел: берем абсолютное значение
if (number < 0) {
number = -number;
}

// Особый случай: если введено число 0
if (number == 0) {
sum = 0; // Сумма цифр для 0 равна 0
} else {
// Цикл для извлечения и суммирования цифр
while (number > 0) {
// 1. Извлекаем последнюю цифру с помощью оператора остатка (%)
digit = number % 10;

// 2. Добавляем извлеченную цифру к общей сумме
sum = sum + digit;

// 3. Удаляем последнюю цифру из числа с помощью целочисленного деления (/)
number = number / 10;
}
}

// Выводим результат
printf("Сумма цифр числа равна: %d\n", sum);

return 0;
}



IGNORE_WHEN_COPYING_START
Use code with caution. C
IGNORE_WHEN_COPYING_END

Объяснение решения:

#include <stdio.h>: Включаем стандартную библиотеку ввода-вывода.

int main(void): Главная функция программы.

int number;: Объявляем переменную для хранения числа, введенного пользователем.

int sum = 0;: Объявляем переменную sum и инициализируем ее нулем. Эта переменная будет накапливать сумму цифр.

int digit;: Объявляем переменную digit для временного хранения каждой извлеченной цифры.

printf("Введите целое число: ");: Выводим сообщение пользователю.

scanf("%d", &number);: Считываем целое число, введенное пользователем, и сохраняем его в переменной number.

Обработка отрицательных чисел: if (number < 0) { number = -number; } – если число отрицательное, мы берем его абсолютное значение, так как сумма цифр отрицательного числа обычно считается как сумма цифр его абсолютного значения.

Особый случай для нуля: if (number == 0) { sum = 0; } – если пользователь ввел 0, сумма цифр равна 0. Мы обрабатываем это отдельно, чтобы цикл while (number > 0) не пропускался.

Основной цикл while (number > 0):

Этот цикл будет выполняться до тех пор, пока number больше нуля. Как только number станет нулем, это означает, что все цифры были обработаны.

digit = number % 10;: Оператор % (остаток от деления) позволяет получить последнюю цифру числа. Например, 2155 % 10 даст 5.

sum = sum + digit;: Полученная цифра digit добавляется к общей сумме sum.

number = number / 10;: Оператор / (целочисленное деление) удаляет последнюю цифру из числа. Например, 2155 / 10 даст 215.

printf("Сумма цифр числа равна: %d\n", sum);: После завершения цикла, когда все цифры просуммированы, выводим результат.

return 0;: Сигнализирует об успешном завершении программы.

Это решение является более надежным, учитывает обработку нуля и не удаляет конечные нули, что, скорее всего, соответствует изначальной задаче. Оно также использует только циклы для основной логики.
---

Скормил твоё говно Gemini
Аноним 21/06/25 Суб 18:30:41 #10 №321484091 
>>321483733 (OP)
Самый простой вариант этой программы это - сконвертировать число в строку, получишь "2135", строку мы можем сплитить split("2135", "") (второй аргумент это по какому паттерну мы её сплитим, пустая строка - после каждого символа), и получаешь массив типа ["2", "1", "3", "5"]

дальше просто фором перебираешь массив, конвертишь строку в число и добавляешь к переменной result

for....
result += convert(splited)

абсолютно не эффективный способ, но самый простой в реализации

В твоём коде, ты делаешь while number == 0 .. break

ты скорее всего хотел if использовать
Аноним 21/06/25 Суб 18:31:33 #11 №321484121 
>>321483879
зайди на дипсик или чатгпт, он тебе все напишет
Аноним 21/06/25 Суб 18:32:03 #12 №321484135 
>>321483984
Куда ещё проще? Ну вот тебе на С с битовым смещением.

#include <stdio.h>

int main() {
int number;
printf("Введите целое число: ");
scanf("%d", &number);

// Убираем знак без if и без stdlib
// Этот трюк использует побитовые операции:
// (number >> 31) будет 0 для положительных чисел и -1 для отрицательных
int mask = number >> 31;
number = (number ^ mask) - mask;

int sum = 0;

while (number > 0) {
sum += number % 10;
number /= 10;
}

printf("Сумма цифр: %d\n", sum);

return 0;
}

Деление с остатком извлекает последнее число, когда делит на 10, каждый раз записывая его в переменную. Ну или преврати в строку и обработай каждый элемент отдельно как я сделал это в питоне.

Это же базовое решение, йопту.
Аноним 21/06/25 Суб 18:32:48 #13 №321484154 
>>321484091
>ты скорее всего хотел if использовать
Да я бы с радостью, но в учебнике еще не проходились эти операторы, а потому не хочу использовать их.
Аноним 21/06/25 Суб 18:34:37 #14 №321484203 
>>321484121
Не хочу пользоваться нейронками, не нравятся они мне. Лучше у анонов клянчить ответ, либо самому думать
Аноним 21/06/25 Суб 18:35:27 #15 №321484220 
>>321484135
>Деление с остатком
2155 mod 10 = 5
215 mod 10 = 5
21 mod 10 = 1
2 mod 10 = 2
0 mod 10 = 0 (остановка цикла, ибо числа закончились)
Аноним 21/06/25 Суб 18:36:02 #16 №321484235 
image.png
Аноним 21/06/25 Суб 18:37:28 #17 №321484289 
>>321484154
Странный слегка учебник, ибо он пишет "любое целое число", что для компов не реально, ведь введи число типа 2^99^99^99^99^99 и ни одна программа не сможет дать верный ответ

если без всяких там массивов, ифов и тд, то

while (number > 0)
result += number % 10
number /= 10

return number

особые случаи не нужны
Аноним 21/06/25 Суб 18:45:05 #18 №321484509 
>>321483733 (OP)
>>321483910
>>321483946
>>321484060
Вы все дауны тупорылые, вам никогда не вкатиться в ИТ. В задаче твердно и четко написано ЛЮБОЕ целое число, в int вмещается 32 бита на x64 архитектуре. Читать нужно в виде строки и конвертировать символы в числа. Выкатывайтесь нахуй.
Аноним 21/06/25 Суб 18:45:47 #19 №321484523 
изображение.png
>>321484289
Вау, получилось. Спасибо. Как же все просто оказывается, а я кучу строк кода расписывал.
Аноним 21/06/25 Суб 18:45:55 #20 №321484528 
>>321484509
Ты никогда не напишешь программу, которая будет работать с любым целым числом
Аноним 21/06/25 Суб 18:47:14 #21 №321484568 
>>321484523
Да это мат задача скорее, чем программисткая
Аноним 21/06/25 Суб 18:47:32 #22 №321484577 
>>321484528
Пошел нахуй, ебанат, я напишу за 2 минуты, дальше проблемы твоего железа
Аноним 21/06/25 Суб 18:47:45 #23 №321484581 
>>321484509
>>321484528
Вы ебанутые что ли?
Аноним 21/06/25 Суб 18:48:32 #24 №321484607 
>>321484577
Программа не будет работать согласно требованиям
Аноним 21/06/25 Суб 18:49:30 #25 №321484641 
>>321484289
> и ни одна программа не сможет дать верный ответ
Сможет.
Как по твоему у-кранчер считает триллиона знаков числа пи?
Всё сможет, просто ты лошара не умеешь.
Аноним 21/06/25 Суб 18:51:25 #26 №321484700 
>>321484641
>триллион
Ты ведь знаешь, что 2^99^99^99^99^99 немного больше триллиона будет? Сейчас самая длинная последовательность это 3*10^14
посчитай разницу между этими двумя числами сам
Аноним 21/06/25 Суб 18:54:38 #27 №321484819 
>>321484568
Но все же красиво ты расписал. Даже подумать не мог что можно все в одном цикле уместить. А я блин начал высирать по 3 и больше цикла, даже с вложенными циклами начал играть. Постараюсь в следующий раз думать лучше, а щас пойду дрочить на этот миленький кусочек кода :3
Аноним 21/06/25 Суб 18:55:13 #28 №321484838 
>>321484700
Ты ёбнутый. Какого хуя ты будешь пытаться ему кормить числа в степени? Это не ебаное число, это уже строка блядь.

Простое блядь число без всякой хуйни 2155, 69312, 62358, 219, 112
Аноним 21/06/25 Суб 18:56:38 #29 №321484889 
>>321484641
Если проблема решается алгоритмически, не факт что она решается физически. Мы в любом случае упрёмся в ограничения железа, архитектуры, либо срока жизни говнокодера.

В теории возможно всё, а в реальности я насрал в твой ванильный раф, рокстар-девелопер ебаный.
Аноним 21/06/25 Суб 19:00:10 #30 №321485021 
>>321484838
Это я просто представил его в степени, ты можешь это число записать и без степени. Это просто иное представление

Условно 2^2 = 4
Ты никогда не напишешь код, который сможет работать с любым целым числом, ведь я могу придумать любое бесконечно большое число
Аноним 21/06/25 Суб 19:00:52 #31 №321485042 
>>321484889
Есть фактор реальности, ввести число "999999999999999999999999999" я смогу, твой код обосрется и ты отправишься на перемдачу. А надтмать кнопки триллион в триллионной степени раз я не буду, а значит не смогу проверить будет работать или нет, значит считаем что условиям соотвесивует
Аноним 21/06/25 Суб 19:02:07 #32 №321485084 
>>321485042
То, что ты не можешь ввести большое число не означает, что другие люди этого не могут сделать
Аноним 21/06/25 Суб 19:07:56 #33 №321485284 
>>321485084
Проверять буду я, а не другие люди
Аноним 21/06/25 Суб 19:21:16 #34 №321485726 
>>321483733 (OP)
вот код плюс-минус подходящий под требования:
void main()
{
char inputBuf{};
long long accumulator{};
std::cout << "Provide a number to comute the sum of its digits.\n";
while (std::cin.get(inputBuf))
{
if (inputBuf == '\n')
{
break;
}

const auto digit{ inputBuf - '0' };
if (digit < 0 || digit > 9)
{
throw std::invalid_argument{"Input value is not a number."};
}

accumulator += digit;
}

std::cout << accumulator;
}
Аноним 21/06/25 Суб 19:22:01 #35 №321485753 
>>321485284
Ничего ты не будешь проверять, у тебя даже высшего образования нет
Аноним 21/06/25 Суб 19:24:05 #36 №321485814 
>>321483733 (OP)
ОП, вот 100% рабочий код на C++:

#include <iostream>
#include <cstdlib> // для функции std::abs

int main() {
int number;
std::cout << "Введите целое число: ";
std::cin >> number;

// Берем абсолютное значение, чтобы корректно обрабатывать отрицательные числа
number = std::abs(number);

int sum = 0;
while (number > 0) {
sum += number % 10; // добавляем последнюю цифру
number /= 10; // удаляем последнюю цифру
}

std::cout << "Сумма цифр: " << sum << std::endl;

return 0;
}
Аноним 21/06/25 Суб 19:25:38 #37 №321485853 
>>321485726
>>321485814
Нейросвинка, спок. Мне уже помог живой человек
Аноним 21/06/25 Суб 19:31:38 #38 №321486067 
code.png
>>321485853
Ага, классный код
comments powered by Disqus

Отзывы и предложения