Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/2010: Рейтинг темы: голосов - 2010, средняя оценка - 4.88
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
1

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

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

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

Список задач, решение которых присутствует в данной теме:
43
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.07.2010, 05:53
Ответы с готовыми решениями:

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

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

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

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

1272
1992 / 1592 / 488
Регистрация: 31.05.2009
Сообщений: 2,980
21.01.2011, 01:17 1141
Данный код,
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
Эксперт С++
2871 / 1806 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
21.01.2011, 01:42 1142
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
1992 / 1592 / 488
Регистрация: 31.05.2009
Сообщений: 2,980
21.01.2011, 02:11 1143
Цитата Сообщение от asics Посмотреть сообщение
Посмтори(чесно, код не мой)
А подумать самому? Вообще, приведённый код в принципе правильный(как вариант) за исключением 32 строки.
0
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
21.01.2011, 15:08 1144
rangerx, а разбор данной задачи будет?
0
silent_1991
22.01.2011, 13:48
  #1145

Не по теме:

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

0
no0ker
22.01.2011, 14:54
  #1146

Не по теме:

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

0
1992 / 1592 / 488
Регистрация: 31.05.2009
Сообщений: 2,980
22.01.2011, 19:25 1147
Цитата Сообщение от no0ker Посмотреть сообщение
а разбор данной задачи будет?
А что собственно тут разбирать? asics код привёл, там всё довольно просто. Могу немного другой вариант написать разве что...
0
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
22.01.2011, 19:36 1148
rangerx, ну, в двух словах объяснить почему null не справляется со своей задачей. и в чем основная идея кода asics. может быть ссылку дать по теме. или предложить свой вариант решения проблемы.
хотя, конечно же, можно просто отослать на яндекс.
0
1992 / 1592 / 488
Регистрация: 31.05.2009
Сообщений: 2,980
22.01.2011, 21:35 1149
Цитата Сообщение от 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
Эксперт С++
4707 / 2532 / 753
Регистрация: 18.08.2009
Сообщений: 4,550
24.01.2011, 21:01 1150
Апельсины
(Время: 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
Эксперт С++
2871 / 1806 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
24.01.2011, 21:19 1151
Если так:
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
Эксперт С++
4707 / 2532 / 753
Регистрация: 18.08.2009
Сообщений: 4,550
24.01.2011, 21:35 1152
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
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.01.2011, 00:52 1153
Требуется найти последнюю ненулевую цифру числа 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
Эксперт С++
2871 / 1806 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
25.01.2011, 00:57 1154
Maxwe11, Ты в самом деле думаеш, что в long поместиться факториал числа 9999 ? Оо
0
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.01.2011, 01:05 1155
можно дописать double ))
0
Freelance
Эксперт С++
2871 / 1806 / 355
Регистрация: 09.09.2010
Сообщений: 3,841
25.01.2011, 01:06 1156
Maxwe11, Ты издиваешся ?
0
Каратель
Эксперт С++
6593 / 4014 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
25.01.2011, 01:34 1157
к лонгу дописать 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
В астрале
Эксперт С++
8023 / 4780 / 654
Регистрация: 24.06.2010
Сообщений: 10,558
25.01.2011, 02:27  [ТС] 1158
Maxwe11, Не влезет. Тут на длинную арифметику
0
101 / 88 / 7
Регистрация: 17.12.2010
Сообщений: 416
25.01.2011, 05:32 1159
что значит последнюю цифру? то есть ту которая отвечает за единицы? или с другой стороны - которая отвечает за количество стомильонмильярдов?
0
Эксперт С++
4707 / 2532 / 753
Регистрация: 18.08.2009
Сообщений: 4,550
25.01.2011, 06:01 1160
no0ker, Для числа 123456789000 - последняя цифра это 0, а последняя ненулевая 9

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

Добавлено через 10 минут
Цитата Сообщение от ForEveR Посмотреть сообщение
Maxwe11, Не влезет. Тут на длинную арифметику
Даю подсказку: я в своем решении длинную арифметику не использовал. Обошелся простым int. Например если N большое, то при его вычислении последние цифры будут нули. И чем дальше, тем этих нулей больше. А на значение последней ненулевой цифры эти нули не окажут влияния.
(Подсказка не полная, я бы сказал на половину).
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2011, 06:01

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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