Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 09.09.2020
Сообщений: 11

Переписать текст из исходного файла в новый файл, удалив слова, в которых нет идущих подряд согласных букв

09.09.2020, 20:20. Показов 1343. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите , пожалуйста. программа написана, но работает некорректно. Программа работает верно, если в тексте всего 1 строка. Когда ввожу 2 или более строк, то программа выдает неверный ответ. Может кто-то сможет подсказать ошибку. Заранее большое спасибо.


Файл input.dat содержит несколько строк текста. Слова в тексте могут
разделяться пробелами и знаками препинания. Переписать текст в файл
output.dat, удалив слова, в которых нет ни одной пары подряд идущих
согласных букв.
Пример: ппривет я студдент----> ппривет студдент.


Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const
 letters= ['й','ц','к','н','г','ш','щ','з','ф','в','х',
                     'п','р','л','д','ж','ч','с','м','т','б',
                     'Й','Ц','К','Н','Г','Ш','Щ','З','Х','Ф','В',
                     'П','Р','Л','Д','Ж','Ч','С','М','Т','Б',
                     
                     
                     'Q','W','R','T','P','S','D','F','G','H','J',
                     'K','L','Z','X','C','V','B','N','M',
                     'q','w','r','t','p','s','d','f','g','h','j',
                     'k','l','z','x','c','v','b','n','m'];
  punc = ['.', ',', ' ', '-', ';', ':', '?'];
var
  f1, f2: text;
  word, str: string;
 i, n: integer;
 
 
function check_word(word: string): boolean;
begin
  for var i := 1 to length(word) - 1 do
  begin
    if(word[i] = word[i + 1])and (word[i] in letters) then
    begin
      check_word := true;
      break;
    end
    else check_word := false;
  end;
end;
 
function find_word(s: string; i: integer): string;
var
  word: string;
begin
  while (i <= length(s)) and (not (s[i] in punc)) do
  begin
    word := word + s[i];
    i := i + 1;
  end;
  find_word := word + ' ';
end;
 
 Begin
   
    Assign(f1, 'input.dat');
    Rewrite(f1);
        writeln('Введите количество строк');
   Readln(n); 
   for i:=1 to n do
    begin
    readln(str); 
    writeln(f1,str); 
    end;
    close(f1); 
    Reset(f1); 
    Assign(f2,'output.dat'); 
    Rewrite(f2); 
    
     While not eof(f1) do
     Begin
     Readln(f1,str);
     while (i <= length(str)) do
  begin
    word := find_word(str, i);
    i := i + length(word) - 1;
    if (check_word(word) = false) then
    begin
      for var j := 1 to length(word) do
       delete(word,i-j,j+1);       
    end
    else
     Write(f2,word);
      i := i+1;;
      
     End
     end;
     
     close(f1); 
     close(f2);
     Writeln;
     Writeln('Второй файл содержит строки:');
     Reset(f2); 
     While not eof(f2) do 
     Begin
     Readln(f2,str);
     Writeln(str); 
     End;
    End.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.09.2020, 20:20
Ответы с готовыми решениями:

Файл input.dat содержит несколько строк текста
Файл input.dat содержит несколько строк текста. Слова в тексте могут разделяться пробелами и знаками препинания. Переписать текст в файл...

В тексте все слова разделены пробелами и знаками препинания
В тексте все слова разделены пробелами и знаками препинания. Для каждого из слов указать, сколько раз оно встречается среди всех...

Сформировать несколько новых строк, поместив в каждую слова исходной строки со знаками препинания вплоть до точки
вот задание: Из входного потока вводится произвольное число строк, состоящих из последовательности слов, разделенных одним или несколькими...

9
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
10.09.2020, 09:18
Pol3456, при удалении слова идущий за ним знак препинания удалять?
0
0 / 0 / 0
Регистрация: 09.09.2020
Сообщений: 11
10.09.2020, 09:23  [ТС]
ProMix0, без разницы. Можно удалять,можно нет.
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
10.09.2020, 09:52
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function ContainTwoConsonant(self: string): boolean; extensionmethod;
begin
  var consonants := 'цкнгшщзхъфвпрлджчсмтьб'.ToCharArray;
  //var vowels:='ёуеыаоэяию'.ToCharArray;
  for var i := 1 to self.Length - 2 do
    if consonants.Contains(self[i]) and consonants.Contains(self[i+1 ]) then
    begin
      result := true;
      exit;
    end;
end;
 
begin
  ReadAllLines('FileName').Select(line->line.ToWords.Where(s -> s.ContainTwoConsonant).JoinToString(' ')).WriteLines('FileName');
end.
1
0 / 0 / 0
Регистрация: 09.09.2020
Сообщений: 11
10.09.2020, 13:59  [ТС]
ProMix0, спасибо за помощь, но программа запускается, но ничего не выдает, может я делаю что-то не так. были попытки что-то добавить, но все равно ничего не происходит.
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
10.09.2020, 14:06
Pol3456, ты не забыл указать свои имена файлов?

Pascal
1
  ReadAllLines('input.dat').Select(line->line.ToWords.Where(s -> s.ContainTwoConsonant).JoinToString(' ')).WriteLines('output.dat');
если всё верно, то программа из файла input.dat создаёт output.dat

ну и вот тебе пример файла input.dat (может быть, у тебя кодировка не та!
input.dat.zip
0
0 / 0 / 0
Регистрация: 09.09.2020
Сообщений: 11
10.09.2020, 14:33  [ТС]
mr-Crocodile, В том то и дело, что имена файлов верные и кодировка тоже, но все равно ничего. Спасибо, что попытались помочь.

Добавлено через 12 минут
Может кто-нибудь сможет объяснить мне, почему моя программа(есть выше , где описывается задание) работает некорректно? где ошибка? всю голову сломал. заранее спасибо.
0
80 / 33 / 10
Регистрация: 14.06.2019
Сообщений: 516
10.09.2020, 14:36
Цитата Сообщение от Pol3456 Посмотреть сообщение
где ошибка?
Так вы отладку запустите
0
 Аватар для mr-Crocodile
3053 / 1672 / 657
Регистрация: 19.03.2019
Сообщений: 5,380
10.09.2020, 16:00
Лучший ответ Сообщение было отмечено Pol3456 как решение

Решение

Цитата Сообщение от Pol3456 Посмотреть сообщение
но все равно ничего.
что значит - "ничего"? выходной файл появляется рядом с программой или нет?!

Добавлено через 25 минут
Цитата Сообщение от Pol3456 Посмотреть сообщение
Может кто-нибудь сможет объяснить мне, почему моя программа(есть выше , где описывается задание) работает некорректно? где ошибка? всю голову сломал. заранее спасибо.
там было много ошибок. начиная от имён переменных и заканчивая тем, что ты забываешь иницилизировать переменные перед использованием. Ну и плюс ошибка в логике проверки.

почистил.
получилось такое
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
const
  letters = ['й', 'ц', 'к', 'н', 'г', 'ш', 'щ', 'з', 'ф', 'в', 'х',
  'п', 'р', 'л', 'д', 'ж', 'ч', 'с', 'м', 'т', 'б',
  'Й', 'Ц', 'К', 'Н', 'Г', 'Ш', 'Щ', 'З', 'Х', 'Ф', 'В',
  'П', 'Р', 'Л', 'Д', 'Ж', 'Ч', 'С', 'М', 'Т', 'Б',
  
  
  'Q', 'W', 'R', 'T', 'P', 'S', 'D', 'F', 'G', 'H', 'J',
  'K', 'L', 'Z', 'X', 'C', 'V', 'B', 'N', 'M',
  'q', 'w', 'r', 't', 'p', 's', 'd', 'f', 'g', 'h', 'j',
  'k', 'l', 'z', 'x', 'c', 'v', 'b', 'n', 'm'];
  punc = ['.', ',', ' ', '-', ';', ':', '?'];
 
 
function check_word_has_duplicates(OneWord: string): boolean;
begin
  check_word_has_duplicates := false;
  for var i := 1 to length(OneWord) - 1 do
  begin
    if (OneWord[i] in letters) and (OneWord[i + 1] in letters) then
    begin
      check_word_has_duplicates := true;
      break
    end
  end;
end;
 
function find_word(s: string; i: integer): string;
var
  OneWord: string;
begin
  OneWord := '';
  while (i <= length(s)) and (not (s[i] in punc)) do
  begin
    OneWord := OneWord + s[i];
    i := i + 1;
  end;
  find_word := OneWord + ' ';
end;
 
var
  f1, f2: text;
  OneWord, CurStr: string;
  i, n: integer;
 
begin
  Assign(f1, 'input.dat');
  Reset(f1); 
  Assign(f2, 'output.dat'); 
  Rewrite(f2); 
  
  while not eof(f1) do
  begin
    Readln(f1, CurStr);
    i := 1;
    while (i <= length(CurStr)) do
    begin
      OneWord := find_word(CurStr, i);
      writeLn('word = ', OneWord);
      i := i + length(OneWord);
      if check_word_has_duplicates(OneWord) then Write(f2, OneWord);
    end
  end;
  
  close(f1); 
  close(f2);
  Writeln;
  Writeln('Второй файл содержит строки:');
  Reset(f2); 
  while not eof(f2) do 
  begin
    Readln(f2, CurStr);
    Writeln(CurStr); 
  end;
end.
то, что ты смешал русские и английские согласные в одну кучу я менять не стал, хотя, на мой взгляд, это глупость и ошибка.
1
0 / 0 / 0
Регистрация: 09.09.2020
Сообщений: 11
10.09.2020, 16:17  [ТС]
mr-Crocodile, спасибо просто огромное! Извините за глупые ошибки. Вы очень выручили.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.09.2020, 16:17
Помогаю со студенческими работами здесь

Дан символьный файл, содержащий произвольный текст длиной более 5000 слов. Слова разделены пробелами и знаками препинания. Получить 100 наиболее часто
НАРОД срочно нужно написать на паскале : Дан символьный файл, содержащий произвольный текст длиной более 5000 слов. Слова разделены...

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

Дана строка, в которой содержится осмысленное текстовое сообщение. Слова сообщения разделяются пробелами и знаками препинания
Вывести только те слова сообщения, в которых содержится заданная подстрока.

Записать все слова строки (вместе со знаками препинания) в массив строк
Записать все слова строки (вместе со знаками препинания) в массив строк { Печать текста по строкам } program stroki; var t:string; ...

Переписать текст в файл, удалив из него слова, окруженные с обеих сторон одинаковыми знаками препинания
Помогите пожалуйста решить задачу Файл input.dat содержит несколько строк текста. Слова в тексте могут разделяться пробелами и знаками...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru