0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 99
1

Решение формулы с помощью стека

29.03.2016, 10:41. Показов 2841. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите с программой,пожалуйста. Или хотя бы посоветуйте литературу или дайте ссылки на сайт, где имеется доступная информация по данной теме.

Решить с помощью стеков.
В текстовом файле записана без ошибок формула вида:
<формула>=<цифра>|M(<формула>,<формула>)|m(<формула>,<формула>)
<цифра>=0|1|2|3|4|5|6|7|8|9
M обозначает вычисление максимума, m – минимума
Вычислить значение этой формулы
Например M(m(3,5),M(1,2))=3
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.03.2016, 10:41
Ответы с готовыми решениями:

Упорядочить элементы числового массива в порядке возрастания с помощью стека и линейного списка
Упорядочить элементы числового массива в порядке возрастания с помощью стека и линейного списка. ...

Построить матрицу любого размера и с помощью определенной формулы
Доброго времени суток дамы и господа. Никогда не любил массивы, но решил подтянуть свои знания по...

Не понятен алгоритм для вычисления формулы с помощью рекурсии
Здравствуйте. У меня стоит задание : Сложить алгоритм вычисления по формуле Сi = ai x bi Здесь...

Решение задачи с помощью полиморфизма
В окне приложения первоначально появляются 4 поля ввода, относящиеся к двум категориям: Если...

9
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,295
Записей в блоге: 1
29.03.2016, 12:50 2
KatarinaR, создаем Stack<char>. В цикле перебираем символы строки. Если встретили M, m или цифру, то помещаем (Push) в стек; если встретили ')', то извлекаем (Pop) два операнда и оператор (M или m), выполняем его и помещаем результат в стек; другие символы игнорируем. После цикла извлекаем элемент из стека (он будет один). Это и есть результат.
2
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 99
24.05.2016, 11:09  [ТС] 3
Начала писать программу, не понимаю, как извлечь два операнда и оператор и выполнить.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;
namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader fileIn=new StreamReader("t.txt");
            string line=fileIn.ReadToEnd();
            fileIn.Close();
            Stack intStack = new Stack();
            Stack charStack = new Stack();
            for ( int i=0; i<line.Length;i++)
                if (line[i] == 'M' && line[i] == 'm' ) charStack.Push(i); 
            else if (line[i] == ')') 
        }
    }
}
Добавлено через 15 минут
Начала писать программу, не понимаю, как извлечь два операнда и оператор и выполнить.
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Collections;
namespace ConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            StreamReader fileIn=new StreamReader("t.txt");
            string line=fileIn.ReadToEnd();
            fileIn.Close();
            Stack intStack = new Stack();
            Stack charStack = new Stack();
            for ( int i=0; i<line.Length;i++)
 
                
            {
                if (line[i] == 'M' || line[i] == 'm' ) charStack.Push(i); 
                if (line[i] >= '0' && line[i] <= '9' ) intStack.Push(i); 
            }
            //else if (line[i] == ')') 
        }
    }
}
}
0
1494 / 1209 / 821
Регистрация: 29.02.2016
Сообщений: 3,614
24.05.2016, 13:06 4
The use of Stacks in C#
http://www.codeproject.com/Art... tacks-in-C

Добавлено через 34 минуты
Stack-based evaluator for an expression in reverse Polish notation
https://rosettacode.org/wiki/P... rithm#C.23
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,295
Записей в блоге: 1
24.05.2016, 13:43 5
KatarinaR, 1. Используй Stack<char> для хранения оператора и Stack<int> для хранения чисел. Для этого добавь директиву using System.Collections.Generic;
C#
1
2
Stack<int> intStack = new Stack<int>();
Stack<char> charStack = new Stack<char>();
2. В стек следует помещать не индекс символа, а символ 'm' или 'p'. Для символа цифры помещаем в стек цифру
C#
1
2
if (line[i] == 'M' || line[i] == 'm' ) charStack.Push('m');
if (line[i] >= '0' && line[i] <= '9' ) intStack.Push(line[i] - '0');
0
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 99
24.05.2016, 13:54  [ТС] 6
Для того,чтобы производились вычисления нужно задать функцию?
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,295
Записей в блоге: 1
24.05.2016, 13:55 7
KatarinaR, отдельную функцию создавать необязательно, если ты об этом. Можно вычислять прямо в цикле.
0
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 99
24.05.2016, 15:29  [ТС] 8
ТО есть, когда мы встречаем знак ')', то мы берем верхние элементы двух стеков, вычисляем значение,записываем его в стек для цифр? ПОмогите пожалуйста реализовать в коде. Для того, чтобы взять элемент из стека нужно использовать intStack.Pop()
0
Администратор
Эксперт .NET
16989 / 13348 / 5209
Регистрация: 17.03.2014
Сообщений: 27,295
Записей в блоге: 1
24.05.2016, 15:37 9
KatarinaR, я не понимаю какая тут требуется помощь если вам известен алгоритм и метод с помощью которого он реализуется. Пример работы с методом Stack<T>.Pop() есть в документации.
0
0 / 0 / 0
Регистрация: 17.02.2015
Сообщений: 99
24.05.2016, 15:41  [ТС] 10
Я не могу реализовать алгоритм,написать код. Вроде знаю, как это работает.
Не знаю,что писать после этого
C#
1
 if (line[i]==')')
0
24.05.2016, 15:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.05.2016, 15:41
Помогаю со студенческими работами здесь

Решение системы линейных уравнений с помощью метода Гаусса
Помогите реализовать данную программу на С#. Здесь описан алгоритм решения системы линейных...

Реализация стека с помощью массива
Извиняюсь. Неправильно тему назвал :) Стек – KStack Методы: конструкторы, деструктор;...

Частичное реверсирование с помощью стека
У кого-нибудь есть идеи насчет этой задачи? :) Реализовать стек в виде списка. Дана величина a...

С помощью стека переставить местами слова
Есть строка: &quot; мама мыла раму &quot;. Нужно с помощью стека переставить местами слова т.е. результат...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru