![]() |
|
Модераторы: bsa |
![]()
|
|
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
стек отличается от других видов контейнера тем, что у него есть доступ только к верхним/нижним элементам. фактически стек является адаптером над контейнером, ограничивая его для придания нужно интерфейса. ну тогда класс - это структура данных с набором функций для нее. так получилось .. сам не заметил.. привычка Нет. Тем что за потоком не стоит определенного устройства, точнее сказатьи мы не знаем что там на самом деле. То есть поток сам решает как оптимально использовать то устройство, которое он скрывает. |
|||
|
||||
| KasMP |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Ну а теперь моя любимая программка при самом обычном присвоении целочисленной переменной значения выдает ошибку:
![]()
Я совсем не знаю, что думать (строчка с номером 10):
|
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
прежде всего откуда удаление ?
это этически некоректно удалять в процедуре то, что в ней не создано (за исключением случаев, когда функция явно для этого предназначена) и судя по всему явно не это ожидалось. во вторых почему в функцию сложения передается стек ?? Это сообщение отредактировал(а) mes - 21.12.2008, 17:01 |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Я удаляю числа предыдущего разряда, который уже сложен и, соответственно, больше никогда не потребуется.
Победила такая мысль: если не удалять здесь, то тогда придется создавать еще одну процедуру для удаления и снова проходить по тем же самым ссылкам по второму кругу. Эмм... В смысле?? Я передаю указатели на начало списков (где самые первые разряды) и указатель на строку-результат. Потом иду по списку, складываю (и удаляю уже сложенное)... |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
это называется использованием магических чисел и такой подход очень плох. лучше так: int(present1->c-'0')+int(present2->c-'0')+mental; |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Ошибка на 10-ой строке, до удаления даже не доходит...
Добавлено через 1 минуту и 5 секунд
Спасибо большое. Так правда намного лучше и понятнее |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Сложение (сам механизм) не должно быть реализовано в функции работающей со стеком. Разделите функционал на смысловые части.. Именно поэтому я предлагал начать с класса (читать: описания) "длинной" переменной. Добавлено через 1 минуту и 12 секунд Пока не знаю до чего доходит.. но глаз режет.. поэтому и высказал |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Да, кстати, без этого эту функцию смотреть бесполезно:
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
1. Передаются два стека, а результат весь умещается в одну строку ? 2. а на какой длины буффер указывает res ? это не стек, это список Это сообщение отредактировал(а) mes - 21.12.2008, 17:19 |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
По идее, да. Надо бы, конечно... Но там получится такая мааааааленькая функция, в которую придется много всего передавать. Как-то странно такой маленькой функции отводить так много памяти и "передаваний". |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
неправда, для сложения требуется два аргумента, и сумма как результат. Это сообщение отредактировал(а) mes - 21.12.2008, 17:22 |
|||
|
||||
| KasMP |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Я знаю и говорю про это с самого начала!!!!!! Ну а почему бы и нет? Взяли число из первого "стека", взяли число из второго, сложили, получили число в res. На один символ больший, чем длиннейшее число (чтобы вошла единичка, если, например, 999+2=1001). Добавлено через 2 минуты и 11 секунд Что именно? То, что это странно или то, что ей можно передать меньше, чем я предполагаю? (а я предполагаю mental, один из указателей на "стек", и указатель на нужную позицию в res) Добавлено через 3 минуты и 7 секунд Ну а если я поделю, то суть прораммы все равно не изменится и ошибка будет так же вылетать... Добавлено через 6 минут и 22 секунды А вот главная функция. Пусть будет (она пока не закончена: вывода в файл нет, файлы не закрыты и т.п.; но это не так важно...)
|
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
ну а исправлять когда будем ?!
дело не в том что делает функция, а в том как выглядит ее объявление.. Лично я воспринимаю что такая функция должна сложить два стека,а не определенные его элементы.
покажи как все это происходит. и ни о каких стеках речи нет. Это сообщение отредактировал(а) mes - 21.12.2008, 17:31 |
||||
|
|||||
| KasMP |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 586 Регистрация: 8.8.2006 Репутация: нет Всего: 30 |
Неправда Во-первых, у меня аргументов не всегда 2 (можно сделать и всегда 2, конечно... но наврядли производительность от этого выиграет). Во-вторых еще есть mental... Его тоже надо помнить и перезапоминать при сложении каждого разряда. Добавлено через 2 минуты и 38 секунд Соответствующий кусочек main():
Ну, ты называешь аргументом символ, я называю указатель на символ |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
Вот тебе (не программе) сказали что надо сложить два числа. Tебе кто-то должен передавать ментал ? Вот подумай как бы ты решила такое задание и объясни компу. В смысле бывает и меньше ?? Ну ка сложи мне 1 и .. не.. не так... сложи 1. Логично, а ? |
|||
|
||||
![]()
|
| Правила форума "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. |