Dyzzet|
C++ Data Science Алгоритмы Темы · Блог · YouTube · Telegram
Колонками
Постранично
9 апреля 2021
Быстрая сортировка. Интерактивная анимация
Авторы: Dyzzet, immsmoa

Быстрая сортировка (quicksort) иначе называется сортировкой Хоара. Её идея предельно проста: в массиве выбирают некий опорный элемент (pivot), разбивают массив на две части: слева элементы меньше опорного, справа — больше. Затем процесс рекурсивно повторяется для левой и правой частей массива.

Существуют разные модификации быстрой сортировки и способы её реализации. В данном варианте в функцию передаётся массив и индексы крайних элементов: quickSort(data, 0, n- 1);. В другом варианте можно было бы передавать адрес начала массива и его размер: quickSort(data, n);.

Обратим внимание на два фрагмента из кода, который расположен далее. В каждом рекурсивном вызове водятся l = left; и r = right;, они хранят индексы крайнего левого и крайнего правого элементов.

Читать далее →
1 апреля 2021
Визуализация рекурсивных алгоритмов сортировки

Данный материал представляет собой обзор и анализ того, как в литературе и в цифровых ресурсах изображают рекурсивные сортировки — главным образом сортировку слиянием и быструю сортировку (сортировку Хоара).

Анализ литературы

Анализ литературы затруднён тем, что в некоторых книгах вовсе нет изображений, в иных — одна сортировка может сопровождаться иллюстрациями, а другая нет. Классики в части быстрой сортировки показывают прямой ход рекурсии [Ахо, 236]. Обратный ход довольно тривиален и не подразумевает каких-то манипуляций с данными.

Читать далее →
13 марта 2021
Обзоры книг по C++. Учебная литература. Часть IV

Виктор Штерн. Основы C++: методы программной инженерии

880 страниц. Лори, 2003

Victor Shtern. Core C++. A Software Engineering Approach. Prentice Hall, 2000

Название «Core C++» правильнее было бы перевести не как «Основы C++», а как «ядро языка», то есть язык без стандартной библиотеки: отдельной такой главы действительно нет.

Книга с претензией. Первая тема первой главы «Объектно-ориентированный подход» — «Истоки кризиса программного обеспечения». То есть читателя ждут эссе о методах управления разработкой.

Дальше идёт типичное описание C++98, но с парой оговорок. Автор демонстрирует связный список. Но проблема в том, что функции появляются лишь в следующей главе. То есть вся работа со «связным списком» была прямо в функции main().

Читать далее →
9 марта 2021
Обзоры книг по C++. Учебная литература. Часть III. Книги Герберта Шилдта

А. Фридман, Л. Кландер, М. Михаэлис, Г. Шилдт. C/C++. Архив программ (2001)

В этой части обсуждаются только книги Герберта Шилдта на русском языке. У этого автора также есть книги по другим языкам — C, C♯ и Java. Герберт Шилдт был членом комитета ANSI/ISO по стандартизации языка C++.

Герберт Шилдт. Самоучитель C++

688 страниц. БХВ, 2006

Herbert Schildt. Teach Yourself C++. McGraw-Hill, 1998

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

По какой-то причине шаблоны и исключения попали в одну главу. Ещё более причудливое сочетание — «Пространства имён и другие темы» (операторы преобразования, статические и константные члены класса, дополнительный материал о конструкторах, спецификаторы сборки, ассемблерные вставки, массивы в качестве объектов ввода-вывода).

Описывается стандарт C++98, изложение недостаточно глубокое.

Приложения: отличия C и C++ (одна страница), ответы и решения (больше 180 страниц), список английских технических терминов, описание дискеты.

Читать далее →
2 марта 2021
«Безумные стандарты, кошмарная библиотека»

Редкий случай успешного краудфандинга в сфере компьютерной литературы — книги Андрея Викторовича Столярова. Больше того, автор публикует их на своём сайте для свободного пользования. Одна из них полностью посвящена языку C++. Однако каждое издание сопровождается валом критики. Давайте посмотрим.

Андрей Викторович Столяров. Введение в язык Си++: учебное пособие

156 страниц. МАКС Пресс, 2020

Книга на сайте автора

Кафедра алгоритмических языков ВМК МГУ

Кафедра автоматики и телемеханики Пермского политехнического университета

Кафедра информатики Оренбургского государственного университета

«Подготовительная программа по программированию на C/C++» в рамках «Технопарка» МГТУ им. Н. Э. Баумана и Mail.ru Group

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

Читателей ждут такие главы: «Введение», «Методы, объекты и защита», «Абстрактные типы данных в Си++», «Обработка исключительных ситуаций», «Наследование и полиморфизм», «Шаблоны» и «Что дальше».

Предисловие здесь — диатриба, порицание и осуждение вообще всех стандартов, даже C++98.

«За несколько лет, прошедших между третьим и четвёртым изданием, мир ощутимо изменился: группа международных террористов, по недоразумению называющихся комитетом по стандартизации Си++, развернула весьма бурную и эффективную деятельность по окончательному уничтожению этого языка. Вышедшие последовательно „стандарты“ C++11, C++14 и, наконец, C++17 не переставали удивлять публику: каждый раз казалось, что более мрачного и безумного извращения придумать уже нельзя, и каждый раз выход очередного „стандарта“ наглядно демонстрировал, что всё возможно; ожидающийся C++20 как будто специально задуман как наглядное подтверждение, что предела этому процессу нет, разве что Си++ всё-таки окочурится. Если под „языком C++“ понимать C++17 или тем паче C++20, то о применении такого инструмента на практике не может идти никакой речи, т. е. с языком Си++ следует попрощаться, устроить торжественные похороны и поискать альтернативу; впрочем, то же самое можно сказать про все его „стандарты“, начиная с самого первого, принятого в 1998 году — строго говоря, язык C++ как уникальное явление был уничтожен именно тогда».

Достаётся и стандартной библиотеке шаблонов (STL).

Читать далее →
15 февраля 2021
Нужно ли учить C перед C++

Учить С++ можно по-разному. Тезис, что учить C перед C++ вовсе не обязательно, верный. Эти языки эволюционировали отдельно, хотя и влияли друг на друга. Но как можно игнорировать факт, что C++ основан на C и вбирает в себя значительную его часть? Попытаемся проанализировать проблему с точки зрения целей такого обучения и методов их достижения.

Посмотрим выступление Кейт Грегори на конференции, почитаем учебный план «Яндекса» и статью Бьерна Страуструпа, создателя языка C++.

Выступление Кейт Грегори

Часовое выступление Кейт Грегори на CppCon’е в 2015 «Перестаньте преподавать C» наделало шума. На одном из слайдов (он скрыт, его нет на видео, но слайды можно скачать и посмотреть) представлено резюме доклада:

Слайды

«На сегодняшний день большинство людей, которые собираются помочь другим изучать C++, начинают с „введения в C“. И я верю, что это вносит большой вклад в то, что в мире появляется много плохого кода на C++. В последние годы я преподаю C++ (и даю рекомендации тем, кто учат его самостоятельно) совершенно по-другому. Никаких строк типа char*, strlen, strcmp, strcpy, printf и обычных массивов []. Указатели вводятся очень поздно. Ссылки идут до указателей, полиморфизм показывается на ссылках, а не указателях. Умные указатели, подобно и обычным „сырым указателям“ (как результат вызова new или операции &), оставлены до того времени, когда они понадобятся. Стандартная библиотека как можно раньше, и современный код на C++ с первого урока».

Читать далее →
7 февраля 2021
Обзоры книг по C++. Учебная литература. Часть II

Стенли Б. Липпман, Жози Лажойе, Барбара Э. Му. Язык программирования C++. Базовый курс

1120 страниц. Вильямс, 2014

Stanley B. Lippman, Josée Lajoie, Barbara E. Moo. C++ Primer. Addison-Wesley, 2013

Стенли Липпман и Барбара Му приложили руку к созданию первых версий компилятора C++ Cfront в 1980-х (как пишет Бьерн Страуструп в книге «Дизайн и эволюция C++», глава 3.3.4).

Читать далее →
2 февраля 2021
Бизнес-модель журнала о C++ и книжного изд(ев)ательства

В мире изданы десятки и десятки книг по языку C++. Каждый день в интернете появляются всё новые и новые статьи, но сегодня поговорим об одном любопытном печатном журнале и книгах. Их автор — Валерий Алексеевич Жарков, доктор технических наук. Валерий Алексеевич написал добрых два десятка книг только по программированию («Visual C++ на практике», «Visual C♯ .NET в науке и технике», «Самоучитель Жаркова по Visual Studio .NET: Visual Basic .NET, Visual C♯ .NET, Visual C++ .NET, Visual J♯ .NET», «Самоучитель Жаркова по анимации и мультипликации в Visual C♯ .NET 2003», «DirectX 10 под управлением Visual C♯ 2007 для карманных компьютеров в трёхмерных приложениях и играх» и другие) и ещё какое-то количество справочников по другим темам.

Журнал

Называется «Программирование на C♯, Basic, C++ и HLSL в Visual Studio, DirectX и XNA». Место языка Basic в современном мире под большим вопросом, HLSL — язык программирования шейдеров, а XNA — фреймворк для разработки игр (.NET).

Вообще-то правильнее было бы говорить о журналах. Два других — это «Кузнечно-штамповочное производство» и «Компьютерное проектирование раскроя и обработки материалов».

Читать далее →
3 января 2021
Обзоры книг по C++. Учебная литература. Часть I

Ален И. Голуб. Верёвка достаточной длины, чтобы... выстрелить себе в ногу. Правила программирования на Си и Си++

272 страницы. Бином, 2001

Allen I. Holub. Enough Rope to Shoot Yourself in the Foot. Rules for C and C++ Programming. McGraw–Hill, 1995

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

Содержание: процесс проектирования, общие проблемы разработки программ, форматирование и документация, имена и идентификаторы, правила программирования, препроцессор, правила, относящиеся к языку C, правила программирования на C++ (проектирование и реализация, проблемы сцепления, ссылки; конструкторы, деструкторы и operator=(); виртуальные функции, перегрузка, управление памятью, шаблоны, исключения).

Высказывание «C позволяет очень просто выстрелить себе в ногу. На C++ сделать это сложнее, но если получится, оторвёт всю ногу» (C makes it easy to shoot yourself in the foot; C++ makes it harder but when you do, it blows away your whole leg) приписывают Бьерну Страуструпу.

Харви Дейтел, Пол Дейтел. Как программировать на C++

1456 страниц. Бином, 2008

Harvey Deitel, Paul Deitel. C++: How to Program. Prentice Hall, 2005

Авторы также выпускают книги по языкам C и C♯‎. Книга вполне подойдёт для новичков, но с оговорками. По году публикации понятно, что что-то новее стандарта C++03 искать не нужно. Однако первая же программа, «Hello, world», использует заголовочный файл <iostream.h> ещё из достандартного C++, cout из глобального пространства имён и пропускает тип возвращаемого значения функции main() (просто main() вместо int main()).

// Первая программа на C++
#include <iostream.h>
 
main()
{
    cout << "Добро пожаловать в C++\n";
 
    return 0;   //показывает, что программа успешно окончена
}

Читать далее →
24 декабря 2020
Обзоры книг по C++. Книги Бьерна Страуструпа

Бьерн Страуструп — автор языка C++. Варианты имени: Бьярне, Бьёрн.

Язык программирования C++. Специальное издание

1136 страниц. Бином, 2017

Bjarne Stroustrup. The C++ Programming Language. Special Edition. Addison-Wesley, 2000

Описан стандарт C++98. Автор время от времени отвлекается на эссе о том, как проектировался язык. Один небольшой раздел так и называется — «Философские замечания». Изложение весьма непростое, нелинейное. К концу первой главы, не самой короткой, автор так и не приступает к системному описанию языка, но уже даёт конкретные советы:

«Не используйте встраиваемые функции, разве что для значительной оптимизации».

Читать далее →
9 8 7
6
5 4 3 2 1
© MMXI—MMXXV. RSS
 Boosty
Светлая тема / тёмная тема