Польская запись с защитой от дурака - C#
Формулировка задачи:
в общем тема такая. не могу написать защиту полность. например: почему-то не работает защита от неверного кол-ва закрывающихся скобок, или когда ставишь 2 подряд операции (++, // и т.д.) со операциями в конце и в начале вроде работает.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int s = 0; int i;
string zn = Console.ReadLine();
int sum = 0; // тут будет формироваться результат выражения
char arefm_znak = ' ';
string str = ""; // строка в которой будет формироваться польская запись
//защита от неверного ввода арефметического знака
char znak = ' ';
int flag = 0;
for (i = 0; i < zn.Length; i++)
{
if (zn[i] == '+' || zn[i] == '-' || zn[i] == '/' || zn[i] == '*')
{
if (flag != 0)
flag = 0;
else
Console.WriteLine(" Не Верно");
}
if (zn[i] >= '0' && zn[i] <= '9')
flag = 1;
}
if (flag == 0) //проверка на лишние арефметические знаки в конце.
Console.WriteLine(" Не Верно");
//защита от неверного количества скобок
for (i = 0; i < zn.Length; i++)
{
if (zn[i] == '(')
{
s = s + 1;
}
if (zn[i] == ')')
{
s = s - 1;
}
}
if (s != 0)
{
Console.WriteLine(" Не Верно");
}
else
{
foreach (char ch in zn)
{
if (ch >= '0' && ch <= '9')
{
if (arefm_znak == ' ')
{
sum = int.Parse(ch.ToString());
str += sum.ToString() + ' ';
}
else
{
if (arefm_znak == '-')
sum -= int.Parse(ch.ToString());
if (arefm_znak == '+')
sum += int.Parse(ch.ToString());
if (arefm_znak == '*')
sum *= int.Parse(ch.ToString());
if (arefm_znak == '/')
sum /= int.Parse(ch.ToString());
str += ch.ToString() + ' ' + arefm_znak.ToString() + ' ';
}
}
else
if (ch == '-' || ch == '+' || ch == '*' || ch == '/')
arefm_znak = ch;
}
Console.WriteLine("{0} = {1}", str, sum);
}
Console.ReadKey();
}
}
}Решение задачи: «Польская запись с защитой от дурака»
textual
Листинг программы
for (i = 0; i < zn.Length; i++)
{
if (zn[i] == '+' || zn[i] == '-' || zn[i] == '/' || zn[i] == '*')
{
if (flag == 1)
Console.WriteLine(" Не Верно");
flag = 1;
}
if (zn[i] >= '0' && zn[i] <= '9')
flag = 0;
}