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

Передача данных в функции - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Kovy
 Аватар для Kovy
7 / 7 / 0
Регистрация: 29.04.2009
Сообщений: 412
27.11.2010, 14:37     Передача данных в функции #1
Расскажите пожалуйста, почему упорно отказывается работать прога?

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
#include <iostream>
#include <stdio.h>
#include <math.h>
 
//using namespace std;    
 
double Pow (double a)
{
    double b;
    printf ("Введите степень:");
    scanf ("%f\n", &b);
    //cin >> b;
    return pow (a, b);
}
 
double Sqrt (double a)
{
    double b;
    printf ("Введите степень корня:");
    scanf ("%f\n", &b);
    //cin >> b;
    return pow (a,1/b);
}
 
double Fact (double a)
{
    int i=1, b;
    for (b=i;i<=a;i++) b*=(i+1);
    return b;
}
 
 
//using namespace std;  
void main()
{
    setlocale(LC_ALL, "Russian");
    double x, y;
    int d;
    printf ("1 - Возвести число в степень\n");
    printf ("2 - Вычислить корень n-ой степени числа\n");
    printf ("3 - Найти факториал числа\n");
    //cout << "1 - Возвести число в степень\n" << "2 - Вычислить корень n-ой степени числа\n" << "3 - Найти факториал числа\n";
    printf ("Ваше действие: ");
    scanf ("%d\n", &d);
    //cin >> d;
    printf ("Введите число\n");
    //cout << "Введите число\n";
    scanf ("%f", &x);
    //cin >> x;
    switch (d)
    {
    case 1: y=Pow(x); break;
    case 2: y=Sqrt(x); break;
    case 3: y=Fact(x); break;
    default: printf ("Error!");  break;
        //cout >> "Error!";
    };
    printf ("Ответ=%f\n", y);
    //cout << "Ответ=" << y;
    system("pause");
}
Добавлено через 9 минут
и еще вопрос - можно ли программу, написанную на C++ интегрировать для работы на сайт. Или для этого надо писать её на перле или еще чего хуже)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
28.11.2010, 00:06     Передача данных в функции #2
Угу?

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
#include <stdio.h>
#include <math.h>
#include <locale.h>
#include <stdlib.h>  
 
double Pow (double a)
{
        double b;
        printf ("Введите степень:");
        scanf ("%lf", &b);
        return pow (a, b);
}
 
double Sqrt (double a)
{
        double b;
        printf ("Введите степень корня:");
        scanf ("%lf", &b);
        return pow (a,1/b);
}
 
double Fact (double a)
{
        int i=1, b;
        for (b=i;i<=a;i++) b*=(i+1);
        return b;
}
 
int main()
{
        setlocale(LC_ALL, "Russian");
        double x, y;
        int d;
        printf ("1 - Возвести число в степень\n");
        printf ("2 - Вычислить корень n-ой степени числа\n");
        printf ("3 - Найти факториал числа\n");
        printf ("Ваше действие: ");
        scanf ("%d", &d);
        printf ("Введите число\n");
        scanf ("%lf", &x);
        switch (d)
        {
        case 1: y=Pow(x); break;
        case 2: y=Sqrt(x); break;
        case 3: y=Fact(x); break;
        default: printf ("Error!");  break;
        };
        printf ("Ответ=%g\n", y);
        system("pause");
        return 0;
}
Kovy
 Аватар для Kovy
7 / 7 / 0
Регистрация: 29.04.2009
Сообщений: 412
28.11.2010, 07:20  [ТС]     Передача данных в функции #3
Цитата Сообщение от ForEveR Посмотреть сообщение
Угу?
Вроде да, работает. Спасибо.
Скажите пожалуйста, что вы сделали? Вижу, что убрали
C++
1
\n
scanf'е. Подключили библиотеки и дописали
C++
1
return 0;
Но зачем? Для чего нужны эти библиотеки, и в особенности ретурн?

Добавлено через 18 минут
Попытался добавить выход из программы и цикличность. После 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
int main()
{
        setlocale(LC_ALL, "Russian");
        double x, y;
        int d;
        while (1)
        {
            printf ("1 - Возвести число в степень\n");
            printf ("2 - Вычислить корень n-ой степени числа\n");
            printf ("3 - Найти факториал числа\n");
            printf ("4 - Выход из программы\n");
            printf ("Ваше действие: ");
            d=0;
            scanf ("%d", &d);
            if (d==4) break;
            printf ("Введите число: ");
            scanf ("%lf", &x);
            switch (d)
            {
            case 1: y=Pow(x); break;
            case 2: y=Sqrt(x); break;
            case 3: y=Fact(x); break;
            default: printf ("Error!");  break;
            };
            printf ("Ответ=%g\n", y);
        }
        system("pause");
        return 0;
}
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.11.2010, 09:27     Передача данных в функции #4
C
1
2
3
4
5
6
double Fact (double a)
{
        int i=1, b;
        for (b=i;i<=a;i++) b*=(i+1);
        return b;
}
функция возвращает double, b должно быть double
Kovy
 Аватар для Kovy
7 / 7 / 0
Регистрация: 29.04.2009
Сообщений: 412
28.11.2010, 09:51  [ТС]     Передача данных в функции #5
Спасибо. Исправил тип переменной. Немного подкорректировал программу. Но все равно после 3-4х кругов цикла она зацикливается и выводит ерунду.

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
int main()
{
        setlocale(LC_ALL, "Russian");
        double x, y;
        int d;
        while (1)
        {
            printf ("1 - Возвести число в степень\n");
            printf ("2 - Вычислить корень n-ой степени числа\n");
            printf ("3 - Найти факториал числа\n");
            printf ("4 - Выход из программы\n");
            printf ("Ваше действие: ");
            d=0;
            scanf ("%d", &d);
            if (d==4) break;
            switch (d)
            {
            case 1: 
                {
                    printf ("Введите число: ");
                    scanf ("%lf", &x);
                    y=Pow(x);   printf ("Ответ=%g\n", y); break;
                }
            case 2: 
                {
                    printf ("Введите число: ");
                    scanf ("%lf", &x);
                    y=Sqrt(x);  printf ("Ответ=%g\n", y); break;
                }
            case 3:
                {
                    printf ("Введите число: ");
                    scanf ("%lf", &x);
                    y=Fact(x);  printf ("Ответ=%g\n", y); break;
                }
            default: printf ("Error!\n");  break;
            };
        }
        system("pause");
        return 0;
}
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.11.2010, 10:46     Передача данных в функции #6
ты пости все функции, может она в них зацикливается

C++
1
if (d==4) break;
перенеси в switch

C++
1
printf ("Ответ=%g\n", y);
если формат всех ответов будет одинаковый, вынеси из switch'а
Kovy
 Аватар для Kovy
7 / 7 / 0
Регистрация: 29.04.2009
Сообщений: 412
28.11.2010, 11:36  [ТС]     Передача данных в функции #7
Цитата Сообщение от accept Посмотреть сообщение
ты пости все функции, может она в них зацикливается

C++
1
if (d==4) break;
перенеси в switch
перенес вроде)
Цитата Сообщение от accept Посмотреть сообщение
C++
1
printf ("Ответ=%g\n", y);
если формат всех ответов будет одинаковый, вынеси из switch'а
Как вынести? У меня изначально было вынесено оно. Но тогда, если введено для действия число 5, то он сначала пишет - введите число, а уж потом переходит в свитч->дефолт и только потом пишет Еррор. В общем лишняя надпись появляется.

Вот постю полный код:
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
#include <stdio.h>
#include <math.h>
#include <locale.h>
#include <stdlib.h>  
 
double Pow (double a)
{
        double b;
        printf ("Введите степень:");
        scanf ("%lf", &b);
        return pow (a, b);
}
 
double Sqrt (double a)
{
        double b;
        printf ("Введите степень корня:");
        scanf ("%lf", &b);
        return pow (a,1/b);
}
 
double Fact (double a)
{
        int i=1;
        double b;
        for (b=i;i<=a;i++) b*=(i+1);
        return b;
}
 
int main()
{
        setlocale(LC_ALL, "Russian");
        double x, y;
        int d;
        while (1)
        {
            printf ("1 - Возвести число в степень\n");
            printf ("2 - Вычислить корень n-ой степени числа\n");
            printf ("3 - Найти факториал числа\n");
            printf ("4 - Выход из программы\n");
            printf ("Ваше действие: ");
            d=0;
            scanf ("%d", &d);
        //  if (d==4) break;
            switch (d)
            {
            case 1: 
                {
                    printf ("Введите число: ");
                    scanf ("%lf", &x);
                    y=Pow(x);   printf ("Ответ=%g\n", y); break;
                }
            case 2: 
                {
                    printf ("Введите число: ");
                    scanf ("%lf", &x);
                    y=Sqrt(x);  printf ("Ответ=%g\n", y); break;
                }
            case 3:
                {
                    printf ("Введите число: ");
                    scanf ("%lf", &x);
                    y=Fact(x);  printf ("Ответ=%g\n", y); break;
                }
            case 4: return 0;
            default: printf ("Error!\n");  break;
            };
        }
        system("pause");
        return 0;
}
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.11.2010, 12:30     Передача данных в функции #8
C++
1
return pow (a,1/b);
b не проверяется на ноль

C++
1
2
3
4
5
6
7
8
9
double Fact (double a)
{
        int i = 1;
        double b;
 
        for (b = i; i <= a; i++)
            b *= i + 1;
        return b;
}
1! должно давать 1

switch заменяем на if
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
        printf ("Введите число: ");
        fflush(stdout); /* перевода строки нет в printf() - может вывести не сразу */
 
        if (scanf ("%lf", &x) != 1)
            printf ("Input Error!\n");;
 
#if 1
        printf("%f" "\n", x);
#endif
 
        if (d == 1)
            y = Pow(x);
        else if (d == 2)
            y = Sqrt(x);
        else if (d == 3)
            y = Fact(x)
        else if (d == 4) {
            printf ("Error!\n");
            break;
        } else {
            printf ("Unknown Error!\n");
            break;
        }
 
        printf ("Ответ = %g\n", y);
Kovy
 Аватар для Kovy
7 / 7 / 0
Регистрация: 29.04.2009
Сообщений: 412
28.11.2010, 12:39  [ТС]     Передача данных в функции #9
Цитата Сообщение от accept Посмотреть сообщение
switch заменяем на if
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
        printf ("Введите число: ");
        fflush(stdout); /* перевода строки нет в printf() - может вывести не сразу */
 
        if (scanf ("%lf", &x) != 1)
            printf ("Input Error!\n");;
 
#if 1
        printf("%f" "\n", x);
#endif
 
        if (d == 1)
            y = Pow(x);
        else if (d == 2)
            y = Sqrt(x);
        else if (d == 3)
            y = Fact(x)
        else if (d == 4) {
            printf ("Error!\n");
            break;
        } else {
            printf ("Unknown Error!\n");
            break;
        }
 
        printf ("Ответ = %g\n", y);
Зачем такая замена? Что значит
C++
1
 fflush(stdout);
?

Как работают #if 1, #endif. Что здесь ими осуществлено?
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.11.2010, 12:45     Передача данных в функции #10
C++
1
printf ("Введите число: ");
это может вывестись на экран где-нибудь в другом месте, потому что перевода строки нет и при строковой буферизации stdout будет ожидать символ перевода строки, заполнения всего буфера или специального выталкивания с помощью fflush()

Цитата Сообщение от Kovy
Как работают #if 1, #endif. Что здесь ими осуществлено?
это для отладки, когда не хочешь, чтобы выводило, ставишь там 0, а когда хочешь, чтобы выводило, ставишь там 1
Kovy
 Аватар для Kovy
7 / 7 / 0
Регистрация: 29.04.2009
Сообщений: 412
28.11.2010, 12:56  [ТС]     Передача данных в функции #11
Цитата Сообщение от accept Посмотреть сообщение
C++
1
printf ("Введите число: ");
это может вывестись на экран где-нибудь в другом месте, потому что перевода строки нет и при строковой буферизации stdout будет ожидать символ перевода строки, заполнения всего буфера или специального выталкивания с помощью fflush()
правильно ли я понял, что из-за отсутствия "перевода строки" эта надпись может не появляться, пока не встретит где-нибудь в другом printf() перевод строки? А fflush() гарантирует её вывод именно в этом месте?

И все таки про switch - зачем понадобилась его замена?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2010, 13:20     Передача данных в функции
Еще ссылки по теме:

Передача массивов в функции C++
C++ Передача параметра функции
Передача функции параметром C++

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

Или воспользуйтесь поиском по форуму:
accept
4837 / 3236 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
28.11.2010, 13:20     Передача данных в функции #12
Цитата Сообщение от Kovy
И все таки про switch - зачем понадобилась его замена?
чтобы не обходить его разными окольными путями, располагая код, который относится к одной части, где-нибудь вообще в другой части

Цитата Сообщение от Kovy
А fflush() гарантирует её вывод именно в этом месте?
да, на разных компиляторах оно может выводить, а может не выводить, а fflush() выталкивает буфер потока вывода в любом случае
Yandex
Объявления
28.11.2010, 13:20     Передача данных в функции
Ответ Создать тему
Опции темы

Текущее время: 19:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru