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

Поправте код - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ классы непойму что с конструктором http://www.cyberforum.ru/cpp-beginners/thread88584.html
привет вот создал такой класс но чето конструктор ругается но что непойму( #include <iostream> #include <string> using namespace std; const int N = 30; class per { private:
C++ четырёхзначное число в чём ошибка написать программу являются ли все цифры четырёхзначного числа различнымию. при вводе числа делать проверку что введено четырёхзначное число. ввод вывод должен быть в цветном окне вывод должен выглядеть так: введите четырёх значное натуральное число -> все цифры числа **** различны| число **** имеют одинаковые цыфры #include<stdio.h> #include<conio.h> http://www.cyberforum.ru/cpp-beginners/thread88580.html
C++ Строки.Си
Написать функцию, которая складывает одну строку с n символами другой строки не использовать strncat
Реализовать ввод, вывод и простейшие операции с матрицами C++
дана такая задача: Реализовать ввод, вывод и простейшие операции с матрицами (сложение, вычитание, умножение на число, умножение, транспонирование). Каждую операцию реализовать в виде функции. каждую операцию (кроме транспонирования) я написала, как отдельную программу, как это все соеденить вместе, что значит в виде функции??? и помогуте пожалуйста с транспонированием!!!
C++ Могут ли значения быть сторонами треугольника? http://www.cyberforum.ru/cpp-beginners/thread88559.html
Есть задача: Напишите программу, которая читает три ненулевые значения типа double, определяет и печатает, могут ли они представлять стороны треугольника. А если они не равны нулю, то даже если каждая будет равна 1, они все равно смогут быть сторонами треугольника. Только если отрицательными, тут вопрос..? Я знаю только теорему о том, что сумма углов треуг. должна быть 180 градусов....
C++ 2 программы Здравствуйте Уважаемые! Если не сложно решите пожалуйста 2 задачки на Turbo c. 1)Дан двухмерный массив. Вставить в него строку из 100 чисел после строки с номером s. 2)Дан двухмерный массив. Выяснить является ли произведение элементов заданного столбца массива трехзначным числом. подробнее

Показать сообщение отдельно
qwarta
67 / 67 / 6
Регистрация: 20.11.2009
Сообщений: 231
23.01.2010, 09:28     Поправте код
Вот так работает:
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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Составить программу решения функций log2() (логарифм по основанию 2) и cbrt(кубический корень);
// мантисса ХХ бит,экспонента ХХ бит,для вещественных чисел произвольной точности.
// Выводиться на экран выбор действия либо логарифм либо куб корень,вводиться вещественное число и
// выполняется выбранная операция.
// -----------------------------------------------------------------------------------------------
// Требования :
// -----------------------------------------------------------------------------------------------
// 1. Использование библиотеки Math.h запрещено.
// 2. Описать все функции самостоятельно.
// 3. Классы и структуры отвергаются.
// 4. Использовать циклы и условия.
// -----------------------------------------------------------------------------------------------
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include <string>
#include <iostream> 
 
short nStep=3;
double lNumber;
double log2(double lNumber);                // |Возвращает логарифм числа lNumber по основанию 2
double ipow(double lNumber, double lStep);  // |Возвращает результат возведение lNumber в степень nStep
double cbrt(double lNumber);                // |Возвращает корень кубический числа lNumber 
 
int main(void)
{
    int action;
    do                                      // меню для работы
    {
      std::cout << "   Choose action\n";
      std::cout << "1. log2(num) -  logarithm  \'num\'.\n";
      std::cout << "2. cbrt(num) -  cube root  \'num\'.\n";
      std::cout << "3. Exiting.\n";
      std::cin  >> action;
      switch(action)
      {
        case 1:
             std::cout << " Enter the number -> ";
             std::cin  >> lNumber;
             std::cout <<log2(lNumber);
             break;
        case 2:
             std::cout << " Enter the number -> ";
             std::cin  >> lNumber;
             std::cout <<cbrt(lNumber);
             break;
        case 3:
             return 0;
      }
    }while(1);
}
    
    // Function 'cbrt'
///////////////////////////////////////////////////////////////////////////
// |lF          - степень, в которую будем возводить число lT
// |lT          - число, которое будет возводить в степень lF
// |nStep       - степень корня, который будет извлекаться из числа lNumber
///////////////////////////////////////////////////////////////////////////
 
double cbrt(double lNumber)
{
        double lF = 0, lT = 0;
        while(lT < lNumber)        // |Пока число возведенное в степень lF меньше lNumber выполняем тело цикла
        {
                lF += 0.001;      // |Прибавляем к lF одну тысячную.
                lT = lF;          // |Присваиваем значение lT переменной lF
 
                for(short nI = 0; nI < nStep - 1; nI++)         // |Пока nI меньше nStep - 1 выполняем тело цикла и увеличиваем с каждым проходом nI на единицу
                {
                        lT *= lF;    // |Возводим в степень. То есть, умножаем значение lF само на себя nStep - 2 раза
                }
        }
 
        return lF-0.001;         // |Возвращаем полученный результат
}
double ipow(double lNumber, double lStep)
{
        long double lResult = 1;
        size_t nNum = (unsigned int)lStep;   // |Сохраняем целую часть степени (lStep) в переменную nNum
 
        if((double)nNum == lStep)           // |Если степень в которую нужно возвести не дробная, то выполняем тело
        {
                for(size_t nI = 0; nI < nNum; nI++)     // |Выполняем тело цикла nNum - 1 раз
                {
                        lResult *= lNumber;                                                     // |Умножаем lNumber само на себя nNum раз
                }
        }
        else if((double)nNum < lStep)     // |Или же, если степень в которую нужно возвести дробная, то выполняем тело этого блока
        {
                short nT = 1000;                                                                // |Записываем эквевалент знаменателя дроби степени в переменную nT
                double lD = lStep - (double)nNum;      // |Записываем в переменную lD дробную часть степени
                nNum *= nT;                                                                             // |Переводим целую часть степени в тысячные и сохраняем в переменную nNum
 
                for(double lI = 0; lI < lD; lI += 0.001)   // |Переводим дробную часть степени в эквевалент в целых числах (например 0.554 будет равно 554)
                {
                        nNum++;
                }
 
                bool bFlg = true;                                                               // |Флаг, который указывает, сократили ли мы дробь стемели или нет
 
                for(size_t nJ = nT; nJ > 1; nJ--)  // |Выполняем тело цикла nT - 1 раз
                {
                        for(size_t nM = 0; nM < 10 && bFlg; nM++)       // |Подбираем +/-10 к тому числу, которое нам надо сократить
                        {
                                if((((nNum - nM) % nJ == 0) || ((nNum + nM) % nJ == 0)) && (nT % nJ == 0))
                                {
                                        bFlg = false;        // |Нам удалось сократить дробь
                                        nNum /= nJ;          // |Сокращаем nNum в nJ
                                        nT /= nJ;           // |Сокращаем nT в nJ
                                }
                        }
                }
 
                for(size_t nI = 0; nI < nNum; nI++)    // |Выполняем тело цикла nNum - 1 раз
                {
                        lResult *= lNumber;   // |lNumber в степень nNum
                }
 
                lResult = cbrt(lResult);     // |Извлекаем корень степени nT из lResult и записываем результат в lResult
        }
 
        return lResult;                     // |Возвращаем результат
}
double log2(double lNumber)
{
        double lA = cbrt(cbrt(lNumber)), lR = 0;       // |Записываем в lA начальное число степени, с которого начнем подбирать подходящую
 
        if(lNumber < 2.000)         // |Если число, логарифм по основанию 2 которого нужно найти меньше 2.000, то результатом будет 1 (возвращаем 1)
        {
                return 1;
        }
                                     // |Иначе
        while(lR < lNumber) {        // |Если результат возведения 2 в степень lA меньше lNumber, выполняем тело цикла
                lR = ipow(2, lA);    // |Записываем в lR 2 в степени lA
                lA += 0.001;         // |Подбираем нужную нам степень увеличивая ее каждый проход цикла на одну тысячную
        }
 
        return lA - 0.001;         // |Возвращаем результат (степень, если в которую возвести 2 получится lNumber) - 0.001
}
 
Текущее время: 12:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru