В Java определена троичная (с тремя операндами) условная операция (?:). Ее синтаксис:
Expression1? expression2: expression3
expression1 – выражение, имеющее значение типа boolean.
Если оно true, то вычисляется expression2, иначе (если expression1 − false), вычисляется expression3. Результатом условной операции является значение вычисляемого выражения. Требуется, чтобы expression2 и expression3 возвращали значение одного и того же типа, который не может быть void).
Пример демонстрирует предотвращение деления на нуль благодаря применению условной операции:
ratio = denom==0? 0: num/denom;.
Частному ratio присваивается 0, если делитель denom равен нулю, и результат деления в противном случае.
3.5. Выполнение работы в лаборатории
3.5.1. Работа в окне кода BlueJ c типом char
1) Объявите char-переменную и присвойте ей значение литерала – маленькой латинской буквы, например, 'z'. Проверьте значение переменной, нажав Enter.
2) Измените значение переменной, уменьшив или увеличив его на небольшое целое число (здесь нужно использовать явное преобразование типа в char для выражения в правой части оператора присваивания – объясните почему). Проверьте значение переменной и сформулируйте свой вывод.
|
|
3) Наберите последовательно в окне кода
'Q'<'F'
'F'<'Q'
'A'>'9'
'X'==88
'Y'=='X'+1
Проанализируйте значения, возвращенные операциями сравнения, и сделайте соответствующие выводы.
4) Проверьте работу методов toUpperCase () и toLowerCase(). Для этого введите в панель кода следующие операторы:
char a1= Character.toUpperCase ('v');
char a2= Character.toUpperCase ('V');
char a3= Character.toLowerCase ('Q');
char a4= Character.toLowerCase ('q');
После ввода каждого оператора проверяйте значение соответствующей переменной. Проанализируйте результаты. Сделайте выводы.
5) Проверьте работу методов isLetter(), isDigit(), isLetterOrDigit() (аргументом методов является символ). Для этого введите в панели кода следующие операторы:
boolean b1=Character.isLetter('A');
b1=Character.isLetter('9');
b1=Character.isDigit('A');
b1=Character.isDigit('9');
b1= Character. isLetterOrDigit ('9');
b1= Character. isLetterOrDigit ('A');
b1= Character. isLetterOrDigit ('&');
После ввода каждого оператора проверяйте значение переменной b1. Проанализируйте результаты. Сделайте выводы.
6) Определите десятичные и шестнадцатеричные коды маленьких и больших букв русского алфавита, набрав
System.out.println((int)буква); или
System.out.printf("%x",(int)буква);
и
System.out.println(Integer.toHexString((int)буква));
Например,
System.out.println((int)'Б');
System.out.printf("%x\n", (int)'Б');
System.out.println(Integer.toHexString((int)'Б'));
System.out.println((int)'б');
System.out.printf("%x\n", (int)'б');
System.out.println(Integer.toHexString((int)'б'));.
Сделайте выводы.
3.5.2. Работа в окне кода BlueJ c типом Boolean
1) В панели кода введите:
boolean a=false;
boolean q=true;
a==q
a!=q
a<q
a>q
Сделайте выводы.
2) В панели кода определите числовую переменную x и булевскую переменную b. Вычислите значение b = (x>2.0)&(x<5.0) при x=2.1. Повторите вычисление при x=5.3. Вычислите b = (x>2.0)|(x<5.0) при тех же значениях x. Приведите в отчете результаты и сделанные выводы.
|
|
3). Введите булевские переменные c, d, e, f. Вычислите e по формуле
e =! (c & d | true) | (! c |! d) для всех возможных значений c и d.
4) Вычислите f = (!(c|d)==(!c&!d)) для всех возможных значений c и d.
5) Составьте булевское выражение, которое истинно для значений x, находящихся внутри отмеченных интервалов (рисунок 3.2). Значения границ интервалов выберите самостоятельно. Проверьте в окне кода значение выражения для значений х, находящихся внутри интервалов и за пределами интервалов.
Рисунок 3.1. Интервалы на оси X, в которых выражение
должно быть истинно
6) Составьте булевское выражение, истинное для точек с координатами (x,y), лежащих внутри прямоугольника (рисунок 3.3). Расположение прямоугольника на плоскости XOY выберите самостоятельно. Проверьте в окне кода значение выражения для точек, находящихся внутри прямоугольника и за его пределами.
Рисунок 3.2. Область истинности выражения
По пунктам 3)-6) приведите результаты и сделайте выводы.
3.5.3. Разработка программы для выполнения операций с данными типа char и boolean
1) Разработайте программу согласно варианту задания (таблица 3.4).
2) Проведите отладку программы и испытание на достаточном количестве тестовых примеров.
Напомним, что под тестом (тестовым примером) понимается набор входных данных и соответствующий ему набор выходных данных программы. Программист должен разработать для своей программы набор тестов, проверяющий все возможные случаи (ветви) реализации программы.
2.6. Варианты заданий
В качестве индивидуального задания на лабораторную работу предлагается разработать программу, вычисляющую значение символьной переменной a в зависимости от значений символьных переменных с и d. В программе для присвоения значения переменной a предлагается использовать троичную условную операцию. В окне терминала должны быть выведены значения переменных a, с и d в виде символов и в виде кодов символов для каждого тестового примера. Варианты заданий приведены в таблице 3.4.
Вариант задания V необходимо вычислить по формуле V=N%14,
где N – номер студента в списке группы.
Таблица 3.4 – Варианты заданий
№ п/п | Правило для вычисления значения переменной a |
a=c+d, если с – цифра, d – буква, или с – знак '&'; a=c+2, в противном случае. | |
a=c-d, если с – буква, d – буква, с>d; a=047016 , в противном случае. | |
a=c, если с='A' или с='F' или с='a' или с='f ', b – цифра; a=d, в противном случае. | |
a=c+10, если c – знак '#' или '@', d – не буква; a='G', в противном случае. | |
a= Character.toUpperCase(d), если с='Y' или '!', d – буква или цифра; a=c, в противном случае. | |
a= Character.toUpperCase(с), если с='y' или 'n', d – не знак '%'; a=d, в противном случае. | |
a=c+20, если с='R' или 'r', d – не цифра и не буква; a=d; | |
a= Character.toLowerCase(c), если с – буква, d – цифра или буква или знак '*'; a=d++, в противном случае. | |
a= Character.toLowerCase(d), если с – цифра или знак '$', d – буква; a=c--; | |
a=d--; если с ='@', или с – буква, или d – не цифра; a=c--, в противном случае. | |
a='Y', если с – буква или цифра, d – не буква и не цифра и не знак '#'; a='N', в противном случае. | |
a= Character.toUpperCase(с), если с – буква, но с не является буквами 'A' или 'a', d ='%'; a=d, в противном случае. | |
a=c+d, если c – буква, но не 'R', d – цифра, но не '9'; a='7', в противном случае. | |
a='5', если с='9' или с='0', d – не буква и не '#'; a=c++, в противном случае. |
2.7. Рекомендации по составлению отчета по лабораторной работе
При выполнении отчета следует жестко придерживаться общих требований, изложенных в разделе 1 данных методических указаний.
В дополнение к общим требованиям к отчету, представленным в разделе 1, опишите все исследования, которые вы провели в окне кода (п. 3.5.1, п. 3.5.2) и сделанные вами выводы.
|
|
В задании 3.5.3 особое внимание уделить разделу 5) − тестовые примеры и результаты их обработки вручную. Разработать тесты для проверки работоспособности всех возможных линий поведения программы. Пункт 4) – схема и описание алгоритма решения задачи можно опустить.
5.8. Контрольные вопросы
1) Для чего используется тип char. Сколько битов занимает значение типа char?
2) Что такое Unicode? Как представляется символ в Java? Сколько символов можно представить соответствующим образом?
3) Как можно задать символьный литерал в программе? Назовите 3 способа.
4) Как вывести код символа?
5) Какие операции определены для типа char? Приведите в качестве примера участок кода, требующий явного преобразования типа char в int и int в char.
6) По какому принципу выполняется сравнение символов? Чему равны значения выражений 'A'<'D', 'C'>'F', '9'<'A'. Какого они типа?
7) С какими методами, реализующими функции над символами и определенными в классе-оболочке Character, вы познакомились в ходе выполнения данной лабораторной работы? Значения каких типов они возвращают?
8) Для чего используется тип boolean? Какой класс оболочка ему соответствует в Java?
9) Какие значения может принимать тип boolean?
10) Чему равны значения выражений 2>5, 3<10?
11) Какие операции определены для данных логического типа (boolean)?
12) Назовите правила выполнения операций булевой логики.
13) В чем состоит особенность выполнения укороченных операций && и ||?
14) Что из себя представляет условное выражение?
15) Приведите пример сложного условного выражения. Чему равно его значение?
16) Объясните синтаксис троичной условной операции. Приведите пример.
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
1. Ноутон П. Java 2: [пер. с англ.]/П.Ноутон, Г.Шилдт. – СПб.: БХВ-Петербург, 2007. – 1072 с.
2. Глушаков С. В Программирование на Java 2: учеб. пособие для студ. вузов/ С. В. Глушаков. -2-е изд.-Харьков: Фолио, 2003.-544 с.
3.http://www.softelectro.ru/ieee754.html.
Приложение А
Пример оформления титульного листа отчета
Институт информационных технологий и управления
|
|
в технических системах
Кафедра информационных технологий и компьютерных систем
ОТЧЕТ
по лабораторной работе № 1
ВЫПОЛНЕНИЕ ПРОСТЫХ ПРОГРАММ В BLUEJ
по дисциплине «Программирование. Базовые процедуры обработки информации»
Выполнил студент группы ИВТб-11д
Орлов И.В.
Проверил доцент Петров И.И.
Севастополь