Помогите с выводом !

Общие вопросы программирования, алгоритмы и т.п.

Модератор: Модераторы

Помогите с выводом !

Сообщение Klin » 10.12.2010 22:59:11

Задание такое: Найти самое длинное предложение в текстовом файле.
Текст отыскания работает, но результат просто не выдает ?
unit Unit2;

{$mode objfpc}{$H+}

interface

uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
ExtCtrls,unit4,unit3,unit5, StdCtrls, Menus, ComCtrls, EditBtn;

type

{ TForm2 }

TForm2 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Image1: TImage;
Label1: TLabel;
Label2: TLabel;
MainMenu1: TMainMenu;
Memo1: TMemo;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem;
MenuItem4: TMenuItem;
MenuItem5: TMenuItem;
OpenDialog1: TOpenDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure MenuItem1Click(Sender: TObject);
procedure MenuItem2Click(Sender: TObject);
procedure MenuItem3Click(Sender: TObject);
procedure MenuItem4Click(Sender: TObject);
procedure MenuItem5Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;

var
Form2: TForm2;
lang: integer;
implementation

{ TForm2 }

procedure TForm2.MenuItem1Click(Sender: TObject);
begin

end;

procedure TForm2.MenuItem2Click(Sender: TObject);
begin
form3.show;
end;

procedure TForm2.MenuItem3Click(Sender: TObject);
begin
form4.show;
end;

procedure TForm2.MenuItem4Click(Sender: TObject);
begin
lang:=0;
menuitem1.caption:='язык';
menuitem2.caption:='о программе';
menuitem3.caption:='об авторе';
menuitem4.caption:='рус.';
menuitem5.caption:='англ.';
form2.label1.caption:='укажите путь к файлу';
form2.label2.caption:='самое длинное предложение';

button1.caption:='найти';
button3.caption:='выход';
form4.label2.caption:='ВМ-21';
form4.label1.caption:='Зайцев Виктор';
form2.caption:='главная';
form4.caption:='об авторе';
form3.caption:='о программе';
form5.caption:='Протокол';
form3.label1.caption:='Программа номер 2';
form3.label2.caption:='в текстовом файле';
form3.label3.caption:='найти самое длинное предложение';

end;

procedure TForm2.MenuItem5Click(Sender: TObject);
begin
lang:=1;
menuitem1.caption:='Language';
menuitem2.caption:='About program';
menuitem3.caption:='About author';
menuitem4.caption:='rus.';
menuitem5.caption:='angl.';
form2.label1.caption:='indicate way to file';
form2.label2.caption:='the most long word';

button1.caption:='find';
button3.caption:='exit';
form4.label2.caption:='VM-21';
form4.label1.caption:='Zaitcev Victor';
form2.caption:='main';
form4.caption:='about avtor';
form3.caption:='about program';
form5.caption:='protocol';
form3.label1.caption:='Program number 2';
form3.label2.caption:='in text file';
form3.label3.caption:='find the most long word';

end;

procedure TForm2.Button3Click(Sender: TObject);
begin
form2.hide;
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
form5.show;
end;

procedure TForm2.Button1Click(Sender: TObject);
const zn=['.','?','!'];{символы конца предложения}

var
name2,s,s1:string;
i,len,max:byte;
f:textfile;
begin
if opendialog1.execute then
begin
name2:=OpenDialog1.FileName;
AssignFile(f,name2);
reset(f);

form5.memo1.append('Программа работает с файлом '+name2);
form5.memo1.append('Программа открыла файл '+datetostr(date)+' '+timetostr(time));


max:=0;{максимальная длина предложения}
len:=0;{длина очередного предложения}
s1:='';
i:=1;

while i<=length(s) do
begin
if s[i] in zn then{если конец предложения}
begin
s1:=copy(s,1,i);{запоминеам его}
len:=i-1;{его длина без последнего знака}
delete(s,1,i);{удаляем его}
if len>max then{если длина больше предыдущего макс}
begin


end;
i:=i+1;{к следующему символу}
end
else i:=i+1;{если не конец предложения, то просто к следующему}
end;


memo1.text:=('Самое длинное предложение: '+s1);

form5.memo1.append('самая длинное предложение:');
form5.memo1.append(s1);
form5.memo1.append('Программа закрыла файл '+datetostr(date)+' '+timetostr(time));
Edit1.ReadOnly:=true;
{ memo1.lines.add(mas1[i]);}
CloseFile(f)

end;
end;


initialization
{$I unit2.lrs}

end.
Klin
незнакомец
 
Сообщения: 3
Зарегистрирован: 10.12.2010 22:50:53

Re: Помогите с выводом !

Сообщение Nik » 10.12.2010 23:13:25

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


Код: Выделить всё
var
lst: TStringList;
max: string = '';

...
lst:=TStringList.Create;

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

for i:=0 to lst.Count-1 do
begin
  if Length(lst[i])>Length(max) then max:=lst[i];
end;

Label1.Caption:=max;


Не самый оптимальный вариант, но должен работать (писал, не проверяя).
Последний раз редактировалось Nik 10.12.2010 23:18:33, всего редактировалось 1 раз.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Помогите с выводом !

Сообщение Klin » 10.12.2010 23:18:27

На lst ругается как незаконное выражение ?
Klin
незнакомец
 
Сообщения: 3
Зарегистрирован: 10.12.2010 22:50:53

Re: Помогите с выводом !

Сообщение Nik » 10.12.2010 23:20:50

Klin писал(а):На lst ругается как незаконное выражение ?

Можно точное сообщение об ошибке? Если в usue есть модуль Classes, проблем быть не должно.
Аватара пользователя
Nik
энтузиаст
 
Сообщения: 573
Зарегистрирован: 04.02.2006 00:08:09
Откуда: Киров

Re: Помогите с выводом !

Сообщение Klin » 10.12.2010 23:27:39

i нужно как то задавать ?
Klin
незнакомец
 
Сообщения: 3
Зарегистрирован: 10.12.2010 22:50:53

Re: Помогите с выводом !

Сообщение VirtUX » 10.12.2010 23:34:50

Код: Выделить всё
var
i: integer;
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Помогите с выводом !

Сообщение v-t-l » 11.12.2010 21:15:53

Klin писал(а):На lst ругается как незаконное выражение ?
Если мне не изменяет память, то lst - dos-pascalевское название файла-устройства принтера. Наверно, осталось зарезервированным.
Просто переименуй переменную в lst1, например.
v-t-l
энтузиаст
 
Сообщения: 733
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Помогите с выводом !

Сообщение Mr.Smart » 11.12.2010 21:50:33

v-t-l ничего подобного :wink:
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!


Вернуться в Общее

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

Рейтинг@Mail.ru