Category: C++

26
Июл
2021

Алгоритм конвертирования 24-битного пикселя в 8-битный с цветом из палитры регистров VGA

Здpaвcтвyйтe, я ищу способ(алгоритм) конвертирования ~16,8 миллионов цветов 24-битного изображения в 256 цветов палитры регистров VGA(https://i.stack.imgur.com/gbgZD.png).
Какие есть алгоритмы для этого?

26
Июл
2021

Кто как начинал программировать? [закрыт]

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

25
Июл
2021

Почему заканчивается ошибкой?

Данный код заканчивается ошибкой, после ввода информации о участнике.
Программа пытается записать элемент в списке, но выдаёт ошибку.
Где может быть ошибка?
Комментарии на польском. Если надо, могу перевести.
#include <stdio.h>
#incl…

25
Июл
2021

Найти длину пути между точками, проходящего вне окружности

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

25
Июл
2021

Задача Банкомат В некотором государстве в обращении находятся банкноты определенных номиналов [закрыт]

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

25
Июл
2021

Не работает ajax или работает не так как надо

А может это я туплю. Нужно передать массив в контроллер через ajax. В качестве проверки контроллер возвращает строку из элементов массива. Эту саму строку я хочу вывести при успехе в консоль через тот же аякс запрос, но получается пустая с…

24
Июл
2021

Не работает код / incompatible types when initializing type ‘Player *’ using type ‘Player’

Изучаю ncurses (на языке C). Нашел туториал, выполнял пример из этого видео

В нем создаются движения персонажа в терминале (вперед-назад-вверх-влево), персонаж оставляет за собой символы, типа шаги. Чел, который ведет туториал пишет на C+…

24
Июл
2021

Не работает код / incompatible types when initializing type ‘Player *’ using type ‘Player’

Изучаю ncurses (на языке C). Нашел туториал, выполнял пример из этого видео

В нем создаются движения персонажа в терминале (вперед-назад-вверх-влево), персонаж оставляет за собой символы, типа шаги. Чел, который ведет туториал пишет на C+…

21
Июл
2021

Проверить любую структуру на изменение полей

Имеется задача сделать универсальной проверку любой структуры на изменение.
Имеется следующая структура (… означает, что подобных полей в ней может быть много)
typedef struct S_STR1
{
/*! Внутренняя структура */
struct
{
float dVal …

21
Июл
2021

JetBrains выпустила исследование про разработчиков C++. Оказалось, треть из них не пишет юнит-тесты

JetBrains выложила результаты исследования по каждому популярному языку программирования. Вот, что выяснилось про программистов на C++.
— Читать дальше «JetBrains выпустила исследование про разработчиков C++. Оказалось, треть из них не пишет юнит-тесты…

21
Июл
2021

Отслеживание работоспособности/управление софтом

Задача
Имеются разные виртуальные машины, сервера, пк…, и на них крутиться обработка какого-то софта. Хотелось бы объединить всё это в единую цепочку, которую было бы удобно отслеживать. (В случаи чего запустить).
По сути выход из главно…

20
Июл
2021

Как сделать терминальный текстовый редактор

хочу сделать текстовый редактор для linux (можно и для windows, пока не определился, но терминальный точно) на языке C. Был опыт создания текстового редактора на Python, но такой редактор я открывал как приложение. В случае с C хочу сделат…

19
Июл
2021

Почему при сборке ядра cross-gcc странно себя ведёт?

я учусь писать систему, использую кросс-компилятор gcc. Как всегда, появилась одна большая проблема: если я в файле kernel.c создам маску символа(моя ос работает в защищённом режиме, изначально был сменён режим на графический(VGA)) в главн…

18
Июл
2021

🗣 «Я программист от макушки до кончиков пальцев», – интервью с Seniour Software Engineer C#

Покупали в интернете пиццу или суши? Скорее всего ресторан получил ваш заказ через WebOrders. Корреспондент «Библиотеки программиста» поговорил о применимости и перспективах C# с Владимиром Каратаевым, разработчиком сервиса.

Герой интервью пишет программное обеспечение для доставки продуктов из ресторанов и кафе под брендом r_keeper Delivery. Сервис WebOrders – одно из его детищ – предоставляет API для доступа к кассовым серверам и CRM ресторанов. С его помощью разработчики интернет-магазинов и мобильных приложений подключаются к множеству заведений по всей стране и получают доступ к экосистеме r_keeper.


Расскажите о своей работе? Много ли вам приходится кодить?

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

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

Командная работа, в отличие от индивидуальной, требует уделять немало времени взаимодействию с коллегами. Ежедневные совещания, встречи в течение дня, согласования и обсуждения – это обязательная, и весьма важная часть работы. Если вы не обговорили какой-то аспект, кажущийся вам незначительным, и закодировали на своё усмотрение, то есть немаленький шанс, что этот код придется выбросить из-за этого “незначительного” момента. Это вам он неважен, а для руководителя может оказаться ключевым.

В итоге само кодирование занимает 60 – 70% времени.

Остальное время уходит на:

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

Почему вы выбрали именно это направление?

Я «заболел» программированием в 6-7 классе школы. После уроков я с такими же «страдальцами» бегал в класс информатики и просил учителя хотя бы посидеть за компьютером. Программировать нас тогда ещё только учили.

Именно поэтому у меня за плечами такой большой бэкграунд из вороха различных технологий я преподавал в университете информатику, программировал ERP на крупнейшем складе в России: в ваших авто наверняка есть детали с этого склада; разрабатывал САПР для электроэнергетики: почти все диспетчерские в России работают на этом ПО, так что свет в ваших домах это и мой труд тоже; сейчас разрабатываю микросервисы в сфере HoReCa ПО для ресторанов.

Я не выбирал этот путь осознанно, по каким-то критериям – он (путь) сам меня нашёл, целиком захватил и увлёк.

Долго ли пришлось идти к нынешнему уровню? Это было трудно?

В целом на уровень ведущего разработчика можно выйти за 3 – 5 лет работы программистом. При наличии соответствующих личных качеств можно стать тимлидом. И это трудно.

Например, строитель или токарь отработал свои 8 часов и далее занимается личной жизнью, о работе не думает. А тут порой решение задачи спать не дает: полночи мозг остыть не может, продолжая искать решения. И нередко добровольно, без всякой дополнительной оплаты, остаёшься поработать ещё, чтобы доделать задачу, пока мысль не ушла. Кроме того, отрасль так динамично меняется, что надо всегда дополнительно заниматься самообразованием. За свой счёт, в свободное от работы время.

Например, я прошёл такой путь: Assembler, программирование микроконтроллеров, Turbo pascal, Delphi, СУБД (Interbase, Firebird, MS SQLServer, Postgresql, Clickhouse, SQLite), Java, и, наконец, C#, Python.

И «бег» продолжается: сейчас присматриваюсь к Golang, Kotlin, Rust. Изучаю обработку больших данных, машинное обучение… много чего ещё. И всё для того, чтобы оставаться на современном уровне, поддерживая актуальность и ценность своих знаний и опыта на рынке труда.

Сложно ли учить С# с нуля новичку в программировании или программисту на другом языке?

Я изучал и использовал много различных языков программирования, так что могу сравнивать. У C# невысокий порог вхождения. Очень важный момент: у C# прекрасный инструментарий для разработки. Достаточно зайти на сайт, скачать и установить Visual Studio, и вы сразу всё получаете «из коробки», в готовом к работе виде.

Нажав пункт меню «новый проект» вы получите рабочую заготовку из простейшей программы “Hello word”. Запускайте, смотрите, как работает, модифицируйте и обучайтесь!

Ссылки на обучение приведены на приветственной странице в Visual Studio.

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

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

С чего бы вы посоветовали начинать изучение C# новичку?

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

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

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

Сколько занимает путь от практиканта до полноценного боевого джуна в вашей команде? А от джуна до мидла и сеньора?

Я не советую идти работать практикантом. Надо работать 8 часов, а когда ещё учится программированию? Лучше полгода подучиться и пойти работать джуном. Далее 2-3 года надо не просто работать джуном, а продолжать обучение, чтобы выйти на уровень мидла.

Еще 2-3 года уйдут до уровня сеньора. Но тут уже надо больше вникать в специфику самой отрасли, для которой вы делаете разработку, чем в программирование. Например, делаете САПР в электроэнергетике – разберитесь в типах коммутационных аппаратов. Кодите для ресторанов – изучайте ресторанное дело.

Итого, выход на верхнюю планку ценного специалиста у вас займет около 5 лет, не считая ВУЗовской подготовки.

Что самое важное и сложное в изучении С#?

Сам язык прост. Не тратьте много сил на изучении его языковых конструкций. Существенно сложнее освоить фреймворки, например, asp.net для разработки бэкендов интернет-сервисов. Тут уже надо знать интернет-технологии: что такое аутентификация, и чем она отличается от авторизации, http-протокол, почти всегда требуется работа с СУБД.

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

Используйте последние версии фреймворков, библиотек и сред разработки и развертывания. Пока вы будете их изучать, они войдут в мэйнстрим. Обратите внимание, надо обязательно участвовать в проектах open source на GitHub. Это полезно во всех отношениях:

  • Поможете хорошему делу.
  • Найдёте интересную нишу для себя.
  • Научитесь работе с инструментарием разработки: трекер, система контроля версий, автотестирование, CI (continuous integration – постоянное, «на потоке» тестирование и деплой всего, что выкладывается).
  • Научитесь общаться в команде, освоите жаргон.
  • Поймёте и примете инженерную культуру разработки кода.
  • Почувствуете чем дышит отрасль, какие технологии являются мэйнстримовыми.
  • Наработаете себе базу проектов для резюме.

Что еще нужно знать джуну?

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

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

Также необходимо знать аппаратуру («железо»). Как устроен компьютер, какие блоки есть в CPU, что такое кэш, мат.сопроцессор, GPU, разрядность процессора и т.п. Вы же пишите программы для «железа», а не для некоей абстракции. Поэтому надо знать аппаратуру. Не детально, но иметь общее представление.

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

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

Как вы думаете, программисту нужно профильное высшее образование?

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

Куда податься свежеиспеченному джуну? В каких компаниях нужны С# разработчики?

Без опыта работы рассчитывать на приличные деньги не стоит. Надо браться за любую работу. C# любят на заводах и промышленных предприятиях за то, что на нём можно быстро делать пользовательские интерфейсы для ОС Windows. В игровой индустрии царит Unity, использующий C#. Виден явный тренд на более широкое использование C# в бэкендах интернет-сервисов, в банковском ПО. Хотя, конечно же, Java тут абсолютный лидер.

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

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

Каковы ваши планы на будущее?

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

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

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

Сейчас я вижу, что актуальной остаётся работа с огромными объёмами данных (big data). Это связано с текущим трендом на IoT. IoT сейчас бурно, взрывообразно развивается. Посмотрите – все крупные экосистемы (Мэйл, Сбер, Яндекс, МТС, Google, Amazon, Xiaomi, Apple) имеют в своем составе технологии для работы с умными домами и датчиками. Есть голосовые помощники, которые позволяют управлять устройствами с помощью голоса.

Эти системы состоят из отдельных программных модулей: кирпичиков, которые удобно и быстро можно интегрировать с помощью Python. Он же используется в машинном обучении. Учите Python, как вспомогательный язык, служащий для высокоуровневой интеграции разнородных систем. Для написания облачных микросервисов я рекомендую изучать Java, C#; для пользовательских интерфейсов – HTML и Javascript. Такой стек инструментария разработчика сейчас актуален, и пока не видно тенденций на изменение такого расклада.

***
Реклама
Если вы только начинаете путь в профессии, обратите внимание на курс «Разработка на C#» образовательной онлайн-платформы GeekBrains. Он охватывает все необходимые новичку темы от основ программирования и алгоритмов до публикации готового программного обеспечения. Изучается также работа с базами данных, бэкенд и фронтэнд, протоколы взаимодействия и даже основы архитектуры. Имеющие некоторый опыт программисты смогут попробовать новые фреймворки и современные технологии, а также расширить портфолио, познакомившись с основами разработки корпоративных приложений.

15
Июл
2021

Где хранить доп.информацию о окнах WINAPI?

Lang:C
я делаю текстовый редактор(очень простенький)
И у меня есть функция сохранения.
То-есть вы открываете файл, потом написали что-то захотели сохранить, нажимаете кнопку "сохранить"
И вылезает окно "куда сохранить"

14
Июл
2021

Как считать аргументы в main из командной строки?

Как считывать просто аргументы из argv я понимаю. А как считать допустим имена файлов и параметры по типу -l arg. Я увидела, что есть функция getopt, с помощью нее получаю аргументы после -l, а как потом считать имена файлов? В интернете н…

14
Июл
2021

GetQueuedCompletionStatus – как узнать "тип" готовой задачи?

Подскажите пожалуйста, вот когда в очереди порта завершения появляется готовая задача, то извлекая ее с помощью функции GetQueuedCompletionStatus, как узнать – эта готовая задача на чтение или запись ?
Или я вручную, как то сам должен это …

14
Июл
2021

Cравнение скорости между Глобальной переменной и передачей по ссылке

Пытаюсь примерно оценить различие в скорости вызова функции с передачей параметров по ссылке или же использованием глобальных переменных.
Вот такой простенький код: запускаю на Windows, VS2019, x32/x64, release/O2.
#include <iostream&g…

13
Июл
2021

Перевод двумерного массива в одномерный.Segmentation fault. Cи

Задача:реализовать функцию которая принимает двумерный массив и возвращает указатель на одномерный, вылазит сиг фолт, помогите разобраться
char *ft_strjoin(char **strs)
{
int i = 0;
int j = 0;
int k = 0;
char *final = (c…