10 / 10 / 4
Регистрация: 21.11.2009
Сообщений: 187
1

Вывести на экран только те предложения, в которых есть хотя бы одно однобуквенное слово

12.02.2010, 13:01. Показов 1829. Ответов 12
Метки нет (Все метки)

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


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
program lab7;
uses crt;
var
f:text;
str:string[len];
c,b,d:char;
procedure print;        {pe4ataem poka ne natknemsya na konec faila}
begin
write(b,c);
   while (c<>'.') and (c<>'!') and (c<>'?') do
    begin
read(f,c);
write(c);
    end;
    write(' ');
    read(f,b);
end;
 
procedure miss;        {propuskaem predlojenie}
begin
   while (c<>'.') and (c<>'!') and (c<>'?')  do
   read(f,c);
read(f,c);
end;
 
begin
clrscr;
assign(f,'d:\input.txt');                           {otkrivaem, i vivodim predlojeniya s 1 bukvi}
reset(f);
while not eof(f) do
 begin
  read(f,b,c);
  if c=' ' then
   print
  else
   miss;
 end;
close(f);
assign(f,'d:\input.txt');           {otkrivaem i piwem ostatok}
reset(f);
while not eof(f) do
 begin
  read(f,b,c);
  if c<>' ' then
     miss;
 end;
close(f);
readln;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.02.2010, 13:01
Ответы с готовыми решениями:

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

Вывести на экран предложения, в которых есть хотя бы одно слово состоящее из 7 букв
Имеется задача в строке записаны несколько предложений. Каждое предложение заканчивается точкой,...

Дана строка. Вывести на экран слова, внутри которых имеется хотя бы одна буква, с которой слово начинается. [Turbo prolog][есть решение]
predicates ...

Вывести все строки, в которых содержится хотя бы одно слово, оканчивающееся на “com”
4. Ввести с клавиатуры 7 строк, занести их в массив. Вывести все строки, в которых содержится хотя...

12
6 / 6 / 5
Регистрация: 23.03.2009
Сообщений: 17
12.02.2010, 14:05 2
Здесь только процедура вывода на экран

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure ppp;
var
  f: Text;
  i: integer;
  b: boolean;
  s: string;
begin
  assign(f, 'file.txt');
  reset(f);
  while not eof(f) do
  begin
    readln(f, s);
    i := 1;
    b := false;
    while (i <= Length(s)) and (not b) do
    begin
        b := (s[i] in ['a'..'z', 'A'..'Z']) and ((i = 1) or (not (s[i-1] in ['a'..'z', 'A', 'Z']))) and ((i = Length(s)) or (not (s[i+1] in ['a'..'z', 'A', 'Z'])));
        inc(i);
    end;
    if b then writeln(s);
  end;
  close(f);
end;
Однобуквенным словам здесь считается буква слева и справа от которой нет букв.
Можете к двум множествам (из кода ниже) добавить еще символы которые не должны окаймлять букву
Pascal
1
(not (s[i-1] in ['a'..'z', 'A', 'Z']))) and ((i = Length(s)) or (not (s[i+1] in ['a'..'z', 'A', 'Z'])));
1
10 / 10 / 4
Регистрация: 21.11.2009
Сообщений: 187
12.02.2010, 22:26  [ТС] 3
А можно получить непосредственно текст всей программы, а не только одной процедуры?
0
6 / 6 / 5
Регистрация: 23.03.2009
Сообщений: 17
12.02.2010, 22:57 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Процедура есть остается просто добавить основную программу.
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
program lab99;
uses crt;
 
procedure ppp;
var
  f: Text;
  i: integer;
  b: boolean;
  s: string;
begin
  assign(f, 'file.txt');
  reset(f);
  while not eof(f) do
  begin
    readln(f, s);
    i := 1;
    b := false;
    while (i <= Length(s)) and (not b) do
    begin
            b := (s[i] in ['a'..'z', 'A'..'Z']) and ((i = 1) or (not (s[i-1] in ['a'..'z', 'A', 'Z']))) and ((i = Length(s)) or (not (s[i+1] in ['a'..'z', 'A', 'Z'])));
            inc(i);
    end;
    if b then writeln(s);
  end;
  close(f);
end;
 
begin
clrscr;
ppp;
readln;
end.
1
10 / 10 / 4
Регистрация: 21.11.2009
Сообщений: 187
12.02.2010, 23:02  [ТС] 5
Не работает твоя прога она только файл открывает и выводит его на экран.
0
6 / 6 / 5
Регистрация: 23.03.2009
Сообщений: 17
12.02.2010, 23:12 6
Только что проверил на таком файле с таким содержанием

qwe ewqwe eqe
d ewqw w
f
rew 465 r
retttttttttttt tttttttttttttt
gfds t rer
trew t rer t tre
uuuuuuuu543 5uuio 54345


Программа вывела:

d ewqw w
f
rew 465 r
gfds t rer
trew t rer t tre

Все правильно выводит только строке в которых есть однобуквенное слово
1
10 / 10 / 4
Регистрация: 21.11.2009
Сообщений: 187
12.02.2010, 23:18  [ТС] 7
В задании написано что она должна выводить только те ПРЕДЛОЖЕНИЯ в которых есть хоть одно однобуквенное слово.
0
6 / 6 / 5
Регистрация: 23.03.2009
Сообщений: 17
12.02.2010, 23:25 8
Извиняюсь невнимательно прочитал. Как я понял предложением считается последовательность символов из файла после предыдущего предложения или с начала файла и заканчивающаяся одним из символов '.', '!', '?'

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 lab99;
uses crt;
 
procedure ppp;
var
  f: Text;
  i: integer;
  b: boolean;
  s: string;
  c: char;
begin
  assign(f, 'file.txt');
  reset(f);
  s := '';
  while not eof(f) do
  begin
    read(f, c);
    if (c = '.') or (c = '?') or (c = '!') then
    begin
      i := 1;
      b := false;
      while (i <= Length(s)) and (not b) do
      begin
        b := (s[i] in ['a'..'z', 'A'..'Z']) and ((i = 1) or (not (s[i-1] in ['a'..'z', 'A', 'Z']))) and ((i = Length(s)) or (not (s[i+1] in ['a'..'z', 'A', 'Z'])));
        inc(i);
      end;
      if b then writeln(s, c);
      s := '';
    end
    else s := s + c;
  end;
  close(f);
end;
 
begin
clrscr;
ppp;
readln;
end.
1
10 / 10 / 4
Регистрация: 21.11.2009
Сообщений: 187
13.02.2010, 00:27  [ТС] 9
Опять что то не то. Вот текст с которым работаю я. Попробуй его открыть.
Вложения
Тип файла: txt input.txt (105 байт, 14 просмотров)
0
6 / 6 / 5
Регистрация: 23.03.2009
Сообщений: 17
13.02.2010, 00:35 10
На самом деле все то, я же еще в начале писал о том какие символы должны окаймлять букву чтоб она считалась однобуквенным словом. Сейчас изменим так что возможны только первые 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
program lab99;
uses crt;
 
procedure ppp;
var
  f: Text;
  i: integer;
  b: boolean;
  s: string;
  c: char;
  mn: set of char;
begin
  mn := [];
  for i := 0 to 32 do mn := mn + [chr(i)]; 
  assign(f, 'input.txt');
  reset(f);
  s := '';
  while not eof(f) do
  begin
    read(f, c);
    if (c = '.') or (c = '?') or (c = '!') then
    begin
      i := 1;
      b := false;
      while (i <= Length(s)) and (not b) do
      begin
        b := (s[i] in ['a'..'z', 'A'..'Z']) and ((i = 1) or (s[i-1] in mn)) and ((i = Length(s)) or (s[i+1] in mn));
        inc(i);
      end;
      if b then writeln(s, c);
      s := '';
    end
    else s := s + c;
  end;
  close(f);
end;
 
begin
ppp;
readln;
end.
Если какие-то другие символы так же допустимы добавьте из в множество mn
1
10 / 10 / 4
Регистрация: 21.11.2009
Сообщений: 187
14.02.2010, 20:32  [ТС] 11
А можно ее упростить как-то, а то препод сказал что слишком запутанно и это все можно сделать кок-то проще. Он сказал что за основу надо брать то, что однобуквенные слова определяются пробелом+слово из 1 буквы+пробел. Можноли на основе этого упростить программу?
0
6 / 6 / 5
Регистрация: 23.03.2009
Сообщений: 17
14.02.2010, 21:48 12
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Тогда можно убрать множество mn и строчку проверки заменить на
Pascal
1
b := (s[i] in ['a'..'z', 'A'..'Z']) and ((i = 1) or (s[i-1] = ' ')) and ((i = Length(s)) or (s[i+1] = ' '));
И тогда весь код примет вид:
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
program lab99;
uses crt;
 
procedure ppp;
var
  f: Text;
  i: integer;
  b: boolean;
  s: string;
  c: char;
begin
  assign(f, 'input.txt');
  reset(f);
  s := '';
  while not eof(f) do
  begin
    read(f, c);
    if (c = '.') or (c = '?') or (c = '!') then
    begin
      i := 1;
      b := false;
      while (i <= Length(s)) and (not b) do
      begin
        b := (s[i] in ['a'..'z', 'A'..'Z']) and ((i = 1) or (s[i-1] = ' ')) and ((i = Length(s)) or (s[i+1] = ' '));
        inc(i);
      end;
      if b then writeln(s, c);
      s := '';
    end
    else s := s + c;
  end;
  close(f);
end;
 
begin
ppp;
readln;
end.
1
10 / 10 / 4
Регистрация: 21.11.2009
Сообщений: 187
17.02.2010, 17:57  [ТС] 13
Спасибо за старание, но все равно не прокатило. Препод говорит переделать мою первую программу, но как это сделать я не знаю. У кого какие идеи поделитесь пожалуйста.

Добавлено через 20 часов 50 минут
Очень срочно нужна Ваша профессиональная помощь!! Чувствую, что сам не справлюсь!!!

Добавлено через 20 часов 47 минут
Народ выручайте очень нужна Ваша помощь!!!!!!!
0
17.02.2010, 17:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.02.2010, 17:57
Помогаю со студенческими работами здесь

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

Дано предложение. Нужно вывести на экран только первое слово предложения
Дано предложение. Нужно вывести на экран только первое слово предложения

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

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru