Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
28 / 28 / 10
Регистрация: 10.03.2012
Сообщений: 249

Консоль: объясните работу кода

25.03.2012, 18:26. Показов 797. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу консольное приложение, которое строку с истфиксной записи будет превращать в постфиксную, например "1+(2-3)*4" превращать в "123-4*+"

метод alg(); на данном этапе должен добавлять цифры со строки в stack, но нифига не добавляет.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace BPR
{
    public class Rpn
    {
        private string[] stack = new string[100];
        private string record;
        private int[] bas = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
        int i = 0;
 
        public Rpn()
        {
            for (int i = 0; i < 100; i++)
            {
                stack[i] = "";
            }
        }
 
        public void input()
        {
            record = Console.ReadLine();
        }
 
        public void output()
        {
            for (int i = 0; i < 100; i++)
            {
                Console.WriteLine(stack[i]);
                
            }
        }
 
 
 
        public void alg()
        {
            int j = 0;
            foreach(char chr in record)
            {
                for (int i = 0; i < 10; i++)
                {
                    if (chr == Convert.ToChar(bas[i]))
                    {
                        stack[j] += Convert.ToString(bas[i]);
                    }                    
                }
 
                if ((chr == Convert.ToChar("+")) || (chr == Convert.ToChar("-")))
                {
                    j++;
                }
            }
        }
    }
    
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.03.2012, 18:26
Ответы с готовыми решениями:

Консоль: объясните работу кода
Вот класс, который должен преобразовать истфиксную строку в постфиксную. using System; using System.Collections.Generic; using...

Работа с foreach: объясните работу кода
Есть код: private void button11_Click(object sender, EventArgs e) { string str = textbox.Text.Split('\n'); ...

Объясните работу куска кода с IndexOf
Здравствуйте. Объясните, как работает кусок кода. Заранее спасибо. while (cur != -1) { cur =...

3
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
26.03.2012, 01:40
ну в коде особо не разбирался, но расскажу о некоторых штуках, к примеру есть метод Char.IsDigit который определяет является ли символ цифрой, а так же при сравнении символов достаточно написать chr=='+', еще под стек удобно использовать List, что бы и память не занимать и удобно добавлять динамически расширяя стек, так же строка
C#
1
stack[j] += Convert.ToString(bas[i]);
не имеет никакого смысла, так как числа сразу добавляются в выходную строку а не добавляются в стек, а вот как раз если знак арифм действий, то он добавляется в стек причем проверяется приоритет операции который был до того записан в стек если приоритет меньше, то знак арифм. действия добавляется в стек, если равен либо меньше то стек сливается в выходную строку, а новый знак арифметического действия добавляется в стек. При этом += при добавлении числа в выходную строку ну никак не является правильным потому как при числе 12 таким макаром в выходной строке получится число 3. Так что работы в понимании логики еще предостаточно, а так же не плохо бы сам алгоритм освежить вам в памяти. Не забывайте об отрицательных числах, это является одной из проблем для отделения числа от арифметических операций... Ах да..Роберт Ван Перси крут)
0
Эксперт .NET
 Аватар для Casper-SC
4434 / 2094 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
26.03.2012, 10:37
И ещё рекомендую почитать: Стандарт оформления кода C#.
Цитата Сообщение от van Persie Посмотреть сообщение
например "1+(2-3)*4" превращать в "123-4*+"
Я не понял по каким таким правилам знак "-" должен быть перед "4", поэтому сделал так как сделал:
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsApp_Some
{
    public class Rpn //Что значит Rpn поймёт только телепат, поэтому оставим так...
    {
        private char[] _stack;
        private string _record;
 
        public Rpn()
        {
        }
 
        public void Input()
        {
            _record = Console.ReadLine();
            if (_stack == null || _stack.Length < _record.Length)
                _stack = new char[_record.Length];
        }
 
        public void Output()
        {
            for (int i = 0; i < _stack.Length; i++)
            {
                if (_stack[i] == '\0')
                    break;
                Console.Write(_stack[i]);
            }
        }
 
        public void Algorithm()
        {
            int symbolIndex = 0;
            int operatorIndex = 0;
            char[] operators = new char[_record.Length];
            foreach (char chr in _record)
            {
                if (char.IsDigit(chr))
                    _stack[symbolIndex++] = chr;
                else if (chr == '+' || chr == '-' || chr == '*' || chr == '/')
                    operators[operatorIndex++] = chr;
            }
            int maxIterations = operatorIndex + symbolIndex;
            for (int i = symbolIndex; i < _record.Length; i++)
            {
                if (i == maxIterations)
                    break;
                _stack[i] = operators[i - symbolIndex];
            }
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsApp_Some
{
    class Program
    {
        static void Main(string[] args)
        {
            Rpn rpn = new Rpn();
            rpn.Input();
            rpn.Algorithm();
            rpn.Output();
 
            Console.ReadKey();
        }
    }
}
Добавлено через 8 минут
Ну или даже так, хотя нужно ли:
Вариант 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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
 
namespace ConsApp_Some
{
    public class Rpn
    {
        private char[] _stack;
        private string _record;
 
        public Rpn()
        {
        }
 
        public void Input(TextReader textReader)
        {
            _record = textReader.ReadLine();
            if (_stack == null || _stack.Length < _record.Length)
                _stack = new char[_record.Length];
        }
 
        public void Output(TextWriter textWriter)
        {
            for (int i = 0; i < _stack.Length; i++)
            {
                if (_stack[i] == '\0')
                    break;
                textWriter.Write(_stack[i]);
            }
        }
 
        public void Algorithm()
        {
            int symbolIndex = 0;
            int operatorIndex = 0;
            char[] operators = new char[_record.Length];
            foreach (char chr in _record)
            {
                if (char.IsDigit(chr))
                    _stack[symbolIndex++] = chr;
                else if (chr == '+' || chr == '-' || chr == '*' || chr == '/')
                    operators[operatorIndex++] = chr;
            }
            int maxIterations = operatorIndex + symbolIndex;
            for (int i = symbolIndex; i < _record.Length; i++)
            {
                if (i == maxIterations)
                    break;
                _stack[i] = operators[i - symbolIndex];
            }
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsApp_Some
{
    class Program
    {
        static void Main(string[] args)
        {
            Rpn rpn = new Rpn();
            rpn.Input(Console.In);
            rpn.Algorithm();
            rpn.Output(Console.Out);
 
            Console.ReadKey();
        }
    }
}
0
28 / 28 / 10
Регистрация: 10.03.2012
Сообщений: 249
26.03.2012, 21:48  [ТС]
rpn - reverse polish notation.
Спасибо за варианты. Вечером после универа буду разбираться. Тогда и отпишусь.

Добавлено через 8 часов 36 минут
Цитата Сообщение от Casper-SC Посмотреть сообщение
И ещё рекомендую почитать: Стандарт оформления кода C#.

Я не понял по каким таким правилам знак "-" должен быть перед "4", поэтому сделал так как сделал:
идея опз:

машина проверяет три символа подряд есть ли 2 операнда и оператор (например 23+) и выполняет операцию сложения соответственно 2+3. Результат записывает вместо 23+

Пример: 2 3 + 4 * 1 - = 5 4 * 1 - = 20 1- = 19
Истфиксный аналог: (2+3)*4-1 = 19

Пробую переделать ваш вариант, но пока не получается.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.03.2012, 21:48
Помогаю со студенческими работами здесь

Объясните строку вывода в консоль
Объясните что означает предпоследняя строка там где на консоль выводится как можно подробнее!!! using System; using System.Linq; ...

Объясните работу с классами
добрый день! объясните мне работу с классами. Мое видение то есть к примеру мне нужно создать программу которая будет выполнять функции 1....

Объясните работу класса ManagementObject
Осваиваю C#. практикуюсь на WMI и получении информации о ПК с его помощью. Например, есть такой код: string query =...

Объясните работу с интерфейсами в данном примере
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Observer { class...

Объясните работу цикла в приведенном коде
Объясните пожалуйста следующий фрагмент for (int i = 1; i &lt; txt.Length; i++) { pol = 0; ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru