Light-electric.com

IT Журнал
1 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

A b c программирование

Урок №43. Логические операторы: И, ИЛИ, НЕ

Обновл. 30 Дек 2019 |

В то время как операторы сравнения используются для проверки конкретного условия: ложное оно или истинное, они могут проверить только одно условие за определённый промежуток времени. Но бывают ситуации, когда нужно протестировать сразу несколько условий. Например, чтобы узнать, выиграли ли мы в лотерею, нам нужно сравнить все цифры купленного билета с выигрышными. Если в лотерее 6 цифр, то нужно выполнить 6 сравнений, все из которых должны быть true.

Также иногда нам нужно знать, является ли хоть одно из нескольких условий истинным. Например, мы не пойдём сегодня на работу, если больны или слишком устали, или если выиграли в лотерею Нам нужно проверить, является ли хоть одно из этих 3 условий истинным. Как это сделать? С помощью логических операторов! Они позволяют проверить сразу несколько условий за раз.

В C++ есть 3 логических оператора:

Логический оператор НЕ

Если операндом является true, то после применения логического НЕ результатом будет false. Если же операнд до применения оператора НЕ является false, то после его применения — станет true. Другими словами, логический оператор НЕ меняет результат с true на false и наоборот. Он часто используется в условных выражениях:

Следует помнить, что логический оператор НЕ имеет очень высокий уровень приоритета. Новички часто совершают следующую ошибку:

Но х ведь не равно у , как это возможно? Поскольку приоритет логического оператора НЕ выше, чем приоритет оператора равенства, то выражение ! х == у обрабатывается как (! х) == у . Так как х — это 5 , то !x — это 0 . Условие 0 == у ложное, поэтому выполняется часть else!

Напоминание: Любое ненулевое целое значение в логическом контексте является true. Так как х = 5 , то х вычисляется как true, а вот !x = false , т.е. 0 . Использование целых чисел в логических операциях подобным образом может запутать не только пользователя, но и самого разработчика, поэтому мы не советуем так делать!

Правильный способ написания программы выше:

Правило: Если логический оператор НЕ должен работать с результатами работы других операторов, то другие операторы и их операнды должны находиться в круглых скобках.

Логический оператор ИЛИ

Если хоть одно из двух условий является истинным, то логический оператор ИЛИ является true.

Рассмотрим следующую программу:

Вы можете соединить сразу несколько условий:

value1 || (value2 && value3)

(value1 || value2) && value3

Хорошей практикой является использование круглых скобок с операциями. Это предотвратит ошибки приоритета, увеличит читабельность кода и чётко даст понять компилятору, как следует обрабатывать выражения. Например, вместо того, чтобы писать value1 && value2 || value3 && value4 , лучше записать (value1 && value2) || (value3 && value4) .

Законы Де Моргана

Многие программисты совершают ошибку, думая, что !(x && y) — это то же самое, что и !x && !y . К сожалению, вы не можете «использовать» логическое НЕ подобным образом.

!(x && y) эквивалентно !x || !y
!(x || y) эквивалентно !x && !y

Другими словами, логические операторы И и ИЛИ меняются местами! В некоторых случаях, это даже полезно: улучшает читабельность.

А где же побитовое исключающее ИЛИ (XOR)?

Побитовое исключающее ИЛИ (XOR) — это логический оператор, который используется в некоторых языках программирования для проверки на истинность нечётного количества условий.

В C++ нет такого оператора. В отличии от логических И/ИЛИ, к XOR не применяется короткий цикл вычислений. Однако его легко можно сымитировать, используя оператор неравенства (!=):

Можно также расширить количество операндов:

Следует отметить, что приведенные выше шаблоны XOR работают только, если операнды логического типа данных (а не целочисленных типов). Если вы хотите, чтобы это работало и с целыми числами, то используйте оператор static_cast.

Форма XOR, которая работает и с другими типами данных (с помощью static_cast мы можем конвертировать любой тип данных в bool):

Какой результат следующих выражений?

(true && true) || false

(false && true) || true

(false && true) || false || true

(5 > 6 || 4 > 3) && (7 > 8)

Ответ

Примечание: В ответах объяснение выполняется с помощью стрелочки (=>). Например, (true || false) => true означает, что результатом выражения (true || false) является true .

(true && true) || false => true || false => true

(false && true) || true => false || true => true

(false && true) || false || true => false || false || true => false || true => true

(5 > 6 || 4 > 3) && (7 > 8) => (false || true) && false => true && false => false

!(7 > 6 || 3 > 4) => !(true || false) => !true => false

Курсы «C#.NET Developer»

Курсы «Java Developer»

Курсы «Frontend Developer»

Курсы «JavaScript Developer»

Курсы «Python Developer»

Курсы «Unity/Game Developer»

Поделиться в социальных сетях:

Урок №42. Операторы сравнения

Комментариев: 11

Подскажите пожалуйста, в соответствии со стандартом C++, оператор && всегда вычисляет оба операнда или только если первый из них возвращает true?

будут ли всегда выполнены обе функции f1() и f2()?

если f1() или f2() возвращает false, то будет выполнена только одна из функций, но какая именно стандартом не регламентируется

в данном выражении обе функции выполняться только в случае если первая будет true

Не перестаю восхищаться изложенному материалу! Огромное спасибо за проделанную работу!

Пожалуйста)) Мне приятно)

Про рекомендацию использовать скобки, если сомневаетесь в приоритете:
Страуструп крайне не рекомендует «украшать» код скобками… лучше или разобраться в приоритетах или разбить выражение на несколько, если есть хоть какие-то сомнения.
Вместо:

«Для реализации оператора XOR» используют ^. В с++ — это именно XOR, а не возведение в степень.

^ — это битовый оператор, а данная статья — о логических. Логического XOR в плюсах нет.
Для побитового исключения используется именно ^ . Для реализации же логического XOR использовать ^ крайне глупо потому что:
1. Сравнивая булевы значения будет очевидней(и эффективней, хоть эти наносекунды уже никого не интересуют) написать true != false , чем true ^ false .
2. В случае сравнения не булевых значений стоит продолжать существующую логику. На примере чисел: любое число, отличное от нуля — это true. Следовательно нельзя просто написать 1 ^ 2 — потому что эта операция вернет 3 , что интерпретируется, как true . Почему? Потому что любое не нулевое число должно восприниматься, как истина, следовательно 1 -> true , 2 -> true . результатом XOR между ними должен быть false . Таким образом доказываем неприминимость ^ , приходим к необходимости преобразования операндов в булевы значения и смотрим пункт 1.

^ — это побитовый оператор… ожидать от него поведения логического XOR — нарываться на потенциальные алгоритмические ошибки…
можно в качестве XOR использовать оператор != для логических выражений (тоже некорректно работает, если Вы ожидаете неявных преобразований типов)

Скажите, пожалуйста, почему в примере из урока нужно использовать if (!(x == y)), а не if (x != y) ?

Можно использовать и второй вариант, но != зачастую используется для реализации оператора XOR и в цепочке операндов, а !(==) для проверки на неравенство определенного выражения. Но использовать можно как первый, так и второй вариант — работать будет.

Указатели в C++ — урок 7

При выполнении любой программы, все необходимые для ее работы данные должныбыть загружены в оперативную память компьютера. Для обращения к переменным, находящимся в памяти, используются специальные адреса, которые записываются в шестнадцатеричном виде, например 0x100 или 0x200 .

Если переменных в памяти потребуется слишком большое количество, которое не сможет вместить в себя сама аппаратная часть, произойдет перегрузка системы или её зависание.

Читать еще:  Asp язык программирования

Если мы объявляем переменные статично, так как мы делали в предыдущих уроках, они остаются в памяти до того момента, как программа завершит свою работу, а после чего уничтожаются.

