Opened 4 years ago
Closed 4 years ago
#533 closed ожидается проверка (задача сдана)
HW #1 (BMP)
Reported by: | berbat.georgiy | Owned by: | Vasily Alferov |
---|---|---|---|
Component: | HW #1 (BMP) | Version: | 1.0 |
Keywords: | Cc: |
Description
Change History (1)
comment:1 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Note: See
TracTickets for help on using
tickets.
Очень любопытная домашка. Визуально лены похожи, но пиксели начинаются не там и вообще не те.
У меня набралось суммарно 15/30 баллов. Доделывать нельзя, потому что прошёл жёсткий дедлайн.
Стиль
Сходу ревью стиля по файлам, ниже будет корректность.
src/main.c
if (argc - 2)
? Это всё равно, чтоif (argc != 2)
. Смысла не вижу.include/bmp.h
unused
как-то странно пронумерованы. В принципе, если ты им уже дал разные длины, можно было бы и говорящие названия дать. Ну, раз уж посмотрел, сколько чего. Ноunused0
иunused01
выглядят совсем странно.__atttribute__((__packed__))
иprragma pack
— одно и то же.struct header = header_name
и похожие мне не нравятся, я несколько завис над суффиксом_name
, выглядит так, будто ты пиксели именуешь. Обычно пишут как-нибудь так:typedef struct header_tag { ... } header;
или вообше даже не именуют саму структуру:typedef struct { ... } header
. Да, это тайпдеф на анонимную структуру.header
внутриbmp
по указателю. Надо по значению.typedef struct rgb rgb_name;
, а потом везде используешьstruct rgb
— зачем тайпдеф был тогда?src/bmp.c
mcpy
— непонятное название. А ещё было бы круто, чтобы она была статической и отсутствовала в хедере.struct bmp
, внутри него выделяешь память под ещё один массив пикселей, копируешь все пиксели туда, а потом освобождаешь старый массив пикселей. Зачем? Можно же просто сохранить указатель на первый массив пикселей в структуре.W*i - W - 1 + j
?shifted
— слишком большой массив.По совокупности замечаний про стиль, думаю, тут где-то 4/10.
Корректность
Разгадка пропавших пикселей проста. В одном месте при чтении ты забыл, что нумеруешь числа с единицы и пронумеровал с нуля.
Ты реализовал поворот Лены и даже сделал что-то про паддинг. Тем не менее, полностью это не работает даже по модулю исправления той ошибки: вырезание произвольных областей из Лены приводит к нееожиданному и весьма странному результату (например,
20 20 77 99
).По совокупности тут можно поставить примерно 11/20 баллов за корректность: на 10 надо было сделать Лену с тривиальным тестом, а у тебя сделано чуть больше.