Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 16.02.2020
Сообщений: 2

Вычислить значение выражения, записанного в строке символов

26.02.2020, 22:09. Показов 2885. Ответов 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
27
28
var i,j,sum,uper: longword;
k,cod:longint;
row,per:string;
op:char;
 
 
begin
  readln(row);
  i:=1;
  per:='';
  sum:=0;
  while pos(row[i],'+-')=0 do
    inc(i);
  sum:=sum+strtoint(copy(row,1,i-1));
  for j:=i to length(row) do begin
    val(row[j],k,cod);
    if cod=0 then
      per:=per+row[j]
    else begin
      op:=row[j];
      if op='+' then
[B]        sum:=sum+strtoint(per)[/B]  {Ошыбка здесь}
      else
        sum:=sum-strtoint(per); 
    end;
  end;
  writeln(sum);
end.




вот сам код, идея в том что нужно в строке неизвестной длинны найти ответ.
в строке записанные целые числа пример : ( 10+45-44+54551564-45455-8789+111111 ) и надо найти ответ
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.02.2020, 22:09
Ответы с готовыми решениями:

Найти значение выражения, записанного в строке
Постановка задачи: "Дана строка, в которой записано арифметическое выражение из целых чисел и знаков суммы и произведения. Найти значение...

Вычислить значение выражения, записанного строкой.
Задана строка S, содержащая цифры и знаки «+» и «-». Вычислить значение данного выражения. За ранее спасибо!!!

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

5
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8663 / 4500 / 1670
Регистрация: 01.02.2015
Сообщений: 13,921
Записей в блоге: 13
27.02.2020, 08:15
Repkaggvvpp, тут нужна другая идея.

Обрабатывайте в потоке.
У вас
- на входе строка s
- состояние процесса - 3 переменные: операнд1, операнд2, операция.

При инициализации операнд1=0, операция=сложение (чтобы не повлиять).
Начинаете обрабатывать строку посимвольно
1. if s[i]='0'...'9' then Op2:=Op2*10+(s[i]-'0'); к следующему символу строки (т.е. уточняем число второго операнда)

2.1. Если не цифра, то выполнить вычисление Op1:= Op1 (Operation) Op2; Op2:=0; (через case)
2.2. Уточнить операцию для следующего вычисления
2.2.1. if s[i]='+' then Operation:=сложение
2.2.2. if s[i]='-' then Operation:=вычитание
2.3. if i=length(s) then как и в п.2.1 выполнить вычисления (чтобы последний операнд тоже был учтён)
3. i:=i+1
4. перейти к п.1 (это по сути цикл for)

5. вывод результата (Op1)
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
28.02.2020, 08:52
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
var
  s : String;
  i, sum, num, sign : Integer;
  
begin
  ReadLn(s);
  
  sum  := 0; // начальная сумма
  sign := +1; // предполодим, что первое число в строке положительное
  num  := 0; // вот здесь будем получать число
  
  for i := 1 to Length(s) do
    case s[i] of
      '-','+' : begin // очередной символ + или -
                  if num > 0 then // уже какое-то число было получено 
                    sum := sum + sign * num; // добавим к сумме знак умноженный на число
                  if s[i] = '-' then
                    sign := -1 // следующее число отрицательное
                  else
                    sign := +1; // следующее число положительное
                  num  := 0; // пока следующее число равно 0
                end;
      '0'..'9' : // символ - цифра
               num := num * 10 + (ord(s[i]) - ord('0')); // число*10 + цифра
    end;
 
  if num > 0 then // последнее число нужно тоже добавить
    sum := sum + sign * num;
    
  WriteLn(sum);
end.
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8663 / 4500 / 1670
Регистрация: 01.02.2015
Сообщений: 13,921
Записей в блоге: 13
01.03.2020, 16:49
И я свой приведу. Ждал ответа топикстартера.
Единственно, это для FreePascal, а в PascalABC проверить не могу. Если вхождения во множества работать не будут, то придётся заменить на проверки вхождения в диапазон или точные равенства.
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
program Calc;
 
var
  s: string;
  op1, op2: integer;
  Operation: char;
  i: integer;
begin
  s := '10+45-448';
 
  op1 := 0;
  op2 := 0;
  Operation := '+';
  for i := 1 to length(s) do
  begin
    if (s[i] in ['0'..'9']) then
      op2 := op2 * 10 + Ord(s[i]) - Ord('0');
    if (s[i] in ['+', '-']) or (i = length(s)) then
    begin
      case Operation of
        '+': op1 := op1 + op2;
        '-': op1 := op1 - op2;
      end;
      op2 := 0;
      Operation := s[i];
    end;
  end;
 
  writeln(s);
  writeln('=', op1);
end.
0
Модератор
10445 / 5737 / 3406
Регистрация: 17.08.2012
Сообщений: 17,451
07.03.2020, 01:51
Я тут недавно на эту тему малость порезвился... Получилось раза в два покороче:
Вычислить выражение, с числами и знаками сложения и вычитания
0
Модератор
Эксперт по электронике
 Аватар для ФедосеевПавел
8663 / 4500 / 1670
Регистрация: 01.02.2015
Сообщений: 13,921
Записей в блоге: 13
07.03.2020, 13:18
Упрощается условие проверки из-за финального символа '=', а всё остальное 1:1
Не будем преувеличивать


Добавлено через 1 час 42 минуты
Не дочитал до конца
Вычислить выражение, с числами и знаками сложения и вычитания

Да! Очень коротко и просто! Лихо!

Добавлено через 16 минут
Ага!.. Там и дальше есть...
Классно!

А я исходил из принципа обработки потока и впервые реализовывал на ассемблере, а потом дорабатывал под унарные операции (факториал)
Написать программу, позволяющую выполнять арифметические действия над двоичными или шестнадцатеричными числами
К готовой программе "калькулятор" добавить вычисление факториала
Там в принципе тот же вариант, что и у меня на Pascal.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.03.2020, 13:18
Помогаю со студенческими работами здесь

Вычислить значение арифметического выражения, записанного на языке Фортран
2)Вычислить значение арифметического выражения, записанного на языке Фортран (при необходимости округлив результат до сотых), и указать тип...

Строки. Подсчитать результат выражения, записанного в строке
Задание 1 Строка – это правильное арифметическое выражение, содержащее только натуральные числа и знаки арифметических операций между...

Вывести значение выражения, записанного в виде строки
Помогите пожалуйста решить задачу.. "Дана строка, изображающая арифметическое выражение вида "цифра +,- цифра +,- ... +,-...

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

Вычислить значение выражения в строке
В заданной строке, представляющей собой выражение, содержащее числа и знаки "+" и "-", вычислить значение выражения. ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru