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

Вывести на экран только те символы, которые встречаются в строке более трех раз

08.09.2022, 17:43. Показов 977. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дана символьная строка. Вывести на экран только те символы,
которые встречаются в ней более трех раз, для каждого из этих символов
указать точное количество повторений.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2022, 17:43
Ответы с готовыми решениями:

Вывести на экран только те символы, которые встречаются в строке более трех раз
Дана символьная строка. Вывести на экран только те символы, которые встречаются в ней более трех...

Дана символьная строка. Вывести на экран те символы которые встречаются в строке более 3х раз
Работа со строками. Дана символьная строка. Вывести на экран те символы которые встречаются в...

Вывести на экран те символы, которые встречаются в строке только один раз
Для заданной символьной строки вывести на экран те символы, которые встречаются в ней только один...

Дана символьная строка. Вывести на экран только те символы, которые встречаются в ней более трех раз, для каждого из эти
мне нужно срочно!!!! помоги чем сможете. С++ Добавлено через 19 секунд Вот задание Дана...

15
2309 / 1420 / 516
Регистрация: 07.04.2017
Сообщений: 4,723
08.09.2022, 18:25 2
Pascal
1
2
3
4
## ReadString
.EachCount
.Where(kvp->kvp.Value>3)
.PrintLines;
0
0 / 0 / 0
Регистрация: 03.10.2021
Сообщений: 29
08.09.2022, 18:57  [ТС] 3
А можно попросить в развернутом в виде, ребенок не понимает)

Добавлено через 3 минуты
Sun Serega, на подобии такого
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
s:String;
i:integer;
c:integer;
begin
 
 writeln('Vvedite stroky:');
 readln(s);
 
 i:=1;
 while(i<=Length(s)) do 
 begin
 c:=ord(s[i]); 
 if not((65<=c) AND (c<=90) OR ((128<=c) AND (c<=159))) //проверка,
заглавный символ или нет
 then Delete(s,i,1) 
 else i:=i+1; 
 end;
 
 writeln('Resultat: ',s);
 writeln;
 readln;
 end.
0
2309 / 1420 / 516
Регистрация: 07.04.2017
Сообщений: 4,723
08.09.2022, 19:07 4
Дайте ему навести мышку на слова - там у всего понятные описания. Для EachCount только не показывает чего-то, но вот его реализация:
Pascal
1
2
3
4
5
/// Возвращает частотный словарь объектов последовательности
function EachCount<T>(Self: sequence of T): Dictionary<T,integer>; extensionmethod;
begin
  Result := Self.GroupBy(x->x).ToDictionary(g -> g.Key, g -> g.Count);
end;
Если надо как-то по-другому - опишите ситуацию, как учитесь, что знаете.

Добавлено через 18 секунд
ThaiAZ, для выделения кода есть кнопка PASCAL над окном ответа.

Добавлено через 6 минут
А тот кот что вы написали - написан на древне-паскальном.
Лучше всё же современному учиться. Если уж всё ручками реализовывать то так:
Pascal
1
2
3
4
5
6
## var counts := new Dictionary<char, integer>;
foreach var ch in ReadString do
  counts[ch] := counts.Get(ch)+1;
foreach var kvp in counts do
  if kvp.Value>3 then
    Println(kvp);
Или ещё подробнее:
Pascal
1
2
3
4
5
6
7
8
9
10
11
## var counts := new Dictionary<char, integer>;
foreach var ch in ReadString do
begin
  var c: integer;
  if not counts.TryGetValue(ch, c) then
    c := 0; // На самом деле не обязательно, TryGetValue обнуляет если не нашло
  counts[ch] := c+1;
end;
foreach var kvp in counts do
  if kvp.Value>3 then
    Println(kvp);
Чтобы использовать ещё меньше стандартного - можно только Dictionary заменить, но для этого учите хеш-таблицы. Но это уже не для новичков...
0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
09.09.2022, 06:55 5
Цитата Сообщение от Sun Serega Посмотреть сообщение
на древне-паскальном
тогда так:


Добавлено через 2 часа 3 минуты
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var 
  i:integer;
  c:array[char] of integer;
  s:string;
  b:boolean;
begin
  write('введите строку:');readln(s);
  for i:=1 to length(s) do inc(c[s[i]]);
  b:=false;
  for i:=1 to length(s) do 
    if c[s[i]]>3 then begin
      writeln(''''+s[i]+'''':5,':',c[s[i]]-1:5);//полагаю, что число повторений на единицу меньше чем количество встречаемых букв
      c[s[i]]:=0;
      b:=true;   
    end;
   if not b then writeln('в строке нет повтора символов более 3'); 
end.
0
XzzzX
09.09.2022, 14:24
  #6

Не по теме:

Цитата Сообщение от Joy Посмотреть сообщение
тогда так:
тогда лучше в другой раздел с этим делом...

0
Эксперт Pascal/Delphi
2386 / 1298 / 1492
Регистрация: 29.08.2014
Сообщений: 4,661
09.09.2022, 14:29 7
XzzzX, код на PascalABC.Net компилируется? Тогда зачем отправлять в другие разделы?
0
XzzzX
09.09.2022, 14:42
  #8

Не по теме:

Joy, компилируется, но осуждается

0
0 / 0 / 0
Регистрация: 03.10.2021
Сообщений: 29
30.09.2022, 03:45  [ТС] 9
а что в данном случае выполняет inc, и как программа сравнивает значения, например, как она понимает, что элемент 1 и элемент 2 это повторяющийся символ?
0
5079 / 2651 / 2349
Регистрация: 10.12.2014
Сообщений: 10,028
30.09.2022, 06:19 10
ThaiAZ, inc — стандартная процедура.
Описание смотрите в букваре по ЯП

Цитата Сообщение от ThaiAZ Посмотреть сообщение
как она понимает,
А вы отладчиком попробуйте прогнать программу
0
3018 / 1643 / 650
Регистрация: 19.03.2019
Сообщений: 5,319
30.09.2022, 09:54 11
Цитата Сообщение от ThaiAZ Посмотреть сообщение
и как программа сравнивает значения, например, как она понимает, что элемент 1 и элемент 2 это повторяющийся символ?
в программе есть массив C в котором индексы массива - это все возможные символы, а значения по этим индексам - это счётчик - сколько раз этот символ встретился.
например, C['s'] - сколько раз встретилась символ 's' в строке, C['#'] - сколько раз встретился символ '#' и так далее.

Алгоритм такой, сначала подсчитываем для каждого встреченного символа строки - наращиваем счётчик в массиве C на 1.
потом проходим по строке, проверяем счётчик, если он больше 3 - выводим символ и зануляем счётчик, чтобы этот символ вывелся только один раз (если этого не сделать, то сколько раз повторяется символ столько раз он и выведется).
Всё.

Цитата Сообщение от ThaiAZ Посмотреть сообщение
а что в данном случае выполняет inc
загугли
просто увеличивает на единичку переменную.
если тебе это принципиально не нравится (хотя это зря, inc() лучше!)
можешь вместо inc(c[s[i]]) написать аналогичный код c[s[i]] := c[s[i]] + 1
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7771 / 4600 / 2824
Регистрация: 22.11.2013
Сообщений: 13,080
Записей в блоге: 1
30.09.2022, 13:27 12
Цитата Сообщение от mr-Crocodile Посмотреть сообщение
потом проходим по строке, проверяем счётчик
Если проходить по массиву, то приседать с занулением не придется
0
3018 / 1643 / 650
Регистрация: 19.03.2019
Сообщений: 5,319
30.09.2022, 17:26 13
bormant, ну, не я писал этот код и этот алгоритм, я просто пояснил ТС, как идёт программа работает.

Что же касается
Цитата Сообщение от bormant Посмотреть сообщение
Если проходить по массиву, то приседать с занулением не придется
то совершенно не факт, что это будет эффективней.
всё таки вряд ли строка длиной 65536 символов, поэтому проще по ней пробежаться, пусть даже с занулением, чем по всему массиву.

Хотя, задача явно учебная, в ней что не делай, если это работает и решает поставленную задачу - то всё сгодится
Главное, понимать, что написано в коде и суметь повторить и/или хотя бы объяснить преподавателю суть решения. имхо.
1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7771 / 4600 / 2824
Регистрация: 22.11.2013
Сообщений: 13,080
Записей в блоге: 1
01.10.2022, 00:08 14
mr-Crocodile,
ровно до тех пор, пока нет ввода-вывода. Но стоить добавить Write/WriteLn, и на этом фоне уже просмотр 65635 вместо прохода по строке с модификацией не факт, что дороже
0
3018 / 1643 / 650
Регистрация: 19.03.2019
Сообщений: 5,319
03.10.2022, 09:46 15
Цитата Сообщение от bormant Посмотреть сообщение
Но стоить добавить Write/WriteLn, и на этом фоне уже просмотр 65635 вместо прохода по строке с модификацией не факт, что дороже
Прости, я не понял, о чём ты...
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7771 / 4600 / 2824
Регистрация: 22.11.2013
Сообщений: 13,080
Записей в блоге: 1
03.10.2022, 14:47 16
mr-Crocodile,
о том, что операции ввода/вывода обычно настолько тяжелы, что на их фоне прочие затраты легко могут оказаться несущественными.
0
03.10.2022, 14:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2022, 14:47
Помогаю со студенческими работами здесь

Написать программу, которая определяет наиболее часто встречающийся в строке символ, а так же символы, которые встречаются более трех раз
Всем привет. Нужна помощь в написании программ(2 штуки) 1) Написать программу, которая определяет...

Разработать программу, которая выводит на экран символы, которые встречаются в строке только один раз
Помогите написать код, пожалуйста. Нужно разработать программу, которая для заданной строки s...

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

Символы, которые встречаются в строке более 2-ух раз
Реализовать программу, которая из строки выводит символы в другое поле, которые встречаются в...

Для заданной символьной строки вывести на экран те символы, которые встречаются в ней только один раз
Для заданной символьной строки вывести на экран те символы, которые встречаются в ней только один...

Вывести символы, которые встречаются более 2х раз.
Вывести символы, которые встречаются более 2х раз.


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru