Троичная условная операция

В 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д

Орлов И.В.

Проверил доцент Петров И.И.

Севастополь


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: