Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2010, 19:03   #1
tatu_cat_69
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 10
По умолчанию Польская запись

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
   class Program
    {
        static bool checkString(string str)
       {
           bool isCorrect = true;
           int s = 0;
           if ((str[0] == '(' && (str[str.Length - 1] == '('))) s++;
           if ((str[0] == ' ' && (str[str.Length - 1] == ' '))) s--;
           if ((str[0] == '+' || (str[0] == '-' || (str[0] == '*' || (str[0] == '/'))))) isCorrect = false;
           else if ((str[str.Length - 1] == '+' || (str[str.Length - 1] == '-' || (str[str.Length - 1] == '*' || (str[str.Length - 1] == '/'))))) isCorrect = false;
           else if (((!Char.IsDigit(str[0])) || (!Char.IsDigit(str[str.Length - 1]))) && ((str[0] != '(' && (str[str.Length - 1] != ' ')))) isCorrect = false;
           else for (int i = 1; i < str.Length - 2; i++)
               {
                   if ((str[i] == '+' || (str[i] == '-' || (str[i] == '*' || (str[i] == '/')))))
                   {
                       if ((str[i + 1] == '+' || (str[i + 1] == '-' || (str[i + 1] == '*' || (str[i + 1] == '/'))))) isCorrect = false;

                   }
                   else if (!Char.IsDigit(str[i]) && (str[i] != '(' && (str[i] != ' '))) isCorrect = false;
                   if (str[i] == '(') s++;
                   if (str[i] == ' ') s--;
               }
           if (s == 0) isCorrect &= true;
           else isCorrect &= false;
           return isCorrect;
       }

        static void Main(string[] args)
        {

            

            string zn = Console.ReadLine();

            int sum = 0; // тут будет формироваться результат выражения
            char arefm_znak = ' ';
            string str = ""; // строка в которой будет формироваться польская запись
            if (checkString(zn) == false)
            {
                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();

        }
    }
}

ковырялся долго, разными способами пробывал....но не получается реализовать приоритет опраций, и что-то я с защитой на дурака перемудрил...выражения со скобками считает не верным....например2+2)/(2*3-3) считает неверным(((

помогите пожайлуста....лаба горит, охото отмазаться от си шарпа и не париться с ним. не силен в общем я в программировании(((
tatu_cat_69 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обратная польская запись alexobenikov Общие вопросы C/C++ 12 25.11.2010 23:03
Польская запись azl-8 Помощь студентам 0 06.05.2009 20:19
Обратная польская запись Катуха Помощь студентам 6 27.12.2008 10:23
Обратная польская запись Роман Радер Общие вопросы Delphi 0 09.12.2008 18:18