Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 26.05.2011, 18:48   #1 (permalink)
kulisk
Member
 
Регистрация: 15.12.2010
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Работа с текстовым файлом, 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);
Подскажите пожалуйста как дальше текст из файла разделить на слова?
kulisk вне форума   Ответить с цитированием

Старый 26.05.2011, 18:48
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Обратите внимание, что на форуме есть похожие темы

Проблема с файлом
Задача на работу с файлом и строками. СИ.
Помогите с .exe файлом.
Работа с текстовым файлом
Pascal, работа с функциями.
Помогите,пожалуйста, написать программу на Pascal. Работа с массивами

Старый 26.05.2011, 22:13   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Знаете, пожалуй я не буду дописывать Вашу программу, а просто предложу своё решение, а уж Вы думайте дальше. Дело в том, что значительную часть Вашего кода занимает заполнение файла, чего, как мне кажется, делать вовсе не нужно: файл должен быть подготовлен заранее, например, в каком-либо текстовом редакторе. И уж вовсе ни к чему выводить полное содержимое файла на экран.
Два замечания:
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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 15:17.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.