Это указание компьютерной программе действовать как некий интерпретатор для решения задачи
4. Конечность - алгоритм закончится через определенное количество шагов.
5. Многократность - программа подходит для разных данных
6. Определенность - каждый шаг алгоритма должен быть четко и недвусмысленно определен не должен допускать произвольной
7. Корректность - дает верное решение, результативность.
Программа - это последовательность инструкций, предназначенных для выполнения компьютером.
Алгоритм на формальном языке
Команда - это указание компьютерной программе действовать как некий интерпретатор для решения задачи. (Описание действий)
Правила написания кода:
1. Понятные имена для переменных, переменные не должны начинаться с чисел и знаков;
2. Комментарии кода;
3. Нет - повторам кода, для повторного использования уже имеющихся строк есть функции и структуры.
4. Проверяйте код на ошибки и правильность оформления.
№ 2. Способы записи алгоритма программы -
1. Графический (блок-схемы)
2. Словесный (запись на естественном языке)
3. На формальном языке (языки программирования) - Компьютерный программы.
Этапы разработки программы:
1. Создание идеи
2. Определение входных и выходных данных и требований к программе.
Язык (требования к железу и т.д.)
3. Разработка алгоритма.
4. Кодирование программы - перевод алгоритма программы на язык компьютера (скорее на промежуточный язык. Т.к. язык компьютера - это байт код)
5. Компиляция и отладка
Компиляция - преобразовании кода программы в машинный код (по итогу получается exe файл)
Отладка - поиск и решение синтаксических, алгоритмических ошибок и ошибок времени исполнения.
Данный этап тесно связан с компиляцией и тестированием.
6. Тестирование. Так же тестирование может выполняться во время отладки программы.
7. Документирование.
№ 3. Языки программирования низкого и высокого уровня
Языки бывают: Компилируемыми (когда программа компилируется в машинный код), и интерпретируемыми (js, python. Интерпретатор выполняет эти программы без естественного перевода в байт код)
Встраиваемые языки.
Трансляторы делятся на:
компиляторы — превращают текст программы в машинный код, который можно сохранить и после этого использовать уже без компилятора (примером является исполняемые файлы с расширением *.exe).
интерпретаторы — превращают часть программы в машинный код, выполняют его и после этого переходят к следующей части. При этом каждый раз при выполнении программы используется интерпретатор.
Примером языка низкого уровня является ассемблер. Языки низкого уровня ориентированы на конкретный тип процессора и учитывают его особенности, поэтому для переноса программы на ассемблере на другую аппаратную платформу её нужно почти полностью переписать. Определенные различия есть и в синтаксисе программ под разные компиляторы. Правда, центральные процессоры для компьютеров фирм AMD и Intel практически совместимы и отличаются лишь некоторыми специфическими командами.
А вот специализированные процессоры для других устройств, например, видеокарт и телефонов содержат существенные различия.
Языки низкого уровня, как правило, используют для написания небольших системных программ, драйверов устройств, модулей стыков с нестандартным оборудованием, программирование специализированных микропроцессоров, когда важнейшими требованиями являются компактность, быстродействие и возможность прямого доступа к аппаратным ресурсам. Ассемблер — язык низкого уровня, широко применяется до сих пор.
Языки программирования высокого уровня
Особенности конкретных компьютерных архитектур в них не учитываются, поэтому созданные приложения легко переносятся с компьютера на компьютер. В большинстве случаев достаточно просто перекомпилировать программу под определенную компьютерную архитектурную и операционную систему. Разрабатывать программы на таких языках значительно проще и ошибок допускается меньше. Значительно сокращается время разработки программы, что особенно важно при работе над большими
Сейчас в среде разработчиков считается, что языки программирования, которые имеют прямой доступ к памяти и регистров или имеют ассемблерные вставки, нужно считать языками программирования с низким уровнем абстракции. Поэтому большинство языков, считавшихся языками высокого уровня до 2000 года сейчас уже таковыми не считаются.
Java — сильно типизированный объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой компьютерной архитектуре с помощью виртуальной Java-машины.
Сборка мусора в java заключается в том, что программисту не нужно следить за тем как распределяется память программы. Т.к. сборщик мусора автоматически решает многие проблемы, например очищает неиспользуемые переменные.
Отладка — этап разработки компьютерной программы, на котором обнаруживают, локализуют и устраняют ошибки. Чтобы понять, где возникла ошибка, приходится:
узнавать текущие значения переменных;
выяснять, по какому пути выполнялась программа.
Существуют две взаимодополняющие технологии отладки.
Использование отладчиков — программ, которые включают в себя пользовательский интерфейс для пошагового выполнения программы.
Вывод текущего состояния программы с помощью расположенных в критических точках программы операторов вывода.
Методы отладки программы:
Метод ручного тестирования.
При обнаружении ошибки необходимо выполнить тестируемую программу вручную, используя тестовый набор, при работе с которым была обнаружена ошибка.
Метод индукции.
Анализ ошибки исходя из последних действий совершенных пользователем. Из полученных данных мы можем составить список предполагаемых ошибок и проверить их.
Метод дедукции.
По методу дедукции вначале формируют множество причин, которые могли бы вызвать данное проявление ошибки. Затем анализируя причины, исключают те, которые противоречат имеющимся данным. Если все причины исключены, то следует выполнить дополнительное тестирование исследуемого фрагмента.
Метод обратного прослеживания.
Для небольших программ эффективно применение метода обратного прослеживания. Начинают с точки вывода неправильного результата. Для этой точки строится гипотеза о значениях основных переменных, которые могли бы привести к получению имеющегося результата. Далее, исходя из этой гипотезы, делают предложения о значениях переменных в предыдущей точке. Процесс продолжают, пока не обнаружат причину ошибки.
Виды ошибок: Логическая, синтаксическая, компиляции, среды выполнения, арифметическая, ошибка ресурса, взаимодействия
№ 4. Понятие переменной.
Переменна - поименованная, либо адресуемая иным способом область памяти, адрес которой используется для доступа к данным.
Ключевые и зарезервированный слова (java) - это те слова, которые использует ЯП (или планирует использовать).
Некоторые слова могут быть зарезервированны, но при этом они не используются ЯП
1. Целые числа: byte, short, int, long - представляют собой числа со знаком.
2. Числа с плавающей точкой - эта группа включает себе float и double - эти типы хранят числа с точностью до определенного знака после запятой
3. Символы - в эту группу входит типа char
4. Булевы значения -boolean - хранит значения типа "истина/лож"
Объявление переменных
имя_типа идентификатор [=значение] [, идентификатор [=значение] ] ;
c = 12; // присвоим значение уже после
= - оператор присваивания
Порядок операторов: 1 ()
5 >> >>> >= a = a *3; То же можно проделать с остальными арифметическими действиями.
Определить выделить какую-то цифру в числе можно при помощи взятие остатка или целой части от числа:
1234 / 1000; Ответ - 1, целая часть от деления
Константы
Кроме переменных, в Java для хранения данных можно использовать константы. В отличие от переменных константам можно присвоить значение только один раз. Константа объявляется также, как и переменная, только вначале идет ключевое слово final:
№ 6. Обмен значений переменных
Прямой обмен при помощи 3ех переменных
Обмен при помощи 2ух переменных
Обмен при помощи исключающего или (XOR)
int x = 5, y = 7;
x = x^y; // x == 2
public static void swap_opt(int a, int b)
//Пример для a = 101 (в двоичной системе) и b = 110
a = a ^ b; // a = 101^110 = 011
b = a ^ b; // b = 011^110 = 101
a = a ^ b; // a = 011^101 = 110
System.out.println("a: " + a);
или в более короткой записи:
y ^= (x ^= y);
x ^= y;
Инкремент и декремент
Операторы инкремента и декремента это унарные операторы, которые увеличивают или уменьшают на единицу значение операнда при использовании инкремента и декремента соответственно
Различают префиксную и постфиксную форму для обоих операторов. Префиксная форма сначала изменяет значение операнда на 1 и использует новое значение для дальнейших вычислений. Постфиксная форма сначала использует старое значение операнда, а затем изменяет его на 1
Префиксный оператор инкремента:
int m = 2 * ++i; // результат m = 4
Постфиксный оператор инкремента:
int m = 2 * i++; // результат m = 2
Префиксный оператор декремента:
int m = 2 * --i; // результат m = 2
Постфиксный оператор декремента:
int m = 2 * i--; // результат m = 4
Переполнение стека
System.out.println("[" + Byte.MIN_VALUE +" , " + Byte.MAX_VALUE + "]");
System.out.println("Byte.SIZE не число", записываемое константой NaN (Not a Number) и возникающее, например, при умножении нуля на бесконечность.
1) Строку конвертируем в число, а в ней есть буквы. Ответ – NaN
2) Бесконечность минус бесконечность. Ответ — NaN
3) Многие другие ситуации, где в ответе ждут число, а получается неизвестно что.
— А какие операции можно производить с Infinity и NaN?
— С NaN все очень просто. Любая операция, где есть NaN, дает в результате NaN.
Точность вычислений - ?!
Константы класса Math.
Класс Math содержит методы, связанные с геометрией и тригонометрией и прочей математики. Методы реализованы как static, поэтому можно сразу вызывать через Math.methodName() без создания экземпляра класса.
В классе определены две константы типа double: E и PI.
Math.PI
Math.exp
Методы класса Math: прямые трансцендентные, обратные трансцендентные, экспоненциальные. Пример
Трансцендентные числа , то есть числа (вещественные или комплексные), которые не могут быть корнями никакого многочлена с целыми коэффициентами. Например,такие важнейшие константы анализа, как pi и e, являются трансцендентными
double sin(double arg) | Возвращает синус угла arg, переданного в радианах |
double cos(double arg) | Возвращает косинус угла arg, переданного в радианах |
double tan(double arg) | Возвращает тангенс угла arg, переданного в радианах |
sin(), cos(), sqrt() - тоже трансцендентные
Обратные трансцендентные функции
Метод | Описание |
double asin(double arg) | Возвращает угол, синус которого равен arg. |
double acos(double arg) | Возвращает угол, косинус которого равен arg. |
double atan(double arg) | Возвращает угол, тангенс которого равен arg. |
double atan2(double x, double y) | Возвращает угол, тангенс которого равен x/y. |
Метод | Описание |
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. |
№8 функции округления. Генерация псевдослучайных чисел. Генерация целых и вещественных
чисел в заданном интервале.
Int abs(число) — вернет абсолютное число
Читайте также: