Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 17.11.2013
Сообщений: 7
1

Рекурсивный расчет математического выражения со скобками, в чем ошибка?

14.03.2017, 21:37. Показов 1278. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
задача Рекурсивный расчет математического выражения со скобками, рекурсивная функция оформляется в виде потока.(прямой алгоритм без потока тоже нужен)
пишу под linux на си
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
#include <stdio.h>
 #include <curses.h>
 #include <stdlib.h>
#include <unistd.h>
 
float number();
float factor();
float expr();
 
int main(int argc, char **argv)
{
    float r;
    printf ("Enter number:");
    r = expr();
    printf("\n Resault = %s", r);
    return 0;
}
 
float number()
{
    int res = 0;
    char c;
 
    while(1)
    {
        char c = getchar();
        if(c >= '0' && c <= '9')
        res = res * 10 + c - '0';
        else
        {
            ungetc(c);
            
            break;
        }
    }
return res;
}
 
float factor()
{
    float x;
    char c = getchar();
    if(c == '(')
       {
           x = expr();
           getchar();
       }
       else
       {
           ungetc(c);
           x = number();
       }
    c = getchar();
    switch(c)
    {
        case '*':
            return x * factor();
        case '/':
            return x / factor();
        default:
            ungetc(c);
            return x;
    }
}
float expr()
{
    float x = factor();
    char c = getchar();
    switch(c)
    {
        case '+':
            return x + expr();
        case '-':
            return x - expr();
        default:
            ungetc(c);
            return x;
    }
}
ошибки пишет:
gcc -Wall -o "laba2" "laba2.c" -lpthread
laba2.c: In function ‘main’:
laba2.c:15:5: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘double’ [-Wformat=]
printf("\n Resault = %s", r);
^
laba2.c: In function ‘number’:
laba2.c:31:13: error: too few arguments to function ‘ungetc’
ungetc(c);
^
In file included from laba2.c:1:0:
/usr/include/stdio.h:702:12: note: declared here
extern int ungetc (int __c, FILE *__stream);
^
laba2.c:22:10: warning: unused variable ‘c’ [-Wunused-variable]
char c;
^
laba2.c: In function ‘factor’:
laba2.c:50:12: error: too few arguments to function ‘ungetc’
ungetc(c);
^
In file included from laba2.c:1:0:
/usr/include/stdio.h:702:12: note: declared here
extern int ungetc (int __c, FILE *__stream);
^
laba2.c:61:13: error: too few arguments to function ‘ungetc’
ungetc(c);
^
In file included from laba2.c:1:0:
/usr/include/stdio.h:702:12: note: declared here
extern int ungetc (int __c, FILE *__stream);
^
laba2.c: In function ‘expr’:
laba2.c:76:13: error: too few arguments to function ‘ungetc’
ungetc(c);
^
In file included from laba2.c:1:0:
/usr/include/stdio.h:702:12: note: declared here
extern int ungetc (int __c, FILE *__stream);
^
Сборка завершилась с ошибкой.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.03.2017, 21:37
Ответы с готовыми решениями:

Рекурсивный расчет математического выражения со скобками
Рекурсивный расчет математического выражения со скобками, рекурсивная функция оформляется в виде...

Рекурсивный расчёт математического выражения со скобками (рекурсивную функцию оформить в виде потока)
Помогите пожалуйста решить данную задачу: Рекурсивный расчет математического выражения со...

Ошибка при вычислении математического выражения
(3^|x-1|-sin2+sin2x)/(cos^2(1-x)+log^2(1+x))*(5-x) Проверочные числа 1 и 3! Вот что у меня...

задание на рекурсивный расчет формулы
С экрана вводится строка, которая имеет записанную без ошибок формулу следующего вида:...

2
1786 / 1036 / 445
Регистрация: 12.05.2016
Сообщений: 2,550
15.03.2017, 04:17 2
alexan19, и никаких предположений нет?
0
190 / 150 / 61
Регистрация: 08.04.2010
Сообщений: 1,020
15.03.2017, 14:51 3
Неужели так тяжело прочитать что написано в ошибках:
- %s для char* а у вас double нежно %f

- error: too few arguments to function ‘ungetc’ (должно быть 2 параметра)
C
1
int ungetc( int character, FILE * filestream );
- laba2.c:22:10: warning: unused variable ‘c’
переменная не используется, в коде объявлена два раза
0
15.03.2017, 14:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2017, 14:51
Помогаю со студенческими работами здесь

Стек на С (выражения со скобками)
Всем привет, очень нужно решить задачу. Вводится стек, выражение типа (a+b)*(b+c). Нужно...

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

Вычисление математического выражения
Помогите реализовать математическое выражение на языке программирования PHP.

Разбор математического выражения
Доброго времени суток, уважаемые форумчане. Хотелось бы услышать совет опытных людей по следующему...

Решение математического выражения
Ребят, приближается сессия и нужна помощь :) дело в том, что не могу сообразить как выполнить...

Запись математического выражения
Помогите записать это уровнение на языке с++. ctg \sqrt{x^5+cos(2x)}-1


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru