09.05.2014, 00:15 | #71 (permalink) |
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. |
09.05.2014, 00:19 | #72 (permalink) |
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. |
09.05.2014, 08:36 | #73 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
А Вы сами давайте - тестируйте, отлаживайте, приобретайте навыки, одним словом - вылезайте уже из пеленок. Хватит этих "я тут написал, Владимир, проверьте". Ибо настоящий программист - это не тот, кто может нарисовать листинг (дело не хитрое), а тот, кто умеет довести программу до ума. Дерзайте!
|
02.06.2014, 23:05 | #75 (permalink) |
Member
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
gj
Владимир, помогите пожалуйста с этой задачей, оказалось что ее надо было решить другим способом, а именно нужно было в множество загнать всю строку потом ее сравнить с эталонным множеством и при этом сделать сортировку чтобы ответ удовлетворял условию(и все это только через множества, без строк)
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
02.06.2014, 23:50 | #76 (permalink) |
Member
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
У меня есть идея но я не знаю как ее записать на паскале
Вводим строку : в Mn1 заносим первое слово, остальное заносим в множество MN2, потом P=p+mn1*mn2, в этом множестве будут храниться потенциальные повторяющиеся согласные, далее мы стираем 1-е слово, (меняется длина строки) значит теперь слово которое было 2-м станет первым и все по такой же схеме, и так до тех пор пока длина строки не обратится в ноль, ну а там уже сравниваем P с эталонным множеством и выводим. Здесь у меня возникло 2 вопроса: Как занести строку во множество И как находить конец слова, хотя я думаю что по запятой. |
03.06.2014, 17:08 | #78 (permalink) |
Member
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Задачу сделал сам)
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|