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

C++

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

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

15.07.2010, 05:53. Просмотров 353719. Ответов 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
Kastaneda
31.10.2010, 06:34     Задачи для тренировки и лучшего понимания
  #811

Не по теме:

Если я не ошибаюсь, то про эту игру я прочитал в книге Зубкова "Ассемблер что-то там", я перелистаю ее на досуге и уточню, какой рекордно минимальный объем екзешника (правда там данные на момент написания книги, конец 80х - начало 90х)

0
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,127
Записей в блоге: 29
31.10.2010, 10:26 #812
Два кода сравнивать по размеру уместно только тогда, когда они работают на одной и той же платформе или близких по реализации платформах. Грубо говоря, код printf ("Hello world") может занимать (условно говоря) 100 байт, потому как код функции printf находится в динамической библиотеке и в программу не включается. А может занимать и 100 килобайт, потому что программа слинкована статически. Ну и так далее.

Глядя на код на скриншоте из поста #808, я тупо не верю, что он занимает 9.5 килобайт, потому как одна только реализация new весит куда больше. Объём исходников - может быть и 9.5 килобайт, но никак не объём кода. Т.е. сравнивать такой код с ассемблерной программой под DOS, где скорее всего не было вообще никаких библиотечных вызовов - это сравнивать пипиську и жёлтый цвет, ибо это абсолютно перпендикулярные вещи
1
МаксимМВ
C/C++
90 / 90 / 5
Регистрация: 01.07.2010
Сообщений: 281
31.10.2010, 20:21 #813
Вот моё решение задачи игра "Жизнь" в консольной и OpenGl реализации. Смотрите архив.
0
Вложения
Тип файла: zip livegame.zip (8.0 Кб, 30 просмотров)
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,127
Записей в блоге: 29
02.11.2010, 18:58 #814
Задача на знание синтаксиса языка Си

Функция ожидает параметром указатель на двумерный массив [4][5]. Фактически мы вместо этого можем подать указатель на одномерный массив [20]. Т.е. исходник будет выглядеть как:

C
1
2
3
4
5
6
7
8
extern f (int a[4][5]);
 
int b[20];
 
void func (void)
{
  f (b);
}
Т.е. это совершенно рабочий код (при условии что внутренности массива b у нас будут разложены так, как они были бы в двухмерном массиве). Однако при компиляции будет выдаваться предупреждение (из-за несоответсвия типов):

Код
$ gcc t.c -c
t.c: In function 'func':
t.c:7: warning: passing argument 1 of 'f' from incompatible pointer type
Напишите оператор приведения типа, чтобы предупреждение пропало. Т.е. как с точки зрения языка Си написать правильное приведение типа в данном случае. Я бы рекомендовал при ответе на вопрос НЕ пользоваться компилятором, потому как в некоторых компиляторах выдаётся более детализованная диагностика, чем в gcc, а такая диагностика может дать подсказку
1
#pragma
Временно недоступен
954 / 225 / 6
Регистрация: 12.04.2009
Сообщений: 921
02.11.2010, 22:57 #815
Evg, интересно )
Моё предположение
C
1
2
3
4
5
6
7
8
extern f (int a[4][5]);
 
int b[20];
 
void func (void)
{
  f ((&[][])b);
}
0
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,127
Записей в блоге: 29
02.11.2010, 23:12 #816
#pragma, у тебя gcc, так что можно с компилятором экспериментировать. Хз может последние версии и болтливые, но в таких случаях gcc ограничивается фразой, что дескать тут тип указателя не тот
1
fasked
Эксперт С++
4957 / 2537 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
03.11.2010, 21:58 #817
Не то чтобы это задачка, но все же напишу.

Сегодня наткнулся на неожиданное отличие Си от Си++ (для меня во всяком случае).
Вот такой код отлично компилируется g++.
C++
1
2
3
4
5
int main()
{
        int a = 0, b = 0;
        a == 1 ? a = 0 : b = 1;
}
И тот же самый код при компиляции gcc приводит к такой ошибке:
Код
main.c:4:2: error: lvalue required as left operand of assignment
Теперь, чтобы сообщение содержало хоть какой-то вопрос.
Как избавиться от ошибки при компиляции?
0
ForEveR
В астрале
Эксперт С++
7985 / 4744 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
03.11.2010, 22:01  [ТС] #818
Вот так)
C
1
2
3
4
5
int main()
{
        int a = 0, b = 0;
        a == 1 ? (a = 0) : (b = 1);
}
0
fasked
Эксперт С++
4957 / 2537 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
03.11.2010, 22:06 #819
Цитата Сообщение от ForEveR Посмотреть сообщение
Вот так
достаточно было бы скобок в одном выражении, в том, что справа.
C
1
a == 1 ? a = 0 : (b = 1);
0
Somebody
2791 / 1602 / 148
Регистрация: 03.12.2007
Сообщений: 4,200
Завершенные тесты: 1
04.11.2010, 00:07 #820
Цитата Сообщение от Evg Посмотреть сообщение
Напишите оператор приведения типа, чтобы предупреждение пропало.
Вроде так
Долго до меня доходило... Эта четвёрка просто сбивает с толку.
C
1
f((int(*)[5])b);


Добавлено через 30 минут
Наверное, не для всех это очевидно, поэтому:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
 
using namespace std;
 
class qq0
{
public:
    virtual void msg(int n = 0)
    {
        cout << "qq0(" << n << ")" << endl;
    }
};
 
class qq1 : public qq0
{
public:
    virtual void msg(int n = 1)
    {
        cout << "qq1(" << n << ")" << endl;
    }
};
 
int main()
{
    qq0* c = new qq1;
    c->msg();
    delete c;
    cin.peek();
}
Что будет выведено?
0
ForEveR
В астрале
Эксперт С++
7985 / 4744 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
04.11.2010, 00:09  [ТС] #821
Somebody,
Попытка
Если я еще не совсем убился - то
qq1(0)
0
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,127
Записей в блоге: 29
04.11.2010, 00:26 #822
Цитата Сообщение от fasked Посмотреть сообщение
Не то чтобы это задачка, но все же напишу.

Сегодня наткнулся на неожиданное отличие Си от Си++ (для меня во всяком случае).
Вот такой код отлично компилируется g++.
C++
1
2
3
4
5
int main()
{
        int a = 0, b = 0;
        a == 1 ? a = 0 : b = 1;
}
И тот же самый код при компиляции gcc приводит к такой ошибке:
Код
main.c:4:2: error: lvalue required as left operand of assignment
Теперь, чтобы сообщение содержало хоть какой-то вопрос.
Как избавиться от ошибки при компиляции?
Эту хрень мы уже обсуждали. Вот нашёл только одну ссылку (начало где-то в той же теме, но сентенция в указанном посте).
Приведите 10 примеров непереносимого кода
Но вроде бы где-то ещё было
0
Somebody
2791 / 1602 / 148
Регистрация: 03.12.2007
Сообщений: 4,200
Завершенные тесты: 1
04.11.2010, 12:27 #823
ForEveR, правильно
0
Evg
Эксперт CАвтор FAQ
18449 / 6499 / 454
Регистрация: 30.03.2009
Сообщений: 18,127
Записей в блоге: 29
04.11.2010, 12:38 #824
C
1
2
3
4
5
6
main() 
{ 
       int i, N=20; 
       for(i = 0 ; i < N ; i--) 
               printf("*"); 
}
Найдите три способа поменять в этом коде один символ, чтобы в результате код печатал 20 звездочек. Менять можно только по одному символу, ничего нельзя переставлять или передвигать

Добавлено через 4 минуты
Пишу "три способа", потому как в своё время мы только три нашли. Фиг знает, может есть ещё. Нашли ещё один способ, при котором печатается 21 звёздочка
0
silent_1991
Эксперт С++
4993 / 3051 / 149
Регистрация: 11.11.2009
Сообщений: 7,038
Завершенные тесты: 1
04.11.2010, 12:42 #825
1 способ
C
1
2
3
4
5
6
main() 
{ 
       int i, N=20; 
       for(i = 0 ;-i < N ; i--) 
               printf("*"); 
}
0
04.11.2010, 12:42
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2010, 12:42
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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