Найти тему

Крутой курс Java для "чайников". Урок 13.2. Разбор решений задач урока 13. Часть 3.

Задача 4.3.

И эта задачка достаточно простая. Итак решаем

Думаю, нам понадобятся 2 переменные - для цены хлеба и для суммы имеющихся денег. Объявим их и присвоим им значения.

int hleb = 50;

int sum = 30;

Итак, теперь у нас 3 варианта.

1. У человека денег ровно на хлеб.

2. У человека недостаточно денег.

3. У человека денег больше, чем нужно на хлеб.

Для каждого из вариантов воспользуемся оператором if и выведем соответствующее сообщение

Для варианта 1.

if ( hleb == sum) System.out.println("Сумма имеющихся у Вас денежных средств равна стоимости хлеба");

Для варианта 2.

if ( sum < hleb) System.out.println("Для того, чтобы купить хлеб, Вам не хватает " + (hleb - sum) + " рублей");

Для варианта 3.

if ( sum > hleb) System.out.println("Сумма имеющихся у Вас денежных средств больше, чем требуется для покупки хлеба, на " + (sum - hleb) + " рублей");

Вот собственно и всё решение задачи. Сохраняем

Компилируем и запускаем

-2

Самостоятельно поменяйте значение суммы и проверьте, как изменится результат выполнения программы.

Задача 4.4.

Ну что? Готовы к решению самой сложной задачи? Вперёд!

Конечно нам понадобятся переменные. Для суммы покупки в виде числа - целочисленная. Для суммы покупки в виде прописи - текстовая.

Объявим их и присвоим им начальные значения

int sum = 715;

String sum_p = "";

Переменной sum_p мы присвоили пустое значение. То есть в ней на данный момент ничего не содержится. Но так надо сделать, чтобы компилятор не выдавал ошибки. Это мы делаем с учётом кода, который мы дальше напишем.

Итак, какие у нас есть трудности при решении этой задачи?

1. Проблема с числами с 10 по 19.

2. Проблема как выбрать рублей, рубля или рубль.

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

Из условия задачи следует, что число может быть максимум трёхзначное и оно целое. Поэтому определяем количество сотен, десятков и единиц по уже известному нам алгоритму.

Объявляем 3 переменные

int a1;

int a2;

int a3;

Определяем количество сотен

a1 = sum / 100;

Поскольку переменная a1 - целочисленная, количество сотен посчитается верно, дробная часть просто отбросится.

Далее чтобы работать с остатком, используем имеющуюся переменную sum:

sum %= 100;

Таким же способом определяем количество десятков и единиц

a2 = sum / 10;

sum %= 10;

a3 = sum;

Всё. В переменной a1 содержится число сотен, в переменной a2 - число десятков, в переменной a3 - число единиц.

Теперь думаем, как с этим работать и сделать из цифр число прописью.

Для хранения суммы прописью мы создали переменную sum_p. Она у нас строкового типа. В ней мы и будем хранить конечный результат, который будет выведен на экран. У нас есть вариант собирать её кусками. Так и поступим.

С сотнями проблем не возникает (таких как с числами 10 - 19). Поэтому делаем так:

if (a1 == 1) sum_p += " сто";

if (a1 == 2) sum_p += " двести";

if (a1 == 3) sum_p += " триста";

if (a1 == 4) sum_p += " четыреста";

if (a1 == 5) sum_p += " пятьсот";

if (a1 == 6) sum_p += " шестьсот";

if (a1 == 7) sum_p += " семьсот";

if (a1 == 8) sum_p += " восемьсот";

if (a1 == 9) sum_p += " девятьсот";

Что сделает этот код? Он присвоит нашей переменной sum_p количество сотен в виде текста. При этом если сотен в числе нет, например, число двухзначное, то переменной ничего не будет присвоено. Она по прежнему останется с пустым значением.

В нашем примере число равно 715.

То есть после выполнения вышеуказанного кода в переменную sum_p будет записано " семьсот".

Теперь начинается геморрой с числами с 10 по 19. Как нам с ними быть? Это частный случай. Предлагаю сразу с ним разобраться и забыть про него. Какое условие попадания числа в этот интервал? А оно простое - количество десятков равно 1. Где у нас количество десятков? В переменной a2. Поэтому делаем так

if (a2 == 1)

{

if (a3 == 0) sum_p += " десять";

if (a3 == 1) sum_p += " одиннадцать";

if (a3 == 2) sum_p += " двенадцать";

if (a3 == 3) sum_p += " тринадцать";

if (a3 == 4) sum_p += " четырнадцать";

if (a3 == 5) sum_p += " пятнадцать";

if (a3 == 6) sum_p += " шестнадцать";

if (a3 == 7) sum_p += " семнадцать";

if (a3 == 8) sum_p += " восемнадцать";

if (a3 == 9) sum_p += " девятнадцать";

}

А что делает этот страшный код? Если количество десятков в числе 1, то нам нужно определить количество единиц и прибавить к тому, что уже содержится в переменной sum_p (если что-то содержится) остаток прописью. Так мы и делаем.

Если a2 (количество десятков) равно 1, то

Если количество единиц равно нулю, то число заканчивается на 10.

Если количество единиц равно один, то число заканчивается на 11.

И так далее.

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

Для нашего случая (число равно 715) смотрим. Число десятков равно единице. Значит, дальнейшая проверка осуществляется. Число единиц в числе: 5. Значит, к уже имеющемуся значению " семьсот" в переменную sum_p будет дописано " пятнадцать".

Фух, с частным случаем разобрались. Теперь разбираемся с общим случаем.

if (a2 == 2) sum_p += " двадцать";

if (a2 == 3) sum_p += " тридцать";

if (a2 == 4) sum_p += " сорок";

if (a2 == 5) sum_p += " пятьдесят";

if (a2 == 6) sum_p += " шестьдесят";

if (a2 == 7) sum_p += " семьдесят";

if (a2 == 8) sum_p += " восемьдесят";

if (a2 == 9) sum_p += " девяносто";

Этим кодом мы определили количество десятков и добавили его в переменную sum_p. Причём если количество десятков - ноль, то ничего не добавится в переменную. А если в числе один десяток, то мы уже ранее решили, что с ним делать.

Теперь разбираемся с единицами. При этом нам нужно учесть, чтобы текст не задваивался, ещё одно условие. Мы будем добавлять к переменной sum_p количество единиц только в том случае, если число десятков не равно единице.

if (a2 != 1)

{

if (a3 == 1) sum_p += " один";

if (a3 == 2) sum_p += " два";

if (a3 == 3) sum_p += " три";

if (a3 == 4) sum_p += " четыре";

if (a3 == 5) sum_p += " пять";

if (a3 == 6) sum_p += " шесть";

if (a3 == 7) sum_p += " семь";

if (a3 == 8) sum_p += " восемь";

if (a3 == 9) sum_p += " девять";

}

Всё. Мы собрали в переменной sum_p сумму прописью. Поскольку она текстового типа, оператором += мы добавляли в неё нужный текст, т.е. использовали конкатенацию.

Осталось определиться - "рубль", "рублей" или "рубля".

Думаем, при каких условиях что должно выдаваться.

Слово "рубль" должно выдаваться при одновременном выполнении двух условий. Число десятков не должно быть равно 1 (в противном случае актуально слово "рублей"), а число единиц должно быть равно 1.

Итак в виде кода

if ( (a3 == 1) && (a2 != 1) ) sum_p += " рубль";

Если оба условия выполняются одновременно, дописываем в переменную sum_p слово " рубль".

Теперь продумываем условия к слову "рубля".

Однозначно число десятков не должно быть равно единице (иначе применимо слово "рублей"). И одновременно с этим слово "рубля" можно написать когда число единиц равно 2, 3 или 4. Так и напишем

if ( ( (a3 == 2) || (a3 == 3) || (a3 == 4) ) && ( a2 != 1) ) sum_p += " рубля";

Во всех остальных случаях применимо слово "рублей". Но нельзя использовать слово else, как бы ни хотелось. Во-первых к какому из if его применить? Во-вторых какие-то слова могут задвоиться. Поэтому нужно описать оставшиеся условия, используя ещё один оператор if.

Когда используется слово "рублей"? Когда количество единиц не равно 1, 2, 3, 4 или когда количество десятков в числе равно 1. В виде кода

if ( ( (a3 != 1) && ( a3 != 2) && (a3 != 3) && ( a3 != 4) ) || (a2 == 1) ) sum_p += " рублей";

Осталось вывести на экран результат

System.out.println("Выдано" + sum_p);

Сохраняем

Первая часть кода
Первая часть кода
Вторая часть кода
Вторая часть кода

Компилируем и запускаем

-5

Ссылка на предыдущий урок

Ссылка на следующий урок

Ссылка на содержание курса