Да нет понятно, что Вы раскололи заказанное количество орехов микроскопом.crypto5 wrote:Я давно на С не писал(лет 5)
Кстати, если мне не измняет память, то в контексте интервью CRT злобно читит


Да нет понятно, что Вы раскололи заказанное количество орехов микроскопом.crypto5 wrote:Я давно на С не писал(лет 5)
Специально для леонида ильича с-ишный вариант:Леонид Ильич Брежнев wrote:Ужас. За одну только попытку только !!!! ПОДУМАТЬ !!! писать atoi() на джаве надо наказывать. Прижигать мозг расколенной докрасна кочергой через анус.crypto5 wrote:![]()
Code: Select all
int atoi(char *c, int &i) {
if(!c || !*c) return -1;
while(*c && *c == ' ') c++;
if(!*c) return -1;
int neg = 1;
if(*c == '-') {neg = -1; c ++;}
if(!*c) return -1;
i = 0;
while(*c == '0') c++;
while(*c) {
if(*c < '0' || *c > '9') return -1;
i *= 10;
i += *c - '0';
c ++;
}
i *= neg;
return 0;
}
Тебе что, как Пушкину построчно платят?crypto5 wrote:Леонид Ильич Брежнев wrote:crypto5 wrote:Code: Select all
i += *c - '0'; c ++;
В большинстве реализаций atoi просто вызывает функцию strtolЛеонид Ильич Брежнев wrote:Кстати, если мне не измняет память, то в контексте интервью CRT злобно читит. Там atoi() написана через isdigit()
прибежит дотком, скажет что нечитабельно ))Леонид Ильич Брежнев wrote:Тебе что, как Пушкину построчно платят?crypto5 wrote:Леонид Ильич Брежнев wrote:crypto5 wrote:Code: Select all
i += *c - '0'; c ++;
![]()
![]()
А что мне за это будет?crypto5 wrote: прибежит дотком, скажет что нечитабельно ))
Ничего не будет. Но и на рекомендацию в партию тоже можешь не рассчитывать.dotcom wrote:А что мне за это будет?crypto5 wrote: прибежит дотком, скажет что нечитабельно ))
crypto5 wrote:Alexander Troyansky wrote:спасибо за проявленный интересcrypto5 wrote:Давайте еще какую нибудь школьную задачу из вашего арсенала, можно с секундомером, я попытаюсь реабилитироваться ))Alexander Troyansky wrote:Нет, глупые ошибке на доске - это действительно было не проблемой.АццкоМото wrote: Да, за час - не вопрос. Единственное, если на доске, то можно пару глупых ошибок сделать, но не думаю, что это большая проблема
Даже напишу функцию с проверками ))можете попробовать ее решить еще раз (и не один раз), предварительно прочтя мои предыдущие сообщения
Code: Select all
private static int atoi(String s) throws Exception{ if(s == null || s.length() == 0) throw new Exception("Error"); int i = 0; int ind = 0; while(s.charAt(ind) == ' ' && ind < s.length()) ind ++; if(ind == s.length()) throw new Exception("Error"); int neg = 1; if(s.charAt(ind) == '-') {neg = -1; ind ++;} if(ind == s.length()) throw new Exception("Error"); if(s.charAt(ind) == '+') ind ++; if(ind == s.length()) throw new Exception("Error"); while(s.charAt(ind) == '0' && ind < s.length()) ind ++; while(ind < s.length()) { if(s.charAt(ind) < '0' || s.charAt(ind) > '9') throw new Exception("Error"); i *= 10; i += s.charAt(ind) - '0'; ind ++; } return i * neg; }
В Джаве правильный метод сигнализировать об ошибках - это именно бросать исключения. Кому это не подходит в данном случае, пусть пишут функцию валидирования числовой строки на правильность. Собственно стандартная библиотечка функция на таком, например, вызове Integer.parseInt("123z") бросит NumberFormatException.Alexander Troyansky wrote: 1) из-за performance consideration бросать Exception - не знаю, как в Джаве, но в С++ помню было это не совсем вкусно. Т.е. для пользовательскго ввода может быть нормально, но для обработки потока данных бросаться исключениями может быть не совсем то. Как вы считаете?
1) Я согласен что Exception-ы тормозят, хотя и не всегда(http://stackoverflow.com/questions/4838 ... ns-in-java), но в данном случае баланс между premature optimization и simplicity был сдвинут в сторону второгоAlexander Troyansky wrote:crypto5 wrote:Alexander Troyansky wrote:спасибо за проявленный интересcrypto5 wrote:Давайте еще какую нибудь школьную задачу из вашего арсенала, можно с секундомером, я попытаюсь реабилитироваться ))Alexander Troyansky wrote: Нет, глупые ошибке на доске - это действительно было не проблемой.
Даже напишу функцию с проверками ))можете попробовать ее решить еще раз (и не один раз), предварительно прочтя мои предыдущие сообщения
Code: Select all
private static int atoi(String s) throws Exception{ if(s == null || s.length() == 0) throw new Exception("Error"); int i = 0; int ind = 0; while(s.charAt(ind) == ' ' && ind < s.length()) ind ++; if(ind == s.length()) throw new Exception("Error"); int neg = 1; if(s.charAt(ind) == '-') {neg = -1; ind ++;} if(ind == s.length()) throw new Exception("Error"); if(s.charAt(ind) == '+') ind ++; if(ind == s.length()) throw new Exception("Error"); while(s.charAt(ind) == '0' && ind < s.length()) ind ++; while(ind < s.length()) { if(s.charAt(ind) < '0' || s.charAt(ind) > '9') throw new Exception("Error"); i *= 10; i += s.charAt(ind) - '0'; ind ++; } return i * neg; }
Я поражен! За десять минут и столько написать!
![]()
Правда у меня есть несколько замечаний, как существенных и так и не очень (всего лишь вспоминаю мнение экзаменатора):
1) из-за performance consideration бросать Exception - не знаю, как в Джаве, но в С++ помню было это не совсем вкусно. Т.е. для пользовательскго ввода может быть нормально, но для обработки потока данных бросаться исключениями может быть не совсем то. Как вы считаете? Сразу хочу сообщить, что я знаю, вы не телепат, как и я, и живого общения у доски у нас было.
2) попробовал "4294967296" -> 0. У вас тоже? Я считаю это ошибкой. В случае невозможности преобразования, вроде как надо бы и отрапортовать соотвествующе, а не тихо преобразовать в ноль
В принципе, количество времени не имеет значения. Было бы интересно посмотреть дальнейшее развитие вашей мысли, если вам интересно. Я правда не собеседуюcrypto5 wrote:Alexander Troyansky wrote:1) Я согласен что Exception-ы тормозят, хотя и не всегда(http://stackoverflow.com/questions/4838 ... ns-in-java), но в данном случае баланс между premature optimization и simplicity был сдвинут в сторону второго
2) Мне это приходило в голову, но я решил что ожидая от вас ответа в сколько то минут не вложусь.
Именно это я и хотел сказать.dotcom wrote:Exception в C++ тоже никто не запрещает бросать. Просто не стоит ими злоупотреблять в библиотечных фукнциях, т.к. зачем ради красоты увеличивать время вызова?
dotcom wrote:Exception в C++ тоже никто не запрещает бросать. Просто не стоит ими злоупотреблять в библиотечных фукнциях, т.к. зачем ради красоты увеличивать время вызова? STL правда увешан Exception'ами как новогодня елка. Так что всем по фиг уже.
А как вы, господа, предлагает модифицировать Джава код crypto5, чтобы избавиться от исключений. Уж не -1 ли вернуть?Alexander Troyansky wrote: 1) из-за performance consideration бросать Exception - не знаю, как в Джаве, но в С++ помню было это не совсем вкусно. Т.е. для пользовательскго ввода может быть нормально, но для обработки потока данных бросаться исключениями может быть не совсем то. Как вы считаете? Сразу хочу сообщить, что я знаю, вы не телепат, как и я, и живого общения у доски у нас было.
Обьект возвращать с двумя полямиИнтеррапт wrote:dotcom wrote:Exception в C++ тоже никто не запрещает бросать. Просто не стоит ими злоупотреблять в библиотечных фукнциях, т.к. зачем ради красоты увеличивать время вызова? STL правда увешан Exception'ами как новогодня елка. Так что всем по фиг уже.А как вы, господа, предлагает модифицировать Джава код crypto5, чтобы избавиться от исключений. Уж не -1 ли вернуть?Alexander Troyansky wrote: 1) из-за performance consideration бросать Exception - не знаю, как в Джаве, но в С++ помню было это не совсем вкусно. Т.е. для пользовательскго ввода может быть нормально, но для обработки потока данных бросаться исключениями может быть не совсем то. Как вы считаете? Сразу хочу сообщить, что я знаю, вы не телепат, как и я, и живого общения у доски у нас было.Ладно в С можно просто добавить output parameter и вернуть значение по указателю. А с Джавой что делать будем?