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

Построить распознаватель языка с помощью стека - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Страуструп, и траблы в среде программирования http://www.cyberforum.ru/cpp-beginners/thread649642.html
Всем добрых суток! Я начал изучение где-то 3 дня назад, 3 дня от компьютера не отхожу ,читаю, делаю записи в тетради. Мне это очень интересно, у меня много энтузиазма, поэтому не могу не задать...
C++ Что такое компилятор? и т.д Всем привет, может быть пост не в тему! Но очень хотелось бы знать, что такое компилятор, и как он работает, подробней узнать. Спасибо за ответ P.S я новичок :) http://www.cyberforum.ru/cpp-beginners/thread649634.html
Вычислить значение выражения, найти сумму ряда C++
ребята! до завтра решите задачу. пожалуйста. я ноль в программировании а)x = arccos(\sqrt{\beta }y - a) б)S = 4 + \sum_{i=1}^{50}{i}^{2} Добавлено через 2 часа 13 минут с этой тоже помогите...
Составить алгоритм определения последовательности номеров удаляемых спортсменов C++
ребята! до завтра ришите задачу. пожалуйста. я ноль в программировании по кругу стоят N спортсменов с номерами от 1 до N. начиная с кокого-то человека,по кругу удаляется каждый k-ый спортсмен....
C++ По введенному значению аргумента вычислить значение функции, заданной в виде графика http://www.cyberforum.ru/cpp-beginners/thread649609.html
Задание 1. Написать программу, которая по введенному значению аргумента вычисляет значение функции, заданной в виде графика. Параметр R вводится с клавиатуры. Задание 2. Вычислить и вывести на...
C++ Что такое globalFix? Задача: ввести с клавиатуры строку символов, удалить из нее все гласные буквы, используя функции. Ниже приведено решение (не мое, взял у доброго человека), но мой компилятор (DevC++) спотыкается... подробнее

Показать сообщение отдельно
sTARKj
0 / 0 / 1
Регистрация: 10.09.2012
Сообщений: 40
16.09.2012, 09:25  [ТС]
Вот листинг программы, которая проверяет являетсья ли введенное выражение выражением в префиксной форме и соответственно выдает сообщение о том являеться или нет.
Вот например пишем туда ++ABC или +$AB знак доллара, это корень как будто...выраэение считывается с конца строки и если там символ, он помещается в стек, если дальше ещё символ тоже в стек, если встречается $ просто ничего не делаем переходим к следующему символу. Если встречается +-* или / то вытаскиваются два символа из стека и вместо них один неважно какой, ну или просто вытаскивается один, вот если в конце когда все выражение пройдено с конца до начала, в стеке остаётся один символ то выражение префиксное, здесь стек сделан на основе структур. Может кто делал или есть листинг на основе классов или ещё как нибудь реализованный по другому стек?

делал в билдере 6:

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
#pragma hdrstop
#include<fstream.h>
#include<stdlib.h>
#include<string.h>
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
#include<iomanip.h>
 
struct prf
{char sym[2];
prf *p;
};
 
prf *first(char *sym)
{prf *temp=new prf;
strcpy(temp->sym,sym);
temp->p=NULL;
return temp;
}
 
void vstek(prf **stek, char *sym)
{prf *temp=new prf;
strcpy(temp->sym,sym);
temp->p=*stek;
*stek=temp;
}
 
char del(prf **stek)
{//char som[1];
//strcpy(som,(*stek)->sym);
prf *temp=*stek;
*stek=(*stek)->p;
delete temp;
 
}
 
void vivod(prf **stek)
{prf *temp=*stek;
while(temp)
{cout<<temp->sym<<"   ";
//cout<<endl;
temp=temp->p;}
}
 
int isprf(prf **stek)
{prf *temp=*stek;
if (temp->p==NULL)
return 1;
else
return 0;
}
 
#pragma argsused
int main(int argc, char* argv[])
{char sim[2];
char str[20]; int i=0;
cout<<"Vveite stroku: "<<endl;
cin>>str;
while(str[i]!=NULL)
{i++;}
if (isalpha(str[0])&&(str[1]=NULL))
cout<<"-------FORMA PREFIXNAJA------"<<endl;
if (isalpha(str[i-1]))
{sim[0]=str[i-1];
prf *elem=first(sim);
for(int j=i-2; j>=0; j--)
{if (isalpha(str[j]))
{sim[0]=str[j];
vstek(&elem,sim);}
else
if ((str[j]=='+')||(str[j]=='-')||(str[j]=='/')||(str[j]=='*'))
del(&elem);}
vivod(&elem);
if (isprf(&elem)==1)
cout<<endl<<"-------FORMA PREFIXNAJA------"<<endl;
else
cout<<"-------FORMA NE PREFIXNAJA------"<<endl;}
else
cout<<"-------FORMA NE PREFIXNAJA------"<<endl;
getch();
        return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru