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


Ответ
 
Опции темы Опции просмотра
Старый 24.05.2012, 07:47   #1 (permalink)
Oksana777
Member
 
Регистрация: 08.05.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question Обработка множеств

Пусть дан текст, заканчивающийся точкой. Текст состоит из слов, разделённых пробелами.Слово представляет собой последовательность латинских букв. Напечатайте те слова, в которые не входит ни одна из букв первого слова.(Попробовала написать программу, но она работает неправильно..исправьте, если что не так)


uses
SysUtils, Windows;

var a:array[1..200]of string;
c:char;
k,i,j,n:integer;
t:boolean;
begin
setconsolecp(1251);
setconsoleoutputcp(1251);
i:=1;
read(c);
while c<>'.' do
begin
if c=' ' then
inc(i)
else
a[i]:=a[i]+c;
read(c);
end;
n:=i;
i:=2;
while i<n do
begin
t:=false;
for j:=1 to length(a[1]) do
begin
for k:=1 to length(a[i])do
if a[i][k]=a[1][j] then
t:=true;
end;
if t=false then
writeln('Cлова, в которые не входит ни одна из букв первого слова: ', a[i]);
readln;
inc(i);
end;
readln
end.
Oksana777 вне форума   Ответить с цитированием

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

Так же решение проблемы можно попробовать найти в одной из похожих тем

Обработка текста
Обработка массивов
Обработка файлов
Обработка txt
Обработка алюминия

Старый 24.05.2012, 20:34   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,343
Сказал(а) спасибо: 288
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Ну во-первых, Вы же сами определяете тип задания, как работа с множествами, а где у Вас в программе множества? В упор не вижу. Во-вторых, я работаю только с DOS-Паскалем, а потому правильность установки виндовских модулей-кодировщиков и возня с кириллицей - Ваша забота. В-третьих, вводить текст побуквенно - тоска смертная, а потому я ввожу и обрабатываю строку целиком. Вот что получилось:
Код:
var
 a:array[1..200] of string;
 i,j,n:integer;
 r:set of char;
 t:boolean;
 s:string;
begin
 for i:=1 to 200 do a[i]:='';
 r:=[];
 writeln('Enter the string:');
 readln(s);
 i:=1;
 j:=0;
 while s[j]<>'.' do
  begin
   inc(j);
   if s[j]=' ' then
    inc(i)
   else
    a[i]:=a[i]+s[j];
  end;
 n:=i;
 for i:=1 to length(a[1]) do
  if not(a[1][i] in r) then r:=r+[a[1][i]];
 writeln('Words containing no letters of the first word:');
 for i:=2 to n do
  begin
   t:=true;
   j:=0;
   repeat
    Inc(j);
    if a[i][j] in r then t:=false;
   until not(t) or (j=length(a[i]));
   if t then write(a[i]+' ');
  end;
 readln
end.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Старый 24.05.2012, 22:06   #3 (permalink)
Oksana777
Member
 
Регистрация: 08.05.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

спасибо...
Oksana777 вне форума   Ответить с цитированием
Старый 26.05.2012, 04:36   #4 (permalink)
Oksana777
Member
 
Регистрация: 08.05.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
Ну во-первых, Вы же сами определяете тип задания, как работа с множествами, а где у Вас в программе множества? В упор не вижу. Во-вторых, я работаю только с DOS-Паскалем, а потому правильность установки виндовских модулей-кодировщиков и возня с кириллицей - Ваша забота. В-третьих, вводить текст побуквенно - тоска смертная, а потому я ввожу и обрабатываю строку целиком. Вот что получилось:
Код:
var
 a:array[1..200] of string;
 i,j,n:integer;
 r:set of char;
 t:boolean;
 s:string;
begin
 for i:=1 to 200 do a[i]:='';
 r:=[];
 writeln('Enter the string:');
 readln(s);
 i:=1;
 j:=0;
 while s[j]<>'.' do
  begin
   inc(j);
   if s[j]=' ' then
    inc(i)
   else
    a[i]:=a[i]+s[j];
  end;
 n:=i;
 for i:=1 to length(a[1]) do
  if not(a[1][i] in r) then r:=r+[a[1][i]];
 writeln('Words containing no letters of the first word:');
 for i:=2 to n do
  begin
   t:=true;
   j:=0;
   repeat
    Inc(j);
    if a[i][j] in r then t:=false;
   until not(t) or (j=length(a[i]));
   if t then write(a[i]+' ');
  end;
 readln
end.
а если у меня случай, что слов, в которых нету букв из первого слова, нет, как вывести сообщение "Таких слов не найдено"?
Oksana777 вне форума   Ответить с цитированием
Старый 26.05.2012, 09:50   #5 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,343
Сказал(а) спасибо: 288
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

Цитата:
Сообщение от Oksana777 Посмотреть сообщение
а если у меня случай, что слов, в которых нету букв из первого слова, нет, как вывести сообщение "Таких слов не найдено"?
Легко. Например, так:
1. Вводим еще одну булевскую переменную, например, t1. Соответсвенно, вместо
Код:
  t:boolean;
пишем
Код:
 t,t1:boolean;
2. Конец программы заменяем на
Код:
 writeln('Words containing no letters of the first word:');
 t1:=true;
 for i:=2 to n do
  begin
   t:=true;
   j:=0;
   repeat
    Inc(j);
    if a[i][j] in r then t:=false;
   until not(t) or (j=length(a[i]));
   if t then
    begin
     write(a[i]+' ');
     t1:=false;
    end;
  end;
 If t1 then writeln('No such words!');
 readln
end.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 26.05.2012, 22:57   #6 (permalink)
Oksana777
Member
 
Регистрация: 08.05.2012
Сообщений: 16
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Спасибо вам огромное, Владимир!
Oksana777 вне форума   Ответить с цитированием
Ads

Яндекс

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

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

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

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




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

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