Задача 1.1.
Как я и говорил, ничего сложного. Нужно 4 раза воспользоваться оператором вывода на экран. Получаем код для решения:
После компиляции и запуска получаем выведенный текст:
Цель достигнута! Искомый текст выведен на экран.
Задача 1.2.
Как требует условие задачи объявляем 5 переменных строкового типа и присваиваем им значения.
String slovo1 = "Java";
String slovo2 = "самый";
и так далее...
Затем с помощью конкатенации составляем сложное выражение для вывода на экран и используем оператор вывода
System.out.println(slovo1 + " - " + slovo2 + " " + slovo3 + " " + slovo4 + " " + slovo5 + "!");
В данном случае мы не забыли добавить пробелы между словами, чтобы они не слипались.
Получился такой вот код-решение:
И такой результат выполнения программы:
Задача 1.3.
Здесь нужно вспомнить какие данные к какому типу относятся. И это
12321 - целочисленный
345.543 - вещественный
Иван - строковый
'z' - символьный
false - логический
Осталось объявить переменные, присвоить им значения и вывести на экран с комментариями. Код следующий:
После его исполнения получаем следующий результат:
Задача 1.4.
Предлагаю использовать в этой задаче строковый тип данных.
Алгоритм решения - простейший.
1. Объявляем переменную и задаём её начальное значение.
2. Рисуем песочные часты с помощью оператора вывода на экран.
В своём примере я задал символ "О". Вы можете задать любой другой символ.
Компилируем и запускаем
Задача 2.1.
Вспоминаем, как создаются константы - с помощью ключевого слова final.
Поскольку число 3.14 не целое, выбираем тип константы - вещественный.
Создаём одну переменную, в которой будем хранить значение радиуса окружности. Пусть она будет, например, целочисленной. Но Вы можете использовать и другой числовой тип данных - на Ваше усмотрение. И присваиваем ей значение.
Можно создать ещё одну переменную для хранения в ней значения полученной длины окружности (конечно же вещественного типа). Но я обойдусь без неё.
Итак код для решения:
После компиляции и запуска:
В одном из теоретических уроков (а именно в 12-м в части 1) я обращал внимание на точность типа данных float. Если мы посчитаем длину окружности при радиусе 5 при условии, что число π округлено до двух знаков после запятой, то есть до 3,14 то результат вычисления длины окружности должен быть точным до сотых долей.
2 * 5 * 3,14 = 31,4.
Но в нашем случае видим погрешность в сумме две миллионных - 0,000002. Это как раз то, о чём я говорил.
Задача 2.2.
На самом деле эту задачу можно решить в том числе двумя следующими вариантами:
1. Можно для квадрата и для куба числа создать отдельные переменные, затем их рассчитать и вывести значения на экран.
2. Можно создать одну переменную, например, chislo. При выводе текста на экран указывать для вывода chislo, в следующей строчке chislo * chislo, в третьей строчке chislo * chislo * chislo - как в предыдущей задаче. То есть вообще не менять значения переменной chislo. И не создавать отдельные переменные под квадрат и под куб искомого числа.
Код для варианта 1
Код для варианта 2
Результат исполнения кода
Результат одинаков при использовании любого из двух вариантов.
Задача 2.3.
Основная проблема этой задачи - придумать, как получить значение каждой из цифр четырёхзначного числа.
Я воспользуюсь своей подсказкой и буду использовать для этой цели оператор остатка от деления по модулю.
Алгоритм и логика здесь следующие.
Допустим, у нас есть четырёхзначное число 5678.
Сначала решим, как получить значение первой цифры этого числа.
Один из вариантов - поделить число на 1000. Тогда мы получим результат 5,678.
Ага, число 5 получили с дробной частью. Теперь нужно от неё (дробной части) избавиться. Как это сделать? А это нужно сделать при помощи оператора вычисления остатка от деления.
Остаток от деления 5678 на 1000 равен 678. Но это в 1000 раз больше, чем нам нужно.
Поэтому если это число поделить на 1000, то мы получим искомые 0,678.
Итак 5,678 - 0,678 получаем нужную нам цифру 5. Теперь в виде формулы:
цифра 5 = 5678/1000 - (5678 % 1000) / 1000 = 5,678 - (678)/1000 = 5,678 - 0,678 = 5.
Фух! Придумали формулу для получения первой цифры. Теперь нужно придумать формулы для получения следующих цифр.
Как из числа 5678 получить 6? Сначала сделать из 5678 число 678. Как?Правильно. Применить %. То есть 5678%1000 = 678.
Теперь из числа 678 нам нужно получить 6. Сделаем это по такому же принципу, как мы получили цифру 5.
цифра 6 = 678/100 - (678%100)/100 = 6,78 - (78)/100 = 6,78 - 0,78 = 6.
Дальше по такому же принципу получаем 3-ю цифру. Делаем из 678 число 78. И
цифра 7 = 78/10 - (78%10)/10 = 7,8 - (8)/10 = 7,8 - 0,8 = 7.
С последней цифрой нет смысла заморачиваться, получим её из числа 78 и успокоимся на этом
8 = 78%10 = 8.
Теперь в виде искомой части кода. Нам потребуются 5 целочисленных переменных. Допустим, искомое четырёхзначное число мы обзовём a. Значение его первой цифры - a1, второй цифры - a2, третьей цифры - a3, четвертой цифры - a4.
int a = 5678;
int a1;
int a2;
int a3;
int a4;
Дальше по формуле, которую мы придумали, получим значение первой цифры заданного числа.
a1 = a / 1000 - (a % 1000) / 1000;
Всё, первую цифру посчитали.
Теперь нам нужно из искомого числа 5678 сделать 678 с помощью % и куда-то записать этот результат. В данной конкретной задаче нам изначально заданное число 5678 нам больше не понадобится. Поэтому можем смело использовать переменную a.
a %= 1000;
Маленькая хитрость, применимая именно для этой задачи. Поскольку в этой задаче все числа - целые, без дробных частей, то и тип данных для них используется int. Поэтому конкретно в этом случае можно поступить проще. Поскольку 5678 у нас типа int, и значение первой цифры у нас тоже типа int, результат операции (переменная a1) 5678/1000 будет цифрой 5. Если в результате деления данных типа int есть дробная часть, то она тупо отбрасывается. Поэтому вторую часть формулы, а именно (a%1000) / 1000 можно не писать.
Итак мы теперь имеем в переменной a трёхзначное число 678.
По такому же принципу получим из него 6.
a2 = a / 100 - (a % 100) / 100;
Затем сделаем из 678 число 78 и запишем результат в переменную a.
a %= 100;
Теперь получим из числа 78 число 7
a3 = a / 10 - (a % 10) / 10;
Ну и напоследок число 8
a %= 10;
a4 = a;
Для наглядности предлагаю вывести значения цифр на экран
System.out.println("Значение первой цифры " + a1);
System.out.println("Значение второй цифры " + a2);
System.out.println("Значение третьей цифры " + a3);
System.out.println("Значение четвертой цифры " + a4);
И для поверки правильности работы скомпилировать и запустить промежуточный вариант
Получаем
Итак, значения всех цифр получены верно. Теперь вернёмся к условию задачи. Нужно посчитать сумму всех цифр числа и с помощью инкремента прибавить к получившемуся числу 2.
Теперь это сделать легко.
Объявим для хранения суммы цифр переменную sum и присвоим ей стартовое значение
int sum = a1 + a2 + a3 + a4;
Теперь с помощью инкремента увеличим её значение на 2.
sum++;
sum++;
Поскольку с помощью инкремента мы можем увеличить значение только на единицу, пришлось к переменной sum 2 раза применять операцию инкремента.
Теперь выведем на экран то, что должны получить по условию задачи.
System.out.println("Сумма цифр числа " + a1 + a2 + a3 + a4 + ", увеличенная на 2 равна " + sum);
Обращаю внимание на то, что в тексте для вывода здесь мы слепили искомое число с помощью конкатенации. Возникает вопрос, а почему сработала именно конкатенация, а не произошло так, что переменные сложились и выдалась их сумма? А потому что для того, чтобы они сложились, операцию сложения нужно было бы поместить в скобки. (a1+a2+a3+a4)
Дописываем остатки кода и получаем:
Заново компилируем и получаем обновленный результат
Задачу вымучали и решили.
Задача 2.4.
Как из четырёхзначного числа получить каждую его цифру и сохранить их значения в переменных, мы подробно разобрали в предыдущей задаче. На этом акцентироваться не будем.
Скопируем соответствующий код из предыдущей задачи.
int a = 2345;
int a1;
int a2;
int a3;
int a4;
a1 = a / 1000 - (a % 1000) / 1000;
a %= 1000;
a2 = a / 100 - (a % 100) / 100;
a %= 100;
a3 = a / 10 - (a % 10) / 10;
a %= 10;
a4 = a;
Теперь у нас есть 4 переменных со значениями цифр - a1, a2, a3, a4.
При решении данной задачи нам нельзя использовать оператор if и тернарный оператор. Ну что ж, будет работать напрямую с данными логического типа.
Значение выражения ((a1 + a2) == (a3 + a4)) это либо правда, либо ложь. Вот его и подставим в оператор вывода на экран
System.out.println("Сумма первых двух цифр и вторых двух цифр числа " + a1 + a2 + a3 + a4 + " равны - это " + ((a1 + a2) == (a3 + a4)));
Теперь сохраняем
Компилируем и запускаем
Работает верно.
На всякий случай проверим, заменив число 2345 на 5234.
Заново компилируем и запускаем.
По прежнему работает верно. Задача решена.
Если есть какие-то вопросы по решению задач, пишите в комментариях, обязательно разберём вместе!
Решения и разбор задач из урока 13 - с 3.1. по 4.4. опубликую в следующих уроках, чтобы не создавать громоздкость в этом.
Ссылка на предыдущий урок
Ссылка на следующий урок
Ссылка на содержание курса