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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2012, 17:46   #1
Alex_12Proxy
Пользователь
 
Регистрация: 13.12.2011
Сообщений: 30
По умолчанию Здравствуйте!Pascal(Множества)!

Здравствуйте! Мне нужна ваша помощь: Задача:
Дана не пустая последовательность слов из строчных русских букв: между соседними словами - запятая, за последним словом - точка. Напечатать все глухие согласные буквы, которые не входят только в одно слово.

Вот до чего додумался!
Код:
const
  vowels = ['к', 'п', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ'];
  s = 'кирпсич,кфонопля,капитан,кхапелька,пачка,печка,пофчка,кнопка,крцапива,капкан.';
var
  str1: string;
  s1, s2, s3, s4, s5: set of char;
  m, i, k, n, l: integer;
  t: boolean;
  ch: char;
begin
  i := 1;
  l := 0;
  writeln('Глухие согласные', vowels);
  writeln('Исходный текст:', s);
  writeln('Множество всех глухих согласных в строке:');
  s1 := [];
  m := length(s);
  while i <= m do
  begin
    t := false;
    while (i < m) and not (s[i] in ['.', ',']) do
    begin
      ch := s[i];
      if (ch in vowels)  then 
        s1 := s1 + [ch];
      t := true;
      i := i + 1;
    end;
    if t then
      l := l + 1;
    i := i + 1;
  end;
  writeln(s1);
  writeln;
  writeln('Количество слов в строке = ', l);
  writeln;
  str1 := s;  
  m := Pos(',', s);
  delete(str1, 1, m);
  s2 := [];
  for i := 1 to m - 1 do
  begin
    ch := s[i];
    if ch in vowels then
      s2 := s2 + [ch];
  end;
  n := 1;
  k := pos(',', str1);
  while k <> 0 do
  begin
    n := n + 1;
    i := 1; 
    s3 := [];
    while i < k do
    begin
      ch := str1[i];
      if (ch in s1) then
        s3 := s3 + [ch];
      i := i + 1;
    end;
    s2 := s2 * s3;
    delete(str1, 1, k);
    k := pos(',', str1);
  end; 
  s3 := [];
  k := length(str1);
  for i := 1 to k - 1 do
  begin
    ch := str1[i];
    if (ch in s1) then
      s3 := s3 + [ch];
  end;                  
  s2 := s2 * s3;
  s4 := s1 - s2;
  s5 := vowels;
  s5 := s5 - s1;
  writeln('Множество букв, которые входят в каждое слово:');
  writeln(s2);
  writeln;
  writeln('Множество букв, которые входят хотябы в одно слово:');
  writeln(s4);
  writeln;
  writeln('Множество букв, которые не входят ни в одно слово:');
  writeln(s5);
end.
не могу придумать, как правильно составить алгоритм, чтобы выполнялось условие данной задачи! Помогите, пожалуйста, заранее спасибо.
Alex_12Proxy вне форума Ответить с цитированием
Старый 18.05.2012, 15:56   #2
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

можете перефразировать условие?
Цитата:
Напечатать все глухие согласные буквы, которые не входят только в одно слово.
И пример с ответом. А то что-то торможу, и не могу въехать чего требуется
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.
Niro вне форума Ответить с цитированием
Старый 18.05.2012, 17:01   #3
Alex_12Proxy
Пользователь
 
Регистрация: 13.12.2011
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Niro Посмотреть сообщение
можете перефразировать условие?

И пример с ответом. А то что-то торможу, и не могу въехать чего требуется
Я так понимаю, что глухая согласная должна входить в 9 из 10 перечисленных слов.
кирпсич,кфонопля,капитан,кхапелька, пачка,печка,пофчка,кнопка,крцапива, капкан.
Сейчас К и П, входят в каждое слово. Если убрать П из последнего слова, то такой набор слов, должен удовлетворять условиям задачи.
Alex_12Proxy вне форума Ответить с цитированием
Старый 18.05.2012, 17:06   #4
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Цитата:
Сообщение от Alex_12Proxy Посмотреть сообщение
Я так понимаю, что глухая согласная должна входить в 9 из 10 перечисленных слов.
кирпсич,кфонопля,капитан,кхапелька, пачка,печка,пофчка,кнопка,крцапива, капкан.
Сейчас К и П, входят в каждое слово. Если убрать П из последнего слова, то такой набор слов, должен удовлетворять условиям задачи.
а процедуры можно использовать - так проще было бы для понимания!!!
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Старый 18.05.2012, 17:22   #5
Alex_12Proxy
Пользователь
 
Регистрация: 13.12.2011
Сообщений: 30
По умолчанию

Цитата:
Сообщение от denisbrain Посмотреть сообщение
а процедуры можно использовать - так проще было бы для понимания!!!
Можно использовать все что угодно Мне уже поставили оценку за данную прог. Мой учитель, как и я, не смог придумать как ее решить(или не хотел). А мне интересно как она решается, сам не могу додуматься, поэтому прошу помощи у вас!
Alex_12Proxy вне форума Ответить с цитированием
Старый 19.05.2012, 05:10   #6
Niro
Форумчанин
 
Аватар для Niro
 
Регистрация: 23.09.2010
Сообщений: 682
По умолчанию

Вообщем идея такая,

Код:
1) организуете цикл, на каждой итерации (повторении) которого вытаскиваеме очередное слово;
2) организуете цикл по символам вытащенного слова, проверяя входит ли очередной символ в множество глухих согласных;
3) если входит, то еще один цикл, для прохождения по всем остальным словам, за исключением текущего слова, 
в котором проверяете, входит ли этот глухой символ в очередное, слово, если да, то увеличиваем счетчик(z).
4) далее, условие - если общ_количество_слов - счетчик (z)=1, то этот глухой символ входит во все слова кроме одного (и допустим кидаем его в новое множество)
Алгоритм не оптимален, но должен работать
Общее_количество_слов, легко посчить, их будет "количество_запятых -1"
Проще всего признать свою ошибку.
Гораздо труднее еЁ осознать и исправить.

Последний раз редактировалось Niro; 19.05.2012 в 05:15.
Niro вне форума Ответить с цитированием
Старый 19.05.2012, 08:33   #7
Alex_12Proxy
Пользователь
 
Регистрация: 13.12.2011
Сообщений: 30
По умолчанию

Спасибо! Попробую.
Alex_12Proxy вне форума Ответить с цитированием
Старый 19.05.2012, 09:56   #8
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Проще, наверное, так:
1. Массив входных данных - перечень глухих букв.
2. Входные данные - строка с текстом.
3. Написать булеву функцию - водит ли буква в слово.
4. Разбить строку на слова: строка => массив строк длиной N (в строке N слов).
5. Внешний цикл по глухим буквам. Инициализация счетчика слов.
6. Внутренний цикл по словам. Подсчитывается количество TRUE при обращении к функции 3. (вариант: количество FALSE)
7. Если счетчик =N-1 (вариант: 1), буква удовлетворяет условию.
s-andriano вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal. Множества. Corpinccom Помощь студентам 3 20.11.2011 03:41
Множества(Pascal) swillrocker Помощь студентам 0 29.05.2011 11:21
Множества (Pascal) (=Hello=) Помощь студентам 2 27.02.2011 10:53
Pascal. Множества blondinochka Помощь студентам 4 19.12.2009 14:49