Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбитие целого числа на цифры. Первая программа на C# 
:(
    Опции темы
PashaPash
Дата 6.2.2009, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Цитата(diadiavova @  6.2.2009,  20:02 Найти цитируемый пост)
PashaPash, в приведённом примере исходными данными является строка, так что: никто ничего не преобразовывал. Преобразовывать входную строку в число - действительно не надо было(переменная i там лишняя).

В приведенном условии встречаются слова "целое число". Скорее, преобразовывать каждый символ отдельно в число не надо было. А просто взять и написать стандартный алгоритм.
Цитата(diadiavova @  6.2.2009,  20:02 Найти цитируемый пост)
Ну если ты так строго подходишь к этому учебному примеру и хочешь сделать из него настоящую программу, то "защиту от дурака" предусмотреть надо, несмотря на отсутствие такого требования в постановке задачи.

Вот такой я строгий и злой smile Требование на поддержку отрицательных чисел в постановке задачи есть. Твой код на них падает. Я виноват? smile


--------------------
PM MAIL WWW   Вверх
diadiavova
Дата 6.2.2009, 20:22 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



То, что мой код "падает" на отрицательных числах -  всего навсего небольшой недочёт, который исправляется элементарно(уверен: ты и сам это понимаешь). Ты так на этом зацикливаешься, что создаётся впечатление, как будто попытка исправить этот недочёт способна убить алгоритм. В любом случае: перебрать строку - проще и дешевле, чем выполнять арифметические операции над числом(полученным из этой же строки) для получения того же результата.


Это сообщение отредактировал(а) diadiavova - 6.2.2009, 20:33


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
PashaPash
Дата 6.2.2009, 20:49 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Цитата(diadiavova @  6.2.2009,  20:22 Найти цитируемый пост)
В любом случае: перебрать строку - проще и дешевле, чем выполнять арифметические операции над числом(полученным из этой же строки) для получения того же результата.

Проще и дешевле??? С каких это пор преобразование строки в число (для каждого символа) стало проще и дешевле деления на 10 - одной процессорной инструкции? smile) Мой код вызывает Int32.Parse один раз. Твой - один раз для каждой цифры - офигенно дешевле smile Предлагаешь ввести проверки true.ToString().Length == 4 в качестве оптимизации? smile)
Цитата(diadiavova @  6.2.2009,  20:22 Найти цитируемый пост)
То, что мой код "падает" на отрицательных числах -  всего навсего небольшой недочёт, который исправляется элементарно(уверен: ты и сам это понимаешь). 

Это большой недочет. Попытка исправления его подвинет алгортм на один шаг в сторону спагетти. Уверен, ты понимаешь сколько стоит выловить такой "недочет" в системе средних размеров. Так же уверен, что ты понимаешь что на самом деле для введения хоть какой-нибудь валидации ввода тебе придется обработать минимум 3 крайних случая вручную, и при этом повторить функционал стандартного Int32.Parse(). Хотя, после фразы что операция со строками дешевле деления - я уже не уверен smile

Это сообщение отредактировал(а) PashaPash - 6.2.2009, 20:50


--------------------
PM MAIL WWW   Вверх
zaksys
Дата 6.2.2009, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 31.5.2008
Где: Красноярск

Репутация: нет
Всего: нет



Я сначала думал перебрать преобразованное число по цифрам, и их сравнивать. Просто не знал как выделить из полученного числа цифры, чтоб потом просто проверить четные они не четные.

Это сообщение отредактировал(а) zaksys - 6.2.2009, 21:07
PM MAIL Skype   Вверх
diadiavova
Дата 6.2.2009, 21:11 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



zaksys, ну тогда, вариант PashaPash для тебя.

PashaPash, Сомневаюсь, что деление, с нахождением остатка - более дешёвая процедура, чем парсинг строки из одного символа. Хотя: спорить об этом умозрительно нет никакого смысла, а проверять на практике, я думаю не хочется ни тебе ни мне. 
Цитата(PashaPash @  6.2.2009,  20:49 Найти цитируемый пост)
Уверен, ты понимаешь сколько стоит выловить такой "недочет" в системе средних размеров.

Ты хочешь сказать, что проверка наличия минуса в строке - настолько дорогое удовольствие, что слабой машине с этой сверзадачей не справиться?
Цитата(PashaPash @  6.2.2009,  20:49 Найти цитируемый пост)
Так же уверен, что ты понимаешь что на самом деле для введения хоть какой-нибудь валидации ввода тебе придется обработать минимум 3 крайних случая вручную, и при этом повторить функционал стандартного Int32.Parse(). 

Проверка введённых данных к теме имеет косвенное отношение, и если её вводить, то и расклад другой будет.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
PashaPash
Дата 6.2.2009, 21:23 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Цитата(diadiavova @  6.2.2009,  21:11 Найти цитируемый пост)
PashaPash, Сомневаюсь, что деление, с нахождением остатка - более дешёвая процедура, чем парсинг строки из одного символа. Хотя: спорить об этом умозрительно нет никакого смысла, а проверять на практике, я думаю не хочется ни тебе ни мне. 

Деление с нахождением остатка - ровно одна инструкция процессора. Парсинг строки число в C# - это сложная операция, у четом текущей локали, кучи левых проверок типа на всякие там leading/traling space. Сложнее на пару порядков - возьми отладчик и убедись.
Цитата(diadiavova @  6.2.2009,  21:11 Найти цитируемый пост)

Ты хочешь сказать, что проверка наличия минуса в строке - настолько дорогое удовольствие, что слабой машине с этой сверзадачей не справиться?

Я имею в виду что сам поиск такой ошибки будет достаточно трудоемкой операцией. Если даже 5 строчек не работают точно по однострочной спеке, то как можно доверить тебе проект? smile


--------------------
PM MAIL WWW   Вверх
diadiavova
Дата 6.2.2009, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(PashaPash @  6.2.2009,  21:23 Найти цитируемый пост)
Я имею в виду что сам поиск такой ошибки будет достаточно трудоемкой операцией. 

Я имею в виду не поиск ошибки, а то, что код надо просто чуть-чуть подправить.

Цитата(PashaPash @  6.2.2009,  21:23 Найти цитируемый пост)
Если даже 5 строчек не работают точно по однострочной спеке, то как можно доверить тебе проект?

На сколько я понимаю, я к тебе на работу не устраиваюсь smile 



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
PashaPash
Дата 6.2.2009, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



diadiavova, да просто пятница, пиво закончилось, а на форму тишина....


--------------------
PM MAIL WWW   Вверх
diadiavova
Дата 6.2.2009, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Ты на форум VB.Net зайди, тогда узнаешь, что такое тишина.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
THandle
Дата 7.2.2009, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 1
Всего: 372



Модератор: Давайте вернёмся к теме обсуждения.

Тишину и прочее можно обсудить во флейме ;)
PM   Вверх
diadiavova
Дата 8.2.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(diadiavova @  6.2.2009,  20:22 Найти цитируемый пост)
В любом случае: перебрать строку - проще и дешевле, чем выполнять арифметические операции над числом(полученным из этой же строки) для получения того же результата.

Я так понимаю, что неодобрительную оценку я получил именно за это утверждение. В связи с этим, я немного подправил алгоритм(от преобразования строки в число отказался вовсе и заменил его свитчкейсом), решил проблему отрицательных чисел. 
Программа содержит текстовый файл, состоящий из 100000 строк, на каждой из которых записано целое число в интервале от -1000000 до 1000000 . Файл считывается построчно, и каждая строка передаётся на обработку первому алгоритму(моему), после чего аналогичные действия производятся со вторым алгоритмом. Время, затраченное на обработку выводится на экран.

Файл сгенерирован рэндомно, метод при помощи которого это было сделано, представлен.

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  AlgTest.rar 717,11 Kb


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
zaksys
Дата 8.2.2009, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 31.5.2008
Где: Красноярск

Репутация: нет
Всего: нет



А как решить проблему отрицательных чисел?(Чтоб их можно было безболезнено считывать, также как и положительные).


 ! 
THandle
Кнопка Report используется только по следующим правилам:

Цитата

Эта форма должна быть использована ТОЛЬКО для доклада о НАРУШЕНИИ ПРАВИЛ ФОРУМА в сообщении и ни в коем случае не как средство общения и связи.


В следующий раз за не целевое использование будет выдано предупреждение.


Это сообщение отредактировал(а) THandle - 8.2.2009, 18:14
PM MAIL Skype   Вверх
PashaPash
Дата 8.2.2009, 19:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



Цитата(zaksys @  8.2.2009,  18:01 Найти цитируемый пост)
А как решить проблему отрицательных чисел?(Чтоб их можно было безболезнено считывать, также как и положительные).

Отмотай на мой пост на прошлой странице, там готовый код.

Добавлено через 6 минут и 18 секунд
Цитата(diadiavova @  8.2.2009,  16:50 Найти цитируемый пост)
Я так понимаю, что неодобрительную оценку я получил именно за это утверждение. В связи с этим, я немного подправил алгоритм(от преобразования строки в число отказался вовсе и заменил его свитчкейсом), решил проблему отрицательных чисел. 

Не за это утверждение, а за общую кривизну решения детской задачи.


--------------------
PM MAIL WWW   Вверх
diadiavova
Дата 8.2.2009, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



А по поводу результатов теста будут комментарии?


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
PashaPash
Дата 8.2.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1233
Регистрация: 3.1.2008

Репутация: 13
Всего: 49



diadiavova, замечательный тест, вот только студии под рукой нет. А так - почему ты передаешь string buf? В условии ж сказано - целое число. Поменяй - получишь обратный результат smile
И зачем ручная работа с энумератором? В чем вообще цель? Доказать что можно проверять на четность свитчем?
Твой вариант препод завернет с фразой "а почему вы в число не преобразовываете как я вам показывал" smile почти 100% smile


--------------------
PM MAIL WWW   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0980 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.