Слайд 1Гринчишин Михаил Александрович
Преподаватель
Клуб программистов 1С
Алгоритмы и программирование
Модуль 1
Занятие 2
Типы данных
                                                            
                                    
и отладка
                                                                    
                            							
							
							
						 
											
                            Слайд 2Задачи Java
http://informatics.mccme.ru/
Дистанционная подготовка / ► 1C / ► Занятие 2.
                                                            
                                    
Задачи: ЗАДАЧА А. 
	Сумма от 1 до N
Входные данные
Одно целое число N.
Выходные
                                    данные
Одно число – сумма всех целых чисел от 1 до N.
Примеры: входные данные 100; выходные данные 5050.
                                
                            							
														
						 
											
                            Слайд 3Создание первого проекта Java
Задача:
Первая задача:
import java.io.*; // библиотека для PrintWriter
import
                                                            
                                    
java.util.*; // библиотека для Scanner
public class prog1 {
public static void
                                    main(String[] args) {
Scanner in= new Scanner(System.in);
PrintWriter out = new PrintWriter(System.out);
long S = 0; // результат
long N = in.nextInt(); // ввод а
//решение
out.println(S); //вывод ответа
out.flush(); in.close;}}// 
                                
                            							
														
						 
											
                            Слайд 4Задачи Java
Очевидное решение: 	Сумма от 1 до N
for (int i
                                                            
                                    = 1; i 
                                    }
Результат: Test 3: Wrong answer
«А! ЦЕЛОЕ, ЭТО МОЖЕТ БЫТЬ И ОТРИЦАТЕЛЬНЫЕ!»
                                
 
                            							
														
						 
											
                            Слайд 5Задачи Java
Очевидное решение: 	Сумма от 1 до N
if (N 
                                                            
                                    0) {K = -N; }
for (int i = 1; i
                                    <= K; i++) { s += i; } 
if (N < 0)
{ s = -s + 1; }
Результат: Test 4: Time Limit
«Тип long, это же больше 1018, это же очень долго. 
Надо не циклом, а по формуле!» 
                                
 
                            							
														
						 
											
                            Слайд 6Задачи Java
Очевидное решение: 	Сумма от 1 до N
int N =
                                                            
                                    in.nextInt(); 
int s = 0; 
s = N * (N
                                    + 1) / 2; 
if (N < 0) 
{s = -s + 1;}
Результат: Test 5: Wrong Answer 
«Надо не int, а long!»
                                
 
                            							
														
						 
											
                            Слайд 7Задачи Java
Очевидное решение: 	Сумма от 1 до N
long N =
                                                            
                                    in.nextLong(); long s = 0;
s = N * (N +
                                    1) / 2; 
if (N < 0) 
{s = -s + 1;}
Результат: Test 6: Wrong Answer
«Сначала делить на 2, потом умножать!» 
                                
 
                            							
														
						 
											
                            Слайд 8Задачи Java
Очевидное решение: 	Сумма от 1 до N
long N =
                                                            
                                    in.nextLong(); 
long s = 0; 
s = N * ((N
                                    + 1) / 2); 
if (N < 0) 
{s = -s + 1;}
Результат: Test 8: Wrong Answer
«Делить надо то, что делится!» 
N – Если четное, N-1, если нечетное
                                
 
                            							
														
						 
											
                            Слайд 9Задачи Java
Очевидное решение: 	Сумма от 1 до N
long N =
                                                            
                                    in.nextLong(); 
long s = 0; 
if (N % 2 ==
                                    0) 
{s = (N / 2) * (N + 1));} 
else {s = N * ((N + 1) / 2); }
if (N < 0) {s = -s + 1; }
Результат: OK
                                
 
                            							
														
						 
											
                            Слайд 10Создание первого проекта Java
Создание первого проекта – работа с тестирующей
                                                            
                                    
системой (результаты работы)
Первая задача: А+В=?
OK — программа прошла все тесты,
                                    решение верное.
Wrong Answer (Неправильный ответ, WA) — программа прошла не все тесты, то есть работает не во всех случаях. В этом случае в графе «Ошибка на тесте» показывается номер теста, на котором программа выдаёт неверный ответ.
                                
                            							
														
						 
											
                            Слайд 11Создание первого проекта Java
Создание первого проекта – работа с тестирующей
                                                            
                                    
системой (результаты работы)
Первая задача: А+В=?
OK — программа прошла все тесты,
                                    решение верное.
Wrong Answer (Неправильный ответ, WA) — программа прошла не все тесты, то есть работает не во всех случаях. В этом случае в графе «Ошибка на тесте» показывается номер теста, на котором программа выдаёт неверный ответ.
                                
                            							
														
						 
											
                            Слайд 12Создание первого проекта Java
Создание первого проекта – работа с тестирующей
                                                            
                                    
системой (результаты работы)
Первая задача: А+В=?
Presentation Error (Неправильный формат вывода, PE)
                                    — означает, что на каком- то тесте программа выводит ответ не в том формате, как это требуется в условии задачи (например, выводит несколько чисел, когда требуется одно, или выводит слово, когда требуется число). 
 Runtime Error (Ошибка выполненияRE) — означает, что на каком-то тесте программа выполняет недопустимую операцию (например, происходит деление на 0, выход за пределы массива или иная ошибка, которая может привести к аварийному завершению программы)
                                
                            							
														
						 
											
                            Слайд 13Создание первого проекта Java
Создание первого проекта – работа с тестирующей
                                                            
                                    
системой (результаты работы)
Первая задача: А+В=?
Memory Limit (Превышен предел по памяти,
                                    ML) — превышен максимальный объём памяти, выделяемый для программы по условию. 
 Time Limit (Превышен предел времени выполнения программы, TL) — программа работает слишком долго. 
Compile Error (Ошибка компиляции, СE) — означает, что программа содержит синтаксические ошибки из-за чего тестирующая система не способна её откомпилировать и запустить на проверку. 
                                
                            							
														
						 
											
                            Слайд 14Создание первого проекта Java
Основные правила оформления решений
Программа-решение должна чётко соблюдать
                                                            
                                    
формат входных и выходных данных.
Программа-решение должна отработать (закончить выполнение) быстро.
Входные
                                    данные всегда корректны
Ограничения на входные данные учитываются при разработке программы, но никак не записываются в программу
                                
                            							
														
						 
											
                            Слайд 15Задачи Java
http://informatics.mccme.ru/
Задачи для тех, кто сдал контест первого занятия:
207 241
                                                            
                                    
174  1440 1693
                                                                    
                            							
														
						 
											
                            Слайд 16
Простые типы данных Java
Переменные целого типа
int a = 0;// целая
                                                            
                                    
переменная а, значение 0
long b = in.nextInt(); - неправильно!!!
long b
                                    = in.nextLong(); - правильно 
                                
                            							
														
						 
											
                            Слайд 17
Простые типы данных Java
Переменные вещественного типа
float b = 0.5; //
                                                            
                                    
вещественная b, значение 0.5
in.useLocale(Locale.US); 
float b = in.nextFloat(); 
                                                                    
                            							
														
						 
											
                            Слайд 18
Простые типы данных Java
Переменные символьного типа
char c = ‘A’; 	//символ,
                                                            
                                    
кавычки одинарные
String st = “st”;	//строка, кавычки двойные
Char c = in.nextChar();
                                    
                                
                            							
														
						 
											
											
                            Слайд 20
Арифметические операции Java
Деление
Результат деления целого на целое–целое число (остаток отбрасывается):
int
                                                            
                                    
a = 3, b = 4;
float x; 
x = 3
                                    / 4;  // = 0 
x = 3. / 4; // = 0.75
x = 3 / 4.; // = 0.75
x = a / 4;  // = 0
x = a / 4.; // = 0.75
x = a / b;  // = 0
x = float(a) / 4; // = 0.75 
x = a / float(b); // = 0.75
                                
                            							
														
						 
											
                            Слайд 21
Арифметические операции Java
Остаток от деления - %
int a, b, d;
d
                                                            
                                    = 85;
b = d / 10;  // 8 
a
                                    = d % 10;  // 5 
d = a % b;   // 5 
d = b % a;   // 3
Для отрицательных чисел:
int a = -7;    
b = a / 2; // -3 
d = a % 2; // -1
-7 = (-4)*2 + 1
остаток  0
                                
 
                            							
														
						 
											
                            Слайд 22
Арифметические операции Java
Сокращенная запись операций
int a, b;
...
a ++;  //
                                                            
                                    
a = a + 1; 
a --;  // a
                                    = a – 1; 
a += b; // a = a + b; 
a -= b; // a = a - b; 
a *= b; // a = a * b; 
a /= b; // a = a / b;
a %= b; // a = a % b;
                                
                            							
														
						 
											
                            Слайд 23
Операции объекта Math
Используется: Math.операция(аргументы)
Math.abs(x) — модуль числа
Math.sqrt(x)— квадратный корень
Math.sin(x) —
                                                            
                                    
синус угла, заданного в радианах
Math.cos(x) — косинус угла, заданного в
                                    радианах
Math.xp(x) — экспонента ех
Math.ln(x) — натуральный логарифм
Math.pow(x,y)— xy: возведение числа x в степень y
Math.floor(x)— округление «вниз»
Math.ceil(x) — округление «вверх»
                                
                            							
														
						 
											
                            Слайд 24
Операции с объектами
Используется: ссылка на объект
С любыми объектами в Java
                                                            
                                    
программисты работают при помощи ссылок.
                                                                    
                            							
														
						 
											
                            Слайд 25
Операции с объектами
Используется: ссылка на объект
Чаще всего сравнение объектов при
                                                            
                                    помощи операции равенства (==) является
ошибкой!
String s1 = "abc"; 
String s2
                                    = "abcd"; 
s2 = s2.substring(0, 3); // создается новая строка! if (s1 == s2) {out.println(s1 + " equals " + s2); }
else {out.println(s1 + " does NOT equal " + s2); }
Вывод:  abc does NOT equal abc
                                
 
                            							
														
						 
											
                            Слайд 26
Операции с объектами
Используется: ссылка на объект
Для корректного сравнения объектов используют
                                                            
                                    
специальные
функции.
                                                                    
                            							
														
						 
											
                            Слайд 27
Операции с объектами
Объекты BigInteger и BigDecimal
Во-первых, в Java не разрешена
                                                            
                                    
перегрузка операций. 
	Для того, чтобы, скажем, сложить
два объекта BigInteger, нужно
                                    пользоваться не операцией «+», а функцией add.
                                
                            							
														
						 
											
                            Слайд 28
Операции с объектами
Объекты BigInteger и BigDecimal
Во-вторых, в результате работы функций
                                                            
                                    
реализующих арифметические операции
исходное число не меняется, а создается и возвращается
                                    новое число – результат
операции. 
Например, код:
BigInteger b = new BigInteger("1"); 
b.add(b); // b плюс b out.println(b); 
Выведет 1
Правильно
b = b.add(b);
                                
                            							
														
						 
											
                            Слайд 29
Операции с объектами
Объекты BigInteger и BigDecimal
Во-вторых, в результате работы функций
                                                            
                                    
реализующих арифметические операции
исходное число не меняется, а создается и возвращается
                                    новое число – результат
операции. 
Например, код:
BigInteger b = new BigInteger("1"); 
b.add(b); // b плюс b out.println(b); 
Выведет 1
Правильно
b = b.add(b);
                                
                            							
														
						 
											
                            Слайд 30Создание первого проекта Java
Соедините любые три высказывания по итогам занятия