Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.01.2013, 13:41   #1
neytron007
Пользователь
 
Регистрация: 05.10.2012
Сообщений: 15
По умолчанию Посчитать сколько слов в текст.файле содержат 1,2,3..буквы (при работе зависает).Delphi.

Надо прочитать текстовый файл и на отдельной форме вывести количество слов, содержащих 1,2,3,4..и т.д. символов. Код есть, но при запуске, после нажатия на кнопку "Посчитать слова" программа намертво зависает и форма2 не выводится. Форма2 есть, там лишь label-ам 1-7 присваиваются значения а1-а6 и а. Помогите найти ошибку.

Код:
unit Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Lib, Unit2;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  f: TextFile;
  a,a1,a2,a3,a4,a5,a6: Integer;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
  memo1.Lines.LoadFromFile('1.txt');
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  j,i,n,m: Integer;
begin
  AssignFile(f,'1.txt');
  Reset(f);
  a1:=0;
  a2:=0;
  a3:=0;
  a4:=0;
  a5:=0;
  a6:=0;
  a:=0;
  while not Eof(f) do
  begin
    Read(f,s);
    s:=' '+s+' ';
                     //j:=Length(s);
                     //for i:=1 to j do
                     //case s[i] of
                       //'.',',','!','?',';',':': Delete(s,i,1);        <--можно ли так символы исключить?
                     //end;
    i:=1;
    while i<=length(s) do               {пока не конец строки}
    begin
      while (s[i] = ' ') and (i<=length(s)) do
        inc(i);
      m:=i;                              {запоминаем начало слова}
      while (s[i] <> ' ') and (i<=length(s)) do
        inc(i);
      n:=i;                              {запоминаем конец слова}

      case Length(copy(s,m,n-m)) of
        1: Inc(a1);
        2: Inc(a2);
        3: Inc(a3);
        4: Inc(a4);
        5: Inc(a5);
        6: Inc(a6);
      else Inc(a);
      end;
    end;
  end;
  CloseFile(f);
  Form2.Show;
end;

end.
neytron007 вне форума Ответить с цитированием
Старый 03.01.2013, 14:31   #2
genaveng
 
Аватар для genaveng
 
Регистрация: 03.01.2013
Сообщений: 9
По умолчанию

(1) 03.01.2013 14:31 от genaveng
Попробуй просто для каждой сточки файла посчитать количество пробелов и " , после которых стоит буква.

(2) 03.01.2013 14:33 от genaveng
Извини, не так задание понял))))




_____________________________
Форум - не чат!
Не надо плодить подряд несколько коротких сообщений!
Это нарушение правил...
для того, чтобы через минуту/другую дописать сообщение,
не надо создавать ещё один новый пост.
нажимайте на предыдущем кнопку "Правка"
и дописывайте в своё сообщение, что Вы хотели добавить!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 03.01.2013 в 15:05.
genaveng вне форума Ответить с цитированием
Старый 03.01.2013, 18:10   #3
GetMax
Форумчанин
 
Регистрация: 21.10.2010
Сообщений: 588
По умолчанию

Для использования переменных в разных формах их нужно объявить на уровне класса
Код:
TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure FormShow(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    //вот тут объявляем переменные, которые будут использоваться в другой форме
    { Public declarations }
  end;
Допустим количество слов, содержащих 1,2,3,4..и т.д. символов мы храним в массиве. Посчитаем слова
Код:
procedure TForm1.Button1Click(Sender: TObject);
Var
  s, tmp : string;
  mas : array[1..10] of Byte;
  poss, i : Byte;
begin
  s := Edit1.Text;
  s := s + ' ';
  for I := 1 to 10 do mas[i]:= 0;

  while (Length(s) > 0) do
  Begin
    poss := pos(' ',s);
    if poss <> 0 then
    Begin
      tmp := Copy(s, 1, poss-1);
      Delete(s, 1, poss);
      Inc(mas[poss-1])
    End;
  End;
End.
Тогда в массиве mas у нас будут нужные сведения. Далее во форме2 в Uses подключаем Unit1. И выводим содержание массива mas в нужной Вам форме.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил.
Для благодарностей WMR R145235935681
GetMax вне форума Ответить с цитированием
Старый 03.01.2013, 20:58   #4
neytron007
Пользователь
 
Регистрация: 05.10.2012
Сообщений: 15
По умолчанию

всё...нашел ошибку...вместо read надо readln
neytron007 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Программа : Нужно посчитать сколько раз встречается в отдельном файле данной папки вписанное слово ил Jurek Общие вопросы C/C++ 7 20.04.2014 22:12
Как определить количество слов, которые содержат ровно три буквы JegorX Паскаль, Turbo Pascal, PascalABC.NET 1 15.11.2011 15:52
Текст, сколько слов в тексте? BigBen Помощь студентам 1 13.01.2011 19:40
PHP.Как посчитать, сколько раз слово встречается в файле? Princesse Помощь студентам 0 07.12.2009 00:24
Дана строка символов до точки. Определить, сколько слов содержат ровно три буквы "К". Evidence Паскаль, Turbo Pascal, PascalABC.NET 0 01.06.2009 20:40