[cdev] задача 4, 135 гр.
Grigoriy A. Sitkarev
sitkarev на komitex.ru
Вс Дек 5 20:17:31 MSK 2010
Добрый вечер всем.
Перепроверьте вычисления в ф-ии parray_delete_nth(), там где вы
подсчитываете сколько байт вам нужно переместить. Нужно помнить что в Си
для арифметических операций приоритеты такие же как в алгебре, т.е. '+'
и '-' имеют приоритет ниже чем у '/' и '*'. Порядок всегда можно
изменить скобками круглыми (как в алгебре).
В parray_delete() то же самое замечание.
В parray_delete_range() проверка
if (count >= pa->nelems - nth)
не верна, т.к. здесь надо было проверять на строго "больше".
Предположим, в массиве есть 4-е элемента, а пользователь захотел удалить
начиная нулевого индекса 4-е элемента:
parray_delete(pa, 0, 4);
(4 >= 4 - 0) тогда будет истиной, хотя count вмещается в допустимые пределы.
Код там можно было проще написать, обрезав count до допустимого
количества, если оно было больше, и делать memmove() дальше одинаково
для обеих случаев.
Всё остальное вроде бы работает, и поиск и сортировка и обход. Вам
осталось совсем чуть-чуть.
--
Г.А.
Ксения Оботурова пишет:
> Григорий Александрович, проверьте пожалуйста
>
Подробная информация о списке рассылки cdev