С Новым годом! Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 9
1

Представление многочлена в виде списка

23.12.2018, 22:17. Показов 1421. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите, пожалуйста!!!
Нет вариантов для решения.

Дана запись (в виде строки) многочлена от переменной х произвольной степени с целыми коэффициентами, причем его одночлены могут быть и не упорядочены по степеням х, а одночлены одной и той же степени могут повторяться. Возможный пример (знак ^ означает возведение в степень):

–8x^4–74x +8x^4 +5–x^3

Требуется привести подобные члены в этом многочлене, после чего вывести на экран:
строку, представляющую многочлен по убыванию степеней х;
значение многочлена в точках х=-1,0,2;
строку, представляющую многочлен – производную.
Указания к решению:
при вводе исходной записи предусмотреть проверку на правильность ввода – запись не должна содержать «лишние» символы и не должна быть пустой;
использовать однонаправленный список для хранения коэффициентов; в списке не должно быть элементов с нулевыми коэффициентами;
по окончании работы программы правильно освободить память, занятую списком и другими динамическими объектами;
для вычисления значений многочлена использовать процедуру-функцию целого типа.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.12.2018, 22:17
Ответы с готовыми решениями:

Представить коэффициенты многочлена в виде простого однонаправленных списка
Представить коэффициенты многочлена {a}_{n}{x}^{n}+...+{a}_{1}x+{a}_{0} в виде простого...

Представление последовательности строк в виде линейного списка
Задача. Используйте представление последовательности строк в виде линейного списка и опишите...

Объединить две упорядоченные последовательности в одну,используя представление последовательности чисел в виде списка
помогите написать программу на паскале абс.Используя представление последовательности чисел в виде...

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

6
20 / 19 / 4
Регистрация: 22.03.2018
Сообщений: 701
23.12.2018, 23:02 2
1) =2х^{3}+9х-5 -3
2) =2у^{2}-5у^{3}+10у-18 -4
3) =-6у^{2}-9ху -2
на счёт степени многочлена точно не уверен
0
2351 / 1454 / 526
Регистрация: 07.04.2017
Сообщений: 4,791
24.12.2018, 02:29 3
Цитата Сообщение от Anna362 Посмотреть сообщение
использовать однонаправленный список
Бред, это будет нереально реализовать.

Цитата Сообщение от Anna362 Посмотреть сообщение
правильно освободить память
Это не к PascalABC.Net, он сам освобождает всю память.

Идите в ветки сдохших паскалей, если хотите чтоб те 2 пункта выполнялись.
А остальное - на PascalABC.Net будет так:
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
type
  ParseException = class(Exception)
    constructor(text: string) :=
    inherited Create(text);
  end;
 
function ParseMonomial(s: string; minus: boolean): (real,real);
begin
  var args := s.Split(new string[]('x^','x'), System.StringSplitOptions.None);
  Result := (
    
    args[0]<>''?(
      minus?
      -args[0].ToReal:
      +args[0].ToReal
    ):1.0,
    
    args.Length=1?0.0:(
      args[1]<>''?
      args[1].ToReal:
      1.0
    )
    
  );
end;
 
function ParsePolynomial(self: sequence of char): sequence of (real,real); extensionmethod;
begin
  var sb := new StringBuilder;
  var minus := false;
  
  foreach var ch in self do
    if ( (ch='+') or (ch='-') ) and ( (sb.Length=0) or (sb[sb.Length-1]<>'^') ) then
    begin
      
      if sb.Length <> 0 then
      begin
        yield ParseMonomial(sb.ToString, minus);
        sb.Clear;
        minus := false;
      end;
      
      if ch='-' then minus := not minus;
    end else
      sb += ch;
  
  if sb.Length <> 0 then
    yield ParseMonomial(sb.ToString, minus);
end;
 
function PolynomialToString(self: sequence of (real,real)); extensionmethod :=
self.Select(t->$'{t[0]}x^{t[1]}')
.JoinIntoString('+')
.Replace('+-', '-');
 
begin
  try
    var s := ReadlnString('Введите выражение:').Remove(' ');
    
    if s.Length=0 then raise new ParseException('Строка выражения не может быть пустой!');
    
    var allowed_symbols := '+-.x^';
    foreach var ch in s do
    begin
      if ch.IsDigit then continue;
      if allowed_symbols.Contains(ch) then continue;
      raise new ParseException($'Неожиданный символ "{ch}" с кодом #{word(ch)}');
    end;
    
    var p :=
      s.ParsePolynomial
      .GroupBy(
        t->t[1],
        (key, vals)->(
          vals.Sum(t->t[0]),
          key
        )
      )
      .Where(t->t[0]<>0)
      .OrderByDescending(t->t[1])
      .ToList;
    
    writeln;
    writeln('Преобразованное выражение, со степенями по убыванию:');
    p.PolynomialToString.Println;
    
    writeln;
    foreach var x in Arr(-1, 0, 2) do
    begin
      Writeln($'Если x = {x}, то результат этого выражения будет:');
      p.Sum(t->t[0] * x**t[1]).Println;
    end;
    
    writeln;
    writeln('Производная этого выражения:');
    p.Select(t->(
      t[0] * t[1],
      t[1] - 1
    ))
    .Where(t->t[0]<>0)
    .PolynomialToString
    .Println;
    
  except
    on e: ParseException do
    begin
      writeln(e.Message);
      readln;
    end;
  end;
end.
1
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 9
25.12.2018, 00:33  [ТС] 4
Спасибо за помощь!
Но мы проще код пишем. Попробую разобраться)
0
2351 / 1454 / 526
Регистрация: 07.04.2017
Сообщений: 4,791
25.12.2018, 00:38 5
Если слишком сложно - пишите, любую часть с радостью объясню)
0
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 9
25.12.2018, 09:28  [ТС] 6
Проще сказать, что понятно) Как-то необычно написано.
Спрошу только то, что не смогла прояснить с помощью яндекса.

Что такое ParseException = class(Exception)?
0
2351 / 1454 / 526
Регистрация: 07.04.2017
Сообщений: 4,791
25.12.2018, 17:00 7
Офф. справка:
https://docs.microsoft.com/en-... .2#derived

ParseException это наследник от класса Exception (топорый перевод - исключение), поэтому для него работает raise.

Исключения бросаются в особых ситуациях. К примеру, когда строку, которую нельзя превратить в число пытается конвертировать:
Pascal
1
2
3
4
5
begin
  var s := ReadlnString;
  var i := s.ToInteger;
  i.Print;
end.
В большинстве случаев этот код будет работать стабильно, читая строку, превращая её в число и выводя результат. Но если ввести, к примеру, abc - всё будет работать по особому, можно сказать исключительно. В последнем случае получаем следующий вывод (на окно вывода можно всё ещё переключится после того как IDE выдало ошибку):
Код
abc
Ошибка времени выполнения: System.FormatException: Входная строка имела неверный формат.
Стек:
   в System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   в System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   в PABCSystem_implementation______.PABCSystem_implementation______.ToInteger(String Self) в C:\Program Files (x86)\PascalABC.NET\LibSource\PABCSystem.pas:строка 10372
   в Program1.Program.$Main() в C:\PABCWork.NET\Program1.pas:строка 3
   в Program1.Program.Main()
Видно, что у нас тут необработанное исключение - System.FormatException. Из за того что его необработали - программа вылетела, но сохранила для нас стек вызовов (список того что было вызвано, перед тем как программа вылетела). Ну, нам из него интересна только строчка:
Код
   в Program1.Program.$Main() в C:\PABCWork.NET\Program1.pas:строка 3
То есть надо обработать System.FormatException для строчки
Pascal
1
  var i := s.ToInteger;
Это делается так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
begin
  var s := ReadlnString;
  var i: integer;
  try
    i := s.ToInteger;
  except
    on my_e: System.FormatException do
    begin
      writeln('ошибка! вы ввели не целое число!');
      readln;
      halt;
    end;
  end;
  i.Print;
end.
В офф. справке (ссылка выше) есть больше примеров. Они на C#, но с C# всё переводится на PascalABC.Net почти строчка в строчку. И C# для этого знать не надо.

Что до того зачем я использовал исключение тут - они прерывают любое выполнение (вообще, только в вызвавшем поток) пока не будут обработаны. К примеру:
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
type
  e1t = class(Exception)
    
    i: integer;
    
    constructor(i: integer);
    begin
      self.i := i;
    end;
    
  end;
 
begin
  try
    
    raise new e1t(5);
    
    writeln('это не выведет, потому что перед ним вызвано исключение');
    
  except
    on e: e1t do
      writeln($'получено исключение, i было {e.i}');
  end;
end.
То есть это удобный и красивый способ заставить точку выполнения прыгнуть в самый конец программы. А ещё можно передать какие то данный, как число в последней программе, или текст ошибки в основной.

Для чего я его и использовал. В коде в 2 местах создаётся это исключение, чтоб проверить:
Цитата Сообщение от Anna362 Посмотреть сообщение
предусмотреть проверку на правильность ввода
Цитата Сообщение от Anna362 Посмотреть сообщение
запись не должна содержать «лишние» символы
Цитата Сообщение от Anna362 Посмотреть сообщение
не должна быть пустой
Так же можно поставить вызов исключения внутрь любой из моих функций, если надо будет дополнить программу ещё какой то проверкой.

Добавлено через 7 минут
Цитата Сообщение от Anna362 Посмотреть сообщение
прояснить с помощью яндекса
А насчёт этого... Есть более человеческие способы:
- Навести мышкой на то что не понятно, вам покажет описание
- Поставить на него курсор и нажать F1, вам откроет справку на нужной странице
- Зажать Ctrl и тыкнуть, вам откроет реализацию того, на что вы тыкнули
0
25.12.2018, 17:00
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.12.2018, 17:00
Помогаю со студенческими работами здесь

Представление дерева в виде списка
Здравствуйте. Так и не могу понять, каким образом представляются деревья в виде списков! Можно...

Представление числа в виде сумм из списка
Имеется число 10 и список . Найти все наборы

Представление графа в виде списка вершин.
Стыдно спрашивать, просто хочется сделать чтобы все работало правильно и быстро. Дело в том, что...

Реализовать представление графа в виде списка ребер в С++
Реализуйте представление графа в виде списка ребер (массива одно связанных списков) С режимами...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала согласования+ стартер fast регистров. Файлы прилагаю. . . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru