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

Посчитать в файле частоту букв плюс апостроф и вывести значения по каждой букве в таблице в процентном соотношении

08.02.2014, 19:42. Показов 1977. Ответов 23
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть файл с украинским текстом я должна посчитать в нем частоту букв плюс еще апостроф и вывести значения по каждой букве в таблице в процентном соотношении. Помогите пожалуйста у меня не получается.

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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Menus, OleCtnrs;
 
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N21: TMenuItem;
    Memo1: TMemo;
    OpenDialog2: TOpenDialog;
    Button1: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    procedure N21Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
 
procedure TForm1.N21Click(Sender: TObject);
begin
if OpenDialog2.Execute then begin
Memo1.Lines.LoadFromFile(OpenDialog2.FileName);
end;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
var
  L : TStringList;
begin
  L := TStringList.Create;
  ExtractStrings([' '], [], PChar(Memo1.Text), L);
  Edit1.Text := IntToStr(L.Count);
  L.Free;
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.02.2014, 19:42
Ответы с готовыми решениями:

Rand() в процентном соотношении
Добрый день. У меня есть две строчки, в будущем не исключено что будет больше. так вот я хотел...

Как отобразить в процентном соотношении
как подсчитать количество оценок определённого балла в процентном соотношении как на рисунке ? ...

Идентичность слов в процентном соотношении
Как можно проверить два слова на идентичность?? на совпадение их символов, процентов на 60..?

Инициализация массива 0 и 1 в процентном соотношении
Доброго времени суток! Прошу помощи, самому ничего в голову не приходит, нагуглить ничего не...

23
600 / 548 / 210
Регистрация: 24.01.2012
Сообщений: 1,348
08.02.2014, 21:16 2
Лучший ответ Сообщение было отмечено Keitlin16 как решение

Решение

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
var C:Char;
a:array[#0..#255] of Integer;
S:string;
I,j:Integer;
X:Extended;
begin
  for C:=#0 to #255 do A[c]:=0;
  x:=0;
  for i:=0 to Memo1.Lines.Count-1 Do Begin
    S:=Memo1.Lines.Strings[i];
    For J:=1 to Length(S) do a[s[j]]:=a[s[j]]+1;
    x:=x+Length(s);
  end;
  Memo2.Lines.Clear;
  for C:=#0 to #255 do if A[c]>0 then Memo2.Lines.Add('Символ "'+C+'"->'+IntToStr(a[c])+' раз; ->'+FloatToStr(a[c]*100/x)+' %');
end;
1
1 / 1 / 0
Регистрация: 12.01.2013
Сообщений: 83
08.02.2014, 22:30  [ТС] 3
спасибо но мне надо только что бы украинский алфавит, буква большая и маленькая это одно и тоже и нужен апостроф больше ничего
0
600 / 548 / 210
Регистрация: 24.01.2012
Сообщений: 1,348
08.02.2014, 22:48 4
Лучший ответ Сообщение было отмечено Keitlin16 как решение

Решение

Тогда 13 строчку нужно убрать, между 15й и 16й вставить
Pascal
1
For c:=#0 to #255 Do If c in['А'..'я','''','І','і','Ї','ї','Є','є'] Then X:=X+a[c];
и 16 строку изменить
Pascal
1
for C:=#0 to #255 do if (A[c]>0) and (c in['А'..'я','''','І','і','Ї','ї','Є','є']) then Memo2.Lines.Add('Символ "'+C+'"->'+IntToStr(a[c])+' раз; ->'+FloatToStr(a[c]*100/x)+' %');
1
1 / 1 / 0
Регистрация: 12.01.2013
Сообщений: 83
08.02.2014, 23:22  [ТС] 5
Спасибо большое )
а можно еще вопрос мне их надо еще разукрасить там а в красный, б в желтый не скажете как можно сделать ?
0
600 / 548 / 210
Регистрация: 24.01.2012
Сообщений: 1,348
09.02.2014, 00:30 6
Как раскрасить memo я не знаю. Но знаю, как раскрасить StringGrid, правда код увеличится.
Delphi
1
2
3
4
5
6
7
8
9
10
11
  StringGrid1.Cells[0,0]:='Символ';
  StringGrid1.Cells[1,0]:='Повторы';
  StringGrid1.Cells[2,0]:='% повторов';
  i:=0;
  for C:=#0 to #255 do if (A[c]>0) and (c in['А'..'я','''','І','і','Ї','ї','Є','є']) then Begin
    Inc(i);
    StringGrid1.RowCount:=I+1;
    StringGrid1.Cells[0,i]:=C;
    StringGrid1.Cells[1,i]:=IntToStr(a[c]);
    StringGrid1.Cells[2,i]:=FloatToStr(a[c]*100/x);
  end;
Это нужно вставить вместо строки , в которой заполняется listbox А на событие ondrawcell нужно вставить следующий код
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if StringGrid1.Cells[ACol,Arow]='а' then StringGrid1.Canvas.Font.Color:=clRed;
 if StringGrid1.Cells[ACol,Arow]='б' then StringGrid1.Canvas.Font.Color:=clGreen;
 if StringGrid1.Cells[ACol,Arow]='в' then StringGrid1.Canvas.Font.Color:=clLime;
 if StringGrid1.Cells[ACol,Arow]='г' then StringGrid1.Canvas.Font.Color:=clTeal;
 StringGrid1.Canvas.TextRect(Rect,Rect.Left+3,Rect.Top+2,StringGrid1.Cells[Acol,Arow]);
 StringGrid1.Canvas.Font.Color:=clBlack;
end;
я для примера сделал раскраску для первых 4х букв Аналогично нужно для каждой буквы сделать.
1
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
09.02.2014, 00:32 7
Цитата Сообщение от edukra Посмотреть сообщение
Как раскрасить memo я не знаю
Никак. Только RichEdit можно раскрасить.
0
angstrom
09.02.2014, 00:39 8
Цитата Сообщение от northener Посмотреть сообщение
Никак
Можно, но геморроя не оберёшься.
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
09.02.2014, 01:55 9
Цитата Сообщение от angstrom Посмотреть сообщение
Можно, но геморроя не оберёшься.
Насчёт геморроя ты прав. Но только насчет геморроя. Насчет можно правильнее было бы написать можно попробовать - вдруг что-то получится
0
angstrom
09.02.2014, 02:32 10
Цитата Сообщение от northener Посмотреть сообщение
вдруг что-то получится
Получится, но как уже сказано выше...
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
09.02.2014, 02:43 11
Цитата Сообщение от angstrom Посмотреть сообщение
Получится, но как уже сказано выше...
Ну не получится ничего, кроме того что "уже сказано выше...". Т.е. геморроя.
1
1 / 1 / 0
Регистрация: 12.01.2013
Сообщений: 83
09.02.2014, 14:33  [ТС] 12
нет мне надо именно в тексте разукрасить там только первые 50 символов
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
09.02.2014, 15:07 13
Цитата Сообщение от Keitlin16 Посмотреть сообщение
нет мне надо именно в тексте разукрасить
А что такое текст?
1
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
09.02.2014, 15:20 14
Цитата Сообщение от Keitlin16 Посмотреть сообщение
в тексте разукрасить там только первые 50 символов
используйте TRichEdit, там все намного проще
1
1 / 1 / 0
Регистрация: 12.01.2013
Сообщений: 83
09.02.2014, 18:24  [ТС] 15
В тексте это в самом мемо мне их раскрасить надо
0
пофигист широкого профиля
4733 / 3167 / 859
Регистрация: 15.07.2013
Сообщений: 18,252
09.02.2014, 18:41 16
Цитата Сообщение от Keitlin16 Посмотреть сообщение
В тексте это в самом мемо мне их раскрасить надо
Сам мемо этого не умеет. Замени мемо на ричэдит.
0
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
09.02.2014, 19:05 17
Цитата Сообщение от Keitlin16 Посмотреть сообщение
в самом мемо
если TRichEdit не устраивает, то вот так, можно попробовать
1
1 / 1 / 0
Регистрация: 12.01.2013
Сообщений: 83
09.02.2014, 21:42  [ТС] 18
а не подскажете как это с ричэдитом сделать ?

Добавлено через 1 час 58 минут
ну я сделала что то такого но оно не закрашивает
Delphi
1
2
3
4
5
var s: string;
 
begin
 if pos('П', s)>0  then RichEdit2.SelAttributes.Color:=clRed
 end;
0
600 / 548 / 210
Регистрация: 24.01.2012
Сообщений: 1,348
10.02.2014, 08:21 19
Delphi
1
2
3
RichEdit2.SelStart:=RichEdit1.FindText('П',0,Length(RichEdit2.text),[stMatchCase]);
RichEdit2.SelLength:=1;
RichEdit2.SelAttributes.Color:=clRed;
1
1 / 1 / 0
Регистрация: 12.01.2013
Сообщений: 83
10.02.2014, 09:51  [ТС] 20
оно закрашивает только первую букву в тексте а последующие нет
0
10.02.2014, 09:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.02.2014, 09:51
Помогаю со студенческими работами здесь

Как отразить результат выполнения плана по договору в процентном соотношении?
Ребята, доброго времени суток. Помогите, пожалуйста вспомнить: "как отразить результат выполнения...

Система тестирования качества образования в ВУЗе, с последующим выводом результатов в процентном соотношении
Добрый день! Нужна помощь. Нужно сделать что-бы после прохождения тестов результаты ответов...

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

Сделать так, чтобы атомы в этой программе перемешивались в определённом процентном соотношении?
Доброе утро! Как сделать так, чтобы атомы в этой программе перемешивались в определённом...


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

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