0 / 0 / 0
Регистрация: 19.01.2015
Сообщений: 2
1

Составьте список слов, которые встречаются в файле более одного раза

19.01.2015, 07:51. Показов 1729. Ответов 11
Метки нет (Все метки)

По сути задачии не сложные но все же. Если кто сделает буду очень благодарен Нашел на одном сайте код но форму под него запилить не получается. Заранее спасибо

Для указанного текстового файла составьте список слов, которые:
1. встречаются в нем более одного раза. В алфавитном порядке с частотой их повторения.
2. встречаются в нем только один раз. В алфавитном порядке.
3.самое короткое и самое длинное слово, предложение.
я уже прописал и программа находит самое короткое и самое длинное слово, а вот как прописать чтобы находил и выводил 1 и 2 задание не пойму. помогите...

Код:

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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, StdCtrls, ComCtrls, ExtCtrls;     
 
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    RichEdit1: TRichEdit;
    procedure N3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
 
 
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
function  est_2_prob(s: string): boolean;
  var i: integer;
  begin
  result:=false;
  for i:=1 to length(s)-1 do if (s[i]=' ') and (s[i+1]=' ') then result:=true;
  end;
 
procedure TForm1.N3Click(Sender: TObject);
begin
close;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
 
begin
OpenDialog1.Execute;
if opendialog1.FileName <> '' then
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
if memo1.Text<>'' then Button2.Enabled:=true else button2.Enabled:=false;
 
end;
 
procedure TForm1.Button2Click(Sender: TObject);
 
var
i,k,min :integer;
text,text1,slovo,min_slovo,max_slovo:string;
begin
 
//cчитываем текст
text:=memo1.Text;
 
//убираем лишние пробелы из этого текста
while est_2_prob(text) do
  begin
  i:=0;
  repeat
  i:=i+1;
  if (text [i] = ' ') and (text[i+1] = ' ') then delete (text, i, 1);
  until i=(length(text)-1);
  end;
 
//ситуация когда пробелы стоят в начале и конце, то удаляем их
if text[1]=' ' then delete(text,1,1);
if text[length(text)]=' ' then delete(text,length(text),1);
 
//выдали текст без лишних пробелов
richedit1.Text:=text;
 
//считем количество слов
k:=0;
text:= richedit1.Text;
for i:=1 to length(text) do
if text [i] = ' ' then k:= k+1;
richedit1.Lines.Add('колличество слов: ' + IntTostr(k+1));
 
//ищем самое короткое слово
text1:=text;
//ситуация когда слово 1, то оно и будет самым коротким
if (k+1)=1 then richedit1.Text:=richedit1.text+#13+#13+ 'Самое короткое слово: '+text1+ ' оно единственное.' else
  //если же слов больше то
  i:=0;
  repeat i:=i+1 until text[i]=' ';
  min_slovo:=copy(text1,1,i-1);
  delete(text1,1,i);
  while length(text1)<>0 do
    begin
    i:=0;
    repeat
    i:=i+1;
    until (text1[i]=' ') or (i=length(text1));
    slovo:=copy(text1,1,i-1);
    if length(slovo)<length(min_slovo) then min_slovo:=slovo;
    delete(text1,1,i);
    end;
  richedit1.Text:=richedit1.Text+#13+#13+'самое короткое слово: '+min_slovo;
 
//ищем саоме длиное слово
text1:=text;
//ситуация когда слово 1, то оно и будет самым коротким
if (k+1)=1 then richedit1.Text:=richedit1.text+#13+#13+ 'Самое длиное слово: '+text1+ ' оно единственное.' else
  //если же слов больше то
  i:=0;
  repeat i:=i+1 until text[i]=' ';
  max_slovo:=copy(text1,1,i-1);
  delete(text1,1,i);
  while length(text1)<>0 do
    begin
    i:=0;
    repeat
    i:=i+1;
    until (text1[i]=' ') or (i=length(text1));
    slovo:=copy(text1,1,i-1);
    if length(slovo)>length(max_slovo) then max_slovo:=slovo;
    delete(text1,1,i);
    end;
  richedit1.Text:=richedit1.Text+#13+#13+'самое длиное слово: '+max_slovo;
 
end;
 
end.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.01.2015, 07:51
Ответы с готовыми решениями:

Для указанного текстового файла составьте список слов, которые встречаются в нем более одного раза
Сделайте плиз Я уже не могу Для указанного текстового файла составьте список слов, которые...

Выбрать в другой список те строки, которые встречаются в исходном списке более одного раза и напечатать созданный список
это два списка..а дальше как?алгоритм какой?помогите пожалуйста using System; using...

Числа, которые встречаются более одного раза
Дан список, содержащий целые положительные числа. Вывести в одной строке числа, которые встречаются...

Вывести числа, которые встречаются более одного раза
Не могу понять одну задачку. Условие: Есть массив, заполненный случайными числами. Надо вывести...

11
Эксперт Python
4606 / 2027 / 359
Регистрация: 17.03.2012
Сообщений: 10,081
Записей в блоге: 6
19.01.2015, 15:41 2
Для разделения текста на слова есть функция Classes.Split, для подсчёта количества советую воспользоваться генериками, из Generics.Collections - TDIctionary<string, integer>.

Добавлено через 26 секунд
И, конечно, не использовать глобальные переменные.
0
840 / 735 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
19.01.2015, 16:14 3
Цитата Сообщение от dondublon Посмотреть сообщение
Для разделения текста на слова есть функция Classes.Split
Это где есть такая? В делфи-7 есть или надо уже более новую версию?

Цитата Сообщение от СТЕПАН КРУЧА Посмотреть сообщение
а вот как прописать чтобы находил и выводил 1 и 2 задание не пойму. помогите...
Цитата Сообщение от СТЕПАН КРУЧА Посмотреть сообщение
1. встречаются в нем более одного раза. В алфавитном порядке с частотой их повторения.
Цитата Сообщение от СТЕПАН КРУЧА Посмотреть сообщение
По сути задачии не сложные
Да ты прав, задания не сложные, главное что ты понял как делать, если не понял то примерно вот такому алгоритму:

Из всех слов что есть в тексте составляеш построчный виртуальный список (или два списка) затем каждое слово из первого списка по очереди в двойном цикле сравниваеш со всеми словами из второго списка привязав к переменной или масииву со счетчиком и как только счетчик превысил значение больше еденицы- это и будет означать что слово повторилось.

Цитата Сообщение от СТЕПАН КРУЧА Посмотреть сообщение
2. встречаются в нем только один раз. В алфавитном порядке.
Тоже самое что писал выше, только значение счетчика или массива счетчиков недолжно превышать единицы.
0
Эксперт Python
4606 / 2027 / 359
Регистрация: 17.03.2012
Сообщений: 10,081
Записей в блоге: 6
19.01.2015, 16:22 4
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Это где есть такая? В делфи-7 есть или надо уже более новую версию?
Прошу прощения, ExtractStrings.
Есть ещё в StrUtils, SplitString, почти такая же.
1
840 / 735 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
19.01.2015, 16:56 5
dondublon,
А у вас есть пример кода разделения текста на слова при помощи этих функций?
А то я их раньше только регуляркой делил, вот здесь пример писал и картинка там есть:

Сравнение на схожесть двух текстов
0
Эксперт Python
4606 / 2027 / 359
Регистрация: 17.03.2012
Сообщений: 10,081
Записей в блоге: 6
20.01.2015, 07:10 6
NIKOLAYY, вроде в хелпе всё написано.
Пример:
Delphi
1
2
  keys := TStringList.Create();
  ExtractStrings(['.'], [' '], aSource, keys);
0
840 / 735 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
20.01.2015, 17:39 7
Цитата Сообщение от dondublon Посмотреть сообщение
вроде в хелпе всё написано.
Где написано, на какой странице? Неработает пример. Не делит текст что в Memo1 на список слов что в листбокс хотел оформить.
0
840 / 735 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
20.01.2015, 18:37 8
Почему этот пример отработал не очень правильно в листбоксе?
Delphi
1
2
3
4
5
6
7
8
9
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  ExtractStrings([';', ',', ' '], [' '], PAnsiChar(Memo1.Text), sl);
  ListBox1.Items.Add(sl.Text);
  Memo2.Lines.Add(sl.Text);
  sl.Free;
end;
И что пишется в функции ExtractStrings в первые скобки, а что во вторые кто знает?
Миниатюры
Составьте список слов, которые встречаются в файле более одного раза  
0
5683 / 2274 / 466
Регистрация: 20.11.2009
Сообщений: 7,655
Записей в блоге: 1
20.01.2015, 19:19 9
второй аргумент - это игнорирование символа, на которое может начинаться слово
0
Эксперт Python
4606 / 2027 / 359
Регистрация: 17.03.2012
Сообщений: 10,081
Записей в блоге: 6
20.01.2015, 20:04 10
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Где написано, на какой странице?
Хелп по функции ExtractStrings.
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Неработает пример. Не делит текст что в Memo1 на список слов что в листбокс хотел оформить.
Сочувствую.
Цитата Сообщение от NIKOLAYY Посмотреть сообщение
Почему этот пример отработал не очень правильно в листбоксе?
Понятия не имею. Вы же применяете его к Memo1, а с его содержимым функция отработала нормально.

Если правда хотите получить помощь - говорите спокойнее и вежливее.
0
840 / 735 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
20.01.2015, 23:39 11
Цитата Сообщение от Arcor Посмотреть сообщение
второй аргумент - это игнорирование символа, на которое может начинаться слово
Я бы даже так сказал- это тот символ будет удален.
Пример с лист-боксом отработал так как на картинке, он не просто текст делит, но и удаляет те знаки что перечислены в перых квадратных скобках, что во вторых квадратных скобках- как я понял он удаляет перечисленные знаки из текста если они стоят вначале уже отделенного от текста слова.
Delphi
1
ExtractStrings([';', ',', '.', ' '], [' '], PAnsiChar(Memo1.Text), ListBox1.Items);
Миниатюры
Составьте список слов, которые встречаются в файле более одного раза  
0
0 / 0 / 0
Регистрация: 09.10.2015
Сообщений: 1
16.06.2016, 11:26 12
не теряя надежды...
у кого-нибудь ехешник остался??
буду очень благодарен
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2016, 11:26
Помогаю со студенческими работами здесь

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

Напечатать все элементы, которые встречаются более одного раза
ЗАДАЧА 5. Выполнить действия над массивами. В таблице при формулировании задания для разъяснения...

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

Найти символы строки, которые встречаются не более одного раза
Нужно найти символы которые встречаются не более одного раза . ввод:Символы записаны без пробелов...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru