Задание 1. 1) Разрешение 80 dpi показывает, что на каждый дюйм изображения приходится 80 точек. Следовательно, размеры изображения в дюймах составят 320/80 × 640/80 = 4х8 дюймов. 2) Общее количество пикселей составит 320×640 = 204800. Для хранения одного пикселя в палитре из 256=2⁸ цветов потребуется 8 бит = 1 байт. Тогда для хранения всего изображения потребуется 204800×1 = 204800 байт = 204800/1024 = 200 Кбайт
Задание 2. Высказывание совершенно правильное. Чем больше точек будет содержать каждый дюйм (или сантиметр, миллиметр..) изображения, тем оно будет более подробным, т.е. качественнее. Разница между «качеством изображения» и «качеством отображения изображения на экране монитора» может быть, а может и не быть - все зависит от того, в какой ситуации рассматривается эта фраза. Если мы говорим любую из этих фраз, оценивая картинку на мониторе, то разницы нет, потому что мы описываем то, что видим. Если же мы под «качеством изображения» имеем в виду разрешение того или иного отображения картинки, т.е. количество дюймов (сантиметров, миллиметров...) которые устройство может отображать, то для монитора оно не превышает 92 dpi, а для принтера составляет минимум 300 dpi, т.е. при одинаковом размере изображения качество напечатанной на принтере картинки более чем втрое выше, чем её отображение на мониторе.
class IntInStr { public static void main (String[] args) { try { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String string; string = br.readLine(); String[] parts = string.split("[^\\d+\\-*/]+"); Vector<Integer> nums = new Vector<Integer>(); for(String part : parts) { Matcher isnum = Pattern.compile("^\\d+$").matcher(part); Matcher isnumop = Pattern.compile("^(\\d+)([+*/-])(\\d+)$").matcher(part); if (isnum.matches()) { int ipart = Integer.parseInt(part); nums.add(ipart); } if (isnumop.matches()) { int l = Integer.parseInt(isnumop.group(1)), r = Integer.parseInt(isnumop.group(3)), res; String operation = isnumop.group(2); switch(operation) { case "+": res = l + r; break; case "-": res = l - r; break; case "*": res = l * r; break; case "/": res = l / r; break; default: throw new ArithmeticException("token parse error"); } nums.add(res); } } int min = nums.get(0), max = nums.get(0); System.out.println("Numbers:"); for (int n : nums) { System.out.println(n); if (n > max) { max = n; } if (n < min) { min = n; } } System.out.format("Max: %d%nMin: %d%n", max, min); } catch(Exception e) { System.out.println(e.getMessage()); } } }
1) Разрешение 80 dpi показывает, что на каждый дюйм изображения приходится 80 точек. Следовательно, размеры изображения в дюймах составят 320/80 × 640/80 = 4х8 дюймов.
2) Общее количество пикселей составит 320×640 = 204800. Для хранения одного пикселя в палитре из 256=2⁸ цветов потребуется 8 бит = 1 байт. Тогда для хранения всего изображения потребуется 204800×1 = 204800 байт = 204800/1024 = 200 Кбайт
Задание 2.
Высказывание совершенно правильное. Чем больше точек будет содержать каждый дюйм (или сантиметр, миллиметр..) изображения, тем оно будет более подробным, т.е. качественнее.
Разница между «качеством изображения» и «качеством отображения изображения на экране монитора» может быть, а может и не быть - все зависит от того, в какой ситуации рассматривается эта фраза. Если мы говорим любую из этих фраз, оценивая картинку на мониторе, то разницы нет, потому что мы описываем то, что видим. Если же мы под «качеством изображения» имеем в виду разрешение того или иного отображения картинки, т.е. количество дюймов (сантиметров, миллиметров...) которые устройство может отображать, то для монитора оно не превышает 92 dpi, а для принтера составляет минимум 300 dpi, т.е. при одинаковом размере изображения качество напечатанной на принтере картинки более чем втрое выше, чем её отображение на мониторе.
import java.util.regex.*;
import java.lang.*;
import java.io.*;
class IntInStr
{
public static void main (String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String string;
string = br.readLine();
String[] parts = string.split("[^\\d+\\-*/]+");
Vector<Integer> nums = new Vector<Integer>();
for(String part : parts) {
Matcher isnum = Pattern.compile("^\\d+$").matcher(part);
Matcher isnumop = Pattern.compile("^(\\d+)([+*/-])(\\d+)$").matcher(part);
if (isnum.matches()) {
int ipart = Integer.parseInt(part);
nums.add(ipart);
}
if (isnumop.matches()) {
int l = Integer.parseInt(isnumop.group(1)),
r = Integer.parseInt(isnumop.group(3)),
res;
String operation = isnumop.group(2);
switch(operation) {
case "+":
res = l + r;
break;
case "-":
res = l - r;
break;
case "*":
res = l * r;
break;
case "/":
res = l / r;
break;
default:
throw new ArithmeticException("token parse error");
}
nums.add(res);
}
}
int min = nums.get(0), max = nums.get(0);
System.out.println("Numbers:");
for (int n : nums) {
System.out.println(n);
if (n > max) {
max = n;
}
if (n < min) {
min = n;
}
}
System.out.format("Max: %d%nMin: %d%n", max, min);
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
}