![]() |
|
Модераторы: bsa |
![]()
|
|
| KasMP |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Здравствуйте!
Пишу программу для сложения и умножения очень длинных целых чисел (>20 разрядов) с помощью строк. Сложение работает отлично, поэтому от функции сложения оставлю только заголовок. Умножение выполняется с помощью функции сложения (подробно описано в комментариях). Отмечу только, что
Надеюсь, вы поможете мне узнать, что такого особенного в моей функции умножения (пока незавершенной)...
|
||||||
|
|||||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
дебагеры уже не в почете?
|
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
В почете, но при компиляции (Dev-C++) нет ни одной ошибки, ни одного предупреждения:
А отладкой у меня не получается пользоваться - переменные не заносятся в наблюдаемые... Добавлено через 12 минут и 17 секунд Возможно, остальной код тоже имеет значение В главной функции ничего особенного нет: ввод строк, определение более длинной, создание массива для произведений s2[i]*s1, вызовы функций. Функция (точнее, процедура) сложения в итоге формирует переменную res (а она глобальная), поле чего res выводится уже в главной функции. Не знаю, где может быть загвоздка |
|||
|
||||
| KasMP |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Сложение:
(обещаю выравнивание столбцов вынести в отдельную процедуру, а не повторять каждый раз один и тот же код Глобальные переменные:
Главная функция:
(тоже можно оптимизировать... но это потом) Функции как функции, ничего сверхъестественного... За выделенную область памяти вроде не вылезаю |
||||||
|
|||||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
||||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
А в Microsoft Visual C++ 2008 Expess version ? Добавлено через 2 минуты и 4 секунды это как? да я не только верю, я знаю это научил бы кто, как это делать |
|||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
ну если там интерфейс тот-же как и в профешенел, то выбрать дебаг билд в тулбаре Добавлено через 46 секунд точки останова ставите просто слева от строки кода на полях кликнуть - появится метка |
|||
|
||||
| KasMP |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Понятно К строчке
такие ошибки (честно говоря, я не понимаю причин ни одной из них):
Добавлено через 2 минуты и 12 секунд Точно такие же ошибки везде, где объявляются массивы символов... В сумме 18 штук |
||||||||||
|
|||||||||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Так, с объявлением массивов в Visual C++ (точнее, с тем, что такое объявление не поддерживается
|
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
Ты путаешь момент компиляции и момент исполнения программы. Откуда компилятору знать, какое значение будет у len1 в процессе выполнения программы? Если нужна динамика, используй указатель.
Если мне память в С не изменяет. |
|||
|
||||
| KasMP |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Спасибо, с этим я уже разобралась Основная проблема в том, что при вызове
|
||||
|
|||||
| J0ker |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
это соответствует стандарту C++ другие компиляторы могут поддерживать стандарт C99 - там разрешены массивы с динамическим размером - но это стандарт plain C
массивы нулевого размера по стандарту запрещены Это сообщение отредактировал(а) J0ker - 10.12.2008, 06:28 |
||||
|
|||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: нет Всего: 360 |
KasMP, просто используй указатели.
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
a почему бы не использовать std::string ? или другой подходящий контейнер , чем мучаться с выделениями памяти ?
|
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Спасибо
Посмотрим, будет ли прога вылетать при вызове функции умножения... |
|||
|
||||
![]()
|
| Правила форума "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. |