Я абсолютно далёк от всего, что тут показано. Но я необычайно впечатлён вашими знаниями и умениями! Приятно и положительно удивлён ) Вот и отличный пример - девушка-программист. Продолжайте вдохновлять и разрушать стереотипы 👍😃
@DariaEmacs4 жыл бұрын
Спасибо за хороший комментарий), редко можно встретить такое доброжелательное отношение к девушкам-программистам)).
@singletonpersonally43413 жыл бұрын
Спасибо большое за видео) Очень интересно смотреть, как вы круто используете этот инструмент, посмотрев это видео, увидел то что я костылил, а вы пишете одной строчкой) Спасибо вам большое)
@timoraivonen18484 жыл бұрын
Я .net + js разраб, но меня такие видео подбивают идти учить плюсы :))
@influence30154 жыл бұрын
Вообще бы классно было курс по алгоритмам и структурам данных от вас)
@victorkrasnov55764 жыл бұрын
Проверка на признак конца файла, eof(), приводит у меня как бы к двойному "считыванию" последнего символа - на самом деле, просто к одной лишней итерации. Дело в том, что eof выставляется в true уже после неудачной попытки чтения. То есть мы прочитали последний символ, но eof всё ещё false, и тогда мы заходим в тело цикла лишний раз. Пытаемся снова прочитать символ (безуспешно), и при этом eof наконец-то выставляется в true (а значит, следующей итерации уже не будет), а текущее значение ch (а оно у нас всё ещё равно последнему символу), не изменяется. И вот на следующей строке мы учитываем этот последний символ повторно, чуть искажая статистику. То есть eof(), наверное, не совсем актуален для этого примера, раз он запаздывает на один шаг. Поскольку read() возвращает этот же поток, актуальное состояние которого легко сразу же проверить преобразованием к bool, я бы предложил такой вариант цикла: char ch; while(file.read(&ch, 1)) { frequency[static_cast(ch)]++; // всякие там логи } Проверил у себя, такой цикл выполняется ровно filesize раз, без лишней итерации.
@Shantykoff4 жыл бұрын
Как всегда, подробно и интересно :)
@DariaEmacs4 жыл бұрын
Спасибо)).
@avraamlin70224 жыл бұрын
Да ладно, Дария рад что ты вернулась)
@DariaEmacs4 жыл бұрын
Спасибо).
@ajaymansur47694 жыл бұрын
Вот черт. Ничего не понял. Либо я дурак, либо с++ для меня очень хорош. А может и то, и другое. Автор как всегда молодчина. Чертовски познавательно
@DariaEmacs4 жыл бұрын
🤦🏻♀️🤦🏻♀️🤦🏻♀️ жалко.. Спасибо!
@fillon_smith4 жыл бұрын
Вроде все понятно. И полезно для меня. В видео есть заморочки нижнего уровня с signed/unsigned, побайтным чтением файла, это отдельная тема. Для десктопных систем это выглядит излишне. Но учитывая, что плюсы часто применяются для программирования embedded (микроконтроллерной техники) (и денег там больше платят, чем за десктоп имхо), там это все необходимо знать.
@DariaEmacs4 жыл бұрын
Да, я взяла один из самых простых алгоритмов для того, чтобы можно было посмотреть разные видео с объяснениями. Это всегда помогает лучше понять, что происходит.
@asdffewfew4 жыл бұрын
коммент для поддержания канала. не пропадайте
@user-qm2cb6qr3n4 жыл бұрын
Спасибо за познавательное видео. Хотел спросить, в условии на проверку открыт файл или нет, не лучше ли было еще добавить return с отличным от 0 значением и добавить вывод названия файла. Сейчас же программа просто продолжит выполнение и в логах можно не найти строчку о том что файл не открылся. Почему бы не сделать переменную названия файла константной? Зачем мы завели вектор есть же std::array он выделяется на стеке что избавляет нас от прыжков по памяти? Почему нельзя было сразу завести unsigned char вместо char?
@Rafael_Santi4 жыл бұрын
Концовка - бомба! 😂
@ЭдуардАксенов-и4п3 жыл бұрын
Такой вопрос, а почему вы в main не используете using namespace std, удобно же? По личным соображениям или так не приветствуется?
@DariaEmacs3 жыл бұрын
Обычно запрещено правилами code style в команде.
@vlaih04 жыл бұрын
Какая ты зайка))))
@alexey-art-studio4 жыл бұрын
Крутяк. Недавно тоже нечто подобное изучал) интересная тема сжатие)
@alexey-art-studio4 жыл бұрын
было б интересно про написание драйверов под линукс или винду)
@DariaEmacs4 жыл бұрын
Да-а-а)). Спасибо, Алексей.
@IExSet3 жыл бұрын
зачем мы сделали вектор вместо массива ? :-)
@vitprof4 жыл бұрын
Даша, ты можешь еще игру змейку запрограммировать. Тоже будет хорошим проектом. Как у тебя дела? Чем сейчас занимаешься? Лучше в личку.
@DariaEmacs4 жыл бұрын
Привет, Виталий. Спасибо. Змеек на С++ очень много)). Вот эта мне нравится. kzbin.info/www/bejne/mXa6f4OCqaeHd68 А личку тут убрали.
@vitprof4 жыл бұрын
@@DariaEmacs Даш, я тебе на ФБ написал.
@avazart6144 жыл бұрын
@@vitprof Интересно что у не указан на ютюбе FB только VK , Insta ...
@Ронин-и7е4 жыл бұрын
+Daria Emacs как в "зеленом фургоне" - Просю раскрыть тему двоичной системы счисления! не понятны следующие вещи. 1) как это? можно и с минусом получать число из нулей и единиц и не с минусом? как система это узнаёт (нужно минусить или нет), и как это можно особо указать. 2) что за мантисса такая в дробях при двоичной системе счисления? В общем думаю на восьмую и девятую часть рассказов хватит)
@Acid313374 жыл бұрын
Первый бит зарезервирован для знака числа. числа с плавающей точкой преставлены как 0.1234 × 2^(-5678) 1234 - мантисса, -5678 - экспонента (записываются подряд как целые числа в двоичной системе, разумеется) А вообще не запаривайся, считай что это абстракция, детали реализации от тебя скрыты. Ты же не лезешь в исходники операционной системы чтобы узнать как работает printf. И не надо этого делать, а то плохая привычка появится полагаться на детали реализации.
@Ронин-и7е4 жыл бұрын
@@Acid31337 именно 0.10101 откуда точка после нуля?! (точнее зачем?) можно же 123 * 2 ^ n зачем огород городить? и почему в мантиссе встречаются огромные цифры? можно же просто увеличить степени двойки (и почему степень с "-" ?) и используются ли в экспоненте дробные степени?)))
@Acid313374 жыл бұрын
@@Ронин-и7е то что проще сделать бывает не проще объяснить как оно работает, и наоборот. Минус я для примера поставил, там может быть как отрицательное, так и положительное число. Мантисса отвечает за точность. Ну это опять же детали реализации, смысла их знать или обсуждать почему так, а не эдак никакого нет.
@victorkrasnov55764 жыл бұрын
Мне кажется, в код вкралась небольшая очепятка: int value = (i + filesize%20) * 100.0 / filesize; Тут filesize%20 - постоянная величина и её прибавление к счётчику не имеет смысла, а просто даёт некоторую неточность, разве нет? Я бы написал так: int value = i * 100.0 / filesize;
@holy-del3 жыл бұрын
Это нужно только для того, чтобы в консоли не осталось 99% при завершении работы программы. Допустим, у нас 110 байт в файле. Мы выставляем процент каждый двадцатый байт, начиная с первого. 0,20,40,60,80,100. Сотая итерация - последняя, которая пройдет в условие i%20 == 0. Некрасиво получится.
@programer84 жыл бұрын
Дарья, как учить школьную математику самостоятельно, есть ли какие-то книги с объяснениями?
@DariaEmacs4 жыл бұрын
Конечно, есть. Всё зависит от того, какой раздел математики нужно вспомнить.
@programer84 жыл бұрын
@@DariaEmacs в первую очередь алгебру, а потом и геометрию
@DariaEmacs4 жыл бұрын
Ларри Гоник: "Алгебра. Естественная наука в комиксах" не подойдет?
@programer84 жыл бұрын
@@DariaEmacs спасибо, посмотрю. Математику учить самостоятельно непросто, из за того что не предусмотрено такая возможность
@0day6944 жыл бұрын
Вай пэрсиг!
@Ruslan-kk4pf4 жыл бұрын
127 лайк, ещё один и юбилей))
@DariaEmacs4 жыл бұрын
Да, будет красивое число 10000000 ))
@Ruslan-kk4pf4 жыл бұрын
@@DariaEmacs жаль не в десятичной :D
@kosiak108514 жыл бұрын
Алгоритм известный, я б его и без подсказок написал. Мне кажется, начинающим программистам было б очень полезно узнать побольше про баш, команды, утилиты, редакторы и.т.д. Потому что обычно начинают программировать под виндоус в вижуал студии, где все эти битики легко посмотреть прямо из окна. И далее учатся языку, алгоритмам и.т.д. А вот как в баше не то что редактором пользоваться, а тупо файл пустой создать - нигде не объясняют. Вот это xxd -b взрывает мозг в 100 раз больше, чем сам Хаффман.
@mistergrinch73424 жыл бұрын
блин ,вы правы ! пойду убьюсь. :-)
@DariaEmacs4 жыл бұрын
Ни в коем случае, умные и благородные люди нужны человечеству! :))
@avazart6144 жыл бұрын
1. Зачем читать через read() когда есть get() ? char ch; while(ifs.get(ch)) // так лаконичнее и очевиднее чем через eof() & read() { // use ch } 2. Если уже используешь вектор и вычисляешь размер файла то разумно сразу делать reserve() 3. Думаю объяснение ввода прогресса с трюком через был лишним для начинающих. И думаю стоит начинать все же с изучения предметной области(что пишем, для чего пишем) а не с кода. 4. Интересно как Вы в следующих видео решите проблему с кодировками файла UTF-8/Window1251 учитывая что текст взят на русском.
@avazart6144 жыл бұрын
А еще __PRETTY_FUNCTION__ не стандарт, а значит скорее всего не будет работать в MSVC под виндой.
В C++ char вот так устроен. Если у Вас есть char ch = -128, и Вы вычтите из него 1, то будет: -128 - 1 = 127. И в результате, ch = 127.
@mistergrinch73424 жыл бұрын
11111111=(-127) 10000000= (-0),никак( -128) 01111111+1=переполнение=10000000=0.восьмой разряд это знак. -128-1=-129,а это переполнение и ответ будет (+1)
@DariaEmacs4 жыл бұрын
Немного не так. 11111111 = -1, а -127 = 10000001. Для того, чтобы перейти от положительного числа к отрицательному нужно инвертировать все биты и прибавить 1. Пример: 127 (0111 1111) хотим получить -127. Инвертируем: 1000 0000, а теперь прибавляем 1: 1000 0001. Это и будет битовое представление -127. А -128 = 10000000. И получается 10000001 + 1 = 10000000, то есть 127 + 1 = -128.
@VeloVetal3 жыл бұрын
@@DariaEmacs не char так устроен, а процессор и называется такое представление отрицательных чисел -- дополнительный код, самый распространенный способ.
@fill_v13 жыл бұрын
Кто писал код? у всех не открывает файл? и обработка ошибок уже такими способами не пишется
@DariaEmacs3 жыл бұрын
Напишите, как вам удобно
@Ронин-и7е4 жыл бұрын
говорят в недрах линухи лежат 2 словаря (англицкий и русский) никто не знает где они?
@DariaEmacs4 жыл бұрын
Раньше лежали /usr/share/dict/ или в либреофисе? Хотя у меня лично был установлен stardict и к нему пришлось скачивать файлы отдельно.
@BobiBobObana4 жыл бұрын
xxd с русским языком не работает?
@DariaEmacs4 жыл бұрын
Работает и сам алгоритм работает, но каждая русская буква занимает больше одного байта.
@BobiBobObana4 жыл бұрын
@@DariaEmacs спасибо за ответ. Но у меня ( linux ubuntu) символ занимает 4 байта. Например номер символа 'ф' можно получить только с помощью int a = int (L'ф'); и значение равно 1092. Но! как же мне число 1092 назад привести к 'ф'? wchar_t не работает выдает число, но не символ. И кстати xxd русские буквы не показывает. unicode-table.com/ru/ засада и это тоже не работает: decltype ( L 'ы' ) d = 1092; cout
@DariaEmacs4 жыл бұрын
Почему "но"? wchar_t и занимает 4 байта). Вы же не читаете русские буквы, Вы читаете байты, поэтому алгоритму всё равно, что там внутри и как это потом интерпретирует язык. Английские буквы я использовала только для наглядности, чтобы было понятно, как это работает. Кстати, у нас с Вами разные понятия слово "работает", у меня "работает", значит, показывает байты в бинарном формате.
@BobiBobObana4 жыл бұрын
@@DariaEmacs у нас с Вами разные понятия слово "работает", у меня "работает", значит, показывает байты в бинарном формате. Если не сложно объясните вывод программы. На вход подаю текстовый файл с одной буквой 'ф' а xxd выдает 00000000: 11010001 10000100 00001010 Я ну не как не могу понять что он мне выдал? (0 х d184 0a никак не похож на (0х444 - значение буквы ф). Проблема была у меня в том, что не могу число привести к буквенному выражению. (не поверите и в сети тоже я этого не могу найти). Что бы у нас программа была юзерфрендли... Как завещал Страуструп... не должно быть у нас магических чисел.
@DariaEmacs4 жыл бұрын
Потому что у Вас кодировка utf-8. Там как раз значение буквы "ф" и есть d184. www.utf8-chartable.de/unicode-utf8-table.pl?start=1024 (Смотрите: CYRILLIC SMALL LETTER EF).
@reosfire4 жыл бұрын
да нафиг это все. я вот уже пол часа пытаюсь разгадать ребус в шапке канала(