Summary
На лекции мы разобрали типичные случаи, трудные для тех, кто раньше не писал на Си. В Си есть явное понятие адреса; это прекрасно, но есть и сложности. Главный инструмент для понимания того, что происходит - рисовать детальную структуру памяти, с обозначением на ней всех массивов, переменных и их адресов. Не ленитесь рисовать! Абсолютно все при этом станет понятно, и код?кот станет белым и пушистым.
Домашнее задание
1. Реализуйте "с нуля" эквиваленты стандартных функций:
- strlen
- strncpy
- strncat
- strstr
- strtok
2. [Сортировка Евгения Онегина.] А.С. Пушкин так хорошо описал быт и нравы современной ему жизни в поэме "Евгений Онегин", что В. Г. Белинский назвал ее "энциклопедией русской жизни". Но в энциклопедии все должно быть отсортировано по алфавиту; гуманитарий Пушкин этого не знал. Помогите великому поэту сделать из поэмы настоящую энциклопедию, напишите эффективную по времени и памяти программу, которая читает стихотворные строчки из файла, сортирует их (игнорируя знаки препинания) и выводит в другой файл. В случае проблем с русским языком, используйте пьесы Шекспира. Пусть ему тоже мало не покажется.
3. [В помощь начинающему поэту.] Отсортируйте строки, как в задаче 4, но сравнивайте, начиная с концов строк - получится словарь рифм. Постарайтесь обойтись вообще без strlen(), в данном случае это возможно.
4. Объедините задачи 4 и 5, выведите сначала в один файл оригинальный текст поэмы, в другой - отсортированный текст, в третий - словарь рифм.
5*. [Бредогенератор.] Используя словарь рифм и случайно комбинируя рифмующиеся строки, напишите бредогенератор на основе "Евгения Онегина" или пьес Шекспира. Учтите, что разные строки одной строфы имеют разное чередование слогов. Пример работы такого бредогенератора см.
здесь.
***
Спасибо за фидбек! "Байки" никуда не денешь - это форма передачи опыта. Можно просто сказать, "не пиши в указатель, равный нулю", но это забудется, а можно упомянуть, как перед комиссией с грохотом упала программа и что после этого было. :) Про объяснение легких вопросов - буду уменьшать, но состав у нас очень разнородный, что для одного легко, для другого пока сложно. Но будем выравниваться, конечно. По ревью кода - выстраивайтесь в очередь, плиз, исходя из приоритетов кому пораньше / кому попозже+поподробней.
Удачи, и May the Source be with you! :)