Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
tralala
6 / 6 / 0
Регистрация: 14.01.2012
Сообщений: 59
#1

Вычислить значение выражения. - Delphi

29.03.2012, 01:50. Просмотров 2458. Ответов 27
Метки нет (Все метки)

Дана строка символов, представляющая собой запись алгебраического выражения 4*3-6/2. Вычислить значение этого выражения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.03.2012, 01:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычислить значение выражения. (Delphi):

Вычислить сумму чисел:в указанном пределе, с неопределенным пределом. Вычислить значение выражения - Delphi
s=\sum_{n=1}^{15}*{(-1)}^{n+1}*\frac{2*sin(n*x)}{n},y=x Помогите найти ошибку. unit Unit1; interface uses Windows,...

Вычислить значение выражения - Delphi
ребят, никто не сталкивался с заданиями из методички по информатики СпбМГТУ, преподователь Андрей Ростиславович? вот задача с...

Вычислить значение выражения - Delphi
На зачет нужно сделать, а забыл как оформлять, примерно знаю как решить.

Вычислить значение выражения - Delphi
надо написать программу для вычисления выражения БЕЗ приоритетов,т.е. как по порядку знаки идут так и считаем,чтобы участвовать могли все...

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

Вычислить значение выражения - Delphi
(min(a,a+b)+min(a,b+c))/(1+min(a+b*c,b) И вот код program Project1; {$APPTYPE CONSOLE} uses SysUtils; var a,b,c,d:...

27
Psilon
Master of Orion
Эксперт .NET
5923 / 4822 / 634
Регистрация: 10.07.2011
Сообщений: 14,437
Записей в блоге: 5
Завершенные тесты: 4
07.04.2012, 21:12 #16
aram_gyumri, один фиг
0
dr.curse
390 / 346 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
07.04.2012, 21:13 #17
не ОПН реолизовать легче
0
Psilon
Master of Orion
Эксперт .NET
5923 / 4822 / 634
Регистрация: 10.07.2011
Сообщений: 14,437
Записей в блоге: 5
Завершенные тесты: 4
07.04.2012, 21:14 #18
aram_gyumri, наверное, у него как-раз таки постфиксная запись была, я просто оговорился на самом деле. К тому же она вроде на 50 лет позже появилась, а деградация в науке явление редкое ( в отличие от культуры)
0
Andretti
250 / 136 / 17
Регистрация: 19.03.2012
Сообщений: 314
Записей в блоге: 2
08.04.2012, 23:32 #19
tralala, снова извиняюсь.. описка была. вместо действия "/" поставил "*".

Вот правильный код:

Delphi
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
unit Unit1;
 
interface
 
uses
  SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms, 
  QDialogs, QStdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.xfm}
 
procedure TForm1.Button1Click(Sender: TObject);
const znaki=['-','+','*','/'];
var str:string;
schet,NachaloChisla,i:word;
sum:real;
masschisla: array [1..1000] of string;
massznak: array [1..1000] of char;
begin
str:=Edit1.Text;
schet:=1;
NachaloChisla:=1;
str:=str+'=';
for i:=1 to Length(str) do    //нахождение всех чисел
 if (str[i] in znaki) or (str[i]='=') then
 begin
   masschisla[schet]:=copy(str,NachaloChisla,i-NachaloChisla);
   NachaloChisla:=i+1;
   inc(schet);
 end;
schet:=1;
for i:=1 to Length(str) do    //нахождение всех знаков
 if (str[i] in znaki) then
 begin
   massznak[schet]:=str[i];
   inc(schet);
 end;
for i:=1 to schet-1 do  // произвдение
 if massznak[i]='*' then
    begin
      masschisla[i]:=FloatToStr(strTOfloat(masschisla[i])*strTOfloat(masschisla[i+1]));
      masschisla[i+1]:=masschisla[i];
    end;
for i:=schet-1 downto 1 do
 if massznak[i]='*' then  masschisla[i]:=masschisla[i+1];
for i:=1 to schet-1 do  // деление
 if massznak[i]='/' then
    begin
      masschisla[i]:=FloatToStr(strTOfloat(masschisla[i])/strTOfloat(masschisla[i+1]));
      masschisla[i+1]:=masschisla[i];
    end;
for i:=schet-1 downto 1 do
 if massznak[i]='/' then  masschisla[i]:=masschisla[i+1];
sum:=StrToFloat(masschisla[1]);
for i:=1 to schet-1 do
begin
  case massznak[i] of
  '-': sum:=sum-StrToFloat(masschisla[i+1]);
  '+': sum:=sum+StrToFloat(masschisla[i+1]);
  end;
end;
Edit1.Text:=Edit1.Text+'='+floatTostr(sum);
end;
end.
0
lily
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 29
10.04.2012, 02:58 #20
Andretti, извините,что вмешиваюсь,но она и так не работает для деления))
0
Andretti
250 / 136 / 17
Регистрация: 19.03.2012
Сообщений: 314
Записей в блоге: 2
10.04.2012, 14:20 #21
Цитата Сообщение от lily Посмотреть сообщение
Andretti, извините,что вмешиваюсь,но она и так не работает для деления))
Пришли скрин программы где должна выдавать результат на деление. Просто у меня работают, и по-моему дело всетаки в лыжах ).
0
lily
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 29
10.04.2012, 21:47 #22
Andretti, извините,ошиблась.все верно))
0
tralala
6 / 6 / 0
Регистрация: 14.01.2012
Сообщений: 59
15.04.2012, 17:05  [ТС] #23
все верно.
0
lily
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 29
15.04.2012, 17:07 #24
Andretti, а вы не могли бы подробно объяснить эту программу?
0
Andretti
250 / 136 / 17
Регистрация: 19.03.2012
Сообщений: 314
Записей в блоге: 2
15.04.2012, 23:37 #25
lily, вот вроде получилось так.. правда я обьясняльщик никакой..

Delphi
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
unit Unit1;
 
interface
 
uses
  SysUtils, Types, Classes, Variants, QTypes, QGraphics, QControls, QForms, 
  QDialogs, QStdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.xfm}
 
procedure TForm1.Button1Click(Sender: TObject); {процедура обработки события - нажатие на кнопку button1}
const znaki=['-','+','*','/']; // описание константы содержащая мат.знаки
var str:string; //обьявление переменной для хранения строки с уравнением
schet, //счетчик для хранения количества уже записанных элементов в массиве
NachaloChisla, //переменная для хранения номера буквы в строке соответствующая месту где стоит мат знак и от него уже начинается число
i:word; //счетчик для цикла
sum:real; //высяитываемая сумма
masschisla: array [1..1000] of string; //массив со всемии найденными числами в строке
massznak: array [1..1000] of char;//массив со всемии найденными мат.знаками в строке
begin
str:=Edit1.Text; //считывание строки с уравнением
schet:=1; // установка счетчика массива в значение 1 (т.е. будет указывать на первый элемент массива)
NachaloChisla:=1; //установка начала числа на первый символ строки
str:=str+'='; //прибавление к строке с уравнением символа "=" для обозначения его конца
for i:=1 to Length(str) do    //цикл нахождение всех чисел
 if (str[i] in znaki) or (str[i]='=') then {если текущий символ строки str под номером i равен одному из описанных в константе или символ равен символу "="(т.е. если это он и есть), то...}
 begin 
   masschisla[schet]:=copy(str,NachaloChisla,i-NachaloChisla); {в ячейку под номером schet массива чисел скопировать из строки str(содержащую введенное уравнение) начиная с символа NachaloChisla, количество символов равное i-NachaloChislа}
   NachaloChisla:=i+1; {установка положения начала следующего числа на следующий после текущего символа в строке (потому что текущий это мат.знак) }
   inc(schet); //увеличение указателя на следующую ячейку массива на единицу т.е. schet:=schet+1
 end;
schet:=1; // установка счетчика массива в значение 1 (т.е. будет указывать на первый элемент массива)
for i:=1 to Length(str) do    //нахождение всех знаков
 if (str[i] in znaki) then {если текущий символ строки str под номером i равен одному из описанных в константе то..} 
 begin
   massznak[schet]:=str[i]; //скопировать этот знак в массив знаков
   inc(schet);//увеличение указателя на следующую ячейку массива на единицу т.е. schet:=schet+1
 end;
for i:=1 to schet-1 do  // произвдение всех числе в массиве чисел между которыми стоит знак умножения и уравнивание их
 if massznak[i]='*' then
    begin
      masschisla[i]:=FloatToStr(strTOfloat(masschisla[i])*strTOfloat(masschisla[i+1])); 
      masschisla[i+1]:=masschisla[i];
    end;
for i:=schet-1 downto 1 do //затем сравнивание всех чисел по обе стороны от знака произведения 
 if massznak[i]='*' then  masschisla[i]:=masschisla[i+1];
for i:=1 to schet-1 do  // деление всех числе в массиве чисел между которыми стоит знак деления и уравнивание их
 if massznak[i]='/' then
    begin
      masschisla[i]:=FloatToStr(strTOfloat(masschisla[i])/strTOfloat(masschisla[i+1]));
      masschisla[i+1]:=masschisla[i];
    end;
for i:=schet-1 downto 1 do //затем сравнивание всех чисел по обе стороны от знака деления
 if massznak[i]='/' then  masschisla[i]:=masschisla[i+1];
sum:=StrToFloat(masschisla[1]); //присвоение переменной содержащей сумму первого числа в массиве чисел
for i:=1 to schet-1 do  //от первого до последнего знака в массиве если он плюс или минус то производить арифмет. действие и запись в переменную общей суммы
begin
  case massznak[i] of
  '-': sum:=sum-StrToFloat(masschisla[i+1]);
  '+': sum:=sum+StrToFloat(masschisla[i+1]);
  end;
end;
Edit1.Text:=Edit1.Text+'='+floatTostr(sum); //вывод результата 
end;
end.
1
lily
0 / 0 / 0
Регистрация: 10.04.2012
Сообщений: 29
17.04.2012, 22:33 #26
Andretti, спасииибо большое!)
0
krek
0 / 0 / 0
Регистрация: 25.04.2012
Сообщений: 22
25.04.2012, 00:40 #27
Andretti, вас, наверное, уже достали с этим кодом))
но я не совсем понял его...начиная отсюда.например, "произвдение всех числе в массиве чисел между которыми стоит знак умножения и уравнивание их",что значит..?
Цитата Сообщение от Andretti Посмотреть сообщение
for i:=1 to schet-1 do *// произвдение всех числе в массиве чисел между которыми стоит знак умножения и уравнивание их
*if massznak[i]='*' then
* * begin
* * * masschisla[i]:=FloatToStr(strTOfloat(masschisla[i])*strTOfloat(masschisla[i+1]));
* * * masschisla[i+1]:=masschisla[i];
* * end;
........

никак нельзя сделать код попроще?
0
Andretti
250 / 136 / 17
Регистрация: 19.03.2012
Сообщений: 314
Записей в блоге: 2
27.04.2012, 15:20 #28
Цитата Сообщение от krek Посмотреть сообщение
Andretti, вас, наверное, уже достали с этим кодом))
но я не совсем понял его...начиная отсюда.например, "произвдение всех числе в массиве чисел между которыми стоит знак умножения и уравнивание их",что значит..?
........

никак нельзя сделать код попроще?
Это и так самый простой способ в плане обьяснения и понимания.
суть вот в чем - допустим есть уравнение - 2-4*5*8*3+4
при произведении всех чисел между которыми стоит знак * и запись полученного результата вместо тех чисел которые участвовали в произведение (стояли справа и слева от знака) получится в массиве вот такое
2-20*20*8*3+4
2-20*160*160*3+4
2-20*160*480*480+4
после чего в последнем выражении нужно уравнять все числа участвовашие при умножениях что бы получилось в массиве вот это :
2-20*160*480*480+4
2-20*480*480*480+4
2-480*480*480*480+4
после чего мы делаем действия с + и -
получится :
2-480 и 480+4
т.е. : 2-480+4=-474
0
27.04.2012, 15:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2012, 15:20
Привет! Вот еще темы с ответами:

Вычислить значение выражения - Delphi
помогите пожалуйста, напишите программу очень подробно, с пояснениями

Вычислить значение выражения - Delphi
Помогите пожалуйста. Как составить программу. Не соображу что-то вообще.

Вычислить значение выражения - Delphi
Помогите пожалуйста. Дано уравнение. Вариант второй Я составил. Запускаю. Ввожу значения x и y но не считает. Подскажите пожалуйста в...

Вычислить значение выражения - Delphi
Дано вещественное число X и целое число N (N>0). Найдите значение выражения X-(X)^(3)/3!+(X)^(5)/5!-...+(-1)^(n)*(X)^(2n+1)/(2*N+1)!....


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

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

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