Показать сообщение отдельно
Старый 06.05.2014, 20:36   #33 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от pashasnuff Посмотреть сообщение
C:Char; а вот это, это тот символ который перебирется в данных момент цикла?
Знаете, я вот тут сообразил, как сильно упростить программу и сделать упорядоченный вывод без использования этого дурацкого массива. Но сразу предупреждаю: это писалось в НОРМАЛЬНОМ Паскале (Free, Turbo) а про задвиги ABC ничего не знаю и знать не хочу:
Код:
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, выводим его на экран. Ну а если соответствующих условию задачи символов нет вовсе, то выводим сообщение "Таких символов нет!".
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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