Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Теоретические вопросы _ Ищу словарь

Автор: Студент*21в. 7.02.2007 2:32

Привет всем!
Набрёл случайно после бесполезных поисков по уневерситетским серверам и был приятно удивлен.
Ищу математические выражения на синтаксисе Паскаля. Буду весьма признателен если кто поможет.

Автор: Altair 7.02.2007 17:54

Цитата
Ищу математические выражения на синтаксисе Паскаля.

Вопрос несколько некорректен.
Тебя интересует как используя синтаксис Паскаля, записывать математические выражения?

Поверхностно, правила простые:
Есть 4 действия:
*,-,+,\
все операции бинарные, но "-" может быть унарным, тогда это операция инвертирования знака.
Кроме того есть операции mod и div (остаток от деления и целочисленное деление)
В выражении можно изменять порядок вычислений скобками ()

Автор: Студент*21в. 8.02.2007 0:22

Об этих четырёх действиях я знаю.
Меня интересует весь математический арсенал.
Например: abs(x) - x; sqrt(x) - {корень квадратный}(x); ln(x) - ln x и тд. Вместе с косинусами, 3.14-ми ВОТ. smile.gif

Автор: мисс_граффити 8.02.2007 0:25

а хелп уже не работает?
там функции и процедуры (в том числе математические) описаны.

Цитата
abs(x) - x

abs(x)=|x|

Автор: Студент*21в. 8.02.2007 0:35

Помощь? А где? Если в borland pascal, то у меня его нет. Пожайлуйста подскажите от куда скачать blink.gif

Автор: мисс_граффити 8.02.2007 0:39

У тебя вообще никакого компилятора нет?

Автор: Студент*21в. 8.02.2007 0:44

Есть один Borland Object pascal 7.0 но английком. Я там искал.

Автор: Altair 8.02.2007 2:48

Никаких проблем!
http://www1.citforum.ru/programming/bp70_lr/lr6.shtml

Автор: Студент*21в. 9.02.2007 1:18

Спасибо за ссылку! Клевый портал!
Но дело в том, что возможно вы меня не совсем понимаете.
Поэтому изложу суть всей моей проблемы.
Я пишу курсовую работу. тема такая:"Создать программу, анализирующую правильность записи арифметического выражения с точки зрения синтаксиса Паскаля. Арифметическое выражение задается строковой переменной и вводится с клавиатуры компьютера".
Алгоритм я уже примерно набросал. Но в юнитах мало инфы. Конкретно, нужны все возможные арифметические обозначения на синтаксисе Паскаля(синусы, секансы, арктангенсы, логарифмы всякие, пределы, корни кубические и четвертой степени нуитэдэитэпэ). Вообщем не знаю где откапать такого. А так питерку охота. !help.gif

Автор: volvo 9.02.2007 1:31

Цитата
Создать программу, анализирующую правильность записи арифметического выражения с точки зрения синтаксиса Паскаля
Ну, тогда тебе надо просто меньше делать, чем ты думал, потому как
Цитата
(синусы, секансы, арктангенсы, логарифмы всякие, пределы, корни кубические и четвертой степени нуитэдэитэпэ)
- no1.gif Нет в синтаксисе Паскаля корней, ни кубических, ни четвертой степени... Есть только квадратные. Все остальные вычисляются по стандартной формуле X1/n = Exp((1/n)*Ln(X))

Пределы - это ты о чем? Об автоматическом нахождении пределов? Не было никогда этого... Арктангенс есть в стандартных функциях: ArcTan называется, Другие Arc-и - надо писать опять же свои функции: http://forum.pascal.net.ru/index.php?s=&showtopic=4535&view=findpost&p=38505

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

Вот и получается, что проверять - то всего ничего... Вот если бы тебе Дельфийскому синтаксису соответствие досталось - было бы больше работы...

Автор: мисс_граффити 9.02.2007 1:34

http://yurae.boom.ru/inform/MathFnc.htm
типа такого?

Автор: Студент*21в. 10.02.2007 0:48

Значит так:arc-;sin;cos;tan;ctan<- blink.gif ;sec(это наверна секанс);exp;ln;sqr;sqrt;pi;tran;frac;
int;abs;...
И это все smile.gif

Автор: мисс_граффити 10.02.2007 3:53

не

Цитата
ctan
, а arctan(x)
что такое
Цитата
arc-
я не знаю
Цитата
tran
не знает даже паскалевский хелп

может встретиться MaxInt
еще есть inc, dec, succ, pred
odd... хотя это в мат.выражении вряд ли
есть преобразование числа в строку и обратно....

Автор: volvo 10.02.2007 3:56

{$TELEPATHY ON}

Цитата
tran
Это Trunc? blink.gif

Цитата
arc-;sin;cos;tan;ctan
Это типа ArcSin, ArcCos, ArsTan, ArcCTan (Arc-котангенс, в смысле)?

P.S.
(может, тег TELEPATHY сделать? Будет выделять текст, например, серым цветом... Уж очень часто используется в последнее время) smile.gif

Автор: мисс_граффити 10.02.2007 15:35

Цитата
(может, тег TELEPATHY сделать? Будет выделять текст, например, серым цветом... Уж очень часто используется в последнее время)

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

Автор: Студент*21в. 11.02.2007 14:08



Это типа ArcSin, ArcCos, ArsTan, ArcCTan (Arc-котангенс, в смысле)?

P.S.
(может, тег TELEPATHY сделать? Будет выделять текст, например, серым цветом... Уж очень часто используется в последнее время) smile.gif<- C этого места пожайлуйста по подрбней blink.gif
Тригонометрические функции:
Standart-Pascal
sin sin
cos cos
tg tan
ctg ? <-котангенс
sec ? <-секанс(в роде 1/cos. Кто знает поправте)
arc arc<<<<-с этим понятно. Ставим перед выше перечисленными.


И еще: exp(x)=?

Автор: volvo 11.02.2007 14:20

Цитата
Ставим перед выше перечисленными
Много тебе это даст, если ты перед Sin поставишь Arc? Нету такого в Паскале, тебе же сказали уже... И ArcCtg тоже нет...

и Tan тоже нету, самому делать надо...

Ctg(x) вообще-то это Cos(x)/Sin(x)

Sec(x) = 1 / Cos(x) <-- это действительно секанс
CoSec(x) = 1 / Sin(x) <-- а вот это косеканс

А ArcCtg(ч) вычислять через ArcCos(x):
ArcCtg(x) = ArcCos(x / sqrt(1 + sqr(x)))

А что с Exp? Стандартная функция не устраивает? Есть же она... blink.gif

Автор: Студент*21в. 11.02.2007 15:10

wacko.gif Ну я уже вообще запутался. Если нет тангенса то откуда тогда арктангкнс?
И еще. Когда я писал о пределах я имел ввиду не автовычисление а просто
способ записи. А то кто его знает что может прийти в голову при проверке учителю.
Например интеграл какой нибудь как накалякает. Или производную.
А mod и div И тому подобные думаю не понадобятся. Ведь речь идет о стан-дартной математике. А может я заблужаюсь? blink.gif

Автор: volvo 11.02.2007 15:29

Ты не только сам запутался, но и всех запутал... Тебе чего надо??? Ты можешь привести пример строки, которую получает твоя программа, и сказать, что ИМЕННО с ней надо делать? Что за привычка НИЧЕГО не сказав искать ответ???

Нельзя написать было:

"Моя программа должна получать строку вида
abs(sin(x) + sec(y)) * ln(sqrt(z))
и должна проверить ее на соответствие синтаксису Паскаля"

?

Почему надо все время делать непонятно что?

Автор: TarasBer 11.02.2007 20:57

Цитата(Студент*21в. @ 11.02.2007 11:10) *

Ну я уже вообще запутался. Если нет тангенса то откуда тогда арктангкнс?

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

Автор: Студент*21в. 12.02.2007 14:10

А может у вас исходник где завалялся? smile.gif

Автор: Студент*21в. 20.02.2007 0:50

Я благодарю всех, кто помог мне хоть как-то. Только вот я думаю прийдется мне весь курс математики пройти заново или может впервые wacko.gif . А время в обрез mega_chok.gif .
На одном сайте надыбал:
program z1;
uses crt;
var s:string; i,k:integer;
begin
clrscr;
readln(s);
k:=0;
for i:=1 to length(s) do
begin
if s[i]='(' then k:=k+1;
if s[i]=')' then k:=k-1;
if k<0 then begin writeln('NO'); halt; end;
end;
writeln('YES!');
readkey;
end.
Только вот не пойму почему при k<0 записывается "NO". (программа проверяет правельность растоновки скобок). По-мойму при k=1 blink.gif

Автор: мисс_граффити 20.02.2007 2:12

1. Теги! Ими надо обрамлять код в любом разделе
2.

Цитата
На одном сайте надыбал:
Может, там и спросишь, почему при k<0? Видимо, имелось в виду, что, если закрывающаяся предшествует открывающейся, то есть ошибка.
а вот
Цитата
(3)(
она пропускает на ура, радостно сообщая YES!
3. На форуме была программка проверки расстановки скобок - чем она не понравилась?

Автор: Студент*21в. 22.02.2007 0:43

1. Ай донт андерррстенд no1.gif
2 good.gif
3. Я НЕ ВИДЕЛ smile.gif

Автор: volvo 22.02.2007 15:23

Цитата
Я НЕ ВИДЕЛ
Смотри:
http://forum.pascal.net.ru/index.php?s=&showtopic=2868&view=findpost&p=25304

Автор: Студент*21в. 18.05.2007 22:33

Ну а теперь о главном.
Объявляю переменную строчного типа
Ввожу туда чего нить вроде "abs(1)+sqrt(2)+ln(3)-sqr(4)*arctan(5)/(-abs(6))"
Подгоняю выше написаное под синтактическую диаграму:[-]x(y)z[-]x(y)............. организовываю цикл с шагом"[-]x(y)" с него он начинается и им закачиваетя а между шагов записывается "z"
под иксом пойдут абээсы и эскьюэрты. игрек это любое рациональное или действительное число.
зед это +,-,*,/.<Это опишем в пользовательском типе.а[-] на случай премены знака он либо есть либо нет.
Кстате а можно в паскале вместо "abs(5)" записать просто "5" или например два корня из трех "2*sqrt(3)" или надо оязательно "abs(2)*sqrt(3)"?
Далее переменной строчного типа присваеваю "чшру" если она соответствует синтаксической диаграмме.
wink.gif

Автор: Студент*21в. 21.05.2007 19:45

Люди, если кто понял выше написаное, пожайлуста напишите что-нибудь.
Наверное это даже не алгоритм, а просто идея написания простым и понятным способом метода решения задачи.
Да и еще что это за "теги" такие? Напишите а smile.gif

Автор: Студент*21в. 17.08.2007 21:18

Цитата(volvo @ 11.02.2007 14:29) *

Ты не только сам запутался, но и всех запутал... Тебе чего надо??? Ты можешь привести пример строки, которую получает твоя программа, и сказать, что ИМЕННО с ней надо делать? Что за привычка НИЧЕГО не сказав искать ответ???

Нельзя написать было:

"Моя программа должна получать строку вида
abs(sin(x) + sec(y)) * ln(sqrt(z))
и должна проверить ее на соответствие синтаксису Паскаля"

?

Почему надо все время делать непонятно что?


Именно это я и хотел сказать yes2.gif
Подскажите ламеру в каком направлении хоть двигаться
А то я третий год уже сижу на четвертом курсе из за этой курсовой
Охото уж вибираться как-то в програмеры !help.gif

Автор: hardcase 17.08.2007 23:02

Цитата(Студент*21в. @ 17.08.2007 18:18) *


Именно это я и хотел сказать yes2.gif
Подскажите ламеру в каком направлении хоть двигаться
А то я третий год уже сижу на четвертом курсе из за этой курсовой
Охото уж вибираться как-то в програмеры !help.gif

Ты хочешь сделать простой транслятор арифметических выражений в синтаксисе паскаля?
Если так, то нужно сперва нагрузиться http://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D0%BF%D0%BE%D0%BB%D1%8C%D1%81%D0%BA%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D1%8C. Статья раскрывает таинство обратной польской записи.
Алгоритм транслирования в неё эквивалентен проверки синтаксиса. (4 курсу вполне по силам прочитать).
Также статья есть на http://www.codenet.ru/progr/alg/cmp/001.php там же http://www.codenet.ru/search/search.php?q=%CE%E1%F0%E0%F2%ED%E0%FF+%EF%EE%EB%FC%F1%EA%E0%FF+%ED%EE%F2%E0%F6%E8%FF.

Далее ваш код в студию.

Автор: Студент*21в. 1.04.2010 16:21

var
begin
end.
потом докидаю) чтоб темку не терять)

Автор: volvo 1.04.2010 16:41

Цитата
чтоб темку не терять)
Для этого на форуме есть как минимум 2 средства:
1) У тебя в профиле: "Опции профиля" -> "Найти темы пользователя". У тебя не так много тем, чтобы можно было что-то потерять.
2) Прямо в этой теме - щелкаешь на номер первого (или второго, или последнего, какое тебе больше нравится ) сообщения, получаешь ссылку, и сохраняешь ее. Где хочешь... Можешь прямо в профиле, в поле "Ваш личный блокнот". Информация там хранится постоянно, пока не удалишь ее.

Можешь воспользоваться возможностями браузера - "Закладки" есть практически везде.

А поднимать тему, которое больше двух лет только для того. чтоб ее "не терять" - это некрофилия в чистом виде. Ты ж как-то ее сейчас нашел? Вот и ищи дальше тем же способом.

Можешь не отвечать, через сутки сообщения №29 и №30 удалятся...

Автор: Студент*21в. 2.04.2010 14:44

laugh.gif та не просто неохота по циферкам тыкать постоянно) про опции не знал просто. искал но не заметил ph34r.gif

Автор: Студент*21в. 5.02.2013 1:32

Здравствуйте! Произошло чудо, меня восстановили в универе! Думаю теперь все таки придется писать курсовые.

hardcase, спасибо за пример с обратной польской записью! Натолкнуло на кое-какие соображения.

Сразу перейду к постановке вопроса. Если я правильно понимаю, программа должна считывать поочереди каждый символ и толкать его в выходную строку, далее происходит вычисление выражения и таким образом сам компилятор покажет есть ли в выражении ошибки синтаксиса либо покажет результат! За код я пока не брался, хочу сперва перекопать учебники и немного выспаться.

P.S. Очень радует, что форум до сих пор существует! smile.gif