Opened 5 years ago

Closed 4 years ago

#487 closed ожидается проверка (задача сдана)

HW_01

Reported by: Jura Khudyakov Owned by: Sokolov Viacheslav
Component: HW #1 (BMP) Version: 3.0
Keywords: Cc:

Description


Change History (7)

comment:1 Changed 5 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

Makefile:
не tmyx, а tmux. А еще screen есть.
remind Sokolov about linking libraries etc - вроде бы done
повторный запуск make должен ничего не делать, если ничего не изменилось

Про exit напишу на Вики

При повороте нужно пересчитать biXPelsPerMeter и biYPelsPerMeter, а также biSizeImage при crop и rotate.

Что можно сделать лучше:
больше пробелов

 31     for (int i = 0;i < nbytes;++i)                                                                   
 32         v16 = (v16 << 8) + v8[nbytes-1-i];   

-->

 31     for (int i = 0; i < nbytes; ++i)                                                                   
 32         v16 = (v16 << 8) | v8[nbytes - 1 - i];   

расставить const

в функциях bXtoY специфировать endianness в названии

В целом хорошая первая попытка.

comment:2 Changed 5 years ago by Sokolov Viacheslav

Да, можно же вот так константы задавать 0x4D42

comment:3 Changed 4 years ago by Jura Khudyakov

Type: ожидаются исправленияожидается проверка
Version: 1.02.0

comment:4 Changed 4 years ago by Jura Khudyakov

Исправил указанное, сделал задание на допбаллы
починил Makefile, правда нормальное разделение на режимы сборки сделаю позже, пока что не успеваю
погуглил про exit - говорят, он всё делает корректно. Жду пояснений на вики
biXPelsPerMeter не меняю, обсудили
подобавлял констант и пробелов, надеюсь, стало лучше в этом плане
убрал выполненные пункты в todo)

Last edited 4 years ago by Jura Khudyakov (previous) (diff)

comment:5 Changed 4 years ago by Sokolov Viacheslav

Type: ожидается проверкаожидаются исправления

Многострочности удобно достигать вот так

 printf("usage: \n"
     "hw_01 crop-rotate ‹in-bmp› ‹out-bmp› ‹x› ‹y› ‹w› ‹h›\n"
     "hw_01 insert ‹in-bmp› ‹out-bmp› ‹key-txt› ‹msg-txt›\n"
     "hw_01 extract ‹in-bmp› ‹key-txt› ‹msg-txt›\n");

строковые литералы конкатенируются

biSizeImage нужно обновлять в recount

55 if (65 <= c && c < 65 + 26)
кмк, лучше 'A' <= c && c <= 'Z'

0+26 это 26

fscanf возвращает int

&= 0 это все равно что просто =0

в insert должно быть условие while(read_next_chr(...) == 0),
да и вообще поаккуратнее с кодами возврата

insert и extract выглядят крайне похоже, может быть, можно как-то декомпозировать, чтобы меньше было дублирований?

может быть удобно использовать short-circuit evaluation, чтобы уменьшить количество if-else и упростить работу с кодами возврата

сейчас не смотрел, везде ли происходят освобождения, если что-то пошло не так

comment:6 Changed 4 years ago by Jura Khudyakov

Type: ожидаются исправленияожидается проверка
Version: 2.03.0

Да, с строками удобно, поправил
теперь обновляю biSizeImage
Да, пожалуй, с буквами читабельнее
Поправил тип read-а на int
Да, это вообще был баг: вместо зануления бита, он занулял байт. Теперь всё корректно
С кодами возврата всё было плохо, согласен, многие из них никуда не возвращались. Всё пофиксил
Вынес общие части (открытие файлов и обработка координат) в отдельные функции, остальные либо слишком отличаются (и короткие, к тому же), либо нет смысла выносить (например, обработку ошибок)
Сделал поменьше вложенных if-ов, стало несколько читабельнее, окей
С освобождениями вроде всё хорошо, так как выделяется только один раз и освобождается всегда, так как если происходит выход, то перед ним обязательно стоит free_data. Внезапных выходов из других мест не случается вообще, всё return-ится в main

comment:7 Changed 4 years ago by Sokolov Viacheslav

Resolution: задача сдана
Status: assignedclosed

Не везде есть проверки на not null pointer

В alloc_data можно было бы использовать free_data

276 image->biByteHeight = image->biHeight * 3 + (4 - image->biHeight*3 % 4)%4;
дублируется код расчета alignment-а + непонятно, зачем он вообще в этом месте

В тестовом файле может быть еще перевод строки

Note: See TracTickets for help on using tickets.