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

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

Войти
Регистрация
Восстановить пароль
 
aleksand
21 / 9 / 2
Регистрация: 18.06.2011
Сообщений: 185
#1

Проверьте программу пожалуйста - C++

17.10.2012, 16:30. Просмотров 257. Ответов 2
Метки нет (Все метки)

Суть программы заключается в следующем: мы вводим выражение ((2+2)/2*5+10) и программа выдаёт правильно или нет с точки зрения операций наше выражение. В программе я учёл следующие случаи:
1). *2 (/2) при условии что */ - первый элемент.
2). 2+ (2-;2*;2/) при условии что знак идёт перед концом строки.
3). ++2
--2 при всех их возможных комбинациях
**2
//2

4). 2++
2-- при всех их возможных комбинациях
2**
2//

5). +;-;*;/ если просто ввели знак без цифры
6). () если просто скобки без цифр
7). +); -); *); /) перед закрывающейся скобкой какой-либо знак
8). (*; (/ после открывающейся скобки * и /
9). *(; /(
10). )+; )-; )*; )/ при условии что после алгебраических знаков идёт конец строки.
11). Количество скобок чтобы было одинаковое
11). правильность их расположения, чтобы исключить такой вариант: "2+)("
12). выражение вида ((2+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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <stdio.h>
#include <math.h>
 
int strlen(char *x)
{
    int len = 0;
    while(*x!='\0') {
        x++;
        len++;
    }
 
    return (len);
}
 
int main()
{
    int i, x, u, wrong;
    char s[100], *w, *q;
    printf("Enter smth like it: 2+2\n");
    scanf("%s", &s);
    w = s;
    q = s;
    x = strlen(q);
 
    for(i=0;i<x;i++) {
        /*Проверка без скобок*/
        if((s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')&&(s[i+1]=='+'||s[i+1]=='-'||s[i+1]=='*'||s[i+1]=='/')) wrong = 0; //++(--;**;//) и их комбинации
        if((s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/')&&(s[i+1]=='\0')) wrong = 0; // 2- (+;*;/)
        if(i==0 && (s[i]=='*'||s[i]=='/')) wrong = 0; // *(/)2
        if(i==0 && (s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/') && s[i+1]=='\0') wrong = 0;//+(-;*;/)
 
        /*Проверка со скобками*/
        if((s[i]=='+'||s[i]=='-'||s[i]=='*'||s[i]=='/') && s[i+1]==')') wrong = 0; // (-;*;/) +)
        if(s[i]=='('&& (s[i+1]=='*'||s[i+1]=='/')) wrong = 0; // (* (/)
        if(i==0 && (s[i]=='*'||s[i]=='/') && s[i+1]=='(') wrong = 0; // (/) *(
        if(s[i]==')' && (s[i+1]=='+'||s[i+1]=='-'||s[i+1]=='*'||s[i+1]=='/') && s[i+2]=='\0') wrong = 0; // (+ (-;*;/) при '\0'
        if(s[i]=='(' && s[i+1]==')') wrong = 0;
 
        /*((2+2))*/
        if(s[i]=='(' && s[i+1]=='(') {
            int f = i;
            while(s[f])
            {
                if(s[f]!=')' && s[f+1]!=')') wrong = 0;
                f++;
            }
        }
    }
 
    /*Проверка скобок на количество и правильность расстановки*/
    for(u=0; *w; w++) {
        if (*w=='(') u++;
        if (*w==')') u--;
        if (u<0) break;
        }
        if (u==0) {
        }
        else 
        {
            wrong = 0;
        }
        
    if(wrong == 0) printf("Virajenie NE verno!");
    else printf("Virajenie verno!");
 
    getchar();
    getchar();
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2012, 16:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверьте программу пожалуйста (C++):

Проверьте пожалуйста программу - C++
Нужно найти минимальное из М чисел... #include &lt;stdio.h&gt; int M,y; int minimym(M) { int a,y,i; y=99999; for...

Проверьте пожалуйста программу - C++
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include...

проверьте, пожалуйста, программу - C++
Кто подскажет. Почему не запускается? #include &lt;iostream&gt; int main() { const int size=5; int X={2,8,5,7,9}; ...

проверьте пожалуйста! - C++
Доброе утро!Хочу показать вам не проверку свое творение.Не запускается. Вот текст ошибки: g++.exe...

проверьте пожалуйста! - C++
не совсем уверен что правильно #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace...

Проверьте пожалуйста код - C++
#include &lt;iostream&gt; #include&lt;stdlib.h&gt; // в этом файле содержатся функции rand() и srand() #include&lt;time.h&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
John Prick
801 / 734 / 145
Регистрация: 27.07.2012
Сообщений: 2,107
Завершенные тесты: 3
17.10.2012, 16:37 #2
Тут, наверное, нужно дерево операций строить. Хотя ХЗ, может для синтаксической проверки и не надо.
0
panicwassano
592 / 560 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
17.10.2012, 16:38 #3
Цитата Сообщение от aleksand Посмотреть сообщение
программа выдаёт правильно или нет с точки зрения операций наше выражение
парсер выражений, посмотрите калькулятор страуструпа
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2012, 16:38
Привет! Вот еще темы с ответами:

Проверьте код пожалуйста - C++
В чем ошибка? Если он в ответе выдает только: Vvedite element massiva: A= #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include...

Проверьте пожалуйста код (C++) - C++
Вот я сам написал код(!)) Можете проверить: main() { printf(&quot;Content-type:text/html\n\n&quot;);

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

Проверьте правильность пожалуйста - C++
Правильно ли я реализовал задание? Задание: В массиве Z(m) найти число чередований знака, то есть число переходов с минуса на плюс или с...


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

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

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