![]() |
|
Модераторы: bsa |
![]()
|
|
| odys |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 9.11.2008 Репутация: нет Всего: нет |
Должна быть программа, моделирующая движение черепахи по доске (table [size][size])
В ней есть функция bool m_a_c( int *array, int direction, int step, int *z, int *f, int size ) Функция принимает, и имеет возможность изменять массив, также принимает текущее направление движения, шаг перехода, текущую координату черепахи по оси z и f а также размер поля Функция должна изменять массив array в случае если по какой-то клетки прошла черепаха со значения 0 на 1, также у нее есть ряд других заданий, но вопрос не в этом. Как правильно объявить указатель на двухмерный массив в шаблоне функции (что бы функция могла изменять данные)? Пытался сделать это по аналогии с учебным вариантом, но там одномерный массив (выглядело так void bubbleSort (int *, const int)) И еще можно ли с указателем на массив работать точно так же, как с массивом следующая строка хода
Вот код самой программы (она работает, закоментарена та часть, по которой у меня вопросы) касательно функций (__int64 _func_num_(const string & value); __int64 _function_(const string & value, bool *);) - кратко, они проверяют является ли введеное число формата 5.12 и вытягивает оттуда 12, либо это просто 3, тогда 3 - остается. Подробнее здесь http://forum.vingrad.ru/forum/topic-236585...tification.html Вот сам код.
Ошибки выдает следующие [C++ Error] Maybe_last.cpp(81): E2034 Cannot convert 'int ( *)[20]' to 'int *' [C++ Error] Maybe_last.cpp(81): E2340 Type mismatch in parameter 1 (wanted 'int *', got 'int ( *)[20]') Хотя вероятно появятся еще. Можно не указывать на логические недочеты, типа 5.12 и 3..12 как команды восприймуться одинаково, а также, то что если в массиве часто перемещать черепаху, он заполниться еденицами и траектория не будет понятной).... Сейчас хочется, что бы оно хотя бы работало если правильно использовать. Хотя если будут советы по оптимизации того, что уже работает- буду рад услышать) |
||||
|
|||||
| kurtis |
|
||||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 10.8.2007 Репутация: нет Всего: нет |
Прошу прощения за злой оффтоп, но у вас в коде куча потенциальных ошибок.
1. Зачем нужны эти функции ?
2.Применяйте форматирование текста, ваш код сложно читать, человек который хочет вам помочь, не привык к вашей записи кода, и возможно ему в этом стоит помочь. Что лучше читается?
3. Что такое __int64 ? Я конечно догадуюсь что это 64-х битная челочисленая переменная, но мой компилятор не обладает такой интуицией. Возможно стоит использовать стандартные типа, которые не привязаны к конкретной реализации компилятора? Мне например лень искать и заменять __int64 на что-то, перевариваемое моим компилятором. 4. В функции m_a_c () у вас потерялась одна скобка, т.е. самый первый цикл if() оказался открытым. 5. Как понимать вот такую вот запись?
К чему относится else, к for или таки к if ? 7. У вас героически совмещается передача параметра по ссылке и по указателю, причем я не вижу закономерности. 8. Щас попробую высказатся по теме =) Зачем вам передавать ПОЛЕ? Сделайте его глобальным, и не мучайтесь. Все-равно у вас вся программа будет плясать вокруг этого поля. Вынесите его из main() и все ваши функции автоматически получат к нему доступ (т.е. table[][] будет в их поле видимости (scope)) 9. В вашем коде ОЧЕНЬ трудно разобраться. Попробуйте написать программу заново, тщательно ее переосмыслив. Прошу прощение у читателя за много букв! |
||||||||
|
|||||||||
| sQu1rr |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 597 Регистрация: 11.11.2008 Где: london Репутация: 3 Всего: 13 |
Это стандартный тип в компиляторе от мелкософта. Как вы и скахали 64х битный - а следовательно 20 цифр в числе... получается очень даже не плохо ;) Если у вас он не поддерживается, попробуйте поискать нужные библиотеки либо использовать (long long) - что одно и тоже впринципе. Все ваши замечания верные (особенно насчет читабельности кода) 2odys Хочу добавить от себя (разумеется у всех свои вкусы, но всетаки) Разумнее в main() писать как можно меньше, делая это за счет функций. Так код становиться еще более удобным к прочтению и ориентации в нем. И опять вы main() пишите без типа. Ну так нельзя! Как вас компилятор не обзывает нехорошими словами, не пойму. Кстати, тот код, что я вам помог написать про дробные числа вы даже не редактировали. Все мои комменты оставили и названия, которые я специально наисал потупее, чтобы вы их поменяли. Просто я думал, что вы разберетесь с этой функцией подумаете и на основе нее свою составете. Ну да ладна. Я тоже советую вам ПОЛНОСТЬ написать программу с нуля, осмысляя каждый свой шаг, и каждый раз ДУМАТЬ ПРЕЖДЕ ЧЕМ ПОДУМАТЬ! |
|||
|
||||
| odys |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 9.11.2008 Репутация: нет Всего: нет |
Спасибо. касательно переделывания и отладки - я думал этим заняться в конце, когда будет все работать. Но пожалуй вы правы... пока учусь лучше сразу нормально писать...
ДУМАТЬ ПРЕЖДЕ ЧЕМ ПОДУМАТЬ К сожалению... большинство очевидных советов, кажутся бесполезными, до того, как не попадеш в такую ситуациию сам... В общем вчера кучу раз переделвывал типы из string в int и обратно, по указанной вам причине. И эти слова обрели новый смысл). как сказал один мой хороший знакомый "Пословица, что умные учаться на чужих ошибках, а дураки на своих " - полный бред. "по настоящему учаться только на своих ошибках... ну а дураки... они вообще не учаться". касательно совета насчет краткости main - спасибо, обязательно воспользуюсь. 2kurtis Много букв меня не смущают, если они по делу. В общем спасибо за совет... Поскольку уже два человека советую начать с нуля - лучше все же последвать совету... Хотя на данный момент мне это не совсем понятно, и есть не малый соблазн, попытаться просто модифицировать)... |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Лучше с нуля, при том забыв весь код, который писали и представляя то поведение, которое хотите получить в итоге. Вначале можно весь код написать из "пустых" функций ( функций не имеющих реализации) и модифицировать его до тех пор, пока код не станет логически понятным. Такой подход поможет Вам определить ключевые места вашей проги и набросать ее каркас, не тратя время на продумавание работы функции, которая впоследствии может и не пригодится. И только после этого этапа приступайте к написанию реализации функций. Это сообщение отредактировал(а) mes - 22.11.2008, 16:41 |
|||
|
||||
| odys |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 9.11.2008 Репутация: нет Всего: нет |
http://forum.vingrad.ru/forum/topic-237286...и-недочеты.html
С нуля сделал... в общем спасибо... похоже вы были правы. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |