Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Грибные блоки - красочная головоломка, в которой вам предстоит передвигать блоки и заполнять ряды, чтобы собирать грибочки в корзину! Попробуйте продержаться как можно дольше!

Грибные блоки

Головоломки, Расслабляющая, Пазлы

Играть

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • AlexKud AlexKud 26 постов
  • StariiZoldatt StariiZoldatt 3 поста
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Введение

С этим тегом используют

Основы Программирование Учебные курсы Все
61 пост сначала свежее
1
user10429306
user10429306
2 месяца назад
Серия Введение в основы программирования.

Особенности применения чисел с плавающей точкой⁠⁠

Особенности применения чисел с плавающей точкой.

Тема чисел с плавающей точкой достаточна сложна. Исходя из принципа: польза — вред, суть представления чисел с плавающей точкой будет опущена и речь в лекции пойдет об особенностях применения таких чисел. Автор считает, что на начальном этапе обучения, знания об операциях чисел с плавающей точкой на аппаратном уровне, не принесут практической пользы.

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

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

Типы с плавающей запятой (float, double)

float: хранит число с плавающей точкой от -1.5*10-45 до 3.4*1038 и занимает 4 байта. Формат значения для float — в конце операнда-значения указывается суффикс « f »

double: хранит число с плавающей точкой от ±5.0*10-324 до ±1.7*10308 и занимает 8 байта. Формат для double  — операнд-значение записывается с указанием дробной части, если дробная часть равно нулю, то указывается ноль.

Отдельно стоит тип данных —decimal, который хранит число с плавающей точкой от ±1.0*10-28 до ±7.9*1028 и занимает 16 байта. Формат для decimal — в конце операнда-значения указывается суффикс «M». Операции с типом данных рассмотрены не будут.

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

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

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

Пример 1. Формат значения

Напишем программу деления целочисленного числа 10 на целочисленное число 6.

static void Main(string[] args)

{

double variable = 10/6;

Console.WriteLine("Десять разделить на шесть = " + variable);

}

Несмотря на то, что в памяти компьютера было выделено место для записи значения с плавающей точкой, в переменную variable было записана только целая часть полученного результата. Объяснение этому кроется в формате полученного результата от операции деления целого числа на целое. Результатом такой операции всегда будет значение с автоматически присвоенным типом данных int, который не предназначен для хранения значения с дробной частью, поэтому дробная часть была отброшена, и в переменную с типом данных double, именем variable, была записана только целая часть. 

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

static void Main(string[] args)

{

double variable = 10 / 6.0;

Console.WriteLine("Десять разделить на шесть = " + variable);

}

Пример 2. Округление

Не всегда есть необходимость большой точности. Так, результату финансовых вычислений вполне удовлетворит точность с двумя знаками после запятой. Для округления используется метод Round(), в круглые скобки которого помещается имя переменной, а через запятую указывается количество знаков после запятой. Для хранения результата округления используется тип данных — double. В отличии от метода WriteLine(), который принадлежит классу Console, метод  Round() принадлежит классу Math, поэтому для вызова метода, используется конструкция  Math.Round().

static void Main(string[] args)

{

float weight = 1.3f;

float price = 5.22f;

double total = Math.Round(weight * price, 2);

Console.WriteLine("Сумма = " + total);

}

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

3. Операции над переменными

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

static void Main(string[] args)

{

float a = 1.2f;

float b = 1.2f;

float sumFloat = a + b;

double sumDouble = a + b;

Console.WriteLine("sumFloat = " + sumFloat);

Console.WriteLine("sumDouble = " + sumDouble);

}

5. Ограничение по размеру выделяемой области памяти

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

static void Main(string[] args)

{

float floatPi = 3.14159265358980f;

double  doublePi = 3.14159265358980;

Console.WriteLine("Тип данных float = " + floatPi);

Console.WriteLine("Тип данных double = " + doublePi);

}

В заключение.

Числа с плавающей точкой хранятся в стеке и относятся к примитивным типам данных. Из-за особенностей хранения чисел с плавающей точкой, применение на практике таких чисел довольно часто преподносят неожиданные результата. Большая часть ошибок приходится на использование не идентичных типов данных. Возьмите за правило перепроверять каждый результат таких операций.

На этом занятие закончено.

Вы можете самостоятельно найти задачи для закрепления теоретического материала или для получения задач с ответами отправьте письмо на basicprog@mail.ru

Удачи в выполнении практических заданий!

Показать полностью
[моё] Введение Основы Программирование Учебные курсы Текст Длиннопост
2
3
user10429306
user10429306
2 месяца назад
Серия Введение в основы программирования.

Особенности использования целочисленных значений⁠⁠

Из этой лекции вы узнаете об особенностях операций над целочисленными значениями.

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

Ниже приведен список типов данных для хранения целых чисел:

byte: хранит целое число от 0 до 255 и занимает 1 байт.

short: хранит целое число от -32768 до 32767 и занимает 2 байта.

ushort, хранит целое число от 0 до 65 535 и занимает 2 байта.

int: хранит целое число от -2147483648 до 2147483647 и занимает 4 байта.

uint: хранит целое число от 0 до 4294967295 и занимает 4 байта

long: хранит целое число от –9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 и занимает 8 байт.

Возникает вопрос. Для чего необходимо такое количество типов данных для хранения целочисленных значений?

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

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

Тип данных byte. Может хранить любой целое число от 0 до 255 и занимает 1 байт(8 бит)

Особенности использования целочисленных значений Введение, Основы, Программирование, Учебные курсы, Длиннопост

Тип данных uint. Целое число от 0 до 4294967295, занимает 4 байта(32 бит)

Особенности использования целочисленных значений Введение, Основы, Программирование, Учебные курсы, Длиннопост

Как видим, оба типа данных подходят для хранения возраста человека. Однако если оценить эффективность использования аппаратных ресурсов тип данных byte предпочтительней, в то время как тип данных uint избыточен.

Наглядно видно, что для переменной с типом данных uint выделен блок из ячеек размером 4 байта или 32 ячейки. Что в этом плохого? Под переменную выделено 32 ячейки, поэтому, все 32 ячейки памяти будут учувствовать во всех операциях, производимых с этой переменной. На инициализацию, хранение и обработку всех 32 ячеек, в том числе и на неиспользуемые 24 разряда, будут тратится аппаратные ресурсы вычислительной системы. Еще одним минусом, является размер занимаемой памяти. Так размер занимаемой памяти для хранения данных возраста одной тысячи человек в случае с типом данных byte будет занимать 1000чел Х 8 бит= 8000 бит—один килобайт памяти, а с типом данных uint —4 кБ, т.е. в четыре раза больше.

Возникает вопрос, почему столь эффективный, с аппаратной стороны, тип данных byte не использовать повсеместно. Для чего нужны остальные типы данных?

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

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

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

Явное привидение —операция, когда операнду-значению явно указывается тип данных. Для этого достаточно в операнде-значении указать в скобках какой тип нужен. О преобразовании типов будет отдельная лекция.

static void Main(string[] args)

{

byte age1 = 122;

byte age2 = 102;

byte age3 = 120;

byte sumByte = (byte)(age1 + age2 + age3);

Console.WriteLine("Запись числа 344 в переменную sumByte = " + sumByte);

int sumInt = age1 + age2 + age3;

Console.WriteLine("Запись числа 344 в переменную sumInt = " + sumInt);

}

В строке: byte sumByte = (byte)(age1 + age2 + age3); применена операция по преобразование типов — явное привидение типа данных.

Запустим программу. И видим у переменной « sumByte »  с типом данных « byte » очень неожиданный результат.

Результатом операции сложения: 122 + 102 + 120, будет число 344, которое записывается в переменную sumByte, с явным привидением изменением с автоматического типа int на тип данных byte. Число 344 выходит за рамки диапазона типа данных byte, поэтому была сохранена только часть значения.

Визуальное представление хранения числа 344 в переменных sumByte и sumInt

Особенности использования целочисленных значений Введение, Основы, Программирование, Учебные курсы, Длиннопост

Визуально видно, что для записи числа 344 требуется 9 ячеек памяти.

Мы же, явным привидением типов (byte)(age1 + age2 + age3); отменили неявное автоматическое преобразование результата сложения и вместо типа данных int

операнд- справа получил тип данных byte. Восьми конденсаторов, ячеек памяти, физически не хватило для размещения числа 344.

В случае с переменной « sumInt », VS по умолчанию указала для результата сложения тип данных int, который имеет 32 разряда и может хранить числа в диапазоне от -2147483648 до 2147483647.

Однако тип данных int не оптимален для данной программы. Так int хранит как положительные, так и отрицательные числа, а при учете возраста отрицательных чисел быть не может, оптимальным типом в данном случае является тип данных uint, который хранит положительные целые числа в диапазоне от 0 до 4294967295.

У вас, наверное, возник вопрос: «Как тип данных «int» занимает 4 байта и хранить числа в диапазоне от -2147483648 до 2147483647, а «uint» в тех же 4 байтах хранит число в диапазоне от 0 до 4294967295»?

Все очень просто. В случае с «int», старший, 32 разряд, выделяется под указание положительное или отрицательное значение будет хранится. Ноль в 32 разряде указывает, что число положительное, а единица — отрицательное. Таким образом для хранения числа остается только 31 разряд, что и соответствует диапазону хранимого значения.

В заключении.

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

На этом занятие закончено.

Вы можете самостоятельно найти задачи для закрепления теоретического материала или для получения задач с ответами отправьте письмо на basicprog@mail.ru

Удачи в выполнении практических заданий!

Показать полностью 3
[моё] Введение Основы Программирование Учебные курсы Длиннопост
3
user10429306
user10429306
2 месяца назад
Серия Введение в основы программирования.

Значения в памяти компьютера⁠⁠

Из этой лекции вы узнаете, как хранятся значения.

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

Для хранения значения, в операционном запоминающем устройстве (ОЗУ) компьютера, выделяется некоторая область, состоящая из элементов памяти. Каждый такой элемент представляет собой электронный компонент содержащий конденсатор.

Конденсатор имеет свойства удерживать электрический заряд, т.е. находится в двух состояниях заражено или разряжено. Эту особенность конденсатора можно описать двоичной системой, где 1 — заряжено, 0— разряжено. Таким образом в распоряжении программиста оказывается, электронный программируемый прибор, который может хранить либо ноль, либо единицу, что является самой маленькой единицей данных — бит.

В памяти компьютера конденсаторы группируются по восемь штук. Такая группа называется адресная ячейка. Адресная ячейка — это ячейка памяти с автоматически назначенным адресом вида 0x7fffa40c5fac. При написании кода, подменяется удобочитаемым и информативным именем переменной. К примеру, string text, где имя text подменяет автоматически присвоенный адрес.

Размер адресной ячейки составляет 8 бит или один байт Адресная ячейка способна хранить целочисленное значение от 0 до 255. Сами адресные ячейки так же могут группироваться в блоки, вплоть до 64 конденсаторов или 64 бита или 8 байт. Такие блоки могут хранить гигантские числа. К примеру, размер известного типа данных int равен 4 байта и может хранить число равное приблизительно 4,5 миллиарда.

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

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

Запустим VS и объявим переменную для хранения числового значения

static void Main(string[] args)

{

byte number;

}

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

Значения в памяти компьютера Введение, Основы, Программирование, Учебные курсы, Длиннопост

Так как в переменной нет значения, то все конденсаторы будут разряжены. Дополните рисунок.

Значения в памяти компьютера Введение, Основы, Программирование, Учебные курсы, Длиннопост

Запишем в переменную значение, в виде числа 120.

static void Main(string[] args)

{

byte number;

number = 120;

}

Что бы сохранить значение, нужно зарядить конденсаторы в соответствующих элементах выделенного блока (области) памяти. Измените рисунок

Значения в памяти компьютера Введение, Основы, Программирование, Учебные курсы, Длиннопост

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

Значения в памяти компьютера Введение, Основы, Программирование, Учебные курсы, Длиннопост

Визуально видно, для хранения числа 120 в выделенном области памяти необходимо сохранить заряд в элементах (конденсаторах) находящихся в позиции 7, 6, 5, 3, 2.

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

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

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

Для примера возьмем имя основателя компании Microsoft - Bill. Этот объект состоит не из чисел, но из символов отличных от чисел.  Для хранения значения Bill разделим объект-строку на отдельные элементы в виде объект-число. В данном случае это буквы —B, i, l, l и в соответствии с таблицей ASCII, строка будет выглядеть как набор отдельных элементов числовых значений — 66 105 108 108.

После преобразования, значения Bill в числовые значения 66, 105, 108, 108, эти элементы - числа записываются в памяти компьютера — куча.

Внимание!!! Нижеприведённый пример ссылки на местоположение элементов значения приведен в качестве визуального оформления.

Ссылка хранится в стеке и имеет имя. По имени вы обращаетесь к ссылке, которая перенаправляет вас к нужному значению в куче. Ссылка 32 бита.

Значения в памяти компьютера Введение, Основы, Программирование, Учебные курсы, Длиннопост

Хранение элементов в куче

Значения в памяти компьютера Введение, Основы, Программирование, Учебные курсы, Длиннопост

Так как строковое значение представлено набором элементов, то мы можем обратится к каждому элементу в отдельности. Помятую, что имя указывает на ссылку, а ссылка перенаправляет к значению, для доступа к элементу используется следующая конструкция — имя ссылки[индекс элемента], где индекс элемента — номер хранения элемента в значении. Нумерация элементов начинается не с единицы, но с нуля.

Для этого нам необходимо указать имя ссылки «text» и индекс расположения элемента в значении.

static void Main(string[] args)

{

string text = "Bill";

Console.WriteLine("Вторая элемент значения  -  " + text[1]);

}

Конструкция — text[1], отдает команду на вывод содержимого одного из элементов переменной « text »  с индексом « 1 ».  Вывод на экран одного элемента значения свидетельствует о раздельном хранении его элементов.

В заключении.

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

Зная, как хранятся значения в памяти компьютера дадим определение переменной.

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

Под выделенной областью памяти понимается блок из ячеек (контейнер), выделенный из общего пространства оперативного запоминающего устройства (память компьютера), доступ к которому осуществляется по присвоенному имени. На самом деле доступ осуществляется по назначенному адресу вида — 0x7fffa40c5fac, но такой адрес трудночитаем и подменяется более информативным именем переменной вида — number.

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

На этом занятие закончено.

Вы можете самостоятельно найти задачи для закрепления теоретического материала или написать — basicprog@mail.ru.

Удачи в выполнении практических заданий!

Показать полностью 6
[моё] Введение Основы Программирование Учебные курсы Длиннопост
1
0
user10429306
user10429306
2 месяца назад
Серия Введение в основы программирования.

Операции над переменными⁠⁠

Из этой лекции вы узнаете об операциях над переменными и их особенностях.

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

Бинарные операции — это операции с двумя операндами. С операторами бинарных операций вы знакомы со школы.

  • Сложение — « + »

  • Вычитание — « — »

  • Умножение — « * »

  • Деление — « / »,

  • Оператор получение остатка отделения — « % »

  • Умножение на минус единицу— « *-1»

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

Запустим VS, создадим проект, и вручную, не копируя перепишем код.

static void Main(string[] args)

{

int a = 6;

Console.WriteLine("Значение a = " + a);

int b = 10 * 2 + 20 - 4 + 3;

Console.WriteLine("Результат 10 * 2 + 20 - 4 + 3 = " + b);

int c = 10 * (2 + (4 - 4)) + 5;

Console.WriteLine("Результат 10 * (2 + (4 - 4)) + 5 = " + c);

}

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

Напишем программу перевода из сантиметров в дюймы.

Значение сантиметров заранее неизвестно, поэтому это значение будет хранится в переменной, в которую пользователь будет вводить каждый раз новое значение. Коэффициент перевода известен и равен значению 2,54. Такой коэффициент может хранить как переменная, но тогда при каждом вычислении пользователь должен будет вводить его в ручном режиме, или сохранить этот коэффициент в качестве литерала, избавив тем самым пользователя от ненужной обязанности.

static void Main(string[] args)

{

int number = 10;

double result = number * 2.54;

Console.WriteLine("Результат перевода: " + result);

}

Здесь результатом операции является дробное число. Тип данных double предназначен для хранения таких чисел. О типах данных позже.

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

static void Main(string[] args)

{

const double x = 2.54;

int number = 10;

double result = number * x;

Console.WriteLine("Результат перевода: " + result);

}

Отдельно остановимся на операторе — « = », который в математике указывает на равенство левой части и правой, а в программирование, отдает указание о записи значения в переменную. Напомним, что такая операция это операция над двумя операндами, где знак « = » помещает значение правого операнда в левый. В качестве операндов могут выступать как сами значения, так и переменные их содержащие. При операциях с переменными должна соблюдаться схожесть типов данных. Нельзя переменную со строковым типом данных присвоить переменной с числовым типом данных, есть и еще ряд особенностей, о которых вы узнаете после изучения материала о типах данных.

Перепишем нижеследующий код

static void Main(string[] args)

{

int a = 5;

int b = a;

Console.WriteLine("Значение переменной b = " + b);

}

Используя однотипные переменные, мы записали в переменную b значение хранимое в переменной a.

И еще один пример

static void Main(string[] args)

{

int a = 1;

int b = a + 2;

int c = b = a;

Console.WriteLine("Переменная a = " + a);

Console.WriteLine("Переменная b = " + b);

Console.WriteLine("Переменная c = " + c);

}

Уже на стадии написания, VS указывает на ненужность строки — int b = a + 2; так как intellisense уже определила что все три переменные получат одинаковое значение.

В строка — int c = b = a; по правилам правой ассоциативности операций, значение переменной « а », перезапишет содержимое переменной « b »,  а затем переменная « b » присвоит хранимое значение в переменную « с ».

Пример применение оператора присваивания « = » для взаимозамены значений двух переменных.

static void Main(string[] args)

{

int a = 10;

int b = 15;

Console.WriteLine("Значение a = " + a);

Console.WriteLine("Значение b = " + b);

Console.WriteLine("Поменяем значения переменных местами");

int temp;

temp = a;

a = b;

b = temp;

Console.WriteLine("a = " + a + "; " + "b = " + b);

}

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

Оператор — Умножение « * ». Для возведения числа в степень достаточно умножить одно значение на другое, такое количество раз, которому равна степень числа.

Оператор —  Деление « / ». Результатом деления целого двузначного числа на 10 будет первая цифра этого числа.

Оператор — Операция получения остатка от деления « % ». При делении целого числа на 10, результатом будет последняя цифра числа. При делении на число 2, остаток от деления укажет на четность числа.  0— число четное, 1 — нечетное

Умножение на минус единицу позволяет изменить значение на противоположное по знаку

Код программы изменения значение на противоположное по знаку

static void Main(string[] args)

{

int a = -1;

a = -a;

Console.WriteLine("Значение переменной а = " + a);

}

В заключении.

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

На этом занятие закончено.

Вы можете самостоятельно найти задачи для закрепления теоретического материала или написать — basicprog@mail.ru.

Удачи в выполнении практических заданий!

Показать полностью
[моё] Введение Основы Программирование Учебные курсы Текст Длиннопост
8
user10429306
user10429306
2 месяца назад
Серия Введение в основы программирования.

Переменная⁠⁠

Из этой лекции вы узнаете о  — переменной.

Несмотря на то, что переменная — это основной элемент программного кода, некоторые ресурсы посвященные основам программирования уделяет переменной непростительно мало внимания. Объяснение переменной на таких ресурсах сводится к определению переменной, после чего идут практические примеры по ее использованию. Не осознав смысла и сути переменной, и сразу перейдя к практическому применению у обучающегося, складывается неверное представление о переменной и от обучающегося можно услышать следующую трактовку инициализации переменной, к примеру «int number =10;» — переменная number равна 10, что является неверным.  Но обвинять авторов в непрофессионализме нельзя. Подавляющее большинство из них — это большие профессионалы своего дела, и для них переменная, это как цифры для профессора математики или ноты для великого композитора. Авторы таких работ даже представить себе не могут, что суть и смысл переменной может быть представлена в совершенно неправильном понимании.

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

Давайте вспомним первую программу, состоящую из операции Console.WriteLine(); и литерала "Hello World!". Такая программа после запуска будет производить одно действие — выводить сообщение "Hello World!" и ничего больше. Для изменения выводимой строки, придется вносить изменения в программный код, а затем вновь компилировать программу. Конечно же для пользователя это не приемлемо.

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

В программирование, такой объект(ящиком) называется — переменная. По аналогии с литералом, который не изменяется в ходе выполнения программы, переменная создается именно для хранения изменяемого значения. В этом и есть смысл переменной. Хранить изменяемое значение.

Запустим VS, создадим проект и напишем следующую строку — string text; , здесь слово text — это имя переменной.

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

Такая операция называется объявлением переменной.

static void Main(string[] args)

{

string text;

}

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

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

static void Main(string[] args)

{

string text;

text = "Hello World!";

Console.WriteLine(text);

}

Для записи значения(присвоения) используется знак — « = », оператор присваивания. Операция присваивания является операцией над операндами. Оператор « = » берет операнд-значение справа от себя и связывает его с операндом-переменной слева.

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

Обычно переменные не объявляются, а инициализируются. Инициализация —процесс, при котором переменной сразу присваивается значение.

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

Формат записи значения очень важен, так как по нему определяется характеристика значения — число это или строка. Попытка, записать в переменную с типом данных int, значение отличное от цифр или в переменную с типом данных string, значение без двойных кавычек, вызовет ошибку.

static void Main(string[] args)

{

int number;

number = 38;

string text = "Христа-Искупителя ";

Console.WriteLine("Высота " + text + number + " м");

}

Как видите, в строке вывода на экран мы использовали литералы и переменные, только в отличие от неизменяемых литералов, при изменении значения в переменной, изменяется и выводимая информация на экран. Знак « + » используется не для сложения, но для склеивания строки. Склеивание строки через знак « + » называется — конкатенацией.

На ваш вопрос: «Но если откомпилировать такую программу, то чем она будет отличаться от программы с литералами? Так же, как и с литералами, без доступа к коду программы, значение переменной изменить невозможно.» Забежим вперед и напишем программу ожидающая ввод с клавиатуры некоторого значения.

static void Main(string[] args)

{

Console.WriteLine("Введите наименование объекта");

string text = Console.ReadLine();

Console.Clear();

Console.WriteLine("Вы ввели имя объекта: " + text);

}

Здесь переменная « text » инициализируется значением введенным с клавиатуры.

В заключение.

Компьютерная программа предназначена для автоматизации вычислительных процессов. Основой таких процессов являются поступившие на вход различные значения. Для хранения таких значений в памяти компьютера создаются места хранения, называемые — переменная. Переменная имеет имя, по которому пользователь получает доступ к этой переменной. Тип данных определяет, с какими характеристиками в переменной может хранится изменяемое значение.

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

Для записи в переменную некоторого значения используется оператор « = », который берет операнд-значение справа от себя и связывает его с операндом-переменной слева.

Нередко знак « = », означающий запись значения правого операнда в левый, у обучающегося ассоциируется со знаком равно и тогда вкрадывается мысль, что к примеру, переменная number равна числу 38.

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

На этом занятие закончено.

Удачи в выполнении практических заданий! Но

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

Вы можете самостоятельно найти задачи для закрепления теоретического материала или оценить труд автора и оплатить задачи и ответы к ним. Для связи basicprog@mail.ru.

Показать полностью
[моё] Введение Основы Программирование Учебные курсы Текст Длиннопост
2
0
user10429306
user10429306
2 месяца назад
Серия Введение в основы программирования.

Литералы и вывод информации на экран⁠⁠

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

Задумаемся на минуточку, как электрическая машина, которой является любое вычислительное устройство, вывело сообщение — «Hello, world!». Как, не вводя ни единого символа, пользователь видит надписи в меню программы или какие-то уведомления о ходе вычислений?

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

Литералы — это значения, неизменяемые в ходе выполнения программы. Под понятием значение, понимается некий элемент информации, хранимый в памяти компьютера и используемый в ходе выполнения программного кода.

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

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

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

Формат записи значения очень важен. Неправильный формат может вызвать ошибку.

Так как вы в начале обучения, для вывода литералов на экран воспользуемся чужим трудом, а именно трудом разработчиков Visual Studio (VS), которые позаботились и предоставили в пользование программистов целые блоки программного кода, называемые в языке C# — метод(ы). В некоторых языках программирования, обособленный блок программного кода, называется функция или процедура.

Такие обособленные блоки программного кода являются законченной программой для выполнения единственной операции. В нашем случае — вывод значения на экран.

Для вывода литералов на экран будет пользоваться методами WriteLine и Write. Разница между ними только в том, что метод WriteLine переводит курсор на новую строку, а метод Write – оставляет курсор там, где закончилось предыдущее сообщение. Несмотря на схожесть задач, это все же разные задачи, и каждый из методов выполняет свою задачу.  Комбинируя эти методы, получается красивый, удобочитаемый вывод на экране.

Хранение методов в C# упорядочено и для вызова метода на исполнение, необходимо указать местонахождение метода. Для этого указывается пространство имен, в нашем случае — using System, класс — Console, и само имя метода — WriteLine.

На нижеприведенном изображении отражена конструкция вызова метода WriteLine.

Литералы и вывод информации на экран Введение, Основы, Программирование, Учебный материал, Длиннопост

Вызов метода можно представить по аналогии с хранением файлов в папках Windows, где файл это и есть нужный метод(блок кода), который мы хотим использовать. Пространство имен — using System; можно представить как корневую папку, класс — Console, как папку, в которой хранится метод WriteLine.

Обратите внимание на точку между Console и WriteLine. По аналогии со слешем, который позволяет осуществлять переход между папками и файлами в Windows или Linux, в языках программирования для этих целей используется оператор— точка.

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

Напишем и запустим на выполнение следующий код

static void Main(string[] args)

{

Console.WriteLine("Высота Эйфелевой башни");

Console.Write(328);

Console.WriteLine("метров");

}

В выше приведенной программе к литералам строкового типа относятся литералы— «Высота Эйфелевой башни» и «метров», а запись из цифр— 328, указывает на литерал числового типа.

Нижеприведенный код демонстрирует возможности вывода на экран. Не копируйте код, перепишите самостоятельно.

static void Main(string[] args)

{

Console.Write("2 плюс 2 " + "равно: ");

Console.WriteLine(1 + 1);

Console.WriteLine("");

Console.WriteLine("*********************************");

Console.Write("Два плюс на два равно: ");

Console.WriteLine("2" + 2);

}

Запустите программу нажав F5 или зеленую стрелочку в меню VS.

Пояснения.

Использование в строке ("2 плюс 2" + "равно: ") оператора « + » означает не сложение двух литералов строкового типа, а их склеивание. Такая операция называется —  конкатенация.  Вначале выводится значение "2 плюс 2", затем, значение "равно: "

В строке 1 + 1 используются два литера числового типа, поэтому произведена операция сложения. Использование чисел в качестве литералов позволяет производить вычисления в программном коде без вмешательства пользователя.

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

Интересный результат получился при выполнении операции в строке ("2" + 2). Такой результат связан с тем, что используются два литерала один из которых строкового типа, а другой числового, но так как они несовместимы и операции над ними невозможны, то знак « + » выступает в роли склеивания строки—конкатенации,  и поэтому с начало на экран выводится «2», как строка, затем —2, как число. В итоге мы видим результат не сложения двух литералов, а склеивания строки из литералов различного типа, т.е. конкатенации.

В заключении.

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

Для вывода информации на экран используйте методы Console.Write(); и Console.WriteLine();. Для вывода информации достаточно заключить литерал(ы) в круглые скобки одного из методов.

Используйте для вывода на экран, литералы с целочисленными и строковыми типами, в соответствующем формате записи.

На этом занятие закончено.

Удачи в выполнении практических заданий! Но

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

Вы можете самостоятельно найти задачи для закрепления теоретического материала или оценить труд автора и оплатить задачи и ответы к ним. Для связи basicprog@mail.ru.

Показать полностью 1
[моё] Введение Основы Программирование Учебный материал Длиннопост
5
3
user10429306
user10429306
3 месяца назад
Серия Введение в основы программирования.

Следование в программирование⁠⁠

Из этой лекции вы узнаете о краеугольном камне программирования — СЛЕДОВАНИЕ

В школьной информатике СЛЕДОВАНИЕ — линейный алгоритм, который предполагает выполнение действий в строго определённом порядке без права хаотичного перехода.

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

СЛЕДОВАНИЕ как стержень, на который надеты различные инструкции по обработке данных, в том числе и оставшиеся две базовые алгоритмические конструкции — ВЕТВЛЕНИЕ и ПОВТОРЕНИЕ, о которых вы узнаете чуть позже.

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

Запустим VS и создадим проект

Следование в программирование Введение, Основы, Программирование, Длиннопост

Напишем программу, выводящую два сообщения. НЕ КОПИРУЙТЕ, развивайте мелкую моторику.

Почувствуйте себя в роли компилятора или интерпретатора и ПОСЛЕДОВАТЕЛЬНО, СИМВОЛ ЗА СИМВОЛОМ, без права хаотичного перехода между символами, перепишите нижеприведенный программный код.  

static void Main(string[] args)

{

Console.WriteLine("Эту строку поместить ниже первой строки");

Console.WriteLine("Эту строку поместить на первую строку");

}

Запустите программу на выполнение нажав зеленую стрелочку или F5.

Следование в программирование Введение, Основы, Программирование, Длиннопост

Визуально видно, компьютер игнорирует указания в сообщениях и согласно СЛЕДОВАНИЮ, выводит сообщения в том порядке, в котором они расположены в программном коде.

На этом принцип СЛЕДОВАНИЕ не заканчивается. Когда программный код написан, специальная программа компилятор или интерпретатор, ПОСЛЕДОВАТЕЛЬНО, СИМВОЛ ЗА СИМВОЛОМ, без права хаотичного перехода между символами, считывает написанный программный код и преобразует его в понятный для компьютера язык— машинный или байт код. Результатом такого преобразования будет исполняемый файл, программный код в котором будет заменен на машинный или байт код. При считывание важны все символы и фигурные скобки, между которым пишется программный код, и точка с запятой, указывающая на конец команды(инструкции).

В заключении.

Принцип СЛЕДОВАНИЯ является важнейшим в программирование. Несмотря на его простоту, этому принципу подчинен вес ход выполнения программы, поэтому так важно при написании понимать, что все, в программном коде, выполняется последовательно, без права хаотичного перехода.

На этом лекция закончена.

Удачи!

Показать полностью 2
[моё] Введение Основы Программирование Длиннопост
4
user10429306
user10429306
3 месяца назад
Серия Введение в основы программирования.

Инструмент программиста, среда разработки — Visual Studio⁠⁠

Из этой лекции вы узнаете об инструменте программиста, среде разработки — Visual Studio.

Для выполнения любой работы требуется соответствующий инструмент. Инструмент по возможности должен быть удобным и отвечать требованиям для решения поставленных задач. Инструментом для написания программного кода, является среда разработки. По сути, средой разработки, может служить даже блокнот, но зачем создавать себе неудобства, когда для каждого распространенного языка программирования существует своя IDE — интегрированная среда разработки. Для языка C# (Си шарп) такой IDE является Visual Studio. Не путать с IDE Visual Studio Code.

Для выполнения практических занятий лучшим образом подойдет Visual Studio Community 2019. В отличие от платных Professional и Enterprise, Community бесплатный продукт. Почему 2019? В более новых версиях отсутствует важная информация, необходимая для понимания структуры создаваемого кода, поэтому мы рекомендуем использовать именно Visual Studio Community 2019, далее — VS. Среда разработки Visual Studio Community не требовательна к системным требованиям и для установки достаточно обычного ноутбука. С системными требованиями вы можете ознакомится по ссылке — https://learn.microsoft.com/ru-ru/visualstudio/releases/2019/system-requirements#visual-studio-2019-system-requirements,

Для установки IDE Visual Studio Community 2019(VS), потребуется загрузчик, который можно найти по запросу в интернете или воспользоваться нижеприведенной ссылкой.

https://github.com/Anatol73/Community2019/blob/main/vs_Community2019.exe

Инструмент программиста, среда разработки — Visual Studio Введение, Основы, Программирование, Длиннопост

Скачиваем и запускаем установщик Community. На вкладке «Рабочие загрузки» выбираем «Разработка классических приложений. NET». Нажимаем —Установить

Инструмент программиста, среда разработки — Visual Studio Введение, Основы, Программирование, Длиннопост

И пока происходит скачивание и установка, поясним почему для практических работ был выбран язык программирования C# - Си шарп  с IDE VS.

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

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

В качестве примера приведем несколько инструкций, вывода сообщения на экран «Hello, World!» в различных языках программирования

C# — Console.WriteLine("Hello, World!");

Python — print('Hello, World!')

Java —  System.out.println("Hello, World!");

Как видите, на всех языках производится однотипное действие. В полукруглые скобки метода, о методах поговорим позже, помещается значение «Hello, World!» и затем метод выводит это значение на экран.

Выбор для практических работ языка C# обусловлен следующим

Язык программирования C# - Си шарп

  • 1.  Внятный синтаксис.

  • 2.  Входит в пятерку самых распространенных.

  • Продукт Microsoft для IDE Visual Studio. Можно по-разному относится к этой корпорации, но нужно признать, Microsoft делает одни из лучших продуктов в области IT-технологий.

  • Строгая типизация языка C#. Можно бесконечно долго спорить о важности типизации в программном коде, но без понимания процесса типизации нельзя стать программистом.

Visual Studio

  • 1.  Версия Community - бесплатна.

  • 2.  Коробочное решение. Не требует дополнительных настроек. После установки можно сразу писать код.

  • 3.  Продукт Microsoft.

  • 4.  Наиболее дружелюбна к начинающим.

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

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

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

Создание и запуск программы в IDE Visual Studio

  • Запускаем Visual Studio

  • С права нажимаем — Создание проекта. Для написания, даже однострочной программы, в Visual Studio нужно создавать проект.

  • Из предлагаемых шаблонов выбираем — Консольное приложение (Майкрософт)

  • Следующее окно оставим неизмененным

  • В окне —Дополнительные сведения, в выпадающем списке — платформа, необходимо выбрать — .NET 5.0(поддержка прекращена)

  • Нажимаем —Создать проект.

После того как проект создан, мы увидим полноценную программу. Запустить программу на выполнение можно нажав клавишу F5 или значок «зеленую стрелочку» в верхнем меню. Результатом выполнение программы будет консольное окно с сообщением «Hello World!». Это сообщение свидетельствует о том, что вы написали первую программу и объявили миру программирования о себе. Примите наши поздравления!

Кратко поясним рабочую область ID VS

Инструмент программиста, среда разработки — Visual Studio Введение, Основы, Программирование, Длиннопост

Все, что вам нужно знать на данном этапе обучения это то, что строка static void Main(string[] args) — точка входа в программу. Исполняющая среда находит эту строку и начинает ПОСЛЕДОВАТЕЛЬНО, сверху вниз, с лева направо, без права хаотичного перехода, выполнять инструкции, расположенные между фигурными скобками. Такое считывание подчинено главной алгоритмической конструкции структурного программирования — СЛЕДОВАНИЕ.  Знак точка с запятой « ; » указывает на конец команды(инструкции).

Так если, между двумя командами(инструкции) будет отсутствовать знак точка с запятой « ; », то исполняющая среда примет эти две команды за одну и не сможет выполнить такую инструкцию, что приведет к ошибке.

Так как знак точка с запятой, указывает на конец команды(инструкции), то команды(инструкции) можно писать в одну строку.

Пример написания команд в одну строку

Инструмент программиста, среда разработки — Visual Studio Введение, Основы, Программирование, Длиннопост

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

Отсутствие знака точка с запятой после команды(инструкции) самая распространенная ошибка у начинающих. Для предупреждения об ошибках у VS имеется технология IntelliSense, которая подчеркнет ошибку и укажет на возможные методы исправления.

В заключение еще раз поздравляем с первой программой. Не забывайте про знак с точкой запятой и пишите код между фигурных скобок метода Main() по правилу, одна команда(инструкция), одна строка

На этом лекция закончена.

Удачи!

Показать полностью 4
[моё] Введение Основы Программирование Длиннопост
1
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии