Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.05.2013
Сообщений: 6
1

Перевести программу с С++

26.05.2013, 19:32. Просмотров 572. Ответов 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
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
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct node{            
    bool isop;          //IsOperand 
    int val;            //Если не являетcя, хранится значение
    char op;            //Если является здесь символ знака операции
    node *next; 
};
node *st,*fn;
int compute(node **pos){
    
    
 
    int rez;                                //В эту переменную записываем результат вычисления
    if ((*pos)->isop){                      //Если на позиции оператор
        int a,b;                
        a=compute(&(*pos)->next);           //Вычисляем первое значение просто применяя данную процедуру со следующей позиции
        b=compute(&(*pos)->next);           
        switch((*pos)->op){
        case '+':
            rez= a+b;
            break;                          //считаем результат
        case '-':
            rez= a-b;
            break;
        case '*':
            rez= a*b;
            break;
        case '/':
            rez= a/b;
            break;
        }
    }else{
        rez = (*pos)->val;                  //Когда в позиции значении результатом является оно
    }
    node *vsp=*pos;                         
    *pos=(*pos)->next;                      // каждую вычисленную позицию мы очищаем
    delete vsp;                             
    return rez;
}
void add(node *ex){                         
    if (fn){                                //Вторая и третья процедуры формируют элемент очереди в зависимости от его типа, первая добавляет в очередь 
        fn->next=ex;                        //сформированный
    }else{
        st=ex;
    }
    fn=ex;
}
void addop(char c){                         //Добавить оператор
    node *ex;
    ex=new node;
    ex->op=c;
    ex->isop=true;
    ex->next=NULL;
    add(ex);
}
void addch(int a){                          //Добавить число
    node *ex;
    ex=new node;
    ex->isop=false;
    ex->val=a;
    ex->next=NULL;
    add(ex);
}
bool is_operator(char c){                           
    if (c=='*' || c=='/' || c=='+' || c=='-'){
        return true;
    }
    return false;
}
void main(){
    char str[100];
    FILE *in, *out;
    in=fopen("input.txt", "r");
    out=fopen("output.txt","w");
    int i=0;
    while(!feof(in)){
        fscanf(in,"%c",&str[i]);                        //Считываем строку и начинаем формировать очередь
        i++;
    }
    str[i-1]=' ';                                   
    str[i]='\0';                                        
 
    char chislo[100],nc;                                //Последовательность цифр и её длина
 
    bool readch=false;                                  // "в данный момент считывается число число?"
    
    st=fn=NULL;
    for (int i=0; i<strlen(str);i++){                   
        //Перебираем всю строку
            if (is_operator(str[i])|| (str[i]==' ')){       
            if (readch){                                
                chislo[nc]='\0';                        //доббавляем в очередь
                int a=atoi(chislo);                     //atoi функция которая числовую строку конвертирует в число
                addch(a);
                readch=false;
            }
            if (str[i]!=' '){           
                addop(str[i]);                          
            }
        }else{                                          //Если в последовательности не оператор, значит цифра
            if (readch){                                //Если мы уже считывали последовательность цифр дополнить её     
                chislo[nc]==str[i];
                nc++;
            }else{                                      //Если нет начать сначала и сказать что теперь счтитываем
                nc=1;
                chislo[0]=str[i];
                readch=true;
            }
        }
    }
    fprintf(out,"%i",compute(&st));                     //Теперь просто вызываем вычисление с первой позиции
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2013, 19:32
Ответы с готовыми решениями:

Перевести программу с С++
Помогите пожалуйста Код C++ #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;ctime&gt;...

Перевести программу из C++ в Си
#include &lt;cstdio&gt; #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace...

Перевести программу с С++ на Си
очень нужна помощь! #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; double*...

Перевести программу с С на С++
#include &lt;conio.h&gt; #include &lt;locale.h&gt; #include &lt;math.h&gt; #include &lt;stdio.h&gt; int const N = 20;...

1
159 / 159 / 30
Регистрация: 09.11.2012
Сообщений: 1,008
26.05.2013, 19:38 2
bool на int заменить, #define true 1, #define false 0
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2013, 19:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перевести программу из С в С++
Что следует изменить помимо операторов ввода-вывода? Пожалуйста, помогите!#include &lt;stdio.h&gt;...

Перевести программу с C++
Помогите перевести программу на паскаль. #include&lt;iostream.h&gt; #include&lt;math.h&gt; void main() {...

Перевести программу из C++ в Си
#include &lt;iostream&gt; int main() { int size=3; int max_size=size+(size-1); ...

Перевести программу из C++ в Си
#include &lt;cstdlib&gt; #include &lt;ctime&gt; #include &lt;iostream&gt; #include &lt;cstddef&gt; #include...

Перевести программу на Си
#include &lt;iostream&gt; using namespace std; void swap(int *a, int i, int j) { int s = a; a =...

перевести программу на С
Ребят, помогите ушедшему с Ассемблера и начинающему в области С программирования перевести...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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