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

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

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

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

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

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

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

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

1272
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
21.01.2011, 01:17
Студворк — интернет-сервис помощи студентам
Данный код,
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
 
void func(int i) { std::cout << "f(int)"; }
void func(char* ch) { std::cout << "f(char*)"; }
 
int main()
{
    func(0)
    func(NULL);
    return 0;
}
без явного приведения типа, вызовет функцию void func(int i) дважды. Как нетрудно заметить макрос NULL со своей задачей(нулевого указателя) не справился. В грядущем Стандарте будет такая штука как nullptr, которая решит эту проблему. Собственно задание: реализовать нечто подобное nullptr средствами самого C++, чтобы в итоге func(nullptr); всётаки вызвал функцию void func(char* ch)
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
21.01.2011, 01:42
rangerx,
Посмтори(чесно, код не мой)
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
#include <iostream>
 
void func(int i) { std::cout << "f(int)"; }
void func(char* ch) { std::cout << "f(char*)"; }
 
class NullptrType
{
public:
    template <class X>
    operator X* () const
    {
        return 0;
    }
 
    template <class T, class C>
    operator T C::* () const
    {
        return 0;
    }
 
    static NullptrType const& _the()
    {
        static NullptrType const the;
        return the;
    }
 
private:
    NullptrType()
    {
    }
 
    void operator &();
};
 
namespace
{
    NullptrType const& _nullptr = NullptrType::_the();
}
 
int main()
{
    func(0);
    func(_nullptr);
    return 0;
}
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
21.01.2011, 02:11
Цитата Сообщение от asics Посмотреть сообщение
Посмтори(чесно, код не мой)
А подумать самому? Вообще, приведённый код в принципе правильный(как вариант) за исключением 32 строки.
0
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
21.01.2011, 15:08
rangerx, а разбор данной задачи будет?
0
22.01.2011, 13:48

Не по теме:

no0ker, разбаловал вас valeriikozlov)))

0
22.01.2011, 14:54

Не по теме:

silent_1991,есть маленько. хотя присутствие в этом разделе разбора задачи, не считаю чем то уж совсем выходящим за рамки приличия. тем более, что ажиотажа среди пытающихся ее решить не наблюдаю.

0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
22.01.2011, 19:25
Цитата Сообщение от no0ker Посмотреть сообщение
а разбор данной задачи будет?
А что собственно тут разбирать? asics код привёл, там всё довольно просто. Могу немного другой вариант написать разве что...
0
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
22.01.2011, 19:36
rangerx, ну, в двух словах объяснить почему null не справляется со своей задачей. и в чем основная идея кода asics. может быть ссылку дать по теме. или предложить свой вариант решения проблемы.
хотя, конечно же, можно просто отослать на яндекс.
0
2022 / 1621 / 489
Регистрация: 31.05.2009
Сообщений: 3,005
22.01.2011, 21:35
Цитата Сообщение от no0ker Посмотреть сообщение
ну, в двух словах объяснить почему null не справляется со своей задачей.
Потому что NULL это обычный макрос, в C++ имеющий вид
C++
1
#define NULL 0
Т.е. обычный 0. Между вызовом func(0) и func(NULL) нет никакой разницы.
Цитата Сообщение от no0ker Посмотреть сообщение
и в чем основная идея кода asics
Идея состоит в создании класса с шаблонными операторами преобразования: один для простого указателя, другой для указателя на член класса. Адрес у объекта этого класса(нулевого указателя) брать нельзя поэтому функция operator& помещена в секцию private и оставлена без реализации. Объект данного класса должен иметься только в одном экземпляре, для этого конструктор объявлен в закрытой части класса, а сам объект создаётся с помощью статической функции, которая возвращает константную ссылку на объявленный в ней статический константный объект. Вот собственно и всё. В результате:
1)_nullptr автоматичеки преобразуется в тип указателя, которому его пытаются присвоить;
2) сам объект на который ссылается _nullptr сущетсвует в единственном экземпляре(в виде статической локальной переменной, которую возвращает соответствующая статическая функция), других объектов, за счёт помещённого в секцию private конструктора, создать нельзя;
3) функция взятия адреса у объекта на который ссылкется _nullptr запрещена.
Надеюсь объяснил понятно...
У Майерса в книге "Эффективное использование C++" есть более простая реализация подобного класса.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const class
{
    private:
        void operator&() const; // в предыдущем варианте это функция объявлена без const
 
    public:
        template<typename T>
        operator T*() const
        {
            return 0;
        }
 
        template<typename T, typename C>
        operator T C::*() const
        {
            return 0;
        }
}nullptr = {};
7
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
24.01.2011, 21:01
Апельсины
(Время: 1 сек. Память: 16 Мб Сложность: 31%)

Катя решила пригласить к себе в гости n друзей. Так как ее друзья очень любят фрукты, то в качестве угощения для них она купила m одинаковых апельсинов.

Она хочет разрезать каждый апельсин на одинаковое число равных долек так, чтобы их можно было распределить между гостями (сама Катя апельсины есть не будет), и всем гостям досталось поровну долек.

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

Входной файл INPUT.TXT содержит два положительных целых числа n и m (1 <= n, m <= 10^9).
Выходные данные

В выходной файл OUTPUT.TXT выведите ответ на задачу.
Пример:
INPUT.TXT

2 5
OUTPUT.TXT
2

Пример:
INPUT.TXT

2 4
OUTPUT.TXT
1
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
24.01.2011, 21:19
Если так:
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
#include <iostream>
#include <fstream>
 
typedef long int T_num;
 
T_num NOD(T_num a, T_num b)
{
    while(a > 0 && b > 0)
 
        if(a > b)
            a %= b;
 
        else
            b %= a;
 
    return a + b;
}
 
int main()
{
    T_num n, m;
    std::ifstream ifs("INPUT.TXT");
    std::ofstream ofs("OUTPUT.TXT");
 
    ifs >> n >> m;
    ofs << ( n / NOD(n, m));
    return 0;
}
1
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
24.01.2011, 21:35
asics, Все тесты пройдены.

Добавлено через 10 минут
Чувствую задача была очень легкой (даже разбора не требуется), тогда чуть посложнее:
Последняя цифра N!
(Время: 1 сек. Память: 16 Мб Сложность: 39%)

Требуется найти последнюю ненулевую цифру числа N! = 1*2*3*…*N.
Входные данные

Входной файл INPUT.TXT содержит единственное натуральное число N (N<=9999).
Выходные данные

В выходной файл OUTPUT.TXT выведите ответ на задачу.
Пример
INPUT.TXT

1
OUTPUT.TXT
1

Пример
INPUT.TXT

5
OUTPUT.TXT
2
2
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.01.2011, 00:52
Требуется найти последнюю ненулевую цифру числа N! = 1*2*3*…*N.
Входные данные
Входной файл INPUT.TXT содержит единственное натуральное число N (N<=9999).
Выходные данные
В выходной файл OUTPUT.TXT выведите ответ на задачу.
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
#include <fstream>
 
long fact( int n )
{
    return n - 1 ? n*fact(n-1) : 1;
}
 
int main()
{
    std::ifstream inf("INPUT.TXT");
    int N, result;
    inf >> N;
    long n = fact( N );
    if( N > 3 ) 
    {
    while( !( n % 10 ) ) n /= 10;
    result = n % 10;
    }
    else result = n;
    std::ofstream outf("OUTPUT.TXT");
    outf << result;
    inf.close();
    outf.close();
    return 0;
}
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
25.01.2011, 00:57
Maxwe11, Ты в самом деле думаеш, что в long поместиться факториал числа 9999 ? Оо
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.01.2011, 01:05
можно дописать double ))
0
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
25.01.2011, 01:06
Maxwe11, Ты издиваешся ?
0
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.01.2011, 01:34
к лонгу дописать double получится long double ну или long long

Добавлено через 25 минут
проверил на больших числах long long дает сбои), окончательный вариант)
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
#include <fstream>
 
__int64 fact( int n )
{
    return n - 1 ? n * fact(n - 1) : 1;
}
 
int main()
{
    std::ifstream inf("INPUT.TXT");
    int N, result;
    inf >> N;
    __int64 n = fact( N );
    if( N > 3 ) 
    {
    while( !( n % 10 ) ) n /= 10;
    result = n % 10;
    }
    else result = n;
    std::ofstream outf("OUTPUT.TXT");
    outf << result;
    inf.close();
    outf.close();
    return 0;
}
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.01.2011, 02:27  [ТС]
Maxwe11, Не влезет. Тут на длинную арифметику
0
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
25.01.2011, 05:32
что значит последнюю цифру? то есть ту которая отвечает за единицы? или с другой стороны - которая отвечает за количество стомильонмильярдов?
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
25.01.2011, 06:01
no0ker, Для числа 123456789000 - последняя цифра это 0, а последняя ненулевая 9

Добавлено через 40 секунд
Т.е. нам нужно найти как раз последнюю ненулевую

Добавлено через 10 минут
Цитата Сообщение от ForEveR Посмотреть сообщение
Maxwe11, Не влезет. Тут на длинную арифметику
Даю подсказку: я в своем решении длинную арифметику не использовал. Обошелся простым int. Например если N большое, то при его вычислении последние цифры будут нули. И чем дальше, тем этих нулей больше. А на значение последней ненулевой цифры эти нули не окажут влияния.
(Подсказка не полная, я бы сказал на половину).
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.01.2011, 06:01
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
1160
Закрытая тема Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru