Задача 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) + " рублей");
Вот собственно и всё решение задачи. Сохраняем
Компилируем и запускаем
Самостоятельно поменяйте значение суммы и проверьте, как изменится результат выполнения программы.
Задача 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);
Сохраняем
Компилируем и запускаем
Ссылка на предыдущий урок
Ссылка на следующий урок
Ссылка на содержание курса