• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Задачка на множества, Паскаль

Вложения

  • AA01.webp
    AA01.webp
    9.8 KB · Просмотры: 63
Подскажите пожалуйста какой блок убрать чтобы
железный,лизун
он обрабатывал, это ведь удовлетворяет условию
 
Подскажите пожалуйста какой блок убрать чтобы
железный,лизун
он обрабатывал, это ведь удовлетворяет условию
Пожалуйста. Я-то понял так, что после запятых обязаны быть пробелы, но Вы правы - в условии это не жесткое требование. Тогда так:
Код:
Const
  Sonants:Set of Char=['б','в','г','д','ж','з','л','м','н','р'];
  Letters:Set of Char=['а'..'я']+[',']+[' '];

Var
 S:String;
 C:Char;
 i,k,N,L:integer;
 Found:Set of char;
 p,b1,b2,b3,b4:boolean;

begin    
 p:=false;
 while p=false do
  begin
   Writeln('Введите строку:');
   Readln(S);
   L:=Length(S);
   b1:=false;
   if L<2 then b1:=true;
   if not b1 then
    begin
     b2:=false;
     for i:=1 to L do
      if not (S[i] in Letters) then b2:=true;
    end;
   if not b1 and not b2 then
    begin
     b3:=true;
     for i:=1 to L-1 do
      if S[i]=',' then b3:=false;
    end;
   if not b1 and not b2 and not b3 then
    begin
     b4:=false;
     for i:=2 to L do
      if (S[i]=' ') and not (S[i-1]=',') then b4:=true;
    end;
   if b1 or b2 or b3 or b4 then
     Writeln('Некорректный ввод!')
   else p:=true;
  end;
 Writeln;
 Found:=[];
 N:=1;
 i:=1;
 while (i<L-1) do
  begin
   If (S[i] in Sonants) and not (S[i] in Found) then
    begin
     C:=S[i];
     k:=i;
     while (S[k]<>',') and (k<L) do k:=k+1;
     if S[k]=',' then
      while (S[k]<>C) and (k<L) do k:=k+1;
     if S[k]=C then
      begin
       Found:=Found+[C];
       N:=N+1;
      end;
    end;
   i:=i+1;
  end;

 If N=0 then
  Writeln('Таких букв нет!')
 else
  begin
   Writeln('Результат:');
   for C:='б' to 'р' do
    if C in Found then write(C+' ');
  end;
 Readln
End.
 
Убрал блок b4, убрал все что связано с b4 но все равно ошибка ввода
 
Спасибо Владимир!!!
P.s Вы не думайте что я тупой потому что много спрашивал, я всего лишь хочу понимать))):bsod:
 
Владимир, все отлично работает!!!!!)
 
P.s Вы не думайте что я тупой потому что много спрашивал, я всего лишь хочу понимать)))
Что, несомненно, заслуживает всяческого уважения, в отличие от обычного для лоботрясов "вы тут напишите, я скатаю и сдам".
Успехов!
 
Еще маленькая просьба, можно ли сделать чтобы конструкции типа
город, дорога
тоже считывались?
 
Имеется ввиду чтобы после запятой может быть хоть сколько пробелов(по условию так)
 
Попробовал сам сделать, сделал полуправильно.
Теперь комбинацию вида "рррр, ррр" обрабатывает хорошо , но и комбинацию "рррр ,ррр" тоже обрабатывает, что не надо
Код:
Const
  Sonants:Set of Char=['б','в','г','д','ж','з','л','м','н','р'];
  Letters:Set of Char=['а'..'я']+[',']+[' '];

Var
 S:String;
 C:Char;
 i,k,N,L:integer;
 Found:Set of char;
 p,b1,b2,b3,b4:boolean;

begin    
 p:=false;
 while p=false do
  begin
   Writeln('Введите строку:');
   Readln(S);
   L:=Length(S);
   b1:=false;
   if L<2 then b1:=true;
   if not b1 then
    begin
     b2:=false;
     for i:=1 to L do
      if not (S[i] in Letters) then b2:=true;
    end;
   if not b1 and not b2 then
    begin
     b3:=true;
     for i:=1 to L-1 do
      if S[i]=',' then b3:=false;
    end;
   {if not b1 and not b2 and not b3 then
    begin
     b4:=false;
     for i:=2 to L do
      if (S[i]=' ') and not (S[i-1]=',') then b4:=true;
    end;}
   if b1 or b2 or b3 {or b4} then
     Writeln('Некорректный ввод!')
   else p:=true;
  end;
 Writeln;
 Found:=[];
 N:=1;
 i:=1;
 while (i<L-1) do
  begin
   If (S[i] in Sonants) and not (S[i] in Found) then
    begin
     C:=S[i];
     k:=i;
     while (S[k]<>',') and (k<L) do k:=k+1;
     if S[k]=',' then
      while (S[k]<>C) and (k<L) do k:=k+1;
     if S[k]=C then
      begin
       Found:=Found+[C];
       N:=N+1;
      end;
    end;
   i:=i+1;
  end;

 If N=0 then
  Writeln('Таких букв нет!')
 else
  begin
   Writeln('Результат:');
   for C:='б' to 'р' do
    if C in Found then write(C+' ');
  end;
 Readln
End.
 
Владимир, кажется вышло проверьте пожалуйста!!!
Код:
Const
  Sonants:Set of Char=['б','в','г','д','ж','з','л','м','н','р'];
  Letters:Set of Char=['а'..'я']+[',']+[' '];

Var
 S:String;
 C:Char;
 i,k,N,L:integer;
 Found:Set of char;
 p,b1,b2,b3,b4:boolean;

begin    
 p:=false;
 while p=false do
  begin
   Writeln('Введите строку:');
   Readln(S);
   L:=Length(S);
   b1:=false;
   if L<2 then b1:=true;
   if not b1 then
    begin
     b2:=false;
     for i:=1 to L do
      if not (S[i] in Letters) then b2:=true;
    end;
   if not b1 and not b2 then
    begin
     b3:=true;
     for i:=1 to L-1 do
      if (S[i]=',') and not (S[i-1]=' ') then b3:=false;
    end;
   {if not b1 and not b2 and not b3 then
    begin
     b4:=false;
     for i:=2 to L do
      if (S[i]=' ') and not (S[i-1]=',') then b4:=true;
    end;}
   if b1 or b2 or b3 {or b4} then
     Writeln('Некорректный ввод!')
   else p:=true;
  end;
 Writeln;
 Found:=[];
 N:=1;
 i:=1;
 while (i<L-1) do
  begin
   If (S[i] in Sonants) and not (S[i] in Found) then
    begin
     C:=S[i];
     k:=i;
     while (S[k]<>',') and (k<L) do k:=k+1;
     if S[k]=',' then
      while (S[k]<>C) and (k<L) do k:=k+1;
     if S[k]=C then
      begin
       Found:=Found+[C];
       N:=N+1;
      end;
    end;
   i:=i+1;
  end;

 If N=0 then
  Writeln('Таких букв нет!')
 else
  begin
   Writeln('Результат:');
   for C:='б' to 'р' do
    if C in Found then write(C+' ');
  end;
 Readln
End.
 
Владимир, кажется вышло проверьте пожалуйста!!!
А Вы сами давайте - тестируйте, отлаживайте, приобретайте навыки, одним словом - вылезайте уже из пеленок. Хватит этих "я тут написал, Владимир, проверьте". Ибо настоящий программист - это не тот, кто может нарисовать листинг (дело не хитрое), а тот, кто умеет довести программу до ума. Дерзайте!
 
Она работает! и удовлетворяет всем правилам.
 
gj

Владимир, помогите пожалуйста с этой задачей, оказалось что ее надо было решить другим способом, а именно нужно было в множество загнать всю строку потом ее сравнить с эталонным множеством и при этом сделать сортировку чтобы ответ удовлетворял условию(и все это только через множества, без строк)
 
У меня есть идея но я не знаю как ее записать на паскале
Вводим строку : в Mn1 заносим первое слово, остальное заносим в множество MN2, потом P=p+mn1*mn2, в этом множестве будут храниться потенциальные повторяющиеся согласные, далее мы стираем 1-е слово, (меняется длина строки) значит теперь слово которое было 2-м станет первым и все по такой же схеме, и так до тех пор пока длина строки не обратится в ноль, ну а там уже сравниваем P с эталонным множеством и выводим.
Здесь у меня возникло 2 вопроса:
Как занести строку во множество
И как находить конец слова, хотя я думаю что по запятой.
 
Сделал задачу завтра выложу, чтобы вы проверили.
 
Назад
Сверху