Такой подход может быть приемлем в простых примерах и несложных программах, которые не требуют большого количества ресурсов. Если же наш проект является огромным программным комплексом с высоким функционалом, объявлять таким образом переменные, естественно, было бы довольно не умно.

Можете себе представить, если бы небезызвестная Battlefield 3 использовала такой метод работы с данными? В таком случае, самым заядлым геймерам пришлось бы перезагружать свои высоконагруженные системы кнопкой reset после нескольких секунд работы игры.

Дело в том, что играя в тот же Battlefield, геймер в каждый новый момент времени видит различные объекты на экране монитора, например сейчас я стреляю во врага, а через долю секунды он уже падает убитым, создавая вокруг себя множество спецэффектов, таких как пыль, тени, и т.п.

Естественно, все это занимает какое-то место в оперативной памяти компьютера. Если не уничтожать неиспользуемые объекты, очень скоро они заполнят весь объем ресурсов ПК.

По этим причинам, в большинстве языков, в том числе и C/C++, имеется понятие указателя. Указатель — это переменная, хранящая в себе адрес ячейки оперативной памяти, например 0x100.

Мы можем обращаться, например к массиву данных через указатель, который будет содержать адрес начала диапазона ячеек памяти, хранящих этот массив.

После того, как этот массив станет не нужен для выполнения остальной части программы, мы просто освободим память по адресу этого указателя, и она вновь станет доступно для других переменных.

Ниже приведен конкретный пример обращения к переменным через указатель и напрямую.

Пример использования статических переменных

Пример использования динамических переменных

Синтаксис первого примера вам уже должен быть знаком. Мы объявляем/инициализируем статичные переменные a и b , после чего выполняем различные операции напрямую с ними.

Во втором примере мы оперируем динамическими переменными посредством указателей. Рассмотрим общий синтаксис указателей в C++.

Выделение памяти осуществляется с помощью оператора new и имеет вид: тип_данных *имя_указателя = new тип_данных; , например int *a = new int; . После удачного выполнения такой операции, в оперативной памяти компьютера происходит выделение диапазона ячеек, необходимого для хранения переменной типа int .

Логично предположить, что для разных типов данных выделяется разное количество памяти. Следует быть особенно осторожным при работе с памятью, потому что именно ошибки программы, вызванные утечкой памяти, являются одними из самых трудно находимых. На отладку программы в поисках одной ничтожной ошибки, может уйти час, день, неделя, в зависимости от упорности разработчика и объема кода.

Инициализация значения, находящегося по адресу указателя выполняется схожим образом, только в конце ставятся круглые скобки с нужным значением: тип данных *имя_указателя = new тип_данных(значение) . В нашем примере это int *b = new int(5) .

Для того, чтобы получить адрес в памяти, на который ссылается указатель, используется имя переменной-указателя с префиксом & . перед ним (не путать со знаком ссылки в C++).

Например, чтобы вывести на экран адрес ячейки памяти, на который ссылается указатель b во втором примере, мы пишем cout . В моей системе, я получил значение 0x1aba030 . У вас оно может быть другим, потому что адреса в оперативной памяти распределяются таким образом, чтобы максимально уменьшить фрагментацию. Поскольку, в любой системе список запущенных процессов, а также объем и разрядность памяти могут отличаться, система сама распределяет данные для обеспечения минимальной фрагментации.

Для того, чтобы получить значение, которое находится по адресу, на который ссылается указатель, используется префикс * . Данная операция называется разыменованием указателя.

Во втором примере мы выводим на экран значение, которое находится в ячейке памяти (у меня это 0x1aba030 ): cout . В этом случае необходимо использовать знак * .

Чтобы изменить значение, находящееся по адресу, на который ссылается указатель, нужно также использовать звездочку, например, как во втором примере — *b = *a + *b; .

  • Когда мы оперируем данными, то используем знак *
  • Когда мы оперируем адресами, то используем знак &

В этих вещах очень часто возникают недопонимания, и кстати, не только у новичков. Многие из тех, кто начинал программировать с того же php, также часто испытывают подобную путаницу при работе с памятью.

Для того, чтобы освободить память, выделенную оператором new, используется оператор delete.

Пример освобождения памяти

При использовании оператора delete для указателя, знак * не используется.

Технологии программирования

Объявление переменных и типы данных в C++.

В Си++ переменные можно описывать в любой части программы, но перед непосредственным их использованием.

Основные типы данных языка C++

Объявление переменных в C++

При объявлении переменной можно сразу ее инициализировать.

Имя переменной (идентификатор) может состоять только из латинских символов строчных и прописных, цифр от 0 до 9 и знака подчёркивания. При этом имя переменной не может начинаться с цифры.

Переполнение данных

Результат выполнения данной программы:
a=65535
a+2=1

Константные переменные, преобразование типов данных в C++.

Квалификатор const.

Если переменная объявлена с ключевым словом const, значит, она не должна меняться. После определения константной переменной нельзя изменить ее значение или передать ее в качестве аргумента функции, которая не гарантирует ее неизменности.

Константные переменные, преобразование типов данных в C++.

Отличия const и директивы #define: директива #define создает макроконстанту, и ее действие распространяется на весь файл, а с помощью const создается константная переменная, которая может иметь ограниченную область видимости.

Квалификатор volatile

Этот квалификатор используется в тех случаях, когда надо объявить переменную, которая может быть изменена в результате выполнения внешних действий не контролируемых программой, например, системными устройствами (таймером).

Этот квалификатор может быть также использован для описания объектов данных, используемых разными процессами в многозадачной среде.

Операторы в C++.

Побитовое ИЛИ (|).

Оператор | записывает в бит результата единицу только в том случае, если хотя бы один из сравниваемых бит равен 1. Этот оператор часто используют для установки отдельных битов числа.

01001010 | 10001101 // результат 11001111

Технологии программирования

Исключающее ИЛИ (^).

Оператор ^ записывает в бит результата единицу в том случае, если сравниваемые биты отличаются друг от друга. Этот оператор часто применяется при выводе изображений на экран, когда необходимо накладывать друг на друга несколько графических слоев.

Операторы сдвига.

Первый сдвигает битовое представление целочисленной переменной, указанной слева от оператора, влево на количество битов, указанное справа от оператора. При этом освобождающиеся младшие биты заполняются нулями, а соответствующее количество старших битов теряется.

Инкрементирование и декрементирование.

Инкрементирование (++) и декрементирование (—) являются соответственно операциями увеличения или уменьшения значения переменной на 1.

Пример.

В постфиксной записи a++ сначала возвращается значение переменной, после чего она увеличивается на 1, в префиксной записи наоборот.

Пример.

Основные математические операторы в С++

+ — сложение;
— — вычитание;
* — умножение;
/ — деление или целочисленное деление (для целочисленных переменных);
% — деление по модулю (для целочисленных переменных).

Комбинированные операторы присваивания.

Пример.

Основные математические функции в C++.

Преобразование типов данных в C++.

При использовании в операции переменных различных типов данных Си может автоматически преобразовывать данные из одного типа в другой.
Автоматическое преобразование типов данных приводится к типу данных имеющего более высокий приоритет. Типы данных в порядке уменьшения приоритета:

double
float
long
int
short

Пример

Результат выполнения операции fval1/fval2 равен 0,3;

Результат выполнения операций в левой части присваивается целочисленной переменной ival, значение этой переменной будет равно 3 (дробная часть отбрасывается).

Задание. Определите значение переменной fval, полученное в результате выполнения фрагмента программы

int ival1=3, ival2=10;
float fval=3.5;
fval=fval+ival1/ival2;

Явное преобразование типов

Если в программе необходимо временно изменить тип некоторой переменной, то перед ее именем в круглых скобках указывается название соответствующего типа данных.

Читать еще:  Создание языка программирования на c

Например

int ival1=3, ival2=10;
float fval=3.5;
fval=fval+(float)ival1/ival2; // fval=fval+ival1/(float)ival2;

Задания для самостоятельной работы

Определите, что будет выведено на экран в результате работы следующей программы.

Наберите текст программы и проверьте правильность ответа.

Следующая программа должна была вывести результат деления числа a на 2. Выясните, корректно ли работает данная программа. Исправьте ее для корректной работы.

Определите, что будет выведено на экран в результате работы следующей программы.

Наберите текст программы и проверьте правильность ответа.

  • Дан прямоугольный треугольник с катетами a и b. Составьте программу для вычисления гипотенузы c.
  • Треугольник задан координатами своих вершин A(x1,y1), B(x2,y2), C(x3,y3). Составьте программу для вычисления длин его сторон, периметра и площади.
  • Даны два вещественных числа. Составьте программу для нахождения коэффициентов приведенного квадратного уравнения, корнями которого являются эти числа.
  • Составьте программу для нахождения числа сотен и тысяч в заданном шестизначном натуральном числе.
  • Составьте программу для нахождения второй справа цифры в записи заданного четырехзначного целого числа.
  • Даны четыре целых числа (hour, min, sec, time). Первые три из них (hour, min, sec) — это время (в часах, минутах и секундах) начала просмотра фильма, четвёртое (time) определяет продолжительность фильма в секундах. Составьте программу для нахождения времени окончания просмотра фильма. Считать, что фильм шёл непрерывно.
  • На первую клетку шахматной доски положили 1 зерно, а на каждую следующую клетку на n зёрен больше, чем на предыдущую. Составьте программу, которая вычисляет, сколько всего зёрен оказалось на шахматной доске.

5 языков программирования, которые надо учить первыми

Сегодня каждый, кто стремится попасть в IT, задается вопросом — какой язык программирования изучить? Все ищут универсальный ответ, который предопределит головокружительную карьеру. Да, до изобретения интернета и появления мобильных платформ можно было освоить один язык, написать на нем программу и быть востребованным разработчиком. Сегодня реалии таковы, что даже джуниорам предъявляется огромный список требований, среди которых — знание нескольких языков.

Судите сами: для веб-разработки неплохо бы владеть PHP, JavaScript, Python, Ruby, а еще HTML и CSS; в мобильной сфере — Swift, Objective-C, Java, C#. Перечень языков для создания десктопных приложений можно даже не начинать — по сути, все будут полезны. Именно поэтому мы взяли на себя ответственность назвать 5 языков программирования, которые надо изучить хотя бы шапочно, чтобы сегодня называться программистом.

Python

Python — пожалуй, самый простой язык программирования из нашего списка. Здесь минимум служебных символов, динамическая типизация, максимально понятный синтаксис. И если вы мало что поняли из прошлого предложения — это повод начать обучение именно с Python.

Несмотря на визуальную простоту, этот язык — один из мощнейших. С его помощью с одинаковой легкостью можно и работать с текстом, и строить нейронные сети. Посмотрите:

В этом коде мы создали собственную функцию для вычисления последовательности Фибоначчи, а потом вывели ее на экран. Всего 6 строк потребовалось, чтобы описать достаточно сложное математическое действие.

Стоит упомянуть, что на данный момент актуальны две версии: Python 2 и Python 3. Вам за основу лучше брать последнюю, так как поддержка Python 2, а значит — и активная разработка на ней, прекратится совсем скоро.

Кстати, для тех, кто решился изучать Python, мы подготовили список полезных и практичных советов.

JavaScript

Следующий must have среди языков — JavaScript, для работы с ним хватит браузера. Синтаксис здесь на порядок сложнее: появляются служебные символы и конструкции с разношерстными скобками, названия функций далеко не всегда раскрывают суть действия, и даже простейший код имеет структурированный вид. Взглянем на переписанный код с функцией Фибоначчи:

Объем кода практически не изменился, зато снизилась читаемость. После изучения Python вы без проблем разберетесь, как работает структура return, и оцените удобство именно такого способа записи.

Кроме того, экосистема JavaScript богаче, чем Python. Она предлагает обилие сред разработки, редакторов кода, фреймворков, библиотек. Это еще один шаг к пониманию, как работает «взрослое» программирование.

В целом, JavaScript незначительно уступает Python по спектру решаемых задач, но его возможности «глубже». Знание этого языка пригодится при разработке программ на любых платформах.

Если вы не определились с языком, значит еще не решили, что вас привлекает: веб, мобильные или десктопные приложения. Тогда ваше решение — C#, универсальный инструмент для всех направлений разработки. Чтобы создавать десктопные приложения, понадобится Visual Studio (версия Community — бесплатная). Для мира мобильных устройств установите Xamarian, а для веба пригодится ASP.NET.

Взглянем на наш код на языке C#:

Код вновь незначительно усложнился — это связано с использованием ключевого слова static. На этом этапе вы познакомитесь с грамотным использованием памяти, областями видимости данных и полностью погрузитесь в ООП. Ну, если не успели при знакомстве с JavaScript.

Подробней о языке C# вы можете узнать в нашей ознакомительной статье.

Swift

Подходим к самому интересному — языкам, безупречное владение которыми поможет вам попасть в сферу мобильной разработки. Swift не вполне универсален: он еще не полностью вытеснил Objective-C из приложений для Apple, но перспективы у него блестящие.

Четвертая версия Swift вышла в 2017 году: она содержит множество улучшений для работы со строками, коллекциями; возросла надежность и многое другое. Это уже не «сырой» язык, а классический представитель верхушки рейтинга TIOBE с планомерным развитием. С помощью Swift вы можете создавать приложения для всех продуктов Apple: macOS, watchOS, iOS и любой новой системы, если она появится.

Посмотрим на код последовательности Фибоначчи:

Более двух десятков лет этот язык находится в списке самых востребованных, а это уже что-то значит. Сегодня он в основном ассоциируется с разработкой приложений для Android — но это лишь малая часть его возможностей. При помощи Java вы можете создавать графические виджеты для веба или писать десктопные приложения — принцип независимости от платформы и устройства в Java живет и процветает.

Кроме того, Java — великолепный язык, чтобы полноценно понять программирование: здесь реализованы все принципы ООП, организована работа с памятью и периферией, можно поупражняться с функциональным программированием.

А вот так выглядит Java-код нашей последовательности в простейшем императивном случае:

Объем может показаться чрезмерным, но в действительности это не более чем базовые конструкции, обеспечивающие понятность кода и его надежность.

Для тех, кто хочет начать быстрое освоение Java, наш педагог Сергей Ирюпин подготовил цикл вводных статей, которые мы постепенно публикуем в блоге:

Заключение

К списку можно было бы добавить ряд полезных языков вроде PHP, C++ или Ruby. Или несколько функциональных для общего развития: Lisp, Haskell, Clojure. Впрочем, до этого вы обязательно дойдете. Но сперва выбирайте специализацию, записывайтесь на курсы GeekBrains и осваивайте пять описанных must know языков.

UPD. Если вы хотите знать, как изменилась ситуация с языками программирования во второй половине 2019 года, мы подготовили об этом отдельный материал.

Сегодня каждый, кто стремится попасть в IT, задается вопросом — какой язык программирования изучить? Все ищут универсальный ответ, который предопределит головокружительную карьеру. Да, до изобретения интернета и появления мобильных платформ можно было освоить один язык, написать на нем программу и быть востребованным разработчиком. Сегодня реалии таковы, что даже джуниорам предъявляется огромный список требований, среди которых — знание нескольких языков.

Судите сами: для веб-разработки неплохо бы владеть PHP, JavaScript, Python, Ruby, а еще HTML и CSS; в мобильной сфере — Swift, Objective-C, Java, C#. Перечень языков для создания десктопных приложений можно даже не начинать — по сути, все будут полезны. Именно поэтому мы взяли на себя ответственность назвать 5 языков программирования, которые надо изучить хотя бы шапочно, чтобы сегодня называться программистом.

Читать еще:  Язык программирования c история создания

Python

Python — пожалуй, самый простой язык программирования из нашего списка. Здесь минимум служебных символов, динамическая типизация, максимально понятный синтаксис. И если вы мало что поняли из прошлого предложения — это повод начать обучение именно с Python.

Несмотря на визуальную простоту, этот язык — один из мощнейших. С его помощью с одинаковой легкостью можно и работать с текстом, и строить нейронные сети. Посмотрите:

В этом коде мы создали собственную функцию для вычисления последовательности Фибоначчи, а потом вывели ее на экран. Всего 6 строк потребовалось, чтобы описать достаточно сложное математическое действие.

Стоит упомянуть, что на данный момент актуальны две версии: Python 2 и Python 3. Вам за основу лучше брать последнюю, так как поддержка Python 2, а значит — и активная разработка на ней, прекратится совсем скоро.

Кстати, для тех, кто решился изучать Python, мы подготовили список полезных и практичных советов.

JavaScript

Следующий must have среди языков — JavaScript, для работы с ним хватит браузера. Синтаксис здесь на порядок сложнее: появляются служебные символы и конструкции с разношерстными скобками, названия функций далеко не всегда раскрывают суть действия, и даже простейший код имеет структурированный вид. Взглянем на переписанный код с функцией Фибоначчи:

Объем кода практически не изменился, зато снизилась читаемость. После изучения Python вы без проблем разберетесь, как работает структура return, и оцените удобство именно такого способа записи.

Кроме того, экосистема JavaScript богаче, чем Python. Она предлагает обилие сред разработки, редакторов кода, фреймворков, библиотек. Это еще один шаг к пониманию, как работает «взрослое» программирование.

В целом, JavaScript незначительно уступает Python по спектру решаемых задач, но его возможности «глубже». Знание этого языка пригодится при разработке программ на любых платформах.

Если вы не определились с языком, значит еще не решили, что вас привлекает: веб, мобильные или десктопные приложения. Тогда ваше решение — C#, универсальный инструмент для всех направлений разработки. Чтобы создавать десктопные приложения, понадобится Visual Studio (версия Community — бесплатная). Для мира мобильных устройств установите Xamarian, а для веба пригодится ASP.NET.

Взглянем на наш код на языке C#:

Код вновь незначительно усложнился — это связано с использованием ключевого слова static. На этом этапе вы познакомитесь с грамотным использованием памяти, областями видимости данных и полностью погрузитесь в ООП. Ну, если не успели при знакомстве с JavaScript.

Подробней о языке C# вы можете узнать в нашей ознакомительной статье.

Swift

Подходим к самому интересному — языкам, безупречное владение которыми поможет вам попасть в сферу мобильной разработки. Swift не вполне универсален: он еще не полностью вытеснил Objective-C из приложений для Apple, но перспективы у него блестящие.

Четвертая версия Swift вышла в 2017 году: она содержит множество улучшений для работы со строками, коллекциями; возросла надежность и многое другое. Это уже не «сырой» язык, а классический представитель верхушки рейтинга TIOBE с планомерным развитием. С помощью Swift вы можете создавать приложения для всех продуктов Apple: macOS, watchOS, iOS и любой новой системы, если она появится.

Посмотрим на код последовательности Фибоначчи:

Более двух десятков лет этот язык находится в списке самых востребованных, а это уже что-то значит. Сегодня он в основном ассоциируется с разработкой приложений для Android — но это лишь малая часть его возможностей. При помощи Java вы можете создавать графические виджеты для веба или писать десктопные приложения — принцип независимости от платформы и устройства в Java живет и процветает.

Кроме того, Java — великолепный язык, чтобы полноценно понять программирование: здесь реализованы все принципы ООП, организована работа с памятью и периферией, можно поупражняться с функциональным программированием.

А вот так выглядит Java-код нашей последовательности в простейшем императивном случае:

Объем может показаться чрезмерным, но в действительности это не более чем базовые конструкции, обеспечивающие понятность кода и его надежность.

Для тех, кто хочет начать быстрое освоение Java, наш педагог Сергей Ирюпин подготовил цикл вводных статей, которые мы постепенно публикуем в блоге:

Заключение

К списку можно было бы добавить ряд полезных языков вроде PHP, C++ или Ruby. Или несколько функциональных для общего развития: Lisp, Haskell, Clojure. Впрочем, до этого вы обязательно дойдете. Но сперва выбирайте специализацию, записывайтесь на курсы GeekBrains и осваивайте пять описанных must know языков.

UPD. Если вы хотите знать, как изменилась ситуация с языками программирования во второй половине 2019 года, мы подготовили об этом отдельный материал.

Программирование разветвляющихся алгоритмов

Условная инструкция

Условная инструкция – это инструкция управления реализующая алгоритмическую структуру “ветвление”. Синтаксически условная инструкция (далее – инструкция if ) записывается следующим образом:

Выше описана полная форма условной инструкции if . В неполной форме блок на else отсутствует. Выражение-условие следует после служебного слова if и всегда заключается в круглые скобки.
Выражение-условие – это логическое выражение или выражение скалярного типа. Если выражение принимает значение true или любое ненулевое значение, то будут выполняться инструкции, находящиеся в блоке if . Если выражение принимает значение false или 0 , то будут выполняться инструкции, находящиеся в блоке else . Если в блоке более одной инструкции, то эта группа инструкций называется составной и должна обязательно заключаться в фигурные скобки.
Фигурные скобки в C++ определяют область видимости данных. Те данные, которые определяются внутри фигурных скобок будут недоступными вне этих скобок. Например:
Программа 8.4.1

Такая программа содержит одну ошибку (попытка использования неопределенного объекта) и одно предупреждение (переменная x не используется). Иными словами, переменная x , объявленная в блоке if , не видна вне этого блока.
Для более компактного оформления программного кода мы будем использовать следующий стиль написания инструкции if (стиль Java):

Неполная форма инструкции if

Неполная форма ветвления используется столь же часто, как и полная. Приведем примеры нескольких задач.
Программа 8.4.2 На вход программе подаются 4 числа определить количество положительных чисел в исходном наборе. Если таких чисел нет, то сообщить об этом.

Обсуждение. Если счетчик i не изменит своего значения после прохождения каскада инструкций if , то его значение так и останется нулевым. Результат операции !i – true , если значение i == 0 (логическое отрицание).
Программа 8.4.3 Даны три числа. Определить максимальное из этого набора.

Обсуждение. Предположим, что max – это первое введенное число, тогда сверим с max и остальные два. Если какое-то из двух значений больше max , переприсвоим значение max .

Задачи с использованием полной формы инструкции if

Решим простую задачу. Даны две переменные целого типа. Присвоить переменной с меньшим значением большее. Вывести новые значения переменных.
Программа 8.4.4

Даны два действительных числа a и b . Возвести в третью степень большее из них и в четвертую степень меньшее. Вывести новые значения a и b .
Программа 8.4.5

Многообразие способов записи ветвлений

Поскольку ветвление предполагает максимум два пути решения, то часто приходится вставлять одно ветвление внутрь другого, то есть применять вложенные ветвления (частный случай – это инструкция switch , с которой мы познакомимся позднее).
Глубина вложенности, впринципе, не ограничена, но на практике следует избегать инструкций слишком глубокой вложенности. Это может привести к нечитаемости алгоритма и трудно выявляемым ошибкам. Подумайте как упростить задачу.
Пример задачи. Дана точка A с координатами x и y . Определить, какой координатной четверти принадлежит A .
Программа 8.4.6

Обратите внимание, что при написании кода вложенные инструкции if оформляются с дополнительным отступом.

Программа 8.4.7 Даны коэффициенты a, b и c. Найдите вещественные корни квадратного уравнения, если вещественных корней нет – сообщите об этом.

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector