0

Ну вот, сделал как лучше...

Мне 17, увлекаюсь созданием консольных приложений на c++.
Планирую связать будущую деятельность с программированием.
Недавно сменил школу, получил первую задачу по информатике - написать программу которая делит трехзначное число на цифры и выводит их пользователю в обратном порядке. Вооот...
Честно говоря думал что в 11 классе дадут что-то посерьёзнее.
Написал, протестил - работает. Причём работает не только с трехзначными, но и с другими числами.Пришёл в школу, сдал.Попутно глянул программы одногруппников,и убедился что их программы не трехзначные числа не обрабатывают и падают.
Итоги: у всех 10/10 баллов , а на меня все смотрят как на му*ака, типо я ничего не умею(хотя готов спорить что код не поняла информатичка, несмотря на лаконичность оного, присутствие комментариев и корректные названия переменных. К слову у неё переменные называются a,b,c,d ...x,y,z и т.д. :D ).

Старшее поколение программеров часто ругает молодых — не умеют, не знают. В наши дни единственный шанс чему нибудь научиться — самообразование. А в школе отхождение от шаблона и креативность карается.
Прошу простить за нытьё, но реально сильно зацепило...
Вы смотрите срез комментариев. Показать все
7
Автор поста оценил этот комментарий

Код в студию =) Программы в школе оцениваются по тому, работают они или нет (сам код даже не смотрят). Значит, твоя, вероятно, не прошла какой-то тест, ну или действительно слмшком сложную логику показал, а нужно было сделать проще.

раскрыть ветку (32)
2
Автор поста оценил этот комментарий

строку в обратном порядке в stringstream, оттуда в int (чтоб число не по частям, а целое было)

Ну а int на вывод пользователю

раскрыть ветку (31)
0
Автор поста оценил этот комментарий

А просто строку в цикле пройти от конца к началу не вариант?

раскрыть ветку (30)
0
Автор поста оценил этот комментарий

Только надо добавить пару условий для защиты от дурака (3 символа в строке, в строке только цифры). Конкретно для данной задачи))

0
Автор поста оценил этот комментарий

Это и имелось в виду, цифры отдаются в stringstream, чтобы позже получить int(1 переменную с конечным ответом), а не cout'ить <<string[i]; Поправьте, если где не прав

раскрыть ветку (28)
0
Автор поста оценил этот комментарий

Смысл какой использовать int? 

На вход прилетает строка, на выходе ожидается строка, к чему промежуточные преобразования?


Берем строку со входа;

Проверяем является ли она числом, если нет бросаем исключение;

Для особых педантов - проверяем длину, если не три символа бросаем другое исключение;

В цикле от последнего символа к первому выкидываем на выход по одному символу;

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

int - по условию. Да и чтобы потом если что вынести код в функцию, принимающую int, и возвращающую int наооборот

0
Автор поста оценил этот комментарий
Код в студию всё-таки.
раскрыть ветку (25)
Автор поста оценил этот комментарий

#include <iostream>

#include <sstream>

using namespace std;

int main()

{

int inNumber,rez=0;

string inString;

cout << "Enter your number: ";

cin>>inNumber; //Получаем int

stringstream instream;

instream<<inNumber;

instream >> inString;//Конвертируем в строку

stringstream outstream;

for(unsigned int i =0;(inString.size()-i)>0;i++) //заполняем outstream символами из строки

{

outstream <<inString[inString.size()-i-1]; //Со stringstream у меня пока еще не очень, поэтому тут кривовато.(Добавлено для pikabu)

}

outstream >>rez;

cout << rez<<endl;//Выводим int

return 0;

}

раскрыть ветку (24)
0
Автор поста оценил этот комментарий

Огромный оверхед и использование кучи ненужных переменных не нужны ни в одном проекте. Так что как на неумелого ЧСВ-шного мудака на тебя не зря смотрели.

0
Автор поста оценил этот комментарий

думаю от тебя что-то типа такого хотели


#include <iostream>

int main( )

{

    int i = 0 ;

    std::cin >> i;

    int j = 0;

    while( i ) {

        j = j * 10 + i % 10;

        i /= 10;

    }

    std::cout << j << "\n";

    return 0;

}

раскрыть ветку (12)
1
Автор поста оценил этот комментарий

Или такого, ага =)


string instream;

cin >> instream;

cout << string(instream.rbegin(), instream.rend());

раскрыть ветку (4)
0
Автор поста оценил этот комментарий

Хотел сначала, за это наверное вообще прибили :)

раскрыть ветку (3)
0
Автор поста оценил этот комментарий

Как я выше сказал, это не было бы решением. Но учитель зарубил бы тебя по другим причинам. Впрочем, и такое «решение» можно провести через учителя, который не считает себя умнее всех и готов слушать. Объяснил бы досконально, как это работает, и почему ты в этом сомневаешься из-за непутёво написанных требований (что делать с не-трёхзначными числами и не-числами?) и я бы поставил тебе пять с плюсом даже за эти три строчки кода.

раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Ладно, прошу прощения, но у нас уже почти 12 ночи, а завтра нулевой урок,рано вставать. Всем огромное спасибо, и поддержали, и нового для себя узнал. Спасибо, ребят!

0
Автор поста оценил этот комментарий

Вы возможно пропустили мой коммент : Это не полная версия кода...Ввод я проверяю на правильность(соответствие критериям).

0
Автор поста оценил этот комментарий

хотели примерно вот это:

#include <iostream>

int main( )

{

int i,a,b,c = 0 ;

std::cin >> i;

a = i/100%10;

b =i/10%10;

c =i%10;

std::cout << a <<b<<c<< endl;

return 0;

}

у неё примерно так было

раскрыть ветку (6)
0
Автор поста оценил этот комментарий
Думаю от тебя хотели.
#include<iostream>
int main ()
{
int number=0;

std::cout<<"herach Chislo\n";
std::cin>>number;

while (number) {
std::cout<<number %10;
Number/=10;
}
std::cin.get();
std::cin.get();
}
Работает для числа хоть 100 символов длиной.
раскрыть ветку (5)
0
Автор поста оценил этот комментарий
А для ноля? А для отрицательного числа?
раскрыть ветку (4)
0
Автор поста оценил этот комментарий
Для отрицательных тоже работает. Если -124 разложить на составные цифры этим способом получится -4-2-1, что являетесь ответом согласно условию. 0? В задаче ясно указали 3х значное, их раскладывает остальное не важно, если понадобится обработка ноля можно do...while(). Короче говоря без внятного ТЗ результат ХЗ, автор слишком мутно объяснил чего надо, Инвертировать? Разложить? Входные данные Строка или число? Выходные данные? Нужно ли сохранить в программе состав этого числа? Если все это не указано то можно че хочешь написать, все будет верно.
Пожалуйста держи, берем только число не взирая на знак, едим 0.
#include<iostream>
int main ()
{
int number=0;

std::cout<<"herach Chislo\n";
std::cin>>number;
number=abs(number);
do {
std::cout<<number %10;
number/=10;
}while(number)
std::cin.get();
std::cin.get();
}
раскрыть ветку (3)
0
Автор поста оценил этот комментарий

c++ уже подзабыл, но тут явно можно все упростить: сразу получать данные в виде строки, а не int. И саму строку пробегать назад. Не понимаю, зачем тут нужны streamы. Здесь видно, что ты тренируешь технологию, но, все-таки, надо сокращать объем кода перед показом на оценку. Чем короче, тем лучше, особенно, если универсальность решения не пострадает.

раскрыть ветку (9)
0
Автор поста оценил этот комментарий

Выше уже отписал: int - по условию. Да и чтобы потом если что вынести код в функцию, принимающую int, и возвращающую int наооборот

раскрыть ветку (8)
0
Автор поста оценил этот комментарий

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


Почитайте про повторное использование кода.

раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Имеете ввиду вынос в отдельный файл, и использование потом в других проектах через #include ? Или я не о том? 

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

В глобальном масштабе о том

0
Автор поста оценил этот комментарий

А если введут не int? Тогда решение сломается, надо отдельно проверять это. А так все выведется, даже с буквами.

раскрыть ветку (4)
0
Автор поста оценил этот комментарий

Это не полная версия кода, я её чуть порезал, чтобы комменты не захламлять. Ввод я проверяю на правильность.

*Оффтоп: а на pikabu что [spoiler][/spoiler] не работает?*

раскрыть ветку (3)
0
Автор поста оценил этот комментарий

Это вообще не решение. Оно переворачивает любые строки, а надо только трёхзначные числа. Плюс за расширяемость, но в требованиях расширяемости не было, не так ли?

раскрыть ветку (2)
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества