|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
18.06.2009, 13:36 | #1 |
Пользователь
Регистрация: 18.06.2009
Сообщений: 10
|
Просьба объяснения выделенных строк кода проги...
Всем привет
Задачка вот такая: Дан файл, который содержит текст на русском языке и некоторые два слова (их можно задавать). Определить, сколько раз они встречаются в тексте и сколько из них – непосредственно друг за другом. Код программы мне частично понятен, но преподаватель прикапывается очень строго . В конце на всякий случай вставил скрин проги в Дельфи Прошу помочь, пожалуйста, с объяснением выделенного фрагмента. Особенно те, что красным цветом Вот код: ---------------------------------------------------------- unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; OpenDialog1: TOpenDialog; Memo1: TMemo; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var f: textfile; str,edit: string; slovo1,slovo2: string; count, count1, count2,i: integer; slova: array of string; begin slovo1:=edit1.Text; slovo2:=Edit2.Text; //Открываем опендиалог, чтобы выбрать нужный нам путь к файлу if OpenDialog1.Execute then begin //Открываем файл assignfile (f, OpenDialog1.FileName); reset(f); //Считываем с него информацию в переменную str while not Eof(F) do begin readln(f,edit); str:=str+' '+edit; end; CloseFile(F); edit:=''; //Посимвольно считываем строку for i:=1 to length(str)-1 do begin //убираем все знаки препинания и лишние пробелы if (str[i] <>'.') and (str[i]<>'!') and (str[i]<>',') and (str[i]<>'"') and (str[i]<>'-') and (str[i]+str[i+1]<>' ') then edit:=edit+str[i]; end; Memo1.Clear; count:=1; //Заносим все слова в массив while (pos(' ',edit)>0) do begin SetLength(slova,count); slova[count-1]:=copy(edit,1,pos(' ',edit)-1); Delete(edit,1,pos(' ',edit)); count:=count+1; end; slova[count-1]:=edit; count1:=0; //количество 1 слова count2:=0; //количество 2 слова count:=0; //количество следю за друг другом for i:=0 to High(slova) do begin if slovo1=slova[i] then count1:= count1+1; if slovo2=slova[i] then count2:= count2+1; if ((slovo1=slova[i]) and (slovo2=slova[i+1])) or ((slovo2=slova[i]) and (slovo1=slova[i+1])) then count:=count+1; end; Memo1.Clear; Memo1.Text:=str; Label1.Caption:=slovo1+': '+ IntToStr(count1)+' '+slovo2+': '+ IntToStr(count2)+' След. друг за другом: '+IntToStr(count); end; end; end. |
18.06.2009, 13:53 | #2 |
Пользователь
Регистрация: 16.06.2009
Сообщений: 47
|
Код:
|
18.06.2009, 14:27 | #3 |
Пользователь
Регистрация: 18.06.2009
Сообщений: 10
|
for i:=1 to length(str)-1 do
А почему там -1 а не просто 1? что значит -1, в строке ? как такое может быть? |
18.06.2009, 16:44 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Может потому что автор сего писания стратегию заранее не продумал. Или недоотладил.
I'm learning to live...
|
19.06.2009, 07:00 | #5 |
Пользователь
Регистрация: 18.06.2009
Сообщений: 10
|
Нет -1 должна быть, исходя из условия...где идет подсчет.
|
19.06.2009, 07:00 | #6 |
Пользователь
Регистрация: 18.06.2009
Сообщений: 10
|
Вопрос на миллион ммм?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как запустить приложение через список выделенных файлов | simpolmix | Общие вопросы Delphi | 3 | 07.05.2009 23:14 |
Текстовый редактор для открытия всех файлов в выделенных папках, подпапках. | Alar | Софт | 5 | 20.01.2009 16:25 |
Как получить имена нескольких файлов выделенных в OpenDialog | Comer_Jus | Общие вопросы Delphi | 2 | 26.05.2008 19:47 |