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


Ответ
 
Опции темы Опции просмотра
Старый 09.05.2014, 00:15   #71 (permalink)
pashasnuff
Member
 
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Попробовал сам сделать, сделал полуправильно.
Теперь комбинацию вида "рррр, ррр" обрабатывает хорошо , но и комбинацию "рррр ,ррр" тоже обрабатывает, что не надо
Код:
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.
pashasnuff вне форума   Ответить с цитированием
Старый 09.05.2014, 00:19   #72 (permalink)
pashasnuff
Member
 
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Владимир, кажется вышло проверьте пожалуйста!!!
Код:
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.
pashasnuff вне форума   Ответить с цитированием
Старый 09.05.2014, 08:36   #73 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от pashasnuff Посмотреть сообщение
Владимир, кажется вышло проверьте пожалуйста!!!
А Вы сами давайте - тестируйте, отлаживайте, приобретайте навыки, одним словом - вылезайте уже из пеленок. Хватит этих "я тут написал, Владимир, проверьте". Ибо настоящий программист - это не тот, кто может нарисовать листинг (дело не хитрое), а тот, кто умеет довести программу до ума. Дерзайте!
Vladimir_S вне форума   Ответить с цитированием
Старый 09.05.2014, 09:16   #74 (permalink)
pashasnuff
Member
 
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Она работает! и удовлетворяет всем правилам.
pashasnuff вне форума   Ответить с цитированием
Старый 02.06.2014, 23:05   #75 (permalink)
pashasnuff
Member
 
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию gj

Владимир, помогите пожалуйста с этой задачей, оказалось что ее надо было решить другим способом, а именно нужно было в множество загнать всю строку потом ее сравнить с эталонным множеством и при этом сделать сортировку чтобы ответ удовлетворял условию(и все это только через множества, без строк)
pashasnuff вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 02.06.2014, 23:50   #76 (permalink)
pashasnuff
Member
 
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

У меня есть идея но я не знаю как ее записать на паскале
Вводим строку : в Mn1 заносим первое слово, остальное заносим в множество MN2, потом P=p+mn1*mn2, в этом множестве будут храниться потенциальные повторяющиеся согласные, далее мы стираем 1-е слово, (меняется длина строки) значит теперь слово которое было 2-м станет первым и все по такой же схеме, и так до тех пор пока длина строки не обратится в ноль, ну а там уже сравниваем P с эталонным множеством и выводим.
Здесь у меня возникло 2 вопроса:
Как занести строку во множество
И как находить конец слова, хотя я думаю что по запятой.
pashasnuff вне форума   Ответить с цитированием
Старый 03.06.2014, 01:20   #77 (permalink)
pashasnuff
Member
 
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Сделал задачу завтра выложу, чтобы вы проверили.
pashasnuff вне форума   Ответить с цитированием
Старый 03.06.2014, 17:08   #78 (permalink)
pashasnuff
Member
 
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Задачу сделал сам)
pashasnuff вне форума   Ответить с цитированием
Ads

Яндекс

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


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

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




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

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