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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 5.00
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
#1

Вопрос по определению типа переменной - C++

24.10.2011, 14:44. Просмотров 1435. Ответов 20
Метки нет (Все метки)

В основной программе вычисляется с
C++
1
2
3
c = p (9)/h (3, z) + p (4); //Âû÷èñëåГ*ГЁГҐ Г±. Âûçîâ ðåêóðñèâГ*ûõ ГґГіГ*êöèé p ГЁ h
cout << "c="<< c << endl;
cout <<"\n" ;
Для её вычисления вызываются две рекурсивные функции

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// ÐåêóðñèâГ*Г*Гї ГґГіГ*êöèÿ äëÿ âû÷èñëåГ*ГЁГї p
double p (int i) 
{
    if (i==1)
        return cos (1);
    if (i==2)
        return -sin (1);
    if (i>=3)
        return (2*p (i-1) - p (i-2));
    return EXIT_SUCCESS;
}
 
// ÐåêóðñèâГ*Г*Гї ГґГіГ*êöèÿ äëÿ âû÷èñëåГ*ГЁГї h
double h (int i, int z)
{
    if (i==1)
        return 0.5;
    if (i==2)
        return sin (0.5);
    if (i>=3)
        return (z*h (i-1, z) + h (i-2,z));
    return EXIT_SUCCESS;
}
Вопрос в том, что при вычислении с её тип нигде не указан, а при попытке указать
C++
1
double c;
или
C++
1
double c= p (9)/h (3, z) + p (4);
пишет error C2086: 'c' : redefinition

Что неправильно?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2011, 14:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос по определению типа переменной (C++):

Переменной d присвоить первую цифру после запятой некоторой переменной x типа float - C++
Нужно целой переменной d присвоить первую цыфру после комы некоторой переменной x типа float Скажите, пожалуйста, с чего начать и по...

Записать адрес переменной произвольного типа в переменную типа int - C++
Здравствуйте, есть структура __packed struct myStruct{ uint32 HisCh; uint32 sNo; uint16 tNo; uint32 reserv; };

Вопрос об области видимости переменной - C++
У меня в проге один главный цикл и в этом цикле еще 4 цикла. Так вот, в начале главного цикла я написал int i =0; Вопрос, этот i = 0 будет...

Преобразование типа переменной - C++
Как сделать что бы компилятор не отслеживал преобразование типов переменных Конкретней на примере: #include &lt;iostream&gt; #include...

Определение типа переменной - C++
#include &lt;iostream&gt; #include &lt;typeinfo&gt; int main() { int t = 10; std::cout &lt;&lt; typeid(t).name() &lt;&lt; std::endl; if...

Перегрузка типа переменной - C++
Приветствую! Извиняюсь если уже было, просто гуглил гуглил и не нашёл ничего такого.. В общем короче, есть у меня шаблон класса. В...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
24.10.2011, 14:53 #2
Heidel, Значит очевидно где-то указан. Фулл код плиз.
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
24.10.2011, 14:56  [ТС] #3
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
#include <iostream.h>
#include <time.h>
#include <math.h>
#include <stdlib.h>
 
// Функция для расчета f(x,y)
double Func1 (double x, double y) 
{
    return sqrt(x)+(pow(y,2)/x);
}
 
// Рекурсивная функция для вычисления p
double p (int i) 
{
    if (i==1)
        return cos (1);
    if (i==2)
        return -sin (1);
    if (i>=3)
        return (2*p (i-1) - p (i-2));
    return EXIT_SUCCESS;
}
 
// Рекурсивная функция для вычисления h
double h (int i, int z)
{
    if (i==1)
        return 0.5;
    if (i==2)
        return sin (0.5);
    if (i>=3)
        return (z*h (i-1, z) + h (i-2,z));
    return EXIT_SUCCESS;
}
 
// Заполнение массива произвольного размера случайными числами
void ZapolnenieMassiva (double *Massive, int SizeOfMassive)
{
 
cout << "Massiv iz " << SizeOfMassive <<" elementov\n";
 
    for (int i=0; i<SizeOfMassive; i++)
    {
        *(Massive+i)= rand()%101;
        cout << *(Massive+i) << " " ;
    }
    cout <<"\n\n" ;
}
 
