Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/2345: Рейтинг темы: голосов - 2345, средняя оценка - 4.54
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562

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

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

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

Список задач, решение которых присутствует в данной теме:
44
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
15.07.2010, 05:53
Ответы с готовыми решениями:

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

Задачи для тренировки и лучшего понимания языка
Предлагаю в этой теме размещать задачи, которые помогут новичкам (и не только) более детально разобраться в основах языка. При размещении...

Литература для лучшего понимания сути программирования
Привет! Подскажите литературу, которая поможет разобраться в сути самого процесса программирования, поможет изучить теорию алгоритмов,...

1272
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
27.02.2011, 21:54
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от delete1991 Посмотреть сообщение
a=b+0;
b=a+0;
После выполнения этих строк и a и b будут равны b.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.03.2011, 05:59  [ТС]
Для тех кто не читал Саттера - будет интересно.
Кто читал - итак знает.

Является данный код корректным с точки зрения гарантии безопасности исключений?
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <memory>
 
template<class T, class T1>
void f(std::auto_ptr<T> one, std::auto_ptr<T1> sec)
{
    //Некий код, не имеющий отношения к делу.
}
 
int main()
{
    f(std::auto_ptr<int>(new int), std::auto_ptr<double>(new double));
}
Если да - почему?
Если нет - почему и как сделать, чтобы являлся?
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
20.03.2011, 14:01
ForEveR
Не является. В точке вызова f возможна утечка памяти. Первыми будут выполнены операторы выделения памяти (порядок выполнения никак не оговаривается) и если первый выполнится удачно, а второй вызовет исключение, то будем иметь утечку.
Решение:
C++
1
2
3
4
std::auto_ptr<int>    one   (new int);
std::auto_ptr<double> second(new double);
 
f(one, second);
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21285 / 8310 / 637
Регистрация: 30.03.2009
Сообщений: 22,671
Записей в блоге: 30
20.03.2011, 16:37
CyBOSSeR
По-моему в вопросе про другое спрашивалось. А то, о чём писал ты, оно будет точно такой же проблемой как и в варианте без auto_ptr (т.е. просто с new)
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
20.03.2011, 18:41
Evg
Да, но в данном случае auto_ptr имеются и благодаря им проблему можно решить и сделать код безопасным относительно исключений, что и показано в коде решения.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.03.2011, 20:19  [ТС]
2Evg
Evg, Нет. Он прав.


2CyBOSSeR
CyBOSSeR, Да. Именно так. Но подозреваю дичайше, что ты читал Саттера)


Добавлено через 4 минуты
Еще задачка. Строго желательно решать без компиля, иначе все сразу видно. Собственно на знание стандарта и/или Саттера.
Достаточно для работы программы так обработать исключение?
Другими словами, может-ли конструктор "поглотить" выброшенное исключение?
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
30
31
32
33
34
35
36
#include <iostream>
 
struct A
{
    A()
    {
        throw std::exception("A() exception");
    }
};
 
struct B
{
    B()
    {
        throw std::exception("B() exception");
    }
};
 
struct C:private A
{
    C()
    try:A(), b_()
    {
    }
    catch(const std::exception& e)
    {
        std::cerr<<e.what()<<'\n';
    }
private:
    B b_;
};
 
int main()
{
    C c;
}
0
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
20.03.2011, 21:03
ForEveR
ForEveR, могу ошибаться, но по-моему в стандарте оговорено, что даже если в конструкторе отловлено исключение, то оно обязано быть выброшенным повторно, так что если не поставить дополнительное try {} catch(){} в main'е, то повторно выброшенное исключение от A даст ошибку. Так что такой меры недостаточно.
1
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.03.2011, 21:22  [ТС]
Ma3a
Ma3a, Под кат спрячь. Может кто еще ответить захочет. А так да. Верно.


Добавлено через 13 минут
Напишите почти строго безопасный оператор копирующего присваивания для класса
C++
1
template<class T> class Some_class
.
Определение класса решите сами, какое будет.
Как минимум должно быть такое.

C++
1
2
3
4
5
6
7
8
template<class T> class Some_class//:зависит от реализации.
{
public:
   Some_class();
   Some_class& operator =(const Some_class& other);
private:
   //T arg; зависит от реализации
};
1
20.03.2011, 21:57

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
Но подозреваю дичайше, что ты читал Саттера)
Неа, до Саттера руки не дошли, но вот до Майерса дотянулись;).

1
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
21.03.2011, 22:24
ForEveR
Честно говоря,ничего более толкового в голову не пришло, кроме как сделать функцию-переходник, для которой запрещено выбрасывание исключений. вышло в самом грубом приближении так
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
30
31
32
33
34
35
36
37
38
39
40
41
template <typename T> 
class Some_class
{
public:
   Some_class(T _arg = T());
   Some_class& operator =(Some_class const & other);
 
   void swap(Some_class & other) throw();
private:
   T arg;
};
 
template <typename T>
Some_class<T>::Some_class(T _arg)
    {
    arg = _arg;
    }
 
template <typename T>
void Some_class<T>::swap(Some_class<T> & other) throw()
    {
    T temp = other.arg;
    other.arg = this->arg;
    this->arg = temp;
    }
 
template <typename T>
Some_class<T> & Some_class<T>::operator=(Some_class const & other)
    {
    Some_class<T> temp(other);
 
    swap(temp);
 
    return *this;
    }
 
int main()
    {
    Some_class<int> A(10),B;
    B = A;
    }
Тогда вроде как удается избежать возможных проблем с исключениями, если "задавить" их таким ходом.


Добавлено через 23 часа 20 минут
Also 2ForEveR

Погорячился я с такой реализацией )
Вообще говоря, насколько я понимаю строго безопасную обработку исключений, при случае чего плохого, состояние объекта должно остаться неизменным, то есть в случае чего нужно откатить все изменения без порчи ссылок и прочего, я правильно понимаю?
Тогда если действовать в соответствии с таким принципом, то приходится извернуться со ссылками и накрутить нечто с std::auto_ptr, так как ни один его член не может выкинуть исключение и вообще семантика как раз располагает к пользованию безопасных указателей
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
30
31
32
33
34
35
36
37
38
39
40
41
42
template <typename T> 
class Some_class
    {
    public:
        Some_class();
        Some_class(Some_class<T> const & other);
        Some_class& operator =(Some_class const & other);
 
        void swap(Some_class & other) throw();
    private:
        std::auto_ptr<T> arg;
    };
 
template <typename T>
Some_class<T>::Some_class()
    : arg(new T())
    {
    }
 
template <typename T>
Some_class<T>::Some_class(Some_class<T> const & other)
    : arg(new T(*other.arg))
    {
    }
 
template <typename T>
void Some_class<T>::swap(Some_class<T> & other) throw()
    {
    std::auto_ptr<T> temp(arg);
    arg = other.arg;
    other.arg = temp;
    }
 
template <typename T>
Some_class<T> & Some_class<T>::operator=(Some_class const & other)
    {
    Some_class<T> temp(other);
 
    swap(temp);
 
    return *this;
    }
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
22.03.2011, 00:41  [ТС]
2Ma3a
Ma3a, Да. Вполне вариант. По книжке Саттера предпочтительнее похожий, но несколько другой вариант.

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
template<class T>
class SomeClass
{
public:
    SomeClass(T arg=0):impl_(new SomeClassImpl(arg))
    {
    }
    ~SomeClass()
    {
    }
    SomeClass(const SomeClass& other):impl_(new T(*other.impl_))
    {
    }
    SomeClass& operator =(const SomeClass& other)
    {
        SomeClass tmp(other);
        Swap(tmp);
        return *this;
    }
private:
    class SomeClassImpl;
    std::auto_ptr<SomeClassImpl> impl_;
    void Swap(SomeClass& other)
    {
        std::auto_ptr<SomeClassImpl> tmp(impl_);
        impl_=other.impl_;
        other.impl_=tmp;
    }
};
 
template<class T>
class SomeClass<T>::SomeClassImpl
{
public:
    SomeClassImpl(T arg_=0):arg(arg_)
    {
    }
    ~SomeClassImpl()
    {
    }
    SomeClassImpl(const SomeClassImpl& other):arg(other.arg)
    {
    }
    SomeClassImpl& operator =(const SomeClassImpl& other)
    {
        SomeClassImpl tmp(other);
        Swap(tmp);
        return *this;
    }
private:
    T arg;
    void Swap(SomeClassImpl& other)
    {
        std::swap(arg, other.arg);
    }
};
0
Эксперт С++
623 / 467 / 57
Регистрация: 28.01.2011
Сообщений: 605
22.03.2011, 23:04
ForEveR
Хм, была такая мысль, но я посчитал, что инкапсулировать объект класса T в еще одной скрытой внутренней реализации для Some_class будет излишне, хотя паттерн конечно замечательный Саттера не читал, как-то не дошли руки до сих пор, но Майерса давно начинал читать, там было что-то похожее, надо будет наконец дочитать.
1
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 4
10.04.2011, 06:29
привет всем.недавно зарегился на mipt пытаюсь решить задачу 201 почему-то не проходит мое решение оно я думаю n*ln(n).
Так ли это,если ошибаюсь объясните плиз,задача вроде легкая.
0
Эксперт С++
 Аватар для Хохол
476 / 444 / 34
Регистрация: 20.11.2009
Сообщений: 1,293
10.04.2011, 08:26
Конечно, местные гуру способны оценить асимптотику твоего решения по одной лишь ауре твоего поста.
0
Заблокирован
10.04.2011, 08:38
Цитата Сообщение от carlilenny Посмотреть сообщение
привет всем.недавно зарегился на mipt пытаюсь решить задачу 201 почему-то не проходит мое решение оно я думаю n*ln(n).
Так ли это,если ошибаюсь объясните плиз,задача вроде легкая.
Моё решение. Но оно по time limit не проходит

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <stdlib.h>
#include <stdio.h>
 
#define SIZE 4
 
inline int is_decision(const int* const xs, const int n)
{
    int sum = 0;
 
    for (int i = 0; i < SIZE; i++)
        sum += xs[i] * (i + 1);
 
    return sum == n;
}
 
inline int max_value(const int* const xs, const int idx, int n)
{
    int sum = 0;
 
    for (int i = idx + 1; i < SIZE; i++)
        sum += xs[i] * (i + 1);
 
    n -= sum;
    return n / (idx + 1);
}
 
int calc(int n)
{
    int count, idx = 0, to = SIZE - 1;
    int xs[SIZE] = {0};
 
    count = !n;
 
    do
    {
        xs[0]++;
 
        for (int i = 0; i < to; i++)
            if (xs[i] > max_value(xs, i, n))
            {
                xs[i] = 0;
                xs[i + 1]++;
            }
 
        count += is_decision(xs, n);
    } while (xs[SIZE - 1] * SIZE <= n);
 
    return count;
}
 
int main(void)
{
    int n;
    scanf("%d", &n);
    printf("%d", calc(n));
    return 0;
}
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
10.04.2011, 10:40
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
/////////////////////////////////////////////////////////////////////////////////////////
//Найдите количество решений уравнения 
//x1 + 2x2 + 3x3+ 4x4= n,     где n и xi — неотрицательные целые числа.
//Вход: одна строка, содержащая число n < 1000. 
//Выход: одна строка, содержащая количество решений уравнения.
//ВХОД #1:
//3
//ВЫХОД #1:
//3
//
//ВХОД #2:
//10
//Выход #2:
//23
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
int  get_solutions_total_for(int  n)
{
    int  res = 0;
    for(int  dig_4 = 0; dig_4 <= n / 4; ++dig_4)
    {
        for(int  dig_3 = 0; dig_3 <= (n - 4 * dig_4) / 3; ++dig_3)
        {
            int  rem = n - 4 * dig_4 - 3 * dig_3;
            if(rem >= 0)
            {
                res += rem / 2 + 1;
            }            
        }    
    }
    return  res;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    const int  MAX_N = 999;
    int  n = 0;
    do
    {
        std::cout << "Введите n < "
                  << MAX_N + 1 
                  << ": ";
 
        std::cin >> n;
    }while(MAX_N < n);
 
    std::cout << "Уравнение x1 + 2x2 + 3x3 + 4x4 = "
              << n
              << std::endl
              << "имеет "
              << get_solutions_total_for(n)
              << " решений."
              << std::endl;   
}
1
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 4
11.04.2011, 14:11
снова mipt пытаюсь решить задачу 001
мой код не проходит 7 тест в чем проблема?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdlib.h>
#include<stdio.h>
#define x 2
#define EOF (-1)
int  a[x];
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main(void)
{
register int i=x;
while(i!=EOF)
{
scanf("%ld",&a[i]) ;
i--;
}
qsort (a, x, sizeof(int), compare);
printf("%ld",a[x-1]);
 
return 0;
}
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
11.04.2011, 14:16  [ТС]
carlilenny,
C
1
#define x 2
???
0
0 / 0 / 0
Регистрация: 10.04.2011
Сообщений: 4
11.04.2011, 14:20
там типа #define x 10000
0
Заблокирован
11.04.2011, 16:04
Mr.X, тесты оно прошло?

Цитата Сообщение от carlilenny Посмотреть сообщение
снова mipt пытаюсь решить задачу 001
мой код не проходит 7 тест в чем проблема?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdlib.h>
#include<stdio.h>
#define x 2
#define EOF (-1)
int  a[x];
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main(void)
{
register int i=x;
while(i!=EOF)
{
scanf("%ld",&a[i]) ;
i--;
}
qsort (a, x, sizeof(int), compare);
printf("%ld",a[x-1]);
 
return 0;
}
Штоэто за кусорт? Зачем?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <limits.h>
 
int main(void)
{
    int max = INT_MIN;
    int curr;
 
    while (scanf("%d", &curr) != EOF)
        max = curr > max ? curr : max;
    printf("%d", max);
    return 0;
}

А, вообще, мне кажется, как-то ну совсем не хорошо разбирать подобные задачи на форуме. Люди ж там типа соревнуются, а ты приходишь и выпрашиваешь готовые ответы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.04.2011, 16:04

Набор задачь для тренировки и улучшения понимания программирования
Добрый вечер всем. Если кто знает модскажите где можно найти подобный набор задачь...

Проверить на правильность и закомментировать весь код для лучшего понимания
Всем здравствуйте. Условие задачи - Заданная матрица целых чисел размером (N, N). Найти среднее арифметическое элементов в окрашенной...

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

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

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


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

Или воспользуйтесь поиском по форуму:
1240
Закрытая тема Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru