Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычисление последовательности 
:(
    Опции темы
Abbath1349
Дата 18.3.2011, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 214
Регистрация: 16.6.2010

Репутация: нет
Всего: нет



Пишу программу для вычисления последовательности типа d1+d2/d3*d4-d7+....dn. Вроде считает все нормально, но когда ввожу длинную последовательность вычисляется не вся как это можн исправить?

Код

namespace Summ
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        static bool IsASymb(char symb)
        {
            if (symb.Equals('+') || symb.Equals('-') || symb.Equals('*') || (symb.Equals('/')))
                return true;
            else
                return false;
        }
        static List<int> string_to_int(string date)
        {

            string[] numbers = date.Split('+', '-', '*', '/');
            int nl = numbers.Length;
            List<int> total = new List<int>();
            for (int i = 0; i < nl; i++)
                total.Add(Convert.ToInt32(numbers[i]));
            return total;
        }
        static List<char> get_symbols(string date, ref int n_s)
        {
            char[] datesymb = date.ToCharArray();
            List<char> ArSymbs = new List<char>();
            foreach (char i in datesymb)
                if (IsASymb(i))
                {
                    n_s++;
                    ArSymbs.Add(i);
                }
            return ArSymbs;

        }
        static void delete_symb(List<char> symb, int counter)
        {

            while (counter != 0)
            {
                symb.Remove('*');
                counter--;
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            string data = textBox1.Text;
            List<int> total = string_to_int(data);
            int n_s = 0;
            List<char> ArSymb = get_symbols(data, ref n_s);
            int counter = 0;

            for (int i = 0; i < n_s; i++)
            {
                if (ArSymb[i].Equals('*') || ArSymb[i].Equals('/'))
                {
                    if (ArSymb[i].Equals('*'))
                    {
                        total[i - counter] = total[i - counter] * total[i + 1 - counter];
                        total.RemoveAt(i + 1 - counter);
                    }
                    else
                    {
                        total[i - counter] = total[i - counter] / total[i + 1 - counter];
                        total.RemoveAt(i + 1 - counter);
                    }
                    counter++;
                }
            }

            n_s -= counter;
            delete_symb(ArSymb, counter);
            counter = 0;

            for (int i = 0; i < n_s; i++)
            {
                if (ArSymb[i].Equals('+') || ArSymb[i].Equals('-'))
                {
                    if (ArSymb[i].Equals('+'))
                    {
                        total[i - counter] = total[i - counter] + total[i + 1 - counter];
                        total.RemoveAt(i + 1 - counter);
                    }
                    else
                    {
                        total[i - counter] = total[i - counter] - total[i + 1 - counter];
                        total.RemoveAt(i + 1 - counter);
                    }
                    counter++;
                }
            }
            label1.Text = total[0].ToString();
        }
    }
}

PM MAIL   Вверх
Fortnox
Дата 19.3.2011, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 14
Всего: 22



Если вы хотите сделать нечто вроде калькулятора этих выражений, то можно использовать польскую нотацию. 
И готовый класс есть тут.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0396 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.