![]() |
Модераторы: Partizan, gambit |
![]() ![]() ![]() |
|
zaksys |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 31.5.2008 Где: Красноярск Репутация: нет Всего: нет |
У меня есть такая задача. Есть целое число, которое мы вводим с клавиатуры. И необходимо узнать сколько в этом числе нечетных и четных цифр.
Примерно был написан такой код.
Подскажите, где здесь ошибка пожалуйста. |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Правда, в дополнение к этому ещё неплохо было бы проверить корректность введённых данных. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
zaksys |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 31.5.2008 Где: Красноярск Репутация: нет Всего: нет |
А можно объснить откуда это взялось, и что можно по этой теме почитать? |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Почитать попробуй официальную документацию по этому интерфейсу. Перечислитель просто перебирает буквы в строке. Метод MoveNext переводит его на следующую букву и есле она ещё есть, то возвращает true, в противном случае(если строка кончилась) цикл обрывается. Свойство Current возвращает текущую букву.
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
QryStaL |
|
||||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 14 Всего: 32 |
Этот код эквивалентен следующему
Добавлено через 1 минуту и 7 секунд http://dofactory.com/patterns/PatternIterator.aspx -------------------- I don't need a reason being who I am... |
||||
|
|||||
zaksys |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 31.5.2008 Где: Красноярск Репутация: нет Всего: нет |
А есть какие-нибудь рускоязычные источники?
|
|||
|
||||
QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 14 Всего: 32 |
-------------------- I don't need a reason being who I am... |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
diadiavova, QryStaL, я просто в шоке. Считать четные/нечетные цифры преобразованием числа в строку - это позор. Оба примера падают даже на -1
![]() Добавлено через 5 минут и 9 секунд
шаблон "Остаток от деления на 10" (с) |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
PashaPash, я тебя ещё больше шокирую. В дополнение к тому позору, о котором ты уже написал, я ещё плюс ко всему не смог найти в своём собственном коде того места, в котором я преобразовывал бы число в строку с вышеозначенной целью. Так что: не сочти за труд - укажи место поточнее.
![]() -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
Ты работаешь со строковым представлением числа. Выше у тебя уже есть готовое число в виде int. Это как-бы и есть преобразование числа в строку для решения мегазадачи
![]() |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
Со строкой я работаю в силу того, что задача состоит в подсчёте цифр(которые как известно являются символами), из-за этого, на мой взгляд их куда более естественно извлекать прямо из строки, чем выполнять математические операции над числом после преобразования. Что до отрицательных чисел и прочих прелестей - это всё можно скорректировать если такое условие будет поставлено, насколько я понимаю, в твоём коде тоже отсутствует проверка корректности введённых данных ( только какое это имеет отношение к задаче?).
Для проверки чётности я использовал тот же механизм что и ты(а не преобразование в строку). Что касается ручного энумератора, то здесь я, пожалуй, согласен, только вот...недостаток этот исправил QryStaL, но он тебя тоже почему-то шокировал. Я же его использовал для сохранения сходства с первоначальным кодом, для пущей ясности, пропёрся малость - бывает. ....Или ты опять намекаешь, что я про форич не в курсях? -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
QryStaL |
|
|||
![]() Intellectual feast ![]() ![]() Профиль Группа: Участник Сообщений: 914 Регистрация: 30.11.2005 Репутация: 14 Всего: 32 |
PashaPash, начнем с того, что я алгоритм вообще никак не комментировал, а просто ответил на вопрос автора про кусок кода (указал на возможность использования конструкции foreach)
![]() -------------------- I don't need a reason being who I am... |
|||
|
||||
zaksys |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 117 Регистрация: 31.5.2008 Где: Красноярск Репутация: нет Всего: нет |
Не понятно о чем тут написано, но все равно спасибо за помощь.
|
|||
|
||||
PashaPash |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 13 Всего: 49 |
QryStaL, да с тобой все понятно
![]()
Да, только для опередления цифр, стоящих в десятичной записи числа есть готовый древний алгоритм с делением. Код пишется для машины, в которой числа представлены не строковыми литералами. И преобразование их в строки равносильно проверке val==true кодом типа if (val.ToString().Length == 4). Твой код считает количество четных одноразраядных чисел в введенной строке. Самого понятия "введенного числа" в нем нет. Как-то видет - для передачи массива чисел по сети их преобразовывали в строчку. И аргументировали - send(char*), значит надо передать строку. ;) В условии написано - целых чисел. Отрицательные натуральные - это целые. Условие уже поставлено, так что отрицательные числа имеют к задаче вполне конкретное отношение ![]() |
|||
|
||||
diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 31 Всего: 142 |
zaksys, спор идёт о способе решения твоей задачи. В варианте, предложенном мной, строка просто перебирается посимвольно, и каждый символ проверяется на предмет соответствия условию. В варианте, предлагаемом PashaPash строку сначала надо преобразовать в число, а потом выдирать из этого числа отдельные цифры, используя простой(по его мнению) алгоритм, состоящий в том, что число в каждой итерации цикла делится на 10, остаток деления проверяется на предмет деления на 2 а с результатом деления эта операция повторяется до тех пор, пока он не иссякнет (я ничего не напутал?).
PashaPash, в приведённом примере исходными данными является строка, так что: никто ничего не преобразовывал. Преобразовывать входную строку в число - действительно не надо было(переменная i там лишняя). Ну если ты так строго подходишь к этому учебному примеру и хочешь сделать из него настоящую программу, то "защиту от дурака" предусмотреть надо, несмотря на отсутствие такого требования в постановке задачи. -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит ![]() |
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |