Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
4 / 4 / 5
Регистрация: 06.11.2015
Сообщений: 33

Считать текст и вывести сначала вопросительные, а затем восклицательные предложения

24.12.2015, 21:32. Показов 2210. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно написать программу, которая считывает текст из файла и выводит на
экран сначала вопросительные, а затем восклицательные предложения. Помогите пожалуйста)

Добавлено через 50 минут
Вот, работает, если кому нужно:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
program y;
uses Crt;
const
znak = ['!','?'];
var
lol_file : text;
stroka : string;
k:integer;
fl:boolean;
begin
    ClrScr;
    Assign(lol_file, 'D:\lol.txt');
    reset(lol_file);
    while not Eof(lol_file) do
    begin
        fl:=false;
        ReadLn(lol_file, stroka);
        for k:=1 to length(stroka) do
        if (stroka[k] in znak)  then fl:=true;
        if fl=true then writeln(stroka);
    end;
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.12.2015, 21:32
Ответы с готовыми решениями:

Вывести из файла на экран сначала вопросительные, а затем восклицательные предложения
Написать программу, которая считывает текст из файла и выводит на экран сначала вопросительные, а затем восклицательные предложения. ...

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

Считать текст из файла и вывести сначала вопросительные, а затем восклицательные предложения
Доброго времени суток всем. Нужно написать консольную программу, которая считывает текст из файла и выводит на экран сначала...

10
39 / 39 / 49
Регистрация: 18.12.2015
Сообщений: 127
28.12.2015, 13:33
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
program y;
uses Crt;
var lol_file:text;
    stroka:string;
    k:integer;
begin
    ClrScr;
    Assign(lol_file, 'D:\lol.txt');
    reset(lol_file);
    while not Eof(lol_file) do
    begin
        ReadLn(lol_file, stroka);
        if stroka[length(stroka)]='?'
         then writeln(stroka);
    end;
    //close(lol_file);  возможно, что в ТР надо закрывать, в PABC работает и так
    reset(lol_file);
    while not Eof(lol_file) do
    begin
        ReadLn(lol_file, stroka);
        if stroka[length(stroka)]='!'
         then writeln(stroka);
    end;
    close(lol_file)
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
28.12.2015, 20:14
Обратите внимание, в условии не сказано, что в файле по одному предложению в строке. Если это не так, то код нерабочий.
0
39 / 39 / 49
Регистрация: 18.12.2015
Сообщений: 127
28.12.2015, 21:07
Цитата Сообщение от bormant Посмотреть сообщение
в условии не сказано
Да там много чего не сказано:
1. Какие разделители предложений могут использоваться (только '!','?' или и '.','...');
2. Сколько строк в файле (одна или несколько);
3. Если несколько, то может ли предложение начинаться в одной строке, а заканчиваться в другой и т.д. и т.п.
Так что для реанимации кода нужны дополнительные сведения.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
28.12.2015, 21:58
Цитата Сообщение от schoolteacher Посмотреть сообщение
1. Какие разделители предложений могут использоваться
Насколько мне известно, вопросительные предложения заканчиваются "?", восклицательные -- "!", повествовательные -- "." или "...". Знаете другие?
Цитата Сообщение от schoolteacher Посмотреть сообщение
Сколько строк в файле (одна или несколько)
Текст обычно состоит из нескольких строк, как частный случай -- из одной.
Цитата Сообщение от schoolteacher Посмотреть сообщение
может ли предложение начинаться в одной строке, а заканчиваться в другой
Не вижу никаких препятствий; вы же видели книжки внутри? Там обычно именно так и есть.

Добавлено через 2 минуты
В качестве упрощения можно считать, что любое предложение влезает в String целиком.

Добавлено через 4 минуты
Варианты "!..", "?..", "?!", "!?" и прямую речь пока можно не учитывать.
0
39 / 39 / 49
Регистрация: 18.12.2015
Сообщений: 127
29.12.2015, 21:06
Чтобы не было лишних вопросов привожу задания:
1) для program y: В каждой строке текстового файла находится одно предложение (без пробелов в начале строки), которое может оканчиваться знаком или '.' (повествовательное предложение), или '!' (восклицательное предложение), или '?' (вопросительное предложение). Написать программу, которая считывает текст из файла и выводит на экран сначала вопросительные, а затем восклицательные предложения.
2) для program vv2: В каждой строке текстового файла может находиться (целиком) одно или несколько предложений (без пробелов в начале строки), каждое из которых может оканчиваться знаком или '.' (повествовательное предложение), или '!' (восклицательное предложение), или '?' (вопросительное предложение). Предложения в строке разделяются одним пробелом. Написать программу, которая считывает текст из файла и выводит на экран сначала вопросительные, а затем восклицательные предложения.

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
program vv2;             {1624544}
const x=['.','!','?'];
var fdat,frez:text;
    s:string; c:char;
    k:integer;
begin
 cls;
 assign(fdat, 'dat2.txt'); reset(fdat);
 assign(frez, 'rez2.txt'); rewrite(frez);
 s:=''; read(fdat, c);
 while not(eof(fdat)) do
  begin
   while not(c in x) do
    begin
     s:=s+c;
     read(fdat, c);
    end;
   s:=s+c;
   writeln(frez,s);
   s:='';
   read(fdat, c);
  end;
  close(fdat); close(frez);
  assign(fdat, 'rez2.txt'); reset(fdat);
  while not(eof(fdat)) do
   begin
    readln(fdat,s);
    if s[length(s)]='?'
     then writeln(s);
   end;
  close(fdat);
  reset(fdat);
  while not(eof(fdat)) do
   begin
    readln(fdat,s);
    if s[length(s)]='!'
     then writeln(s);
   end;
 close(fdat);
end.
Извиняюсь, но заниматься остальными программами пока нет ни времени, ни желания.

Добавлено через 3 часа 7 минут
Не удержался. Работает всё, кроме '...' (но проверял только на коротких строках).

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
program vv3;            
const x=['.','!','?'];
var fdat,frez:text; i:integer;
    s:string; c:char;
begin
 cls;
 assign(fdat,'dat3.txt'); reset(fdat);
 assign(frez,'rez3.txt'); rewrite(frez);
 s:='';
 while not(eof(fdat)) do
  begin
   while not(eoln(fdat)) do
    begin
     read(fdat,c);
     if not(c in x)
      then s:=s+c
      else begin
            s:=s+c;
            while s[1]=' ' do
             delete(s,1,1);
            i:=1;
            while i<length(s) do
             begin
              if (s[i]=' ') and (s[i+1]=' ')
               then delete(s,i,1)
               else i:=i+1
             end;
            writeln(frez,s);
            s:=''
           end;
    end;
   s:=s+' ';
   readln(fdat);
  end;
  close(fdat); close(frez);
  assign(fdat, 'rez3.txt'); reset(fdat);
  while not(eof(fdat)) do
   begin
    readln(fdat,s);
    if s[length(s)]='?'
     then writeln(s);
   end;
  close(fdat);
  reset(fdat);
  while not(eof(fdat)) do
   begin
    readln(fdat,s);
    if s[length(s)]='!'
     then writeln(s);
   end;
 close(fdat);
end.
0
Эксперт Pascal/Delphi
6812 / 4568 / 4820
Регистрация: 05.06.2014
Сообщений: 22,433
30.12.2015, 09:49
Используйте тэги форматирования текста для удобства восприятия ваших сообщений другими пользователями.
https://www.cyberforum.ru/announcement.php?a=3

schoolteacher, пожалуйста, используйте тэги Паскаль.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
30.12.2015, 10:49
schoolteacher,
я б пошел таким путем:
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
const
  fin = ['.','!','?'];
  f: array [1..2] of Char = ('?','!');
var
  s, t: String;
  i, k: Integer;
begin
  Assign(input,'in.txt');
  for k:=Low(f) to High(f) do begin
    Reset(input); WriteLn(f[k],' >');
    while not SeekEOF do begin
      ReadLn(t); t:=t+#0;
      while Length(t)>1 do begin
        i:=1; while t[i]=' ' do Inc(i); Delete(t,1,i-1);
        for i:=1 to Length(t) do if t[i] in fin+[#0] then Break;
        if t[i]='.' then while t[i+1]='.' do Inc(i);
        if t[i]=#0 then Dec(i);
        s:=s+Copy(t,1,i); Delete(t,1,i);
        if s[Length(s)] in fin then begin
          if s[Length(s)]=f[k] then WriteLn(s);
          s:='';
        end else s:=s+' ';
      end;
    end;
  end;
end.
Файл in.txt:
Code
1
2
3
4
5
6
7
8
Один.
Один?
Один!
Два. Два? Два!
Начало
и конец. Начало
и конец? Начало
и конец!
Прогон:
Code
1
2
3
4
5
6
7
8
? >
Один?
Два?
Начало и конец?
! >
Один!
Два!
Начало и конец!
0
39 / 39 / 49
Регистрация: 18.12.2015
Сообщений: 127
01.01.2016, 18:41
Цитата Сообщение от ZX Spectrum-128 Посмотреть сообщение
пожалуйста, используйте тэги Паскаль.
Ok! Принял к сведению и исполнению.

Цитата Сообщение от bormant Посмотреть сообщение
я б пошел таким путем:
Хороший алгоритм для обработки (тоже использую, но в упрощенном варианте, так как работаю с начинающими).
Программа оформлена очень хорошо (компактно, читабельно, понятно).
В исходном виде запустить не удалось, пришлось адаптировать для PascalABC (работаю с этой версией, для начинающих вполне достаточно).
При тестировании были получены предполагаемые результаты.
Для оценки функциональности (насколько реализация соответствует заданию) хотелось бы увидеть задание.

Привожу задание для program vv3: В каждой строке текстового файла может находиться одно или несколько предложений с любым (разумным) количеством пробелов в начале строки, между словами и предложениями, а также в конце строки. Каждое предложение может оканчиваться знаком или '.' (повествовательное предложение), или '!' (восклицательное предложение), или '?' (вопросительное предложение). Написать программу, которая считывает текст из файла и выводит на экран сначала вопросительные, а затем восклицательные предложения.

Очень жаль, что в разделе Pascal форума нет раздела “Для начинающих”. Практически все программы этого поста можно было предложить в качестве базовых для начинающих.
В частности program y (мой вариант) – для многопроходных программ с текстовыми файлами, program vv2 – для программ с перенаправлением ввода-вывода, а также форматирования строк (например, выравнивание строк по левому краю, по центру, по правому краю, по ширине) в программах с текстовыми файлами, program vv3 – для форматирования абзацев и страниц в программах с текстовыми файлами.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
01.01.2016, 19:33
schoolteacher,
Если многоточия в конце не используются, строку 16 можно убрать.

По поводу PascalABC, могу поинтересоваться, что именно ему не понравилось, а заодно, речь про ABC или ABC.NET)?
0
39 / 39 / 49
Регистрация: 18.12.2015
Сообщений: 127
01.01.2016, 22:43
PascalABC версия 3.0.1.35 (детей реже заносит в дебри).
Программа в том виде, в котором её удалось запустить:

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
program vv4_abc;
const
  fin = ['.','!','?'];
  f: array [1..2] of Char = ('?','!');
var
  s, t: String; fdat:text; i, k: Integer;
begin  cls;
  Assign(fdat,'in2.txt');
  for k:=1 to 2 do begin
    Reset(fdat); WriteLn(f[k],' >');
    while not(EOF(fdat)) do begin
      ReadLn(fdat,t); t:=t+#0;
      while Length(t)>1 do begin
        i:=1; while t[i]=' ' do Inc(i); Delete(t,1,i-1);
        for i:=1 to Length(t) do if t[i] in fin+[#0] then Break;
        if t[i]='.' then while t[i+1]='.' do Inc(i);
        if t[i]=#0 then Dec(i);
        s:=s+Copy(t,1,i); Delete(t,1,i);
        if s[Length(s)] in fin then begin
          if s[Length(s)]=f[k] then WriteLn(s);
          s:='';
        end else s:=s+' ';
      end;
    end;
  end;
  close(fdat);
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.01.2016, 22:43
Помогаю со студенческими работами здесь

Считать текст из файла и вывести на экран сначала вопросительные, затем восклицательные предложения
Написать программу, которая считывает текс из файла и выодит на экран сначало вопросительные, затем восклицательные предложения.

Считать текст из файла, вывести на экран сначала вопросительные, а затем восклицательные предложения
Задание у меня такое - Считать текст из файла, вывести на экран сначала вопросительные, а затем восклицательные предложения. Не подскажите...

Считать текст из файла, вывести на экран сначала вопросительные, а затем восклицательные предложения
Написать программу, которая считывает текст из файла и выводит на экран сначала вопросительные предложения, а затем восклицательные...

Считать текст из файла и вывести на экран сначала вопросительные, а затем восклицательные предложения
Ребята, прошу вас, помогите пожалуйста с заданием! Нужно написать программу, которая считывает текст из файла и выводит на экран сначала...

Считать текст из файла и вывести на экран сначала вопросительные, а потом восклицательные предложения
доброго времени суток) оч нужна помощь в составление программы!я с++ плохо понимаю(скорее всего вообще не понимаю)=) помогите...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru