Physics.Math.Code
147K subscribers
5.3K photos
2.48K videos
5.8K files
4.87K links
VK: vk.com/physics_math
Чат инженеров: @math_code
Учебные фильмы: @maths_lib
Репетитор IT mentor: @mentor_it
YouTube: youtube.com/c/PhysicsMathCode

Обратная связь: @physicist_i
Download Telegram
🔥Подборка лучших обучающих каналов для программистов на 2024 год.

➡️Делитесь с коллегами и Сохраняйте себе, чтобы не потерять

⚡️Машинное обучение

Machine Learning - полезные статьи новости гайды и разбор кода
Ml Собеседование - подготовка к собеседовению мл, алгоритмам, кодингу
Ml ru - актуальные статьи, новости, код и обучающие материалы
Ml Jobs - вакансии ML
ML Книги - актуальные бесплатные книги МО
ML чат

🚀 Data Science

Анализ данных - полезные фишки, код, гайды и советы, маст-хэв датасаентиста
Data Jobs - ds вакансии
Аналитик данных
Data Science книги - актуальные бесплатные книги
Big data

💥 Хакинг Kali Linux

Kali linux
linux_kal - kali чат
Информационная безопасность

🐍 Python

Python/django
Python Собеседование - подготовка к собеседовению python и разбор алгоритмов
Pro python - статьи, новости, код и обучающие материалы
Python Jobs - вакансии Python
Python чат
Python книги

#️⃣C#

С# академия
С# заметки — код, лучшие практики, заметки программиста c#
С# задачи и тесты
С# библиотека - актуальные бесплатные книги
C# вакансии - работа

☕️ Java

Java академия
Java вакансии
Java чат
Java вопросы с собеседований
Java книги

💻 C++

C++ академия
С++ книги
C++ задачи - подготовка к собеседовению мл, алгоритмам
C++ вакансии

🐧 Linux

Linux academy

🏆 Golang

Golang - подробные гайды, разбор кода, лучшие практики, заметки
Golang собеседование
Golang вакансии
Golang книги
Golang задачи и тесты
Golang чат
Golang news - новости go

🦀 Rust
Rust программирование
Rust чат

🛢Базы данных
Sql базы данных
Библиотека баз данных
SQL чат

📲 Мобильная разработка
Android разработка
Мобильный разработчик гайды и уроки

🖥 Javascript/React/PHP
Javascript академия
React программирование
PHP
Книги frontend
Задачи frontend

🇬🇧 Английский для программистов

🧠 Искусственный интеллект
ИИ и технологии
Neural - нейросети для работы и жизни
Книги ИИ

🔥 DevOPs
Devops для программистов
Книги Devops
Docker

📓 Книги
Библиотеки Книг для программситов

💼 Папка с вакансиями:
Папка Go разработчика:
Папка Python разработчика:
Папка Data Science
Frontend
Папка Java разработчика
Папка C#
🔥64👍5322🙈4❤‍🔥3🤩21🌚1😎1
👨🏻‍💻 Задачки по программированию для наших подписчиков [ C/C++ ]

Что не так с кодом в текущих примерах? В чем могут возникнуть критические ошибки? Что выведет код? Попробуйте решить задачу без использования компилятора и написать ваш ответ в комментариях.
#C #cpp #cplusplus #программирование #задачи

💡 Physics.Math.Code
🤨33👍25🗿73🔥2🤔1😍1
📚 Подборка книг по C++ от Бьёрне Страуструпа

Страуструп представляет возможности C++ в контексте поддерживаемых ими стилей программирования, таких как объектно-ориентированное и универсальное программирование. Его экскурсия на удивление обширна. Освещение начинается с основ, затем широко распространяется по более продвинутым темам, уделяя особое внимание новым языковым возможностям. В этом издании рассматриваются многие новые функции C++20, реализованные основными поставщиками C++, включая модули, концепции, сопрограммы и диапазоны. В нем даже представлены некоторые используемые в настоящее время библиотечные компоненты, включение которых в стандарт не запланировано до C++23.

💾 Скачать книги

Это авторитетное руководство не ставит своей целью научить вас программировать (об этом читайте в книге Страуструпа "Программирование: принципы и практика использования C++", второе издание), и оно не будет единственным ресурсом, который вам понадобится для овладения C++ (об этом читайте в книге Страуструпа "Язык программирования C++", четвертое издание). Издание и рекомендуемые онлайн-источники). Однако, если вы программист на C или C++, желающий лучше познакомиться с текущим языком C++, или программист, разбирающийся в другом языке, желающий получить точное представление о природе и преимуществах современного C++, вы не найдете более короткого или простого введения.
#cpp #cplusplus #programming #C #си #программирование #подборка_книг #разработка #архитектура

💡 Physics.Math.Code // @physics_lib
👍62🔥10🗿4❤‍🔥22
👨🏻‍💻 Подборка полезных книг по разработке приложений на Unity 👾

Unity
— межплатформенная среда разработки компьютерных игр, разработанная американской компанией Unity Technologies. Unity позволяет создавать приложения, работающие на более чем 25 различных платформах, включающих персональные компьютеры, игровые консоли, мобильные устройства, интернет-приложения и другие. Выпуск Unity состоялся в 2005 году и с того времени идёт постоянное развитие.

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

📗 Unity in Action, Third Edition [2022] Joseph Hocking

📘 Изучаем C# через разработку игр на Unity. 5-е изд [2022] Ферроне Х.

📘 Разработка игры в Unity. С нуля и до реализации [2021] Денисов

📙 Искусство создания сценариев в Unity [2016] Торн А.

📕 Head First C #, 4-е издание [2020] Эндрю Стеллман, Дженнифер Грин

📒 Unity в действии. Мультиплатформенная разработка на C# [2019] Хокинг Джозеф

📙 Arm Guide for Unity Developers Version 4.0 Optimizing Mobile Gaming Graphics [2017]

📓 Unity in Action. Multiplatform game development in C#, 2nd Edition [2018]

📗 Unity для разработчика. Мобильные мультиплатформенные игры - Джон Мэннинг, Пэрис Батфилд-Эддисон [2018, PDF]

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

💡А есть ли среди наших подписчиков разработчики игр, которые используют Unity? Если да, то покажите ваши проекты в комментариях

#разработка_игр #gamedev #game_development #unity #c_sharp #подборка_книг

💡 Physics.Math.Code // @physics_lib
34👍16🔥7😍2🙈21🆒1
🖥 Почему Ассемблер — это круто, но сложно

Есть высокоуровневые языки — это те, где вы говорите if — else, print, echo, function и так далее. «Высокий уровень» означает, что вы говорите с компьютером более-менее человеческим языком. Другой человек может не понять, что именно у вас написано в коде, но он хотя бы сможет прочитать слова.

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

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

Вариантов Ассемблера довольно много. Но так как все они работают по одинаковому принципу и используют (в основном) одинаковый синтаксис, мы будем все подобные языки называть общим словом «Ассемблер».

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

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

Регистры бывают разного вида и назначения: одни служат, чтобы хранить информацию; другие сообщают о состоянии процессора; третьи используются как навигаторы, чтобы процессор знал, куда идти дальше, и так далее.

Какими бывают регистры?

▪️Общего назначения. Это 8 регистров, каждый из которых может хранить всего 4 байта информации. Такой регистр можно разделить на 2 или 4 части и работать с ними как с отдельными ячейками.
▪️Указатель команд. В этом регистре хранится только адрес следующей команды, которую должен выполнить процессор. Вручную его изменить нельзя, но можно на него повлиять различными командами переходов и процедур.
▪️Регистр флагов. Флаг — какое-то свойство процессора. Например, если установлен флаг переполнения, значит процессор получил в итоге такое число, которое не помещается в нужную ячейку памяти. Он туда кладёт то, что помещается, и ставит в этот флаг цифру 1. Она — сигнал программисту, что что-то пошло не так. Флагов в процессоре много, какие-то можно менять вручную, и они будут влиять на вычисления, а какие-то можно просто смотреть и делать выводы. Флаги — как сигнальные лампы на панели приборов в самолёте. Они что-то означают, но только самолёт и пилот знают, что именно.
▪️Сегментные регистры. Нужны были для того, чтобы работать с оперативной памятью и получать доступ к любой ячейке. Сейчас такие регистры имеют по 32 бита, и этого достаточно, чтобы получить 4 гигабайта оперативки. Для программы на Ассемблере этого обычно хватает.

Так вот: всё, с чем работает Ассемблер, — это команды процессора, переменные и регистры.

Здесь нет привычных типов данных — у нас есть только байты памяти, в которых можно хранить что угодно. Даже если вы поместите в ячейку какой-то символ, а потом захотите работать с ним как с числом — у вас получится. А вместо привычных циклов можно просто прыгнуть в нужное место кода.
Подробнее в нашей статье в vk группе Physics.Math.Code

📕 Практический анализ двоичных файлов [2021] Эндриесс Дэннис

📙 Тайная жизнь программ. Как создать код, который понравится вашему компьютеру [2023] Джонатан Стейнхарт

📚 Подборка статей по Assembler от Ravesli

📙 LLVM: инфраструктура для разработки компиляторов [2015] Бруно Кардос Лопес, Рафаэль Аулер

📚 Подбор книг по электронике и микроконтроллерам: ОТ ЛАМЕРОВ ДО АЦЦКИХ РАДИОЛЮБИТЕЛЕЙ 👨🏻‍💻📡

📕 Modern Assembly Language Programming with the ARM Processor [2016] Larry D. Pyeatt

📕 Изучаем Ассемблер [2005] Крупник

📘 Assembly Programming and Computer Architecture for Software Engineers [2017] Brian R. Hall, Kevin J. Slonka

#программирование #низкоуровневое_программирование #Linux #assembler #cpp #C

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
101🔥54👍28🤔3🙈3👨‍💻1🤝1
📘 The Elements of Computing Systems: Building a Modern Computer from First Principles [2005 + 2021] Noam Nisan and Shimon Schocken

💾 Скачать книги

📱 May 2024 CACM: Nand to Tetris: Building a Modern Computer System from First Principles

📱 Shimon Schocken

📱 Nand2Tetris - Building a modern computer

Источник: From Nand to Tetris

На coursera:
▪️ Построение современного компьютера на основе первых принципов: От Nand до Tetris (проектно-ориентированный курс)
▪️ Построение современного компьютера на основе первых принципов: От Nand до Tetris Part II (курс, ориентированный на проект)

Описание: На этом курсе, ориентированном на проекты*, Вы построите современную компьютерную систему с нуля. Мы разделим это увлекательное путешествие на шесть практических проектов, которые проведут Вас от конструирования элементарных логических вентилей до создания полностью функционирующего компьютера общего назначения. В процессе обучения Вы узнаете - самым прямым и конструктивным образом - как работают компьютеры и как они создаются. Что Вам потребуется: Это самостоятельный курс: все знания, необходимые для успешного прохождения курса и создания компьютерной системы, будут даны в процессе обучения. Поэтому мы не предполагаем никаких предыдущих знаний в области информатики или инженерии, и все учащиеся приветствуются на борту. Вам не понадобится никаких физических материалов, поскольку Вы будете собирать компьютер на своем собственном ПК, используя программный аппаратный симулятор, точно так же, как настоящие компьютеры проектируются компьютерными инженерами в полевых условиях. Аппаратный симулятор, а также другие программные инструменты будут предоставлены Вам бесплатно после регистрации на курс. Формат курса: Курс состоит из шести модулей, каждый из которых включает серию видеолекций и проект. Вам потребуется около 2-3 часов для просмотра лекций каждого модуля и около 5-10 часов для выполнения каждого из шести проектов. Курс можно пройти за шесть недель, но Вы можете делать это в своем собственном темпе. Вы можете посмотреть выступление на TED об этом курсе, набрав в Гугле "nand2tetris TED talk". *О проектно-ориентированных курсах: Курсы, ориентированные на проект, предназначены для того, чтобы помочь Вам завершить личностно значимый проект в реальном мире, а Ваш преподаватель и сообщество учеников с аналогичными целями будут давать Вам советы и рекомендации на этом пути. Активно применяя новые концепции в процессе обучения, Вы овладеете содержанием курса более эффективно; кроме того, у Вас появится возможность использовать полученные навыки для внесения позитивных изменений в свою жизнь и карьеру. По окончании курса у Вас будет готовый проект, которым Вы сможете с гордостью пользоваться и делиться. #программирование #низкоуровневое_программирование #Linux #assembler #cpp #C

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
141🔥23👍10😍2🗿2🙏1
📘 The Elements of Computing Systems.zip
26.1 MB
📘 The Elements of Computing Systems: Building a Modern Computer from First Principles [2005 + 2021] Noam Nisan and Shimon Schocken

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

Достоинства:
Хорошая структурированность;
Оригинальный авторский подход.

☕️ Для тех, кто захочет задонать на кофе:
ВТБ: +79616572047 (СБП) ЮMoney: 410012169999048

#программирование #низкоуровневое_программирование #архитектура #computer_science #assembler #cpp #C

💡 Physics.Math.Code // @physics_lib
141👍30🔥10👨‍💻2🤩1🗿1
🧩 Задача на C++: "Таинственная конкатенация"

🖥 Что выведет следующая программа? Будьте внимательны!
#include <iostream>
#define MERGE(a, b) a ## b

int main() {
const char* result1 = MERGE("Hello, ", "World!");
const char* result2 = MERGE("Hello, ", "World" "!");

std::cout << result1 << std::endl;
std::cout << result2 << std::endl;
return 0;
}

Варианты:
1. Обе строки выведут "Hello, World!"
2. Ошибка компиляции
3. Первая выведет мусор, вторая — "Hello, World!"
4. Первая вызовет ошибку, вторая скомпилируется
Задумайтесь на минутку, прежде чем запускать код...

🔍 Разбор проблемы
Правильный ответ: 2 (Ошибка компиляции) или, если точнее, ошибка возникнет уже на строке с result1.
🖥 Код с решением и комментариями:
#include <iostream>
#define MERGE(a, b) a ## b

int main() {
// Эта строка НЕ скомпилируется:
// const char* result1 = MERGE("Hello, ", "World!");
// После раскрытия макроса получим: "Hello, ""World!"
// Это два отдельных строковых литерала без оператора конкатенации

// А вот эта строка скомпилируется и выведет "Hello, World!":
const char* result2 = MERGE("Hello, ", "World" "!");
// После раскрытия макроса получим: "Hello, ""World""!"
// А благодаря фазе трансляции, соседние строковые литералы
// сливаются в один: "Hello, World!!"

// Правильный способ через макрос:
const char* result3 = "Hello, " "World!";

std::cout << result2 << std::endl; // Выведет: Hello, World!!
std::cout << result3 << std::endl; // Выведет: Hello, World!
return 0;
}

📚 Малоизвестный факт:
В
C++ есть специальная фаза трансляции, где соседние строковые литералы объединяются в один. Например: const char* s = "Hello, " "World!"; // Эквивалентно "Hello, World!"
Но этот процесс происходит до раскрытия макросов, поэтому MERGE("Hello, ", "World!") не работает как ожидается.

Ключевые моменты:
1. Оператор ## в макросах выполняет сращивание токенов, а не строк
2. Строковые литералы автоматически конкатенируются на фазе трансляции
3. Макросы раскрываются на более поздней фазе, когда уже слишком поздно для "правильной" конкатенации строк

Будьте осторожны с оператором ## при работе со строковыми литералами! Для их конкатенации лучше использовать обычное расположение рядом или constexpr функции в современном
C++.

Чем токен отличается от строки?

1. Токен (в контексте препроцессора
C++) — это минимальная единица текста программы, которую распознает препроцессор ( int, main, (, ), {, "Hello", 123, +, ; )
Препроцессор работает именно на уровне токенов. Оператор ## сращивает именно токены, а не их значение

2. Строковый литерал — это конкретный тип токена, который представляет строку в кавычках. Пример: "Hello" — это один токен типа "строковый литерал"


Ещё по теме: Задачки по программированию для наших подписчиков [ C/C++ ]

#C #cpp #cplusplus #программирование #задачи

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
57👍23🤷‍♂17🤯6🔥4👾4👏1👻1
Media is too big
VIEW IN TELEGRAM
🖥 Практика языка C (МФТИ, 2023-2024). Допсеминар: системы сборки (make, cmake).

00:00 Зависимости и хедера
08:22 Build.sh
11:48 Makefiles и декларативная модель
19:51 Ленивые и переменные
30:52 Автоматические переменные
36:15 Первая версия makefile
41:33 Функции и wildcards
47:40 Вторая версия makefile и зависимости от хедеров
56:36 Третья итерация: почти идеальный makefile
01:06:26 Знакомство с cmake
01:19:35 Бонус. Немного больше про cmake.
01:30:40 Окончательные уроки.
автор: tilir

🔨 Поговорим о двух столпах сборки C-проектов: Make и CMake. Их часто противопоставляют, но на самом деле они решают разные задачи в цепочке превращения кода в бинарник.

▪️Make (или make и Makefile) — Это менеджер задач, который исполняет команды, описанные в Makefile. Его логика проста: цели, зависимости и команды.
app: main.o utils.o
gcc main.o utils.o -o app

main.o: main.c
gcc -c main.c

utils.o: utils.c
gcc -c utils.c

clean:
rm -f *.o app

Запускаем make — и он по цепочке зависимостей собирает всё, что изменилось.
Плюс: Полный контроль, переносимость (если использовать общие команды).
Минус: Писать Makefile для большого кроссплатформенного проекта — боль и рутина.

▪️ CMake (и CMakeLists.txt) — это мета-сборщик или система генерации скриптов сборки. CMake не компилирует сам, а генерирует нативные файлы для других систем: Makefile для Linux/macOS, .sln для Visual Studio, проект для Xcode и т.д.
cmake_minimum_required(VERSION 3.10)
project(MyApp)
add_executable(app main.c utils.c)

Запускаем так:
mkdir build && cd build
cmake ..
make

Плюс: Кроссплатформенность, управление зависимостями (find_package), относительная простота для сложных проектов.
Минус: Свой язык и абстракция, которая иногда «утекает».

▫️ Make — низкоуровневый инструмент, который говорит компилятору как и когда делать свою работу.
▫️ CMake — высокоуровневый инструмент, который говорит разным системам сборки (включая Make), как они должны работать с вашим проектом.
▫️ CMake использует Make? Да! Чаще всего CMake генерирует Makefile, а затем вы вызываете make, который уже управляет компилятором.
▫️ Для маленьких, учебных или специфичных проектов — Makefile может быть быстрее и понятнее. Для средних/крупных или кроссплатформенных — CMake почти стандарт индустрии.

А что вы предпочитаете в своих проектах и почему? Может, у вас есть любимый лайфхак для Makefile или неочевидный трюк с CMake? Или вы вообще используете что-то третье (Meson, Bazel, простой скрипт)? Делитесь опытом!
#cpp #cmake #программирование #cplusplus #it #C

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
76👍39🔥17🤩4👨‍💻4🫡3❤‍🔥2🤔2🙈2
🖥 Найди ошибку за 30 секунд

Представьте: разработчики потратили 50 часов на поиск бага в этом куске кода на C++. Попробуйте найти проблему до того, как дочитаете пост до конца.
if (ch >= 0x0FF00)
{
if (!((ch >= 0x0FF10) && (ch <= 0x0FF19)) ||
((ch >= 0x0FF21) && (ch <= 0x0FF3A)) ||
((ch >= 0x0FF41) && ((ch <= 0x0FF5A)))
{
if (j == 0)
continue;
ch = chx;
}
}

👉 Что пошло не так? Автор хотел проверить, что символ ch не входит ни в один из трех диапазонов. Но оператор отрицания ! применяется только к первому условию, а не ко всей сумме. Из-за этого логика сломалась, и проверка работала совсем не так, как ожидалось. Ошибка в расстановке скобок, которая привела к 50-часовому детективу.

А у вас были подобные ошибки в коде? Расскажите об этом в комментариях. #программирование #C #cpp #задачи #computer_science #разбор_задач

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👻4726👍18🔥8👨‍💻6🗿4🤯3🫡2🤨1
🖥 Учимся кодить: поиск максимального элемента из трёх чисел
#include <iostream>
using namespace std;

// Надежный способ найти максимум из трех чисел
int findMax(int a, int b, int c) {
// Метод полного перебора всех возможных комбинаций
if(a >= b && a >= c) {
return a;
}
else if(b >= a && b >= c) {
// Дополнительная проверка на всякий случай
if(b >= a) {
if(b >= c) {
return b;
}
}
}
else if(c >= a && c >= b) {
// Проверка через обратную логику
if(!(a > c) && !(b > c)) {
return c;
}
}

// Если ничего не сработало, используем запасной план
cout << "Using emergency fallback..." << endl;

// Сортируем пузырьком для надежности
int arr[3] = {a, b, c};
for(int i = 0; i < 2; i++) {
for(int j = 0; j < 2 - i; j++) {
if(arr[j] < arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}

// Возвращаем первый элемент после сортировки
// Но на всякий случай проверим еще раз
int max = arr[0];

// Финальная верификация
if(max >= a && max >= b && max >= c) {
return max;
} else {
// Если дошли до сюда, значит что-то пошло не так
// Возвращаем среднее арифметическое
return (a + b + c) / 3;
}
}

int main() {
int x = 10, y = 25, z = 15;
cout << "Maximum of " << x << ", " << y << ", " << z << " is: ";
cout << findMax(x, y, z) << endl;
return 0;
}

#программирование #C #cpp #задачи #computer_science #разбор_задач

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯9025🔥20🗿10👍9🤩9🌚8🤷‍♂7😱5😈32
🖥 Используем секретные технологии дедовского оверинжиниринга для написания квантовых алгоритмов сверхбыстрых вычислений. Код для тех, кто преисполнился в своём познании.

В контексте рубрики «Кодим на C/C++» раздаём ценные советы в комментариях. С каждого подписчика — по совету!

#программирование #C #cpp #задачи #computer_science #разбор_задач

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
26🔥10😈5👍4👻4🗿4🤯3👨‍💻1
🖥 Внедряем отказоустойчивый распределённый алгоритм детекции чётности на основе полного перебора пространства целых чисел. Используем сакральные знания о бинарной природе мироздания. Код для тех, кто не ищет лёгких путей и готов ждать результат до тепловой смерти Вселенной.

bool isEven(int x) {
return !(x & 1);
}

«Один бит — вся правда. Код для дзен-программистов.»


bool isEven(int x) {
const bool table[] = {true, false, true, false, true, false, true, false};
return table[abs(x) % 8];
}

«Табличный метод древних шумеров. 8 значений хватит всем.»


bool isEven(int x) {
int sum = 0;
unsigned int ux = abs(x);
while (ux) {
sum += ux & 1;
ux >>= 1;
}
return !(sum % 2);
}

«Считаем единички как настоящие боги битов.»


bool isEven(int x) {
if (x == 0) return true;
if (x == 1) return false;
return isEven(x - 2);
}

«Рекурсия — это когда функция вызывает себя, чтобы спросить: "Ну чётное или нет?"»


bool isEven(int x) {
return !(x % 2) ? !(0) : !(1);
}

«Логика двойного отрицания для истинных джедаев.»


bool isEven(int x) {
int evens[] = {0,2,4,6,8,10,12,14,16,18,20};
for (int i = 0; i < 11; i++) {
if (abs(x) == evens[i]) return true;
}
return false;
}

«Таблица чётности до 20. Для чисел больше — не гарантируем.»


template<int N>
struct EvenChecker {
static constexpr bool value = !(N % 2);
};
bool res = EvenChecker<42>::value;

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


В контексте рубрики «Кодим на C/C++» раздаём ценные советы в комментариях. С каждого подписчика — по совету!

#программирование #C #cpp #задачи #computer_science #разбор_задач

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍65🔥2523🤯7👻7👨‍💻5🤨4😱2🗿2😨1🆒1
📚 Подборка книг по C++ от Бьёрне Страуструпа

Страуструп представляет возможности C++ в контексте поддерживаемых ими стилей программирования, таких как объектно-ориентированное и универсальное программирование. Его экскурсия на удивление обширна. Освещение начинается с основ, затем широко распространяется по более продвинутым темам, уделяя особое внимание новым языковым возможностям. В этом издании рассматриваются многие новые функции C++20, реализованные основными поставщиками C++, включая модули, концепции, сопрограммы и диапазоны. В нем даже представлены некоторые используемые в настоящее время библиотечные компоненты, включение которых в стандарт не запланировано до C++23.

💾 Скачать книги

Это авторитетное руководство не ставит своей целью научить вас программировать (об этом читайте в книге Страуструпа "Программирование: принципы и практика использования C++", второе издание), и оно не будет единственным ресурсом, который вам понадобится для овладения C++ (об этом читайте в книге Страуструпа "Язык программирования C++", четвертое издание). Издание и рекомендуемые онлайн-источники). Однако, если вы программист на C или C++, желающий лучше познакомиться с текущим языком C++, или программист, разбирающийся в другом языке, желающий получить точное представление о природе и преимуществах современного C++, вы не найдете более короткого или простого введения.
#cpp #cplusplus #programming #C #си #программирование #подборка_книг #разработка #архитектура

💡 Physics.Math.Code // @physics_lib
👍3015🔥6❤‍🔥1
📚 Книги C++ Бьёрн Страуструп.zip
180.8 MB
📚 Подборка книг по C++ от Бьёрне Страуструпа

📘 Язык программирования C++ [2013] Бьёрн Страуструп
«Библия C++». Классическое 4-е издание. Полное описание языка (C++11), стандартной библиотеки, идиом. Для профессионалов, кто хочет понимать язык «из первых рук». Объём — под 1400 страниц.

📕 Программирование. Принципы и практика с использованием C++ (2е издание) [2016]
Учебник для новичков, написанный творцом языка. Не про «синтаксис за 21 день», а про инженерное мышление, алгоритмы и архитектуру. Старт с нуля, но быстро выходит на серьезный уровень.

📗 A Tour of C++ Second Edition [2018]
«Карманный Страуструп» на английском. Кратчайший обзор возможностей C++ (до C++17) для опытных программистов. Помогает освежить язык после Java/Python или быстро въехать в современный C++.

📔 Язык программирования С++. Краткий курс. 2-е издание [2019]
Сокращённая версия «библии» (2013). Убраны исторические отступления и редко используемые детали. Сфокусирован на C++11/14. Отличный настольный справочник для ежедневной работы.

📙 Язык программирования С++. Специальное издание [2019]
Осторожно: это русский перевод классического 3-го издания (1997, C++98) + доп. главы. Не про современный C++. Полезно разве что для поддержки легаси кода или изучения эволюции языка.

📓 Дизайн и эволюция языка C++ [2007]
Не учебник, а история создания языка. Почему сделали так, а не иначе? Разбор спорных решений, ошибок, компромиссов. Для фанатов IT-истории и тех, кто проектирует свои языки.

📒 Экскурсия по C++, 3-е издание [2023]
Самый свежий обзор. Актуальный C++20/23. Компактно (300 стр), ёмко и современно. Идеально, если вы знаете другой язык и хотите быстро начать писать на современном C++. Замена книге «A Tour of C++» на русском.

#cpp #cplusplus #programming #C #си #программирование #подборка_книг #разработка #архитектура

💡 Physics.Math.Code // @physics_lib
👍47🔥1816❤‍🔥4🤩2🤝2👨‍💻1
📕 Problems on Algorithms (Second Edition) [2002] Ian Parberry, William Gasarch

📕 Задачи по алгоритмам [2002] Иэн Парберри, Уильям Газарч


💾 Скачать книгу

Это не классический учебник, а задачник — сборник упражнений по разработке и анализу алгоритмов. Problems on Algorithms занимает уникальную нишу в литературе по Computer Science. В то время как стандартные учебники страдают от нерелевантных или слишком простых задач, этот сборник предлагает сотни целенаправленных упражнений. Рецензенты называют эту книгу «божественным даром для учителя» и «бесценным» пособием для студентов, готовящихся к квалификационным экзаменам (PhD candidacy exam).

🍩 Для донатов на кофе ☕️: +79616572047 (СБП / ВТБ / OZON)

#складчина #программирование #алгоритмы #структуры_данных #математика #дискретная_математика #cpp #си #C

💡 Physics.Math.Code // @physics_lib
15👍13🔥4🤩2🆒1
Problems on algorithms.zip
11.2 MB
📕 Problems on Algorithms (Second Edition) [2002] Ian Parberry, William Gasarch

Автор последовательно проведет вас через все ключевые темы стандартного курса по алгоритмам:
1. Математический фундамент: Главы посвящены математической индукции, O- и Ω-нотациям, рекуррентным соотношениям. Здесь много задач на доказательства и работу с формулами.
2. Базовые навыки: Отдельные блоки посвящены доказательству корректности (через инварианты циклов) и анализу времени работы алгоритмов.
3. Техники проектирования: Основной массив задач разбит по классическим парадигмам: «Разделяй и властвуй», Динамическое программирование, Жадные алгоритмы и Полный перебор.
4. Продвинутые темы: В завершении рассматриваются структуры данных и NP-полнота

▪️ Второе издание содержит 965 задач, что делает его практически неисчерпаемым ресурсом.

▪️ Каждая задача имеет маркировку уровня сложности. Также есть пометки о наличии подсказок, решений или комментариев в конце главы. Это позволяет студенту оценить свои силы, а преподавателю — легко подобрать задания под уровень группы.

▪️
Рецензенты особенно выделяют главу с доказательством корректности (инварианты циклов), называя её «отличным ресурсом», так как в большинстве учебников этой теме уделяется недостаточно практики

▪️ В книге есть рубрика «Что здесь не так?» (What is Wrong?), где студенту предлагается найти ошибку в доказательстве. Это отличный педагогический прием, развивающий критическое мышление

Книга намеренно не охватывает: амортизационный анализ, рандомизированные алгоритмы, вычислительную геометрию, аппроксимационные алгоритмы, параллельные алгоритмы и алгоритмы теории чисел. Парберри почти не тратит места на объяснение теории. Это исключительно сборник задач. Если вы не знакомы с темой, объяснений в книге будет недостаточно. Она работает только в паре с полноценным учебником (например, «Алгоритмы: построение и анализ» ) или лекциями.

Книга великолепно выполняет свою узкую, но крайне важную функцию. Несмотря на то, что она не охватывает все области, для своей целевой аудитории (подготовка к экзаменам и преподавание) она получает наивысшие оценки. Это та книга, которую стоит держать на столе во время изучения алгоритмов. #складчина #программирование #алгоритмы #структуры_данных #математика #дискретная_математика #cpp #си #C

💡 Physics.Math.Code // @physics_lib
🔥17👍106🤩1👨‍💻1
🖥 Задача по программированию [язык C, 64-битная система]
#include <stdio.h>

void f(char s[]) {
printf("%zu", sizeof(s));
}

int main() {
char a[] = "hello";
printf("%zu ", sizeof(a));
f(a);
return 0;
}

Что выведет программа?
A) 6 6
B) 6 8
C8 6
D) 8 8

🖥 Важные подсказки:
▪️ 1. В main массив a определён как char a[] = "hello", его размер равен 6 (подумайте почему). Оператор sizeof(a) выдаёт полный размер массива в байтах.
▪️ 2. В функции 
f параметр char s[] фактически является указателем (массив «превращается» в указатель при передаче). sizeof(s) вычисляет размер указателя на 64‑битной системе.

#программирование #алгоритмы #структуры_данных #математика #дискретная_математика #cpp #си #C

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4214🔥6🙈5🤯2👾21👨‍💻1
📚 Поговорим о лучших книга по изучению C и C++, но рейтинг сделаем именно среди наших подписчиков.

Поэтому, если вы читали какие-то книги по данному фундаментальному языку, то напишите какие вам понравились, какие НЕ понравились и что именно из книг вам помогло в учебе / работе / личных проектах ?

📝 Не стесняйтесь писать комментарии, ведь ваш рассказ и ваша история изучения могут быть полезны другим участникам сообщества. Так что погнали. 🔺

#программирование #алгоритмы #структуры_данных #математика #дискретная_математика #cpp #си #C

💡 Physics.Math.Code // @physics_lib
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3815👍8🤩3😍32👨‍💻1
👨🏻‍💻 Подборка полезных книг по разработке приложений на Unity 👾

Unity
— межплатформенная среда разработки компьютерных игр, разработанная американской компанией Unity Technologies. Unity позволяет создавать приложения, работающие на более чем 25 различных платформах, включающих персональные компьютеры, игровые консоли, мобильные устройства, интернет-приложения и другие. Выпуск Unity состоялся в 2005 году и с того времени идёт постоянное развитие.

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

📗 Unity in Action, Third Edition [2022] Joseph Hocking

📘 Изучаем C# через разработку игр на Unity. 5-е изд [2022] Ферроне Х.

📘 Разработка игры в Unity. С нуля и до реализации [2021] Денисов

📙 Искусство создания сценариев в Unity [2016] Торн А.

📕 Head First C #, 4-е издание [2020] Эндрю Стеллман, Дженнифер Грин

📒 Unity в действии. Мультиплатформенная разработка на C# [2019] Хокинг Джозеф

📙 Arm Guide for Unity Developers Version 4.0 Optimizing Mobile Gaming Graphics [2017]

📓 Unity in Action. Multiplatform game development in C#, 2nd Edition [2018]

📗 Unity для разработчика. Мобильные мультиплатформенные игры - Джон Мэннинг, Пэрис Батфилд-Эддисон [2018, PDF]

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

💡А есть ли среди наших подписчиков разработчики игр, которые используют Unity? Если да, то покажите ваши проекты в комментариях

#разработка_игр #gamedev #game_development #unity #c_sharp #подборка_книг

💡 Physics.Math.Code // @physics_lib
15👍12🔥5❤‍🔥2🤩1🗿1