| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Задача по массивам |
| Автор: Xenon 13.5.2006, 23:32 | ||
Вообщем задача такова ... Надо было массив заполнить случайными числами, затем найти все столбцы, в которых есть нуль и создать из этих столбцов новый массив ...
|
| Автор: bsa 14.5.2006, 00:48 | ||
А зачем в несколько проходов?!?
Данная программа при выводе путает строки со столбцами (выводит транспонированную матрицу). Но на ее работу это не сказывается. |
| Автор: Voldemar2004 14.5.2006, 11:54 | ||
XenonSk, используй динамический массив.[quote] |
| Автор: Xenon 14.5.2006, 12:01 | ||
| bsa Это ты на С что ли написал? Или просто привычка писать define? Voldemar2004 Чего-то я не совсем допер ...
Это ты что делаешь? Ну понятно, что лучше заинклудить vector и с его помощью сделать, но я хотел без STL |
| Автор: Xenon 14.5.2006, 12:52 | ||
Если с вектором, то я думал что-то типа этого ... Но оно тоже не работает
|
| Автор: bsa 14.5.2006, 13:11 |
| Я тебе дал 100% рабочий вариант. Сам проверил перед публикацией. Что тебя не устраивает? Ты слишком сильно усложнил свой алгоритм. Посмотри как у меня. Имхо, ни одной лишней операции. Про #define я что-то не понял. Почему в С++ его не нужно использовать? В #include кавычки означают "подключение из текущей директории", а угловые скобки "подключение стандартных". Таким образом, в кавычках нужно задавать только то, что сам написал. В твоем примере я заметил ошибку в выводе надо выводить не arrnew[i*j], а arrnew[i*arrnew.size()/HEIGHT + j]. |
| Автор: Xenon 14.5.2006, 13:16 |
| bsa Хм, а мне твой посложнее показался Блин, запустил ... хрень выводиться какая-то ... Если поменять то, что ты предложил. |
| Автор: MAKCim 14.5.2006, 16:10 | ||||
в данном случае без макросов можно обойтись |
| Автор: bsa 14.5.2006, 18:37 |
| MAKCim Хорошо, исправлюсь. XenonSk Зато работает. Эту ошибку я нашел при беглом просмотре твоей программы. Не удивлюсь, если есть еще ошибки. |
| Автор: Voldemar2004 14.5.2006, 18:37 | ||
|
| Автор: bsa 14.5.2006, 18:39 |
| Вместо cout<<"\n" надо использовать cout<<endl - нагляднее новичкам. |
| Автор: Xenon 14.5.2006, 19:08 |
| if(j==m-1) Я вот этого не понял |
| Автор: bsa 14.5.2006, 19:22 |
| Это звучит так, если j достиг последнего значения (конца строки), то... |
| Автор: Xenon 14.5.2006, 20:00 |
| а, тогда понятно, а если рассматривать именно ту реализацию последнюю, что я предложил ... Где там ошибка? Просто хочу понять, где я промахнулся. Альтернативная реализация - хорошо, но интересно где я неправильно мыслю |
| Автор: Xenon 16.5.2006, 17:13 |
| Не брезгуйте пользоваться тегами [code=cpp]['/code] |
| Автор: ffldove 16.5.2006, 17:35 |
| сори срочняк надо а на форуме у вас в первый раз |
| Автор: bsa 16.5.2006, 18:03 |
| XenonSk, ты в цикле (втором) перепутал j и i. В итоге, вместо arr[width][height] ты работаешь с arr[height][width]. В этом основная ошибка. Там где я тебе раньше сказал заменить - надо заменить на newarr.size()/HEIGHT. А также, имей в виду, что по умолчанию у тебя в начале программы матрица выводится в транспонированном виде (чтобы сделать наоборот нужно строки с for поменять местами). И вообще, учись сам искать ошибки - искать свои ошибки сложно, а чужие - в двойне! |
| Автор: Xenon 16.5.2006, 22:15 |
| bsa Я просто в безнадеге выложил ... не получалось и хоть ты тресни, хотя на Паскале такую же штуку сделал и она работа ... В любом случае спасибо! |