Форум программистов, компьютерный форум, киберфорум
Free Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 21.04.2021
Сообщений: 40

Вычислить значение последовательности

25.10.2021, 12:55. Показов 2408. Ответов 8

Студворк — интернет-сервис помощи студентам
И как ? Есть идеи?
На вход программе подаётся последовательность символов, заканчивающаяся точкой (точка – признак конца и в последовательность не входит). Данная последовательность является правильной записью
арифметического выражения, состоящего из целых чисел в системе исчисления с основанием «–10» и знаков + , – , *. При этом два знака подряд в выражении не допускается. Программы должна вычислить значения данного выражения и вывести его на экран. Гарантируется, что ни на каком этапе вычислений тип integer (longint) не переполнится.
Пример:
введено «117+32*4.», программа должна вывести «25».
Массивы и строки не использовать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.10.2021, 12:55
Ответы с готовыми решениями:

Вычислить среднее арифметическое значение отрицательных элементов заданной числовой последовательности
Вычислить среднее арифметическое значение отрицательных элементов заданной числовой последовательности.

Вычислить среднее арифметическое значение отрицательных элементов заданной числовой последовательности
Вычислить среднее арифметическое значение отрицательных элементов заданной числовой последовательности. Входные данные:

Вычислить значение выражения на основе заданной последовательности
Дана последовательность вещественных a1, a2, ..., an (n ≤ 20). Вычислить B = 1 + Аmax / |a1|, где Аmax = max(|a1|, |a2|, ..., |an|).

8
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
25.10.2021, 13:58
Цитата Сообщение от _SAP_ Посмотреть сообщение
остоящего из целых чисел в системе исчисления с основанием «–10»
основание системы счисления не может быть отрицательным числом.
Ты ничего не напутал?
Цитата Сообщение от _SAP_ Посмотреть сообщение
(Системы с отрицательным основанием называются нега-позиционными)
почитал про нега-позиционные системы. Да, похоже, что препод у вас большой затейник!


Цитата Сообщение от _SAP_ Посмотреть сообщение
и знаков + , – , *.
приоритет выполнения операций какой? 2+2*2 сколько будет?


Цитата Сообщение от _SAP_ Посмотреть сообщение
Пример:
введено «117+32*4.», программа должна вывести «25».

поясни. как получилось 25 ?


Добавлено через 9 минут
вопросы снимаются.

на первый ответ: приоритеты операций обычные (умножение имеет более высокий приоритет, чем сложение/вычитание, и выполняется в первую очередь).

ответ на второй вопрос.
117-10 = 97
32-10 = -28
4-10 = 4
97 + (-28*4) = -15 = 25-10
0
0 / 0 / 0
Регистрация: 21.04.2021
Сообщений: 40
25.10.2021, 14:39  [ТС]
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
препод у вас большой затейник!
"немыслемый"

Добавлено через 6 минут
по факту задача сводится к переводу из Нега-позиционного представления числа в 10СС и арифметическое вычисление.
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
25.10.2021, 14:49
Цитата Сообщение от _SAP_ Посмотреть сообщение
по факту задача сводится к переводу из Нега-позиционного представления числа в 10СС
да, это так.

Цитата Сообщение от _SAP_ Посмотреть сообщение
и арифметическое вычисление.
вычисление значения арифметического выражения с разным приоритетом операций - классическая, но совсем не простая(банальная) программа.

и это всё ещё с учётом идиотских ограничений
Цитата Сообщение от _SAP_ Посмотреть сообщение
Массивы и строки не использовать.
0
0 / 0 / 0
Регистрация: 21.04.2021
Сообщений: 40
25.10.2021, 14:57  [ТС]
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
вычисление значения арифметического выражения с разным приоритетом операций - классическая, но совсем не простая(банальная) программа.
не нашёл такого решения в коде
может есть ссылка или свой ?

Добавлено через 1 минуту
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
с учётом идиотских ограничений
это реально безобразные ограничения, даже не понимаю , что добивается ими? типа работа "ручками"
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,381
25.10.2021, 15:10
Цитата Сообщение от _SAP_ Посмотреть сообщение
не нашёл такого решения в коде
может есть ссылка или свой ?
есть. Только без учёта ваших ограничений.

например.

Подсчитать значение выражения, заданного в виде строки

про алгоритм в общем случае - см. тут - Вычислить значение арифметического выражения, заданного в виде строки
0
0 / 0 / 0
Регистрация: 21.04.2021
Сообщений: 40
26.10.2021, 20:28  [ТС]
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
есть. Только без учёта ваших ограничений
есть возможность помочь в написании на FreePascal с учётом "идиотс...." ограничений ? спасибо
0
Модератор
10429 / 5717 / 3404
Регистрация: 17.08.2012
Сообщений: 17,385
30.10.2021, 14:01
Для Free Pascal Compiler:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
uses
  gStack; //модуль работы со стеком
 
type
  TIntStack = specialize TStack<Integer>; //тип стека для операндов
  TCharStack = specialize TStack<Char>; //тип стека для операторов
 
var
  num: TIntStack; //стек операндов
  ch: TCharStack; //стек операторов
  c: char; //буфер
  a, b, w, r: integer;
 
begin
  num := TIntStack.Create; //создаём стеки операндов и операций
  ch := TCharStack.Create;
  a := 0; //текущий операнд, пока 0
  while not EoLn do //цикл ввода
    begin
      read(c); //читаем символ
      if c in ['0'..'9'] then a := -10 * a + ord(c) and $F //если цифра, то добавляем очередной разряд -10СС к операнду в 10СС
      else //иначе
        begin
          if not ch.IsEmpty and (ch.Top = '*') then //если умножение,
            begin //то сразу умножаем, не дожидаясь ввода всего выражения
              b := num.Top; //первый операнд
              num.Pop; //выталкиваем его из стека
              b *= a; //умножаем на второй операнд
              num.Push(b); //помещаем результат на вершину стека
              ch.Pop //выталкиваем оператор "*" из стека
            end
          else num.Push(a); //иначе помещаем операнд на вершину стека
          a := 0; //готовимся к чтению следующего операнда
          if c <> '.' then ch.Push(c) //если операция, помещаем её на вершину стека
        end
    end;
  readln; //убираем из буфера клавиатуры #13 #10 (код <Enter>)
  while not ch.IsEmpty do //пока стек операторов не пуст, считаем...
    begin
      a := num.Top; //читаем второй операнд
      num.Pop; //выталкиваем его из стека
      b := num.Top; //читаем первый операнд
      num.Pop; //выталкиваем его из стека
      if ch.Top = '+' then b += a else b -= a; //производим соответствующую операцию
      num.Push(b); //размещаем результат на вершину стека
      ch.Pop //выталкиваем код выполненной операции из стека
    end;
  a := 0; //результат в -10СС, пока 0
  b := num.Top; //результат в 10СС
  w := 1; //вес разряда
  repeat //цикл перевода результата из 10СС в -10СС
    r := (10 + b mod -10) mod 10; //вычисляем очередной разряд в -10СС (получение положительного остатка)
    a += r * w; //добавление разряда в результат
    b := (b - r) div -10; //делим число нацело на -10 с учётом положительного остатка
    w *= 10 //вычисляем вес следующего разряда
  until b = 0; //если все разряды результата в 10СС обработаны, то выход из цикла
  write(a); //печатаем результат в -10СС
  num.Free; //уничтожаем стеки операндов и операций
  ch.Free;
  readln //ждём нажатия <Enter> для закрытия программы
end.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33393 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,900
Записей в блоге: 12
30.10.2021, 14:36
Cyborg Drone, если вместо GStack воспользоваться Generics.Collections - можно немного "разгрузить" программу, тамошний метод Pop - функция, так что последовательность
Pascal
1
2
v := stack.Top;
stack.Pop;
заменяется одним вызовом
Pascal
1
v := stack.Pop;
Просто удобнее.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.10.2021, 14:36
Помогаю со студенческими работами здесь

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

Вычислить среднее арифметическое значение последовательности целых чисел
Вычисляет среднее арифметическое значение последовательности целых чисел. Первое, считываемое целое число, определяет количество...

Вычислить среднее арифметическое значение последовательности целых чисел
Задача: Вычисляет среднее арифметическое значение последовательности целых чисел. Первое, считываемое целое число, определяет ...

Вычислить среднее арифметическое значение элементов числовой последовательности
Вычислить среднее арифметическое значение элементов числовой последовательности, в записи значения которых содержится две различные цифры....

Вычислить среднее арифметическое значение элементов числовой последовательности
Вычислить среднее арифметическое значение элементов числовой последовательности, в записи значения которых содержится две различные цифры....


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки 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. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru