- •4 Понятие алгоритма, программы, команды. Способы записи алгоритма. Этапы разработки программ.
- •Этапы разработки программ:
- •5. Язык программирования Java. Байт-код. Виртуальная машина Java.
- •6. Понятие переменной. Имена переменных. Ключевые и зарезервированные слова. Простые типы данных. Оператор присваивания. Порядок выполнения операций.
- •9. Типы данных с плавающей точкой. Константы с плавающей точкой.
- •Методы класса Math:
- •Методы класса Math:
- •16. Операторы перехода и их особенности: break, continue, return.
- •33. Формы представления вещественного числа. Нормализация вещественного числа. Пример.
- •34. Перевод вещественного числа из одной с/с в другую. Преобразование
- •37. Кодирование и обработка в компьютере целых чисел со знаком. Прямой и дополнительный код. Дополнение числа. Дополнительный код двоичного числа.
- •2 Бита расходуется на запись знака числа и порядка.
- •40. Сложение и умножение нормализованных чисел. Примеры.
9. Типы данных с плавающей точкой. Константы с плавающей точкой.
Константы класса Math. Методы класса Math: прямые трансцендентные, обратные трансцендентные, гиперболические, экспоненциальные. Примеры.
Числа с плавающей точкой, называемые действительными, используются при вычислениях, которые требуют получения результата с точностью до определенного десятичного знака. float (32 бита) и double (64 бита).
Константы с плавающей точкой: Числа с плавающей точкой представляют десятичные значения с дробной частью. Стандартная форма записи десятичного числа состоит из: целого числа; десятичной точки; дробной части. Научная форма записи десятичного числа состоит из: мантиссы; символа E, суффикса,
Константы класса Math типа double:
Math.PI – число π с точностью в 15 десятичных знаков.
Math.E – основание натурального логарифма с точностью в 15 десятичных знаков.
Методы класса Math:
-
Прямые трансцендентные:
double sin(double arg) - Возвращает синус угла arg, переданного в радианах
double cos(double arg) - Возвращает косинус угла arg, переданного в радианах
double tan(double arg) - Возвращает тангенс угла arg, переданного в радианах
-
Обратные трансцендентные:
double asin(double arg) - Возвращает угол, синус которого равен arg.
double acos(double arg) - Возвращает угол, косинус которого равен arg.
double atan(double arg) - Возвращает угол, тангенс которого равен arg.
double atan2(double x, double y) - Возвращает угол, тангенс которого равен x/y.
-
Гиперболические:
double sinh(double arg) - Возвращает гиперболический синус угла arg, переданного в радианах.
double cosh(double arg) - Возвращает гиперболический косинус угла arg, nepeдaннoro в радианах.
double tanh(double arg) - Возвращает гиперболический тангенс угла arg, переданного в радианах.
-
Экспоненциальные:
double ехр(double arg) - Возвращает экспоненту arg.
double log(double arg) - Возвращает натуральный логарифм arg.
double log10(double arg) - Возвращает логарифм по основанию 10 от arg.
double pow(double y, double x) - Возвращает y в степени x.
double sqrt(double arg) - Возвращает квадратный корень из arg.
10. Типы данных с плавающей точкой. Константы с плавающей точкой.
Константы класса Math. Методы класса Math: функции округления.
Генерация псевдослучайных чисел. Генерация целых и вещественных
чисел в заданном интервале. Примеры.
См. 9.
Методы класса Math:
-
Функции округления:
int abs(int arg) - Возвращает абсолютное значение arg.
long abs(long arg) - Возвращает абсолютное значение arg.
float abs(float arg) - Возвращает абсолютное значение arg.
double abs(double arg) - Возвращает абсолютное значение arg.
double ceil(double arg) - Возвращает наименьшее целое число, которое больше arg.
double floor(double arg) - Возвращает наибольшее целое число, которое меньше или равно arg.
int round(float arg) - Возвращает arg, округленное до ближайшего int.
long round(double arg) - Возвращает arg, округленное до ближайшего long.
int max(int x, int y) - Возвращает большее из двух чисел х и у.
long max(long x, long y) - Возвращает большее из двух чисел х и у.
float max(float x, float y) - Возвращает большее из двух чисел х и у.
double max(double x, double y) - Возвращает большее из двух чисел х и у.
int min(int x, int y) - Возвращает меньшее из двух чисел х и у.
long min(long x, long y) - Возвращает меньшее из двух чисел х и у
float min(float x, float y) - Возвращает меньшее из двух чисел х и у.
double min(double x, double y) - Возвращает меньшее из двух чисел х и у.
-
Генерация псевдослучайных чисел:
Метод Math.random() возвращает псевдослучайное вещественное число из промежутка [0;1).
-
Генерация целых и вещественных чисел в заданном интервале:
x = (int)(Math.random ()*(b – a + 1)) + a; // [a,b]
11. Форматный вывод. Спецификаторы формата. Форматирование целых чисел. Форматирование вещественных чисел. Указание минимальной ширины поля.
Форматный вывод – вывод в различные потоки значений разных типов, отформатированных согласно заданному формату (шаблону).
Спецификатор формата начинается со знака процента с последующим спецификатором преобразования.
Форматирование целых чисел: System.out.printf ("Результат: %d", c);
Форматирование вещественных чисел: System.out.printf ("%f", x);
Спецификатор минимальной ширины – целое число, помещенное между символом % и кодом преобразования формата.
Спецификатор минимальной ширины дополняет вывод пробелами, обеспечивая заданную минимальную длину.
12. Форматный вывод. Спецификаторы формата. Указание точности.
Флаги формата. Использование индекса аргументов.
См. 11.
Указание точности: Спецификатор точности может быть применен к спецификаторам формата %f, %e, %g и %s. Спецификатор точности следует за спецификатором минимальной ширины поля (если таковой имеется) и состоит из точки с последующим целым числом.
Флаги формата: позволяют управлять различными аспектами преобразования. Все флаги формата – одиночные символы, которые следуют за знаком % в спецификаторе формата.
- - выравнивание влево
0 – вывод дополняется нулями вместо пробелов
Пробел – положительным числам предшествует пробел
+ - положительным числам предшествует знак +
, - числовые значения, включающие групповые разделители
( - отрицательные числовые значения заключены в скобки
Использование индекса аргументов: Обычно порядок аргументов и спецификаторов совпадает (слева направо), т.е. первый спецификатор относится к первому аргументу, второй – ко второму и т.д. Индекс аргумента следует за % в спецификаторе формата и имеет вид n$, где n – индекс нужного аргумента, начиная с 1.
13. Разветвляющиеся алгоритмы. Условный оператор и его особенности.
Пример программы с блок-схемой.
Разветвляющиеся алгоритмы – алгоритмы, в которых последовательность шагов зависит от выполнения некоторых условий.
Условный оператор:
if (<условие>) {
<что делать, если условие верно>
}
else {
<что делать, если условие неверно>
}
Особенности:
-
вторая часть (else …) может отсутствовать (неполная форма)
-
если в блоке один оператор, можно убрать фигурные скобки
14. Сложные условия. Порядок выполнения логических операций. При-
мер программы с блок-схемой.
Сложное условие – это условие, состоящее из нескольких простых условий (отношений), связанных с помощью логических операций:
-
! – НЕ (отрицание, инверсия)
-
&& – И (логическое умножение, конъюнкция, одновременное выполнение условий)
-
|| – ИЛИ (логическое сложение, дизъюнкция, выполнение хотя бы одного из условий)
Порядок выполнения (приоритет = старшинство)
-
выражения в скобках
-
! (НЕ, отрицание)
-
<, <=, >, >=,
-
==, !=
-
&& (И)
-
|| (ИЛИ)
15. Оператор выбора и его особенности. Выполнение оператора выбора.
Вложенные операторы выбора.
Операторы выбора.
В языке Java существует всего 2 оператора выбора: оператор if и оператор switch. Они позволяют управлять выполнением той или иной программы в зависимости от некоторых условий. В этом уроке мы рассмотрим оператор If.
Оператор if.
Оператор if позволяет направить выполнение программы по одному из 2-х возможных путей в зависимости от какого-либо условия. Конструкция с этим оператором имеет вид:
if (условие) оператор_1;
else оператор_2;
В этой конструкции "условие" – это значение типа "boolean". Если вы помните, то значение типа "boolean" является результатом операций сравнения или логических операций. Чаще всего, оператор "if" используется именно в операциях сравнения.
"Оператор_*" в данной конструкции – это любой из операторов, которые присутствуют в языке Java. Причем они могут быть одиночным, а могут быть составным (несколько операторов). Составной оператор необходимо заключать в фигурные скобки. После ключевого слова "if" записывается условие и оператор(ы), которые выполняются, если условие верно. После "else" записывается оператор(ы), которые выполняются, если условие ложно.
Всю конструкцию можно расшифровать следующим образом: Если (if) условие истинно, то выполняется "оператор_1", если же оно "ложно", то (else) выполняется "оператор_2". Вторая строка в данной конструкции не обязательна. Если ее не будет, то в случае если условие ложно, ни один из операторов не будет выполнен.
Рассмотрим пример.
class prog_10{
public static void main(String[] args){
int a=30;
int b=20;
if (a>b) {
System.out.println("Переменная a больше переменной b");
}
}
}
Строка №3-№4. Объявляем 2 целочисленные переменные "a" и "b" и присваиваем им значения.
Строка №5. Записываем конструкцию с оператором выбора if. В круглых скобках записывается условие (a>b). Если это условие верно, то будут выполняться операторы, находящиеся в фигурных скобках {}. У нас в фигурных скобках стоит один оператор " System.out.println", который выводит на экран сообщение.
Пример написан так, что условие (a>b) окажется верным (30>20), поэтому сработает оператор вывода на экран.
Операторы выбора в Java.
Теперь изменим пример, поменяв условие в строке №5.
class prog_10{
public static void main(String[] args){
int a=30;
int b=20;
if (a<b) {
System.out.println("Переменная a больше переменной b");
}
}
}
Строка №5. Теперь условие (a<b). Это условие ложно, так как 30 не меньше 20. Учитывая тот факт, что условие ложно, оператор "System.out.println" не будет выполнен и сообщение на экран не будет выведено.
Оператор if в Java.
Следующий пример демонстрирует действие оператора "if" с оператором "else".
class prog_10{
public static void main(String[] args){
int a=30;
int b=20;
if (a<b) {
System.out.println("Переменная a больше переменной b");
}
else {
System.out.println("b меньше a");
}
}
}
В данном примере условие ложно, поэтому оператор в строке №6 не будет выполнен. Но, здесь также присутствует оператор "else"(строка №8). После него записываются альтернативные операторы, которые выполняются только в тех случаях, если условие является ложным.
Оператор выбора if...else.
Обратите внимание, что операторы заключаются в фигурные скобки, хотя здесь это не обязательно, ведь фигурные скобки нужны при использовании составного оператора. Однако это не является ошибкой, более того, многие программисты заключают в фигурные скобки даже один оператор, чтобы исключить возможные ошибки, например, при добавлении еще одного или нескольких операторов.
Например, посмотрим на следующий пример.
class prog_10{
public static void main(String[] args){
int a=30;
int b=20;
if (a>b) {
System.out.println("Переменная a больше переменной b");
}
else
System.out.println("b меньше a");
int c=a+b;
System.out.println("Сумма чисел="+c);
}
}
После оператора "else" мы добавили еще 2 оператора:
Строка №10. Оператор присваивания, который записывает в переменную "c" значение суммы переменных "a" и "b".
Строка №11. Выводим эту сумму на экран.
В этой программе условие является истинным, т.е. выполнится оператор в строке №6, а операторы после "else" (строка №9-№11) не выполниться. Однако если посмотрим на результат, то увидим, что операторы в строке №10 и №11 тоже выполнились.
Использование составных операторов.
Переменная "c" была создана и ее значение выведено на экран. Почему так произошло?
Все дело как раз в фигурных скобках. Операторы после "else" не заключены в фигурные скобки, поэтому компилятор считает, что к "else" относится только один оператор в строке №9. Поэтому он не будет выполняться, а остальные выполняются. Чтобы компилятор считал, что все 3 оператора относятся к "else" необходимо заключить их в фигурные скобки.
class prog_10{
public static void main(String[] args){
int a=30;
int b=20;
if (a>b) {
System.out.println("Переменная a больше переменной b");
}
else {
System.out.println("b меньше a");
int c=a+b;
System.out.println("Сумма чисел="+c);
}
}
}
Вложенные операторы if.
Иногда после оператора "if" или "else" может быть записан еще один (или несколько) операторов "if", либо конструкций "if…else".
class prog_10{
public static void main(String[] args){
int a=30;
int b=20;
if (a>b) {
if (a==30) {
System.out.println("Переменная a="+a);
}
}
else {
System.out.println("a меньше b");
}
}
}
Строка №6. Здесь используется вложенный оператор "if". Фактически, он добавляет к программе еще одно условие. Сначала проверяется первое условие в строке №5 (a больше b). Если оно истинно, то проверяется второе условие в строке №6 (a равно 30). Если оно тоже истинно, то выполняется оператор в строке №7.
Вложенный оператор if.
Важно помнить: Оператор "else" всегда относится к ближайшему оператору "if", который находится с ним в одном блоке и не связан с другим оператором "if".
Пример:
class prog_10{
public static void main(String[] args){
int a=30;
int b=20;
if (a==30) {
if (b>a){
System.out.println("a меньше b");
}
if (b<a){
System.out.println("a больше b");
}
else {
System.out.println("Переменная a="+a);
}
}
else {
System.out.println("a меньше b");
}
}
}
Фигурная скобка в строке №5 открывает блок, который заканчивается в строке №15. Если кликнуть мышкой в редакторе NetBeans по любой фигурной скобке он подсветит 2-ую фигурную скобку, относящуюся к этому блоку.
Вложенный оператор if...else.
Оператор "else" внутри этого блока (строка №12) относится к ближайшему оператору "if" (строка №9).
Оператор "else" в строке №16 не может быть связан с "if" в строке №6 или №9, поскольку не находится с ними в одном блоке. Он связан с оператором "if" в строке №5.
Тернарный оператор??? (пр.12-13)