Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 177

Пример возможных структур программы на элементарном математическом выражении

24.01.2013, 21:34. Показов 1588. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть острая необходимость листинга программы с комментарими, решающей просто математическое выражение типа: (2+2)*3+6/4-7+.... ровно такой длины, чтобы показать в листинге программы решающей его, все возможные связи и вызовы блоков программ (функции, процедуры, классы) на языке Pascal, то есть пояснить структуру программы. Не думаю что выражение достигнет длины более 20 действий, если я не прав в этом, прошу уведомить. Заранее благодарен.

Добавлено через 6 минут
забыл-одно действие в математическом выражении-отдельный блок программы. прошу прощения.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.01.2013, 21:34
Ответы с готовыми решениями:

Неправильный результат в математическом выражении
Программка должна находить среднее арифметическое введенных в четыре инпута числа и в консоли выдавать результат. Но получается какая-то...

Баланс скобок в математическом выражении
В математическом выражении встречаются скобки трех типов: круглые, квадратные и фигурные Дана строка, задающая математическое выражение....

Заменить слова в математическом выражении
Заменить в заданном математическом предложении все вхождения sin на cos и sqrt на abs.

15
445 / 373 / 133
Регистрация: 09.09.2011
Сообщений: 1,344
25.01.2013, 15:52
Обратная_польская_запись
Обратная_польская_запись:_примеры_реализации
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 177
25.01.2013, 19:49  [ТС]
спасибо, но самый большой блок программы там всё равно процедура, да и то для Delphi, и сомнительно, что это то-программа калькулятор (выражение можно подобрать такое, чтобы специально подходило под листинг, то есть отображало уже в себе ещё суть программы, а калькулятор-это калькулятор ), я хотел чтобы в листинге были показаны все возможные блоки (процедуры, функции, классы; правда я не знаю бывают ли процедуры в том режиме где есть классы, но для паскаля очевидно таких листингов надо 2, потому что у компилятора 2 режима, не то чтобы не знаю, просто книга непонятно написана, круговерть какая-то) для данного языка программирования. но в принципе такой листинг можно написать и самому, просто хотелось быстрее перейти к решению своей задачи имея очень наглядный пример. а так прийдётся писать себе примеры самому: такие листинги могут служить аналогом справочника и в то-же время неплохая разминка. но листинг я выложу тут, чтобы могли воспользоваться другие, это очень хорошее наглядное пособие.

Добавлено через 1 час 9 минут
а можно переименовать тему, хотя бы после того как я напишу листинг (неделя точно уйдёт, потому что на этой один выходной) в тему "программа решающая математическое выражение, отчасти описывающее саму программу"? я что-то не подумал о возможном существовании польских записей всяких. цель программы показать возможные блоки программ, применяемых в данном языке (разумеется без деталей особых) и их связи, а цель математического выражения показать собою структуру программы.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33396 / 21506 / 8236
Регистрация: 22.10.2011
Сообщений: 36,904
Записей в блоге: 12
25.01.2013, 22:01
Цитата Сообщение от Hretgir Посмотреть сообщение
я хотел чтобы в листинге были показаны все возможные блоки (процедуры, функции, классы;
Ну вот тебе часть возможных блоков программы (на самом деле вложенность процедур/функций может быть гораздо больше, и изо всех внутренних можно спокойно обращаться к внешним, но на это в твоём выражении операций не хватает)
Pascal
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
{$mode objfpc}
 
type
   T = class
      function Run : double;
   end;
 
// Глобальная процедура, возвращает значение через параметр
procedure DivideProc(n, dn : Integer; var Res : Double);
begin
   Res := n / dn;
end;
 
// Глобальная функция
function Mult(first, second : Double) : Double;
begin
   result := first * second;
end;
 
// Метод класса
function T.Run : double;
 
   // Вложенная в метод класса функция
   function Sum(first, second : Integer) : Integer;
   begin
      result := first + second;
   end;
 
var DivRes : Double;
begin
   DivideProc(6, 4, DivRes); // Вызов глобальной процедуры
 
   // Вызов глобальной функции. Первый параметр - результат выполнения
   // локальной функции
   result := Mult(Sum(2, 2), 3) + DivRes;
end;
 
begin
   with T.Create do // Создание безымянного объекта
   try
      writeln('Expr = ', Run - 7); // Вызов метода безымянного объекта
   finally
      Free; // Уничтожение объекта
   end;
end.
Помогло это тебе?
Цитата Сообщение от Hretgir Посмотреть сообщение
потому что у компилятора 2 режима
На самом деле, режимов больше, их как минимум 4. Хотя, что там в той книге называется "режимом" - еще надо выяснить...
2
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 177
26.01.2013, 22:25  [ТС]
дело в том, что книга по среде FP IDE, а в этой среде очень нестандартно как-то всё (зачем я только купил эту книгу...). вот из неё:
Но язык FreePascal в этом плане не может служить объектом подражания. В нём из-за совместимости с языком ObjectPascal появилась веточка, порождённая идеологией объектов. А попытка сохранить совместимость с Delphi потребовала нестандартного подхода на базе классов фирмы Borland. Оба эти подхода в какой-то мере схожи, но такой стройной теории, которая была, например развита в С++, здесь не получилось. Вот и приходится, работая в среде FP IDE в одном режиме, пользоваться терминологией объектов, а в другом режиме-терминологией классов
эта книга так мне запудрила мозги, что я уже начал думать что естественно и все компиляторы работают так-же . вобщем авторы жгут, но кое какие основы расписаны не плохо. а вот из-за их нестандартного подхода я так и не понял что такое объекты и что такое классы. можно взять книгу по Java посмотреть о ООП и другом, но суть не в этом, суть в том, что авторы не открыли суть, а пробежали достаточно бегло и нестандартно. но с этим листингом я определился точно, я напишу первой прогу описывающую суть подхода языка посредством решения математического выражения, которое отчасти описывает структуру прохраммы. то есть пояснительным материалом будет как и листинг, так и задача (меня всегда убивали наповал поиски площади треугольников или пути из пункта а в пункт б, как будто невозможно придумать другой задачи, которая тоже будет давать информацию по программированию). за листинг спасибо, завтра посмотрю, мб и не поможет, но выглядет просто, что не рассмотреть было-бы кощунством

Добавлено через 11 минут
выглядит просто, прошу прощения

Добавлено через 23 часа 13 минут
UI, непонятно откуда взялся
DivRes
и что он есть ...

Не по теме:

собственно, многим может показаться странным зачем человеку, который может написать такой-то код, так необходимо его увидеть вместе с пресловутым математическим выражением, якобы его описывающим. по этому поводу я могу сказать не много: человеческий мозг работает с визуальной информацией достаточно сложно и очень оперативно: сон, видения и пр. ну и что? а то, что такой листинг, вкупе с выражением, является законченным информационным объектом: то есть, он самодостаточен, и для дальнейшего его описания нет нужды вспоминать треугольники или то, где находится точка А или Б. считайте, что в данном действии я ведом как и своей логикой, так и чутьём (потому что со временем, человек всё равно наичинает понимать принципы работы своего мозга, его язык даже можно сказать, пусть и не сильно низкоуровневый, но...каждый рано или поздно копошится в своих мозгах, при наличии таковых, и должен сказать:там даже есть чему поучиться каждому



Добавлено через 7 минут
я хочу показать этот листинг самому себе, несмотря на то, что я его-же и напишу , так-то вот. можете считать меня совсем в себе, но...
0
 Аватар для HighPredator
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
26.01.2013, 23:01
Цитата Сообщение от Hretgir Посмотреть сообщение
непонятно откуда взялся
DivRes
Строка 29...
1
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 177
27.01.2013, 14:04  [ТС]
после этого
Pascal
1
2
3
var DivRes : Double;
begin
   DivideProc(6, 4, DivRes); // Вызов глобальной процедуры
переменной DivRes присвоится значение после обработки данных в DivideProc? так?
а вот это совсем непонятно :
Pascal
1
2
3
4
5
6
7
begin
   with T.Create do // Создание безымянного объекта
   try
      writeln('Expr = ', Run - 7); // Вызов метода безымянного объекта
   finally
      Free; // Уничтожение объекта
   end;
Добавлено через 12 минут
в книге ничего нет по поводу подобного кода, так-то я её пролистал всю вроде, сейчас посмотрю
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33396 / 21506 / 8236
Регистрация: 22.10.2011
Сообщений: 36,904
Записей в блоге: 12
27.01.2013, 14:17
Цитата Сообщение от Hretgir Посмотреть сообщение
переменной DivRes присвоится значение после обработки данных в DivideProc? так?
Да, так. Поскольку последний параметр DivideProc - это Var параметр, то его изменение внутри DivideProc приводит к изменению фактического параметра.
Цитата Сообщение от Hretgir Посмотреть сообщение
а вот это совсем непонятно
Что именно? То, что вместо:

Delphi
1
2
3
4
5
6
7
8
var Obj : T;
// ...
   Obj := T.Create; // Создание экземпляра
   try
      writeln('Expr = ', Obj.Run - 7); // Вызов метода
   finally
      Obj.Free; // Уничтожение экземпляра
   end;
написано то, что написано? При T.Create будет так или иначе создан экземпляр типа T, а With-ом просто оборачиваем всю работу с этим (безымянным) экземпляром, чтобы не было необходимости описывать отдельную переменную, и вместе с тем, чтобы была возможность обращаться к его полям и методам. Вся работа с этими полями/методами будет относиться к тому, к чему применен With, то есть, к этому самому анонимному объекту... Вроде ничего сложного в этом нет...
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 177
27.01.2013, 14:44  [ТС]
именно вот это не понятно: Run - 7, , ну или Obj.Run - 7
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33396 / 21506 / 8236
Регистрация: 22.10.2011
Сообщений: 36,904
Записей в блоге: 12
27.01.2013, 14:54
То, что ты можешь вызвать функцию, которая тебе вернет результат, и далее использовать этот результат при вычислении какого-то выражения, тебе понятно?

А какая разница, это глобальная функция, или метод класса? Он так же вернет результат (в данном случае - посчитает (2+2)*3+6/4), который далее продолжает использоваться в выражении, из него вычитается 7, и получаем то, что требовали...
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 177
27.01.2013, 15:59  [ТС]
Цитата Сообщение от UI Посмотреть сообщение
А какая разница, это глобальная функция, или метод класса? Он так же вернет результат (в данном случае - посчитает (2+2)*3+6/4), который далее продолжает использоваться в выражении, из него вычитается 7, и получаем то, что требовали...
да, так-то всё понятно, просто я спросил чтобы знать наверняка, что так можно делать. спасибо. то есть метод класса, впринципе он та-же глобальная функция или процедура, только он может заменять множество таких и к нему проще обращаться?

Добавлено через 5 минут
хотя, сорь, вот это:
Pascal
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
// Метод класса
function T.Run : double;
 
   // Вложенная в метод класса функция
   function Sum(first, second : Integer) : Integer;
   begin
      result := first + second;
   end;
 
var DivRes : Double;
begin
   DivideProc(6, 4, DivRes); // Вызов глобальной процедуры
 
   // Вызов глобальной функции. Первый параметр - результат выполнения
   // локальной функции
   result := Mult(Sum(2, 2), 3) + DivRes;
end;
 
begin
   with T.Create do // Создание безымянного объекта
   try
      writeln('Expr = ', Run - 7); // Вызов метода безымянного объекта
   finally
      Free; // Уничтожение объекта
   end;
end.
это всё метод класса? вот это к чему относится не пойму:
Pascal
1
2
3
4
5
6
7
8
begin
   with T.Create do // Создание безымянного объекта
   try
      writeln('Expr = ', Run - 7); // Вызов метода безымянного объекта
   finally
      Free; // Уничтожение объекта
   end;
end.
Добавлено через 6 минут
и вот это
Pascal
1
2
3
4
5
6
7
8
var DivRes : Double;
begin
   DivideProc(6, 4, DivRes); // Вызов глобальной процедуры
 
   // Вызов глобальной функции. Первый параметр - результат выполнения
   // локальной функции
   result := Mult(Sum(2, 2), 3) + DivRes;
end;
Добавлено через 1 минуту
оно-же
Pascal
1
Run
само себя не вызовет?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33396 / 21506 / 8236
Регистрация: 22.10.2011
Сообщений: 36,904
Записей в блоге: 12
27.01.2013, 16:09
Там в комментариях написано, что к чему относится.
0
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 177
27.01.2013, 16:31  [ТС]
ничё не понятно

Добавлено через 6 минут
где заканчивается метод класса?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33396 / 21506 / 8236
Регистрация: 22.10.2011
Сообщений: 36,904
Записей в блоге: 12
27.01.2013, 16:42
Ты бы книжку-то перечитал с самого начала, это основы синтаксиса Паскаля. Блок начинается begin-ом, и заканчивается end-ом:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Метод класса
function T.Run : double;
 
   // Вложенная в метод класса функция
   function Sum(first, second : Integer) : Integer;
   begin // Начало тела вложенной функции
      result := first + second;
   end; // Конец вложенной функции
 
var DivRes : Double;
begin // начало тела метода класса
   DivideProc(6, 4, DivRes); // Вызов глобальной процедуры
 
   // Вызов глобальной функции. Первый параметр - результат выполнения
   // локальной функции
   result := Mult(Sum(2, 2), 3) + DivRes;
end; // конец метода класса
, дальше идет начало ОСНОВНОГО блока программы, то, которое заканчивается end-ом с точкой. Я же вроде отступы делаю, видно же, к чему тот или иной блок относится, и какой во что вложен?
2
 Аватар для Hrethgir
421 / 143 / 3
Регистрация: 25.01.2012
Сообщений: 6,206
Записей в блоге: 177
27.01.2013, 21:28  [ТС]
мне вот это и непонятно: я понимаю что так кодить легче, понимаю как работает программа.но в книгах что-то как-то не объясняются границы одного от другого. если бы это был бы асм:там ясен порядок работы и как можно кодить, то же самое в других языках, где всё ограничено номером строки и переходами. вот это мне и не понятно, начало чётко описано, а где конец метода? спасибо, про начало и конец я читал, иначе бы не понял остального.

Добавлено через 2 минуты
да делаете, спасибо, теперь всё понятно.

Добавлено через 40 минут
странно, но мне почему-то рациональное представляется всё наоборот, всмысле порядок, почему то кажется что рационально сначала пишится тело программы, а потом описываются процедуры методы и прочее. я не знаю откуда у меня такое ощущение и почему оно у меня возникает. не думал на этот предмет, возможно я пытаюсь сразу мыслить таким порядком, каким выполняется программа. непонятное ощущение. я понимаю, что, чтобы всё работало, сначала нужно всё создать: объявить переменные, описать функции...но ведь всё равно вызываемая процедура создаст массив только при её выполнении, а не при запуске программы ,вообще интересно: подобные вопросы задают другие?

Добавлено через 3 часа 14 минут
на самом деле ,
UI, вы хорошо мне помогли, с остальными вопросами я разберусь сам, со временем

Добавлено через 47 минут
а вот прочитал ещё в википедии
TMyClass = class(TObject)
private
{Описанные в этой секции элементы не доступны извне (за пределами класса, но доступны в пределах модуля).}
{Здесь обычно находятся поля класса.}
protected
{Описанные в этой секции элементы доступны только классу и всем его потомкам.}
public
{Описанные в этой секции элементы доступны всем.}
published
{Описанные в этой секции элементы доступны всем и отображаются в Object Inspector'e.}
end;
а COM объекты я могу создавать в Pascal? это не про них: published
{Описанные в этой секции элементы доступны всем и отображаются в Object Inspector'e.}?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33396 / 21506 / 8236
Регистрация: 22.10.2011
Сообщений: 36,904
Записей в блоге: 12
27.01.2013, 21:58
Цитата Сообщение от Hretgir Посмотреть сообщение
а COM объекты я могу создавать в Pascal?
Можешь (в исходниках FPC есть папка \packages\winunits-base\tests\, с примерами работы с COM-объектами). Published - это не про них, это спецификатор видимости.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.01.2013, 21:58
Помогаю со студенческими работами здесь

Позиции скобок в математическом выражении
Дана строка с математическим выражением, необходимо посчитать количество строк, а также записать по парно позиции открытых и закрытых...

Как записать альфа в математическом выражении
Задача 1. Написать программу, которая вычисляет значение выражения, и определить ее значение для введенного пользователем значений...

Заменить в математическом выражении переменную на заданное число
VS2010 c# Forms - на форме в textbox1 записывается ручками формула (2*x-8) и кнопка выполнить. Каким образом написать код , что бы в...

Проверить,одинакого ли в математическом выражении число открывающих и закрывающих скобок
Проверить,одинакого ли в математическом выражении число открывающихся и закрывающихся скобок.

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru