• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Работа с текстовым файлом, Pascal

  • Автор темы Автор темы kulisk
  • Дата начала Дата начала

kulisk

Новые
Регистрация
15 Дек 2010
Сообщения
18
Реакции
0
Баллы
0
Работа с текстовым файлом, Pascal

Здравствуйте! Помогите пожалуйста дописать программу на Паскале. Вот условие: дан текстовы файл. Напечатать в алфавитном порядке все слова из данного файла, имеющие заданную длину n.
Код:
uses crt;
var
 f1:text;
 nam:string; {имя файла}
 mass:array[1..200] of string; {массив слов длиной n}
 n:integer; {длина слова}
 k:integer; {количество слов длиной n}
 i,j:integer;
 st:string; 
begin
 clrscr;
 write('Введите имя файла: ');
 readln(nam);
 assign(f1,nam); 
 rewrite(f1);
 writeln('Введите текст для записи в файл:');
 readln(st);
 writeln(f1,st);
 write('Введите длину слова n: ');
 k:=0;
 readln(n);
 writeln('Содержимое файла');
 reset(f1);
Подскажите пожалуйста как дальше текст из файла разделить на слова?
 
Знаете, пожалуй я не буду дописывать Вашу программу, а просто предложу своё решение, а уж Вы думайте дальше. Дело в том, что значительную часть Вашего кода занимает заполнение файла, чего, как мне кажется, делать вовсе не нужно: файл должен быть подготовлен заранее, например, в каком-либо текстовом редакторе. И уж вовсе ни к чему выводить полное содержимое файла на экран.
Два замечания:
1. Имя и адрес файла в программе можете, естественно, поставить свои.
2. Текст в файле должен быть написан в одном регистре, например, только строчными буквами (или только прописными). Упорядочивать по алфавиту с учетом регистра - это вовсе убийство.
Код:
Const
 Smb=[' ',',','.','?','!',':',';','"','(',')','-'];
VAR
 S:String;
 W,W1:Array[1..1000] of String;
 i,j,i1,i2,leng:Byte;
 N,K:Word;
 b:Boolean;
 f:Text;

BEGIN
 Assign(f, 'D:\fff.txt');
 ReSet(f);
 N:=0;
 REPEAT
  ReadLn(f,S);
  i:=0;
  Repeat
   b:=false;
   Repeat
    Inc(i);
   Until (Not (S[i] in Smb)) or (i=Length(S));
   If i<Length(S) then
    begin
     i1:=i;
     While (Not (S[i] in Smb)) and (i<Length(S)) do
      begin
       Inc(i);
       b:=true;
       i2:=i;
      end;
     If b then
      begin
       Inc(N);
       W[N]:=Copy(S,i1,i2-i1);
      end;
    end;
  Until i=Length(S);
 UNTIL EoF(f);
 Close(f);
 Write('The length of the word = ');
 Readln(leng);
 K:=0;
 For i:=1 to N do
  If Length(W[i])=leng then
   begin
    Inc(K);
    W1[K]:=W[i];
   end;
 { Alphabet ordering }
 For i:=1 to K do
  For j:=1 to K-i do
   If Ord(W1[j][1])>Ord(W1[j+1][1]) then
    begin
     S:=W1[j];
     W1[j]:=W1[j+1];
     W1[j+1]:=S;
    end;
 For i:=1 to K do
  Write(W1[i]+' ');
 ReadLn;
END.
 
Назад
Сверху