Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
yourchoice17
0 / 0 / 0
Регистрация: 07.05.2011
Сообщений: 7
#1

Ввод функции с клавиатуры - C++

12.05.2011, 21:45. Просмотров 2339. Ответов 17
Метки нет (Все метки)

Здравствуйте. Необходима помощь в написании программы на С. Программа поиска минимума и максимума функции методом кого-то. С методом может еще разберусь, проблема - как сделать, чтобы пользователь сам вводил функцию с клавиатуры, и программа с ней работала? Функция может быть нескольких переменных. Помогите пожалуйста, можно на словах, в каком направлении вообще мыслить, или с кодом, кто сможет...
http://www.cyberforum.ru/cpp-beginners/thread120389.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2011, 21:45
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ввод функции с клавиатуры (C++):

Ввод функции (аналитического выражения) с клавиатуры
Возникла следующая проблема, преподаватель хочет что-бы в моей программе был...

Реализовать функции, обеспечивающую ввод данных с клавиатуры и их проверку на корректность
1. Реализовать функцию, обеспечивающую ввод данных с клавиатуры и их проверку...

Как правильно заменить ввод данных простой на ввод с клавиатуры?
#include "stdafx.h" #include <cstdlib> #include <iostream> using namespace...

Файловый ввод-вывод, ввод с клавиатуры и обработка массива структур
Добрый вечер)) У меня небольшой вопрос. Почему первые буквы (в названии книг)...

Переделать ввод из файла на ввод с клавиатуры
void openfile(int**a) { std::ifstream file("input.txt",...

17
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
12.05.2011, 22:01 #2
Надо пропарсить строку и перевести ее в дерево, с которым потом работать.
1
yourchoice17
0 / 0 / 0
Регистрация: 07.05.2011
Сообщений: 7
13.05.2011, 00:06  [ТС] #3
А могли бы вы пояснить на примере, как это сделать..? На С?
0
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
13.05.2011, 10:14 #4
yourchoice17, на самом деле задача нетривиальная. Тут в несколько строк не уложишься.
0
yourchoice17
0 / 0 / 0
Регистрация: 07.05.2011
Сообщений: 7
13.05.2011, 13:00  [ТС] #5
gooseim, я же не говорила, что мне надо решить это в несколько строк.. Мне все равно сколько их будет, мне надо это сделать, как - не знаю, поэтому я и обратилась за помощью..))
0
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
13.05.2011, 14:00 #6
yourchoice17, вы просто говорили про пример, а пример, который писать не в несколько строк у меня нет времени, и думаю у других форумчан тоже.
0
yourchoice17
0 / 0 / 0
Регистрация: 07.05.2011
Сообщений: 7
13.05.2011, 15:05  [ТС] #7
gooseim, я думаю, если у вас нет времени, это не повод говорить, что его нет у всех на форуме! Или по-вашему, если у меня большая задача, мне вообще не нужно было создавать тему? Мне кажется, неписанное правило форума: можешь помочь - помоги, не можешь, или "нет времени" - твое дело, закрой тему, и не отвечай за всех...
0
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
13.05.2011, 17:17 #8
Цитата Сообщение от yourchoice17 Посмотреть сообщение
Или по-вашему, если у меня большая задача, мне вообще не нужно было создавать тему?
Если хотите получить готовое, то именно так.
0
Kastaneda
Jesus loves me
Эксперт С++
4759 / 2962 / 340
Регистрация: 12.12.2009
Сообщений: 7,520
Записей в блоге: 2
Завершенные тесты: 1
13.05.2011, 17:58 #9
А мне кажется, что ТС неверно сформулировал(а) задание, потому как в данной формулировке задача действительно нетревиальная. Возможно суть задания - это использования switch или что-нибудь в этом духе.
yourchoice17, процитируй текст задачи.
0
Mиxaил
534 / 439 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
13.05.2011, 18:18 #10
Нужно капать в направлении Обратная польская запись, если я правильно понял... Здесь задействован стэк... Можно, конечно, и через деревья...но стэком проще...
Вот есть на форуме, реализация - Си: link

