Сообщество - Лига программистов C/C++
Добавить пост

Лига программистов C/C++

62 поста 4 760 подписчиков

Популярные теги в сообществе:

Помогите с шифрованием на C++

Столкнулся сегодня с проблемой. Мне нужно сделать так, чтобы когда консоль была открыта, то у меня там отображался мой текст TriggerBot и AimAssist, а в памяти оно бы шифровалось. Пример: в консоли у меня есть "анимация" TriggerBot, но когда я сканирую память (к примеру с помощью Process Hacker или Cheat Engine), то в поиске строк в памяти вместо "TriggerBot", у меня бы там писалось к примеру hhajhfgdsghf==. Я сначала думал об VMP Protect, но решил, что он мне практически не поможет, поэтому решил обратиться к вам. Просьба помочь чем сможете, буду благодарен любому за помощь. Вот код:
#include <iostream>
#include <windows.h>

void fadeInText(const std::string& text) {
for (int i = 0; i <= 10; ++i) {
std::cout << "\r";
for (int j = 0; j < i; ++j) {
std::cout << text[j];
}
Sleep(50);
}
}

void fadeOutText(const std::string& text) {
for (int i = 10; i >= 0; --i) {
std::cout << "\r";
for (int j = 0; j < i; ++j) {
std::cout << text[j];
}
Sleep(50);
}
std::cout << "\r";
}

int main() {
std::string aimAssist = "AimAssist";
std::string triggerBot = "TriggerBot";

while (true) {
fadeInText(aimAssist);
Sleep(1000);
fadeOutText(aimAssist);

fadeInText(triggerBot);
Sleep(1000);
fadeOutText(triggerBot);
}

return 0;
}

Показать полностью

Сборка MS-DOS 4.0

Автор текста: dlinyj

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Совсем недавно появилась следующая новость: На GitHub опубликован исходный код MS-DOS 4.00 под лицензией MIT. Раз появились исходные коды, стало сразу интересно: а можно ли собрать эту операционную систему?

Задача оказалась нетривиальной и совсем неочевидной. Оказывается, что исходные файлы DOS не так-то уж и легко переносятся в git, и уж как минимум, не как текстовые файлы в кодировке UTF-8. Но, к счастью, в отличие от утечек исходников MS-DOS 6.0, здесь имеется полный комплект файлов и инструментов, достаточный для корректной сборки и тестирования. Остались сущие нюансы, которые попили много крови.

Поэтому я, как и многие — начал свои эксперименты по сборке MS-DOS 4.0, с исправлением ошибок, а также возможностью исследования исходных кодов и тестирования их на реальном железе.

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

❯ Инструментарий


Собирать всё буду в Linux Mint (читай Ubuntu). Средой DOS для сборки выбрал dosbox, к сожалению, это не самый лучший вариант, потому что там идёт замедление частоты (чтобы старые программы корректно работали), поэтому сборка идёт достаточно долго. Лучше всего использовать любой удобный DOS, запущенный в виртуальной машине.

Для создания загрузочной дискеты и тестирования полученной сборки буду задействовать виртуальную машину qemu. А чтобы получить дискеты с готовым образом, я буду использовать установочную дискету MS-DOS 4.0 (найденную тут см. 4.00 OEM [Sampo]).

Прежде чем пойдём дальше — важное замечание:

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

❯ В чём сложности сборки?


Проблемы две:

  1. Некорректная инициализация переменных среды (в самом bat-файле SETENV.BAT содержится ошибки или опечатки).

  2. Проблемы с кодировкой при переносе кода с дискеток DOS в GIT с кодировкой UTF-8.


Первая проблема легко исправляется даже самостоятельно, при беглом анализе исходного кода. Она легко вскрывается при сборке, дальше просто необходимо внести правки, либо создать свой обновлённый bat-файл, который будет инициализировать переменные среды окружения.

Значительно сложнее обстоят дела с тем, что в части кода, при переносе в UTF-8, побились некоторые символы. У меня была попытка сборки, которую я описывал у себя в ЖЖ, и, в конце концов, я получил вот это:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

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

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

❯ Подготовительные операции перед сборкой


Итак, шаги по сборке ДОС. Клонируем оригинальный репозиторий:

git clone https://github.com/microsoft/MS-DOS.git

Исправляем проблемы с кодировками:

sed -i -re 's/\xEF\xBF\xBD|\xC4\xBF|\xC4\xB4/#/g' MS-DOS/v4.0/src/MAPPER/GETMSG.ASM
sed -i -re 's/\xEF\xBF\xBD|\xC4\xBF|\xC4\xB4/#/g' MS-DOS/v4.0/src/SELECT/SELECT2.ASM
sed -i -re 's/\xEF\xBF\xBD|\xC4\xBF|\xC4\xB4/#/g' MS-DOS/v4.0/src/SELECT/USA.INF

Переходим в рабочую папку:

cd MS-DOS/v4.0

Перекодируем все текстовые файлы в формат MS-DOS:

find -iname '*.bat' -o -iname '*.asm' -o -iname '*.skl' -o -iname 'zero.dat' -o -iname 'locscr' | xargs unix2dos -f
find -iname '*.BAT' -o -iname '*.ASM' -o -iname '*.SKL' -o -iname 'ZERO.DAT' -o -iname 'LOCSCR' | xargs unix2dos -f


и создаём там обновлённый бат-файл для переменных среды окружения, следующего содержания:

$ cat src/e.bat
@Echo off
echo setting up system to build the MS-DOS 4.01 SOURCE BAK...
set CL=
set LINK=
set MASM=
set COUNTRY=usa-ms
set BAKROOT=e:
rem BAKROOT points to the home drive/directory of the sources.
set LIB=%BAKROOT%\src\tools\bld\lib
set INIT=%BAKROOT%\src\tools
set INCLUDE=%BAKROOT%\src\tools\bld\inc
set PATH=%BAKROOT%\src\tools;%PATH%

В принципе этих операций достаточно для сборки, а то что ниже — это лично моё хулиганство, чтобы продемонстрировать, что DOS в действительности собрался, и нет подмены файлов. Я заменяю компанию Microsoft своим ником:

find -name "*.ASM" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.INC" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.H" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.MAC" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.MSG" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.C" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.CLB" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +
find -name "*.SKL" -type f -exec sed -i 's/Microsoft/Dlinyj/g' {} +

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

❯ Сборка


Собирать буду в dosbox, как показала практика — это не самое лучшее решение, сборка занимает около часа, что, мягко скажем, раздражает.

Запускаю dosbox:

dosbox

Далее в нём монтирую текущую директорию как диск E.

mount e: ./

И переходим на диск e, запускаем в dosbox бат-файл, который инициализирует среду окружения, и начинаем сборку:

e:
cd SRC
e.bat

и запускаем сборку командой nmake:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

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

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

После этого надо скопировать все собранные файлы в один каталог. Создаём каталог «4» в корне диска и копируем все бинарники специальным скриптом:

mkdir \4
CPY.BAT \4


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

ver set 4.0

После переходим в каталог\4и можно выполнить в нёмcommand.com:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Хулиганство сработало, ДОС собрался и прикидывается, будто бы я его разработал. Дело стало за малым — протестировать это на реальном железе.

❯ Создание загрузочной дискетки


Дальше я думал просто примонтировать в dosbox пустой образ дискетки, и прямо из собранных файлов выполнить перенос системных файлов командой:

sys <path> a:

Но, факир был пьян, и фокус не удался. Поэтому решил MBR (Master Boot Record) позаимствовать с загрузочной дискетки DOS 4.0. К сожалению, MBR от MS-DOS 6.22 у меня не заработал.

Скачиваем установочные дискетки, попутно создаём пустую дискетку командой:

truncate --size 1474560 fdd.img

Загружаемся с установочной дискетки и ставим наш пустой образ 1,44 МБ дискетки в дисковод B, с помощью qemu:

qemu-system-i386 -fda Disk01.img -fdb fdd.img

Отменяем установку и форматируем дискету с переносом системных файлов:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

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

imgmount a: <path to fdd.img> -t floppy

И потом просто вручную переносим файлы COMMAND.COM, IO.SYS и MSDOS.SYS на дискету:

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Всё, образ готов. Можно его протестировать в виртуальной машине, или даже записать на настоящую дискету и загрузиться!

Для запуска в qemu следует использовать следующую команду:

qemu-system-i386 -fda fdd.img

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Записать на дискетку можно командой dd, я использую USB-FDD дисковод.

sudo dd if=fdd.img of=/dev/sdk status=progress

И, да! Эта система успешно работает на реальном железе. В данном случае проверка идёт на 386 компьютере.

❯ Выводы

Сборка MS-DOS 4.0 Гаджеты, Электроника, Программирование, Разработка, Программа, Техника, Timeweb, DOS, Длиннопост

Запуск свежесобранного MS-DOS 4.0 на реальном железе

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

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

Конечно же, я по-настоящему жду, когда же обнародуют исходники MS-DOS 6.22, так как ещё надеюсь увидеть их на своём веку.

Удачи вам в ваших экспериментах!

❯ Полезные ссылки:

  1. Исходные коды MS-DOS от Microsoft

  2. Пример сборки MS-DOS 4.0 во FreeDOS (видео)

  3. Compiling MS-DOS 4.0 from DOS 4.0, on a PS/2!



  • Написано специально для Timeweb Cloud и читателей Пикабу. Подписывайтесь на наш блог, чтобы не пропустить новые интересные статьи.

  • Облачные сервисы Timeweb Cloud — это реферальная ссылка, которая может помочь поддержать наши проекты.

Показать полностью 9

Проблема с подключением библиотек

Всем привет, я тут совсем новенький, хотел бы войти в программирование на C++, сначала изучив C.

Для этого я поставил Eclipse(хз какой именно, скачал во flathub) и Code Blocks через терминал с оф.сайта (хотелось бы в дальнейшем пользоваться только Eclipse).

ОС у меня, к слову, linux Ubuntu 22.04, но хакером меня это не сделало от слова совсем.

В общем, возникла проблема с подключением сторонних библиотек(или правильнее headers, я хз) в обоих IDE, когда я хотел заменить мс-досовскую conio.h на родную curses.h или ncerses.h

такие получились пироги в Eclipse:

Проблема с подключением библиотек Eclipse, Ubuntu, Проблема, Длиннопост

gcc linker:

Проблема с подключением библиотек Eclipse, Ubuntu, Проблема, Длиннопост

gcc compiler:

Проблема с подключением библиотек Eclipse, Ubuntu, Проблема, Длиннопост

а вот, что внутри ncursesw:

Проблема с подключением библиотек Eclipse, Ubuntu, Проблема, Длиннопост

что об этом думает Code::Blocks:

Проблема с подключением библиотек Eclipse, Ubuntu, Проблема, Длиннопост

если пытаюсь подключить другие библиотеки, тоже не работает:

Проблема с подключением библиотек Eclipse, Ubuntu, Проблема, Длиннопост

Последняя программа на С++ тоже не запускается.

При попытках подключения типа #include <../../../../usr/include/ncursesw/ncurses.h> тоже беда.

Хотя, если переписать код в блокнот и запустить в терминале, то всё работает:

Подскажите как мне быть с IDEшками.

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

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

Показать полностью 9

Почему игнорируется условие IF

Привет всем. Прошу помочь знающих людей. Пробую немного разобраться в программировании микроконтроллеров на С++. Создал программу тестера батареек. Функция Void loop состоит по сути из трех условий:

1) если напряжение на батарейке больше 1,6 в то горит зеленый светодиод (newLed),

2) если от 1,4 до 1,6в, то горит желтый светодиод (okLed),

3) и все остальное - горит красный (oldLed).

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

#define newLed 2

#define okLed 4

#define oldLed 6

int analogValue = 0;

float voltage = 0;

int ledDelay = 2000;

void setup()

{

pinMode(newLed,OUTPUT);

pinMode(okLed,OUTPUT);

pinMode(oldLed,OUTPUT);

}

void loop()

{

analogValue = analogRead(0);

voltage = 0.0048*analogValue;

if (voltage >= 1.6)

{ digitalWrite(newLed, HIGH);

delay(ledDelay);

digitalWrite(newLed, LOW);

}

else if(voltage < 1.6 && voltage > 1.4)

{

digitalWrite(okLed, HIGH);

delay(ledDelay);

digitalWrite(okLed, LOW);

}

else

{

digitalWrite(oldLed, HIGH);

delay(ledDelay);

digitalWrite(oldLed, LOW);

}}

_______________________________

кстати такое поведение ардуины заметил не только в этой программе. Там где программы состоят из условий IF постоянно игнорируется первое условие (оно постоянно выполняется). При загрузке скетча в симулятор Arduino в интернете пограммы работают корректно. В чем может быть дело?

Показать полностью

SayoriOS или о том, как мы пишем свою мини ОС

Небольшое предисловие

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

Почему называется именно SayoriOS?

Это является отсылкой к игре Doki Doki Literature Club, там был один из персонажей, к сожалению, те кто играл в игру поймут более глубокую отсылку.

SayoriOS или о том, как мы пишем свою мини ОС Операционная система, Программирование, Хобби, Проект, Разработка, Программист, Развитие, Длиннопост

Как все начиналось?

Кто заглянет к нам на GitHub, может заметить что отсчет идет с версии v0.2.13.1, дело в том что все до версии v0.3.0 было основано на другой ос (её, версию кстати после нашего релиза (v0.2.13.1) удалили), с версии v0.3.0 было проделано множество работы, прошло уже больше года и я хочу вам рассказать чего мы добились за это время.

На каком языке программирования вы пишете ОС?

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

Почему вы пишете именно x86 битную версию, а не x64?

Ограничение себя 32-битной версией x86 также было намеренным и опять-таки во имя простоты. x86_64 намного сложнее, чем 32-разрядный x86, и мы (команда) хотели сначала получить некоторый опыт работы с последним, прежде чем переходить к 64-разрядному режиму.

Немного о действующих лицах

Никита Пиминов - собственно я, как создатель и инициализатор проекта

Андрей Павленко - второй разработчик, написал почти все драйвера для ос

Дима Радеев - добавил поддержку звука ошибок

Даниил Лебедев - добавил поддержку Rust в ядре

Рустем Гимадутдинов - добавил поддержку мыши PS/2

А теперь перейдем к краткому ChangeLog'у

v0.3.0 - Релиз 09.11.2022

Скриншоты версии v0.3.0

Как я и говорил ранее, самое большое обновление было тут.

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

v0.3.1 - Релиз 16.12.2022

Скриншоты версии v0.3.1

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

v0.3.2 - Релиз 02.04.2023

SayoriOS или о том, как мы пишем свою мини ОС Операционная система, Программирование, Хобби, Проект, Разработка, Программист, Развитие, Длиннопост

В этой версии ситуация уже по лучше :) Опять же исправили множество багов (и добавили новых)

  • Появилась поддержка нормальных шрифтов PSF

  • Поддержка PCI

  • Поддержка звука через AC97 (в QEMU работает в нормально, в VBox'e заикается ,а на реальном железе не тестировалось)

  • Обновили местами интерфейс

  • Добавили Parallel Desktop - это прототип рабочего стола

v0.3.3 - Релиз 08.10.2023

Скриншоты версии v0.3.3

У этого релиза, также визуальных отличий почти не было, были только небольшие фишки

  • Добавлена система триггеров (событий)

  • Поддержка setjmp/longjmp

  • Поддержка температуры процессора

  • Первые шаги ACPI

  • Поддержка SSE

  • Определение других процессорных ядер

  • Научились работать с жесткими дисками, IDE PIO, ATAPI Дисководы, а также с Floppy (RW)

  • Добавлена поддержка vsprintf(), sprintf(), asprintf(), vasprintf()

  • Ну и пофиксили некоторые моменты, и некоторые другие фишки

v0.3.4 - Релиз 31.12.2023

Скриншоты версии v0.3.4

Это был наш предновогодний релиз, и вот список изменений:

  • Наконец, новый менеджер памяти, со старым были большие проблемы, и именно он создавал большинство багов в ос

  • Исправили детектор имени процессора, раньше выводилась пустота

  • Исправлена работа на видеокартах с Cirrus

  • Добавлена поддержка IDE-дисков (в режиме DMA) и частичная поддержка SATA

  • Переписали полностью, функционал который отвечал за файлы, теперь этим занимается менеджер файловых систем и дисков (nvfs | dpm | fsm)

  • Туда же подключили все устройства (виртуальный диск, диски, floppy)

  • Удалили sefs (был наш аналог файловой системы) и аналог Targa, заменив собственно TarFS + Targa (с 4ю режимами)

  • Добавили базовую поддержку libstring и libvector

  • Добавили проигрыватель miniplay (Воспроизводит wav файлы)

  • Добавили поддержку JavaScript (port elk) => JSE

  • Начата работа над сетью

  • Добавлен эмулятор GameBoy, правда производительность у него очень низкая.

Буду рад обратной связи!

Благодарю всех за внимание!

Ссылка на GitHub: https://github.com/pimnik98/SayoriOS

Мы в VK: https://vk.com/sayorios

И телеграм: https://t.me/sayorios

В соц.сетях, можете найти мемы касаемо разработки, и сами новости.

Всех с наступившим Новым Годом и наступающим Рождеством.

Показать полностью 18

Как дела у c++ разработчиков?

Привет всем! Нужен совет от с++ разработчиков по поводу работы.

В общем, задумал я сменить область деятельности с бэкенд-разработчика .Net и SQL на что-то более приближенное к железу и что-то более похожее на программирование.

Что меня сейчас не устраивает, и с чем, надеюсь, не сталкиваются разработчики c++ (не сочтите за нытье): постоянные контакты с пользователями/заказчиками/клиентами. Соотношение времени, когда ты разрабатываешь хоть какой-то код, ко времени, которое тратишь на всевозможную поддержку/переписку/созвоны составляет примерно 30/70.

Главная проблема, что подписавшись на работу простым Васяном, который делает бэкенд, ты по сути подписываешься на работу бизнес-аналитиком, консультантом, админом, сотрудником поддержки, менеджером проекта (в особо тяжелых случаях) и только в промежутках между всем этим - еще и разработчиком (по крайней мере так было на всех 4-х местах работы, на которых я работал).

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

Собственно, вопрос - все ли у вас (разработчиков с++) лучше в этом плане? Действительно ли технические задачи в мире с++ находятся в приоритете? Или работа с клиентами и прочая бюрократия тоже присутствует? Или есть какие-то свои "анти-программисткие" заморочки и хрен редьки не слаще?

Вспомним историю великого и могучего С++

Язык программирования C++ был создан в начале 1980-х годов Бьерном Страуструпом, который работал в компании Bell Laboratories. Он хотел расширить возможности языка C, добавив в него поддержку объектно-ориентированного и обобщённого программирования. Изначально язык назывался “C с классами” (C with Classes), но позже был переименован в C++ в 1983 году. Символ “++” означает операцию инкремента (увеличения на единицу) в языке C и символизирует развитие языка .

Вспомним историю великого и могучего С++ Программирование, C++, IT, Программист, История IT

С тех пор язык C++ постоянно эволюционировал и стандартизировался. В 1998 году был выпущен первый международный стандарт ISO/IEC 14882:1998, который определял основные правила и синтаксис языка. В 2003 году был выпущен второй стандарт ISO/IEC 14882:2003, который исправлял некоторые ошибки и неоднозначности первого стандарта. В 2011 году был выпущен третий стандарт ISO/IEC 14882:2011, который добавлял много новых возможностей, таких как автоматический вывод типов, лямбда-выражения, перемещающий семантику, умные указатели и другие. В 2014 году был выпущен четвертый стандарт ISO/IEC 14882:2014, который улучшал некоторые аспекты третьего стандарта и добавлял новые библиотеки. В 2017 году был выпущен пятый стандарт ISO/IEC 14882:2017, который расширял возможности языка и библиотек, например, добавляя поддержку параллельного и распределенного программирования. В 2020 году был выпущен шестой стандарт ISO/IEC 14882:2020, который также вводил множество новшеств, таких как модули, кортежи, концепты, корутинны и другие .

Язык C++ оказал большое влияние на другие языки программирования, такие как Java, C#, Python и другие. Язык C++ широко используется для разработки различных видов программного обеспечения, такого как операционные системы, приложения для настольных и мобильных устройств, игры, серверы, встраиваемые системы и другие. Язык C++ отличается высокой производительностью, эффективным использованием ресурсов, гибкостью и мощностью.

Интересные факты и фичи языков программирования у нас в канале, заходи :)

Показать полностью 1

Как достичь успеха в изучении С++: советы и практика

Приветствую вас, друзья! Сегодня я хочу поделиться своим опытом изучения языка программирования С++. За шесть месяцев я наткнулся на множество трудностей и хочу дать вам несколько советов, которые помогут вам решить часть из них.

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

Первым шагом в изучении С++ является выбор подходящей книги. Это может быть сложным выбором, так как многие книги предназначены для разных уровней знаний и стилей мышления. Я провел много времени, чтобы найти книгу, которая бы соответствовала моему уровню знаний и стилю мышления. Мой выбор пал на книгу "Язык программирования С++" 6-ое издание Стивена Прата. Я также начал читать книгу Липмана для начинающих, чтобы иметь возможность сравнить два подхода и убедиться в правильности своего выбора. По этому я могу дать вам следующую рекомендацию, начинайте изучение любой книги, в процессе анализируйте задавая себе вопросы: Хорошо ли я понимаю материал? Подходит ли мне стиль написания материала? , если ответ будет нет, предлагаю вам попробовать продолжить изучение с другой книгой, в интернете есть множество рекомендаций по книгам, перебирайте и выберите самую подходящую конкретно для вас.
*Хочу сделать примечание: не используйте этот метод для прокрастинации, не стоит тратить слишком много времени для выбора "идеальной книги" такой не существует, её можете написать вы сугубо для себя, исходя из того опыта, предпочтений т.д., которые вы получите за годы программирования и изучения материала.

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

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

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

a)Человек с предрасположенность в этой сфере не нуждается в моих советах по мотивации, он мотивирован заниматься этим потому что ему нравиться сам процесс.

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

b.1)Человек с конкретной целью будет держать всегда свою цель перед глазами и сможет отслеживать процент проделанной работы по её достижению, анализируя усвоенный материал, задавая себе вопрос: приближает ли меня к этой цели усвоенный материал или же он был бесполезен для её достижения?

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

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

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

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

Я уверен, что с достаточным упорством, терпением и мотивацией вы сможете достичь своих целей и стать опытным программистом на С++. Желаю удачи в вашем путешествии в мир программирования!

Буду рад конструктивной критики .

Показать полностью
Отличная работа, все прочитано!