![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 01.04.2012
Сообщений: 6
|
![]()
Дана строка символов, представляющая собой запись алгебраического выражения, содержащего целые числа и знаки арифметических действий. Вычислить значение этого выражения.
Код HTML:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Button1: TButton; BitBtn1: TBitBtn; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); const znaki=['-','+','*','/']; // описание константы содержащая мат.знаки var str:string; //обьявление переменной для хранения строки с уравнением schet, //счетчик для хранения количества уже записанных элементов в массиве NachaloChisla, //переменная для хранения номера буквы в строке соответствующая //месту где стоит мат знак и от него уже начинается число i:integer; //счетчик для цикла 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; {установка положения начала следующего числа на следующий после текущего символа в строке (потому что текущий это мат.знак) } schet:=schet+1;//увеличение указателя на следующую ячейку массива на единицу end; schet:=1; for i:=1 to Length(str) do //нахождение всех знаков if (str[i] in znaki) then {если текущий символ строки str под номером i равен одному из описанных в константе то..} begin massznak[schet]:=str[i];//скопировать этот знак в массив знаков 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; Edit2.Text:=floatTostr(sum); //вывод результата end; 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;........ |
![]() |
![]() |
![]() |
#2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
Для себя или контрольная?
Если для себя то предлагаю задействовать тяжелую артилерию: http://www.programmersforum.ru/showthread.php?t=100279
I'm learning to live...
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вычислить значение выражения( Delphi). | tralala | Помощь студентам | 3 | 19.04.2012 18:31 |
вычислить значение выражения (на C++) | laychan | Помощь студентам | 2 | 05.03.2012 11:32 |
вычислить значение выражения | _Иван_ | Помощь студентам | 2 | 20.04.2011 18:58 |
Вычислить значение выражения (3*a+2)/c | Solnze2 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 07.10.2010 16:42 |
Вычислить значение выражения | WhiteKuz | Помощь студентам | 0 | 15.12.2009 22:27 |