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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2018, 18:54   #1
faddey
 
Регистрация: 25.04.2018
Сообщений: 5
Сообщение (Pascal) Дан файл, содержащий текст на английском языке.

Дан файл, содержащий текст на английском языке. Определить сколько раз встречается в нём слова длиной в самое короткое слово.

Программа готовая, только помогите определить за что отвечает вот операция? Для чего нужна? Именно в данном случае
Строка 43 и 84
Код:
Delete(s,1,Pos(' ', s));
Сама программа:
Код:
uses Crt;
var s,s1, res : string;
    k : integer;
    f : text;
begin
 ClrScr;
 Assign(f, '1.txt');
 {$I-}
 Reset(f);
 {$I+}
 if (IOResult <> 0) then
 Begin
  writeln('Ошибка');
  exit;
 end;
 res:='';
 While not Eof(f) do 
 begin
  Readln(f, s);
  While Pos('  ',s)>0 do
   Delete(s,Pos('  ',s),1);
  While Pos('.',s)>0 do
   Delete(s,Pos('.',s),1);
  While Pos(',',s)>0 do 
   Delete(s,Pos(',',s),1);
  if s[1]=' ' then 
   Delete(s,1,1);
  if s[1]='.' then
   Delete(s,1,1);
  if s[1]=',' then
   Delete(s,1,1);
  if s[Length(s)]=' ' then
   Delete(s,Length(s),1);
  if s[Length(s)]='.' then
   Delete(s,Length(s),1);
  if s[Length(s)]=',' then
   Delete(s,Length(s),1);
  While s<>'' do
  begin
   if Pos(' ',s)>0 then 
   begin
    s1:=Copy(s,1,Pos(' ',s)-1);
    Delete(s,1,Pos(' ', s));
   end
   else 
   begin
    s1:=s;
    s:='';
   end;
   if (res='') or (Length(s1)<Length(res)) then
    res:=s1;
  end;
 end;
 Close(f);
 Reset(f);
 k:=0;
 While not Eof(f) do 
 begin
  Readln(f, s);
  {Удаляем лишние пробелы}
  While Pos('  ',s)>0 do 
   Delete(s,Pos('  ',s),1);
  While Pos('.',s)>0 do
   Delete(s,Pos('.',s),1);
  While Pos(',',s)>0 do 
   Delete(s,Pos(',',s),1);
  if s[1]=' ' then 
   Delete(s,1,1);
  if s[1]='.' then
   Delete(s,1,1);
  if s[1]=',' then
   Delete(s,1,1);
  if s[Length(s)]='.' then
   Delete(s,Length(s),1);
  if s[Length(s)]=',' then
   Delete(s,Length(s),1);
  if s[Length(s)]=' ' then 
   Delete(s,Length(s),1);
  While s<>'' do 
  begin
   if Pos(' ',s)>0 then 
   begin
    s1:=Copy(s,1,Pos(' ',s)-1);
    Delete(s,1,Pos(' ',s));
   end 
   else 
   begin
    s1:=s;
    s:='';
   end;
   if s1=res then 
    Inc(k);
  end;
 end;
 Close(f);
 if res<>'' then 
  Writeln('Самое короткое слово ', res, ', встречается ',k,' раз')
 else
  Writeln('Файл не содержит слов');
end.
faddey вне форума Ответить с цитированием
Старый 09.05.2018, 18:59   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Для данной задачи (подсчёт чего-то) использование процедуры Delete() - это зашквар моветон.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.05.2018, 19:36   #3
faddey
 
Регистрация: 25.04.2018
Сообщений: 5
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Для данной задачи (подсчёт чего-то) использование процедуры Delete() - это зашквар моветон.
К чему это? Пожалуйста отвечайте по делу, код программы не мой.
faddey вне форума Ответить с цитированием
Старый 09.05.2018, 21:56   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от faddey Посмотреть сообщение
К чему это? Пожалуйста отвечайте по делу, код программы не мой.
Тебя в гугле забанили? За что?!

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 10.05.2018, 12:59   #5
faddey
 
Регистрация: 25.04.2018
Сообщений: 5
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Тебя в гугле забанили? За что?!

Я знаю как работает эта процедура, но вот её назначение именно в тех моментах мне не понятно, перечитайте в чём состоит вопрос
faddey вне форума Ответить с цитированием
Старый 10.05.2018, 13:50   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от faddey Посмотреть сообщение
но вот её назначение именно в тех моментах мне не понятно
это разбор строки на слова.
Код:
  
  While s<>'' do {пока исходная строка не стала пустой делать}
  begin
   if Pos(' ',s)>0 then {если в строке есть пробел (позиция пробела не равна нулю) тогда}
   begin
    s1:=Copy(s,1,Pos(' ',s)-1); {в переменную s1 скопировать подстроку с начала до пробела (не включая сам пробел)}
    Delete(s,1,Pos(' ', s)); {удалить из строчки подстроку от начала и до пробела (включая сам пробел}
   end
   else  {иначе (в строке нет пробела)}
   begin
    s1:=s; {в переменную s1 скопировать весь остаток строки}
    s:=''; {очистить строку}
   end;
p.s. как справедливо сказано - использовать при разборе Delete - моветон!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
(С++/С) Дан файл, содержащий текст на английском языке. faddey Помощь студентам 2 09.05.2018 18:51
Дан файл, содержащий текст на русском языке. Выяснить входит ли данное слово в указанный текст,и если да, то сколько раз. NataliaShipaeva Помощь студентам 2 28.05.2013 18:07
[c++]Дан файл, содержащий текст на русском языке. Составить в алфавитном порядке список всех слов, встречающихся в этом тексте. Jlovenpk1 Помощь студентам 0 25.01.2013 03:16
Дан файл, содержащий текст на русском языке. Figushkin Помощь студентам 1 10.06.2010 16:20
Дан файл, содержащий текст на русском языке.Составить в алфавитном порядке список слов в файл. JiLiYa Паскаль, Turbo Pascal, PascalABC.NET 3 26.12.2008 12:05