С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 2744, средняя оценка - 4.89
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
#1

Задачи для тренировки и лучшего понимания - C++

15.07.2010, 05:53. Просмотров 352519. Ответов 1272
Метки нет (Все метки)

Ребят. Кто-нибудь может дать задачу для тренировки? Приблизительно по всему курсу С++. Буду благодарен за сложную задачу, но которую способен сделать новичок-любитель. Затраты сил-времени не важно. Главное, чтобы это было интересно и не слишком рутинно. + Если найдется человек который даст задачу просьба помогать с кодом, который я буду себя скидывать. Не переписывать за меня, но указывать на ошибки и желательно объяснять. Заранее спасибо.

Список задач, решение которых присутствует в данной теме:
41
Лучшие ответы (59)
Сообщение: #857841 Сообщение: #857861 Сообщение: #858352 Сообщение: #859371 Сообщение: #860160 Сообщение: #860255 Сообщение: #860259 Сообщение: #860317 Сообщение: #860368 Сообщение: #860466 Сообщение: #860508 Сообщение: #860720 Сообщение: #861091 Сообщение: #862174 Сообщение: #862617 Сообщение: #867259 Сообщение: #870298 Сообщение: #872053 Сообщение: #876456 Сообщение: #880114 Сообщение: #882889 Сообщение: #884418 Сообщение: #886414 Сообщение: #886989 Сообщение: #887733 Сообщение: #888464 Сообщение: #888487 Сообщение: #888941 Сообщение: #888947 Сообщение: #889040 Сообщение: #889450 Сообщение: #889587 Сообщение: #891772 Сообщение: #891790 Сообщение: #891862 Сообщение: #897758 Сообщение: #897782 Сообщение: #906325 Сообщение: #907991 Сообщение: #943672 Сообщение: #943700 Сообщение: #967735 Сообщение: #1053777 Сообщение: #1054209 Сообщение: #1083853 Сообщение: #1083928 Сообщение: #1131058 Сообщение: #1131359 Сообщение: #1273743 Сообщение: #1275465 Сообщение: #1276743 Сообщение: #1279215 Сообщение: #1282583 Сообщение: #1309088 Сообщение: #1315633 Сообщение: #1366395 Сообщение: #1550164 Сообщение: #1603678 Сообщение: #1604364
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2010, 05:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задачи для тренировки и лучшего понимания (C++):

Прошу примеров для понимания INDY - C++ Builder
Уважаемые коллеги и братья по интересу. Прошу примеров использования Indy UDP Server (TIdUDPServer) и Indy UDP Client (TIdUDPClient) для...

Ищу примеры для понимания взаимодействия Callback + event - C++ WinAPI
Господа, подкиньте плиз какой-нибудь пример для понимания взаимодействия Callback+event С самими Callback функциями вроде разобрался, а...

Элементарные программы, для лучшего понимания языка... - C++
Здравствуйте. Вот сегодня решил что пора изучать с++. Есть пару задач. Начал решать и уже на первой запоролся( суть в том чтобы определить...

Нужны задачи для тренировки - C++
Здравствуйте киньте пожалуйста задания по с++ для человека начинающего изучать Turbo с++

Нужны задачи для тренировки - C++
Киньте задачки на классы......а то в самоучителе, по которому я учу Сишку....приведены задачки, касающиеся только математики.....сами...

Нужны простые задачи для тренировки - C++
Добрый день всем:) Наверное подобных тем как я тут сотни,но всё же. Начал изучать С++(так как необходим для универа)в дальнейшем...

1272
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
02.12.2010, 14:36  [ТС] #931
Evg, Студия сие компилировать не решилась. Не в Си, не в CPP.
0
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
02.12.2010, 15:06 #932
Цитата Сообщение от Evg Посмотреть сообщение
Этот тест я запускал на intel'е и на sparc'е. Использовал gcc в режиме с оптимизациями и без оптимизаций. Получил следующие результаты:

sparc: "gcc" напечатал "0 0"
sparc: "gcc -O2" напечатал "0 0"
intel: "gcc" напечатал "0 1"
intel: "gcc -O2" напечатал "1 1"
У меня на Linux Ubuntu 10.4.1 LTS, компиль gcc, прога напечатала "0 1"
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,832
Записей в блоге: 28
02.12.2010, 15:10 #933
Цитата Сообщение от ForEveR Посмотреть сообщение
Evg, Студия сие компилировать не решилась. Не в Си, не в CPP.
Потому что __attribute__((noinline)) - это расширение компилятора gcc (забыл про это написать). Можно его удалить, но при этом надо будет смотреть код, чтобы компилятор ничего не выхерил. Хотя может быть ничего опасного компилятор и не выхерит (с виду), но у меня просто привычка страховаться от оптимизаций в коротких тестовых примерах

Добавлено через 1 минуту
Цитата Сообщение от МаксимМВ Посмотреть сообщение
У меня на Linux Ubuntu 10.4.1 LTS, компиль gcc, прога напечатала "0 1"
Запусти ещё "gcc -O2" (с оптимизациями). Ну и посмотри на программу глазами и прикинь, что на самом деле должно быть
0
kazak
3050 / 2371 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
02.12.2010, 15:10 #934
ForEveR, у меня билдер тоже отказался компилировать, пришлось __attribute__((noinline)) убрать. Выдает 0 1.
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,832
Записей в блоге: 28
02.12.2010, 15:11 #935
Цитата Сообщение от kazak Посмотреть сообщение
ForEveR, у меня билдер тоже отказался компилировать, пришлось __attribute__((noinline)) убрать. Выдает 0 1.
А с оптимизациями?
0
kazak
3050 / 2371 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
02.12.2010, 16:51 #936
Думается так
Ковыряние дизассемблерного кода и справочника по ассемблеру показало следующее. Код для обоих функций генерируется практически идентичный за некоторым исключением. В обоих случаях ll приводится к вещественному типу и результат помещаеться в регистр сопроцессора. Далее вторая функция использует непосредственно регистр, а первая - преобразованное ll (сохраняет d1) записывает в стек. При этом в 64 бита стека запихивается 80-ти битный регистр сопроцессора, достигается это путем округления числа мантиссы до значения, соответствующего размеру мантиссы приемника. Вот из-за этого округления и объясняется, на мой взгляд, разница в работе этих функций. Только вот может я что-то проглядел или недопонял, но мне кажется intel'ая верся работает правильно, а spark'ая - нет.

Цитата Сообщение от Evg Посмотреть сообщение
А с оптимизациями?
Вроде тоже самое.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
02.12.2010, 16:58  [ТС] #937
MS без оптимизаций выдает 0 1
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,832
Записей в блоге: 28
02.12.2010, 19:03 #938
to kazak
В общем-то написано всё правильно. Но на самом деле правильно работает sparc'овская версия. Потому что по стандарту в преобразовании int64->float64 должна быть потеря точности. А в коде intel'а при преобразовании int64->float80 потери не происходит. Т.е. intel'овский код работает с более высокой точностью, но это идёт в противоречии со стандартом. Возможно, что это какое-то соглашение для платформы Intel, что допустимо по умолчанию работать таким образом. Наверняка есть какие-то опции, по которым код начинает работать в строгом соответсвии со стандартом (но становится более медленным)
2
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
02.12.2010, 21:19 #939
Evg, хм...
Код
fasked@fasked:/data/develop/c> gcc main.c 
fasked@fasked:/data/develop/c> ./a.out
0 0
fasked@fasked:/data/develop/c> gcc main.c -O2
fasked@fasked:/data/develop/c> ./a.out
0 0
fasked@fasked:/data/develop/c> gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib64/gcc/x86_64-suse-linux/4.5/lto-wrapper
Target: x86_64-suse-linux
Configured with: ../configure --prefix=/usr --infodir=/usr/share/info --mandir=/usr/share/man --libdir=/usr/lib64 --libexecdir=/usr/lib64 --enable-languages=c,c++,objc,fortran,obj-c++,java,ada --enable-checking=release --with-gxx-include-dir=/usr/include/c++/4.5 --enable-ssp --disable-libssp --disable-plugin --with-bugurl=http://bugs.opensuse.org/ --with-pkgversion='SUSE Linux' --disable-libgcj --disable-libmudflap --with-slibdir=/lib64 --with-system-zlib --enable-__cxa_atexit --enable-libstdcxx-allocator=new --disable-libstdcxx-pch --enable-version-specific-runtime-libs --program-suffix=-4.5 --enable-linux-futex --without-system-libunwind --enable-gold --with-plugin-ld=/usr/bin/gold --with-arch-32=i586 --with-tune=generic --build=x86_64-suse-linux                                                                                                                                                             
Thread model: posix                                                                                                                                                                    
gcc version 4.5.1 20101116 [gcc-4_5-branch revision 166793] (SUSE Linux)
и да... march=core2
0
neske
1505 / 872 / 84
Регистрация: 26.03.2010
Сообщений: 2,987
02.12.2010, 22:17 #940
Вечер добрый
Ребят, с помощью какого алгоритма решается эта задача?

Дано N камней и их массы Wb ... Wn. Написать программу, которая распределяет камни на две кучи так, чтобы разница между массами куч была минимальной.

Простым перебором, или еще каким-то образом?
0
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
02.12.2010, 22:21 #941
neske, вот здесь было http://www.cyberforum.ru/cpp-beginne...tml#post886258
1
neske
1505 / 872 / 84
Регистрация: 26.03.2010
Сообщений: 2,987
02.12.2010, 22:30 #942
fasked, ага, спасибо
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,832
Записей в блоге: 28
02.12.2010, 22:43 #943
Цитата Сообщение от fasked Посмотреть сообщение
Evg, хм...
Говоря Intel, я небрежно выразился. Имелась в виду архитектура i386 (а у тебя x86_64). Поскольку ответ так или иначе уже был озвучен, то критичным оказалась именно архитектура i386, у которой вся плавающая арифметика выполняется на 80-битных значениях
0
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,200
Завершенные тесты: 1
02.12.2010, 22:52 #944
Чтобы было по стандарту, надо gcc, как я понял из инета, 4.5.0+ и --std=c99 или --excess-precision=standard.
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,832
Записей в блоге: 28
02.12.2010, 23:29 #945
Цитата Сообщение от Somebody Посмотреть сообщение
Чтобы было по стандарту, надо gcc, как я понял из инета, 4.5.0+ и --std=c99 или --excess-precision=standard.
Завтра поэкспериментирую с опцией --excess-precision=standard. Но если даже микрософт по умолчанию идёт вразрез со стандартом, то gcc и подавно будет делать так. Ну и, на всякий случай. Может не для всех очевидно, но несоблюдение стандартов в этом месте не является страшным. В 99.99% случаев такая работа всех устраивает. Проблемы, например, возникают на граничных условиях да и то при переезде с одной платформы на другую (как это было в нашем случае). В данном случае более высокая производительность кода является приоритетной.

Другой случай НЕследования стандарту плавающей арифметики можно наблюсти на Itanium. В режиме с оптимизациями возможны спекулятивные вычисления (т.е. упреждающее вычисление аргументов до того, как станет понятно, можно ли вообще делать эти вычисления). Такие механизмы физически не позволяют правильно выставлять exception'ы, которые положены по стандарту. В реальной жизни это практически не нужно, а потому на это дело забили. Есть всякие могучие теории на предмет того, как всё это дело можно восстановить в тех редких случаях, когда это может понадобиться, но, насколько я знаю, разработчики попросту положили на это
2
02.12.2010, 23:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.12.2010, 23:29
Привет! Вот еще темы с ответами:

Какая база требуется для понимания C++? - C++
Доброго времени суток! Возникло желание научиться работать в Си, но одолели смутные сомнения. Каюсь, ничего сложнее Pascal ABC в школьные...

Нужен пример рекурсивной функции для понимания ее назначения и практической пользы - C++
Не могу понять пользу рекурсии, может ли кто привести код в пример.

Киньте задачки для тренировки - C++
Хочу порешать задачки по C++......нужны либо книжки с задачками - либо ваши примеры.....желательно (если книжки) - чтобы там и решение...

Дайте задания для тренировки - C++
День добрый. Учу C++. Я уверен, что тут есть люди которые с ним отлично знаком и работают. Можете ли вы накидать заданий, возможно из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
945
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.