Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/18: Рейтинг темы: голосов - 18, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 28
1

Определить наиболее часто встречающийся символ в строке

15.03.2016, 11:03. Показов 3321. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Определить наиболее часто встречающийся символ в строке.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2016, 11:03
Ответы с готовыми решениями:

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

Вывести наиболее часто встречающийся элемент массива
Задача: Вывести наиболее часто встречающийся элемент массива. Delphi(Console). Добавлено...

Вывести на экран цифру, наиболее часто встречающийся в массиве
Дан непустой массив из цифр,вывести на экран цифру, наиболее часто встречающийся в этом массиве.

Вывести на экран цифру, наиболее часто встречающийся в этом массиве
Дан непустой массив из цифр,вывести на экран цифру, наиболее часто встречающийся в этом массиве.

20
5395 / 4323 / 1060
Регистрация: 29.08.2013
Сообщений: 27,130
Записей в блоге: 3
15.03.2016, 11:07 2
Разработать программу, которая в заданной строке подсчитывает, сколько раз повторяется каждый символ
0
500 / 356 / 231
Регистрация: 29.03.2015
Сообщений: 675
15.03.2016, 11:29 3
Код:
Delphi
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
unit MainU;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
f:boolean;
i,j,l,m:integer;
s:string;
a:array of record
c:char;
n:integer;
end;
begin
s:=edit1.Text;
if s='' then
begin
showmessage('Введите строку!');
exit;
end;
setlength(a,0);
for i:=1 to length(s) do
begin
f:=true;
l:=length(a);
for j:=0 to l-1 do
if a[j].c=s[i] then
begin
a[j].n:=a[j].n+1;
f:=false;
break;
end;
if f then
begin
setlength(a,l+1);
a[l].c:=s[i];
a[l].n:=1;
end;
end;
m:=0;
for i:=0 to length(a)-1 do
if a[i].n>m then
m:=a[i].n;
label5.Caption:=inttostr(m);
label3.Caption:='';
for i:=0 to length(a)-1 do
if a[i].n=m then
label3.Caption:=label3.Caption+a[i].c+' ';
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
 
end.
Прилагаю проект на Delphi.
Вложения
Тип файла: zip Symbol.zip (207.9 Кб, 16 просмотров)
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 28
15.03.2016, 20:58  [ТС] 4
unifikator, Большое спасибо!
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
15.03.2016, 21:40 5
Алена1232,
Вариантов то вобще не мало
Ну лан тут уже приложили вариант, не буду писать свой. )
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 28
15.03.2016, 23:29  [ТС] 6
NIKOLAYY, Если вам не сложно,скиньте свой)Очень интересно
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
15.03.2016, 23:45 7
Цитата Сообщение от Алена1232 Посмотреть сообщение
Если вам не сложно,скиньте свой)Очень интересно
Ну сама смотри- каждый символ в строке принадлежит какому то элементу в массиве.
Плюсуем элементы массива в цикле в зависимости от элемента и узнаем где и какой символ повторялся чаще!

Писал я этот простенький код где то в истории сайта лежит, не нашол.
Но смысл его простой работы пояснил выше
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 28
15.03.2016, 23:50  [ТС] 8
unifikator,поясните если не трудно,что означает каждая переменная
0
843 / 738 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
16.03.2016, 00:01 9
Цитата Сообщение от Алена1232 Посмотреть сообщение
unifikator,поясните если не трудно,что означает каждая переменная
Там просто все:

string - строка.
integer - число.

Далее там все полностью идут операции над переменными.
0
669 / 559 / 242
Регистрация: 26.11.2012
Сообщений: 2,191
16.03.2016, 08:18 10
Можно еще и так

Кликните здесь для просмотра всего текста
Delphi
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
FList:TStringList;
i, max, Scount:integer;
begin
Max:=0;
Scount:=1;
Memo1.Clear;
FList:=TStringList.Create;
For i:=1 to Length(Edit1.Text) do
 FList.Add(Edit1.Text[i]);
 
FList.Sorted:=true;
FList.Sort;
 
For i:=1 to FList.Count-1 do
if FList[i] = FList[i-1]
 then  Inc(Scount)
 else begin
       if Scount > Max then
       begin
        Memo1.Clear;
        Max:=Scount;
        Scount:=0;
        Memo1.Lines.Add(FList[i-1] + ' = ' + IntToStr(Max));
       end else
            if Scount = Max then Memo1.Lines.Add(FList[i-1] + ' = ' + IntToStr(Max));
        Scount:=0;
      end;
end;
 
end.
0
500 / 356 / 231
Регистрация: 29.03.2015
Сообщений: 675
16.03.2016, 10:40 11
Код с комментариями:
Delphi
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
112
113
114
unit MainU;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
//Флаг f равен Истина (true), если в массиве a нет симовлов из строки s.
f:boolean;
//i и j - индексы массивов в циклах, l - длина массива a, m - максимальное количество символов в строке.
i,j,l,m:integer;
//s - строка.
s:string;
//a - массив записей, где c - символ, n - количество символа в строке.
a:array of record
c:char;
n:integer;
end;
begin
//Получаем строку s из текстового поля edit1.
s:=edit1.Text;
//Если строка s пуста, то выводим сообщение и выходим из обработчика события нажатия на кнопку.
if s='' then
begin
showmessage('Введите строку!');
exit;
end;
//Устанавливаем длину массива a равной 0.
setlength(a,0);
//i изменяется от 1 до длины строки s.
for i:=1 to length(s) do
begin
//Флаг f равен истина, то есть в массиве a нет симовла из строки s.
f:=true;
//l - длина массива a.
l:=length(a);
//j изменяется от 0 до l-1.
for j:=0 to l-1 do
//Если j-ый символ из массива a равен i-ому символу строки s, то:
if a[j].c=s[i] then
begin
//Увеличиваем количество j-ого символа из массива a на 1.
a[j].n:=a[j].n+1;
//Флаг f равен ложь, то есть в массиве a есть символ из строки s.
f:=false;
//Выходим из цикла.
break;
end;
//Если флаг f равен истина, то есть в массиве a нет символа из строки s, то:
if f then
begin
//Устанавливаем длину массива a на 1 больше.
setlength(a,l+1);
//Помещаем i-ый символ строки s в конец массива a.
a[l].c:=s[i];
//Устанавливаем клоличество этого символа равным 1.
a[l].n:=1;
end;
end;
//Максимальное количество m символов в строке s равно 0.
m:=0;
//i изменяется от 0 до длины массива a - 1.
for i:=0 to length(a)-1 do
//Если количество i-ого символа из массива a больше m, то:
if a[i].n>m then
//m равно количеству i-ого символа из массива a.
m:=a[i].n;
//Присваиваем метке 5 значение m.
label5.Caption:=inttostr(m);
//Значение метки 3 пусто.
label3.Caption:='';
//i изменяется от 0 до длины массива a - 1.
for i:=0 to length(a)-1 do
//Если количество i-ого символа из массива a равно максимальному m, то:
if a[i].n=m then
//Увеличиваем значение метки 3 на количество i-ого символа из массива a.
label3.Caption:=label3.Caption+a[i].c+' ';
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
//Закрываем программу.
close;
end;
 
end.
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 28
16.03.2016, 23:09  [ТС] 12
unifikator, Как все подробно!!спасибо"!!!!
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 28
29.03.2016, 08:36  [ТС] 13
unifikator, а что это за массив такой
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.03.2016, 09:01 14
Delphi
1
2
3
4
a:array of record//это массив записей с двумя полями
              c:char;//символ
              n:integer;//его количество в строке
              end;
Добавлено через 18 минут
Можно намного проще.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TForm1.Button1Click(Sender: TObject);
var i,m:integer;
    s:string;
    a:array[32..255] of integer; //массив встрчаемости  символов(видимых)
begin
s:=edit1.Text;
if s='' then
 begin
  showmessage('Введите строку!');
  exit;
 end;
//Обнулим массив
for i:=32 to 255 do
a[i]:=0;
//запишем в массив частоту встркчаемости символов
for i:=1 to length(s)do
inc(a[ord(s[i])]);
//нвйдем максимальный
m:=32;
for i:=33 to 255 do
if a[i]>a[m] then m:=i;
ShowMessage('Самый частый символ '+chr(m));
 
end;
0
500 / 356 / 231
Регистрация: 29.03.2015
Сообщений: 675
29.03.2016, 09:41 15
Массив - это нумерованные ячейки памяти. В начале массив записывается в разделе var. Пишется имя массива, двоеточие, ключевое слово array. Если нумерация определённая, то пишется квадратная скобка [, начальный номер, две точки.., конечный номер и квадратная скобка закрывается ]. Даже если нумерация не определённая, то дальше пишется ключевое слово of, тип ячейки памяти, то есть элемента массива. Например, целое число integer или строка string. В конце записывается точка с запятой ; . Пример массивов:
Delphi
1
2
3
var
a:array[2..9]of integer;//Массив с именем a, нумерацией от 2 до 9, с типом - целое число integer.
b:array of string;//Массив с именем b, не определённой нумерацией, с типом - строка string.
После записи массива в разделе var, то есть объявлении массива, массив можно использовать в коде: присваивать элементу массива значение или получать значение элемента массива. Для массива с не определённой нумерацией в начале следует установить его длину. Например:
Delphi
1
2
3
4
5
6
7
8
9
10
//Элементу массива a с номером 3 присвоили значение 5.
a[3]:=5;
//c присвоили значение элемента массива a с номером 3. 
//Теперь c равно 5.
c:=a[3];
//Установили длину массива b равной 10. 
//Теперь элементы нумеруются от 0 до 9.
setlength(b,10);
//Элементу массива b с номером 0 присвоили значение Привет!.
b[0]:='Привет!';
Запись объединяет несколько переменных, то есть ячеек памяти, в одной переменной.
В разделе var записывается имя объединяющей переменной, потом двоеточие :, ключевое слово record, названия и типы переменных через двоеточие, в конце - ключевое слово end. Например:
Delphi
1
2
3
4
5
var
r:record//Объединяющая переменная r.
i:integer;//Переменная i типа целое число integer.
s:string;//Переменная s типа строка string.
end;
Для использовании записи в коде нужно указать имя объединяющей переменной, точку . и имя входящей в неё переменной. Например:
Delphi
1
2
3
4
5
//Переменной i входящей в r присваивается 5.
r.i:=5;
//v присваивается значение переменной i входящей в r.
//Теперь v равно 5.
v:=r.i;
Массив из кода программы:
Delphi
1
2
3
4
a:array of record
c:char;
n:integer;
end;
имеет для своих элементов тип записи. После установки длины массива setlength(a,l+1); его элементы нумеруются от 0 до l. И присвоить значение его элементу можно так: a[l].n:=1; То есть присвоили переменной n входящей в элемент массива с номером l значение 1. c - это символ, а n - количество этого символа в строке.
В начале перебираются символы строки и если символа нет в массиве a, то символ добавляется в массив, если символ есть, то количество символа увеличивается на 1. Потом в массиве a ищется максимальное количество символов. В конце ищутся по массиву a и выводятся символы с максимальным количеством.
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 28
29.03.2016, 10:26  [ТС] 16
Puporev, а почему от 32 до 255
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.03.2016, 10:30 17
Ну потому что при наборе текста символы с кодами меньше 32(пробел) не набрать, это служебные символы, а 255 это максимальный номер кода символа, в ANSI это символ 'я'
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 28
29.03.2016, 10:33  [ТС] 18
Puporev, Спасиюо :*
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
29.03.2016, 10:47 19
Если не хотите чтобы вас спрашивали почему от 32, напишите
Delphi
1
2
3
4
5
6
7
8
var  a:array[0..255] of integer;
.........................................
for i:=0 to 255 do
a[i]:=0;
..................................
m:=0;
for i:=1 to 255 do
if a[i]>a[m] then m:=i;
0
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 28
29.03.2016, 12:10  [ТС] 20
Puporev, m-это?
0
29.03.2016, 12:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.03.2016, 12:10
Помогаю со студенческими работами здесь

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

Определить наиболее часто встречающийся символ в файле
Условие такое: Дан файл, содержащий текст. Определить наиболее часто встречающуюся в нем букву...

Определить символ, встречающийся в файле наиболее часто
Помогите! Организовать файл символов из N компонент. Определить символ, встречающийся в файле...

Определить наиболее часто встречающийся символ в файле
Всем вечер добрый , нужна помощь помогите кто может : Определить в файле наиболее часто...


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

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