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

Обратная связь: @physicist_i
Download Telegram
📚_Подборка_книг_«Классика_Computer_Science»_26_книг_+_CD_2002_2016.zip
1.4 GB
📚 Подборка книг «Классика Computer Science» (26 книг + CD) [2002-2016]

Сборник книг серии "Классика Computer Science" на тему – компьютеры, программирование, операционные системы, базы данных. Серия книг«Классика computer science», предназначенных для базовой подготовки специалистов в области компьютерных наук.

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

📔 Лафоре Р. - Объектно-ориентированное программирование C++. 4-е изд. 2004
📕Архитектура компьютера [2013] Э. Таненбаум, Т. Остин
📗Брауде Э. - Технология разработки программного обеспечения. 2004
📘Вахалия Ю. - UNIX изнутри. 2003
📙Кельтон В., Лоу А. - Имитационное моделирование. Классика CS. 3-е изд. 2004
📓Клейнберг Дж., Тардос Е. - Алгоритмы. Разработка и применение. 2016
📒 Компьютерные сети [2012] Эндрю Таненбаум, Дэвид Уэзеролл
📔 Константайн Л., Локвуд Л. - Разработка программного обеспечения. 2004
📕 Коплиен Дж. - Программирование на С++ 2005
📗 Кренке Д. - Теория и практика построения баз данных. 8-е изд. 2003
📘 Лафоре Р. - Структуры данных и алгоритмы JAVA. 2-е изд. 2012
📙 Марк Руссинович - Внутреннее устройство Windows, 7-е изд 2018
📓 Паттерсон Д., Хеннеси Дж. - Архитектура компьютеров и проектирование компьютерных систем. 4-е изд. 2012
📒 Пратт Т., Зелковиц М. - Языки программирования. Разработка и реализация 2002

#cpp #java #cs #алгоритмы #сети #cplusplus #подборка_книг #IT #разработка

💡 Physics.Math.Code // @physics_lib
1👍90🔥3530🥰4🙈2🤩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
40👍16🤷‍♂14🤯6🔥4👾4👏1👻1