Добавлено через 2 минуты
Вот еще: link 2
1
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
13.05.2011, 18:25 #11
Mиxaил, нет, здесь как раз стек и польская запись не причем. Стек нужен для выполненния выражения, когда известны все данные. В этом случае данные неизвестны, а нужна именно структура. Поэтому только через деревья.
0
Mиxaил
534 / 439 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
13.05.2011, 18:28 #12
Когда введешь строку, ее можно преобразовать в польскую запись, потом с ней работать...
По - любому, функцию очень сложную не ввести, иначе трудно будет преобразования выполнять, так что... все можно реализовать
0
yourchoice17
0 / 0 / 0
Регистрация: 07.05.2011
Сообщений: 7
13.05.2011, 19:59  [ТС] #13
Не понимаю, почему меня НИКТО не понимает. Цитирую задачу:"Написать программу поиска минимума и максимума функции методом Хука-Дживса". Допустим, я пользователь и мне нужно найти максимум функции y=3*x+2, а потом функции y=3*x^3+2*z^2+k. Если бы мы искали максимум уравнений какого-то одного вида, можно было бы создать массив из коэффициентов при переменных и дальше с ними работать. Но у них разный вид, и я спрашивала, как мне сделать, чтобы программа искала максимум для конкретно введенной любой функции любого количества аргументов. Готовую программу никого писать не просила, как подумали некоторые. Может быть теперь я объяснила понятнее...

Добавлено через 1 минуту
Ладно. Спасибо всем за ответы.
0
Ma3a
Эксперт С++
619 / 463 / 57
Регистрация: 28.01.2011
Сообщений: 605
13.05.2011, 20:02 #14
gooseim, а почему, собственно, обратная польская запись не может служить заменой дерева? Обратная польская представляет собой ни что иное, как обход такого синтаксического дерева в post-order манере, то есть от левого к правому сыну и потом в родительский узел, так что из нее можно и дерево восстановить при желании.
0
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
13.05.2011, 20:32 #15
Ma3a, давайте пример.
Есть такое выражение:
(x+2)*(z+1)-y
В постфиксной записи это будет так:
-
*
+
x
2
+
z
1
y
Теперь скажите мне, как узнать из такой записи, что '-' относится к y?
Только путем сложного анализа этого стека.
А в случае с деревом все проще, мы просто проходим по всем узлам и ищем нужный нам y.
Я не говорю, что постфиксная запись плохая, но она неприменима к таким задачам. Для вычисления выражений, например, она подходит, и даже лучше, чем дерево.
0
Ma3a
Эксперт С++
619 / 463 / 57
Регистрация: 28.01.2011
Сообщений: 605
13.05.2011, 20:43 #16
gooseim, да, потребуется анализ, чтобы построить дерево, в этом плане дерево несомненно выигрывает(впрочем, на самом деле, дерево выигрывает всегда), но я просто к тому, что обратную польскую для простого арифметического выражения строить все-же полегче, чисто технически в плане кодинга, чем полноценный парсер с полноценным выводом дерева, в случае LL,LR,LALR парсеров дерево получается автоматически, а вот если например что-то более общее типа алгоритма Эрли, то тут придется сильно попотеть, чтобы довести парсинг до дерева.
0
gooseim
Эксперт С++
510 / 414 / 92
Регистрация: 23.09.2010
Сообщений: 1,159
13.05.2011, 20:58 #17
Цитата Сообщение от Ma3a Посмотреть сообщение
но я просто к тому, что обратную польскую для простого арифметического выражения строить все-же полегче, чисто технически в плане кодинга, чем полноценный парсер с полноценным выводом дерева
Зачем легко строить то, что потом будет ненужно? Лучше сделать сложно, но что бы потом использовать.
Цитата Сообщение от Ma3a Посмотреть сообщение
в случае LL,LR,LALR парсеров дерево получается автоматически, а вот если например что-то более общее типа алгоритма Эрли, то тут придется сильно попотеть, чтобы довести парсинг до дерева.
Мы обсуждаем конкретный случай: формулу. Здесь сложность построения дерева и стека будет примерно одинакова.
Цитата Сообщение от Ma3a Посмотреть сообщение
впрочем, на самом деле, дерево выигрывает всегда
Я бы не сказал. Для построения простого интерпретатора, там, где не требуется оптимизация, стек выигрывает и по скорости, и по ресурсам, и по простоте кода.
0
Ma3a
Эксперт С++
619 / 463 / 57
Регистрация: 28.01.2011
Сообщений: 605
13.05.2011, 21:03 #18
gooseim, от конкретной задачи я что-то отдалился в сторону общего, чуть не забылся, вы в данном случае правы, дерево будет единственным выходом применительно к данной задаче, извиняюсь за скоропалительные высказывания.
0
13.05.2011, 21:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2011, 21:03
Привет! Вот еще темы с решениями:

ввод с клавиатуры
помогите, пожалуйста, сделать ввод с клавиатуры: #include<iostream>...

Ввод с клавиатуры
на С++ надо организовать ввод с клавиатуры, при этом я не знаю сколько...

Ввод с клавиатуры
Напишите программу, которая будет читать целое число от ввода с клавиатуры и...

Ввод с клавиатуры
Нужна помощь !Как сделать,чтобы значения указателей *str1 и *str2 можно было...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru