В
Все
М
Математика
О
ОБЖ
У
Українська мова
Х
Химия
Д
Другие предметы
Н
Немецкий язык
Б
Беларуская мова
М
Музыка
Э
Экономика
Ф
Физика
Б
Биология
О
Окружающий мир
У
Українська література
Р
Русский язык
Ф
Французский язык
П
Психология
О
Обществознание
А
Алгебра
М
МХК
Г
География
И
Информатика
П
Право
А
Английский язык
Г
Геометрия
Қ
Қазақ тiлi
Л
Литература
И
История
allanazarova12
allanazarova12
06.04.2022 15:21 •  Информатика

Напишите программу, которая сортирует массив и находит количество различных чисел в нём (на языке Питона)

Показать ответ
Ответ:
pokhvatovadiana
pokhvatovadiana
10.02.2021 21:50
Опишем формальную грамматику для разбора входной строки.
<символ> ::= <буква> | <знак>
<буква> ::= 'a' | 'b' | 'c' | ... | 'y' | 'z'
<знак> ::= '+' | '-'
<терм> ::= <буква> [ <терм> ]
<операнд> ::= [ <знак> ] <терм>
<строка> ::= <операнд> [ <операнд> ]

Ниже приведена программа на языке Pascal.ABC, реализующая разбор входной строки и её упрощение по правилам приведения подобных членов.

const
  n = 30; {максимальное количество операндов, я так захотел!}
  pm = ['+', '-']; {символы <знак>}
  letter = ['a'..'z'];{символы <буква>}

type
  tOper = record
    sgn: integer;
    vars: string
  end;
  tM = array[1..n] of tOper;
  taSort = array[1..n] of string;{для сортировки}

var
  s: string;
  l, p: integer;
  symb: set of char;

procedure GetSymbol(var c: string);
{
Сканирует строку s с позиции p и возвращает элемент <символ>
Продвигает курсор p к первому необработанному символу строки s
}
var
  found: boolean;

begin
  found := false;
  c := '';
  while (p <= l) and (not found) do
  begin
    if s[p] in symb then begin
      found := true;
      c := s[p]
    end;
    p := p + 1
  end
end;

procedure Sort(var a: taSort; kol: integer);
{Сортировка вставкой}
var
  i, j: integer;
  x: string;
  flag: boolean;
begin
  for i := 2 to kol do
  begin
    x := a[i];
    j := i - 1;
    flag := False;
    while (j > 0) and (not flag) do
      if x < a[j] then
      begin
        a[j + 1] := a[j];
        j := j - 1
      end
      else flag := True;
    a[j + 1] := x
  end
end;

function GetSign(c: char): integer;
begin
  case c of
    '+': Result := 1;
    '-': Result := -1;
  else Result := 0
  end
end;

procedure GetOper(var oper: tOper);
{
Строит элемент <операнд> максимально возможной длины и упорядочивает
составляющие его символы в лексикографическом порядке.
Если операнд построить невозможно, в oper.vars помещается пустая строка.
Процедура обращается к процедурам GetSymbol и Sort.
}
var
  i, n: integer;
  c, c1: string;
  ExitFlag: boolean;
  a: taSort;

begin
  c := '';
  ExitFlag := false;
  GetSymbol(c1); {попытаемся получить знак}
  if c1[1] in pm then oper.sgn := GetSign(c1[1])
  else begin
    oper.sgn := 1;
    c := c1
  end;
  repeat
    GetSymbol(c1);
    if c1 = '' then ExitFlag := true
    else if c1[1] in pm then begin
      p := p - 1;
      ExitFlag := true
    end
    else
      c := c + c1
  until ExitFlag;
  if c <> '' then
  begin
    n := Length(c);
    for i := 1 to n do a[i] := c[i];
    Sort(a, n);
    c := '';
    for i := 1 to n do c := c + a[i];
    oper.vars := c
  end
  else oper.vars := ''
end;

procedure Add2M(var a: tM; c: tOper; var pn: integer);
{
Ищет среди элементов массива a.vars элемент, совпадающий с с.vars.
При нахождении алгебраически добавляет c.sgn к a[i].sgn, в противном случае
добавляет в массив новый элемент a[i], увеличивая pn на 1.
При вызове pn - количество элементов в массиве.
}
var
  i: integer;
  c1: string;
  found: boolean;

begin
  c1 := c.vars;
  i := 1;
  while (i <= pn) and (not found) do
  begin
    found := (c1 = a[i].vars);
    if found then a[i].sgn := a[i].sgn + c.sgn
    else i := i + 1
  end;
  if not found then begin
    a[i].sgn := c.sgn;
    a[i].vars := c1;
    pn := pn + 1
  end
end;

function Convert(k: integer): string;
begin
  case k of
    -1: Result := '-';
    0: Result := '';
    1: Result := '+';
  else begin
      Str( k, Result);
      if k > 0 then Result := '+' + Result
    end
  end
end;

var
  c, cz: string;
  n1, i: integer;
  opr: tOper;
  a: tM;

begin
  symb := pm + letter;
  p := 1;
  n1 := 0;
  writeln('Введите исходное выражение');
  readln(s);
  s := LowerCase(s); {перевод символов в нижний регистр}
  l := Length(s);
  repeat
    GetOper(opr);
    Add2M(a, opr, n1)
  until p > l;
  if n1 > 0 then
  begin
    cz := Convert(a[1].sgn);
    if cz = '+' then cz := '';
    if cz = '' then c := ''
    else c := cz + a[1].vars;
    for i := 2 to n1 do
    begin
      cz := Convert(a[i].sgn);
      if cz <> '' then c := c + cz + a[i].vars
    end
  end
  else c := '';
  if c='' then c:='0';
  if c[1]='+' then c:=copy(c,2,Length(c)-1);
  writeln('Результат: ', c)
end.

Тестовое решение:

Введите исходное выражение
abc +    a+bca  -acb+abc+abc  +a 
Результат: 3abc+2a

Введите исходное выражение
ab-bca+bc+cba+abc-ba+cba+da+adb+bad-db
Результат: 2abc+bc+ad+2abd-bd
0,0(0 оценок)
Ответ:
аолесдвда
аолесдвда
27.12.2021 10:25

50 самых популярных форумов на русском языке

№ Форум Адрес Тематика

1 Drom.ru forums.drom.ru/ Автомобили

2 Форумы на E1.ru www.e1.ru/talk/forum/ Региональные форумы

3 Littleone forum.littleone.ru/ Семья, дети

4 4PDA 4pda.ru/forum Мобильные телефоны и смартфоны

5 RC-MIR.com forum.rcmir.com Общетематические форумы

6 ЯПлакалъ www.yaplakal.com/forum/ Юмор

7 Sibmama forum.sibmama.ru/ Семья, дети

8 Форум onliner.by forum.onliner.by/ Общетематические форумы

9 Конференция iXBT.com forum.ixbt.com/ Компьютеры, программирование

10 Казахстанский форум "Все Вместе" vse.kz/ Общетематические форумы

11 Официальный форум игры World of Tanks forum.worldoftanks.ru/ Компьютерные и консольные игры

12 BMW Club www.bmwclub.ru/forums/ Автомобили / BMW

13 Томские форумы forum.tomsk.ru/forum/ Региональные форумы

14 Харьков Форум www.kharkovforum.com/ Региональные форумы

15 Городские форумы Днепра - Днепропетровска forum.gorod.dp.ua Региональные форумы

16 TALKS.BY talks.by/ Общетематические форумы

17 Ярпортал: форум Ярославля yarportal.ru/ Региональные форумы

18 Компьютерный форум Ru.Board forum.ru-board.com/ Компьютеры, программирование

19 GoHa.Ru forums.goha.ru/ Компьютерные и консольные игры

20 SQL.ru www.sql.ru/forum Компьютеры, программирование

21 Hip-Hop.Ru www.hip-hop.ru/forum/ Музыка

22 Prodota.ru - форум по Дота 2 prodota.ru/forum/ Компьютерные и консольные игры

23 Форум sptovarov.ru - совместные покупки sptovarov.ru/ Совместные покупки

24 Форекс форум ForexDengi forexdengi.com/ Экономика и финансы

25 Форум Кофейня forum.cofe.ru/forum.php Общетематические форумы

26 Форум Cosmopolitan www.cosmo.ru/forumn/ Женские форумы

27 Большой Воронежский Форум bvf.ru/forum/ Региональные форумы

28 Dota 2 dota2.ru/forum/ Компьютерные и консольные игры

29 KrasMama.Ru forum.krasmama.ru/ Семья, дети

30 Психологи на b17.ru www.b17.ru/forum/ Медицина, здоровье

31 Форум NeverLands forum.neverlands.ru/ Компьютерные и консольные игры

32 Sibnet forum.sibnet.ru/ Региональные форумы

33 Ford Focus Club ffclub.ru/forum/ Автомобили / Ford

34 FORUMHOUSE www.forumhouse.ru/ Строительство и ремонт

35 Гродненский форум forum.grodno.net/ Региональные форумы

36 Форумы НА-СВЯЗИ - Чебоксары forum.na-svyazi.ru/ Техника

37 Форум о заработке и инвестициях mmgp.ru/ Экономика и финансы

38 SearchEngines searchengines.guru/ Интернет

39 Супер Мамочки www.supermamki.ru/ Семья, дети

40 Монеты России и СССР coins.lave.ru/forum/ Хобби

41 Финансовый форум forum.mfd.ru/forum/ Экономика и финансы

42 Форум 24AUTO.RU 24.auto.ru/forum/ Автомобили

43 Siemens-клуб - Waper.ru waper.ru/group/1 Мобильные телефоны и смартфоны

44 Конференция Overclockers.ru forums.overclockers.ru/ Компьютеры, программирование

45 Волшебный форум (миста) www.forum.mista.ru Компьютеры, программирование

46 eCigTalk.ru www.ecigtalk.ru/forum/ Прочее

47 Покерный форум и дискуссии по стратегии ru.pokerstrategy.net/forum/ Прочее

48 VIP-форум - карельская компьютерная сеть "Ситилинк" vip.karelia.pro/ Форумы провайдеров и локальных сетей

49 CyberForum.ru - форум программистов и сисадминов www.cyberforum.ru/ Компьютеры, программирование

50 Пермский форум - Teron.ru teron.ru/

2 (

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота