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

C++

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

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

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

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

Список задач, решение которых присутствует в данной теме:
42
Лучшие ответы (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
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
27.07.2010, 14:00 #211
Цитата Сообщение от Kastaneda Посмотреть сообщение
сейчас случайно в инете нашел более подробное описание
И что здесь сказано такого чего не сказал я? )) В стандарте кстати это п. 8.x(8.2 или 8.3... точно не помню )) )
По теме: Попробуйте реализовать калькулятор, который бы умел считать вводимые пользователем выражения, например (2+10)*2+1.0/2
---
P.S. Ну и ещё такое несложное задание: написать макрос, котрый бы выполнял функцию такого цикла как foreach, т.е.
C++
1
2
3
4
foreach(int i, array)
{
    std::cout << i << std::endl; 
}
должен поочерёдно вывести на экран все элементы массива array(массив естественно НЕ динамический).
0
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
27.07.2010, 14:11 #212
rangerx, буду признателен если кто нить обяснит что такое макрос

Добавлено через 1 минуту
Хохол, блин, почему я сам не додумался... спасибо
0
Kastaneda
Jesus loves me
Эксперт С++
4701 / 2905 / 239
Регистрация: 12.12.2009
Сообщений: 7,399
Записей в блоге: 2
Завершенные тесты: 1
27.07.2010, 14:28 #213
Цитата Сообщение от nikkka Посмотреть сообщение
буду признателен если кто нить обяснит что такое макрос
Например:
C++
1
2
3
4
5
6
7
8
9
//Вспомогательный макрос для вывода строки и значения
#define PRINT (STR, VAR) \
cout<<STR " = "<<VAR<<endl;
//////////////////
int main (){
int x=5;
PRINT ("X",x);
/////////////////////
}
1
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
27.07.2010, 14:33 #214
Kastaneda, но для этого же функции существуют...
1
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
27.07.2010, 14:41 #215
Цитата Сообщение от nikkka Посмотреть сообщение
Kastaneda, но для этого же функции существуют...
Есть кое-что, что не могут сделать функции. Существуют различные примеры, демонстрирующий операторы, доступные препроцессору (#, ## и #@). В частности, предыдущий пример можно переписать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <string>
 
#define print(X) std::cout << #X << " = " << X << std::endl;
 
int main()
{
    int a = 5;
    std::string buffer("Preproccessor's operator #");
    print(a);
    print(buffer);
    system("pause");
    return EXIT_SUCCESS;
}
Добавлено через 4 минуты
Есть также существенные различия между макросами и функциями:
  1. Функции "вызываются", что увеличивает затраты на время выполнения программы, в то время как препроцессор "подставляет" тело макроса в исходный код программы, что увеличивает ее размер. Таким образом, макросы выполняются быстрее функций
  2. Для макросов отсутствует проверка типов, ввиду того, что в определении макроса типы параметров не указываются. Это может стать источником ошибок
1
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
27.07.2010, 14:48 #216
Цитата Сообщение от Nameless One Посмотреть сообщение
Есть кое-что, что не могут сделать функции.
а... на пример функция должна принимать определённые тип, а макрос может любой, так? и не смотря на то что для подобных случеев есть перегрузка функции, соглашаюсь что это удобнее чем писать на каждый тип по функции...
спасибо!...

Добавлено через 3 минуты
Nameless One, а что будет если я создам макрос который выводит ВТОРОЙ элемент массива, а передам ему тип int?

Добавлено через 53 секунды
будет то же самое как если бы я написал
C++
1
int i=5; cout<<i[2]
?
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
27.07.2010, 15:00 #217
Цитата Сообщение от nikkka Посмотреть сообщение
а... на пример функция должна принимать определённые тип, а макрос может любой, так?
Вообще-то я хотел акцентировать внимание именно на операторах, доступных препроцессору (и только препроцессору):
  1. Оператор "#" конвертирует параметр макроса в строку. В моем примере он использовался для того, чтобы вывести на экран имя переменной вместе с ее значением (опять-таки, независимо от типа переменной);
  2. Оператор "#@" действует подобно предыдущему оператору, но конвертирует параметр не в строку, а символ;
  3. Оператор "##" объединяет два идентификатора.



Добавлено через 7 минут
Цитата Сообщение от nikkka Посмотреть сообщение
соглашаюсь что это удобнее чем писать на каждый тип по функции...
Вот тут есть подвох. К примеру, можно написать макрос для вычисления минимума из двух элементов:
C
1
#define min(a, b) ( (a) < (b) ? (a) : (b) )
Но если "вызвать" этот макрос для двух строк С, то он не будет работать правильно, т.к. для сравнения строк используются специальные функции.
В данном случае лучше было бы использовать шаблонные функции и специализировать шаблон для const char*.

Добавлено через 2 минуты
Цитата Сообщение от nikkka Посмотреть сообщение
Nameless One, а что будет если я создам макрос который выводит ВТОРОЙ элемент массива, а передам ему тип int?
По идее, это ошибка. Но ms vc ее видит еще до компиляции. Как происходит дело с другими компиляторами/IDE, я не знаю.
2
rangerx
1937 / 1546 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
27.07.2010, 15:24 #218
Цитата Сообщение от Nameless One Посмотреть сообщение
Функции "вызываются", что увеличивает затраты на время выполнения программы, в то время как препроцессор "подставляет" тело макроса в исходный код программы, что увеличивает ее размер. Таким образом, макросы выполняются быстрее функций
Это справедливо скорее для C, чем для C++. В C++ есть такая штука как inline функции.
Цитата Сообщение от Nameless One Посмотреть сообщение
Вот тут есть подвох. К примеру, можно написать макрос для вычисления минимума из двух элементов:
C
1
#define min(a, b) ( (a) < (b) ? (a) : (b) )
Но если "вызвать" этот макрос для двух строк С, то он не будет работать правильно, т.к. для сравнения строк используются специальные функции.
Ну, про строки это ещё ничего:
C++
1
2
3
4
5
int a = 1;
int b = 2;    
min(++a, ++b);        
std::cout << "a: " << a << std::endl;
std::cout << "b: " << b << std::endl;
0
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
27.07.2010, 15:28 #219
тело макроса заключено в собки "(" и ")", как я понял.
вот только правельно ли я понял...

Добавлено через 2 минуты
чё за... почему a=b?!?!?!?! О.О
Цитата Сообщение от rangerx Посмотреть сообщение
Ну, про строки это ещё ничего:
C++
1
2
3
4
5
int a = 1;
int b = 2; 
min(++a, ++b); 
std::cout << "a: " << a << std::endl;
std::cout << "b: " << b << std::endl;
0
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
27.07.2010, 15:38 #220
Тело макроса - это все то, что идет после #define ИМЯ_МАКРОСА(ПАРАМЕТРЫ)
Скобки нужны для того, чтобы не напутать с приоритетами операций. К примеру, если проанализировать следующую программу:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
 
#define sum(a, b) a + b
int main()
{
    int x = 5 * sum(2, 3);
    system("pause");
    return EXIT_SUCCESS;
}
Казалось бы, по задумке при подстановке макроса должно было получиться такое выражение:
C++
1
int x = 5 * (2 + 3);
Но получилось такое:
C++
1
int x = 5 * 2 + 3;
В результате, мы имеем совсем не то, что хотели.
Также параметрами макроса могут быть не отдельные объекты, а выражения, поэтому в теле макроса параметры лучше тоже заключать в скобки.
Наиболее "правильный" вариант должен был выглядеть так:
C++
1
2
#define sum(a, b) \
    ((a) + (b))
Заметь, здесь символ '\' означает перенос строки; его нужно использовать тогда, когда твой макрос не влезает в одну строку, иначе все последующие строки препроцессор не отнесет к макросу.
К макросам нужно относиться с осторожностью, что уже показал rangerx.

Добавлено через 2 минуты
Цитата Сообщение от nikkka Посмотреть сообщение
чё за... почему a=b?!?!?!?! О.О
Вспомни, что препроцессор производит подстановку тела макроса и что в параметрах макроса можно передавать выражение. Так что подсчитай, сколько раз выполнится инкремент для каждой из переменных (с учетом того, что последнее выражение тернарного оператора "?:" вычисляться не будет, т.к. условие оператора является истинным)
1
nikkka
27.07.2010, 15:42
  #221

Не по теме:

Nameless One, rangerx, из всего сказанного выше, я понял что макросы это целый раздел, и на форуме его вопроссами не выучешь. спасибо всем. я удаляюсь в дебри интернета в поисках книжки или статьи.

0
Nameless One
27.07.2010, 16:02
  #222

Не по теме:

Можешь особо на них не заморачиваться, при разработке программ C/C++ писать макросы (по крайней мере мне) приходится не часто. В принципе, я использую только один макрос, который выводит приглашение для ввода переменной (выводит ее имя) и осуществляет этот ввод. Наиболее полезен он с матрицами и массивами:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
#define GET(ARR, I, J) \
    { \
        std::cout << #ARR << "[" << I << "][" << J << "]: "; \
        std::cin >> ARR[I][J];\
    }
 
int main()
{
    int myArray[2][3];
    for(size_t i = 0; i < 2; ++i)
        for(size_t j = 0; j < 3; ++j)
            GET(myArray, i, j);
    for(size_t i = 0; i < 2; ++i, std::cout << std::endl)
        for(size_t j = 0; j < 3; std::cout << myArray[i][j] << "\t", ++j)
            ;
    system("pause");
    return EXIT_SUCCESS;
}
А в С макросы использовались для создания констант, т.к. ключевого слова const в нем не было

2
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
27.07.2010, 16:44 #223
и последнее. где можно объявлять макросы?
0
ForEveR
В астрале
Эксперт С++
7985 / 4744 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
27.07.2010, 16:49  [ТС] #224
nikkka, Глобально.

C++
1
#define PI 3.14
- это между прочим тоже макрос
1
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
27.07.2010, 16:52 #225
Объявление макроса может быть где угодно, т.к. препроцессор обрабатывает твой исходный код еще до компиляции. После обработки препроцессором уже от самого макроса в твоей программе ничего не останется - препроцессор подставит тело макроса в нужные места.
Другое дело, я где-то слышал, что некоторые компиляторы требуют, чтобы директивы препроцессора начинались с начала строки

Добавлено через 1 минуту
Таким образом, можно объявить макрос хоть в теле функции main. Однако обычно макросы пишут после директив #include с целью повысить читаемость кода.
1
27.07.2010, 16:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.07.2010, 16:52
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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