// Обработка массива. Элементы массива, кратные какому-либо числу (Delitel), умножаются на переменную
void ObrabotkaMassiva (double *Massive, int SizeOfMassive, int Delitel, double Peremennaya)
{       
    
cout << "Elementy massiva kratnye " << Delitel << " umnojit na " << Peremennaya << "\n";
 
    for (int i=0; i<SizeOfMassive; i++)
    {
        
            if (fmod (*(Massive+i),Delitel)==0)
            {
                *(Massive+i) = *(Massive+i)*Peremennaya;
            }
            cout << *(Massive+i) << " " ;
    }
    cout <<"\n\n" ;
}
 
 
int main ( )
{
 
int s;
int t;
    cout << "Input s=";
    cin >> s;
    cout << "Input t=";
    cin >> t;
    cout <<"\n" ;
 
    double a = Func1(sqrt(abs(s)), t); //Вычисление a. Вызов функции Func1
    cout << "a=" << a << endl;
    
    double b = pow(t,2)+Func1(s,s); //Вычисление b. Вызов функции Func1 
    cout << "b=" << b << endl;
    cout <<"\n" ;
                                                                                                                                                                                       double c;
int z;
    cout << "Input z=";
    cin>> z;
    cout <<"\n" ;
 
    c = p (9)/h (3, z) + p (4); //Вычисление с. Вызов рекурсивных функций p и h
    cout << "c="<< c << endl;
    cout <<"\n" ;
 
double *nMassive, *mMassive, *lMassive;
int i=9, j=10, k=11;
int Delitel1=3, Delitel2=5, Delitel3=2;
 
    srand(time(NULL));
 
    nMassive = new double [i];
    mMassive = new double [j];
    lMassive = new double [k];
 
    ZapolnenieMassiva (nMassive, i); 
    ZapolnenieMassiva (mMassive, j);
    ZapolnenieMassiva (lMassive, k);
 
    cout <<"\n" ;
 
    ObrabotkaMassiva (nMassive, i, Delitel1, a );
    ObrabotkaMassiva (mMassive, j, Delitel2, b );
    ObrabotkaMassiva (lMassive, k, Delitel3, c );
 
return 0;
}
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
24.10.2011, 15:07 #4
C++
1
double c;
86 строчка в сааааамом конце.
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
24.10.2011, 15:10  [ТС] #5
Виновата, не заметила) Глупый вопрос получился)
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.10.2011, 09:41 #6
Цитата Сообщение от Heidel
C++
1
2
3
4
5
6
7
8
9
10
11
// Рекурсивная функция для вычисления p
double p (int i) 
{
        if (i==1)
                return cos (1);
        if (i==2)
                return -sin (1);
        if (i>=3)
                return (2*p (i-1) - p (i-2));
        return EXIT_SUCCESS;
}
EXIT_SUCCESS используется только для возврата из main()
(это целочисленная константа)
1
vndtta
90 / 67 / 13
Регистрация: 17.10.2011
Сообщений: 235
Завершенные тесты: 1
25.10.2011, 10:12 #7
Цитата Сообщение от accept Посмотреть сообщение
EXIT_SUCCESS используется только для возврата из main()
(это целочисленная константа)
какая разница? в дабл преобрзуется ведь
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
25.10.2011, 10:18  [ТС] #8
Если убрать строку
C++
1
return EXIT_SUCCESS;
программа выдаст предупреждение warning C4715: 'p' : not all control paths return a value
Я не знаю каким еще образом можно учесть все варианты рекурсивной функции.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
25.10.2011, 10:31 #9
Heidel, return 0 как бэ.
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
26.10.2011, 01:44 #10
Цитата Сообщение от vndtta
какая разница? в дабл преобрзуется ведь
оператор return должен возвращать тот же тип, что в определении функции
даже когда там есть неявное приведение

Цитата Сообщение от Heidel
Если убрать строку
когда пишешь оператор return, нужно смотреть на возвращаемое значение функции
C++
1
    return 0.0;
0
Heidel
111 / 111 / 7
Регистрация: 11.10.2011
Сообщений: 647
26.10.2011, 08:03  [ТС] #11
accept, ясно, спасибо)
0
vndtta
90 / 67 / 13
Регистрация: 17.10.2011
Сообщений: 235
Завершенные тесты: 1
26.10.2011, 12:02 #12
Цитата Сообщение от accept Посмотреть сообщение
оператор return должен возвращать тот же тип, что в определении функции
даже когда там есть неявное приведение


когда пишешь оператор return, нужно смотреть на возвращаемое значение функции
C++
1
    return 0.0;
специально для тебя
C++
1
2
3
4
5
6
7
8
float f(){
    return 0;
}
 
int main(){
    float i=f();
    return 0;
}
компилирую
Bash
1
gcc -Wall 1.cpp -o 1
вывод
Bash
1
2
1.cpp: In function 'int main()':
1.cpp:6: warning: unused variable 'i'
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.10.2011, 02:08 #13
C++
1
2
3
4
5
6
7
8
9
10
11
float f()
{
    return 0.0;
}
 
int main(){
    float i = f();
    
    std::cout << i << std::endl;
    return 0;
}
0
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
27.10.2011, 02:34 #14
Цитата Сообщение от accept Посмотреть сообщение
0.0
Вообще-то это double, а не float.
И возвращать не обязательно именно такой тип, который указан в заголовке функции.
Главное, чтобы этот тип смог преобразоваться в тип, указанный в заголовке функции.
Т.е. 0.0 (double) преобразуется в float. 0( int ) преобразуется в float.
'a'( char ) преобразуется в float и т.д.

Добавлено через 2 минуты
Цитата Сообщение от vndtta Посмотреть сообщение
оператор return должен возвращать тот же тип, что в определении функции
даже когда там есть неявное приведение
Вы поняли, что сказали? Как это написать тип, указанный в заголовке функции, и при этом не тип, указанный в заголовке функции?
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.10.2011, 02:39 #15
Цитата Сообщение от Chelioss
'a'( char ) преобразуется в float и т.д.
если функция возвращает float, то надо писать число типа float
а писать char, когда она возвращается float - это только запутывать код

Цитата Сообщение от Chelioss
Вообще-то это double, а не float.
главное, что оно вещественное, а не целое и не символ

Цитата Сообщение от accept
оператор return должен возвращать тот же тип, что в определении функции
даже когда там есть неявное приведение
это вопрос оформления кода
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2011, 02:39
Привет! Вот еще темы с ответами:

Шаблон типа переменной - C++
В графической библиотеке (SFML) есть шаблон для типа переменной Vector2. Переменная хранит в себе два числа заданного типа (Например,...

Объявление переменной своего типа - C++
Есть код #include &lt;iostream&gt; #include &lt;iomanip&gt; //#include &quot;complexz&quot; using namespace std; int main(){ double a,b,c,d; ...

Проверка типа вводимой переменной - C++
Сабж. Консольный режим. Возможно ли это вообще? Преобразование типов канечн рулезная вещь. Вот в таком кусочке: cout &lt;&lt;...

Удаление переменной типа класса - C++
Как удалить переменную типа класса который я сам создал?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.10.2011, 02:39
Ответ Создать тему
Опции темы

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