Задачки для 1 класса
-
- Уже с Приветом
- Сообщения: 5552
- Зарегистрирован: Вт мар 20, 2001 4:01 am
- Откуда: SFBA
Задачки для 1 класса
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by timson:
[i:cefc4d3516]Делалось все under pressure, времени все разукрашивать не было
[/i:cefc4d3516]<HR></BLOCKQUOTE>
Ну я про это и говорю. Если вы привыкли писать аккуратно, вы уже не можете писать неряшливо. Оно автоматически получается.
А работать приходится почти всегда under pressure. Так что это не оправдание.
[i:cefc4d3516]Делалось все under pressure, времени все разукрашивать не было
[/i:cefc4d3516]<HR></BLOCKQUOTE>
Ну я про это и говорю. Если вы привыкли писать аккуратно, вы уже не можете писать неряшливо. Оно автоматически получается.
А работать приходится почти всегда under pressure. Так что это не оправдание.
-
- Уже с Приветом
- Сообщения: 120
- Зарегистрирован: Чт мар 15, 2001 4:01 am
- Откуда: Belgium
Задачки для 1 класса
Originally posted by timson:
[i:6932e4a5f0]
Ну такого безобразия и хакерства я себе и представить не мог [img:6932e4a5f0]images/smiles/icon_smile.gif[/img:6932e4a5f0] А по существу - на моем Линуксе такое скомпилировалось (с неряшливыми warning-ами), но не запустилось:
[/i:6932e4a5f0]
Так это, все-таки gcc кладет текстовый строки в read-only segment, так что функцю main() надо переписать на char str[] вместо char *str. Тогда заработает. А насчет warningов - не знаю, у меня ни одного ворнинга нет (да и не может их там быть, т.к. все написано по стандарту, ну кроме одной закрывющей скобки, но она вызывает ошибку).. Может ты неправильно вбил код, проверь!
[img:6932e4a5f0]images/smiles/icon_biggrin.gif[/img:6932e4a5f0] [img:6932e4a5f0]images/smiles/icon_biggrin.gif[/img:6932e4a5f0]
[i:6932e4a5f0]
Ну такого безобразия и хакерства я себе и представить не мог [img:6932e4a5f0]images/smiles/icon_smile.gif[/img:6932e4a5f0] А по существу - на моем Линуксе такое скомпилировалось (с неряшливыми warning-ами), но не запустилось:
[/i:6932e4a5f0]
Так это, все-таки gcc кладет текстовый строки в read-only segment, так что функцю main() надо переписать на char str[] вместо char *str. Тогда заработает. А насчет warningов - не знаю, у меня ни одного ворнинга нет (да и не может их там быть, т.к. все написано по стандарту, ну кроме одной закрывющей скобки, но она вызывает ошибку).. Может ты неправильно вбил код, проверь!
[img:6932e4a5f0]images/smiles/icon_biggrin.gif[/img:6932e4a5f0] [img:6932e4a5f0]images/smiles/icon_biggrin.gif[/img:6932e4a5f0]
-
- Уже с Приветом
- Сообщения: 5552
- Зарегистрирован: Вт мар 20, 2001 4:01 am
- Откуда: SFBA
Задачки для 1 класса
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by omnibee:
[i:d461c1e446] Могло бы неправильно работать в сегментной архитектуре при определенных ключах компиляции. Хотя сейчас, наверное, уже везде память плоская. Но тем не менее...[/i:d461c1e446]
Нет, работает правильно везде по стандарту.
Выражение x[-1] равносильно *(x-1), а из указателя единицу вычитать можно после проверки на то, что он больше чем указатель, указывающий на тот же массив.
Не желания пользваться средствами языка из-за неполного их знания не есть плюс.[/I]<HR></BLOCKQUOTE>
Ну, будем сейчас пузами меряться...
Я не вполне понял насчет неполного знания языка, я с 89-го или 90-го года на С сижу. А вообще программировать начал году так в 80-м.
Это факт, что язык из стандарта не вполне совпадает с конкретной реализацией. Поэтому код бывает портабельный, а бывает и нет.
Хотелось бы проехаться насчет неполного знания компиляторов под MS-DOS, но под рукой нет ни одного из них, так что зуб не отдам - в одной из моделей памяти вычитание происходило только из регистра смещения, а база не трогалась. Таким образом, двигаясь влево, после нуля мы перескакивали сразу на 64К вправо. При присваивании указатель нормализовался так, чтобы регистр смещения был нулевым (точнее, не совсем нулевым, а чтобы база была на границе параграфа). Но зуб все равно не дам! Точно знают только товарищи из МС и Борланда.
[i:d461c1e446] Могло бы неправильно работать в сегментной архитектуре при определенных ключах компиляции. Хотя сейчас, наверное, уже везде память плоская. Но тем не менее...[/i:d461c1e446]
Нет, работает правильно везде по стандарту.
Выражение x[-1] равносильно *(x-1), а из указателя единицу вычитать можно после проверки на то, что он больше чем указатель, указывающий на тот же массив.
Не желания пользваться средствами языка из-за неполного их знания не есть плюс.[/I]<HR></BLOCKQUOTE>
Ну, будем сейчас пузами меряться...
Я не вполне понял насчет неполного знания языка, я с 89-го или 90-го года на С сижу. А вообще программировать начал году так в 80-м.
Это факт, что язык из стандарта не вполне совпадает с конкретной реализацией. Поэтому код бывает портабельный, а бывает и нет.
Хотелось бы проехаться насчет неполного знания компиляторов под MS-DOS, но под рукой нет ни одного из них, так что зуб не отдам - в одной из моделей памяти вычитание происходило только из регистра смещения, а база не трогалась. Таким образом, двигаясь влево, после нуля мы перескакивали сразу на 64К вправо. При присваивании указатель нормализовался так, чтобы регистр смещения был нулевым (точнее, не совсем нулевым, а чтобы база была на границе параграфа). Но зуб все равно не дам! Точно знают только товарищи из МС и Борланда.
-
- Уже с Приветом
- Сообщения: 5552
- Зарегистрирован: Вт мар 20, 2001 4:01 am
- Откуда: SFBA
Задачки для 1 класса
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by timson:
[i:309988fb23]Кстати, сегодня они откликнулись, будет face-to-face интервью.[/i:309988fb23]<HR></BLOCKQUOTE>
Ну, удачи вам! На интервью старайтесь внимательно слушать, что вам говорят, не упускать деталей.
Не делайте больше, чем просят, не напрягайте их. Решайте в точности ту задачу, что задают, без отсебятины. Беда многих русских программистов не в том, что они слишком много знают, а в том, что они пытаются все это выдать в один присест на несчастного менеджера.
Если хотите показать альтернативный способ решения, спросите - а хотят ли они его увидеть. Обычно, впрочем, на интервью они сами предлагают, "а как бы вы соптимизировали по памяти...", "а по скорости...", "а в чем достоинство именно такого решения...", "а в чем его слабость...".
[i:309988fb23]Кстати, сегодня они откликнулись, будет face-to-face интервью.[/i:309988fb23]<HR></BLOCKQUOTE>
Ну, удачи вам! На интервью старайтесь внимательно слушать, что вам говорят, не упускать деталей.
Не делайте больше, чем просят, не напрягайте их. Решайте в точности ту задачу, что задают, без отсебятины. Беда многих русских программистов не в том, что они слишком много знают, а в том, что они пытаются все это выдать в один присест на несчастного менеджера.
Если хотите показать альтернативный способ решения, спросите - а хотят ли они его увидеть. Обычно, впрочем, на интервью они сами предлагают, "а как бы вы соптимизировали по памяти...", "а по скорости...", "а в чем достоинство именно такого решения...", "а в чем его слабость...".
-
- Уже с Приветом
- Сообщения: 120
- Зарегистрирован: Чт мар 15, 2001 4:01 am
- Откуда: Belgium
Задачки для 1 класса
Originally posted by 8K:
[i:dd4b5145c8]
Я не вполне понял насчет неполного знания языка, я с 89-го или 90-го года на С сижу. А вообще программировать начал году так в 80-м.
[/i:dd4b5145c8]
Так это ни о чем не говорит [img:dd4b5145c8]images/smiles/icon_smile.gif[/img:dd4b5145c8]
Из указателей можно вычитать целые числа, так что отрицательный индекс никто не запрещал.
[i:dd4b5145c8]
Это факт, что язык из стандарта не вполне совпадает с конкретной реализацией. Поэтому код бывает портабельный, а бывает и нет.
[/i:dd4b5145c8]
Тот, что я написал - портабельный. Придется хорошенько поискать, чтобы найти коимерческий компилятор, который неправильно странслирует этот код.
[i:dd4b5145c8]
Хотелось бы проехаться насчет неполного знания компиляторов под MS-DOS, но под рукой нет ни одного из них, так что зуб не отдам - в одной из моделей памяти вычитание происходило только из регистра смещения, а база не трогалась. Таким образом, двигаясь влево, после нуля мы перескакивали сразу на 64К вправо. При присваивании указатель нормализовался так, чтобы регистр смещения был нулевым (точнее, не совсем нулевым, а чтобы база была на границе параграфа). Но зуб все равно не дам! Точно знают только товарищи из МС и Борланда.[/i:dd4b5145c8]
Я могу дать зуб. Так оно и было (почти [img:dd4b5145c8]images/smiles/icon_smile.gif[/img:dd4b5145c8], все компиляторы так делали, если модель = large.
Только при присваивании никаких нормализаций не делалось, для этого надо было (huge*) написать.
Но к моему коду это отношения не имеет. Я не перехожу ноль.
[i:dd4b5145c8]
Я не вполне понял насчет неполного знания языка, я с 89-го или 90-го года на С сижу. А вообще программировать начал году так в 80-м.
[/i:dd4b5145c8]
Так это ни о чем не говорит [img:dd4b5145c8]images/smiles/icon_smile.gif[/img:dd4b5145c8]
Из указателей можно вычитать целые числа, так что отрицательный индекс никто не запрещал.
[i:dd4b5145c8]
Это факт, что язык из стандарта не вполне совпадает с конкретной реализацией. Поэтому код бывает портабельный, а бывает и нет.
[/i:dd4b5145c8]
Тот, что я написал - портабельный. Придется хорошенько поискать, чтобы найти коимерческий компилятор, который неправильно странслирует этот код.
[i:dd4b5145c8]
Хотелось бы проехаться насчет неполного знания компиляторов под MS-DOS, но под рукой нет ни одного из них, так что зуб не отдам - в одной из моделей памяти вычитание происходило только из регистра смещения, а база не трогалась. Таким образом, двигаясь влево, после нуля мы перескакивали сразу на 64К вправо. При присваивании указатель нормализовался так, чтобы регистр смещения был нулевым (точнее, не совсем нулевым, а чтобы база была на границе параграфа). Но зуб все равно не дам! Точно знают только товарищи из МС и Борланда.[/i:dd4b5145c8]
Я могу дать зуб. Так оно и было (почти [img:dd4b5145c8]images/smiles/icon_smile.gif[/img:dd4b5145c8], все компиляторы так делали, если модель = large.
Только при присваивании никаких нормализаций не делалось, для этого надо было (huge*) написать.
Но к моему коду это отношения не имеет. Я не перехожу ноль.
-
- Уже с Приветом
- Сообщения: 5552
- Зарегистрирован: Вт мар 20, 2001 4:01 am
- Откуда: SFBA
Задачки для 1 класса
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by omnibee:
[i:1ae114360c]
Я могу дать зуб. Так оно и было (почти [img:1ae114360c]images/smiles/icon_smile.gif[/img:1ae114360c], все компиляторы так делали, если модель = large.
Только при присваивании никаких нормализаций не делалось, для этого надо было (huge*) написать.
Но к моему коду это отношения не имеет. Я не перехожу ноль.[/i:1ae114360c]<HR></BLOCKQUOTE>
OK, мир. Я был неправ. Если нормализация при присваивании происходит только в huge-модели, то проблемы нет. Там и вычитание производится корректно.
[i:1ae114360c]
Я могу дать зуб. Так оно и было (почти [img:1ae114360c]images/smiles/icon_smile.gif[/img:1ae114360c], все компиляторы так делали, если модель = large.
Только при присваивании никаких нормализаций не делалось, для этого надо было (huge*) написать.
Но к моему коду это отношения не имеет. Я не перехожу ноль.[/i:1ae114360c]<HR></BLOCKQUOTE>
OK, мир. Я был неправ. Если нормализация при присваивании происходит только в huge-модели, то проблемы нет. Там и вычитание производится корректно.
- timson
- Уже с Приветом
- Сообщения: 2148
- Зарегистрирован: Вт июн 27, 2000 4:01 am
- Откуда: NC->VA........... можно на "ты"
Задачки для 1 класса
Конечно, ничего личного [img:ab52694ac5]images/smiles/icon_smile.gif[/img:ab52694ac5] Мы ж не в песочнице. Замечания принял с благодарностью. Правильно, сам просил.
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by 8K:
[i:ab52694ac5]
strtrim() в версии omnibee содержит синтаксическую ошибку (описка, естественно) - так что я не вполне понимаю, как линух ее скомпилировал. Будем считать, что вы подредактировали. Warning почти наверняка означает, что вы не подключили соответствующие .h файлы. По умолчанию, если нет прототипа, С-функция (в нашем случае это strchr) считается возвращающей int.[/i:ab52694ac5]<HR></BLOCKQUOTE>
Теперь по существу.
Да, конечно подредактировал.
Угу, правильно, варнинг я уже сам понял отчего.
Но работать это все равно не будет, если объявить
char * strtest = " Hello World ";
Или?
Кстати, сегодня они откликнулись, будет face-to-face интервью.
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by 8K:
[i:ab52694ac5]
strtrim() в версии omnibee содержит синтаксическую ошибку (описка, естественно) - так что я не вполне понимаю, как линух ее скомпилировал. Будем считать, что вы подредактировали. Warning почти наверняка означает, что вы не подключили соответствующие .h файлы. По умолчанию, если нет прототипа, С-функция (в нашем случае это strchr) считается возвращающей int.[/i:ab52694ac5]<HR></BLOCKQUOTE>
Теперь по существу.
Да, конечно подредактировал.
Угу, правильно, варнинг я уже сам понял отчего.
Но работать это все равно не будет, если объявить
char * strtest = " Hello World ";
Или?
Кстати, сегодня они откликнулись, будет face-to-face интервью.
- timson
- Уже с Приветом
- Сообщения: 2148
- Зарегистрирован: Вт июн 27, 2000 4:01 am
- Откуда: NC->VA........... можно на "ты"
Задачки для 1 класса
To 8K:
Перечитал все еще раз. Большое спасибо, правда. Подробный и по делу разбор полетов.
Перечитал все еще раз. Большое спасибо, правда. Подробный и по делу разбор полетов.
-
- Уже с Приветом
- Сообщения: 120
- Зарегистрирован: Чт мар 15, 2001 4:01 am
- Откуда: Belgium
Задачки для 1 класса
Originally posted by 8K:
[i:79c9e8c548]<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">code:</font><HR><pre>
void strtrim(char *str)
{
...
while ( isspace(*ptr) ) ptr++;
...
while ( end > ptr && isspace(end[-1] )
end--;
...
}
</pre><HR></BLOCKQUOTE>[/i:79c9e8c548]<HR></BLOCKQUOTE>
Не переведена строчка в первом while,
[/i]
Так сделано специально. Незачем тратить строку и портить текст мелким циклом.
Я уже сказал, что это - дело вкуса и стиля.
[i:79c9e8c548]
и отрицательно смещение (минус один) во втором.
[/i:79c9e8c548]
Это не смещение, а индекс.
[i:79c9e8c548] Могло бы неправильно работать в сегментной архитектуре при определенных ключах компиляции. Хотя сейчас, наверное, уже везде память плоская. Но тем не менее...[/i:79c9e8c548]
Нет, работает правильно везде по стандарту.
Выражение x[-1] равносильно *(x-1), а из указателя единицу вычитать можно после проверки на то, что он больше чем указатель, указывающий на тот же массив.
Не желания пользваться средствами языка из-за неполного их знания не есть плюс.
[i:79c9e8c548]<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">code:</font><HR><pre>
void strtrim(char *str)
{
...
while ( isspace(*ptr) ) ptr++;
...
while ( end > ptr && isspace(end[-1] )
end--;
...
}
</pre><HR></BLOCKQUOTE>[/i:79c9e8c548]<HR></BLOCKQUOTE>
Не переведена строчка в первом while,
[/i]
Так сделано специально. Незачем тратить строку и портить текст мелким циклом.
Я уже сказал, что это - дело вкуса и стиля.
[i:79c9e8c548]
и отрицательно смещение (минус один) во втором.
[/i:79c9e8c548]
Это не смещение, а индекс.
[i:79c9e8c548] Могло бы неправильно работать в сегментной архитектуре при определенных ключах компиляции. Хотя сейчас, наверное, уже везде память плоская. Но тем не менее...[/i:79c9e8c548]
Нет, работает правильно везде по стандарту.
Выражение x[-1] равносильно *(x-1), а из указателя единицу вычитать можно после проверки на то, что он больше чем указатель, указывающий на тот же массив.
Не желания пользваться средствами языка из-за неполного их знания не есть плюс.
-
- Уже с Приветом
- Сообщения: 992
- Зарегистрирован: Вт фев 06, 2001 4:01 am
- Откуда: San Jose, USA
Задачки для 1 класса
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by 8K:
[i:44e1fd0d87]Хотелось бы проехаться насчет неполного знания компиляторов под MS-DOS, но под рукой нет ни одного из них, так что зуб не отдам - в одной из моделей памяти вычитание происходило только из регистра смещения, а база не трогалась. Таким образом, двигаясь влево, после нуля мы перескакивали сразу на 64К вправо. При присваивании указатель нормализовался так, чтобы регистр смещения был нулевым (точнее, не совсем нулевым, а чтобы база была на границе параграфа). Но зуб все равно не дам! Точно знают только товарищи из МС и Борланда.[/i:44e1fd0d87]<HR></BLOCKQUOTE>
Не шутите так. Ни товарищи из МС, ни господа из Ваткома, ни dudes из Борланда такую дешевую глупость сделать не могли, чтобы сишные правила работы с пойнтерами нарушать.
Вот с применением виртуальных деструкторов к стековым объектам могли ошибиться - да кто угодно может!
[i:44e1fd0d87]Хотелось бы проехаться насчет неполного знания компиляторов под MS-DOS, но под рукой нет ни одного из них, так что зуб не отдам - в одной из моделей памяти вычитание происходило только из регистра смещения, а база не трогалась. Таким образом, двигаясь влево, после нуля мы перескакивали сразу на 64К вправо. При присваивании указатель нормализовался так, чтобы регистр смещения был нулевым (точнее, не совсем нулевым, а чтобы база была на границе параграфа). Но зуб все равно не дам! Точно знают только товарищи из МС и Борланда.[/i:44e1fd0d87]<HR></BLOCKQUOTE>
Не шутите так. Ни товарищи из МС, ни господа из Ваткома, ни dudes из Борланда такую дешевую глупость сделать не могли, чтобы сишные правила работы с пойнтерами нарушать.
Вот с применением виртуальных деструкторов к стековым объектам могли ошибиться - да кто угодно может!
-
- Уже с Приветом
- Сообщения: 491
- Зарегистрирован: Вт окт 31, 2000 4:01 am
- Откуда: Москва.su->Bs.As.ar->SP.br->Bs.As.ar->dallas.us
Задачки для 1 класса
Для тех кто не понял:
gcc начиная (если не ошибаюсь) с версии 2.8.0
память выделяему компилятором для констант , определяет как read only. Любая попытка изменения - приведет к segmentation fault.
Поэтому, задача поставлена некорректно .
У компилятора есть ключ для отключения этого - читай документацию .
gcc начиная (если не ошибаюсь) с версии 2.8.0
память выделяему компилятором для констант , определяет как read only. Любая попытка изменения - приведет к segmentation fault.
Поэтому, задача поставлена некорректно .
У компилятора есть ключ для отключения этого - читай документацию .
-
- Новичок
- Сообщения: 35
- Зарегистрирован: Сб июл 29, 2000 4:01 am
- Откуда: UZ->Andizhan, RU->Kazan, CZ->Prague
- Контактная информация:
Задачки для 1 класса
<BLOCKQUOTE><font size="1" face="Arial, Verdana, Helvetica, sans-serif">quote:</font><HR>Originally posted by timson:
[i:bc674bccf0]Question #2
We have a SQL table that shows how much money people owe:
Account Amount Owed
------- -----------
...
4532 $21.95
4533 $22.95
4534 $22.95
4535 $10.00
4536 $ 8.00
4537 $11.50
...
Write a query that shows the three accounts that owe us the most money:
(sample output)
Account Amount Owed
------- -----------
4533 $22.95
4534 $22.95
4532 $21.95
-------Мой ответ №2---------
Тут беда в том, что я так и не понял, кто им нужен - Ораклист или Sybase-овец. На всякий случай написал все, что вспомнил [img:bc674bccf0]images/smiles/icon_smile.gif[/img:bc674bccf0]
Solution for Oracle:
select Account, Owed from
( SELECT Account, Owed FROM SQLTable ORDER BY Owed DESC)
WHERE rownum < 4
[/i:bc674bccf0]<HR></BLOCKQUOTE>
тоже в голову не приходит ничего кроме как поставить уловие WHERE ROWNUM < 4 (в Oracle). А можно такое "толстое" решение [img:bc674bccf0]images/smiles/icon_wink.gif[/img:bc674bccf0]
SELECT account, owed FROM sqltable WHERE owed >=
(SELECT MAX(owed) FROM sqltable WHERE owed <
(SELECT MAX(owed) FROM sqltable WHERE owed <
(SELECT MAX(owed) FROM sqltable)))
ORDER BY owed DESC;
Удачи.
[i:bc674bccf0]Question #2
We have a SQL table that shows how much money people owe:
Account Amount Owed
------- -----------
...
4532 $21.95
4533 $22.95
4534 $22.95
4535 $10.00
4536 $ 8.00
4537 $11.50
...
Write a query that shows the three accounts that owe us the most money:
(sample output)
Account Amount Owed
------- -----------
4533 $22.95
4534 $22.95
4532 $21.95
-------Мой ответ №2---------
Тут беда в том, что я так и не понял, кто им нужен - Ораклист или Sybase-овец. На всякий случай написал все, что вспомнил [img:bc674bccf0]images/smiles/icon_smile.gif[/img:bc674bccf0]
Solution for Oracle:
select Account, Owed from
( SELECT Account, Owed FROM SQLTable ORDER BY Owed DESC)
WHERE rownum < 4
[/i:bc674bccf0]<HR></BLOCKQUOTE>
тоже в голову не приходит ничего кроме как поставить уловие WHERE ROWNUM < 4 (в Oracle). А можно такое "толстое" решение [img:bc674bccf0]images/smiles/icon_wink.gif[/img:bc674bccf0]
SELECT account, owed FROM sqltable WHERE owed >=
(SELECT MAX(owed) FROM sqltable WHERE owed <
(SELECT MAX(owed) FROM sqltable WHERE owed <
(SELECT MAX(owed) FROM sqltable)))
ORDER BY owed DESC;
Удачи.
-
- Уже с Приветом
- Сообщения: 5552
- Зарегистрирован: Вт мар 20, 2001 4:01 am
- Откуда: SFBA
Задачки для 1 класса
Ну нельзя же так задачки решать, еще в школе учили - в конце решения делается проверка. Потому что и на старуху бывает проруха.
Специально ведь в примере были два совпадающих значения (причем они больше остальных).
Специально ведь в примере были два совпадающих значения (причем они больше остальных).