08.05.2014, 19:04 | #54 (permalink) |
Member
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
А вторая ошибка вылазит когда я ввожу только пробел в строку, в важем же варианте если я вводил только пробел он говорил что таких букв нет, а в моем выдает ошибку. Как исправить не знаете?
|
08.05.2014, 22:03 | #55 (permalink) |
Member
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
И вправду буквы а нету, но вот со второй ошибкой не справился пока что
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
08.05.2014, 22:06 | #56 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
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,b5: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 (S[i+1]=' ') then b3:=false; end; if not b1 and not b2 and not b3 then begin b4:=false; for i:=1 to L-1 do if (S[i]=',') and not (S[i+1]=' ') then b4:=true; end; if not b1 and not b2 and not b3 and not b4 then begin b5:=false; for i:=2 to L do if (S[i]=' ') and not (S[i-1]=',') then b5:=true; end; if b1 or b2 or b3 or b4 or b5 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. |
|
08.05.2014, 22:23 | #57 (permalink) |
Member
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Так, вначале мы проверяем на корректный ввод строки а именно:
p - признак того что наша строка введена правильно b1 - признак того что длина строки больше 2 символов( но зачем это непонятно) b2 - признак того что рассматриваемый символ строки это не буква русского алфавита b3 - признак того что мы нашли конец слова(после слова есть пробелы) b4 - признак того что мы нашли конец слова(после слова нет пробелов) b5 - признак того что мы нашли слово, а не запятые и пробелы( , , или ,,) Так? |
08.05.2014, 22:38 | #59 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
b1 - признак того, что длина строки больше 1 символа. Хорошенькое "непонятно"! Вы же сами всё время норовите вместо строки ввести пробел и добиться того, чтобы программа такое отрабатывала! Ну а я расширил несколько: согласитесь, что строка в 1 символ не может быть объектом программы. b2 - правильно. Только кроме букв еще допустимыми символами являются запятые и пробелы. b3 - признак того, что есть хотя бы одна комбинация запятая+пробел. b4 - признак того, что нет запятых, после которых отсутствует пробел (исключение комбинаций типа "железный,лизун"). b5 - признак того, что нет пробелов, перед которыми отсутствует запятая (исключение комбинаций типа "железный лизун"). |
|
08.05.2014, 22:41 | #60 (permalink) |
Member
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Сейчас попробую найти почему всегда Некорректный ввод выдает
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|