Pavel Dvorkin пишет: > > Тьфу на Вас еще раз! Какой к богу велосипед ? Создание массива под > type**, хоть прямоугольного, хоть треугольного, хоть ступенчатого — один > из банальных примеров любого приличного учебника по С (даже не С++)
Скорее из неприличного.
> > type** p = new type[n]; > for ( i = 0; i < n; i++) > p[i] = new type[m];
А вот за такой код я ругаюсь и очень сильно. Кстати на собеседовании,
если чел так напишет и не объяснит проблемы и как сними бороться, то он
проходит мимо.
А вот написать свой велосипед для матриц получше бустовского, я таких
людей почти не знаю. И сам бы взялся изобретать, если бы очень сильно
попросили.
Pavel Dvorkin пишет: > > E>IMHO, вообще С++ не самый удачный язык для обучения программированию. > Лично мне ближе PASCAL, > > +5. Мы и начинаем с Паскаля, на 1 курсе. C/C++ на 2-м.
Знаешь, раньше в БГУ на ФПМ начинали с ASM, затем Fortran, затем PL1.
Сейчас, не знаю, как, но студенты стали совсем дохлые, наверное у вас и
у них подходы одинаковые теперь.
ilvi пишет: > > > Скоро можно будет на собеседовании у разработчика по с++ с 5 летним и > более стажем задавать вопрос на засыпку, определяющий уровень ЗП: > как задать матрицу произвольного размера без буста
Потому, что разработчик с таким стажем уже решает задачи, а не
изобретает велосипеды с квадратными колесами.
Здравствуйте, Pavel Dvorkin, Вы писали:
SC>>Даже во времена раннего С++ для работы с матрицами не изобретали велосипед, а использовали BLAS. PD>Тьфу на Вас еще раз!
Не надо на меня плевать, во первых все равно не доплюнешь, во-вторых, есть вероятность самому оказаться обплеванным.
>>Реализацией которого(сюрприз, сюрприз) и является boost::ublas. Так что, не будь это лабораторной работой, это было бы вполне оправдано хотя бы из-за того, что используется де-факто стандартный интерфейс.
PD>Ай-яй-яй. Уж никак без каких-то стандартных интерфейсов не обойтись, когда можно 3 строки написать! Скоро будем стандартные интерфейсы искать для реализации условного оператора, если так дальше пойдет. Совсем уж разучились простые вещи делать!
Если бы ты соизволил все таки прочитать мое сообщение(см. выделенное), вместо того, чтобы плеваться, было бы гораздо проще.
Библиотеки вообще созданы, чтобы облегчать программирование и реиспользовать удачные решения. И велосипед нужно изобретать когда точно уверен, что сделаешь лучше(хотя бы по нескольким значимым признакам), а не тогда, когда начинается обострение синдрома "not invented here". И даже в этом случае имеет смысл дизайн своего велосипеда делать как можно более похожим на общепринятый, если это конечно не сказывается на потребительских качествах.
А за код, который ты привел в неучебном проекте, особенно если его разрабатывает более 1 человека — казнь через рефакторинг.
Здравствуйте, Sergey Chadov, Вы писали:
SC>А за код, который ты привел в неучебном проекте, особенно если его разрабатывает более 1 человека — казнь через рефакторинг.
мне всегда было интересно: почему за простой код с голыми указателями казнят, а за код с кучей шаблонов и парой десятков слоёв абстракции нет?.
neFormal пишет: > > мне всегда было интересно: почему за простой код с голыми указателями > казнят, а за код с кучей шаблонов и парой десятков слоёв абстракции нет?.
Потому что 99 человек из 100, которые используют голые указатели
обрушивают прогу раньше или позже. Такова жизнь. Я не видел еще ни
одного человека, который учел все что можно при работе с голыми указателями.
Например:
x* = new X...
y* = new Y...
...
delete... x;
delete... y;
А шаблоны и слои — это уже к архитектору проекта, часто они нужны, часто
излишни. Могут облегчать понимание кода, могут усложнять. Но не
гарантируют падучесть, как в случае с голыми указателями.
Здравствуйте, neFormal, Вы писали:
SC>>А за код, который ты привел в неучебном проекте, особенно если его разрабатывает более 1 человека — казнь через рефакторинг.
F>мне всегда было интересно: почему за простой код с голыми указателями казнят, а за код с кучей шаблонов и парой десятков слоёв абстракции нет?.
Потому что ошибка в хитрозавернутом шаблоне обычно проявляется либо на этапе компиляции, либо при первом же тестировании.
А ошибка в использовании голых указателей имеет тенденцию проявляться у конечных пользователей. Более того, если код с голыми указателями будет редактировать человек, который не досканально знает его особенности(ну или автор через год-другой), то даже внеся корректное само по себе изменение он рискует словить крайне труднообнаружимый баг, который будет проявляться совсем в другом месте
А казалось бы лишние уровни абстракции имеют тенденцию пригождаться когда у заказчика просыпается фантазия
Здравствуйте, Sergey Chadov, Вы писали:
SC>Здравствуйте, neFormal, Вы писали:
SC>>>А за код, который ты привел в неучебном проекте, особенно если его разрабатывает более 1 человека — казнь через рефакторинг.
F>>мне всегда было интересно: почему за простой код с голыми указателями казнят, а за код с кучей шаблонов и парой десятков слоёв абстракции нет?.
SC>Потому что ошибка в хитрозавернутом шаблоне обычно проявляется либо на этапе компиляции, либо при первом же тестировании. SC>А ошибка в использовании голых указателей имеет тенденцию проявляться у конечных пользователей. Более того, если код с голыми указателями будет редактировать человек, который не досканально знает его особенности(ну или автор через год-другой), то даже внеся корректное само по себе изменение он рискует словить крайне труднообнаружимый баг, который будет проявляться совсем в другом месте SC>А казалось бы лишние уровни абстракции имеют тенденцию пригождаться когда у заказчика просыпается фантазия
Все замечательно, только весь исходный код программы из приведенного выше задания занимает несколько десяток строк, и весь этот код в дальнейшем летит в мусорную корзину, он учебный, других нагрузок такие задания не несут. От человека, которому задают такие задания требую только понимания того, как работают динамические массивы а не знания библиотек и я когда-то учился СИ по книжкам, программирование это не первая моя профессия, и мне также было очень важно знать и понимать до автоматизма как динамически выделяется и высвобождается память под массивы различной размерности, прикинь на секундочку, если бы вместо очевидных и необходимых вещей, которые лежат в основе языка, в книгах давались бы советы прикрутить BLAS, буста, Blitz или LAPACK и не парить себе мозги всякой ерундой, я бы выкинул такую книжку за откровенную профанацию не задумываясь, именно этим вы сейчас и занимаетесь.
P>Все замечательно, только весь исходный код программы из приведенного выше задания занимает несколько десяток строк, и весь этот код в дальнейшем летит в мусорную корзину, он учебный, других нагрузок такие задания не несут. От человека, которому задают такие задания требую только понимания того, как работают динамические массивы а не знания библиотек и я когда-то учился СИ по книжкам, программирование это не первая моя профессия, и мне также было очень важно знать и понимать до автоматизма как динамически выделяется и высвобождается память под массивы различной размерности, прикинь на секундочку, если бы вместо очевидных и необходимых вещей, которые лежат в основе языка, в книгах давались бы советы прикрутить BLAS, буста, Blitz или LAPACK и не парить себе мозги всякой ерундой, я бы выкинул такую книжку за откровенную профанацию не задумываясь, именно этим вы сейчас и занимаетесь.
А-а-а-а!!! Ну ведь я же совершенно явно написал "если бы это не была лабораторная, то..."
А задачи, с которых начался топик, вообще никакого динамического выделения памяти не требуют, там судя по постановке вопроса вполне прокатит double[N][M]
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Не угадал. Я их Win32 учу. А там нет классов
Тогда и аллокации многомерных Сишных массивов нет наверное, и матрицы транспонировать тоже не надо?..
PD>Можно, но это кончится тем. что они тот код, что я привел, написать не смогут, и char* от char** отличать не будут...
Почему?
E>>IMHO, вообще С++ не самый удачный язык для обучения программированию. Лично мне ближе PASCAL, PD>+5. Мы и начинаем с Паскаля, на 1 курсе. C/C++ на 2-м.
Ну так либо ваши студенты должны ко второму курсу уже сами понимать, как матрицу транспонировать, либо рано вы с паскаля ушли...
Тут-то топикстартер не знает как матрицу транспонировать, а не как массив многомерный юзать...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, Pavel Dvorkin, Вы писали:
PD>>Не угадал. Я их Win32 учу. А там нет классов E>Тогда и аллокации многомерных Сишных массивов нет наверное, и матрицы транспонировать тоже не надо?..
Это на 2 курсе, до меня.
PD>>Можно, но это кончится тем. что они тот код, что я привел, написать не смогут, и char* от char** отличать не будут... E>Почему?
Потому что привыкнут искать класс там, где ручками можно за 30 секунд написать, и отвыкнут писать без классов.
E>Ну так либо ваши студенты должны ко второму курсу уже сами понимать, как матрицу транспонировать, либо рано вы с паскаля ушли...
Они и понимают.
E>Тут-то топикстартер не знает как матрицу транспонировать, а не как массив многомерный юзать...
Здравствуйте, OdesitVadim, Вы писали:
OV>Здравствуйте, Erop, Вы писали:
OV>[scip] E>>Ну я в целом согласен, со всем тобой написанным, но, IMHO, если человек не умеет транспонировать матрицу, то ему рано учиться программировать на С, надо сначала просто "учиться программировать"... OV>Если человек не понимает, что такое транспонирование матрицы, желательно вначале вспомнить, а что это вообще такое, транспонировать пару матриц на листике, понять, как меняются индексы. И только потом, когда человек будет хорошо понимать, что такое транспонирование (а не просто цитировать по памяти куски конспекта и известных людей), можно переходить к формальному алгоритму, пусть даже записанному на языке "это туда, а это сюда" (для некоторых людей так просто может быть понятее)
Угу. До конца жизни не забуду, наверное, как я сам в молодости впервые писал транспонирование матрицы. Теорию я знал совершенно верно, и написал в соответствии с теорией. Программа работала, но почему-то матрица какой была, такой и осталась. Вот примерный код (писалось, конечно, не на С)
Здравствуйте, Sni4ok, Вы писали: S>в каком месте автор топика указал, что это является учебным заданием?
Достаточно внимательно прочитать самый первый пост. Там только фразы "мне задали в школе/институте" не хватает. Но судя по характеру сообщения, так оно и есть.
Здравствуйте, OdesitVadim, Вы писали:
OV>Достаточно внимательно прочитать самый первый пост. Там только фразы "мне задали в школе/институте" не хватает. Но судя по характеру сообщения, так оно и есть.
Здравствуйте, Sni4ok, Вы писали:
S>Здравствуйте, OdesitVadim, Вы писали:
OV>>Достаточно внимательно прочитать самый первый пост. Там только фразы "мне задали в школе/институте" не хватает. Но судя по характеру сообщения, так оно и есть.
S>это ваши догадки
уж нет. я сколько навиделся вопросов студентов/школьников, что обычно без труда вижу. Так что поставленный минус можете защитать себе
В качестве аргрументов за то, что это школьник/студент
— вопросы очень простые, базовые я бы сказал
— вопросы пронумерованы и по порядку возрастания сложности
и ключевая фраза