Форум программистов, компьютерный форум CyberForum.ru

Найти 1+2+3+...+n рекурсивно и итеративно - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ n>=a в степени k http://www.cyberforum.ru/cpp-beginners/thread162564.html
вот решил задачу таким образом: задача: Напишите программу, находящую для заданных числел n и k максимальное число a, такое, что ak≤ n решение: #include <iostream> #include <cmath> using namespace std;
C++ Найти сумму элементов массива, которые больше своих "соседей" справа и слева В массиве из N элементов найти сумму тех элементов, которые больше своих "соседей" справа и слева. http://www.cyberforum.ru/cpp-beginners/thread162561.html
C++ OpenMP, создание потоков
В инете нашел много примеров по распараллеливание циклов, но никак не могу понять, как просто написать чтобы конкретная функция выполнялась в отдельном потоке? int main() { #pragma omp parallel { start_log("gsd", 34, "link", "proj"); } #pragma omp parallel {
C++ Программа работы с дробями (консоль)
Десятичные дроби. Нужно чтобы программа умела: делить, умножать, складывать и вычитать и построена обязательно на классах, код не мой и разобраться в нём довольно трудно, плюс "консоль" что не мой конёк.... Вот код который у меня есть, но он не работает. Помогите кто чем может. P.S. Код был написан на MS Visual C++в отличие от привычного мне "Borland'a/CodeGear #include <iostream> #include...
C++ Самоудаление программы http://www.cyberforum.ru/cpp-beginners/thread162507.html
возможно ли, удаление самой себя проги сразу после запуска, на крайняк по окончанию работы, и как это осуществить?
C++ Разбить на классы Написала программу для игры в покер, но поскольку программировать я начала недавно, то забила все в один класс. Но получилось как-то не очень красиво и читать тяжеловато. Помогите пожалуйста разбить программку на 3 класса: Pack, On_hands и Prize. #include <iostream> #include <time.h> const int NotUsed=system("color 24"); using namespace std; class Pack { подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9384 / 5434 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
01.09.2010, 17:12     Найти 1+2+3+...+n рекурсивно и итеративно
Nameless One, а две функции для того, чтобы в вызывающую только одно значение передавать?

Цитата Сообщение от NightmareZ Посмотреть сообщение
Например?
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
#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>
 
class Sum {
        unsigned int nResult;
public:
        Sum() : nResult(0) {}
        Sum(unsigned int start){
                for ( nResult = 0; start; nResult += start-- )
                        ;
        }
        bool operator () (int test){
            return test > nResult;
        }
 
        friend std::ostream & operator << (std::ostream & ost, const Sum & sum){
                ost << sum.nResult;
                return ost;
        }
};
 
int main(){
        const size_t size = 5;
        int arr[size] = { 8, 12, 5, 14, 21 };
        std::vector<int> vec(arr, arr + size);
        int num = 5;
        Sum sum(num);
        std::vector<int>::iterator fnd;
 
        std::cout << "Array:\n";
        std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
        std::cout << "\nGiven number:\n" << num << std::endl;
        std::cout << "Sum of numbers from 1 to " << num << " = " << sum << std::endl;
        if ( ( fnd = std::find_if(vec.begin(), vec.end(), sum) ) == vec.end() )
            std::cout << "All elements in array less than it." << std::endl;
        else
            std::cout << "First element in array greater it is " << *fnd << std::endl;
 
        return 0;
}
Цитата Сообщение от NightmareZ Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
template<int N>
struct Sum
{
    enum { value = N + Sum<N-1>::value };
};
 
template<>
struct Sum<1>
{
    enum { value = 1 };
};
 
int main()
{
    const int sum = Sum<5>::value;
    std::cout << sum;
}
Долго пытался этому практическое применение придумать. Кроме объявления в программе 100500 тысяч констант, представляющих суммы от 1 до исходных 100500 тысяч чисел так и не придумал. Да и в том случае проще заголовочный файл создать например вот таким макаром:
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
#include <stdio.h>
#include <stdlib.h>
 
#define SUM(a) ({ int d = a; int s = 0; while ( d ) s += d--; (s); })
 
#define IN_FILE "constants.txt"
#define OUT_FILE "constants.h"
 
int main(void){
    int val;
    FILE * fin, * fout;
 
    if ( ( fin = fopen(IN_FILE, "r") ) == NULL ){
        perror("fopen");
        exit(1);
    }
    if ( ( fout = fopen(OUT_FILE, "w") ) == NULL ){
        perror("fopen");
        exit(1);
    }
 
    fprintf(fout, "#ifndef _CONSTANTS_H_\n#define _CONSTANTS_H_ 1\n");
    while ( fscanf(fin, "%d", &val) == 1 )
        fprintf(fout, "#define SUM%d %d\n", val, SUM(val));
 
    fprintf(fout, "#endif\n");
 
    fclose(fin);
    fclose(fout);
 
    exit(0);
}
а то мало ли - ещё раз с другими числами понадобится - и чё, блин, делать? Лезть в исходники, править циферки и заново компилировать?
Короче, думаю, что в данном случае всё это метапрограммирование - голый выпендрёж и в принципе нафиг не нужно. Поправьте, если чего-то не понимаю...
 
Текущее время: 04:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru