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

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

Войти
Регистрация
Восстановить пароль
 
Grotex
0 / 0 / 0
Регистрация: 10.11.2009
Сообщений: 11
#1

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

13.11.2009, 16:29. Просмотров 479. Ответов 4
Метки нет (Все метки)

Нужны хотя бы наброски решения следующей задачи:

"Вводится выражение, надо указать его тип (постфиксное/префиксное) и посчитать значение. Используемые знаки "+", "-", "*", "/", "^". Должна быть возможность обработки двуциферных чисел и как минимум 8 действий."

А то я как-то не очень понимаю как это дело вообще начать делать...
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.11.2009, 16:29     Нужно решение
Посмотрите здесь:

нужно решение - C++
Реализовать классы для работы с длинными числами арифметически, Работа с числами которые не входят стандартные.

Нужно решение! - C++
Найти первый член последователности, для которого выполнено условие |An -An-1|< E, если последовательностей образована по закону : A1...

Нужно решение - C++
1. Из стального прямоугольного листа стандартного размера 1200×800 мм толщиной 3 мм вырезаются круги одинакового размера. Круги...

Нужно решение в c++ - C++
Уважаемые форумчани, помогите пожалуйста с задачей. Завтра нужно сдавать, у самого не получается..( Заранее большое спасибо!!! А....

нужно решение - C++
Помогите решить на с++. Я только начинаю изучать С ++, пока ещё плохо разбираюсь. Заранее спасибо. 1 Дан одномерный массив из 150...

нужно решение к субботе - C++
Необходимо проверить веденное число на 3

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
508 / 430 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
13.11.2009, 18:27     Нужно решение #2
тебе на си или на си++?
Grotex
0 / 0 / 0
Регистрация: 10.11.2009
Сообщений: 11
13.11.2009, 18:29  [ТС]     Нужно решение #3
На С
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
13.11.2009, 21:06     Нужно решение #4
"Вводится выражение, надо указать его тип (постфиксное/префиксное) и посчитать значение. Используемые знаки "+", "-", "*", "/", "^". Должна быть возможность обработки двуциферных чисел и как минимум 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.11.2009, 01:35     Нужно решение
Еще ссылки по теме:

Процедуры нужно решение на с ++ - C++
Описать процедуру Minmax(X, Y), записывающую в переменную X минимальное из значений X и Y, а в переменную Y — максимальное из этих...

мне нужно, чтобы решение сохранялось в файл - C++
помогите, пожалуйста, с кодом. мне нужно, чтобы решение сохранялось в файл. то есть была сохранена исходная матрица, преобразованное и...

Нужно написать решение не знаю как к субботе - C++
Необходимо проверить делиться веденное число на 3. Число деться на 3 если сумма его цифр делиться на 3. (3, 9, 6,)

Нужно решение задачи об ограниченном рюкзаке разными методами - C++
Всем привет!!!может кто-нибудь помочь кодом,решение задачи об ограниченном рюкзаке разными методами?очень надо:(


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

Или воспользуйтесь поиском по форуму:
Grotex
0 / 0 / 0
Регистрация: 10.11.2009
Сообщений: 11
14.11.2009, 01:35  [ТС]     Нужно решение #5
Спасибо, с утра попробую разобраться что к чему.
Yandex
Объявления
14.11.2009, 01:35     Нужно решение
Ответ Создать тему
Опции темы

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