|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
06.05.2014, 19:59 | #31 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Именно так - этот массив кодов найденных символов позволяет провести упорядочение методом "пузырька". Только затем и нужен. Хотя с моей точки зрения условие выстраивания по алфавиту в данной задаче - абсолютно чужеродное и лишнее. Но раз требуют - приходится на уши вставать. |
|
06.05.2014, 20:36 | #33 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
Const Sonants:Set of Char=['б','в','г','д','ж','з','л','м','*н','р']; Var S:String; C:Char; i,k,N:Integer; Found:Set of Char; Begin Writeln('Enter the string:'); Readln(S); Writeln; Found:=[]; N:=0; i:=0; Repeat Inc(i); If (S[i] in Sonants) and not (S[i] in Found) then begin C:=S[i]; k:=i; repeat Inc(k); until (S[k]=',') or (k=Length(S)); if S[k]=',' then begin repeat Inc(k); until (S[k]=C) or (k=Length(S)); if S[k]=C then begin Found:=Found+[C]; Inc(N); end; end; end; Until i=Length(S)-1; If N=0 then Writeln('No such symbols') else begin Writeln('Result:'); for C:='б' to 'р' do if C in Found then write(C+' '); end; Readln End. 1. Вводим строку. Строка - это массив символов. 2. Объявляем пустое символьное множество Found и нулевое значение количества искомых символов N. 3. Организуем цикл последовательного перебора символов строки (с увеличением индекса i). Если текущий символ имеется в множестве-константе Sonants и не содержится в множестве Found, то запоминаем его в виде символа С, дальше двигаемся по строке до первой запятой (или до конца строки), и, начиная с символа, следующего за этой запятой, последовательно сравниваем с С все символы строки. Если найдется такой же символ, как и С, то: а) вносим его во множество Found (теперь, если он встретится где-то дальше, он уже не "сыграет") б) Увеличиваем N на единицу. Цикл по i продолжаем, пока строка не кончится. 4. Выводим результат путем организации символьного цикла (не знаю, умеет ли такое этот кретинский АВС) от 'б' до 'р', и если текущий символ имеется в множестве Found, выводим его на экран. Ну а если соответствующих условию задачи символов нет вовсе, то выводим сообщение "Таких символов нет!". |
|
06.05.2014, 20:48 | #35 (permalink) |
Member
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
С используется для хранения текущего символа, того который проверяем на вхождение в исходное множество?
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
06.05.2014, 21:46 | #36 (permalink) | ||
Новичок
Регистрация: 06.05.2014
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Вводится непустая...
|
||
07.05.2014, 10:12 | #37 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Допустим, ввели строку 'одуревший, дворник, удрал' Понеслась: S[1]='о' - не содержится в множестве Sonants, потому пропускается. S[2]='д' - ага! Есть в множестве Sonants и нету в множестве Found, благо последнее пока вовсе пустое. Значит, присваиваем символьной переменной С значение 'д', а потом, с помощью индекса k (значение индекса i фиксируется, чтобы можно было потом к нему вернуться), во-первых, доходим до первой запятой, во-вторых, после этой запятой перебираем символы строки, пока не выполнится условие S[k]=C или пока строка не кончится. Условию соответствует первый символ второго слова. Значит, вносим символ С='д' в множество Found и возвращаемся к глобальному циклу по i. S[3]='у' пропускаем, а вот S[4]='р' - годится. Значит, присваиваем C:=S[4] и повторяем процедуру для него. Ну и т.д. - до конца строки. Это касается символа С в первой части программы, где формируется множество Found. Во второй части (вывод результата) символьная переменная С используется просто как индекс цикла (чтобы не вводить другую переменную, используется С). P.S. Да, в этом варианте программы переменная j не используется, можно ее выкинуть (исправил). |
|
07.05.2014, 14:30 | #40 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|