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


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

Цитата:
Сообщение от pashasnuff Посмотреть сообщение
Found:Set of char это группа каких то символов типа char(как я понимаю, те символы по которым идет перебор
Нет. Это искомое множество символов, для которых выполнено условие задачи, т.е. повторяющиеся в разных словах звонкие согласные.
Цитата:
Сообщение от pashasnuff Посмотреть сообщение
Codes:Array[1..10] of Byte; а вот этот массив не совсем понятно для чего? это 1...10 потому что Sonants:Set of Char=['б','в','г','д','ж','з','л','м','н','р']; тут 10? и именно этот массив помогает нам упорядочить их по алфавиту?
Именно так - этот массив кодов найденных символов позволяет провести упорядочение методом "пузырька". Только затем и нужен. Хотя с моей точки зрения условие выстраивания по алфавиту в данной задаче - абсолютно чужеродное и лишнее. Но раз требуют - приходится на уши вставать.
Vladimir_S вне форума   Ответить с цитированием
Старый 06.05.2014, 20:15   #32 (permalink)
pashasnuff
Member
 
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

C:Char; а вот это, это тот символ который перебирется в данных момент цикла?
pashasnuff вне форума   Ответить с цитированием
Старый 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 вне форума   Ответить с цитированием
Старый 06.05.2014, 20:39   #34 (permalink)
pashasnuff
Member
 
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

С используется для хранения текущего символа, того который проверяем на вхождение в исходное множество?
pashasnuff вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 06.05.2014, 21:46   #36 (permalink)
Robocopp
Новичок
 
Регистрация: 06.05.2014
Сообщений: 5
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Вводится непустая...
Замечание:
Ну вот зачем Вы, сударь, лезете со своей задачей в чужую тему? Видите же, что тема активна, идёт обсуждение.
Ладно, на первый раз - прощается, а вот второго, надеюсь, не будет. Вам создана новая тема: Паскаль. Задача на строку.

Модератор
Robocopp вне форума   Ответить с цитированием
Старый 07.05.2014, 10:12   #37 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от pashasnuff Посмотреть сообщение
А что такое С? так и не допер.
Цитата:
Сообщение от pashasnuff Посмотреть сообщение
С используется для хранения текущего символа, того который проверяем на вхождение в исходное множество?
Хорошо, давайте на примере.
Допустим, ввели строку
'одуревший, дворник, удрал'
Понеслась:
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 не используется, можно ее выкинуть (исправил).
Vladimir_S вне форума   Ответить с цитированием
Старый 07.05.2014, 11:46   #38 (permalink)
pashasnuff
Member
 
Регистрация: 16.04.2014
Сообщений: 51
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

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

Vladimir S, сегодня-завтра я переделаю ваш код, вместо цикла с постусловием я попробую поставить цикл с предусловием, вы сможете проверить?
pashasnuff вне форума   Ответить с цитированием
Старый 07.05.2014, 14:30   #40 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от pashasnuff Посмотреть сообщение
Vladimir S, сегодня-завтра я переделаю ваш код, вместо цикла с постусловием я попробую поставить цикл с предусловием, вы сможете проверить?
Да могу, конечно, но лучше, если Вы сами отладите программу. Полезнее. Для Вас.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

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

Опции темы
Опции просмотра

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

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




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

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