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

Нужно решение - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Нужна очень всего часть программы http://www.cyberforum.ru/cpp-beginners/thread63543.html
Само задание: В файле myfile.txt содержится информация типа а= 1,0; b = 5; с = 25,2; d = -l2,5. Написать функцию, которая получает строку типа «а + b = », «c*d = » или «b/d = », выбирает из файла необходимые значения, вычисляет и возвращает результат. В главной программе обеспечить ввод с клавиатуры строки и вывод результата. Выход из программы обеспечить при вводе строки « 0 + 0 ». Мне...
C++ Закончить прогу. Чуть-чуть осталось Нужно заменить все маленькие латинские буквы на $. Мои наработки: #include <windows.h> #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv) { SetConsoleCP(1251); SetConsoleOutputCP(1251); { http://www.cyberforum.ru/cpp-beginners/thread63542.html
C++ Бинарное дерево, классы
Помогите! Мне нужно описать класс, реализующий бинарное дерево, обладающее возможностью добавление новых элементов, удаления существующих, поиска элемента по ключу, а так же последовательного доступа ко всем элементам начало должно быть чтото в этом роде #include <conio.h> #include <math.h> #include <iostream.h> #include <stdlib.h> class tree{ int key; int count;
C++ Расходящиеся ряды или как правильно задать проверку
Здравствуйте, наткнулся на проблему, которая не дает покоя мозгу. Ситуация следующая: Работаю в среде MS Visual Studio 2005(C++), написал программу вычисления функции методом рядов Тейлора. Функция разложения : f=ln(1-x), Раскладывается она следующим образом: http://i36.tinypic.com/20fysfp.gif При входе в цикл первое значение вычисляется после 10,000,000 операций (если E задать 1e-7), если...
C++ структура данных http://www.cyberforum.ru/cpp-beginners/thread63519.html
помогите с решением (в структуре данных ):имеем в текстовом файле список студентов: фамилия ,имя шифр группы, название экзамена и оценки .сформировать лучших студентов ,у которых средние оценки даны в интервале . Список спорядковать по группе и фамилии: фамилия ,имя ,шифр группы, средний бал. Вывести две таблицы: данные и полученный результат.
C++ Размещение элементов массива по спирали Как разместить элементы массива (nxn) по спирали (начиная с нижнего левого угла против часовой стрелки)? Помогите пожалуйста!!(( подробнее

Показать сообщение отдельно
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4661 / 2487 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
13.11.2009, 21:06     Нужно решение
"Вводится выражение, надо указать его тип (постфиксное/префиксное) и посчитать значение. Используемые знаки "+", "-", "*", "/", "^". Должна быть возможность обработки двуциферных чисел и как минимум 8 действий."
Ну во первых что бы узнать какой тип выражения (постфиксное/префиксное) нужно узнать последний знак у выражения. Если там знак: +-*/ , то это постфиксная форма, если число то префиксная.
Я выложу в помощь две программки, написанные мною раньше. Первая переводит выражение из префиксной в постфиксную форму (конкретное выражение с 6-тью действиями и со скобками), но на сколько я помню, то можно и 8 действий (проверите сами).
Вторая программа вычисляет значение выражения записанное в постфиксной форме.
И еще одно предложение, что бы вычислить значение выражения в префиксной форме его нужно перевести сначала в постфиксную а затем посчитать результат, а если оно уже в постфиксной форме записано, тогда дело в шляпе:
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
// Постфиксная запись (7 2 3 * - (эквивалентно 7-2*3))
/*
12+4*56+(12*2+5)*13
12 4*56+(12*2+5)*13 +
12 4 56 *+(12*2+5)*13 +
12 4 56 * (12*2+5)*13 + +
12 4 56 * (12 2 *+5)*13 + +
12 4 56 * (12 2 * 5 +)*13 + +
12 4 56 * (12 2 * 5 +) 13 * + +
12 4 56 * 12 2 * 5 + 13 * + +
*/
 
#include "stdafx.h"
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int sk1, sk2, j, i, k;
char c[100];
void skob(int i, char a)
{
    char d[100];
    int b=0;
    if (a=='+')
    {
        for (k=0; c[k]!='\0'; k++)
        {
            if(c[k]=='(') sk1=k;
            if(c[k]==')') sk2=k;
        }
        if (i>sk1 && i<sk2)
        {
            for (j=i+1; c[j]!=')' && c[j]!='+' && c[j]!='*'; j++)
                ;
            k=j;
            for(b=0; c[j]!='\0'; b++, j++)
                d[b]=c[j];
            d[b]='\0';
            c[i]=' ';
            c[k]=' ';
            c[k+1]='+';
            for(b=0; d[b]!='\0'; b++)
                c[k+2+b]=d[b];
            c[k+3+b]='\0';
        }
        else
        {
            for (j=i+1; c[j]!='\0';b++, j++)
                ;
            c[i]=' ';
            c[j]=' ';
            c[j+1]='+';
            c[j+2]='\0';
        }
    }
    if(a=='*')
    {
        for (j=i+1; c[j]!=')' && c[j]!='+' && c[j]!='*' && c[j]!='('; j++)
            ;
        k=j;
        for (b=0; c[j]!='\0';b++, j++)
            d[b]=c[j];
        d[b]='\0';
        c[i]=' ';
        c[k]=' ';
        c[k+1]='*';
        for (b=0; d[b]!='\0';b++)
            c[k+2+b]=d[b];
        c[k+b+3]='\0';
    }
}
 
 
int main(int argc, char* argv[])
{
    
    int y;
    char *f="12+4*56+(12*2+5)*13";
    for(i=0; *f!='\0'; i++, f++)
    {
        if(*f=='(') sk1=i;
        if(*f==')') sk2=i;
        c[i]=*f;
    }
    for (y=0; c[y]!='\0'; y++)
    {
        if(c[y]=='+' && c[y-1]!=' ')
            skob(y, '+');
        if(c[y]=='*' && c[y-1]!=' ')
            skob(y, '*');
    }
    for (y=0; c[y]!='\0'; y++)
        cout<<c[y];
    getch();
    return 0;
}
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
// Вычисляет выражение 12+4*56+(12*2+5)*13 записанное в постфиксной форме
#include "stdafx.h"
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
int LIFO[100];
int Top=0;
void push(int number)
{
    LIFO[Top]=number;
    Top++;
}
int main(int argc, char* argv[])
{
    char *f="12 4 56 * + 12 2 * 5 + 13 * +";
    int a=0;
    int c=0;
    for(int i=0; f[i]!='\0'; i++)
    {
        if (f[i]=='+')
        {
            LIFO[Top-2]+=LIFO[Top-1];
            Top--;
        }
        if(f[i]=='*')
        {
            LIFO[Top-2]*=LIFO[Top-1];
            Top--;
        }
        if (f[i]!=' ' && f[i]!='*' && f[i]!='+')
        {
            if(a==0)
                a=(int)f[i]-48;
            else
                a=a*10+((int)f[i]-48);
        }
        if (f[i]==' ')
        {
            if(a>0) 
            {
                push(a);
                a=0;
            }
        }
    }
 
 
 
    cout<<LIFO[0]<<endl;
 
    getch();
    return 0;
}
 
Текущее время: 18:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru