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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2007, 11:29   #1
кетчуп
 
Регистрация: 15.04.2007
Сообщений: 5
По умолчанию Перевод строки в функцию

Задание: решение уравнений различными методами.
Необходимо: команда которая преобразует строку(вводимую с клавиатуры) в функцию.
Я слышал, что такая есть.

Помогите, пожалуйста, иначе отчисление!
кетчуп вне форума Ответить с цитированием
Старый 21.11.2007, 11:33   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Цитата:
Сообщение от кетчуп Посмотреть сообщение
Задание: решение уравнений различными методами.
Необходимо: команда которая преобразует строку(вводимую с клавиатуры) в функцию.
Я слышал, что такая есть.

Помогите, пожалуйста, иначе отчисление!
В какую функцию то?
FaTaL вне форума Ответить с цитированием
Старый 21.11.2007, 11:37   #3
D-mon
Форумчанин
 
Регистрация: 22.06.2007
Сообщений: 414
По умолчанию

http://www.noil.pri.ee/?mod=art/art&id=123
http://www.delphikingdom.com/asp/vie...catalogid=1019
- посмотри тут. Вроде бы то что те надо.
Нет невыполнимых задач, всё дело времени...

Последний раз редактировалось D-mon; 21.11.2007 в 11:46.
D-mon вне форума Ответить с цитированием
Старый 21.11.2007, 21:44   #4
кетчуп
 
Регистрация: 15.04.2007
Сообщений: 5
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
В какую функцию то?
Которая переводит строку в уровнение.
кетчуп вне форума Ответить с цитированием
Старый 21.11.2007, 21:45   #5
кетчуп
 
Регистрация: 15.04.2007
Сообщений: 5
По умолчанию

Цитата:
Сообщение от D-mon Посмотреть сообщение
- посмотри тут. Вроде бы то что те надо.
Спасибо вроде то, что надо!
кетчуп вне форума Ответить с цитированием
Старый 23.11.2007, 13:52   #6
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
Счастье Эх, добрая я душа

Делал я как-то дипломчик одному хорошему человеку. Ну и перестарался. Задача была такая. Нужна была программа по расчету болтовых соединений. Выбераешь тип соединения, вводишь исходные данные, а она тебе выдает несущую способность соединения. Все бы ничего, да вот типов болтовых соединений бесконечное множество. Можно было просто вбить несколько из них и по case выбирать вариант расчета. Но я решил пойти дальше. Написал математический язык типа Lisp'а . И каждому соединению поставил в соответствие файл с формулами расчета. Нужно тебе новое соединение - написал файл, добавил в программку и все ништяк.
Язык получился хороший (я так думаю на твердую четверку). Ну там математические операции типа +, -, *, /, min, max и т. д. Логические: >, <, =, >=, <=, if, case. Выборка из DBF таблицы: select. И многе другое.
Правда, за 2 года так им и не воспользовался. Эх, добрая я душа , выкладываю пример программы использующей этот язык с исходниками. Че ему пылиться. Может кому и сгодится.
SibedirMath.zip

Только не взыщите, коментариев почти нет и все переменные глобальные . Чтобы разобраться с синтаксисом посмотрите немногочисленные коментарии в функции DoFunc модуля Sibedir_Raschet.

Последний раз редактировалось Sibedir; 23.11.2007 в 14:51.
Sibedir вне форума Ответить с цитированием
Старый 23.11.2007, 17:04   #7
bill
Форумчанин
 
Аватар для bill
 
Регистрация: 26.04.2007
Сообщений: 440
По умолчанию

Модуль math вам в помощь.
А вообще здесь можно использовать рекурсию. Думаю, она должна получиться примерно такой(чего нет доработаете):
Код:
type tinfo=record
f:string;
k:byte; // индикатор- сначала передается 0, потом увел-ся.
a:array[1..6] of string;// -набор функций- x^2,sin ит.д.
n:extended;
f:boolean;// строка- функция,число-передаваемое значение, булева переменная- индиктор ошибок, обнуления строки и пр.
end;
...
function getresult(f:info):info;
var b:array[1..6] of byte; g:byte;i:integer;w:array[1..2] of byte;z:string;
begin
if f.s<>'' then begin
try
z:='';
f.k:=f.k+1;// может использоваться для того чтобы посмотреть на какой стадии произошла ошибка
for i:=1 to 6 do // конечно кол-во функций больше
b[i]:=pos(a[i],f.f);
for i:=max(b) to length(s) do;// функция max возвращает макс. элемент массива- это надо писать самому
if f.s[i]='(' then w[1]:=i else if f.s[i]=')' then w[2]:=i;
for i:=(w[1]+1) to (w[2]-1) do
z:=z+f.s[i];
n:=strtoint(z);
// здесь идет выбор функции которая была  ближе к концу-т.е. самая первая внутренняя функция- if f.a[max(b)]= sin then n:=sin(n);
 //ну а далее просто сокращаешь строку, вырезая функцию - было sin(ln(x))- станет sin.
getresult(f);// рекурсивный вызов. 
except
result.f:=true;
end;
end;
end;

if getresult(f).f then showmessage('Произошла ошибка, проверьте правильность формулы');
bill вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из строки в число и обратно AsmBeginer Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 10 22.05.2010 18:49
оформить как функцию arturka Помощь студентам 11 20.06.2008 23:41
считать из файла две строки, вывести на экран символы первой строки, которые отсутствуют во второй gotex Помощь студентам 4 08.05.2008 02:27
Как убрать перевод строки? Biowulf86 Помощь студентам 2 25.03.2008 11:05
Перевод строки в матрицу Chepa Общие вопросы Delphi 14 28.01.2007 00:13